Skip to content

Commit

Permalink
Merge pull request #5 from lilDavid/logic_rework
Browse files Browse the repository at this point in the history
Logic rework
  • Loading branch information
lilDavid authored Aug 24, 2024
2 parents 70e4e6f + 3089b38 commit bb7bc6d
Show file tree
Hide file tree
Showing 7 changed files with 1,885 additions and 976 deletions.
14 changes: 8 additions & 6 deletions __init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from .items import item_data_table, major_item_data_table, mzm_item_name_groups, MZMItem
from .locations import full_location_table, mzm_location_name_groups
from .options import MZMOptions, MorphBallPlacement, mzm_option_groups
from .regions import create_regions
from .regions import create_regions_and_connections
from .rom import MZMProcedurePatch, write_tokens
from .rules import set_rules

Expand Down Expand Up @@ -41,7 +41,7 @@ class MZMWeb(WebWorld):
"English",
"multiworld_en.md",
"multiworld/en",
["lil David, NoiseCrush"]
["N/A"]
)

tutorials = [setup]
Expand All @@ -65,7 +65,7 @@ class MZMWorld(World):
required_client_version = (0, 5, 0)

item_name_to_id = {name: data.code for name, data in item_data_table.items()}
location_name_to_id = full_location_table
location_name_to_id = {name: data.code for name, data in full_location_table.items()}

item_name_groups = mzm_item_name_groups
location_name_groups = mzm_location_name_groups
Expand All @@ -82,14 +82,14 @@ def generate_early(self):
self.options.local_items.value.add("Nothing")

def create_regions(self) -> None:
create_regions(self)
create_regions_and_connections(self)

self.place_event("Kraid Defeated", "Kraid")
self.place_event("Ridley Defeated", "Ridley")
self.place_event("Mother Brain Defeated", "Mother Brain")
self.place_event("Chozo Ghost Defeated", "Chozo Ghost")
self.place_event("Mecha Ridley Defeated", "Mecha Ridley")
self.place_event("Mission Complete", "Chozodia Space Pirate's Ship")
self.place_event("Mission Accomplished!", "Chozodia Space Pirate's Ship")

def create_items(self) -> None:
item_pool: List[MZMItem] = []
Expand All @@ -109,7 +109,7 @@ def create_items(self) -> None:
def set_rules(self) -> None:
set_rules(self, full_location_table)
self.multiworld.completion_condition[self.player] = lambda state: (
state.has("Mission Complete", self.player))
state.has("Mission Accomplished!", self.player))

def generate_output(self, output_directory: str):
output_path = Path(output_directory)
Expand All @@ -130,9 +130,11 @@ def fill_slot_data(self) -> Dict[str, Any]:
"goal": self.options.goal.value,
"unknown_items": self.options.unknown_items_always_usable.value,
"layout_patches": self.options.layout_patches.value,
"logic_difficulty": self.options.logic_difficulty.value,
"ibj_logic": self.options.ibj_in_logic.value,
"heatruns": self.options.heatruns_lavadives.value,
"walljump_logic": self.options.walljumps_in_logic.value,
"tricky_shinesparks": self.options.tricky_shinesparks.value,
"death_link": self.options.death_link.value
}

Expand Down
2 changes: 1 addition & 1 deletion client.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ async def game_watcher(self, client_ctx: BizHawkClientContext) -> None:
):
for location in location_table.values():
if location_flags & 1:
checked_locations.append(location)
checked_locations.append(location.code)
location_flags >>= 1

# Deorem flags are in a weird arrangement, but he also drops Charge Beam so whatever just look for that check
Expand Down
225 changes: 115 additions & 110 deletions locations.py
Original file line number Diff line number Diff line change
@@ -1,145 +1,150 @@
"""
Classes and functions related to AP locations for Metroid: Zero Mission
"""
from BaseClasses import Location

from .items import AP_MZM_ID_BASE


class MZMLocation(Location):
game: str = "Metroid Zero Mission"
class LocationData:
region: str
code: int

def __init__(self, reg, id):
self.region = reg
self.code = id


# Location numbers/order and some names from Biospark's MZM Randomizer.
# Events in any region must be at the end of its table for the client to work correctly

