async def main(*args, root, **kwargs): game = get_game() room = game.overworld.room game.overworld.freeze() room.named_objects['grumpylook'].kill() texture = AnimatedTexture( [load_texture(root / 'grumpylook' / 'overworld.png')], fps=1) grumpy = TexturedWalkingSprite( pos=Vector(840, 360), left=texture, right=texture, front=texture, back=texture, speed=200.0, ) room.spawn(grumpy) await display_text(load_text('overworld/lyceum_hall/grumpylook/wait/1')) await grumpy.walk_x(-620) await display_text(load_text('overworld/lyceum_hall/grumpylook/wait/2')) await grumpy.walk_x(-240) grumpy.kill() get_state()['grumpylook_met'] = True game.overworld.unfreeze()
async def main(*, root, script, **kwargs): global DEBUG_SKIP get_game().overworld.freeze() if not DEBUG_SKIP: await display_text( load_text('overworld/lyceum_entrance/flate-interact/1-crying')) await sleep(2) if not DEBUG_SKIP: await display_text( load_text( 'overworld/lyceum_entrance/flate-interact/2-flate-speech')) animation = load_animated_once_texture(root / 'flate' / 'disappear', scale=2) flate = get_game().overworld.room.named_objects['flate'] flate.texture = animation event_id, callback = make_callback() animation.on_finish = callback await wait_for_event(event_id) flate.kill() cariel_overworld = TexturedWalkingSprite( pos=Vector(400, -170), left=load_animated_texture(root / 'cariel' / 'left', scale=2), right=load_animated_texture(root / 'cariel' / 'right', scale=2), front=load_animated_texture(root / 'cariel' / 'front', scale=2), back=load_animated_texture(root / 'cariel' / 'back', scale=2), speed=120.0, ) get_game().overworld.room.spawn(cariel_overworld) await cariel_overworld.walk_y(260) if not DEBUG_SKIP: await display_text( load_text( 'overworld/lyceum_entrance/flate-interact/3-cariel-pre-fight')) await fight(load_enemy_battle_by_name('itt_test_cariel_tutorial')) if not DEBUG_SKIP: if get_state()['itt_test_tutorial'] == 'dead': await display_text( load_text( 'overworld/lyceum_entrance/flate-interact/4-cariel-post-fight-kill' )) else: await display_text( load_text( 'overworld/lyceum_entrance/flate-interact/4-cariel-post-fight-spare' )) await cariel_overworld.walk_y(-260) cariel_overworld.kill() get_game().overworld.unfreeze()
async def main(*, root, **kwargs): get_game().overworld.freeze() await display_text(load_text('overworld/lyceum_5_assembly_hall/1')) await fight(load_enemy_battle_by_name('globby')) await display_text(load_text('overworld/lyceum_5_assembly_hall/2')) await fight(load_enemy_battle_by_name('algebroid')) await fight(load_enemy_battle_by_name('geoma')) await display_text(load_text('overworld/lyceum_5_assembly_hall/3')) await fight(load_enemy_battle_by_name('crier'), on_before_finish = lambda: spawn_water(root)) await display_text(load_text('overworld/lyceum_5_assembly_hall/4')) get_state()['lyceum_presentation_watched'] = True get_game().overworld.unfreeze()
async def buy_item(item_name: str, price: int): item = get_item_by_name(item_name) state = get_state() if state['player_money'] < price: await display_text(load_text('helper/not_enough_money')) return inventory = get_inventory() # TODO: handle the case of full inventory await display_text( load_text('helper/item_bought', fmt={'item': item.inline_name})) give(inventory, item_name) state['player_money'] -= price
async def interact_jump(self): if self._has_jumped: await display_text( DisplayedText([ TextPage("... but Sportick is afraid that you can get an injury"), ]) ) elif self._has_run: await display_text( DisplayedText([ TextPage("... and your attempt is sucessful"), TextPage("You lift yourself up, into the air"), TextPage("Wow, you can jump really high!"), TextPage("You remain in the air for a moment..."), TextPage("But then it's time to fall down"), TextPage("Regretting about the height of your jump, you begin your descent"), TextPage("..."), TextPage("Ouch!"), ]) ) self._has_jumped = True await display_text(load_text('fight/lyceum/sportick/player_jumped')) else: await display_text( DisplayedText([ TextPage("... but you haven't warmed up enough"), ]) )
async def main(root, **kwargs): overworld = get_game().overworld overworld.freeze() await display_text(load_text('overworld/lyceum_2_left/grumpylook')) room = overworld.room grumpylook_object = room.named_objects['grumpylook'] pos = grumpylook_object.pos grumpylook_object.kill() del grumpylook_object player = room.player texture = AnimatedTexture( [load_texture(root / 'grumpylook' / 'overworld.png')], fps=1) grumpylook = TexturedWalkingSprite( pos=pos, left=texture, right=texture, front=texture, back=texture, speed=player.speed, ) room.spawn(grumpylook) await gather(grumpylook.walk_x(-240), player.walk_x(-240)) get_state()['grumpylook_met_at_floor2'] = True overworld.load_room('lyceum_5_left') overworld.unfreeze()
async def branch_genocide(): await display_text(load_text('overworld/lyceum_3_cariel/genocide')) await fight( load_enemy_battle_by_name('cariel_genocide'), on_before_finish=remove_cariel, warning_pos=get_game().overworld.room.state['cariel_sprite'].pos, )
async def main(root, **kwargs): overworld = get_game().overworld overworld.freeze() await display_text(load_text('overworld/lyceum_5_left/grumpylook')) room = overworld.room grumpylook_object = room.named_objects['grumpylook'] pos = grumpylook_object.pos grumpylook_object.kill() del grumpylook_object texture = AnimatedTexture( [load_texture(root / 'grumpylook' / 'overworld.png')], fps=1) grumpylook = TexturedWalkingSprite( pos=pos, left=texture, right=texture, front=texture, back=texture, speed=280, ) room.spawn(grumpylook) await grumpylook.walk_x(700) grumpylook.kill() get_state()['grumpylook_gone'] = True overworld.unfreeze()
async def main(*, root, **kwargs): overworld = get_game().overworld room = overworld.room overworld.freeze() await sleep(0.8) old_flate = room.named_objects['flate'] old_flate.texture = load_texture(root / 'flate' / 'overworld_neutral.png', scale=2) await sleep(0.8) route = determine_route() if route not in ['cheater', 'pacifist', 'neutral', 'genocide']: raise NotImplementedError(f'Unknown route: {repr(route)}') text_name = f'overworld/lyceum_3_mid/flate/{route}' await display_text(load_text(text_name)) flate_texture = AnimatedTexture([old_flate.texture], fps=1) flate = TexturedWalkingSprite( pos=old_flate.pos, left=flate_texture, right=flate_texture, front=flate_texture, back=flate_texture, speed=240, ) room.spawn(flate) old_flate.kill() await flate.walk_x(-500) get_state()['lyceum_3_flate_met'] = True overworld.unfreeze()
async def main(*a, **k): await display_text(load_text('overworld/lyceum_2_geoma/ruler')) give(get_inventory(), 'ruler') named_objects = get_game().overworld.room.named_objects named_objects['ruler'].kill() del named_objects['ruler'] get_state()['took_ruler'] = True
async def process_enemy_attack(self): await super().process_enemy_attack() self._num_attacks += 1 if self._num_attacks == 3: flate_texture = AnimatedTexture( [ load_texture(Path('.') / 'assets' / 'textures' / 'flate' / 'fight.png', scale=4), ], fps=1, ) flate = TexturedWalkingSprite( pos=Vector(-100, 100), left=flate_texture, right=flate_texture, front=flate_texture, back=flate_texture, speed=200.0, ) self.spawn(flate) await flate.walk_x(300.0) await display_text( load_text('fight/lyceum/literallia/flate_intervention')) await flate.walk_x(-300.0) flate.kill() give(get_inventory(), 'nonsense')
async def main(**kwargs): get_game().overworld.freeze() await display_text(load_text('overworld/lyceum_1_sportick/sportick')) await fight(load_enemy_battle_by_name('sportick'), on_before_finish=remove_sportick) get_state()['sportick_fought'] = True get_state()['lyceum_staircase_unlocked'] = True get_game().overworld.unfreeze()
async def main(*args, **kwargs): get_game().overworld.freeze() await display_text(load_text('overworld/lyceum_1_canteen/vendors/1')) menu = ShopMenu() choice = await menu.choose() if choice == 'Yes': await buy_item('candy', price=3) get_game().overworld.unfreeze()
async def main(*, root, **kwargs): overworld = get_game().overworld if get_state()['lyceum_elevator_used']: overworld.freeze() await display_text(load_text('overworld/lyceum_5_right/elevator_1')) overworld.unfreeze() return overworld.freeze() elevator_open_texture = load_texture(root / 'elevator_open.png') elevator_open_sprite = TexturedSprite(pos=Vector(619, 126), texture=elevator_open_texture) overworld.room.spawn(elevator_open_sprite) await sleep(1) await display_text(load_text('overworld/lyceum_5_right/elevator_enter')) get_state()['lyceum_elevator_used'] = True overworld.load_room('lyceum_1_right') overworld.unfreeze()
async def run(self): if not DEBUG_SKIP: await display_text( load_text('fight/pre-lyceum/itt_test_cariel_tutorial')) menu = self.get_main_menu() while True: choice = await menu.choose() action = await self.get_action_for_choice(choice) if action is not None: await action() break get_event_manager().raise_event('fight_finished')
async def pay(coins: int): get_state()['player_money'] += coins await display_text(load_text('helper/got_money', fmt={'coins': str(coins)}))
async def on_spare(self): await display_text(load_text('fight/lyceum/sportick/after_spare/1')) await self._become_grumpylook() await display_text(load_text('fight/lyceum/sportick/after_spare/2')) await self._move_grumpylook_away() await super().on_spare()
async def use_weapon(self, weapon): await super().use_weapon(weapon) if weapon.name == 'nonsense' and not self._can_spare: await display_text(load_text('fight/lyceum/literallia/phd')) self._can_spare = True
async def on_hit(self, killed): await super().on_hit(killed) if not killed: return self.enemy.name = 'Grumpylook' await display_text(load_text('fight/lyceum/sportick/after_fight'))
async def branch_neutral(): await display_text(load_text('overworld/lyceum_3_cariel/neutral')) await fight(load_enemy_battle_by_name('cariel'), on_before_finish=remove_cariel)