def load_map(name): _map = {} with open('%s.dat' % name, 'r') as _file: _x = 0 _y = 0 for line in _file.readlines(): _x = 0 for tile in [int(c) for c in line if not c == '\n']: _map['%s,%s' % (_x*100, _y*100)] = {'solid': False} if tile == 1: _map['%s,%s' % (_x*100, _y*100)]['solid'] = True _tile = entities.create_entity('tiles_foreground') _map['%s,%s' % (_x*100, _y*100)]['tile'] = _tile['_id'] _sprite = effects.create_image(_x*100, _y*100, 'wall_full.png') _id = _sprite['_id'] entities.register_event(_tile, 'delete', lambda _entity: entities.delete_entity_via_id(_id)) _sprite['sprite'].image.anchor_x = 0 _sprite['sprite'].image.anchor_y = 0 _x += 1 _y += 1 return _map
def create_flea(x=0, y=0, hazard=False): if hazard: _group = 'hazards' else: _group = 'enemies' _entity = create(sprite_name='diamond_body.png', group=_group, x=x, y=y, acceleration=.4, speed=30, max_velocity=30, turn_rate=0.8) _entity['current_target'] = None _entity['fire_rate'] = 0 _entity['fire_rate_max'] = 20 _entity['weapon_id'] = weapons.create(_entity['_id'], rounds=3, recoil_time=15, speed=30, tracking=False)['_id'] effects.create_image(_entity['position'][0], _entity['position'][1], 'diamond_turret.png', parent_entity=_entity) effects.create_image(_entity['position'][0], _entity['position'][1], 'diamond_drive.png', parent_entity=_entity, rotate_by=3) entities.register_event(_entity, 'moved', set_direction) entities.register_event(_entity, 'tick', tick_energy_ship) entities.register_event(_entity, 'tick', tick_flea) entities.register_event(_entity, 'tick', tick_turret) entities.register_event(_entity, 'shoot', lambda entity: entities.trigger_event(entities.get_entity(_entity['weapon_id']), 'shoot')) return _entity
def create_image(x, y, sprite_name, parent_entity=None, rotate_by=0, rotate_with_parent=False, background=False, scale=1): _entity = entities.create_entity(group='effects') if parent_entity: _entity['parent_entity'] = parent_entity['_id'] else: _entity['parent_entity'] = None _entity['rotate_by'] = rotate_by _entity['rotate_with_parent'] = rotate_with_parent movement.register_entity(_entity, x=x, y=y, no_tick=True) entities.register_event(_entity, 'loop', tick_image) if parent_entity: entities.register_event(parent_entity, 'delete', lambda parent_entity: entities.delete_entity(_entity)) if background == 1: sprites.register_entity(_entity, 'effects_background', sprite_name, scale=scale) elif background == 2: sprites.register_entity(_entity, 'effects_background_bottom', sprite_name, scale=scale) else: sprites.register_entity(_entity, 'effects_foreground', sprite_name, scale=scale) return _entity
def create(owner_id, rounds=1, recoil_time=16, reload_time=35, kickback=0, spray=8, turn_rate=.15, speed=30, bullet=False, missile=True, hitscan=False, tracking=False, damage_radius=50): _entity = entities.create_entity(group='weapons') _entity['owner_id'] = owner_id _entity['rounds'] = rounds _entity['max_rounds'] = rounds _entity['recoil_time'] = 1 _entity['recoil_time_max'] = recoil_time _entity['reload_time'] = reload_time _entity['reload_time_max'] = reload_time _entity['bullet'] = bullet _entity['missile'] = missile _entity['hitscan'] = hitscan _entity['tracking'] = tracking _entity['firing'] = False _entity['turn_rate'] = turn_rate _entity['speed'] = speed _entity['damage_radius'] = damage_radius _entity['kickback'] = kickback _entity['spray'] = spray entities.create_event(_entity, 'shoot') entities.register_event(_entity, 'shoot', shoot) entities.register_event(entities.get_entity(owner_id), 'delete', lambda owner_entity: entities.delete_entity(_entity)) return _entity
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, 'delete', player.delete)
def create_laser(x, y, direction, owner_id, damage=12, length=20): _vel = numbers.velocity(direction, length) for i in range(length): _vel = numbers.velocity(direction, 3*(length*i)) _bullet = create(x+_vel[0], y+_vel[1], direction, 0, 'laser.png', owner_id, damage=damage, life=10) entities.trigger_event(_bullet, 'set_rotation', degrees=direction) entities.register_event(_bullet, 'hit', hit_laser)
def create_gravity_well(x=0, y=0, kill_engines=True, strength=0.1, min_distance=3000): _entity = entities.create_entity(group='items') _entity['position'] = (x, y) _entity['min_distance'] = min_distance _entity['strength'] = strength _entity['kill_engines'] = kill_engines entities.register_event(_entity, 'tick', _gravity_well)
def create_missile_turret(x=0, y=0): _entity = create(x=x, y=y, group='hazards', sprite_name='eyemine_body.png', speed=5, acceleration=1, max_velocity=5) _entity['weapon_id'] = weapons.create(_entity['_id'], rounds=3, recoil_time=20, tracking=True, turn_rate=.02)['_id'] entities.register_event(_entity, 'shoot', lambda entity: entities.trigger_event(entities.get_entity(_entity['weapon_id']), 'shoot')) entities.register_event(_entity, 'tick', tick_turret) return _entity
def shoot(entity, direction=-1): if entity['firing']: return False entities.register_event(entity, 'tick', tick) if not direction == -1: entity['shoot_direction'] = direction entity['firing'] = True
def create_player(x=0, y=0): _player = ships.create_energy_ship(x=x, y=y) _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'], min_zoom=5, max_zoom=14, max_enemy_distance=10000, center_distance=5000) entities.register_event(_player, 'delete', player.delete) entities.register_event(_player, 'hit_edge', lambda entity: entities.trigger_event(entity, 'hit', damage=100)) entities.trigger_event(_player, 'push', velocity=(30, 30))
def create_ivan_large(x=0, y=0): _entity = create(sprite_name='boss3.png', group='hazards', scale=2.0, x=x, y=y, acceleration=.4, speed=0, max_velocity=0, turn_rate=0.8, death_time=40, hp=1000) _entity['current_target'] = None _entity['fire_rate'] = 0 _entity['fire_rate_max'] = 20 _entity['collision_radius'] = 1000 _entity['cycle'] = 'shoot' _entity['shoot_cycle_max'] = 3 _entity['shoot_cycle'] = 3 _entity['spawn_cycle_max'] = 5 _entity['spawn_cycle'] = 5 _entity['warmup_cycles'] = 1 _entity['weapon_id'] = weapons.create(_entity['_id'], rounds=25, recoil_time=1, reload_time=30, damage_radius=40, speed=140, missile=False, bullet=True)['_id'] timers.register_entity(_entity) effects.create_image(_entity['position'][0], _entity['position'][1], 'boss3_core.png', scale=2.0, parent_entity=_entity, background=False) effects.create_image(_entity['position'][0], _entity['position'][1], 'boss3_shield1.png', scale=2.0, rotate_by=-1, parent_entity=_entity, background=False) effects.create_image(_entity['position'][0], _entity['position'][1], 'boss3_shield2.png', scale=2.0, rotate_by=0.5, parent_entity=_entity, background=False) entities.trigger_event(_entity, 'create_timer', repeat=-1, time=100, repeat_callback=lambda entity: entities.trigger_event(_entity, 'shoot')) entities.register_event(_entity, 'moved', set_direction) entities.register_event(_entity, 'kill', boss_victory) entities.register_event(_entity, 'dying', boss_dying) entities.register_event(_entity, 'explode', boss_explode) entities.register_event(_entity, 'shoot', ivan_cycles) return _entity
def register(entity): entity['flags'] = {} entities.create_event(entity, 'set_flag') entities.create_event(entity, 'delete_flag') entities.create_event(entity, 'flag_add') entities.create_event(entity, 'flag_sub') entities.create_event(entity, 'flag_changed') entities.register_event(entity, 'set_flag', set_flag) entities.register_event(entity, 'delete_flag', delete_flag) entities.register_event(entity, 'flag_add', flag_add) entities.register_event(entity, 'flag_sub', flag_sub) entities.register_event(entity, 'save', save)
def create_eyemine(x=0, y=0, max_explode_velocity=40): _entity = create(x=x, y=y, group='hazards', sprite_name='eyemine_body.png', speed=35, acceleration=0.1, max_velocity=35) _entity['max_explode_velocity'] = max_explode_velocity effects.create_image(_entity['position'][0], _entity['position'][1], 'eyemine_subbody.png', parent_entity=_entity, rotate_by=3, background=True) effects.create_image(_entity['position'][0], _entity['position'][1], 'eyemine_eye1.png', parent_entity=_entity, background=False) effects.create_image(_entity['position'][0], _entity['position'][1], 'eyemine_eye2.png', parent_entity=_entity, rotate_with_parent=True, background=False) entities.register_event(_entity, 'tick', tick_eyemine) entities.register_event(_entity, 'hit', lambda _entity, target_id, **kwargs: target_id in entities.ENTITIES and entities.trigger_event(_entity, 'set_direction', direction=numbers.direction_to(_entity['position'], entities.get_entity(target_id)['position']))) entities.register_event(_entity, 'hit', lambda _entity, target_id, **kwargs: ai.track_target(_entity, target_id)) entities.register_event(_entity, 'hit_edge', lambda entity: entities.trigger_event(entity, 'kill')) ai.guard(_entity) return _entity
def create(sprite_name, x=0, y=0, group=None, speed=10, scale=1, turn_rate=0.1, acceleration=0.5, max_velocity=15, death_time=10, hp=10): _soldier = entities.create_entity() _soldier['hp'] = hp _soldier['death_timer'] = -1 _soldier['death_timer_max'] = death_time _soldier['speed'] = speed _soldier['turn_rate'] = turn_rate _soldier['collision_radius'] = 0 if group: entities.add_entity_to_group(group, _soldier) else: print 'WARNING: Entity has no group!' movement.register_entity(_soldier, x=x, y=y) sprites.register_entity(_soldier, 'ships', sprite_name, scale=scale) entities.create_event(_soldier, 'shoot') entities.create_event(_soldier, 'shoot_alt') entities.create_event(_soldier, 'hit') entities.create_event(_soldier, 'kill') entities.create_event(_soldier, 'score') entities.create_event(_soldier, 'dying') entities.create_event(_soldier, 'explode') entities.register_event(_soldier, 'tick', tick) entities.register_event(_soldier, 'dying', destroy) entities.register_event(_soldier, 'explode', explode) entities.register_event(_soldier, 'hit', damage) entities.trigger_event(_soldier, 'set_minimum_velocity', velocity=[-max_velocity, -max_velocity]) entities.trigger_event(_soldier, 'set_maximum_velocity', velocity=[max_velocity, max_velocity]) entities.trigger_event(_soldier, 'set_acceleration', acceleration=acceleration) entities.trigger_event(_soldier, 'set_friction', friction=0) return _soldier
def create_gun_turret(x=0, y=0): _entity = create(x=x, y=y, group='hazards', sprite_name='eyemine_body.png', speed=5, acceleration=1, max_velocity=5) _entity['weapon_id'] = weapons.create(_entity['_id'], rounds=10, recoil_time=2, reload_time=40, damage_radius=40, speed=140, missile=False, bullet=True)['_id'] entities.register_event(_entity, 'shoot', lambda entity: entities.trigger_event(entities.get_entity(_entity['weapon_id']), 'shoot')) entities.register_event(_entity, 'tick', tick_turret) return _entity
def create_missile(x, y, direction, speed, sprite_name, owner_id, life=3000, scale=.2, turn_rate=.15, tracking=True, drunk=True, radius=50): _bullet = create(x, y, direction, speed, sprite_name, owner_id, life=life, turn_rate=turn_rate, radius=radius) _owner = entities.get_entity(_bullet['owner_id']) _bullet['sprite'].anchor_x = 0 _bullet['sprite'].anchor_y = sprites.get_size(_bullet['sprite'])[1]/2 entities.trigger_event(_bullet, 'set_scale', scale=scale) entities.register_event(_bullet, 'tick', tick_missile) entities.register_event(_bullet, 'hit', hit_missile) if drunk: entities.register_event(_bullet, 'tick', tick_drunk) if tracking: _bullet['target_id'] = ai.find_target(_owner, max_distance=1600) if _bullet['target_id']: _target = entities.get_entity(_bullet['target_id']) entities.register_event(_bullet, 'tick', tick_track) entities.register_event(_target, 'delete', lambda target: _bullet['_id'] in entities.ENTITIES and entities.unregister_event(_bullet, 'tick', tick_track)) if 'player' in _owner and _owner['player']: effects.create_particle(_target['position'][0], _target['position'][1], 'crosshair.png', background=False, scale_rate=.95, fade_rate=.98, spin=random.choice([-3, -6, 3, 6])) else: _bullet['target_id'] = None _bullet['engine_power'] = 100 return _bullet
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 register(entity, use_system_event=None, use_entity_event='tick'): entity['timers'] = [] entities.create_event(entity, 'create_timer') entities.create_event(entity, 'clear_timers') entities.register_event(entity, 'create_timer', create_timer) entities.register_event(entity, 'clear_timers', clear_timers) if use_system_event: events.register_event(use_system_event, lambda: tick(entity)) else: entities.register_event(entity, use_entity_event, tick)
def create(x, y, direction, speed, sprite_name, owner_id, damage=3, life=30, turn_rate=.15, radius=50): _entity = entities.create_entity() movement.register_entity(_entity, x=x, y=y, direction=direction, speed=speed, turn_rate=turn_rate) sprites.register_entity(_entity, 'effects_foreground', sprite_name) entities.create_event(_entity, 'hit') entities.create_event(_entity, 'destroy') entities.register_event(_entity, 'tick', tick) entities.register_event(_entity, 'tick', tick_bullet) entities.register_event(_entity, 'destroy', destroy) entities.register_event(_entity, 'hit_edge', lambda entity: entities.trigger_event(entity, 'destroy')) entities.trigger_event(_entity, 'set_friction', friction=0) entities.trigger_event(_entity, 'thrust') entities.add_entity_to_group('bullets', _entity) _entity['life'] = life _entity['owner_id'] = owner_id _entity['damage'] = damage _entity['damage_radius'] = radius _entity['enemy_sprite_groups'] = [name for name in entities.GROUPS if not name in entities.get_entity(_entity['owner_id'])['_groups'] and not name in entities.IGNORE_ENTITY_GROUPS] return _entity
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_particle(x, y, sprite_name, background=True, scale=1, rotation=0, friction=0, scale_min=0.15, scale_max=5, direction=0, speed=0, scale_rate=1.0, fade_rate=1.0, spin=0, flashes=-1, flash_chance=0, streamer=False, streamer_chance=0.3, swerve_rate=0, swerve_speed=25, force_smooth_draw=False): _entity = entities.create_entity() _entity['scale_rate'] = scale_rate _entity['scale_min'] = scale_min _entity['scale_max'] = scale_max _entity['fade_rate'] = fade_rate _entity['flash_chance'] = flash_chance _entity['flashes'] = flashes _entity['spin'] = spin _entity['streamer'] = streamer _entity['swerve_rate'] = swerve_rate _entity['swerve_speed'] = swerve_speed _entity['swerve_speed_max'] = swerve_speed _entity['NO_BOUNCE'] = True if streamer: _entity['sprite_name'] = sprite_name _entity['background'] = background _entity['streamer_chance'] = streamer_chance movement.register_entity(_entity, x=x, y=y) entities.add_entity_to_group('effects', _entity) entities.trigger_event(_entity, 'set_direction', direction=direction) entities.trigger_event(_entity, 'set_speed', speed=speed) entities.trigger_event(_entity, 'thrust') if _entity['speed'] or force_smooth_draw: _smooth_draw = True else: _smooth_draw = False entities.register_event(_entity, 'moved', lambda entity, **kwargs: entities.trigger_event(entity, 'redraw')) #TODO: Hack entities.register_event(_entity, 'moved', lambda entity, **kwargs: entities.unregister_event(entity, 'tick', movement.tick)) if background: sprites.register_entity(_entity, 'effects_background', sprite_name, scale=scale, smooth_draw=_smooth_draw) else: sprites.register_entity(_entity, 'effects_foreground', sprite_name, scale=scale, smooth_draw=_smooth_draw) if swerve_rate: _entity['sprite'].opacity = 0 entities.register_event(_entity, 'tick', tick_particle) entities.trigger_event(_entity, 'set_friction', friction=friction) entities.trigger_event(_entity, 'set_rotation', degrees=rotation) return _entity
def create_energy_ship(x=0, y=0): _entity = create(x=x, y=y, group='players', sprite_name='ball.png', speed=19, acceleration=.3, max_velocity=30, turn_rate=0.5, death_time=35, hp=60) _entity['weapon_id'] = weapons.create(_entity['_id'], rounds=35, recoil_time=0, reload_time=48, kickback=3, damage_radius=65, spray=3, speed=200, missile=False, bullet=True)['_id'] _entity['alt_weapon_id'] = weapons.create(_entity['_id'], rounds=6, recoil_time=5, reload_time=28, speed=60, tracking=True)['_id'] timers.register_entity(_entity) entities.register_event(_entity, 'tick', tick_energy_ship) entities.register_event(_entity, 'shoot', lambda entity, direction=0: entities.trigger_event(entities.get_entity(_entity['weapon_id']), 'shoot', direction=direction)) entities.register_event(_entity, 'shoot_alt', lambda entity: entities.trigger_event(entities.get_entity(_entity['alt_weapon_id']), 'shoot')) return _entity
def guard(entity): register_entity(entity) entities.register_event(entity, 'tick', tick_guard)
def register(entity, surface=None, animated=True, char='X', fore_color=(255, 255, 255)): entity['tile'] = { 'char': char, 'x': -1, 'y': -1, 'fore_color': fore_color, 'back_color': None, 'surface': surface, 'flags': {}, 'animation': {} } entities.create_event(entity, 'set_char') entities.create_event(entity, 'set_position') entities.create_event(entity, 'set_fore_color') entities.create_event(entity, 'set_back_color') entities.create_event(entity, 'tint_fore_color') entities.create_event(entity, 'tint_back_color') entities.create_event(entity, 'set_surface') entities.create_event(entity, 'draw') entities.create_event(entity, 'flag') entities.create_event(entity, 'unflag') entities.create_event(entity, 'animate') entities.create_event(entity, 'stop_animation') entities.register_event(entity, 'set_char', set_char) entities.register_event(entity, 'set_position', set_tile_position) entities.register_event(entity, 'set_fore_color', set_fore_color) entities.register_event(entity, 'set_back_color', set_back_color) entities.register_event(entity, 'tint_fore_color', tint_fore_color) entities.register_event(entity, 'tint_back_color', tint_back_color) entities.register_event(entity, 'set_surface', set_surface) entities.register_event(entity, 'save', save) if animated: entities.register_event(entity, 'tick', tick) entities.register_event(entity, 'draw', draw) entities.register_event(entity, 'flag', flag_tile) entities.register_event(entity, 'unflag', unflag_tile) entities.register_event(entity, 'animate', animate) entities.register_event(entity, 'stop_animation', cancel_animation)
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 create_ivan(x=0, y=0): _entity = create(sprite_name='boss1.png', group='enemies', x=x, y=y, acceleration=.4, speed=3, max_velocity=3, turn_rate=0.8, death_time=40, hp=100) _entity['current_target'] = None _entity['fire_rate'] = 0 _entity['fire_rate_max'] = 20 _entity['weapon_id'] = weapons.create(_entity['_id'], rounds=25, recoil_time=1, reload_time=30, damage_radius=40, speed=140, missile=False, bullet=True)['_id'] entities.register_event(_entity, 'moved', set_direction) entities.register_event(_entity, 'tick', tick_energy_ship) entities.register_event(_entity, 'tick', tick_flea) entities.register_event(_entity, 'tick', tick_turret) entities.register_event(_entity, 'kill', boss_victory) entities.register_event(_entity, 'dying', boss_dying) entities.register_event(_entity, 'explode', boss_explode) entities.register_event(_entity, 'shoot', lambda entity: entities.trigger_event(entities.get_entity(_entity['weapon_id']), 'shoot')) return _entity
def track_target(entity, target_id): register_entity(entity) entities.register_event(entity, 'tick', tick_track) entity['current_target'] = target_id
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 register_entity(entity, sprite_group, sprite_name, scale=1, smooth_draw=True): if display.RABBYT: entity['image'] = sprite_name else: entity['image'] = display.load_image(sprite_name) entity['sprite'] = display.create_sprite(entity['image'], 0, 0, sprite_group) entity['sprite_group'] = sprite_group entity['last_rotation'] = 0 entity['next_rotation'] = 0 entity['rotation_speed'] = 0 entity['last_scale'] = scale entity['next_scale'] = scale entity['smooth_draw'] = smooth_draw entity['scale_only'] = False entities.create_event(entity, 'redraw') entities.create_event(entity, 'set_scale') entities.create_event(entity, 'set_rotation') entities.create_event(entity, 'rotate_by') entities.create_event(entity, 'fade_by') entities.register_event(entity, 'tick', tick) entities.register_event(entity, 'redraw', lambda _entity: entities.register_event(_entity, 'loop', loop)) entities.register_event(entity, 'delete', display.delete_sprite) entities.register_event(entity, 'set_scale', set_scale) entities.register_event(entity, 'set_rotation', set_rotation) entities.register_event(entity, 'rotate_by', rotate_by) entities.register_event(entity, 'fade_by', fade_by) entities.register_event(entity, 'loop', loop)
def register(entity, surface=None, animated=True, char='X', fore_color=(255, 255, 255)): entity['tile'] = {'char': char, 'x': -1, 'y': -1, 'fore_color': fore_color, 'back_color': None, 'surface': surface, 'flags': {}, 'animation': {}} entities.create_event(entity, 'set_char') entities.create_event(entity, 'set_position') entities.create_event(entity, 'set_fore_color') entities.create_event(entity, 'set_back_color') entities.create_event(entity, 'tint_fore_color') entities.create_event(entity, 'tint_back_color') entities.create_event(entity, 'set_surface') entities.create_event(entity, 'draw') entities.create_event(entity, 'flag') entities.create_event(entity, 'unflag') entities.create_event(entity, 'animate') entities.create_event(entity, 'stop_animation') entities.register_event(entity, 'set_char', set_char) entities.register_event(entity, 'set_position', set_tile_position) entities.register_event(entity, 'set_fore_color', set_fore_color) entities.register_event(entity, 'set_back_color', set_back_color) entities.register_event(entity, 'tint_fore_color', tint_fore_color) entities.register_event(entity, 'tint_back_color', tint_back_color) entities.register_event(entity, 'set_surface', set_surface) entities.register_event(entity, 'save', save) if animated: entities.register_event(entity, 'tick', tick) entities.register_event(entity, 'draw', draw) entities.register_event(entity, 'flag', flag_tile) entities.register_event(entity, 'unflag', unflag_tile) entities.register_event(entity, 'animate', animate) entities.register_event(entity, 'stop_animation', cancel_animation)
def register_entity(entity): entity['timers'] = [] entities.create_event(entity, 'create_timer') entities.register_event(entity, 'create_timer', create_timer) entities.register_event(entity, 'tick', tick)