Files
dockipelago/worlds/khrecom/Regions.py
Jonathan Tinney 7971961166
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
add schedule I, sonic 1/frontiers/heroes, spirit island
2026-04-02 23:46:36 -07:00

380 lines
32 KiB
Python

from typing import Dict, List, NamedTuple, Optional
from BaseClasses import MultiWorld, Region, Entrance
from .Locations import KHRECOMLocation, location_table, get_locations_by_category
class KHRECOMRegionData(NamedTuple):
locations: Optional[List[str]]
region_exits: Optional[List[str]]
def create_regions(multiworld: MultiWorld, player: int, options):
regions: Dict[str, KHRECOMRegionData] = {
"Menu": KHRECOMRegionData(None, ["Traverse Town"]),
"Traverse Town": KHRECOMRegionData([], ["Castle Oblivion Halls"]),
"Wonderland": KHRECOMRegionData([], []),
"Olympus Coliseum": KHRECOMRegionData([], []),
"Monstro": KHRECOMRegionData([], []),
"Agrabah": KHRECOMRegionData([], []),
"Halloween Town": KHRECOMRegionData([], []),
"Atlantica": KHRECOMRegionData([], []),
"Neverland": KHRECOMRegionData([], []),
"Hollow Bastion": KHRECOMRegionData([], []),
"100 Acre Wood": KHRECOMRegionData([], []),
"Twilight Town": KHRECOMRegionData([], []),
"Destiny Islands": KHRECOMRegionData([], []),
"Castle Oblivion": KHRECOMRegionData([], []),
"Heartless":KHRECOMRegionData([], []),
"Levels":KHRECOMRegionData([], []),
"Castle Oblivion Halls": KHRECOMRegionData([], ["Wonderland", "Olympus Coliseum", "Monstro",
"Agrabah", "Halloween Town", "Atlantica",
"Neverland", "Hollow Bastion", "100 Acre Wood",
"Twilight Town", "Destiny Islands", "Castle Oblivion", "Heartless", "Levels"])
}
# Set up locations
regions["Traverse Town"].locations.append("Starting Checks (Attack Cards Kingdom Key)")
regions["Traverse Town"].locations.append("Starting Checks (Item Cards Potion)")
regions["Traverse Town"].locations.append("Starting Checks (Magic Cards Blizzard)")
regions["Traverse Town"].locations.append("Starting Checks (Magic Cards Cure)")
if options.checks_behind_leon:
regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings")
regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Summon Cards Simba)")
regions["Traverse Town"].locations.append("Traverse Town Room of Guidance")
regions["Traverse Town"].locations.append("Traverse Town Room of Truth")
regions["Traverse Town"].locations.append("Traverse Town Room of Truth (Enemy Cards Guard Armor)")
regions["Traverse Town"].locations.append("Traverse Town Room of Rewards (Attack Cards Lionheart)")
if options.days_locations:
regions["Traverse Town"].locations.append("Traverse Town Bounty (Attack Cards Maverick Flare)")
regions["Traverse Town"].locations.append("Traverse Town Room of Rewards (Enemy Cards Saix)")
regions["Wonderland"].locations.append("Wonderland Bounty (Magic Cards Stop)")
regions["Wonderland"].locations.append("Wonderland Field (Attack Cards Lady Luck)")
regions["Wonderland"].locations.append("Wonderland Room of Beginnings")
regions["Wonderland"].locations.append("Wonderland Room of Beginnings (Enemy Cards Card Soldier)")
regions["Wonderland"].locations.append("Wonderland Room of Guidance")
regions["Wonderland"].locations.append("Wonderland Room of Truth")
regions["Wonderland"].locations.append("Wonderland Room of Truth (Enemy Cards Trickmaster)")
if options.days_locations:
regions["Wonderland"].locations.append("Wonderland Room of Rewards (Enemy Cards Xemnas)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Field (Attack Card Olympia)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Beginnings")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Guidance")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Guidance (Item Cards Hi-Potion)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Enemy Cards Hades)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Summon Cards Cloud)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Rewards (Attack Cards Metal Chocobo)")
if options.days_locations:
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Rewards (Attack Cards Total Eclipse)")
regions["Monstro"].locations.append("Monstro Field (Attack Cards Wishing Star)")
regions["Monstro"].locations.append("Monstro Room of Beginnings")
regions["Monstro"].locations.append("Monstro Room of Guidance")
regions["Monstro"].locations.append("Monstro Room of Guidance (Enemy Cards Parasite Cage)")
regions["Monstro"].locations.append("Monstro Room of Truth")
regions["Monstro"].locations.append("Monstro Room of Truth (Summon Cards Dumbo)")
if options.days_locations:
regions["Monstro"].locations.append("Monstro Room of Rewards (Enemy Cards Xaldin)")
regions["Agrabah"].locations.append("Agrabah Bounty (Magic Cards Gravity)")
regions["Agrabah"].locations.append("Agrabah Field (Attack Cards Three Wishes)")
regions["Agrabah"].locations.append("Agrabah Room of Beginnings")
regions["Agrabah"].locations.append("Agrabah Room of Guidance")
regions["Agrabah"].locations.append("Agrabah Room of Guidance (Item Cards Ether)")
regions["Agrabah"].locations.append("Agrabah Room of Truth")
regions["Agrabah"].locations.append("Agrabah Room of Truth (Enemy Cards Jafar)")
regions["Agrabah"].locations.append("Agrabah Room of Truth (Summon Cards Genie)")
if options.days_locations:
regions["Agrabah"].locations.append("Agrabah Room of Rewards (Enemy Cards Luxord)")
regions["Halloween Town"].locations.append("Halloween Town Field (Attack Cards Pumpkinhead)")
regions["Halloween Town"].locations.append("Halloween Town Room of Beginnings")
regions["Halloween Town"].locations.append("Halloween Town Room of Guidance")
regions["Halloween Town"].locations.append("Halloween Town Room of Truth")
regions["Halloween Town"].locations.append("Halloween Town Room of Truth (Enemy Cards Oogie Boogie)")
if options.days_locations:
regions["Halloween Town"].locations.append("Halloween Town Room of Rewards (Attack Cards Bond of Flame)")
regions["Atlantica"].locations.append("Atlantica Field (Attack Cards Crabclaw)")
regions["Atlantica"].locations.append("Atlantica Room of Beginnings")
regions["Atlantica"].locations.append("Atlantica Room of Guidance")
regions["Atlantica"].locations.append("Atlantica Room of Truth")
regions["Atlantica"].locations.append("Atlantica Room of Truth (Enemy Cards Ursula)")
if options.days_locations:
regions["Atlantica"].locations.append("Atlantica Room of Rewards (Enemy Cards Demyx)")
regions["Neverland"].locations.append("Neverland Field (Attack Cards Fairy Harp)")
regions["Neverland"].locations.append("Neverland Room of Beginnings")
regions["Neverland"].locations.append("Neverland Room of Guidance")
regions["Neverland"].locations.append("Neverland Room of Truth")
regions["Neverland"].locations.append("Neverland Room of Truth (Enemy Cards Hook)")
regions["Neverland"].locations.append("Neverland Room of Truth (Summon Cards Tinker Bell)")
if options.days_locations:
regions["Neverland"].locations.append("Neverland Room of Rewards (Attack Cards Midnight Roar)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Field (Attack Cards Divine Rose)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Beginnings")
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Guidance")
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Truth")
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Truth (Enemy Cards Dragon Maleficent)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Summon Cards Mushu)")
if options.days_locations:
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Enemy Cards Xigbar)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Clear (Summon Cards Bambi)")
if options.minigames:
regions["100 Acre Wood"].locations.append("100 Acre Wood Bumble Rumble (Item Cards Elixir)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Whirlwind Plunge (Item Cards Mega-Ether)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Tigger's Playground (Attack Cards Spellbinder)")
regions["Twilight Town"].locations.append("Twilight Town Room of Beginnings")
regions["Twilight Town"].locations.append("Twilight Town Room of Beginnings (Enemy Cards Vexen)")
if options.days_locations:
regions["Twilight Town"].locations.append("Twilight Town Room of Rewards (Enemy Cards Roxas)")
regions["Destiny Islands"].locations.append("Destiny Islands Room of Guidance (Attack Cards Oathkeeper)")
regions["Destiny Islands"].locations.append("Destiny Islands Room of Beginnings")
regions["Destiny Islands"].locations.append("Destiny Islands Room of Guidance")
regions["Destiny Islands"].locations.append("Destiny Islands Room of Guidance (Enemy Cards Darkside)")
regions["Destiny Islands"].locations.append("Destiny Islands Room of Rewards (Item Cards Megalixir)")
if options.days_locations:
regions["Destiny Islands"].locations.append("Destiny Islands Room of Rewards (Attack Cards Two Become One)")
regions["Castle Oblivion"].locations.append("Castle Oblivion Field Marluxia")
regions["Castle Oblivion"].locations.append("Castle Oblivion Room of Beginnings")
regions["Castle Oblivion"].locations.append("Castle Oblivion Room of Beginnings (Enemy Cards Axel)")
if options.days_locations:
regions["Castle Oblivion"].locations.append("Castle Oblivion Room of Rewards (Attack Cards Star Seeker)")
regions["Castle Oblivion"].locations.append("Final Marluxia")
regions["Castle Oblivion Halls"].locations.append("01F Exit Hall Axel I (Magic Cards Fire)")
regions["Castle Oblivion Halls"].locations.append("06F Exit Hall Larxene I (Magic Cards Thunder)")
regions["Castle Oblivion Halls"].locations.append("07F Exit Hall Riku I (Magic Cards Aero)")
regions["Castle Oblivion Halls"].locations.append("11F Exit Hall Riku III (Item Cards Mega-Potion)")
regions["Castle Oblivion Halls"].locations.append("12F Exit Hall Larxene II (Attack Cards Oblivion)")
regions["Castle Oblivion Halls"].locations.append("12F Exit Hall Larxene II (Enemy Cards Larxene)")
regions["Castle Oblivion Halls"].locations.append("12F Exit Hall Riku IV (Enemy Cards Riku)")
regions["Heartless"].locations.append("Defeat 1 Heartless Air Pirate")
regions["Heartless"].locations.append("Defeat 2 Heartless Air Pirate")
regions["Heartless"].locations.append("Defeat 3 Heartless Air Pirate")
regions["Heartless"].locations.append("Defeat 1 Heartless Air Soldier")
regions["Heartless"].locations.append("Defeat 2 Heartless Air Soldier")
regions["Heartless"].locations.append("Defeat 3 Heartless Air Soldier")
regions["Heartless"].locations.append("Defeat 1 Heartless Aquatank")
regions["Heartless"].locations.append("Defeat 2 Heartless Aquatank")
regions["Heartless"].locations.append("Defeat 3 Heartless Aquatank")
regions["Heartless"].locations.append("Defeat 1 Heartless Bandit")
regions["Heartless"].locations.append("Defeat 2 Heartless Bandit")
regions["Heartless"].locations.append("Defeat 3 Heartless Bandit")
regions["Heartless"].locations.append("Defeat 1 Heartless Barrel Spider")
regions["Heartless"].locations.append("Defeat 2 Heartless Barrel Spider")
regions["Heartless"].locations.append("Defeat 3 Heartless Barrel Spider")
regions["Heartless"].locations.append("Defeat 1 Heartless Black Fungus")
regions["Heartless"].locations.append("Defeat 2 Heartless Black Fungus")
regions["Heartless"].locations.append("Defeat 3 Heartless Black Fungus")
regions["Heartless"].locations.append("Defeat 1 Heartless Blue Rhapsody")
regions["Heartless"].locations.append("Defeat 2 Heartless Blue Rhapsody")
regions["Heartless"].locations.append("Defeat 3 Heartless Blue Rhapsody")
regions["Heartless"].locations.append("Defeat 1 Heartless Bouncywild")
regions["Heartless"].locations.append("Defeat 2 Heartless Bouncywild")
regions["Heartless"].locations.append("Defeat 3 Heartless Bouncywild")
regions["Heartless"].locations.append("Defeat 1 Heartless Creeper Plant")
regions["Heartless"].locations.append("Defeat 2 Heartless Creeper Plant")
regions["Heartless"].locations.append("Defeat 3 Heartless Creeper Plant")
regions["Heartless"].locations.append("Defeat 1 Heartless Crescendo")
regions["Heartless"].locations.append("Defeat 2 Heartless Crescendo")
regions["Heartless"].locations.append("Defeat 3 Heartless Crescendo")
regions["Heartless"].locations.append("Defeat 1 Heartless Darkball")
regions["Heartless"].locations.append("Defeat 2 Heartless Darkball")
regions["Heartless"].locations.append("Defeat 3 Heartless Darkball")
regions["Heartless"].locations.append("Defeat 1 Heartless Defender")
regions["Heartless"].locations.append("Defeat 2 Heartless Defender")
regions["Heartless"].locations.append("Defeat 3 Heartless Defender")
regions["Heartless"].locations.append("Defeat 1 Heartless Fat Bandit")
regions["Heartless"].locations.append("Defeat 2 Heartless Fat Bandit")
regions["Heartless"].locations.append("Defeat 3 Heartless Fat Bandit")
regions["Heartless"].locations.append("Defeat 1 Heartless Gargoyle")
regions["Heartless"].locations.append("Defeat 2 Heartless Gargoyle")
regions["Heartless"].locations.append("Defeat 3 Heartless Gargoyle")
regions["Heartless"].locations.append("Defeat 1 Heartless Green Requiem")
regions["Heartless"].locations.append("Defeat 2 Heartless Green Requiem")
regions["Heartless"].locations.append("Defeat 3 Heartless Green Requiem")
regions["Heartless"].locations.append("Defeat 1 Heartless Large Body")
regions["Heartless"].locations.append("Defeat 2 Heartless Large Body")
regions["Heartless"].locations.append("Defeat 3 Heartless Large Body")
regions["Heartless"].locations.append("Defeat 1 Heartless Neoshadow")
regions["Heartless"].locations.append("Defeat 2 Heartless Neoshadow")
regions["Heartless"].locations.append("Defeat 3 Heartless Neoshadow")
regions["Heartless"].locations.append("Defeat 1 Heartless Pirate")
regions["Heartless"].locations.append("Defeat 2 Heartless Pirate")
regions["Heartless"].locations.append("Defeat 3 Heartless Pirate")
regions["Heartless"].locations.append("Defeat 1 Heartless Powerwild")
regions["Heartless"].locations.append("Defeat 2 Heartless Powerwild")
regions["Heartless"].locations.append("Defeat 3 Heartless Powerwild")
regions["Heartless"].locations.append("Defeat 1 Heartless Red Nocturne")
regions["Heartless"].locations.append("Defeat 2 Heartless Red Nocturne")
regions["Heartless"].locations.append("Defeat 3 Heartless Red Nocturne")
regions["Heartless"].locations.append("Defeat 1 Heartless Screwdiver")
regions["Heartless"].locations.append("Defeat 2 Heartless Screwdiver")
regions["Heartless"].locations.append("Defeat 3 Heartless Screwdiver")
regions["Heartless"].locations.append("Defeat 1 Heartless Sea Neon")
regions["Heartless"].locations.append("Defeat 2 Heartless Sea Neon")
regions["Heartless"].locations.append("Defeat 3 Heartless Sea Neon")
regions["Heartless"].locations.append("Defeat 1 Heartless Search Ghost")
regions["Heartless"].locations.append("Defeat 2 Heartless Search Ghost")
regions["Heartless"].locations.append("Defeat 3 Heartless Search Ghost")
regions["Heartless"].locations.append("Defeat 1 Heartless Shadow")
regions["Heartless"].locations.append("Defeat 2 Heartless Shadow")
regions["Heartless"].locations.append("Defeat 3 Heartless Shadow")
regions["Heartless"].locations.append("Defeat 1 Heartless Soldier")
regions["Heartless"].locations.append("Defeat 2 Heartless Soldier")
regions["Heartless"].locations.append("Defeat 3 Heartless Soldier")
regions["Heartless"].locations.append("Defeat 1 Heartless Tornado Step")
regions["Heartless"].locations.append("Defeat 2 Heartless Tornado Step")
regions["Heartless"].locations.append("Defeat 3 Heartless Tornado Step")
regions["Heartless"].locations.append("Defeat 1 Heartless White Mushroom")
regions["Heartless"].locations.append("Defeat 2 Heartless White Mushroom")
regions["Heartless"].locations.append("Defeat 3 Heartless White Mushroom")
regions["Heartless"].locations.append("Defeat 1 Heartless Wight Knight")
regions["Heartless"].locations.append("Defeat 2 Heartless Wight Knight")
regions["Heartless"].locations.append("Defeat 3 Heartless Wight Knight")
regions["Heartless"].locations.append("Defeat 1 Heartless Wizard")
regions["Heartless"].locations.append("Defeat 2 Heartless Wizard")
regions["Heartless"].locations.append("Defeat 3 Heartless Wizard")
regions["Heartless"].locations.append("Defeat 1 Heartless Wyvern")
regions["Heartless"].locations.append("Defeat 2 Heartless Wyvern")
regions["Heartless"].locations.append("Defeat 3 Heartless Wyvern")
regions["Heartless"].locations.append("Defeat 1 Heartless Yellow Opera")
regions["Heartless"].locations.append("Defeat 2 Heartless Yellow Opera")
regions["Heartless"].locations.append("Defeat 3 Heartless Yellow Opera")
if options.levels:
regions["Levels"].locations.append("Level 02 (Sleight Sliding Dash)")
regions["Levels"].locations.append("Level 07 (Sleight Stun Impact)")
regions["Levels"].locations.append("Level 12 (Sleight Strike Raid)")
regions["Levels"].locations.append("Level 17 (Sleight Blitz)")
regions["Levels"].locations.append("Level 22 (Sleight Zantetsuken)")
regions["Levels"].locations.append("Level 27 (Sleight Sonic Blade)")
regions["Levels"].locations.append("Level 32 (Sleight Lethal Frame)")
regions["Levels"].locations.append("Level 37 (Sleight Tornado)")
regions["Levels"].locations.append("Level 42 (Sleight Ars Arcanum)")
regions["Levels"].locations.append("Level 47 (Sleight Holy)")
regions["Levels"].locations.append("Level 52 (Sleight Ragnarok)")
regions["Levels"].locations.append("Level 57 (Sleight Mega Flare)")
if options.minigames:
regions["100 Acre Wood"].locations.append("100 Acre Wood Balloon Glider (Sleight Firaga Burst)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Veggie Panic (Sleight Cross-slash+)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Jump-a-Thon (Sleight Idyll Romp)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Clear (Sleight Paradise LV2)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Clear (Sleight Paradise LV3)")
regions["100 Acre Wood"].locations.append("100 Acre Wood Piglet (Sleight Confuse)")
regions["Agrabah"].locations.append("Agrabah Bounty (Sleight Graviga)")
regions["Agrabah"].locations.append("Agrabah Bounty (Sleight Gravira)")
regions["Agrabah"].locations.append("Agrabah Ally (Sleight Sandstorm LV2)")
regions["Agrabah"].locations.append("Agrabah Ally (Sleight Sandstorm LV3)")
regions["Agrabah"].locations.append("Agrabah Room of Rewards (Sleight Warp)")
regions["Agrabah"].locations.append("Agrabah Room of Truth (Sleight Showtime LV2)")
regions["Agrabah"].locations.append("Agrabah Room of Truth (Sleight Showtime LV3)")
regions["Atlantica"].locations.append("Atlantica Bounty (Sleight Homing Blizzara)")
regions["Atlantica"].locations.append("Atlantica Bounty (Sleight Shock Impact)")
regions["Atlantica"].locations.append("Atlantica Ally (Sleight Spiral Wave LV2)")
regions["Atlantica"].locations.append("Atlantica Ally (Sleight Spiral Wave LV3)")
regions["Atlantica"].locations.append("Atlantica Room of Rewards (Sleight Quake)")
regions["Castle Oblivion Halls"].locations.append("01F Exit Hall Axel I (Sleight Fira)")
regions["Castle Oblivion Halls"].locations.append("01F Exit Hall Axel I (Sleight Firaga)")
regions["Castle Oblivion Halls"].locations.append("06F Exit Hall Larxene I (Sleight Thundara)")
regions["Castle Oblivion Halls"].locations.append("06F Exit Hall Larxene I (Sleight Thundaga)")
regions["Castle Oblivion Halls"].locations.append("07F Exit Hall Riku I (Sleight Aeroga)")
regions["Castle Oblivion Halls"].locations.append("07F Exit Hall Riku I (Sleight Aerora)")
regions["Castle Oblivion Halls"].locations.append("08F Exit Hall Riku II (Sleight Magnet Spiral)")
regions["Castle Oblivion Halls"].locations.append("10F Exit Hall Vexen I (Sleight Freeze)")
regions["Castle Oblivion"].locations.append("Castle Oblivion Bounty (Sleight Raging Storm)")
regions["Castle Oblivion"].locations.append("Castle Oblivion Entrance (Sleight Trinity Limit)")
regions["Destiny Islands"].locations.append("Destiny Islands Bounty (Sleight Judgment)")
regions["Halloween Town"].locations.append("Halloween Town Bounty (Sleight Gifted Miracle)")
regions["Halloween Town"].locations.append("Halloween Town Ally (Sleight Surprise! LV2)")
regions["Halloween Town"].locations.append("Halloween Town Ally (Sleight Surprise! LV3)")
regions["Halloween Town"].locations.append("Halloween Town Ally (Sleight Terror)")
regions["Halloween Town"].locations.append("Halloween Town Room of Rewards (Sleight Bind)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Bounty (Sleight Reflect Raid)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Ally (Sleight Furious Volley LV2)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Ally (Sleight Furious Volley LV3)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Sleight Flare Breath LV2)")
regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Sleight Flare Breath LV3)")
regions["Monstro"].locations.append("Monstro Bounty (Sleight Fire Raid)")
regions["Monstro"].locations.append("Monstro Room of Rewards (Sleight Aqua Splash)")
regions["Monstro"].locations.append("Monstro Room of Truth (Sleight Splash LV2)")
regions["Monstro"].locations.append("Monstro Room of Truth (Sleight Splash LV3)")
regions["Neverland"].locations.append("Neverland Ally (Sleight Hummingbird LV2)")
regions["Neverland"].locations.append("Neverland Ally (Sleight Hummingbird LV3)")
regions["Neverland"].locations.append("Neverland Bounty (Sleight Teleport)")
regions["Neverland"].locations.append("Neverland Room of Rewards (Sleight Thunder Raid)")
regions["Neverland"].locations.append("Neverland Room of Truth (Sleight Twinkle LV2)")
regions["Neverland"].locations.append("Neverland Room of Truth (Sleight Twinkle LV3)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Bounty (Sleight Blizzard Raid)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Sleight Cross-slash)")
regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Sleight Omnislash)")
regions["Traverse Town"].locations.append("Starting Checks (Sleight Blizzaga)")
regions["Traverse Town"].locations.append("Starting Checks (Sleight Blizzara)")
regions["Traverse Town"].locations.append("Starting Checks (Sleight Cura)")
regions["Traverse Town"].locations.append("Starting Checks (Sleight Curaga)")
regions["Traverse Town"].locations.append("Pick Up Goofy In Battle (Sleight Goofy Smash)")
regions["Traverse Town"].locations.append("Pick Up Goofy In Battle (Sleight Goofy Tornado LV2)")
regions["Traverse Town"].locations.append("Pick Up Goofy In Battle (Sleight Goofy Tornado LV3)")
regions["Traverse Town"].locations.append("Pick Up Donald In Battle (Sleight Magic LV2)")
regions["Traverse Town"].locations.append("Pick Up Donald In Battle (Sleight Magic LV3)")
regions["Traverse Town"].locations.append("Pick Up Goofy In Battle (Sleight Wild Crush)")
if options.checks_behind_leon:
regions["Traverse Town"].locations.append("Pick Up Pluto In Battle (Sleight Lucky Bounty LV2)")
regions["Traverse Town"].locations.append("Pick Up Pluto In Battle (Sleight Lucky Bounty LV3)")
regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Sleight Proud Roar LV2)")
regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Sleight Proud Roar LV3)")
regions["Twilight Town"].locations.append("Twilight Town Bounty (Sleight Warpinator)")
regions["Twilight Town"].locations.append("Twilight Town Room of Rewards (Sleight Stardust Blitz)")
regions["Wonderland"].locations.append("Wonderland Bounty (Sleight Stopga)")
regions["Wonderland"].locations.append("Wonderland Bounty (Sleight Stopra)")
regions["Wonderland"].locations.append("Wonderland Room of Rewards (Sleight Synchro)")
# Set up the regions correctly.
for name, data in regions.items():
multiworld.regions.append(create_region(multiworld, player, name, data))
multiworld.get_entrance("Traverse Town" , player).connect(multiworld.get_region("Traverse Town" , player))
multiworld.get_entrance("Wonderland" , player).connect(multiworld.get_region("Wonderland" , player))
multiworld.get_entrance("Olympus Coliseum" , player).connect(multiworld.get_region("Olympus Coliseum" , player))
multiworld.get_entrance("Monstro" , player).connect(multiworld.get_region("Monstro" , player))
multiworld.get_entrance("Agrabah" , player).connect(multiworld.get_region("Agrabah" , player))
multiworld.get_entrance("Halloween Town" , player).connect(multiworld.get_region("Halloween Town" , player))
multiworld.get_entrance("Atlantica" , player).connect(multiworld.get_region("Atlantica" , player))
multiworld.get_entrance("Neverland" , player).connect(multiworld.get_region("Neverland" , player))
multiworld.get_entrance("Hollow Bastion" , player).connect(multiworld.get_region("Hollow Bastion" , player))
multiworld.get_entrance("100 Acre Wood" , player).connect(multiworld.get_region("100 Acre Wood" , player))
multiworld.get_entrance("Twilight Town" , player).connect(multiworld.get_region("Twilight Town" , player))
multiworld.get_entrance("Destiny Islands" , player).connect(multiworld.get_region("Destiny Islands" , player))
multiworld.get_entrance("Castle Oblivion" , player).connect(multiworld.get_region("Castle Oblivion" , player))
multiworld.get_entrance("Heartless" , player).connect(multiworld.get_region("Heartless" , player))
multiworld.get_entrance("Castle Oblivion Halls", player).connect(multiworld.get_region("Castle Oblivion Halls", player))
multiworld.get_entrance("Levels" , player).connect(multiworld.get_region("Levels" , player))
def create_region(multiworld: MultiWorld, player: int, name: str, data: KHRECOMRegionData):
region = Region(name, player, multiworld)
if data.locations:
for loc_name in data.locations:
loc_data = location_table.get(loc_name)
location = KHRECOMLocation(player, loc_name, loc_data.code if loc_data else None, region)
region.locations.append(location)
if data.region_exits:
for exit in data.region_exits:
entrance = Entrance(player, exit, region)
region.exits.append(entrance)
return region