mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Pokemon Emerald: Implement New Game (#1813)
This commit is contained in:
49
worlds/pokemon_emerald/regions.py
Normal file
49
worlds/pokemon_emerald/regions.py
Normal file
@@ -0,0 +1,49 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user