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 func(*a, **k): async def clear(): self.manager.clear() get_game().overworld.freeze() await fight(load_enemy_battle_by_name(enemy_name), on_after_enter=clear) 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 _play_transition_animation(pos=None): animation = FightEnterAnimation( narrow_down_length=0.5, remain_length=0.8, pos=get_game().overworld.room.player.pos if pos is None else pos, initial_scale=10.0, ) await play_animation(animation, where=get_game().overworld.room)
def _spawn(self): madec = Madec( pos=self.position, speed=self.speed.length(), direction=self.speed.normalized(), lifetime=10.0, manager=self.manager, ) get_game().overworld.room.spawn(madec) self.manager.register(madec)
def _on_interact_somewhere(self, *args): del args if not self.is_alive(): return if not get_game().overworld.is_frozen(): player = get_game().overworld.room.player if self.get_hitbox_with_position().colliderect( player.get_extended_hitbox()): self.on_interact() get_event_manager().subscribe('key:confirm', Subscriber(self._on_interact_somewhere))
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()
def on_interact(self, *args): del args if get_game().overworld.room is not self: return if not get_game().overworld.is_frozen(): affected_rect = get_game( ).overworld.room.player.get_extended_hitbox() for watcher in self.trigger_event_watchers: if affected_rect.colliderect(watcher.trigger.rect): watcher.pass_event(Event('interact')) get_event_manager().subscribe('key:confirm', Subscriber(self.on_interact))
def maybe_hit_player(self, damage): if not self._can_hit_player(): return now = time.monotonic() self._last_time_player_hit = now state = get_state() state['player_hp'] = max(0, state['player_hp'] - damage) logger.debug('Player was hit, {} hp left', state['player_hp']) if state['player_hp'] == 0: logger.info('Player died') from underkate.death_screen.mode import DeathScreenMode # TODO: fix this shit get_game().current_game_mode = DeathScreenMode( game = get_game(), heart_pos = self.get_current_coords(), )
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 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 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 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, )
def finalize(self): get_event_manager().subscribe( 'end_of_cycle', Subscriber(lambda *args: get_game().overworld.unfreeze()), ) self.kill() self.on_finish_callback()
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(*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()
def update(self, time_delta): if self.manager.is_frozen(): return super().update(time_delta) self._time_since_birth += time_delta if self._time_since_birth > self.lifetime: self.kill() return if self.is_touching_player() and not get_game().overworld.is_frozen(): enemy_name = rd.choice(['algebroid', 'geoma']) async def func(*a, **k): async def clear(): self.manager.clear() get_game().overworld.freeze() await fight(load_enemy_battle_by_name(enemy_name), on_after_enter=clear) get_game().overworld.unfreeze() script = SimpleScript(func) self.manager.freeze() script()
async def play_animation(animated_sprite, where=None): if where is None: where = get_game().current_game_mode where.spawn(animated_sprite) event_id, callback = make_callback() animated_sprite.on_stop = callback animated_sprite.start_animation() await wait_for_event(event_id)
async def main(*args, **kwargs): if get_state().get('grumpylook_met', False): return game = get_game() room = game.overworld.room grumpy = room.named_objects.get('grumpylook') if grumpy is None: return grumpy.pos.y = min(474.0, room.player.pos.y)
def __init__(self, texture, pos, slowdown_factor=1.0, where=None): self.rect = texture.get_rect() self.rect.center = pos.ints() self.texture = texture self.slowdown_factor = slowdown_factor if where is None: self.where = get_game().current_game_mode else: self.where = where
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 fight(battle, on_after_enter=async_none, on_before_finish=async_none, warning_pos=None): game = get_game() if warning_pos is None: warning_pos = game.overworld.room.player.pos await _play_transition_animation(warning_pos) await on_after_enter() game.current_game_mode = Fight(battle) game.current_game_mode.run() await game.current_game_mode.async_show() await wait_for_event('fight_finished') await game.current_game_mode.async_hide() await on_before_finish() game.current_game_mode = game.overworld await game.current_game_mode.async_show()
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 main(*, root, **kwargs): overworld = get_game().overworld room = overworld.room overworld.freeze() cariel = respawn_cariel(root, room) cariel.direction = 'down' await room.player.walk_x(-50) await sleep(0.8) await cariel.walk_y(room.player.pos.y - cariel.pos.y) cariel.direction = 'right' await sleep(0.8) state = get_state() if state['genocide_route_possible']: await branch_genocide() elif state['pacifist_route_possible']: await branch_pacifist() else: await branch_neutral() overworld.unfreeze()
async def remove_sportick(): room = get_game().overworld.room room.named_objects['sportick'].kill() del room.named_objects['sportick']
def sleep(delay): script = get_game().current_script get_pending_callback_queue().fire_after(delay, script) yield
async def display_text(text): get_game().current_game_mode.spawn(text) event_id = get_event_manager().unique_id() text.on_finish_callback = lambda: get_event_manager().raise_event(event_id, None) text.initialize() await wait_for_event(event_id)
def wait_for_any_event(): script = get_game().current_script get_event_manager().subscribe_to_any_event(Subscriber(lambda event, arg: script((event, arg)))) return (yield)
def wait_for_event(event_id): script = get_game().current_script get_event_manager().subscribe(event_id, Subscriber(lambda event, arg: script((event, arg)))) return (yield)
def start_displaying(self): get_game().overworld.spawn(self)