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
 |