brinstar_location_table = {
"Brinstar Morph Ball": AP_MZM_ID_BASE + 0,
"Brinstar Morph Ball Cannon": AP_MZM_ID_BASE + 1,
"Brinstar Long Beam": AP_MZM_ID_BASE + 2,
"Brinstar Ceiling E-Tank": AP_MZM_ID_BASE + 3,
"Brinstar Missile Above Super": AP_MZM_ID_BASE + 4,
"Brinstar Super Missile": AP_MZM_ID_BASE + 5,
"Brinstar Top Missile": AP_MZM_ID_BASE + 6,
"Brinstar Speed Booster Shortcut Missile": AP_MZM_ID_BASE + 7,
"Brinstar Varia Suit": AP_MZM_ID_BASE + 8,
"Brinstar Worm drop": AP_MZM_ID_BASE + 9,
"Brinstar Acid near Varia": AP_MZM_ID_BASE + 10,
"Brinstar First Missile": AP_MZM_ID_BASE + 11,
"Brinstar Behind Hive": AP_MZM_ID_BASE + 12,
"Brinstar Under Bridge": AP_MZM_ID_BASE + 13,
"Brinstar Post-Hive Missile": AP_MZM_ID_BASE + 14,
"Brinstar Upper Pillar Missile": AP_MZM_ID_BASE + 15,
"Brinstar Behind Bombs": AP_MZM_ID_BASE + 16,
"Brinstar Bomb": AP_MZM_ID_BASE + 17,
"Brinstar Post-Hive E-Tank": AP_MZM_ID_BASE + 18,
"Brinstar Morph Ball": LocationData("Brinstar Start", AP_MZM_ID_BASE + 0),
"Brinstar Morph Ball Cannon": LocationData("Brinstar Start", AP_MZM_ID_BASE + 1),
"Brinstar Long Beam": LocationData("Brinstar Main", AP_MZM_ID_BASE + 2),
"Brinstar Ceiling E-Tank": LocationData("Brinstar Start", AP_MZM_ID_BASE + 3),
"Brinstar Main Shaft Left Alcove": LocationData("Brinstar Main", AP_MZM_ID_BASE + 4),
"Brinstar Ballspark": LocationData("Brinstar Main", AP_MZM_ID_BASE + 5),
"Brinstar Ripper Climb": LocationData("Brinstar Main", AP_MZM_ID_BASE + 6),
"Brinstar Speed Booster Shortcut": LocationData("Brinstar Main", AP_MZM_ID_BASE + 7),
"Brinstar Varia Suit": LocationData("Brinstar Top", AP_MZM_ID_BASE + 8),
"Brinstar Worm drop": LocationData("Brinstar Main", AP_MZM_ID_BASE + 9),
"Brinstar Acid near Varia": LocationData("Brinstar Top", AP_MZM_ID_BASE + 10),
"Brinstar First Missile": LocationData("Brinstar Main", AP_MZM_ID_BASE + 11),
"Brinstar Behind Hive": LocationData("Brinstar Main", AP_MZM_ID_BASE + 12),
"Brinstar Under Bridge": LocationData("Brinstar Main", AP_MZM_ID_BASE + 13),
"Brinstar Post-Hive In Wall": LocationData("Brinstar Past Hives", AP_MZM_ID_BASE + 14),
"Brinstar Upper Pillar": LocationData("Brinstar Top", AP_MZM_ID_BASE + 15),
"Brinstar Behind Bombs": LocationData("Brinstar Past Hives", AP_MZM_ID_BASE + 16),
"Brinstar Bomb": LocationData("Brinstar Past Hives", AP_MZM_ID_BASE + 17),
"Brinstar Post-Hive Pillar": LocationData("Brinstar Past Hives", AP_MZM_ID_BASE + 18)
}

