111 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
from typing import List, Dict
 | 
						|
 | 
						|
from BaseClasses import MultiWorld, Region, Entrance
 | 
						|
 | 
						|
from . import Locations
 | 
						|
from .Constants import *
 | 
						|
 | 
						|
 | 
						|
region_dict: Dict[str, List[str]] = {
 | 
						|
    REGION_MENU: [],
 | 
						|
    REGION_CAVE: [
 | 
						|
        LOCATION_CAVE_AMMO,
 | 
						|
        LOCATION_CAVE_RELOAD,
 | 
						|
        LOCATION_CAVE_HEALTH,
 | 
						|
        LOCATION_CAVE_WEAPON,
 | 
						|
        EP_LOCATION_CAVE_MINIBOSS,
 | 
						|
        EP_LOCATION_CAVE_BOSS,
 | 
						|
        EVENT_LOCATION_GUARD_GONE,
 | 
						|
    ],
 | 
						|
    REGION_VOLCANIC: [
 | 
						|
        LOCATION_VOLCANIC_RELOAD,
 | 
						|
        LOCATION_VOLCANIC_HEALTH,
 | 
						|
        LOCATION_VOLCANIC_AMMO,
 | 
						|
        LOCATION_VOLCANIC_WEAPON,
 | 
						|
        EP_LOCATION_VOLCANIC_BOSS,
 | 
						|
        EVENT_LOCATION_CLIFF_GONE,
 | 
						|
    ],
 | 
						|
    REGION_ARCTIC: [
 | 
						|
        LOCATION_ARCTIC_AMMO,
 | 
						|
        LOCATION_ARCTIC_RELOAD,
 | 
						|
        LOCATION_ARCTIC_HEALTH,
 | 
						|
        LOCATION_ARCTIC_WEAPON,
 | 
						|
        LOCATION_JACKET,
 | 
						|
        EP_LOCATION_ARCTIC_BOSS,
 | 
						|
        EVENT_LOCATION_ACE_GONE,
 | 
						|
    ],
 | 
						|
    REGION_HUB: [
 | 
						|
        LOCATION_HUB_AMMO,
 | 
						|
        LOCATION_HUB_HEALTH,
 | 
						|
        LOCATION_HUB_RELOAD,
 | 
						|
        EP_LOCATION_HUB_CONSOLE,
 | 
						|
        EP_LOCATION_HUB_NINJA_SCARE,
 | 
						|
    ],
 | 
						|
    REGION_SWAMP: [
 | 
						|
        LOCATION_SWAMP_AMMO,
 | 
						|
        LOCATION_SWAMP_HEALTH,
 | 
						|
        LOCATION_SWAMP_RELOAD,
 | 
						|
        LOCATION_SWAMP_SPECIAL,
 | 
						|
        EP_LOCATION_SWAMP_BOSS,
 | 
						|
        EVENT_LOCATION_SNAKE_GONE,
 | 
						|
    ],
 | 
						|
    REGION_ELECTRICAL: [
 | 
						|
        EP_LOCATION_ELEVATOR_NINJA_FIGHT,
 | 
						|
        LOCATION_ELECTRICAL_WEAPON,
 | 
						|
        EP_LOCATION_ELECTRICAL_MINIBOSS,
 | 
						|
        EP_LOCATION_ELECTRICAL_EXTRA,
 | 
						|
        EVENT_LOCATION_POWER_ON,
 | 
						|
    ],
 | 
						|
    REGION_ELECTRICAL_POWERED: [
 | 
						|
        LOCATION_ELECTRICAL_RELOAD,
 | 
						|
        LOCATION_ELECTRICAL_HEALTH,
 | 
						|
        LOCATION_ELECTRICAL_AMMO,
 | 
						|
        EP_LOCATION_ELECTRICAL_BOSS,
 | 
						|
        EP_LOCATION_ELECTRICAL_FINAL_BOSS,
 | 
						|
        EVENT_LOCATION_VICTORY,
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
def set_region_locations(region: Region, location_names: List[str], is_pool_expanded: bool):
 | 
						|
    location_pool = {**Locations.location_dict_base, **Locations.location_dict_events}
 | 
						|
    if is_pool_expanded:
 | 
						|
        location_pool = {**Locations.location_dict_expanded, **Locations.location_dict_event_expanded}
 | 
						|
    region.locations = [
 | 
						|
        Locations.SavingPrincessLocation(
 | 
						|
            region.player,
 | 
						|
            name,
 | 
						|
            Locations.location_dict[name].code,
 | 
						|
            region
 | 
						|
        ) for name in location_names if name in location_pool.keys()
 | 
						|
    ]
 | 
						|
 | 
						|
 | 
						|
def create_regions(multiworld: MultiWorld, player: int, is_pool_expanded: bool):
 | 
						|
    for region_name, location_names in region_dict.items():
 | 
						|
        region = Region(region_name, player, multiworld)
 | 
						|
        set_region_locations(region, location_names, is_pool_expanded)
 | 
						|
        multiworld.regions.append(region)
 | 
						|
    connect_regions(multiworld, player)
 | 
						|
 | 
						|
 | 
						|
def connect_regions(multiworld: MultiWorld, player: int):
 | 
						|
    # and add a connection from the menu to the hub region
 | 
						|
    menu = multiworld.get_region(REGION_MENU, player)
 | 
						|
    hub = multiworld.get_region(REGION_HUB, player)
 | 
						|
    connection = Entrance(player, f"{REGION_HUB} entrance", menu)
 | 
						|
    menu.exits.append(connection)
 | 
						|
    connection.connect(hub)
 | 
						|
 | 
						|
    # now add an entrance from every other region to hub
 | 
						|
    for region_name in [REGION_CAVE, REGION_VOLCANIC, REGION_ARCTIC, REGION_SWAMP, REGION_ELECTRICAL]:
 | 
						|
        connection = Entrance(player, f"{region_name} entrance", hub)
 | 
						|
        hub.exits.append(connection)
 | 
						|
        connection.connect(multiworld.get_region(region_name, player))
 | 
						|
 | 
						|
    # and finally, the connection between the final region and its powered version
 | 
						|
    electrical = multiworld.get_region(REGION_ELECTRICAL, player)
 | 
						|
    connection = Entrance(player, f"{REGION_ELECTRICAL_POWERED} entrance", electrical)
 | 
						|
    electrical.exits.append(connection)
 | 
						|
    connection.connect(multiworld.get_region(REGION_ELECTRICAL_POWERED, player))
 |