def use_meat_potostew(item1, item2): s = a.Scripts.use_base(item1, item2) # do whatever else u need to do s.add_action(actions.CallFunc(f=a.Callbacks.rm_from_inventory(item1))) s.add_action(actions.CallFunc(f=a.Callbacks.set_item_text(item2, '$objects/stewed_meat'))) s.add_action(actions.CallFunc(f=a.Callbacks.set_var('@meat_in_pot', True))) example.play(s)
def cook_init_helper(s, id): s.add_action(actions.Delay(sec=5), id=id) s.add_action(actions.CallFunc(f=a.openDoor('scummbar_kitchen_door', 'open'))) s.add_action(actions.CallFunc(f=a.Callbacks.add_item('cook', {'pos': '@pos/scummbar_kitchen_door', 'parent': 'walkarea_0'}))) s.add_action(scumm.actions.Walk(tag='cook', pos=(115, 18))) s.add_action(scumm.actions.Turn(tag='cook', dir='n')) s.add_action(actions.Delay(sec=2)) s.add_action(scumm.actions.Walk(tag='cook', pos=vars.pos.scummbar_kitchen_door)) s.add_action(actions.RemoveEntity(tag='cook')) s.add_action(actions.Animate(tag='scummbar_kitchen_door', anim='closed'))
def init_store(): # only if storekeeper in store if example.get('storekeeper').valid: s = Script(uid='_storekeeper') s.add_action( scumm.actions.Say(tag='storekeeper', font='monkey', lines=a.make_lines(['$dialogues/storekeeper/1' ]))) s.add_action(actions.Delay(sec=5)) s.add_action(actions.CallFunc(f=say_random)) s.add_action(actions.CallFunc(f=say_random)) example.play(s)
def init_circus(): example.get('player').follow(False) s = Script(uid='_fettuccini') s.on_kill =cane rv = monkey.engine.read s.add_action(actions.Scroll(pos=(0, 72), cam='maincam', speed=0, relative=False)) s.add_action(id=1, action=actions.CallFunc(f=a.Callbacks.enable_controls(False))) s.add_action(scumm.actions.Walk(tag='player', pos=(178, 9)), after=[1]) # TODO add after debug # if data.circus_data == 0: # s.add_action(asay(1), after=[1]) # s.add_action(bsay(2)) # s.add_action(asay(3)) # s.add_action(bsay(4)) # s.add_action(asay(5)) # s.add_action(bsay(5)) # s.add_action(asay(6)) # s.add_action(bsay(7)) # s.add_action(asay(8)) # s.add_action(bsay(9)) s.add_action(action=actions.CallFunc(f=a.Callbacks.enable_controls(True))) s.add_action(scumm.actions.StartDialogue(dialogue_id='fettuccini')) append_script(s) s.set_loop(100) # -- action.disable_controls # {id = 1}, # -- action.walkto # {id = 2, actor = "guybrush", pos = {178, 9}}, # -- action.say # {id = 3, after = {1}, actor = "circus.purpleclown", lines = {d[1]}}, # -- action.say # {id = 4, actor = "circus.greenclown", lines = {d[2]}}, # -- action.say # {id = 5, actor = "circus.purpleclown", lines = {d[3]}}, # -- action.say # {id = 6, actor = "circus.greenclown", lines = {d[4]}}, # -- action.say # {id = 7, actor = "circus.purpleclown", lines = {d[5]}}, # -- action.say # {id = 8, actor = "circus.greenclown", lines = {d[5]}}, # -- action.say # {id = 9, actor = "circus.purpleclown", lines = {d[6]}}, # -- action.say # {id = 10, actor = "circus.greenclown", lines = {d[7]}}, # -- action.say # {id = 11, actor = "circus.purpleclown", lines = {d[8]}}, # -- action.say # {id = 12, actor = "circus.greenclown", lines = {d[9]}}, # -- action.start_dialogue # {id = 13, dialogue = "fettuccini"}, example.play(s)
def on_click_plank(x, y, pippo): s = a.Scripts.walk('plank') s2 = Script() s2.add_action(actions.Animate(tag='player', anim='push_plank')) s2.add_action(actions.Delay(sec=0.3), id=1) s2.add_action(actions.Animate(tag='player', anim='idle_s'), after=[1]) s2.add_action(actions.Animate(tag='plank', anim='pushed', sync=True), after=[1]) s2.add_action(actions.Animate(tag='plank', anim='idle')) s2.add_action(actions.CallFunc(f=a.Callbacks.set_var("@seagull_on_plank", False)), after=[1]) s2.add_action(actions.Animate(tag='seagull', anim='jump' + str(vars.seagull_jump), sync=True)) s2.add_action(actions.CallFunc(f=a.Callbacks.set_var("@seagull_on_plank", True))) s2.add_action(actions.Animate(tag='seagull', anim='eat')) vars.seagull_jump = 2 if vars.seagull_jump == 1 else 1 s.add_action(actions.RunScript(s2)) example.play(s)
def f(item_id, entity): print('HEY item = ' + item_id) s = Scripts.walk(item_id) if item_id else Script() s.add_action( actions.CallFunc( f=Callbacks.set_pos(data.current_player, room, pos, dir))) s.add_action(actions.ChangeRoom(room=room)) example.play(s)
def on_kitchen_trap(trap): example.remove(trap.id) s = entity.Sprite(model='01/seagull', tag='seagull',pos=[0, 0, 1]) id = example.get('main').add(s) script = Script() script.add_action(actions.Animate(entity_id=id, anim='fly', sync=True)) script.add_action(actions.Animate(entity_id=id, anim='eat')) script.add_action(actions.CallFunc(f=a.Callbacks.set_var("@seagull_on_plank", True))) example.play(script)
def pickup_potostew(item, id): if vars.meat_in_pot: vars.items['meat']['text'] = '$objects/stewed_meat_2' vars.items['potostew']['text'] = '$objects/potostew' s = a.Scripts.walk(item) s.add_action(actions.CallFunc(f=a.Callbacks.pickup_no_remove('meat', id))) example.play(s) else: a.pickup_(item, id)
def say_random(): s = Script(uid='_storekeeper') s.add_action( scumm.actions.Say( tag='storekeeper', font='monkey', lines=a.make_lines( ['$dialogues/storekeeper/' + str(random.randint(2, 9))]))) s.add_action(actions.Delay(sec=5)) s.add_action(actions.CallFunc(f=say_random)) example.play(s)
def pickup_fish(item_id, entity): if item_id in vars.inventory: return s = a.Scripts.walk(item_id) s.add_action(actions.Animate(tag='player', anim='kneel_s')) s.add_action(actions.Delay(sec=0.5)) if vars.seagull_on_plank: s.add_action(scumm.actions.Say(lines=[monkey.engine.read(x) for x in ['$lines/38']], font='monkey', tag='player')) else: s.add_action(actions.Animate(tag='player', anim='idle_s')) s.add_action(actions.CallFunc(f=a.Callbacks.pickup(item_id, entity.id))) example.play(s)
def init_scummbar(): if monkey.engine.previous_room == 'kitchen': s = Script(loop=100, uid='cook') s.add_action(actions.CallFunc(f=a.Callbacks.add_item('cook', {'pos': (115, 18), 'parent': 'walkarea_0'}))) s.add_action(scumm.actions.Turn(tag='cook', dir='n')) s.add_action(actions.Delay(sec=2)) s.add_action(scumm.actions.Walk(tag='cook', pos = vars.pos.scummbar_kitchen_door)) s.add_action(actions.RemoveEntity(tag='cook')) s.add_action(actions.Animate(tag='scummbar_kitchen_door', anim='closed')) cook_init_helper(s, 100) example.play(s) else: s = Script(loop=0, uid='cook') cook_init_helper(s, 0) example.play(s) anim_helper('scummbar_mancomb') anim_helper('scummbar_estevan')
def pane(a, b, c): s = sl.walk_to('plank') s2 = Script() s2.add_action(actions.Animate(tag='player', anim='push_plank')) s2.add_action(actions.Delay(sec=0.3), id=1) s2.add_action(actions.Animate(tag='player', anim='idle_s'), after=[1]) s2.add_action(actions.Animate(tag='plank', anim='pushed', sync=True), after=[1]) s2.add_action(actions.Animate(tag='plank', anim='idle')) ss = example.get('seagull') if ss.valid: s2.add_action(actions.SetVariable("game.seagull_on_plank", False)) s2.add_action( actions.Animate(tag='seagull', anim='jump' + str(mopy.monkey.engine.data.game.seagull_jump), sync=True)) s2.add_action(actions.SetVariable("game.seagull_on_plank", True)) s2.add_action(actions.CallFunc(f=seagull_lands)) mopy.monkey.engine.data.game.seagull_jump = 2 if mopy.monkey.engine.data.game.seagull_jump == 1 else 1 s.add_action(actions.RunScript(s2)) example.play(s)
def player_hit_by_enemy(player): gl = mopy.monkey.engine.data.globals if gl.invincible: return gl.invincible = True if gl.player_mode > 0: gl.player_mode -= 1 player.setModel(gl.player_modes[gl.player_mode]['model']) s = Script() s.seq([ act.Blink(duration=gl.invincible_time, blink_duration=0.2, entity_id=player.id), act.SetVariable(name='globals.invincible', value=False)]) example.play(s) else: player.setState('dead', {}) s = Script() s.seq([ act.Delay(0.5), act.MoveAccelerated(v0=(0, 250), a=(0, -gl.gravity), yStop=0, entity_id=player.id), act.CallFunc(restartMario) ]) example.play(s)
def goto_room(cls, room, pos, dir): return actions.CallFunc(f=Callbacks.goto_room(room, pos, dir))
def set_follow(cls, value): return actions.CallFunc(f=cls._set_follow(value))
def set_timestamp(cls, var): return actions.CallFunc(f=cls._set_timestamp(var))
def set_variable(cls, var, value): return actions.CallFunc(f=cls._set_variable(var, value))
def rm_from_inventory(cls, item_id): return actions.CallFunc(f=Callbacks.rm_from_inventory(item_id))
def update_item(cls, item_id, **kwargs): return actions.CallFunc(f=cls._update_item(item_id, **kwargs))
def remove_item(cls, item_id): return actions.CallFunc(f=cls._remove_item(item_id))
def f(item_id, entity): s = Scripts.walk(item_id) s.add_action(actions.CallFunc(f=openDoor(item_id, 'closed'))) example.play(s)
def enable_controls(cls): return actions.CallFunc(f=Callbacks.enable_controls(True))
def add_item(cls, item_id, args=dict()): return actions.CallFunc(f=cls._add_item(item_id, args))
def disable_controls(cls): return actions.CallFunc(f=Callbacks.enable_controls(False))
def pickup(id, entity_id): s = Scripts.walk(id) # when you pickup something s.add_action(actions.CallFunc(f=Callbacks.pickup(id, entity_id))) return s
def pickup_no_remove(id, entity_id): s = ScriptFactory.walk(id) # when you pickup something s.add_action(actions.CallFunc(f=cf_pickup_no_remove(id, entity_id))) return s
def f(x, y, z): line = l.line dialogue = data.dialogues[l.dialogue_id] context = dict() context['set_text'] = dialogue['text_set'] if 'activate' in line: for node in line['activate']: dialogue['lines'][node]['active'] = True if 'deactivate' in line: for node in line['deactivate']: dialogue['lines'][node]['active'] = False persist = line.get('persist', False) if not persist: line['active'] = False if 'scr' in line or 'script' in line: s = script.Script() s.add_action(scumm.actions.HideDialogue()) if 'scr' in line: for a in line['scr']: id = None after = None iafter = 0 istart = 0 if isinstance(a[0], int): id = a[0] iafter += 1 istart += 1 if isinstance(a[iafter], list): after = a[iafter] istart += 1 action = a[istart] action_factory = dscript.get(action, None) if action_factory is None: print('don''t know action ' + action) exit(1) s.add_action(action_factory(a[istart:], context), id=id, after=after) # if action == 'say': # ts1 = [str(y) for y in a[4:]] # s.add_action(scumm.actions.Say(tag=a[3], font='monkey', lines=[monkey.engine.read(x if x[0]=='$' else set_text+'/'+x) for x in ts1]), id=id, after=after) # elif action == 'sayn': # ts1 = [str(y) for y in a[4:]] # s.add_action(scumm.actions.Say(animate=False, tag=a[3], font='monkey', lines=[monkey.engine.read(x if x[0]=='$' else set_text+'/'+x) for x in ts1]), id=id, after=after) # elif action == 'set': # s.add_action(actions.SetVariable(a[3], a[4])) # elif action == 'set_dialogue_root': # s.add_action(scumm.actions.SetDialogueRoot(a[3], a[4])) # elif action == 'goto': # scripts.actions.goto_room(s, a[3], monkey.engine.read(a[4]), a[5]) elif 'script' in line: if 'args' in line: getattr(scripts, line['script'])(s, *line['args']) else: getattr(scripts, line['script'])(s) if 'next' in line: s.add_action(scumm.actions.StartDialogue(l.dialogue_id, line['next'], True)) else: # check if dialogue has a on_exit script if 'on_exit' in dialogue: s.add_action(actions.CallFunc(f=getattr(scripts, dialogue['on_exit']))) else: s.add_action(scumm.actions.ExitDialogue()) example.play(s)
def add_to_inventory(cls, item_id, qty=1): return actions.CallFunc(f=Callbacks.add_to_inventory(item_id, qty))
def goto_room(s: Script, room_id, pos, dir): print(dir) s.add_action(actions.CallFunc(f=f_goto_room(room_id, pos, dir))) s.add_action(actions.ChangeRoom(room=room_id))
def f(item_id, entity): s = Scripts.walk(item_id) aaa = vars.items[item_id]['anim'] s.add_action( actions.CallFunc(f=Callbacks.set_door(entity.id, aaa, value))) return s