kraid_location_table = {
"Kraid Giant Hoppers Missile": AP_MZM_ID_BASE + 19,
"Kraid Save Room Missile": AP_MZM_ID_BASE + 20,
"Kraid Crumble Block Missile": AP_MZM_ID_BASE + 21,
"Kraid Quad Ball Cannon Room": AP_MZM_ID_BASE + 22,
"Kraid Space Jump/Unknown Item 2": AP_MZM_ID_BASE + 23,
"Kraid Acid Ballspark": AP_MZM_ID_BASE + 24,
"Kraid Speed Booster": AP_MZM_ID_BASE + 25,
"Kraid Worm Missile": AP_MZM_ID_BASE + 26,
"Kraid Pillar Missile": AP_MZM_ID_BASE + 27,
"Kraid Acid Fall": AP_MZM_ID_BASE + 28,
"Kraid Worm E-Tank": AP_MZM_ID_BASE + 29,
"Kraid Speed Jump": AP_MZM_ID_BASE + 30,
"Kraid Upper Right Morph Ball Cannon": AP_MZM_ID_BASE + 31,
"Kraid": None
"Kraid Behind Giant Hoppers": LocationData("Kraid Left Shaft", AP_MZM_ID_BASE + 19),
"Kraid Save Room Tunnel": LocationData("Kraid Main", AP_MZM_ID_BASE + 20),
"Kraid Zipline Morph Jump": LocationData("Kraid Main", AP_MZM_ID_BASE + 21),
"Kraid Quad Ball Cannon Room": LocationData("Kraid Left Shaft", AP_MZM_ID_BASE + 22),
"Kraid Unknown Item Statue": LocationData("Kraid Left Shaft", AP_MZM_ID_BASE + 23),
"Kraid Acid Ballspark": LocationData("Kraid Main", AP_MZM_ID_BASE + 24),
"Kraid Speed Booster": LocationData("Kraid Bottom", AP_MZM_ID_BASE + 25),
"Kraid Under Acid Worm": LocationData("Kraid Acid Worm Area", AP_MZM_ID_BASE + 26),
"Kraid Right Hall Pillar": LocationData("Kraid Main", AP_MZM_ID_BASE + 27),
"Kraid Acid Fall": LocationData("Kraid Bottom", AP_MZM_ID_BASE + 28),
"Kraid Zipline Activator Room": LocationData("Kraid Acid Worm Area", AP_MZM_ID_BASE + 29),
"Kraid Speed Jump": LocationData("Kraid Main", AP_MZM_ID_BASE + 30),
"Kraid Upper Right Morph Ball Cannon": LocationData("Kraid Main", AP_MZM_ID_BASE + 31),
"Kraid": LocationData("Kraid Bottom", None)
}

norfair_location_table = {
"Norfair Lava Power Bomb": AP_MZM_ID_BASE + 32,
"Norfair Lava Missile": AP_MZM_ID_BASE + 33,
"Norfair Screw Attack": AP_MZM_ID_BASE + 34,
"Norfair Screw Attack Missile": AP_MZM_ID_BASE + 35,
"Norfair Power Grip Missile": AP_MZM_ID_BASE + 36,
"Norfair Under Crateria Elevator": AP_MZM_ID_BASE + 37,
"Norfair Wave Beam": AP_MZM_ID_BASE + 38,
"Norfair Bomb Trap": AP_MZM_ID_BASE + 39,
"Norfair Bottom Heated Room First": AP_MZM_ID_BASE + 40, #TODO: maybe rename
"Norfair Bottom Heated Room Second": AP_MZM_ID_BASE + 41, #TODO and this one
"Norfair Heated Room Under Brinstar Elevator": AP_MZM_ID_BASE + 42,
"Norfair Space Boost Missile": AP_MZM_ID_BASE + 43, # TODO maybe rename
"Norfair Space Boost Super Missile": AP_MZM_ID_BASE + 44, # TODO and this one
"Norfair Ice Beam": AP_MZM_ID_BASE + 45,
"Norfair Heated Room above Ice Beam": AP_MZM_ID_BASE + 46,
"Norfair Hi-Jump": AP_MZM_ID_BASE + 47,
"Norfair Big Room": AP_MZM_ID_BASE + 48,
"Norfair Behind Top Chozo Statue": AP_MZM_ID_BASE + 49,
"Norfair Larva Ceiling E-tank": AP_MZM_ID_BASE + 50,
"Norfair Right Shaft Lower": AP_MZM_ID_BASE + 51,
"Norfair Right Shaft Bottom": AP_MZM_ID_BASE + 52
"Norfair Lava Dive Left": LocationData("Lower Norfair", AP_MZM_ID_BASE + 32),
"Norfair Lava Dive Right": LocationData("Lower Norfair", AP_MZM_ID_BASE + 33),
"Norfair Screw Attack": LocationData("Norfair Screw Attack Area", AP_MZM_ID_BASE + 34),
"Norfair Next to Screw Attack": LocationData("Norfair Screw Attack Area", AP_MZM_ID_BASE + 35),
"Norfair Hallway to Crateria": LocationData("Norfair Main", AP_MZM_ID_BASE + 36),
"Norfair Under Crateria Elevator": LocationData("Norfair Main", AP_MZM_ID_BASE + 37),
"Norfair Wave Beam": LocationData("Lower Norfair", AP_MZM_ID_BASE + 38),
"Norfair Bomb Trap": LocationData("Norfair Lower Right Shaft", AP_MZM_ID_BASE + 39),
"Norfair Heated Room Below Wave - Left": LocationData("Lower Norfair", AP_MZM_ID_BASE + 40),
"Norfair Heated Room Below Wave - Right": LocationData("Lower Norfair", AP_MZM_ID_BASE + 41),
"Norfair Heated Room Under Brinstar Elevator": LocationData("Norfair Lower Right Shaft", AP_MZM_ID_BASE + 42),
"Norfair Behind Lower Super Missile Door - Right": LocationData("Norfair Behind Super Door", AP_MZM_ID_BASE + 43),
"Norfair Behind Lower Super Missile Door - Left": LocationData("Norfair Behind Super Door", AP_MZM_ID_BASE + 44),
"Norfair Ice Beam": LocationData("Norfair Upper Right Shaft", AP_MZM_ID_BASE + 45),
"Norfair Heated Room above Ice Beam": LocationData("Norfair Upper Right Shaft", AP_MZM_ID_BASE + 46),
"Norfair Hi-Jump": LocationData("Norfair Lower Right Shaft", AP_MZM_ID_BASE + 47),
"Norfair Big Room": LocationData("Norfair Right Shaft", AP_MZM_ID_BASE + 48),
"Norfair Behind Top Chozo Statue": LocationData("Norfair Behind Ice Beam", AP_MZM_ID_BASE + 49),
"Norfair Larva Ceiling": LocationData("Norfair Bottom", AP_MZM_ID_BASE + 50),
"Norfair Right Shaft Near Hi-Jump": LocationData("Norfair Lower Right Shaft", AP_MZM_ID_BASE + 51),
"Norfair Right Shaft Bottom": LocationData("Norfair Bottom", AP_MZM_ID_BASE + 52)
}

