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, 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_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(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_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, 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_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_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_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