def delete(entity): time.sleep(.75) display.clear_text_group('bot_center') #TODO: Let menu take over display.CAMERA['zoom_speed'] = .09 display.CAMERA['next_zoom'] = 4.5 display.CAMERA['camera_move_speed'] = 0.02 #NOTERIETY -= entities.get_entity_group('enemies') events.unregister_event('camera', handle_camera) menu.setup_main_menu() _enemy_amount = len(entities.get_entity_group('enemies')) if _enemy_amount>=3: _loss_string = 'Pirates spread the news of your death...' elif _enemy_amount: _loss_string = 'People think a little less of you now...' else: _loss_string = 'Only the machines saw your death...' display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.25, _loss_string, text_group='bot_center', color=(255, 0, 0, 0), show_for=6, fade_in_speed=4, center=True)
def tick(entity): entity['recoil_time'] -= 1 if not entity['owner_id'] in entities.ENTITIES: entities.unregister_event(entity, 'tick', tick) return False if entity['recoil_time']>0: return False elif not entity['rounds']: if entity['reload_time']: if entity['owner_id'] in entities.ENTITIES and 'player' in entities.get_entity(entity['owner_id']) and entity['reload_time'] == entity['reload_time_max']: display.print_text(0, 0, 'RELOADING', show_for=(entity['reload_time']/display.get_tps())*2, fade_out_speed=255) entity['reload_time'] -= 1 else: entity['reload_time'] = entity['reload_time_max'] entity['recoil_time'] = 1 entity['rounds'] = entity['max_rounds'] entity['firing'] = False entities.unregister_event(entity, 'tick', tick) return False _owner = entities.get_entity(entity['owner_id']) if 'shoot_direction' in entity: _direction = entity['shoot_direction'] elif 'shoot_direction' in _owner: _direction = _owner['shoot_direction'] else: _direction = _owner['direction'] if entity['kickback']: entities.trigger_event(entities.get_entity(entity['owner_id']), 'push', velocity=numbers.velocity(_direction+180, entity['kickback'])) if entity['missile']: bullet.create_missile(_owner['position'][0], _owner['position'][1], _direction, entity['speed'], 'bullet.png', entity['owner_id'], turn_rate=entity['turn_rate'], tracking=entity['tracking'], radius=entity['damage_radius']) if entity['bullet']: bullet.create_bullet(_owner['position'][0], _owner['position'][1], _direction+random.randint(-entity['spray'], entity['spray']), entity['speed'], 'bullet.png', entity['owner_id'], scale=.6, radius=entity['damage_radius']) entity['recoil_time'] = entity['recoil_time_max'] entity['rounds'] -= 1
def boss_victory(entity, victory_text='Boss Defeated'): display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.6, victory_text, color=(255, 255, 255, 255), show_for=1.5, font_size=42, center=True)
def unlock_chaingun(): display.print_text( display.get_window_size()[0] / 2, display.get_window_size()[1] * 0.30, "Unlocked: Ivan's Chaingun", color=(255, 255, 255, 150), font_size=18, center=True, show_for=2, )
def boot(): events.register_event('tick', tick) display.print_text(5, 10, 'flagsdev, 2014', fade_in_speed=2, show_for=4) display.print_text(5, 24, '<b>Vector:Kill: Suicide Ships (Prototype)</b>', color=(200, 200, 200, 0), fade_in_speed=4, show_for=5)
def draw_menu(): _i = 0 display.clear_text_group('menu') for menu_item in MENU: _text = menu_item['text'] if _i == MENU_INDEX: _text = '> '+_text+' <' display.print_text(display.get_window_size()[0]/2, (display.get_window_size()[1]*.65)-(_i*24), _text, show_for=-1, center=True, text_group='menu') _i += 1
def system_input(): if key_held('o'): display.CAMERA['next_zoom'] -= .1 elif key_held('p'): display.CAMERA['next_zoom'] += .1 elif key_held('['): display.CAMERA['next_zoom'] = 2.5 elif key_pressed('p'): _entities = set(entities.ENTITIES.keys()) _i = 0 for entity_group in entities.GROUPS: display.print_text(0, display.get_window_size()[1]-(_i*14), '%s: %s' % (entity_group, len(entities.GROUPS[entity_group])), fade_out_speed=255) _entities -= set(entities.GROUPS[entity_group]) _i += 1 display.print_text(0, display.get_window_size()[1]-(_i*14), 'Total: %s' % len(entities.ENTITIES), fade_out_speed=255) print 'Stranded ents:', len(_entities) for entity in _entities: _entity = entities.ENTITIES[entity] import pprint pp = pprint.PrettyPrinter(indent=4) print pp.pprint(_entity) break _i += 1 for group_name in display.SPRITE_GROUPS: display.print_text(0, display.get_window_size()[1]-(_i*14), '%s: %s' % (group_name, len(display.SPRITE_GROUPS[group_name]['sprites'])), fade_out_speed=255) _i += 1 elif key_pressed('z'): display.screenshot()
def weapon_selection(): global MENU_INDEX, MENU MENU_INDEX = 0 MENU = [{'text': 'None', 'callback': start_arena}, {'text': 'Chaingun', 'callback': lambda: start_arena(weapon='chaingun')}, {'text': 'Back', 'callback': setup_main_menu}] display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.8, 'VECTOR:KILL', color=(0, 255, 0, 100), font_name='Thin Design', font_size=42, center=True, show_for=-1, text_group='logo') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.20, 'Next unlock:', text_group='bot_center', color=(238, 221, 130, 255), show_for=-1, center=True) display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.15, 'Ivan\'s Chaingun', text_group='bot_center', color=(255, 215, 0, 255), show_for=-1, center=True) draw_menu()
def loop(): global TRANSITION_PAUSE, ANNOUNCE, NOTERIETY if entities.get_entity_group('players') and not entities.get_entity_group('enemies') and not entities.get_entity_group('hazards'): if TRANSITION_PAUSE: if ANNOUNCE: ANNOUNCE = False display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.95, 'WAVE CLEARED', color=(200, 200, 200, 255), text_group='bot_center', show_for=2, center=True) TRANSITION_PAUSE -= 1 return False NOTERIETY += LEVEL spawn_enemies()
def loop(): global TRANSITION_PAUSE, ANNOUNCE, NOTERIETY if entities.get_entity_group('players') and not entities.get_entity_group( 'enemies') and not entities.get_entity_group('hazards'): if TRANSITION_PAUSE: if ANNOUNCE: ANNOUNCE = False display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .95, 'WAVE CLEARED', color=(200, 200, 200, 255), text_group='bot_center', show_for=2, center=True) TRANSITION_PAUSE -= 1 return False NOTERIETY += LEVEL spawn_enemies()
def create_player(): _player = ships.create_energy_ship() _player['player'] = True player.register_entity(_player) events.register_event('input', player.handle_input, _player['_id']) events.register_event('camera', player.handle_camera, _player['_id']) entities.register_event(_player, 'score', player.score) entities.register_event(_player, 'delete', player.delete) entities.register_event(_player, 'kill', lambda entity: events.unregister_event('input', player.handle_input)) entities.register_event(_player, 'kill', lambda entity: display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.75, 'Awarded medal:', color=(255, 0, 0, 50), font_size=18, show_for=3.5, fade_in_speed=6, center=True))
def create_player(): _player = ships.create_energy_ship() _player['player'] = True player.register_entity(_player) events.register_event('input', player.handle_input, _player['_id']) events.register_event('camera', player.handle_camera, _player['_id']) entities.register_event(_player, 'score', player.score) entities.register_event(_player, 'delete', player.delete) entities.register_event( _player, 'kill', lambda entity: events.unregister_event('input', player.handle_input)) entities.register_event( _player, 'kill', lambda entity: display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .75, 'Awarded medal:', color=(255, 0, 0, 50), font_size=18, show_for=3.5, fade_in_speed=6, center=True))
def setup_main_menu(): global MENU events.register_event('input', control) events.register_event('loop', battlefield.loop_attract) events.register_event('camera', action_camera) battlefield.create(player=False) display.create_text_group('logo') display.create_text_group('menu') MENU = [{'text': 'Planet', 'callback': start_planet}, {'text': 'Arena', 'callback': weapon_selection}, {'text': 'Quit', 'callback': shutdown}] display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.8, 'VECTOR:KILL', color=(0, 255, 0, 100), font_name='Thin Design', font_size=42, center=True, show_for=-1, text_group='logo') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.20, 'Next unlock:', text_group='bot_center', color=(238, 221, 130, 255), show_for=-1, center=True) display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.15, 'Ivan\'s Chaingun', text_group='bot_center', color=(255, 215, 0, 255), show_for=-1, center=True) draw_menu()
def spawn_enemies(): global TRANSITION_PAUSE, ANNOUNCE, LEVEL if LEVEL == 5: _boss = ships.create_ivan(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _details = [ '<b>Stolovitzky, Ivan</b>', '<i>Suicidal maniac</i>', 'Wanted for: <b>Intergalactic Manslaughter</b>' ] display.camera_zoom(1.5) display.camera_focus_on(_boss['position']) display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .75, 'CRAZY IVAN', font_size=42, text_group='bot_center', center=True, color=(0, 240, 0, 50), fade_in_speed=24, show_for=3) _i = 0 for detail_text in _details: display.print_text(display.get_window_size()[0] * .6, display.get_window_size()[1] * .65 - (24 * _i), detail_text, font_size=20, text_group='bot_center', color=(240, 240, 240, 0), fade_in_speed=(len(_details) - _i) * 2, show_for=3) _i += 1 clock.hang_for(180) entities.register_event(_boss, 'kill', lambda entity: progress.unlock_chaingun()) TRANSITION_PAUSE = 240 ANNOUNCE = True LEVEL += 1 return False if not LEVEL % 4: for i in range(1 * (LEVEL - 1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) TRANSITION_PAUSE = 120 ANNOUNCE = True LEVEL += 1 return False for i in range(1 * (LEVEL - 1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _eyemine_spawn_point = (random.randint(worlds.get_size()[0] * .25, worlds.get_size()[0] * .75), random.randint(worlds.get_size()[1] * .25, worlds.get_size()[1] * .75)) for i in range(random.randint(2, 4) * LEVEL): _rand_distance = 350 + (120 * LEVEL) _x_mod = random.randint(-_rand_distance, _rand_distance) _y_mod = random.randint(-_rand_distance, _rand_distance) ships.create_eyemine(x=_eyemine_spawn_point[0] + _x_mod, y=_eyemine_spawn_point[1] + _y_mod) _move = random.randint(0, 1) if _move: _move_direction = random.randint(0, 359) for i in range(random.randint(1, 2) * LEVEL): _x, _y = random.randint(worlds.get_size()[0] * .25, worlds.get_size()[0] * .75), random.randint( worlds.get_size()[1] * .25, worlds.get_size()[1] * .75) _turret = ships.create_missile_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if LEVEL >= 3: for i in range(random.randint(1, 2) * (int(round(LEVEL * .25)))): _x, _y = random.randint(worlds.get_size()[0] * .25, worlds.get_size()[0] * .75), random.randint( worlds.get_size()[1] * .25, worlds.get_size()[1] * .75) _turret = ships.create_gun_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if 1 * (LEVEL - 1): display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .95, 'ENEMY FIGHTERS INBOUND', color=(0, 240, 0, 255), text_group='bot_center', show_for=1.5, center=True) LEVEL += 1 ANNOUNCE = True TRANSITION_PAUSE = 120
def score(entity, target_id, amount=0, text=''): display.print_text(0, 10+(len(display.LABELS)*15), '%s (<b>+%s</b>)' % (text, amount), color=(0, 240, 0, 255), show_for=1.5) if target_id in entities.ENTITIES and abs(entity['shoot_direction']-numbers.direction_to(entity['position'], entities.get_entity(target_id)['position']))<45: display.print_text(0, 10+(len(display.LABELS)*15), 'FRENZY!!!', color=(0, 240, 0, 255), show_for=1.5)
def spawn_enemies(): global TRANSITION_PAUSE, ANNOUNCE, LEVEL if LEVEL == 5: _boss = ships.create_ivan(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _details = ['<b>Stolovitzky, Ivan</b>', '<i>Suicidal maniac</i>', 'Wanted for: <b>Intergalactic Manslaughter</b>'] display.camera_zoom(1.5) display.camera_focus_on(_boss['position']) display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.75, 'CRAZY IVAN', font_size=42, text_group='bot_center', center=True, color=(0, 240, 0, 50), fade_in_speed=24, show_for=3) _i = 0 for detail_text in _details: display.print_text(display.get_window_size()[0]*.6, display.get_window_size()[1]*.65-(24*_i), detail_text, font_size=20, text_group='bot_center', color=(240, 240, 240, 0), fade_in_speed=(len(_details)-_i)*2, show_for=3) _i += 1 clock.hang_for(180) entities.register_event(_boss, 'kill', lambda entity: progress.unlock_chaingun()) TRANSITION_PAUSE = 240 ANNOUNCE = True LEVEL += 1 return False if not LEVEL % 4: for i in range(1*(LEVEL-1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) TRANSITION_PAUSE = 120 ANNOUNCE = True LEVEL += 1 return False for i in range(1*(LEVEL-1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _eyemine_spawn_point = (random.randint(worlds.get_size()[0]*.25, worlds.get_size()[0]*.75), random.randint(worlds.get_size()[1]*.25, worlds.get_size()[1]*.75)) for i in range(random.randint(2, 4)*LEVEL): _rand_distance = 350+(120*LEVEL) _x_mod = random.randint(-_rand_distance, _rand_distance) _y_mod = random.randint(-_rand_distance, _rand_distance) ships.create_eyemine(x=_eyemine_spawn_point[0]+_x_mod, y=_eyemine_spawn_point[1]+_y_mod) _move = random.randint(0, 1) if _move: _move_direction = random.randint(0, 359) for i in range(random.randint(1, 2)*LEVEL): _x, _y = random.randint(worlds.get_size()[0]*.25, worlds.get_size()[0]*.75), random.randint(worlds.get_size()[1]*.25, worlds.get_size()[1]*.75) _turret = ships.create_missile_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if LEVEL >= 3: for i in range(random.randint(1, 2)*(int(round(LEVEL*.25)))): _x, _y = random.randint(worlds.get_size()[0]*.25, worlds.get_size()[0]*.75), random.randint(worlds.get_size()[1]*.25, worlds.get_size()[1]*.75) _turret = ships.create_gun_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if 1*(LEVEL-1): display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.95, 'ENEMY FIGHTERS INBOUND', color=(0, 240, 0, 255), text_group='bot_center', show_for=1.5, center=True) LEVEL += 1 ANNOUNCE = True TRANSITION_PAUSE = 120