ridley_location_table = {
"Ridley Southwest Puzzle Top": AP_MZM_ID_BASE + 53,
"Ridley Southwest Puzzle Bottom": AP_MZM_ID_BASE + 54,
"Ridley West Pillar": AP_MZM_ID_BASE + 55,
"Ridley E-Tank behind Gravity": AP_MZM_ID_BASE + 56,
"Ridley Gravity Suit/Unknown Item 3": AP_MZM_ID_BASE + 57,
"Ridley Fake Floor E-Tank": AP_MZM_ID_BASE + 58,
"Ridley Upper Ball Cannon Puzzle": AP_MZM_ID_BASE + 59,
"Ridley Lower Ball Cannon Puzzle": AP_MZM_ID_BASE + 60,
"Ridley Imago Super Missile": AP_MZM_ID_BASE + 61,
"Ridley After Sidehopper Hall Upper": AP_MZM_ID_BASE + 62,
"Ridley After Sidehopper Hall Lower": AP_MZM_ID_BASE + 63,
"Ridley Long Hall": AP_MZM_ID_BASE + 64,
"Ridley Center Pillar Missile": AP_MZM_ID_BASE + 65,
"Ridley Ball Room Missile": AP_MZM_ID_BASE + 66,
"Ridley Ball Room Super": AP_MZM_ID_BASE + 67,
"Ridley Fake Lava Missile": AP_MZM_ID_BASE + 68,
"Ridley Owl E-Tank": AP_MZM_ID_BASE + 69,
"Ridley Northeast corner Missile": AP_MZM_ID_BASE + 70,
"Ridley Bomb Puzzle": AP_MZM_ID_BASE + 71,
"Ridley Speed Jump": AP_MZM_ID_BASE + 72,
"Ridley": None
"Ridley Southwest Puzzle Top": LocationData("Ridley SW Puzzle", AP_MZM_ID_BASE + 53),
"Ridley Southwest Puzzle Bottom": LocationData("Ridley SW Puzzle", AP_MZM_ID_BASE + 54),
"Ridley West Pillar": LocationData("Ridley Left Shaft", AP_MZM_ID_BASE + 55),
"Ridley Behind Unknown Statue": LocationData("Ridley Room", AP_MZM_ID_BASE + 56),
"Ridley Unknown Item Statue": LocationData("Ridley Room", AP_MZM_ID_BASE + 57),
"Ridley Fake Floor": LocationData("Ridley Left Shaft", AP_MZM_ID_BASE + 58),
"Ridley Upper Ball Cannon Puzzle": LocationData("Central Ridley", AP_MZM_ID_BASE + 59),
"Ridley Lower Ball Cannon Puzzle": LocationData("Central Ridley", AP_MZM_ID_BASE + 60),
"Ridley Imago Super Missile": LocationData("Ridley Main", AP_MZM_ID_BASE + 61),
"Ridley After Sidehopper Hall Upper": LocationData("Central Ridley", AP_MZM_ID_BASE + 62),
"Ridley After Sidehopper Hall Lower": LocationData("Central Ridley", AP_MZM_ID_BASE + 63),
"Ridley Long Hall": LocationData("Ridley Left Shaft", AP_MZM_ID_BASE + 64),
"Ridley Center Pillar": LocationData("Central Ridley", AP_MZM_ID_BASE + 65),
"Ridley Ball Room Lower": LocationData("Central Ridley", AP_MZM_ID_BASE + 66),
"Ridley Ball Room Upper": LocationData("Central Ridley", AP_MZM_ID_BASE + 67),
"Ridley Fake Lava Under Floor": LocationData("Ridley Right Shaft", AP_MZM_ID_BASE + 68),
"Ridley Under Owls": LocationData("Central Ridley", AP_MZM_ID_BASE + 69),
"Ridley Northeast Corner": LocationData("Ridley Right Shaft", AP_MZM_ID_BASE + 70),
"Ridley Bomb Puzzle": LocationData("Ridley Speed Puzzles", AP_MZM_ID_BASE + 71),
"Ridley Speed Jump": LocationData("Ridley Speed Puzzles", AP_MZM_ID_BASE + 72),
"Ridley": LocationData("Ridley Room", None)
}

