예제 #1
0
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()
예제 #2
0
            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()
예제 #3
0
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()
예제 #4
0
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)
예제 #5
0
 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)
예제 #6
0
 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))
예제 #7
0
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()
예제 #8
0
 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))
예제 #9
0
파일: ui.py 프로젝트: kodo-pp/underkate
 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(),
         )
예제 #10
0
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
예제 #11
0
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()
예제 #12
0
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()
예제 #13
0
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,
    )
예제 #14
0
 def finalize(self):
     get_event_manager().subscribe(
         'end_of_cycle',
         Subscriber(lambda *args: get_game().overworld.unfreeze()),
     )
     self.kill()
     self.on_finish_callback()
예제 #15
0
파일: flate.py 프로젝트: kodo-pp/underkate
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()
예제 #16
0
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()
예제 #17
0
    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()
예제 #18
0
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)
예제 #19
0
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)
예제 #20
0
 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
예제 #21
0
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()
예제 #22
0
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()
예제 #23
0
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()
예제 #24
0
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()
예제 #25
0
async def remove_sportick():
    room = get_game().overworld.room
    room.named_objects['sportick'].kill()
    del room.named_objects['sportick']
예제 #26
0
파일: common.py 프로젝트: kodo-pp/underkate
def sleep(delay):
    script = get_game().current_script
    get_pending_callback_queue().fire_after(delay, script)
    yield
예제 #27
0
파일: common.py 프로젝트: kodo-pp/underkate
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)
예제 #28
0
파일: common.py 프로젝트: kodo-pp/underkate
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)
예제 #29
0
파일: common.py 프로젝트: kodo-pp/underkate
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)
예제 #30
0
파일: ui.py 프로젝트: kodo-pp/underkate
 def start_displaying(self):
     get_game().overworld.spawn(self)