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
|