50 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| Functions related to AP regions for Pokemon Emerald (see ./data/regions for region definitions)
 | |
| """
 | |
| from typing import TYPE_CHECKING, Dict, List, Tuple
 | |
| 
 | |
| from BaseClasses import ItemClassification, Region
 | |
| 
 | |
| from .data import data
 | |
| from .items import PokemonEmeraldItem
 | |
| from .locations import PokemonEmeraldLocation
 | |
| 
 | |
| if TYPE_CHECKING:
 | |
|     from . import PokemonEmeraldWorld
 | |
| 
 | |
| 
 | |
| def create_regions(world: "PokemonEmeraldWorld") -> Dict[str, Region]:
 | |
|     """
 | |
|     Iterates through regions created from JSON to create regions and adds them to the multiworld.
 | |
|     Also creates and places events and connects regions via warps and the exits defined in the JSON.
 | |
|     """
 | |
|     regions: Dict[str, Region] = {}
 | |
|     connections: List[Tuple[str, str, str]] = []
 | |
| 
 | |
|     for region_name, region_data in data.regions.items():
 | |
|         new_region = Region(region_name, world.player, world.multiworld)
 | |
| 
 | |
|         for event_data in region_data.events:
 | |
|             event = PokemonEmeraldLocation(world.player, event_data.name, None, new_region)
 | |
|             event.place_locked_item(PokemonEmeraldItem(event_data.name, ItemClassification.progression, None, world.player))
 | |
|             new_region.locations.append(event)
 | |
| 
 | |
|         for region_exit in region_data.exits:
 | |
|             connections.append((f"{region_name} -> {region_exit}", region_name, region_exit))
 | |
| 
 | |
|         for warp in region_data.warps:
 | |
|             dest_warp = data.warps[data.warp_map[warp]]
 | |
|             if dest_warp.parent_region is None:
 | |
|                 continue
 | |
|             connections.append((warp, region_name, dest_warp.parent_region))
 | |
| 
 | |
|         regions[region_name] = new_region
 | |
| 
 | |
|     for name, source, dest in connections:
 | |
|         regions[source].connect(regions[dest], name)
 | |
| 
 | |
|     regions["Menu"] = Region("Menu", world.player, world.multiworld)
 | |
|     regions["Menu"].connect(regions["REGION_LITTLEROOT_TOWN/MAIN"], "Start Game")
 | |
| 
 | |
|     return regions
 | 
