def message(text, fore_color=(255, 255, 255), back_color=(10, 10, 10), time=-1, center=False, vert_center=False): global MESSAGES_ACTIVE _entity = entities.create_entity(group='ui_effects_freetick') if time == -1: _time = 30 * constants.SHOW_MESSAGES_FOR else: _time = time timers.register(_entity, use_system_event='draw') flags.register(_entity) entities.create_event(_entity, 'draw') entities.register_event(_entity, 'draw', _message_draw) entities.register_event(_entity, 'delete', _message_delete) entities.trigger_event(_entity, 'create_timer', time=_time, exit_callback=entities.delete_entity) entities.trigger_event(_entity, 'set_flag', flag='text', value=text) entities.trigger_event(_entity, 'set_flag', flag='index', value=MESSAGES_ACTIVE) entities.trigger_event(_entity, 'set_flag', flag='center', value=center) entities.trigger_event(_entity, 'set_flag', flag='vert_center', value=vert_center) MESSAGES_ACTIVE += 1 return _entity
def _create(x, y, name, char, weight, item_type, equip_to=None, fore_color=(255, 255, 255), kind=None): _entity = entities.create_entity(group='items') _entity['stats'] = {'name': name, 'display_name': name, 'type': item_type, 'weight': weight, 'owner': None, 'kind': kind, 'equip_to': equip_to, 'in_container': None} movement.register(_entity) flags.register(_entity) tile.register(_entity, surface='items', char=char, fore_color=fore_color) entities.create_event(_entity, 'collision_with_solid') entities.create_event(_entity, 'collision_with_entity') entities.create_event(_entity, 'get_interactions') entities.create_event(_entity, 'get_actions') entities.create_event(_entity, 'get_display_name') entities.create_event(_entity, 'seen') entities.register_event(_entity, 'get_display_name', get_display_name) entities.trigger_event(_entity, 'set_position', x=x, y=y) return _entity
def printer(x, y, text, center=True, fore_color=(255, 255, 255), moving=True, move_direction=90, back_color=(10, 10, 10), speed_mod=1.0, show_mod=1.0, free_tick=True): if '--no-fx' in sys.argv: return _entity = entities.create_entity(group='ui_effects' + ('_freetick' * free_tick)) timers.register(_entity) flags.register(_entity) entities.create_event(_entity, 'draw') entities.register_event(_entity, 'draw', _printer_draw) entities.trigger_event(_entity, 'set_flag', flag='text', value=text) entities.trigger_event(_entity, 'set_flag', flag='text_index', value=0) entities.trigger_event(_entity, 'set_flag', flag='text_center', value=center) entities.trigger_event(_entity, 'set_flag', flag='text_pos', value=(x, y)) entities.trigger_event(_entity, 'set_flag', flag='text_orig_pos', value=(x, y)) entities.trigger_event(_entity, 'set_flag', flag='text_fore_color', value=fore_color) entities.trigger_event(_entity, 'set_flag', flag='text_back_color', value=back_color) entities.trigger_event(_entity, 'set_flag', flag='move_direction', value=move_direction) entities.trigger_event(_entity, 'create_timer', time=12*speed_mod, repeat=len(text), repeat_callback=_printer_tick) entities.trigger_event(_entity, 'create_timer', time=((10*speed_mod)*len(text))+(60*show_mod), exit_callback=_printer_exit) if moving: entities.trigger_event(_entity, 'create_timer', time=25, repeat=len(text)/2, repeat_callback=_printer_move) return _entity
def _create_squad(faction_name, x, y): _faction = FACTIONS[faction_name] _squad = entities.create_entity(group='squads') _squad.update({ 'members': set(), 'faction': faction_name, 'leader': None, 'member_info': {}, 'camp_id': None, 'squad_id': _faction['squad_id'], 'task': None, 'brain': None, 'position_map': {}, 'member_position_maps': {}, 'member_los_maps': {}, 'coverage_positions': set(), 'known_targets': set(), 'known_squads': set(), 'position_map_scores': {}, 'meta': { 'is_squad_combat_ready': False, 'is_squad_mobile_ready': False, 'is_squad_overwhelmed': False, 'is_squad_forcing_surrender': False, 'has_camp': False, 'wants_artifacts': False, 'wants_weapons': False }, 'weights': {} }) timers.register(_squad, use_entity_event='logic') movement.register(_squad, x, y) entities.create_event(_squad, 'meta_change') entities.create_event(_squad, 'raid') entities.create_event(_squad, 'update_position_map') entities.create_event(_squad, 'new_squad_member') entities.register_event(_squad, 'raid', handle_raid) entities.register_event(_squad, 'update_position_map', ai_squad_director.create_position_map) _faction['squads'][_faction['squad_id']] = _squad['_id'] #entity['ai']['meta']['is_squad_leader'] = True #register_with_squad(entity, _faction['squad_id']) _faction['squad_id'] += 1 entities.register_event(_squad, 'new_squad_member', update_squad_member_snapshot) entities.register_event(_squad, 'new_squad_member', lambda e, **kwargs: update_group_status(e)) entities.register_event( ai_flow.FLOW, 'start_of_turn', lambda e, squad_id: handle_start_of_turn(_squad, squad_id)) logging.info('Faction \'%s\' created new squad.' % faction_name) return _squad
def create(x, y, title=None, surface='ui_menus', click_offset=(0, 0)): global ACTIVE_MENU _entity = entities.create_entity(group='ui_menus') _entity.update({ 'items': {}, 'active': True, 'index': 0, 'item_id': 0, 'surface': surface, 'click_offset': click_offset, 'x': x, 'y': y }) entities.create_event(_entity, 'reactivated') if title: add_title(_entity, title) _entity['index'] = 1 ACTIVE_MENU = _entity return _entity
def _create(): _entity = entities.create_entity(group='systems') #timers.register(_entity) entities.create_event(_entity, 'finish') return _entity
def start(): global PROCESSOR _entity = entities.create_entity(group='systems') PROCESSOR = _entity timers.register(_entity, use_system_event='post_process')
def boot(): global DIRECTOR _entity = entities.create_entity(group='systems') DIRECTOR = _entity events.register_event('input', handle_keyboard_input) timers.register(_entity)
def boot(): global FLOW _entity = entities.create_entity() entities.create_event(_entity, 'start_of_turn') entities.create_event(_entity, 'end_of_turn') FLOW = _entity
def boot(): global FLOW _entity = entities.create_entity() entities.create_event(_entity, 'start_of_turn') entities.create_event(_entity, 'end_of_turn') FLOW = _entity
def _create_animal(x, y, health, speed, name, vision=65, faction='Mutants', has_ai=False, char='m', fore_color=(255, 255, 255)): _entity = entities.create_entity(group='life') entities.create_event(_entity, 'damage') entities.create_event(_entity, 'did_damage') entities.create_event(_entity, 'receive_memory') entities.create_event(_entity, 'handle_corpse') entities.create_event(_entity, 'finish_turn') tile.register(_entity, surface='life', char=char, fore_color=fore_color) movement.register(_entity, collisions=True) timers.register(_entity) stats.register(_entity, health, speed, vision, name=name, kind='animal') nodes.register(_entity) items.register(_entity) flags.register(_entity) noise.register(_entity) skeleton.register(_entity) ai_factions.register(_entity, faction) if has_ai: ai.register_animal(_entity) _entity['ai']['is_npc'] = True entities.register_event(_entity, 'finish_turn', finish_turn) entities.create_event(_entity, 'get_and_store_item') entities.create_event(_entity, 'get_and_hold_item') entities.create_event(_entity, 'reload') entities.create_event(_entity, 'shoot') entities.create_event(_entity, 'damage') entities.register_event(_entity, 'post_tick', ai_visuals.cleanup) entities.register_event(_entity, 'get_and_store_item', get_and_store_item) entities.register_event(_entity, 'get_and_hold_item', get_and_hold_item) entities.register_event(_entity, 'reload', reload_weapon) entities.register_event(_entity, 'shoot', shoot_weapon) entities.register_event(_entity, 'heard_noise', handle_heard_noise) entities.register_event(_entity, 'position_changed', lambda e, **kwargs: entities.trigger_event(e, 'create_noise', volume=25, text='?', owner_can_hear=False, callback=lambda t, x, y: entities.trigger_event(t, 'update_target_memory', target_id=_entity['_id'], key='last_seen_at', value=[x, y]))) #entities.register_event(_entity, 'position_changed', lambda e, **kwargs: ai_visuals.add_to_moved_life(e)) entities.register_event(_entity, 'push', lambda e, **kwargs: movement.sub_move_cost(e)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'create_holder', name='weapon', max_weight=10) entities.trigger_event(_entity, 'create_holder', name='backpack', max_weight=10) return _entity
def _create_node(node_grid, x, y): _entity = entities.create_entity() flags.register(_entity) tile.register(_entity, surface='node_grid', fore_color=(255, 0, 255)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'set_flag', flag='owner', value=None) entities.register_event(_entity, 'flag_changed', handle_node_flag_change) node_grid[(x, y)] = _entity['_id'] UNCLAIMED_NODES.add((x, y))
def _create(x, y, surface='effects', group='effects'): _entity = entities.create_entity() movement.register(_entity) tile.register(_entity, surface=surface) timers.register(_entity) entities.add_entity_to_group(_entity, group) entities.trigger_event(_entity, 'set_position', x=x, y=y) return _entity
def _create_node(node_grid, x, y): _entity = entities.create_entity() flags.register(_entity) tile.register(_entity, surface='node_grid', fore_color=(255, 0, 255)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'set_flag', flag='owner', value=None) entities.register_event(_entity, 'flag_changed', handle_node_flag_change) node_grid[(x, y)] = _entity['_id'] UNCLAIMED_NODES.add((x, y))
def boot(): global CURSOR CURSOR = entities.create_entity(group='systems') tile.register(CURSOR, surface='ui') events.register_event('camera', logic) events.register_event('mouse_moved', handle_mouse_movement) events.register_event('mouse_pressed', handle_mouse_pressed) events.register_event('input', handle_keyboard_input) events.register_event('draw', lambda *args: entities.trigger_event(CURSOR, 'draw')) entities.trigger_event(CURSOR, 'set_position', x=constants.MAP_VIEW_WIDTH/2, y=constants.MAP_VIEW_HEIGHT/2)
def create_context(x, y, text, callback): _entity = entities.create_entity(group='contexts') _entity['text'] = text _entity['callback'] = callback tile.register(_entity, surface='effects', char='!', fore_color=(0, 200, 0)) timers.register(_entity, use_system_event='logic') entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'animate', animation=['!', ' '], repeat=-1) entities.trigger_event(_entity, 'create_timer', time=120, exit_callback=entities.delete_entity) return _entity
def _create_squad(faction_name, x, y): _faction = FACTIONS[faction_name] _squad = entities.create_entity(group='squads') _squad.update({'members': set(), 'faction': faction_name, 'leader': None, 'member_info': {}, 'camp_id': None, 'squad_id': _faction['squad_id'], 'task': None, 'brain': None, 'position_map': {}, 'member_position_maps': {}, 'member_los_maps': {}, 'coverage_positions': set(), 'known_targets': set(), 'known_squads': set(), 'position_map_scores': {}, 'meta': {'is_squad_combat_ready': False, 'is_squad_mobile_ready': False, 'is_squad_overwhelmed': False, 'is_squad_forcing_surrender': False, 'has_camp': False, 'wants_artifacts': False, 'wants_weapons': False}, 'weights': {}}) timers.register(_squad, use_entity_event='logic') movement.register(_squad, x, y) entities.create_event(_squad, 'meta_change') entities.create_event(_squad, 'raid') entities.create_event(_squad, 'update_position_map') entities.create_event(_squad, 'new_squad_member') entities.register_event(_squad, 'raid', handle_raid) entities.register_event(_squad, 'update_position_map', ai_squad_director.create_position_map) _faction['squads'][_faction['squad_id']] = _squad['_id'] #entity['ai']['meta']['is_squad_leader'] = True #register_with_squad(entity, _faction['squad_id']) _faction['squad_id'] += 1 entities.register_event(_squad, 'new_squad_member', update_squad_member_snapshot) entities.register_event(_squad, 'new_squad_member', lambda e, **kwargs: update_group_status(e)) entities.register_event(ai_flow.FLOW, 'start_of_turn', lambda e, squad_id: handle_start_of_turn(_squad, squad_id)) logging.info('Faction \'%s\' created new squad.' % faction_name) return _squad
def _create_node(entity, x, y, draw_path=False, passive=True, action_time=0, name='Node', callback_on_touch=True): global LAST_CLICKED_POS _path_index = -1 if LAST_CLICKED_POS: _node_positions = [(p['node']['x'], p['node']['y']) for p in entity['node_grid']['nodes'].values() if not p['node']['name'] == chr(31)] for node_id in entity['node_grid']['path'][:]: _last_node = entity['node_grid']['nodes'][node_id] if LAST_CLICKED_POS in _last_node['node']['path']: _move_cost = 0 for pos in _last_node['node']['path'][_last_node['node']['path'].index(LAST_CLICKED_POS):]: _move_cost += movement.get_move_cost(entity) if _move_cost < action_time and pos in _node_positions: return _path_index = entity['node_grid']['path'].index(node_id) entity['node_grid']['nodes'][entity['node_grid']['path'][_path_index]]['node']['action_time'] = action_time break LAST_CLICKED_POS = None _node = entities.create_entity(group='nodes') _node['x'] = x _node['y'] = y _node['name'] = name _node['draw_path'] = draw_path _node['path'] = [] _node['owner_id'] = entity['_id'] _node['action_time'] = action_time _node['busy_pos'] = [] tile.register(_node, surface='nodes') entities.trigger_event(_node, 'set_position', x=x, y=y) if _path_index == -1: _path_index = len(entity['node_grid']['path']) entity['node_grid']['nodes'][_node['_id']] = {'node': _node, 'passive': passive, 'callback': None, 'call_on_touch': callback_on_touch} entity['node_grid']['path'].insert(_path_index, _node['_id']) return _node
def create_context(x, y, text, callback): _entity = entities.create_entity(group='contexts') _entity['text'] = text _entity['callback'] = callback tile.register(_entity, surface='effects', char='!', fore_color=(0, 200, 0)) timers.register(_entity, use_system_event='logic') entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'animate', animation=['!', ' '], repeat=-1) entities.trigger_event(_entity, 'create_timer', time=120, exit_callback=entities.delete_entity) return _entity
def create(): global MAP, FADER worlds.create('strategy') words.reset() display.create_surface('background') display.create_surface('map', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('map_markers', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('map_squads', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('map_path', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('ui_bar', width=constants.WINDOW_WIDTH, height=constants.WINDOW_HEIGHT-constants.STRAT_MAP_HEIGHT) display.fill_surface('ui_bar', (30, 30, 30)) display.blit_background('background') register_input() entities.create_entity_group('life', static=True) entities.create_entity_group('items', static=True) entities.create_entity_group('factions', static=True) entities.create_entity_group('squads', static=True) entities.create_entity_group('systems') FADER = entities.create_entity() timers.register(FADER) fade_in() _grid = {} _color_map = {} MAP = {'grid': _grid, 'color_map': _color_map, 'astar_map': None, 'astar_weight_map': numpy.ones((constants.STRAT_MAP_HEIGHT/constants.MAP_CELL_SPACE, constants.STRAT_MAP_WIDTH/constants.MAP_CELL_SPACE))} for x in range(constants.STRAT_MAP_WIDTH/constants.MAP_CELL_SPACE): for y in range(constants.STRAT_MAP_HEIGHT/constants.MAP_CELL_SPACE): _grid[x, y] = {'owned_by': None, 'is_ownable': False, 'squads': [], 'income': .025} worldgen.generate() unregister_input() world_action._start_battle(attacking_squads=[entities.get_entity_group('squads')[0]], defending_squads=[entities.get_entity_group('squads')[1]])
def create(x, y, text, buttons=None, title='Dialog'): global ACTIVE_DIALOG if '--no-fx' in sys.argv: return _entity = entities.create_entity(group='ui_dialogs') _entity.update({'text': text, 'title': title, 'buttons': buttons, 'x': x, 'y': y}) entities.create_event(_entity, 'reactivated') ACTIVE_DIALOG = _entity return _entity
def _create(name, squad_size_range, base_size_range, enemy_factions): _entity = entities.create_entity(group='factions') _faction = {'members': set(), 'squads': {}, 'squad_id': 1, 'faction_memory': {}, 'brains': [], 'meta': {}, 'money': 1200, 'squad_size_range': squad_size_range, 'base_size_range': base_size_range, 'enemies': enemy_factions, 'relations': {}} for faction_name in FACTIONS: _other_faction = FACTIONS[faction_name] if name in _other_faction['enemies']: _other_score = 0 else: _other_score = 25 if faction_name in enemy_factions: _score = 0 else: _score = 25 _other_faction['relations'][name] = _other_score _faction['relations'][faction_name] = _score _faction['faction_memory'][faction_name] = {'squads': {}} _other_faction['faction_memory'][name] = {'squads': {}} _entity.update(_faction) entities.create_event(_entity, 'add_member') entities.create_event(_entity, 'faction_raid_incoming') entities.create_event(_entity, 'broadcast') entities.register_event(_entity, 'add_member', add_member) entities.register_event(_entity, 'broadcast', handle_broadcast) entities.register_event(_entity, 'faction_raid_incoming', handle_raid_incoming) FACTIONS[name] = _entity return _entity
def _start_battle(attacking_squads=[], defending_squads=[]): global FADER create() _width, _height, _node_grid, _node_sets, _weight_map, _tile_map, _solids, _fsl, _trees, _inside, _lights, _spawns = mapgen_arena.generate(200, 200) _zone = zones.create('swamps', _width, _height, _node_grid, _node_sets, _weight_map, _tile_map, _solids, _fsl, _trees, _inside, _lights, _spawns) _attacking_spawn_x, _attacking_spawn_y = random.choice(list(_spawns['attacking'])) _attacking_spawn_positions = [(x, y) for x, y in shapes.circle(_attacking_spawn_x, _attacking_spawn_y, 5) if not (x, y) in _solids] for squad_id in attacking_squads: _squad = entities.get_entity(squad_id) for member_id in _squad['members']: _member = entities.get_entity(member_id) _spawn_x, _spawn_y = _attacking_spawn_positions.pop(random.randint(0, len(_attacking_spawn_positions) - 1)) entities.trigger_event(_member, 'set_position', x=_spawn_x, y=_spawn_y) _defending_spawn_x, _defending_spawn_y = random.choice(list(_spawns['defending'])) _attacking_spawn_positions = [(x, y) for x, y in shapes.circle(_defending_spawn_x, _defending_spawn_y, 5) if not (x, y) in _solids] for squad_id in defending_squads: _squad = entities.get_entity(squad_id) for member_id in _squad['members']: _member = entities.get_entity(member_id) _spawn_x, _spawn_y = _attacking_spawn_positions.pop(random.randint(0, len(_attacking_spawn_positions) - 1)) entities.trigger_event(_member, 'set_position', x=_spawn_x, y=_spawn_y) zones.activate(_zone) FADER = entities.create_entity() timers.register(FADER) fade_in() display.blit_background('tiles') while loop(): events.trigger_event('cleanup')
def create_goal(mission, intent, message, logic_callback, message_callback, draw=True, details=[], **kwargs): _goal = entities.create_entity() _goal['intent'] = intent _goal['mission_id'] = mission['_id'] _goal['message'] = message _goal['draw'] = draw _goal['details'] = details _goal.update(kwargs) entities.create_event(_goal, 'get_message') entities.create_event(_goal, 'member_added') entities.create_event(_goal, 'add_goal_cleanup_event') entities.register_event(_goal, 'logic', logic_callback) entities.register_event(_goal, 'get_message', message_callback) entities.register_event(_goal, 'add_goal_cleanup_event', add_goal_cleanup_event) mission['goals'].append(_goal['_id']) logging.info('Creating goal \'%s\' for mission %s: %s' % (intent, mission['_id'], kwargs)) return _goal
def create(title, briefing=''): _mission = entities.create_entity(group='missions') _mission.update({'title': title, 'goals': [], 'members': [], 'member_memory': {}, #Unused 'briefing': briefing}) entities.create_event(_mission, 'member_added') entities.create_event(_mission, 'remove_member') entities.create_event(_mission, 'get_details') entities.create_event(_mission, 'get_briefing') entities.create_event(_mission, 'complete') entities.register_event(_mission, 'member_added', member_added) entities.register_event(_mission, 'remove_member', remove_member) entities.register_event(_mission, 'logic', logic) entities.register_event(_mission, 'get_details', get_mission_details) entities.register_event(_mission, 'get_briefing', get_mission_briefing) entities.register_event(_mission, 'complete', complete_mission) logging.info('Creating mission: %s' % _mission['_id']) return _mission
def create(x, y, title=None, surface='ui_menus', click_offset=(0, 0)): global ACTIVE_MENU _entity = entities.create_entity(group='ui_menus') _entity.update({'items': {}, 'active': True, 'index': 0, 'item_id': 0, 'surface': surface, 'click_offset': click_offset, 'x': x, 'y': y}) entities.create_event(_entity, 'reactivated') if title: add_title(_entity, title) _entity['index'] = 1 ACTIVE_MENU = _entity return _entity
def _create(x, y, name, char, weight, item_type, equip_to=None, fore_color=(255, 255, 255), kind=None): _entity = entities.create_entity(group='items') _entity['stats'] = { 'name': name, 'display_name': name, 'type': item_type, 'weight': weight, 'owner': None, 'kind': kind, 'equip_to': equip_to, 'in_container': None } movement.register(_entity) flags.register(_entity) tile.register(_entity, surface='items', char=char, fore_color=fore_color) entities.create_event(_entity, 'collision_with_solid') entities.create_event(_entity, 'collision_with_entity') entities.create_event(_entity, 'get_interactions') entities.create_event(_entity, 'get_actions') entities.create_event(_entity, 'get_display_name') entities.create_event(_entity, 'seen') entities.register_event(_entity, 'get_display_name', get_display_name) entities.trigger_event(_entity, 'set_position', x=x, y=y) return _entity
def _create_node(entity, x, y, draw_path=False, passive=True, action_time=0, name='Node', callback_on_touch=True): global LAST_CLICKED_POS _path_index = -1 if LAST_CLICKED_POS: _node_positions = [(p['node']['x'], p['node']['y']) for p in entity['node_grid']['nodes'].values() if not p['node']['name'] == chr(31)] for node_id in entity['node_grid']['path'][:]: _last_node = entity['node_grid']['nodes'][node_id] if LAST_CLICKED_POS in _last_node['node']['path']: _move_cost = 0 for pos in _last_node['node']['path'][ _last_node['node']['path'].index(LAST_CLICKED_POS):]: _move_cost += movement.get_move_cost(entity) if _move_cost < action_time and pos in _node_positions: return _path_index = entity['node_grid']['path'].index(node_id) entity['node_grid']['nodes'][entity['node_grid']['path'][ _path_index]]['node']['action_time'] = action_time break LAST_CLICKED_POS = None _node = entities.create_entity(group='nodes') _node['x'] = x _node['y'] = y _node['name'] = name _node['draw_path'] = draw_path _node['path'] = [] _node['owner_id'] = entity['_id'] _node['action_time'] = action_time _node['busy_pos'] = [] tile.register(_node, surface='nodes') entities.trigger_event(_node, 'set_position', x=x, y=y) if _path_index == -1: _path_index = len(entity['node_grid']['path']) entity['node_grid']['nodes'][_node['_id']] = { 'node': _node, 'passive': passive, 'callback': None, 'call_on_touch': callback_on_touch } entity['node_grid']['path'].insert(_path_index, _node['_id']) return _node
def _create_human(x, y, health, speed, name, vision=50, faction='Rogues', is_player=False, has_ai=False, fore_color=(255, 255, 255)): _entity = entities.create_entity(group='life') entities.create_event(_entity, 'get_and_store_item') entities.create_event(_entity, 'get_and_hold_item') entities.create_event(_entity, 'reload') entities.create_event(_entity, 'shoot') entities.create_event(_entity, 'damage') entities.create_event(_entity, 'did_damage') entities.create_event(_entity, 'receive_memory') entities.create_event(_entity, 'handle_corpse') entities.create_event(_entity, 'finish_turn') tile.register(_entity, surface='life', char='@', fore_color=fore_color) movement.register(_entity, collisions=True) timers.register(_entity) stats.register(_entity, health, speed, vision, name=name, kind='human') nodes.register(_entity) items.register(_entity) flags.register(_entity) noise.register(_entity) missions.register(_entity) skeleton.register(_entity) skeleton.create_motion(_entity, 'stand') skeleton.create_motion(_entity, 'crouch', stat_mod={'mobility': 1.55}) skeleton.create_motion(_entity, 'crawl', stat_mod={'mobility': 2.3}) skeleton.create_limb(_entity, 'head', [], True, 0.1, stat_mod={'vision': .75}) skeleton.create_limb(_entity, 'chest', ['head'], True, 0.88, stat_mod={'mobility': .1}) skeleton.create_limb(_entity, 'torso', ['chest'], True, 0.75, stat_mod={'mobility': .6}) skeleton.create_limb(_entity, 'left arm', ['chest'], False, 0.3, can_sever=True, stat_mod={'accuracy': .22}) skeleton.create_limb(_entity, 'right arm', ['chest'], False, 0.3, can_sever=True, stat_mod={'accuracy': .22}) skeleton.create_limb(_entity, 'left leg', ['torso'], False, 0.45, can_sever=True, stat_mod={'mobility': .4}) skeleton.create_limb(_entity, 'right leg', ['torso'], False, 0.45, can_sever=True, stat_mod={'mobility': .4}) if has_ai: ai.register_human(_entity) ai_factions.register(_entity, faction) _entity['ai']['is_player'] = is_player _entity['ai']['is_npc'] = not is_player if faction == 'Rogues': entities.register_event(_entity, 'did_damage', lambda e, target_id, damage: effects.printer(entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y']-1, '%s' % damage, fore_color=(200, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event(_entity, 'log_kill', lambda e, target_id: effects.printer(entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y']-1, 'KILL', fore_color=(255, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event(_entity, 'finish_turn', finish_turn) entities.register_event(_entity, 'post_tick', ai_visuals.cleanup) entities.register_event(_entity, 'get_and_store_item', get_and_store_item) entities.register_event(_entity, 'get_and_hold_item', get_and_hold_item) entities.register_event(_entity, 'reload', reload_weapon) entities.register_event(_entity, 'shoot', shoot_weapon) entities.register_event(_entity, 'heard_noise', handle_heard_noise) entities.register_event(_entity, 'position_changed', lambda e, **kwargs: entities.trigger_event(e, 'create_noise', volume=25, text='?', callback=lambda t, x, y: entities.trigger_event(t, 'update_target_memory', target_id=_entity['_id'], key='last_seen_at', value=[x, y]))) #entities.register_event(_entity, 'damage', # lambda e, **kwargs: entities.trigger_event(e, # 'create_noise', # volume=12, # text='Ow!', # owner_can_hear=True, # show_on_sight=True, # callback=lambda t, x, y: entities.trigger_event(t, # 'update_target_memory', # target_id=_entity['_id'], # key='last_seen_at', # value=[x, y]))) #entities.register_event(_entity, 'position_changed', lambda e, **kwargs: ai_visuals.add_to_moved_life(e)) entities.register_event(_entity, 'push', lambda e, **kwargs: movement.sub_move_cost(e)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'create_holder', name='weapon', max_weight=10) entities.trigger_event(_entity, 'create_holder', name='backpack', max_weight=10) _get_and_hold_item(_entity, items.leather_backpack(20, 20)['_id']) return _entity
def _create_robot(x, y, health, speed, name, vision=30, faction='Rogues', is_player=False, has_ai=True, fore_color=(200, 200, 200)): _entity = entities.create_entity(group='life') entities.create_event(_entity, 'get_and_store_item') entities.create_event(_entity, 'get_and_hold_item') entities.create_event(_entity, 'reload') entities.create_event(_entity, 'shoot') entities.create_event(_entity, 'damage') entities.create_event(_entity, 'did_damage') entities.create_event(_entity, 'receive_memory') entities.create_event(_entity, 'handle_corpse') entities.create_event(_entity, 'finish_turn') tile.register(_entity, surface='life', char='@', fore_color=fore_color) movement.register(_entity, collisions=True) timers.register(_entity) stats.register(_entity, health, speed, vision, name=name, kind='human') nodes.register(_entity) items.register(_entity) flags.register(_entity) noise.register(_entity) missions.register(_entity) skeleton.register(_entity) if has_ai: ai.register_robot(_entity) ai_factions.register(_entity, faction) _entity['ai']['is_player'] = is_player _entity['ai']['is_npc'] = not is_player if is_player: entities.register_event(_entity, 'did_damage', lambda e, target_id, damage: effects.printer(entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y']-1, '%s' % damage, fore_color=(200, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event(_entity, 'log_kill', lambda e, target_id: effects.printer(entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y']-1, 'KILL', fore_color=(255, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event(_entity, 'delete', _handle_robot_death) entities.register_event(_entity, 'finish_turn', finish_turn) entities.register_event(_entity, 'post_tick', ai_visuals.cleanup) entities.register_event(_entity, 'get_and_store_item', get_and_store_item) entities.register_event(_entity, 'get_and_hold_item', get_and_hold_item) entities.register_event(_entity, 'reload', reload_weapon) entities.register_event(_entity, 'shoot', shoot_weapon) entities.register_event(_entity, 'heard_noise', handle_heard_noise) entities.register_event(_entity, 'position_changed', lambda e, **kwargs: entities.trigger_event(e, 'create_noise', volume=25, text='?', callback=lambda t, x, y: entities.trigger_event(t, 'update_target_memory', target_id=_entity['_id'], key='last_seen_at', value=[x, y]))) entities.register_event(_entity, 'push', lambda e, **kwargs: movement.sub_move_cost(e)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'create_holder', name='weapon', max_weight=10) entities.trigger_event(_entity, 'create_holder', name='backpack', max_weight=10) _get_and_hold_item(_entity, items.leather_backpack(20, 20)['_id']) return _entity
def _start_battle(attacking_squads=[], defending_squads=[]): global FADER create() _width, _height, _node_grid, _node_sets, _weight_map, _tile_map, _solids, _fsl, _trees, _inside, _lights, _spawns = mapgen_arena.generate( 200, 200) _zone = zones.create('swamps', _width, _height, _node_grid, _node_sets, _weight_map, _tile_map, _solids, _fsl, _trees, _inside, _lights, _spawns) _attacking_spawn_x, _attacking_spawn_y = random.choice( list(_spawns['attacking'])) _attacking_spawn_positions = [ (x, y) for x, y in shapes.circle(_attacking_spawn_x, _attacking_spawn_y, 5) if not (x, y) in _solids ] for squad_id in attacking_squads: _squad = entities.get_entity(squad_id) for member_id in _squad['members']: _member = entities.get_entity(member_id) _spawn_x, _spawn_y = _attacking_spawn_positions.pop( random.randint(0, len(_attacking_spawn_positions) - 1)) entities.trigger_event(_member, 'set_position', x=_spawn_x, y=_spawn_y) _defending_spawn_x, _defending_spawn_y = random.choice( list(_spawns['defending'])) _attacking_spawn_positions = [ (x, y) for x, y in shapes.circle(_defending_spawn_x, _defending_spawn_y, 5) if not (x, y) in _solids ] for squad_id in defending_squads: _squad = entities.get_entity(squad_id) for member_id in _squad['members']: _member = entities.get_entity(member_id) _spawn_x, _spawn_y = _attacking_spawn_positions.pop( random.randint(0, len(_attacking_spawn_positions) - 1)) entities.trigger_event(_member, 'set_position', x=_spawn_x, y=_spawn_y) zones.activate(_zone) FADER = entities.create_entity() timers.register(FADER) fade_in() display.blit_background('tiles') while loop(): events.trigger_event('cleanup')
def boot(): _entity = entities.create_entity("systems") timers.register(_entity, use_system_event="logic")
def _create_human(x, y, health, speed, name, vision=50, faction='Rogues', is_player=False, has_ai=False, fore_color=(255, 255, 255)): _entity = entities.create_entity(group='life') entities.create_event(_entity, 'get_and_store_item') entities.create_event(_entity, 'get_and_hold_item') entities.create_event(_entity, 'reload') entities.create_event(_entity, 'shoot') entities.create_event(_entity, 'damage') entities.create_event(_entity, 'did_damage') entities.create_event(_entity, 'receive_memory') entities.create_event(_entity, 'handle_corpse') entities.create_event(_entity, 'finish_turn') tile.register(_entity, surface='life', char='@', fore_color=fore_color) movement.register(_entity, collisions=True) timers.register(_entity) stats.register(_entity, health, speed, vision, name=name, kind='human') nodes.register(_entity) items.register(_entity) flags.register(_entity) noise.register(_entity) missions.register(_entity) skeleton.register(_entity) skeleton.create_motion(_entity, 'stand') skeleton.create_motion(_entity, 'crouch', stat_mod={'mobility': 1.55}) skeleton.create_motion(_entity, 'crawl', stat_mod={'mobility': 2.3}) skeleton.create_limb(_entity, 'head', [], True, 0.1, stat_mod={'vision': .75}) skeleton.create_limb(_entity, 'chest', ['head'], True, 0.88, stat_mod={'mobility': .1}) skeleton.create_limb(_entity, 'torso', ['chest'], True, 0.75, stat_mod={'mobility': .6}) skeleton.create_limb(_entity, 'left arm', ['chest'], False, 0.3, can_sever=True, stat_mod={'accuracy': .22}) skeleton.create_limb(_entity, 'right arm', ['chest'], False, 0.3, can_sever=True, stat_mod={'accuracy': .22}) skeleton.create_limb(_entity, 'left leg', ['torso'], False, 0.45, can_sever=True, stat_mod={'mobility': .4}) skeleton.create_limb(_entity, 'right leg', ['torso'], False, 0.45, can_sever=True, stat_mod={'mobility': .4}) if has_ai: ai.register_human(_entity) ai_factions.register(_entity, faction) _entity['ai']['is_player'] = is_player _entity['ai']['is_npc'] = not is_player if faction == 'Rogues': entities.register_event( _entity, 'did_damage', lambda e, target_id, damage: effects. printer(entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y'] - 1, '%s' % damage, fore_color=(200, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event( _entity, 'log_kill', lambda e, target_id: effects.printer( entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y'] - 1, 'KILL', fore_color=(255, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event(_entity, 'finish_turn', finish_turn) entities.register_event(_entity, 'post_tick', ai_visuals.cleanup) entities.register_event(_entity, 'get_and_store_item', get_and_store_item) entities.register_event(_entity, 'get_and_hold_item', get_and_hold_item) entities.register_event(_entity, 'reload', reload_weapon) entities.register_event(_entity, 'shoot', shoot_weapon) entities.register_event(_entity, 'heard_noise', handle_heard_noise) entities.register_event( _entity, 'position_changed', lambda e, **kwargs: entities. trigger_event(e, 'create_noise', volume=25, text='?', callback=lambda t, x, y: entities.trigger_event( t, 'update_target_memory', target_id=_entity['_id'], key='last_seen_at', value=[x, y]))) #entities.register_event(_entity, 'damage', # lambda e, **kwargs: entities.trigger_event(e, # 'create_noise', # volume=12, # text='Ow!', # owner_can_hear=True, # show_on_sight=True, # callback=lambda t, x, y: entities.trigger_event(t, # 'update_target_memory', # target_id=_entity['_id'], # key='last_seen_at', # value=[x, y]))) #entities.register_event(_entity, 'position_changed', lambda e, **kwargs: ai_visuals.add_to_moved_life(e)) entities.register_event(_entity, 'push', lambda e, **kwargs: movement.sub_move_cost(e)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'create_holder', name='weapon', max_weight=10) entities.trigger_event(_entity, 'create_holder', name='backpack', max_weight=10) _get_and_hold_item(_entity, items.leather_backpack(20, 20)['_id']) return _entity
def _create_robot(x, y, health, speed, name, vision=30, faction='Rogues', is_player=False, has_ai=True, fore_color=(200, 200, 200)): _entity = entities.create_entity(group='life') entities.create_event(_entity, 'get_and_store_item') entities.create_event(_entity, 'get_and_hold_item') entities.create_event(_entity, 'reload') entities.create_event(_entity, 'shoot') entities.create_event(_entity, 'damage') entities.create_event(_entity, 'did_damage') entities.create_event(_entity, 'receive_memory') entities.create_event(_entity, 'handle_corpse') entities.create_event(_entity, 'finish_turn') tile.register(_entity, surface='life', char='@', fore_color=fore_color) movement.register(_entity, collisions=True) timers.register(_entity) stats.register(_entity, health, speed, vision, name=name, kind='human') nodes.register(_entity) items.register(_entity) flags.register(_entity) noise.register(_entity) missions.register(_entity) skeleton.register(_entity) if has_ai: ai.register_robot(_entity) ai_factions.register(_entity, faction) _entity['ai']['is_player'] = is_player _entity['ai']['is_npc'] = not is_player if is_player: entities.register_event( _entity, 'did_damage', lambda e, target_id, damage: effects. printer(entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y'] - 1, '%s' % damage, fore_color=(200, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event( _entity, 'log_kill', lambda e, target_id: effects.printer( entities.get_entity(target_id)['tile']['x'], entities.get_entity(target_id)['tile']['y'] - 1, 'KILL', fore_color=(255, 0, 0), speed_mod=0.3, show_mod=1.0, moving=True, center=True)) entities.register_event(_entity, 'delete', _handle_robot_death) entities.register_event(_entity, 'finish_turn', finish_turn) entities.register_event(_entity, 'post_tick', ai_visuals.cleanup) entities.register_event(_entity, 'get_and_store_item', get_and_store_item) entities.register_event(_entity, 'get_and_hold_item', get_and_hold_item) entities.register_event(_entity, 'reload', reload_weapon) entities.register_event(_entity, 'shoot', shoot_weapon) entities.register_event(_entity, 'heard_noise', handle_heard_noise) entities.register_event( _entity, 'position_changed', lambda e, **kwargs: entities. trigger_event(e, 'create_noise', volume=25, text='?', callback=lambda t, x, y: entities.trigger_event( t, 'update_target_memory', target_id=_entity['_id'], key='last_seen_at', value=[x, y]))) entities.register_event(_entity, 'push', lambda e, **kwargs: movement.sub_move_cost(e)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'create_holder', name='weapon', max_weight=10) entities.trigger_event(_entity, 'create_holder', name='backpack', max_weight=10) _get_and_hold_item(_entity, items.leather_backpack(20, 20)['_id']) return _entity
def create(): global MAP, FADER worlds.create('strategy') words.reset() display.create_surface('background') display.create_surface('map', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('map_markers', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('map_squads', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('map_path', width=constants.STRAT_MAP_WIDTH, height=constants.STRAT_MAP_HEIGHT) display.create_surface('ui_bar', width=constants.WINDOW_WIDTH, height=constants.WINDOW_HEIGHT - constants.STRAT_MAP_HEIGHT) display.fill_surface('ui_bar', (30, 30, 30)) display.blit_background('background') register_input() entities.create_entity_group('life', static=True) entities.create_entity_group('items', static=True) entities.create_entity_group('factions', static=True) entities.create_entity_group('squads', static=True) entities.create_entity_group('systems') FADER = entities.create_entity() timers.register(FADER) fade_in() _grid = {} _color_map = {} MAP = { 'grid': _grid, 'color_map': _color_map, 'astar_map': None, 'astar_weight_map': numpy.ones((constants.STRAT_MAP_HEIGHT / constants.MAP_CELL_SPACE, constants.STRAT_MAP_WIDTH / constants.MAP_CELL_SPACE)) } for x in range(constants.STRAT_MAP_WIDTH / constants.MAP_CELL_SPACE): for y in range(constants.STRAT_MAP_HEIGHT / constants.MAP_CELL_SPACE): _grid[x, y] = { 'owned_by': None, 'is_ownable': False, 'squads': [], 'income': .025 } worldgen.generate() unregister_input() world_action._start_battle( attacking_squads=[entities.get_entity_group('squads')[0]], defending_squads=[entities.get_entity_group('squads')[1]])
def _create_animal(x, y, health, speed, name, vision=65, faction='Mutants', has_ai=False, char='m', fore_color=(255, 255, 255)): _entity = entities.create_entity(group='life') entities.create_event(_entity, 'damage') entities.create_event(_entity, 'did_damage') entities.create_event(_entity, 'receive_memory') entities.create_event(_entity, 'handle_corpse') entities.create_event(_entity, 'finish_turn') tile.register(_entity, surface='life', char=char, fore_color=fore_color) movement.register(_entity, collisions=True) timers.register(_entity) stats.register(_entity, health, speed, vision, name=name, kind='animal') nodes.register(_entity) items.register(_entity) flags.register(_entity) noise.register(_entity) skeleton.register(_entity) ai_factions.register(_entity, faction) if has_ai: ai.register_animal(_entity) _entity['ai']['is_npc'] = True entities.register_event(_entity, 'finish_turn', finish_turn) entities.create_event(_entity, 'get_and_store_item') entities.create_event(_entity, 'get_and_hold_item') entities.create_event(_entity, 'reload') entities.create_event(_entity, 'shoot') entities.create_event(_entity, 'damage') entities.register_event(_entity, 'post_tick', ai_visuals.cleanup) entities.register_event(_entity, 'get_and_store_item', get_and_store_item) entities.register_event(_entity, 'get_and_hold_item', get_and_hold_item) entities.register_event(_entity, 'reload', reload_weapon) entities.register_event(_entity, 'shoot', shoot_weapon) entities.register_event(_entity, 'heard_noise', handle_heard_noise) entities.register_event( _entity, 'position_changed', lambda e, **kwargs: entities. trigger_event(e, 'create_noise', volume=25, text='?', owner_can_hear=False, callback=lambda t, x, y: entities.trigger_event( t, 'update_target_memory', target_id=_entity['_id'], key='last_seen_at', value=[x, y]))) #entities.register_event(_entity, 'position_changed', lambda e, **kwargs: ai_visuals.add_to_moved_life(e)) entities.register_event(_entity, 'push', lambda e, **kwargs: movement.sub_move_cost(e)) entities.trigger_event(_entity, 'set_position', x=x, y=y) entities.trigger_event(_entity, 'create_holder', name='weapon', max_weight=10) entities.trigger_event(_entity, 'create_holder', name='backpack', max_weight=10) return _entity