tourian_location_table = {
"Tourian Left of Mother Brain": AP_MZM_ID_BASE + 73,
"Tourian Under Mother Brain": AP_MZM_ID_BASE + 74,
"Mother Brain": None
"Tourian Left of Mother Brain": LocationData("Tourian", AP_MZM_ID_BASE + 73),
"Tourian Under Mother Brain": LocationData("Tourian", AP_MZM_ID_BASE + 74),
"Mother Brain": LocationData("Tourian", None)
}

crateria_location_table = {
"Crateria Landing Site Ballspark": AP_MZM_ID_BASE + 75,
"Crateria Power Grip": AP_MZM_ID_BASE + 76,
"Crateria Moat": AP_MZM_ID_BASE + 77,
"Crateria Statue Water": AP_MZM_ID_BASE + 78,
"Crateria Plasma Beam/Unknown Item 1": AP_MZM_ID_BASE + 79,
"Crateria East Ballspark": AP_MZM_ID_BASE + 80,
"Crateria Northeast Corner": AP_MZM_ID_BASE + 81
"Crateria Landing Site Ballspark": LocationData("Crateria", AP_MZM_ID_BASE + 75),
"Crateria Power Grip": LocationData("Upper Crateria", AP_MZM_ID_BASE + 76),
"Crateria Moat": LocationData("Crateria", AP_MZM_ID_BASE + 77),
"Crateria Statue Water": LocationData("Upper Crateria", AP_MZM_ID_BASE + 78),
"Crateria Unknown Item Statue": LocationData("Upper Crateria", AP_MZM_ID_BASE + 79),
"Crateria East Ballspark": LocationData("Upper Crateria", AP_MZM_ID_BASE + 80),
"Crateria Northeast Corner": LocationData("Upper Crateria", AP_MZM_ID_BASE + 81)
}

