import networkx as nx from networkx import Graph from Routes.pokemon_game_desc import PokemonGameDesc NEW_BARK_TOWN = 'New Bark Town' CHERRYGROVE_CITY = 'Cherrygrove City' VIOLET_CITY = 'Violet City' SPROUT_TOWER = 'Sprout Tower' RUINS_OF_ALPH = 'Ruins of Alph' UNION_CAVE = 'Union Cave' AZALEA_TOWN = 'Azalea Town' SLOWPOKE_WELL = 'Slowpoke Well' ILEX_FOREST = 'Ilex Forest' GOLDENROD_CITY = 'Goldenrod City' NATIONAL_PARK = 'National Park' ECRUTEAK_CITY = 'Ecruteak City' MOOMOO_FARM = 'MooMoo Farm' OLIVINE_CITY = 'Olivine City' CIANWOOD_CITY = 'Cianwood City' MAHOGANY_TOWN = 'Mahogany Town' LAKE_OF_RAGE = 'Lake of Rage' TEAM_ROCKET_HQ = 'Team Rocket H.Q.' ICE_PATH = 'Ice Path' BLACKTHORN_CITY = 'Blackthorn City' MT_MORTAR = 'Mt. Mortar' TIN_TOWER = 'Tin Tower' WHIRL_ISLANDS = 'Whirl Islands' DARK_CAVE = 'Dark Cave' VICTORY_ROAD = 'Victory Road' INDIGO_PLATEAU = 'Indigo Plateau' SS_AQUA = 'S.S. Aqua' VERMILION_CITY = 'Vermilion City' SAFFRON_CITY = 'Saffron City' LAVENDER_TOWN = 'Lavender Town' ROCK_TUNNEL = 'Rock Tunnel' CERULEAN_CITY = 'Cerulean City' CELADON_CITY = 'Celadon City' FUCHSIA_CITY = 'Fuchsia City' DIGLETTS_CAVE = "Diglett's Cave" PEWTER_CITY = 'Pewter City' MT_MOON = 'Mt. Moon' VIRIDIAN_CITY = 'Viridian City' PALLET_TOWN = 'Pallet Town' CINNABAR_ISLAND = 'Cinnabar Island' MT_SILVER = 'Mt. Silver' SAFARI_ZONE = 'Safari Zone' TOHJO_FALLS = 'Tohjo Falls' POWER_PLANT = 'Power Plant' LEAGUE_RECEPTION_GATE = 'League Reception Gate' CUT = 'Cut' SURF = 'Surf' FLASH = 'Flash' STRENGTH = 'Strength' ROCK_SMASH = 'Rock Smash' WHIRLPOOL = 'Whirlpool' WATERFALL = 'Waterfall' ZEPHYR_BADGE = 'Zephyr Badge' HIVE_BADGE = 'Hive Badge' PLAIN_BADGE = 'Plain Badge' FOG_BADGE = 'Fog Badge' STORM_BADGE = 'Storm Badge' MINERAL_BADGE = 'Mineral Badge' GLACIER_BADGE = 'Glacier Badge' RISING_BADGE = 'Rising Badge' BOULDER_BADGE = 'Boulder Badge' CASCADE_BADGE = 'Cascade Badge' THUNDER_BADGE = 'Thunder Badge' RAINBOW_BADGE = 'Rainbow Badge' MARSH_BADGE = 'Marsh Badge' SOUL_BADGE = 'Soul Badge' VOLCANO_BADGE = 'Volcano Badge' EARTH_BADGE = 'Earth Badge' SQUIRTBOTTLE = 'Squirt bottle' MEDICINE = 'Medicine' CATCH_RED_GYRADOS = 'Catch Red Gryados' ROCKET_DEAFEATED = 'Rocket Defeated' PKMN_WING = 'Gold Silver Wing' JOHTO_CHAMPION = 'Johto Champion' S_S_TICKET = 'S.S. Ticket' WOKE_SNORLAX = 'Woke Snorlax' EXPN_CARD = 'Expn card' POWER_RESTORED = 'Power restored' MACHINE_PART = 'Machine Part' CLEFAIRY_DOLL = 'Clefairy Doll' RAIL_PASS = 'Rail Pass' MISTY_FOUND = 'Misty Found' FLUTE_CHANNEL = 'Flute Channel' ROUTE_28_UNLOCKED = 'Rotue 28 Unlocked' POWER_PLANT_VISITED = 'POWER_PLANT_VISITED' FLY = 'Fly' FLY_OUT_OF_BATTLE = 'Fly out of battle' def get_gold_silver_desc() -> PokemonGameDesc: desc: PokemonGameDesc = PokemonGameDesc() desc.graph = get_gold_silver_route() desc.game_name = "Gold_Silver" desc.towns_and_cities = [NEW_BARK_TOWN, CHERRYGROVE_CITY, VIOLET_CITY, AZALEA_TOWN, GOLDENROD_CITY, ECRUTEAK_CITY, OLIVINE_CITY, CIANWOOD_CITY, MAHOGANY_TOWN, BLACKTHORN_CITY, PALLET_TOWN, VIRIDIAN_CITY, PEWTER_CITY, CERULEAN_CITY, SAFFRON_CITY, CELADON_CITY, VERMILION_CITY, FUCHSIA_CITY, CINNABAR_ISLAND] desc.badges = [ZEPHYR_BADGE, HIVE_BADGE, PLAIN_BADGE, FOG_BADGE, STORM_BADGE, MINERAL_BADGE, GLACIER_BADGE, RISING_BADGE, BOULDER_BADGE, CASCADE_BADGE, THUNDER_BADGE, RAINBOW_BADGE, MARSH_BADGE, SOUL_BADGE, VOLCANO_BADGE, EARTH_BADGE] desc.hms = [CUT, SURF, FLASH, STRENGTH, FLY, WATERFALL, WHIRLPOOL] desc.additional_goals = [WOKE_SNORLAX] desc.starting_town = NEW_BARK_TOWN desc.end_goal = MT_SILVER desc.one_way_routes.append("Route_29 -> Route_46") return desc def get_gold_silver_route() -> Graph: G = nx.Graph() for i in range(1,46): G.add_node(f'Route {i}', node_type='route') G.add_node(NEW_BARK_TOWN, node_type='location') G.add_node(CHERRYGROVE_CITY, node_type='location') G.add_node(VIOLET_CITY, node_type='location') G.add_node(SPROUT_TOWER, node_type='location') G.add_node(RUINS_OF_ALPH, node_type='location') G.add_node(UNION_CAVE, node_type='location') G.add_node(AZALEA_TOWN, node_type='location') G.add_node(SLOWPOKE_WELL, node_type='location') G.add_node(ILEX_FOREST, node_type='location') G.add_node(GOLDENROD_CITY, node_type='location') G.add_node(NATIONAL_PARK, node_type='location') G.add_node(ECRUTEAK_CITY, node_type='location') G.add_node(MOOMOO_FARM, node_type='location') G.add_node(OLIVINE_CITY, node_type='location') G.add_node(CIANWOOD_CITY, node_type='location') G.add_node(MAHOGANY_TOWN, node_type='location') G.add_node(LAKE_OF_RAGE, node_type='location') G.add_node(TEAM_ROCKET_HQ, node_type='location') G.add_node(ICE_PATH, node_type='location') G.add_node(BLACKTHORN_CITY, node_type='location') G.add_node(MT_MORTAR, node_type='location') G.add_node(TIN_TOWER, node_type='location') G.add_node(WHIRL_ISLANDS, node_type='location') G.add_node(DARK_CAVE, node_type='location') G.add_node(VICTORY_ROAD, node_type='location') G.add_node(INDIGO_PLATEAU, node_type='location') G.add_node(SS_AQUA, node_type='location') G.add_node(VERMILION_CITY, node_type='location') G.add_node(SAFFRON_CITY, node_type='location') G.add_node(LAVENDER_TOWN, node_type='location') G.add_node(ROCK_TUNNEL, node_type='location') G.add_node(CERULEAN_CITY, node_type='location') G.add_node(CELADON_CITY, node_type='location') G.add_node(FUCHSIA_CITY, node_type='location') G.add_node(DIGLETTS_CAVE, node_type='location') G.add_node(PEWTER_CITY, node_type='location') G.add_node(MT_MOON, node_type='location') G.add_node(VIRIDIAN_CITY, node_type='location') G.add_node(PALLET_TOWN, node_type='location') G.add_node(CINNABAR_ISLAND, node_type='location') G.add_node(MT_SILVER, node_type='location') G.add_node(SAFARI_ZONE, node_type='location') G.add_node(TOHJO_FALLS, node_type='location') G.add_node(POWER_PLANT, node_type='location') G.add_edge(NEW_BARK_TOWN, 'Route 29', condition=None) G.add_edge(CHERRYGROVE_CITY, 'Route 29', condition=None) G.add_edge(CHERRYGROVE_CITY, 'Route 30', condition=None) G.add_edge('Route 31', 'Route 30', condition=None) G.add_edge('Route 30', DARK_CAVE, condition=None) G.add_edge('Route 31', VIOLET_CITY, condition=None) G.add_edge(VIOLET_CITY, 'Route 32', condition=None) G.add_edge('Route 32', RUINS_OF_ALPH, condition=None) G.add_edge('Route 32', UNION_CAVE, condition=None) G.add_edge(UNION_CAVE, 'Route 33', condition=None) G.add_edge(UNION_CAVE, RUINS_OF_ALPH, condition=None) G.add_edge('Route 33', AZALEA_TOWN, condition=None) G.add_edge(AZALEA_TOWN, ILEX_FOREST, condition=None) G.add_edge(ILEX_FOREST, 'Route 34', condition=None) G.add_edge(GOLDENROD_CITY, 'Route 34', condition=None) G.add_edge(GOLDENROD_CITY, 'Route 35', condition=None) G.add_edge(NATIONAL_PARK, 'Route 35', condition=None) G.add_edge(NATIONAL_PARK, 'Route 36', condition=[SQUIRTBOTTLE]) G.add_edge(VIOLET_CITY, 'Route 36', condition=None) G.add_edge('Route 37', 'Route 36', condition=[SQUIRTBOTTLE]) G.add_edge('Route 37', ECRUTEAK_CITY, condition=None) G.add_edge('Route 38', ECRUTEAK_CITY, condition=None) G.add_edge('Route 38', 'Route 39', condition=None) G.add_edge('Route 39', OLIVINE_CITY, condition=None) G.add_edge('Route 40', OLIVINE_CITY, condition=[SURF]) G.add_edge(OLIVINE_CITY, SS_AQUA, condition=[S_S_TICKET]) G.add_edge('Route 40', 'Route 41', condition=[SURF]) G.add_edge('Route 40', WHIRL_ISLANDS, condition=[SURF, WHIRLPOOL]) G.add_edge('Route 41', WHIRL_ISLANDS, condition=[SURF, WHIRLPOOL]) G.add_edge('Route 41', CIANWOOD_CITY, condition=[SURF]) G.add_edge('Route 47', CIANWOOD_CITY, condition=None) G.add_edge('Route 47', 'Route 48', condition=None) G.add_edge('Route 47', SAFARI_ZONE, condition=None) G.add_edge('Route 42', ECRUTEAK_CITY, condition=None) G.add_edge('Route 42', MT_MORTAR, condition=[SURF, WATERFALL]) G.add_edge('Route 42', MAHOGANY_TOWN, condition=[SURF]) G.add_edge('Route 43', MAHOGANY_TOWN, condition=None) G.add_edge('Route 43', LAKE_OF_RAGE, condition=None) G.add_edge('Route 44', MAHOGANY_TOWN, condition=[ROCKET_DEAFEATED]) G.add_edge(TEAM_ROCKET_HQ, MAHOGANY_TOWN, condition=[CATCH_RED_GYRADOS]) G.add_edge('Route 44', ICE_PATH, condition=[STRENGTH]) G.add_edge(BLACKTHORN_CITY, ICE_PATH, condition=[STRENGTH]) G.add_edge('Route 45', BLACKTHORN_CITY, condition=None) G.add_edge('Route 45', DARK_CAVE, condition=[SURF]) G.add_edge('Route 45', 'Route 46', condition=None) G.add_edge('Route 46', 'Route 29', condition=None) G.add_edge('Route 46', DARK_CAVE, condition=[ROCK_SMASH]) G.add_edge('Route 27', NEW_BARK_TOWN, condition=[SURF, WATERFALL, WHIRLPOOL]) G.add_edge('Route 26', 'Route 27', condition=None) G.add_edge(LEAGUE_RECEPTION_GATE, 'Route 26', condition=None) G.add_edge(LEAGUE_RECEPTION_GATE, 'Route 28', condition=[ROUTE_28_UNLOCKED]) G.add_edge(LEAGUE_RECEPTION_GATE, 'Route 22', condition=[WOKE_SNORLAX]) G.add_edge(LEAGUE_RECEPTION_GATE, 'Route 23', condition=None) G.add_edge('Route 28', MT_SILVER, condition=None) G.add_edge('Route 23', VICTORY_ROAD, condition=[ZEPHYR_BADGE, HIVE_BADGE, PLAIN_BADGE, FOG_BADGE, STORM_BADGE, MINERAL_BADGE, GLACIER_BADGE, RISING_BADGE]) G.add_edge(SS_AQUA, VERMILION_CITY, condition=None) G.add_edge(SAFFRON_CITY, GOLDENROD_CITY, condition=[POWER_RESTORED, RAIL_PASS]) G.add_edge(DIGLETTS_CAVE, 'Route 11', condition=[WOKE_SNORLAX]) G.add_edge(PALLET_TOWN, 'Route 1', condition=None) G.add_edge(PALLET_TOWN, 'Route 21', condition=[SURF]) G.add_edge('Route 1', VIRIDIAN_CITY, condition=None) G.add_edge(VIRIDIAN_CITY, 'Route 2', condition=None) G.add_edge('Route 2', 'Viridian Forest', condition=None) G.add_edge('Route 2', 'Route 3', condition=[CUT]) G.add_edge('Viridian Forest', PEWTER_CITY, condition=None) G.add_edge(PEWTER_CITY, 'Route 3', condition=None) G.add_edge('Route 3', MT_MOON, condition=None) G.add_edge(MT_MOON, 'Route 4', condition=None) G.add_edge('Route 4', CERULEAN_CITY, condition=None) G.add_edge(CERULEAN_CITY, 'Route 24', condition=None) G.add_edge(CERULEAN_CITY, 'Route 9', condition=[CUT]) G.add_edge(CERULEAN_CITY, 'Route 5', condition=None) G.add_edge('Route 5', SAFFRON_CITY, condition=None) G.add_edge(SAFFRON_CITY, 'Route 6', condition=None) G.add_edge(SAFFRON_CITY, 'Route 7', condition=None) G.add_edge(SAFFRON_CITY, 'Route 8', condition=None) G.add_edge('Route 6', VERMILION_CITY, condition=None) G.add_edge(VERMILION_CITY, 'Route 11', condition=None) G.add_edge('Route 11', 'Route 12', condition=None) G.add_edge('Route 11', DIGLETTS_CAVE, condition=None) G.add_edge('Route 2', DIGLETTS_CAVE, condition=[CUT]) G.add_edge('Route 12', 'Route 13', condition=None) G.add_edge('Route 12', LAVENDER_TOWN, condition=None) G.add_edge('Route 7', LAVENDER_TOWN, condition=None) G.add_edge(LAVENDER_TOWN, 'Route 10', condition=None) G.add_edge('Route 9', 'Rock Tunnel', condition=[FLASH]) G.add_edge('Route 10', 'Rock Tunnel', condition=[FLASH]) G.add_edge(CELADON_CITY, 'Route 8', condition=None) G.add_edge(CELADON_CITY, 'Route 16', condition=None) G.add_edge('Route 16', 'Route 17', condition=None) G.add_edge('Route 17', 'Route 18', condition=None) G.add_edge('Route 18', FUCHSIA_CITY, condition=None) G.add_edge(FUCHSIA_CITY,'Route 19', condition=None) G.add_edge(FUCHSIA_CITY,'Route 15', condition=None) G.add_edge('Route 19', 'Seafoam Islands', condition=[SURF]) G.add_edge('Seafoam Islands', 'Route 20', condition=[SURF]) G.add_edge('Route 20', CINNABAR_ISLAND, condition=[SURF]) G.add_edge('Route 21', CINNABAR_ISLAND, condition=[SURF]) G.add_edge('Route 22', VIRIDIAN_CITY, condition=None) G.add_edge(VICTORY_ROAD, INDIGO_PLATEAU, condition=None) G.add_edge('Route 12', 'Route 13', condition=None) G.add_edge('Route 13', 'Route 14', condition=None) G.add_edge('Route 14', 'Route 15', condition=None) G.add_edge('Route 24', 'Route 25', condition=None) G.add_edge('Route 10', POWER_PLANT, condition=[SURF]) G.add_edge('Route 5', 'Underground Path', condition=None) G.add_edge('Underground Path', 'Route 6', condition=None) G.nodes[NEW_BARK_TOWN]['grants_conditions'] = [ {'condition': S_S_TICKET, 'required_conditions': [JOHTO_CHAMPION]} ] G.nodes[VIOLET_CITY]['grants_conditions'] = [ {'condition': ZEPHYR_BADGE, 'required_conditions': []} ] G.nodes[AZALEA_TOWN]['grants_conditions'] = [ {'condition': HIVE_BADGE, 'required_conditions': []} ] G.nodes[ILEX_FOREST]['grants_conditions'] = [ {'condition': CUT, 'required_conditions': []} ] G.nodes[GOLDENROD_CITY]['grants_conditions'] = [ {'condition': PLAIN_BADGE, 'required_conditions': []}, {'condition': SQUIRTBOTTLE, 'required_conditions': []}, {'condition': PKMN_WING, 'required_conditions': [GLACIER_BADGE]}, ] G.nodes[ECRUTEAK_CITY]['grants_conditions'] = [ {'condition': SURF, 'required_conditions': []}, {'condition': FOG_BADGE, 'required_conditions': []} ] G.nodes['Route 36']['grants_conditions'] = [ {'condition': ROCK_SMASH, 'required_conditions': [SQUIRTBOTTLE]} ] G.nodes[OLIVINE_CITY]['grants_conditions'] = [ {'condition': MINERAL_BADGE, 'required_conditions': [MEDICINE]}, {'condition': STRENGTH, 'required_conditions': []}, ] G.nodes[CIANWOOD_CITY]['grants_conditions'] = [ {'condition': STORM_BADGE, 'required_conditions': []}, {'condition': MEDICINE, 'required_conditions': []}, {'condition': FLY, 'required_conditions': [STORM_BADGE]}, {'condition': FLY_OUT_OF_BATTLE, 'required_conditions': [STORM_BADGE]}, ] G.nodes[MAHOGANY_TOWN]['grants_conditions'] = [ {'condition': GLACIER_BADGE, 'required_conditions': [ROCKET_DEAFEATED]} ] G.nodes[TEAM_ROCKET_HQ]['grants_conditions'] = [ {'condition': ROCKET_DEAFEATED, 'required_conditions': []}, {'condition': WHIRLPOOL, 'required_conditions': []} ] G.nodes[LAKE_OF_RAGE]['grants_conditions'] = [ {'condition': CATCH_RED_GYRADOS, 'required_conditions': []} ] G.nodes[ICE_PATH]['grants_conditions'] = [ {'condition': WATERFALL, 'required_conditions': []} ] G.nodes[BLACKTHORN_CITY]['grants_conditions'] = [ {'condition': RISING_BADGE, 'required_conditions': []} ] G.nodes[INDIGO_PLATEAU]['grants_conditions'] = [ {'condition': JOHTO_CHAMPION, 'required_conditions': []} ] G.nodes[VERMILION_CITY]['grants_conditions'] = [ {'condition': THUNDER_BADGE, 'required_conditions': []}, {'condition': FLUTE_CHANNEL, 'required_conditions': [EXPN_CARD]}, {'condition': CLEFAIRY_DOLL, 'required_conditions': [POWER_RESTORED]}, ] G.nodes[SAFFRON_CITY]['grants_conditions'] = [ {'condition': MARSH_BADGE, 'required_conditions': []}, {'condition': RAIL_PASS, 'required_conditions': [CLEFAIRY_DOLL]}, ] G.nodes[LAVENDER_TOWN]['grants_conditions'] = [ {'condition': EXPN_CARD, 'required_conditions': [POWER_RESTORED]} ] G.nodes[POWER_PLANT]['grants_conditions'] = [ {'condition': POWER_PLANT_VISITED, 'required_conditions': []}, {'condition': POWER_RESTORED, 'required_conditions': [MACHINE_PART]} ] G.nodes[CERULEAN_CITY]['grants_conditions'] = [ {'condition': CASCADE_BADGE, 'required_conditions': [MISTY_FOUND]}, {'condition': MACHINE_PART, 'required_conditions': [POWER_PLANT_VISITED]} ] G.nodes['Route 25']['grants_conditions'] = [ {'condition': MISTY_FOUND, 'required_conditions': []} ] G.nodes[CELADON_CITY]['grants_conditions'] = [ {'condition': RAINBOW_BADGE, 'required_conditions': []} ] G.nodes[FUCHSIA_CITY]['grants_conditions'] = [ {'condition': SOUL_BADGE, 'required_conditions': []} ] G.nodes['Route 11']['grants_conditions'] = [ {'condition': WOKE_SNORLAX, 'required_conditions': [FLUTE_CHANNEL]} ] G.nodes[PEWTER_CITY]['grants_conditions'] = [ {'condition': BOULDER_BADGE, 'required_conditions': []}, {'condition': PKMN_WING, 'required_conditions': []}, ] G.nodes[VIRIDIAN_CITY]['grants_conditions'] = [ {'condition': EARTH_BADGE, 'required_conditions': [VOLCANO_BADGE]}, ] G.nodes[PALLET_TOWN]['grants_conditions'] = [ {'condition': ROUTE_28_UNLOCKED, 'required_conditions': [BOULDER_BADGE, CASCADE_BADGE, THUNDER_BADGE, RAINBOW_BADGE, MARSH_BADGE, SOUL_BADGE, VOLCANO_BADGE, EARTH_BADGE]}, ] G.nodes[CINNABAR_ISLAND]['grants_conditions'] = [ {'condition': VOLCANO_BADGE, 'required_conditions': []}, ] return G