def create_base_patches( configuration: EchoesConfiguration, rng: Random, game: GameDescription, is_multiworld: bool, ) -> GamePatches: """ """ patches = dataclasses.replace(game.create_game_patches(), game_specific=create_game_specific( configuration, game)) patches = add_elevator_connections_to_patches(configuration, rng, patches) # Gates if configuration.game == RandovaniaGame.PRIME2: patches = patches.assign_gate_assignment( gate_assignment_for_configuration(configuration, game.resource_database, rng)) # Starting Location patches = patches.assign_starting_location( starting_location_for_configuration(configuration, game, rng)) # Hints if rng is not None and configuration.game == RandovaniaGame.PRIME2: patches = add_echoes_default_hints_to_patches( rng, patches, game.world_list, num_joke=2, is_multiworld=is_multiworld) return patches
def create_base_patches( configuration: LayoutConfiguration, rng: Random, game: GameDescription, ) -> GamePatches: """ :param configuration: :param rng: :param game: :return: """ # TODO: we shouldn't need the seed_number! patches = game.create_game_patches() patches = add_elevator_connections_to_patches(configuration, rng, patches) # Gates patches = patches.assign_gate_assignment( gate_assignment_for_configuration(configuration, game.resource_database, rng)) # Starting Location patches = patches.assign_starting_location( starting_location_for_configuration(configuration, game, rng)) # Hints if rng is not None: patches = add_default_hints_to_patches(rng, patches, game.world_list) return patches
def create_base_patches( configuration: LayoutConfiguration, rng: Random, game: GameDescription, ) -> GamePatches: """ :param configuration: :param rng: :param game: :return: """ patches = dataclasses.replace(game.create_game_patches(), game_specific=create_game_specific( configuration, game)) patches = add_elevator_connections_to_patches(configuration, rng, patches) # Gates patches = patches.assign_gate_assignment( gate_assignment_for_configuration(configuration, game.resource_database, rng)) # Starting Location patches = patches.assign_starting_location( starting_location_for_configuration(configuration, game, rng)) # Hints if rng is not None: patches = add_default_hints_to_patches(rng, patches, game.world_list, num_joke=2) return patches
def test_basic_search_with_translator_gate(has_translator: bool, echoes_resource_database): # Setup scan_visor = echoes_resource_database.get_item(10) node_a = GenericNode("Node A", True, None, 0) node_b = GenericNode("Node B", True, None, 1) node_c = GenericNode("Node C", True, None, 2) translator_node = TranslatorGateNode("Translator Gate", True, None, 3, TranslatorGate(1), scan_visor) world_list = WorldList([ World("Test World", "Test Dark World", 1, [ Area( "Test Area A", False, 10, 0, True, [node_a, node_b, node_c, translator_node], { node_a: { node_b: Requirement.trivial(), translator_node: Requirement.trivial(), }, node_b: { node_a: Requirement.trivial(), }, node_c: { translator_node: Requirement.trivial(), }, translator_node: { node_a: Requirement.trivial(), node_c: Requirement.trivial(), }, }) ]) ]) game_specific = EchoesGameSpecific(energy_per_tank=100, safe_zone_heal_per_second=1, beam_configurations=(), dangerous_energy_tank=False) game = GameDescription(RandovaniaGame.PRIME2, DockWeaknessDatabase([], [], [], []), echoes_resource_database, game_specific, Requirement.impossible(), None, {}, world_list) patches = game.create_game_patches() patches = patches.assign_gate_assignment({TranslatorGate(1): scan_visor}) initial_state = State({scan_visor: 1 if has_translator else 0}, (), 99, node_a, patches, None, echoes_resource_database, game.world_list) # Run reach = reach_with_all_safe_resources(game, initial_state) # Assert if has_translator: assert set( reach.safe_nodes) == {node_a, node_b, translator_node, node_c} else: assert set(reach.safe_nodes) == {node_a, node_b}
def test_basic_search_with_translator_gate(has_translator: bool, echoes_resource_database): # Setup scan_visor = echoes_resource_database.get_by_type_and_index( ResourceType.ITEM, 10) node_a = GenericNode("Node A", True, 0) node_b = GenericNode("Node B", True, 1) node_c = GenericNode("Node C", True, 2) translator_node = TranslatorGateNode("Translator Gate", True, 3, TranslatorGate(1), scan_visor) world_list = WorldList([ World("Test World", "Test Dark World", 1, [ Area( "Test Area A", False, 10, 0, [node_a, node_b, node_c, translator_node], { node_a: { node_b: RequirementSet.trivial(), translator_node: RequirementSet.trivial(), }, node_b: { node_a: RequirementSet.trivial(), }, node_c: { translator_node: RequirementSet.trivial(), }, translator_node: { node_a: RequirementSet.trivial(), node_c: RequirementSet.trivial(), }, }) ]) ]) game = GameDescription(0, "", DockWeaknessDatabase([], [], [], []), echoes_resource_database, RequirementSet.impossible(), None, {}, world_list) patches = game.create_game_patches() patches = patches.assign_gate_assignment({TranslatorGate(1): scan_visor}) initial_state = State({scan_visor: 1 if has_translator else 0}, (), 99, node_a, patches, None, echoes_resource_database) # Run reach = reach_with_all_safe_resources(game, initial_state) # Assert if has_translator: assert set( reach.safe_nodes) == {node_a, node_b, translator_node, node_c} else: assert set(reach.safe_nodes) == {node_a, node_b}
def pretty_print_area(game: GameDescription, area: Area, print_function=print): print_function(area.name) print_function("Asset id: {}".format(area.area_asset_id)) for node in area.nodes: print_function(f"> {node.name}; Heals? {node.heal}") for target_node, requirement in game.world_list.potential_nodes_from( node, game.create_game_patches()): if target_node is None: print_function(" > None?") else: print_function(" > {}".format( game.world_list.node_name(target_node))) for level, text in pretty_print_requirement( requirement.simplify()): print_function(" {}{}".format(" " * level, text)) print_function()