chozodia_location_table = {
"Chozodia Upper Crateria Door": AP_MZM_ID_BASE + 82,
"Chozodia Bomb Maze": AP_MZM_ID_BASE + 83,
"Chozodia Zoomer Maze": AP_MZM_ID_BASE + 84,
"Chozodia Ruins Near Upper Crateria Door": AP_MZM_ID_BASE + 85,
"Chozodia Chozo Ghost Area Morph Tunnel Above Water": AP_MZM_ID_BASE + 86,
"Chozodia Chozo Ghost Area Underwater": AP_MZM_ID_BASE + 87,
"Chozodia Under Chozo Ghost Area Water": AP_MZM_ID_BASE + 88,
"Chozodia Glass Tube E-Tank": AP_MZM_ID_BASE + 89,
"Chozodia Lava Super": AP_MZM_ID_BASE + 90,
"Chozodia Original Power Bomb": AP_MZM_ID_BASE + 91,
"Chozodia Next to Original Power Bomb": AP_MZM_ID_BASE + 92,
"Chozodia Glass Tube Power Bomb": AP_MZM_ID_BASE + 93,
"Chozodia Chozo Ghost Area Long Shinespark": AP_MZM_ID_BASE + 94,
"Chozodia Shortcut Super": AP_MZM_ID_BASE + 95,
"Chozodia Workbot Super": AP_MZM_ID_BASE + 96,
"Chozodia Mothership Ceiling Near ZSS Start": AP_MZM_ID_BASE + 97,
"Chozodia Under Mecha Ridley Hallway": AP_MZM_ID_BASE + 98,
"Chozodia Southeast Corner In Hull": AP_MZM_ID_BASE + 99,
"Chozo Ghost": None,
"Mecha Ridley": None,
"Chozodia Space Pirate's Ship": None
"Chozodia Upper Crateria Door": LocationData("Chozodia Ruins", AP_MZM_ID_BASE + 82),
"Chozodia Bomb Maze": LocationData("Chozodia Under Tube", AP_MZM_ID_BASE + 83),
"Chozodia Zoomer Maze": LocationData("Chozodia Under Tube", AP_MZM_ID_BASE + 84),
"Chozodia Ruins East of Upper Crateria Door": LocationData("Chozodia Ruins", AP_MZM_ID_BASE + 85),
"Chozodia Chozo Ghost Area Morph Tunnel Above Water": LocationData("Chozodia Ruins Test Area", AP_MZM_ID_BASE + 86),
"Chozodia Chozo Ghost Area Underwater": LocationData("Chozodia Ruins Test Area", AP_MZM_ID_BASE + 87),
"Chozodia Triple Crawling Pirates": LocationData("Chozodia Ruins", AP_MZM_ID_BASE + 88),
"Chozodia Left of Glass Tube": LocationData("Chozodia Under Tube", AP_MZM_ID_BASE + 89),
"Chozodia Lava Dive": LocationData("Chozodia Ruins Test Area", AP_MZM_ID_BASE + 90),
"Chozodia Original Power Bomb": LocationData("Chozodia Original Power Bomb Room", AP_MZM_ID_BASE + 91),
"Chozodia Next to Original Power Bomb": LocationData("Chozodia Original Power Bomb Room", AP_MZM_ID_BASE + 92),
"Chozodia Right of Glass Tube": LocationData("Chozodia Under Tube", AP_MZM_ID_BASE + 93),
"Chozodia Chozo Ghost Area Long Shinespark": LocationData("Chozodia Ruins Test Area", AP_MZM_ID_BASE + 94),
"Chozodia Pirate Pitfall Trap": LocationData("Chozodia Mothership Central", AP_MZM_ID_BASE + 95),
"Chozodia Behind Workbot": LocationData("Chozodia Mothership Central", AP_MZM_ID_BASE + 96),
"Chozodia Ceiling Near Map Station": LocationData("Chozodia Mothership Central", AP_MZM_ID_BASE + 97),
"Chozodia Under Mecha Ridley Hallway": LocationData("Chozodia Mecha Ridley Hallway", AP_MZM_ID_BASE + 98),
"Chozodia Southeast Corner In Hull": LocationData("Chozodia Mothership Central", AP_MZM_ID_BASE + 99),
"Chozo Ghost": LocationData("Chozodia Ruins Test Area", None),
"Mecha Ridley": LocationData("Chozodia Mecha Ridley Hallway", None),
"Chozodia Space Pirate's Ship": LocationData("Chozodia Mecha Ridley Hallway", None)
}

full_location_table: dict[str, int] = {
full_location_table = {
**brinstar_location_table,
**kraid_location_table,
**norfair_location_table,
Expand Down
Loading

0 comments on commit bb7bc6d

Please sign in to comment.