Files
dockipelago/worlds/tloz_ph/data/Constants.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

1997 lines
55 KiB
Python

from .Addresses import *
VERSION = "0.3.0"
ROM_HASH = "f2dc6c4e093e4f8c6cbea80e8dbd62cb"
STARTING_FLAGS = [
# Starting flags (these are in the same memory block so can be simplified, but it's called once and this is
# easier to bugfix)
[PHAddr.adv_flags_0, 0xef],
[PHAddr.adv_flags_1, 0x34],
[PHAddr.adv_flags_2, 0x2e],
[PHAddr.adv_flags_3, 0x3],
[PHAddr.adv_flags_4, 0xed],
[PHAddr.adv_flags_5, 0xb0],
[PHAddr.adv_flags_6, 0x40],
[PHAddr.adv_flags_7, 0xab],
[PHAddr.adv_flags_8, 0xff],
[PHAddr.adv_flags_9, 0xfb],
[PHAddr.adv_flags_10, 0x2f],
[PHAddr.adv_flags_11, 0xfc],
[PHAddr.adv_flags_12, 0x3b],
[PHAddr.adv_flags_13, 0x0],
[PHAddr.adv_flags_14, 0x4],
[PHAddr.adv_flags_15, 0x0],
[PHAddr.adv_flags_16, 0xd9],
[PHAddr.adv_flags_17, 0x4f],
[PHAddr.adv_flags_18, 0x12],
[PHAddr.adv_flags_19, 0x4],
[PHAddr.adv_flags_20, 0x2],
[PHAddr.adv_flags_21, 0x7e],
[PHAddr.adv_flags_22, 0x4],
[PHAddr.adv_flags_23, 0xea],
[PHAddr.adv_flags_24, 0x47],
[PHAddr.adv_flags_25, 0x0],
[PHAddr.adv_flags_26, 0xf8],
[PHAddr.adv_flags_27, 0xdf],
[PHAddr.adv_flags_28, 0x35],
[PHAddr.adv_flags_29, 0xe0],
[PHAddr.adv_flags_30, 0x10],
[PHAddr.adv_flags_31, 0xe0],
[PHAddr.adv_flags_32, 0x4e],
[PHAddr.adv_flags_33, 0xf9],
[PHAddr.adv_flags_34, 0xf],
[PHAddr.adv_flags_35, 0x5],
[PHAddr.adv_flags_36, 0x31],
[PHAddr.adv_flags_37, 0x0],
[PHAddr.adv_flags_38, 0x60],
[PHAddr.adv_flags_39, 0x20],
[PHAddr.adv_flags_40, 0x26],
[PHAddr.adv_flags_41, 0xcc],
[PHAddr.adv_flags_42, 0x0],
[PHAddr.adv_flags_43, 0xc8],
[PHAddr.adv_flags_44, 0x1f],
[PHAddr.adv_flags_45, 0x0],
[PHAddr.adv_flags_46, 0x8],
[PHAddr.adv_flags_47, 0x48],
[PHAddr.adv_flags_48, 0x78],
[PHAddr.adv_flags_49, 0x0],
[PHAddr.adv_flags_50, 0x0],
[PHAddr.adv_flags_51, 0x0],
# Set item can use flags
[PHAddr.boomerang_bit, 0x01],
[PHAddr.shovel_bit, 0x01],
[PHAddr.grapple_bit, 0x01],
[PHAddr.hammer_bit, 0x01],
# Starting items, Phantom Hourglass
[PHAddr.inventory_5, 0x01],
# Show treasure/ship part prices
[PHAddr.show_ship_prices, [0xFF]*9],
[PHAddr.show_treasure_prices, 0xFF],
# Starting treasure at 0 so incr works properly
[PHAddr.pink_coral_count, 0],
[PHAddr.wpl_count, 0],
[PHAddr.dpl_count, 0],
[PHAddr.zora_scale_count, 0],
[PHAddr.goron_amber_count, 0],
[PHAddr.ruto_crown_count, 0],
[PHAddr.roc_feather_count, 0],
[PHAddr.regal_ring_count, 0],
]
STARTING_FROG_FLAGS = [
[PHAddr.adv_flags_38, 0xE0],
[PHAddr.adv_flags_39, 0x3F]
]
FOG_SETTINGS_FLAGS = [
[[PHAddr.adv_flags_6, 0xC0], [PHAddr.adv_flags_47, 0x58]],
[],
[[PHAddr.adv_flags_2, 0x3E]]
]
STAGE_FLAGS = {
11: [0xC4, 0xDC, 0x06, 0x00], # Mercay
39: [0x40, 0x00, 0x00, 0x00], # Mountain Passage
37: [0xFE, 0xBE, 0xFB, 0xAF], # TotOK
0: [0x82, 0xFC, 0x66, 0xED], # Sea
13: [0xEC, 0x18, 0x17, 0x00], # Ember
28: [0x8E, 0xB9, 0x00, 0x00], # ToF
12: [0x34, 0x01, 0x00, 0x00], # Molida
14: [0x02, 0x02, 0x00, 0x00], # Gusts
29: [0x00, 0x10, 0x00, 0x00], # ToW
30: [0x00, 0x00, 0x02, 0x00], # ToC
41: [0xC2, 0x10, 0xED, 0x00], # Ghost Ship
16: [0x84, 0x13, 0x00, 0xE0], # Goron Island
32: [0x00, 0x00, 0x30, 0xF0], # Goron Temple
15: [0x00, 0x3C, 0x00, 0x40], # Isle of Frost
31: [0x00, 0x00, 0xD0, 0x00], # Temple of Ice
21: [0xB6, 0x01, 0x00, 0x00], # Isle of the Dead
17: [0x12, 0x4C, 0x43, 0x00], # Isle of ruins
18: [0x10, 0x4C, 0x43, 0x00], # Isle of ruins
36: [0x20, 0x00, 0x00, 0x00], # Bremeur's Temple
33: [0x00, 0x36, 0x00, 0x00], # Mutoh's Temple
}
SKIP_OCEAN_FIGHTS_FLAGS = [0x86, 0xFC, 0x66, 0xFD]
SPAWN_B3_REAPLING_FLAGS = [0xC2, 0x10, 0xED, 0x08]
STAGES = {
0: "Sea",
1: "Cannon Game",
2: "Fishing",
3: "Salvage",
4: "Linebeck's Ship",
5: "Beedle's Ship",
6: "Man of Smiles' Ship",
7: "PoRL's Ship",
8: "SS Wayfarer",
9: "Wayaway's Ship",
10: "Nyave's Ship",
11: "Mercay Island",
12: "Molida Island",
13: "Isle of Ember",
14: "Isle of Gust",
15: "Isle of Frost",
16: "Goron Island",
17: "Isle of Ruins (High Water)",
18: "Isle of Ruins (Low Water)",
19: "Cannon Island",
20: "Bannan Island",
21: "Isle of the Dead",
22: "Zauz's Island",
23: "Spirit Island",
24: "Harrow Island",
25: "Maze Island",
26: "Uncharted Island",
27: "Dee Ess Island",
28: "Temple of Fire",
29: "Temple of Wind",
30: "Temple of Courage",
31: "Temple of Ice",
32: "Goron Temple",
33: "Mutoh's Temple",
34: "Doylan's Temple",
35: "Max's Temple",
36: "Bremeur's Temple",
37: "Temple of the Ocean King",
38: "Temple of the Ocean King Entrance",
39: "Mountain Passage",
40: "Cannon Island Cave",
41: "Ghost Ship",
42: "Cyclok",
43: "Blaaz",
44: "Crayk",
45: "Gleeok",
46: "Dongorongo",
47: "Eox",
48: "Cubus Sisters",
49: "Bellum",
50: "Bellum's Ghost Ship",
51: "Bellumbeck",
0x36: "Credits",
}
ISLANDS = [
"Mercay Island",
"Cannon Island",
"Isle of Ember",
"Molida Island",
"Spirit Island",
"Isle of Gust",
"Bannan Island",
"Zauz's Island",
"Uncharted Island",
"Goron Island",
"Harrow Island",
"Dee Ess Island",
"Isle of Frost",
"Isle of the Dead",
"Maze Island",
"Isle of Ruins"
]
SEA_REGIONS = [
"Ocean SW",
"Ocean NW",
"Ocean NE",
"Ocean SE",
"Ocean Unspecific"
]
SEA_CHARTS = [
"SW Sea Chart",
"NW Sea Chart",
"SE Sea Chart",
"NE Sea Chart",
]
TREASURE_MAPS = [
"Treasure Map #1 (Molida SW)",
"Treasure Map #2 (Mercay NE)",
"Treasure Map #3 (Gusts SW)",
"Treasure Map #4 (Bannan SE)",
"Treasure Map #5 (Molida N)",
"Treasure Map #6 (Bannan W)",
"Treasure Map #7 (Gusts E)",
"Treasure Map #8 (Mercay SE)",
"Treasure Map #9 (Cannon W)",
"Treasure Map #10 (Gusts SE)",
"Treasure Map #11 (Gusts N)",
"Treasure Map #12 (Dee Ess N)",
"Treasure Map #13 (Harrow E)",
"Treasure Map #14 (Goron NW)",
"Treasure Map #15 (Goron W)",
"Treasure Map #16 (Goron NE)",
"Treasure Map #17 (Frost S)",
"Treasure Map #18 (Cannon S)",
"Treasure Map #19 (Gusts NE)",
"Treasure Map #20 (Bannan E)",
"Treasure Map #21 (Molida NW)",
"Treasure Map #22 (Harrow S)",
"Treasure Map #23 (Frost NW)",
"Treasure Map #24 (Ruins W)",
"Treasure Map #25 (Dead E)",
"Treasure Map #26 (Ruins SW)",
"Treasure Map #27 (Maze E)",
"Treasure Map #28 (Ruins NW)",
"Treasure Map #29 (Maze W)",
"Treasure Map #30 (Ruins S)",
"Treasure Map #31 (Dead S)",
]
ITEM_GROUPS: dict[str, set[str]] = {
"Small Keys": {
"Small Key (Mountain Passage)",
"Small Key (Temple of the Ocean King)",
"Small Key (Temple of Fire)",
"Small Key (Temple of Wind)",
"Small Key (Temple of Courage)",
"Small Key (Temple of Ice)",
"Small Key (Mutoh's Temple)"
},
"Vanilla Metals": {
"Crimzonine",
"Azurine",
"Aquanine"
},
"Custom Metals": {
"Verdanine",
"Lavendine",
"Amberine",
"Vermilline",
"Burgundine",
"Crystaline",
"Carrotine",
"Olivine",
"Chartreusine",
"Violetine",
"Ceruline",
"Fuchsianine",
"Saffronine",
"Viridine",
"Sepianine",
"Apricotine",
"Scarletine",
"Coraline",
"Magentine",
"Cyanine",
"Mauvine",
"Lilacine",
"Indigorine",
"Junipine",
"Limeinine",
"Mintine",
"Umberine",
},
"Treasure Items": {
"Treasure: Pink Coral",
"Treasure: White Pearl Loop",
"Treasure: Dark Pearl Loop",
"Treasure: Zora Scale",
"Treasure: Goron Amber",
"Treasure: Ruto Crown",
"Treasure: Helmaroc Plume",
"Treasure: Regal Ring"
},
"Ammo Refills": {
"Refill: Bombs",
"Refill: Arrows",
"Refill: Bombchus",
"Refill: Health",
},
"Treasure Maps": set(TREASURE_MAPS),
"Items With Ammo": {
"Bombs (Progressive)",
"Bombchus (Progressive)",
"Bow (Progressive)",
},
"Items Without Ammo": {
"Boomerang",
"Grappling Hook",
"Shovel",
"Hammer",
},
"Spirits": {
"Spirit of Power (Progressive)",
"Spirit of Wisdom (Progressive)",
"Spirit of Courage (Progressive)",
},
"Ship Items": {
"Cannon",
"Salvage Arm",
"Fishing Rod",
"Big Catch Lure",
"Cyclone Slate",
},
"Fish": {
"Fish: Skippyjack",
"Fish: Toona",
"Fish: Loovar",
"Fish: Rusty Swordfish",
"Fish: Legendary Neptoona",
"Fish: Stowfish"
},
"Sea Charts": set(SEA_CHARTS),
"Upgrades": {
"Heart Container",
"Sand of Hours",
"Swordsman's Scroll",
},
"Rupees": {
"Green Rupee (1)",
"Blue Rupee (5)",
"Red Rupee (20)",
"Big Green Rupee (100)",
"Big Red Rupee (200)",
"Gold Rupee (300)",
"Rupoor (-10)",
"Big Rupoor (-50)",
"Pre-Alpha Rupee (5000)",
},
"Boss Keys": {
"Boss Key (Temple of Fire)",
"Boss Key (Temple of Wind)",
"Boss Key (Temple of Courage)",
"Boss Key (Goron Temple)",
"Boss Key (Temple of Ice)",
"Boss Key (Mutoh's Temple)",
},
"Single Spirit Gems": {
"Power Gem",
"Wisdom Gem",
"Courage Gem",
},
"Spirit Gem Packs": {
"Power Gem Pack",
"Wisdom Gem Pack",
"Courage Gem Pack",
},
"Unique Crystal Items": {
"Triangle Pedestal B8 (Temple of the Ocean King)",
"Triangle Pedestal B9 (Temple of the Ocean King)",
"Round Pedestal B8 (Temple of the Ocean King)",
"Round Pedestal B9 (Temple of the Ocean King)",
"Square Pedestal West (Temple of the Ocean King)",
"Square Pedestal Center (Temple of the Ocean King)",
"Square Pedestal North (Temple of Courage)",
"Square Pedestal South (Temple of Courage)",
"Triangle Crystal (Ghost Ship)",
"Round Crystal (Ghost Ship)",
},
"Regular Crystal Items": {
"Square Crystal (Temple of Courage)",
"Triangle Crystal (Ghost Ship)",
"Round Crystal (Ghost Ship)",
"Round Crystal (Temple of the Ocean King)",
"Triangle Crystal (Temple of the Ocean King)",
"Square Crystal (Temple of the Ocean King)",
},
"Global Crystal Items": {
"Square Crystals",
"Round Crystals",
"Triangle Crystals",
},
"Unique Force Gems": {
"Force Gem (B3)",
"Force Gem (B12)",
},
"All Force Gems": {
"Force Gem (B3)",
"Force Gem (B12)",
"Force Gems"
},
"Collection Screen Keys": {
"Sun Key",
"Ghost Key",
"King's Key",
"Regal Necklace",
},
"Trade Quest Items": {
"Hero's New Clothes",
"Kaleidoscope",
"Guard Notebook",
"Wood Heart",
},
"Crests": {
"Courage Crest",
"Triforce Crest",
},
"Golden Frog Glyphs": {
"Golden Frog Glyph X",
"Golden Frog Glyph Phi",
"Golden Frog Glyph N",
"Golden Frog Glyph Omega",
"Golden Frog Glyph W",
"Golden Frog Glyph Square"
},
"Ships": {
# "S.S. Linebeck",
"Ship: Bright Ship",
"Ship: Iron Ship",
"Ship: Stone Ship",
"Ship: Vintage Ship",
"Ship: Demon Ship",
"Ship: Tropical Ship",
"Ship: Dignified Ship",
"Ship: Golden Ship",
},
"Technical Items": {
"Treasure",
"Ship Part",
"Potion",
"Nothing!",
"Sand of Hours (Boss)",
"Sand of Hours (Small)",
"Spirit of Courage (White)"
},
"Potions": {
"Red Potion",
"Purple Potion",
"Yellow Potion",
},
"Rupoors": {
"Rupoor (-10)",
"Big Rupoor (-50)",
},
"Swords": {
"Sword (Progressive)",
"Oshus' Sword",
"Phantom Sword",
},
"Map Warp Unlocks": {
"Map Warp: Mercay",
"Map Warp: Cannon",
"Map Warp: Ember",
"Map Warp: Molida",
"Map Warp: Spirit",
"Map Warp: Gust",
"Map Warp: Bannan",
"Map Warp: Uncharted",
"Map Warp: Zauz",
"Map Warp: Goron",
"Map Warp: Frost",
"Map Warp: Harrow",
"Map Warp: Dee Ess",
"Map Warp: Isle of the Dead",
"Map Warp: Ruins",
"Map Warp: Maze",
}
}
# Item Aliases
ITEM_GROUPS |= {
"Sword": ITEM_GROUPS["Swords"],
"Bombs": {"Bombs (Progressive)"},
"Bow": {"Bow (Progressive)"},
"Quiver": {"Bow (Progressive)"},
"Bombchus": {"Bombchus (Progressive)"},
"Chus": {"Bombchus (Progressive)"},
"Spade": {"Shovel"},
"Rang": {"Boomerang"},
"Grapple": {"Grappling Hook"},
"Spirit of Power": {"Spirit of Power (Progressive)"},
"Spirit of Wisdom": {"Spirit of Wisdom (Progressive)"},
"Spirit of Courage": {"Spirit of Courage (Progressive)"},
"SoP": {"Spirit of Power (Progressive)"},
"SoW": {"Spirit of Wisdom (Progressive)"},
"SoC": {"Spirit of Courage (Progressive)"},
"Map 1": {"Treasure Map #1 (Molida SW)"},
"Map 2": {"Treasure Map #2 (Mercay NE)"},
"Map 3": {"Treasure Map #3 (Gusts SW)"},
"Map 4": {"Treasure Map #4 (Bannan SE)"},
"Map 5": {"Treasure Map #5 (Molida N)"},
"Map 6": {"Treasure Map #6 (Bannan W)"},
"Map 7": {"Treasure Map #7 (Gusts E)"},
"Map 8": {"Treasure Map #8 (Mercay SE)"},
"Map 9": {"Treasure Map #9 (Cannon W)"},
"Map 10": {"Treasure Map #10 (Gusts SE)"},
"Map 11": {"Treasure Map #11 (Gusts N)"},
"Map 12": {"Treasure Map #12 (Dee Ess N)"},
"Map 13": {"Treasure Map #13 (Harrow E)"},
"Map 14": {"Treasure Map #14 (Goron NW)"},
"Map 15": {"Treasure Map #15 (Goron W)"},
"Map 16": {"Treasure Map #16 (Goron NE)"},
"Map 17": {"Treasure Map #17 (Frost S)"},
"Map 18": {"Treasure Map #18 (Cannon S)"},
"Map 19": {"Treasure Map #19 (Gusts NE)"},
"Map 20": {"Treasure Map #20 (Bannan E)"},
"Map 21": {"Treasure Map #21 (Molida NW)"},
"Map 22": {"Treasure Map #22 (Harrow S)"},
"Map 23": {"Treasure Map #23 (Frost NW)"},
"Map 24": {"Treasure Map #24 (Ruins W)"},
"Map 25": {"Treasure Map #25 (Dead E)"},
"Map 26": {"Treasure Map #26 (Ruins SW)"},
"Map 27": {"Treasure Map #27 (Maze E)"},
"Map 28": {"Treasure Map #28 (Ruins NW)"},
"Map 29": {"Treasure Map #29 (Maze W)"},
"Map 30": {"Treasure Map #30 (Ruins S)"},
"Map 31": {"Treasure Map #31 (Dead S)"},
"Small Key TotOK": {"Small Key (Temple of the Ocean King)"},
"Small Key MP": {"Small Key (Mountain Passage)"},
"Small Key ToF": {"Small Key (Temple of Fire)"},
"Small Key ToW": {"Small Key (Temple of Wind)"},
"Small Key ToC": {"Small Key (Temple of Courage)"},
"Small Key ToI": {"Small Key (Temple of Ice)"},
"Small Key MT": {"Small Key (Mutoh's Temple)"},
"Boss Key ToF": {"Boss Key (Temple of Fire)"},
"Boss Key ToW": {"Boss Key (Temple of Wind)"},
"Boss Key ToC": {"Boss Key (Temple of Courage)"},
"Boss Key GT": {"Boss Key (Goron Temple)"},
"Boss Key ToI": {"Boss Key (Temple of Ice)"},
"Boss Key MT": {"Boss Key (Mutoh's Temple)"},
}
# Combo groups
ITEM_GROUPS |= {
"Metals":
ITEM_GROUPS["Vanilla Metals"] |
ITEM_GROUPS["Custom Metals"] |
{"Additional Rare Metal"},
"Equipable Items":
ITEM_GROUPS["Items With Ammo"] |
ITEM_GROUPS["Items Without Ammo"],
"Fishing Items": {
"Fishing Rod",
"Big Catch Lure",
"Swordfish Shadows",
} |
ITEM_GROUPS["Fish"],
"Regular Pedestal Items":
ITEM_GROUPS["Regular Crystal Items"] |
ITEM_GROUPS["Unique Force Gems"],
"Unique Pedestal Items":
ITEM_GROUPS["Unique Force Gems"] |
ITEM_GROUPS["Unique Crystal Items"],
"Global Pedestal Items":
ITEM_GROUPS["Global Crystal Items"] |
{"Force Gems"},
"Spirit Gems":
ITEM_GROUPS["Single Spirit Gems"] |
ITEM_GROUPS["Spirit Gem Packs"],
}
ITEM_GROUPS |= {
"Shape Crystals":
ITEM_GROUPS["Unique Crystal Items"] |
ITEM_GROUPS["Regular Crystal Items"] |
ITEM_GROUPS["Global Crystal Items"],
"Pedestal Items":
ITEM_GROUPS["Regular Pedestal Items"] |
ITEM_GROUPS["Unique Pedestal Items"] |
ITEM_GROUPS["Global Pedestal Items"],
"Player Items": {
"Shield",
} | ITEM_GROUPS["Equipable Items"] |
ITEM_GROUPS["Swords"],
}
ITEM_GROUPS |= {
"Throwable Keys":
ITEM_GROUPS["Boss Keys"] |
ITEM_GROUPS["Pedestal Items"],
"Keys":
ITEM_GROUPS["Collection Screen Keys"] |
ITEM_GROUPS["Small Keys"] |
ITEM_GROUPS["Boss Keys"] |
ITEM_GROUPS["Pedestal Items"],
}
STAGE_LOCATION_GROUPS = {
"Mercay Island": [
"Sword Cave Chest",
"Mercay SW Clear Rocks",
"Mercay SW Tree Dig",
"Mercay SE Cucco Chest",
"Mercay NE Bonk Tree",
"Eye Bridge Cave Chest",
"Mercay SE Ledge Chest West",
"Mercay SE Ledge Chest East",
"Long Bridge Cave Chest",
"Mercay NE Freedle Island Chest",
"Mercay NE Freedle Gift Item",
"Mercay SE Ojibe (Docks Guy) Item",
"Shipyard Chest",
"Oshus Spirit Gem",
"Oshus Phantom Sword",
"Island Shop Power Gem",
"Island Shop Quiver",
"Island Shop Bombchu Bag",
"Island Shop Heart Container",
"TotOK Lobby Phantom Hourglass",
"Mountain Passage 1F Entrance Chest",
"Mountain Passage 1F Side Chest",
"Mountain Passage 1F Key Drop",
"Mountain Passage 2F Rat Key",
],
"Mountain Passage": [
"Mountain Passage 1F Entrance Chest",
"Mountain Passage 1F Side Chest",
"Mountain Passage 1F Key Drop",
"Mountain Passage 2F Rat Key",
],
"Beedle's Ship": [
"Beedle Shop Bomb Bag",
"Beedle Shop Wisdom Gem",
"Masked Beedle Heart Container",
"Masked Beedle Courage Gem",
"Beedle Membership Bronze",
"Beedle Membership Silver",
"Beedle Membership Gold",
"Beedle Membership Platinum",
"Beedle Membership VIP",
],
"Temple of the Ocean King": [
"TotOK 1F Sea Chart Chest",
"TotOK 1F Linebeck Key",
"TotOK 1F Empty Chest",
"TotOK B1 Small Key",
"TotOK B1 Shoot Eye Chest",
"TotOK B1 Phantom Chest",
"TotOK B2 Bombchu Chest",
"TotOK B2 Phantom Chest",
"TotOK B2 Small Key",
"TotOK B3 Bow Chest",
"TotOK B3 Phantom Chest",
"TotOK B3 NW Chest",
"TotOK B3 SW Chest",
"TotOK B3 SE Chest",
"TotOK B3 Small Key",
"TotOK B3.5 Sea Chart Chest",
"TotOK B4 Phantom Eye Chest",
"TotOK B4 Phantom Chest",
"TotOK B4 Small Key",
"TotOK B5 Alt Path Chest",
"TotOK B5 Chest",
"TotOK B6 Phantom Chest",
"TotOK B6 Bow Chest",
"TotOK B6 Courage Crest",
"TotOK B7 North Chest",
"TotOK B7 Peg Chest",
"TotOK B7 Phantom Chest",
"TotOK B8 2 Crystals Chest",
"TotOK B8 Phantom Chest",
"TotOK B9 NW Chest",
"TotOK B9 Wizzrobe Chest",
"TotOK B9 Phantom Chest",
"TotOK B9.5 Sea Chart Chest",
"TotOK B10 Hammer Switch Chest",
"TotOK B10 Phantom Chest",
"TotOK B10 Phantom Eye Chest",
"TotOK B10 Small Key",
"TotOK B11 Phantom Eye Chest",
"TotOK B11 Phantom Chest",
"TotOK B12 NE Chest",
"TotOK B12 NW Chest",
"TotOK B12 Hammer Chest",
"TotOK B12 Kill Everything Chest",
"TotOK B12 Phantom Chest",
"TotOK B13 Sea Chart Chest",
"GOAL: Triforce Door",
],
"Ocean": [
"Ocean SW Salvage Courage Crest",
"Ocean SW Golden Frog X",
"Ocean SW Golden Frog Phi",
"Ocean NW Golden Frog N",
"Ocean SE Golden Frog Omega",
"Ocean SE Golden Frog W",
"Ocean NE Golden Frog Square",
"Nyave Gift",
"Nyave Trade Quest Item",
"Prince of Red Lion Combat Reward",
"Prince of Red Lions Trade Quest Item",
"Hoiger Howgendoogen Trade Quest Item",
"Man Of Smiles' Item 1",
"Man Of Smiles' Item 2",
"Man of Smiles' Prize Postcard",
"Ocean Pirate Ambush Item",
"Beedle Shop Bomb Bag",
"Beedle Shop Wisdom Gem",
"Beedle Membership Bronze",
"Beedle Membership Silver",
"Beedle Membership Gold",
"Beedle Membership Platinum",
"Beedle Membership VIP",
"Masked Beedle Heart Container",
"Masked Beedle Courage Gem",
"Fishing Catch Skippyjack",
"Fishing Catch Toona",
"Fishing Catch Loovar",
"Fishing Catch Rusty Swordfish",
"Fishing Catch Legendary Neptoona",
"Fishing Catch Stowfish",
],
"Open Ocean": [
"Ocean SW Salvage Courage Crest",
"Ocean SW Golden Frog X",
"Ocean SW Golden Frog Phi",
"Ocean NW Golden Frog N",
"Ocean SE Golden Frog Omega",
"Ocean SE Golden Frog W",
"Ocean NE Golden Frog Square",
"Fishing Catch Skippyjack",
"Fishing Catch Toona",
"Fishing Catch Loovar",
"Fishing Catch Rusty Swordfish",
"Fishing Catch Legendary Neptoona",
"Fishing Catch Stowfish",
],
"Ocean SW": [
"Ocean SW Salvage Courage Crest",
"Ocean SW Golden Frog X",
"Ocean SW Golden Frog Phi",
"Nyave Gift",
"Nyave Trade Quest Item",
"Ocean SW Salvage #1 Molida SW",
"Ocean SW Salvage #2 Mercay NE",
"Ocean SW Salvage #5 Molida N",
"Ocean SW Salvage #8 Mercay SE",
"Ocean SW Salvage #9 Cannon W",
"Ocean SW Salvage #18 Cannon S",
"Ocean SW Salvage #21 Molida NW",
],
"Ocean NW": [
"Ocean NW Golden Frog N",
"Prince of Red Lion Combat Reward",
"Prince of Red Lions Trade Quest Item",
"Ocean NW Salvage #3 Gusts SW",
"Ocean NW Salvage #4 Bannan SE",
"Ocean NW Salvage #6 Bannan W",
"Ocean NW Salvage #7 Gusts E",
"Ocean NW Salvage #10 Gusts SE",
"Ocean NW Salvage #11 Gusts N",
"Ocean NW Salvage #19 Gusts NE",
"Ocean NW Salvage #20 Bannan E",
],
"Ocean SE": [
"Ocean SE Golden Frog Omega",
"Ocean SE Golden Frog W",
"Hoiger Howgendoogen Trade Quest Item",
"Ocean SE Salvage #12 Dee Ess N",
"Ocean SE Salvage #13 Harrow E",
"Ocean SE Salvage #14 Goron NW",
"Ocean SE Salvage #15 Goron W",
"Ocean SE Salvage #16 Goron NE",
"Ocean SE Salvage #17 Frost S",
"Ocean SE Salvage #22 Harrow S",
"Ocean SE Salvage #23 Frost NW",
],
"Ocean NE": [
"Ocean NE Golden Frog Square",
"Man Of Smiles' Item 1",
"Man Of Smiles' Item 2",
"Man of Smiles' Prize Postcard",
"Ocean NE Salvage #24 Ruins W",
"Ocean NE Salvage #25 Dead E",
"Ocean NE Salvage #26 Ruins SW",
"Ocean NE Salvage #27 Maze E",
"Ocean NE Salvage #28 Ruins NW",
"Ocean NE Salvage #29 Maze W",
"Ocean NE Salvage #30 Ruins S",
"Ocean NE Salvage #31 Dead S",
],
"Ocean Unspecific": [
"Ocean Pirate Ambush Item",
"Beedle Shop Bomb Bag",
"Beedle Shop Wisdom Gem",
"Masked Beedle Heart Container",
"Masked Beedle Courage Gem",
"Fishing Catch Skippyjack",
"Fishing Catch Toona",
"Fishing Catch Loovar",
"Fishing Catch Rusty Swordfish",
"Fishing Catch Legendary Neptoona",
"Fishing Catch Stowfish",
"Beedle Membership Bronze",
"Beedle Membership Silver",
"Beedle Membership Gold",
"Beedle Membership Platinum",
"Beedle Membership VIP",
],
"Traveller Ships": [
"Nyave Gift",
"Nyave Trade Quest Item",
"Prince of Red Lion Combat Reward",
"Prince of Red Lions Trade Quest Item",
"Hoiger Howgendoogen Trade Quest Item",
"Man Of Smiles' Item 1",
"Man Of Smiles' Item 2",
"Man of Smiles' Prize Postcard",
],
"Ships": [
"Nyave Gift",
"Nyave Trade Quest Item",
"Prince of Red Lion Combat Reward",
"Prince of Red Lions Trade Quest Item",
"Hoiger Howgendoogen Trade Quest Item",
"Man Of Smiles' Item 1",
"Man Of Smiles' Item 2",
"Man of Smiles' Prize Postcard",
"Ocean Pirate Ambush Item",
"Beedle Shop Bomb Bag",
"Beedle Shop Wisdom Gem",
"Masked Beedle Heart Container",
"Masked Beedle Courage Gem",
"Beedle Membership Bronze",
"Beedle Membership Silver",
"Beedle Membership Gold",
"Beedle Membership Platinum",
"Beedle Membership VIP",
],
"Nyave's Ship": [
"Nyave Gift",
"Nyave Trade Quest Item",
],
"Cannon Island": [
"Cannon Island Bee Chest",
"Cannon Island Cliff Chest",
"Cannon Island Bonk Tree",
"Cannon Island East Dig",
"Eddo's Cannon",
"Eddo's Salvage Arm",
"Cannon Island SE Dig",
"Cannon Island Bee Dig",
"Bomb Flower Cave Chest",
],
"Isle of Ember": [
"Astrid's Basement Dig",
"Isle of Ember West Grapple Chest",
"Isle of Ember East Summit Dig",
"Isle of Ember West Summit Chest",
"Astrid After Fire Temple Gift",
],
"Temple of Fire": [
"Temple of Fire 1F Keese Chest",
"Temple of Fire 1F Maze Chest",
"Temple of Fire 2F Boomerang Chest",
"Temple of Fire 2F Fire Keese Chest",
"Temple of Fire 2F Rat Key",
"Temple of Fire 3F Key Drop",
"Temple of Fire 3F Boss Key Chest",
"Blaaz Heart Container",
"Blaaz Boss Reward",
],
"Blaaz": [
"Blaaz Heart Container",
"Blaaz Boss Reward",
],
"Molida Island": [
"Potato's House Chest",
"Molida Island South Romanos Tree Dig",
"Sun Lake Cave Wayfarer Hideaway Chest",
"Sun Lake Cave Grapple Chest",
"Sun Lake Cave Geozard Dig",
"Shovel Hideout Chest",
"Shovel Hideout Dig",
"Molida Island North Cliff Chest",
"Molida Island South Cucco Grapple Tree Dig",
"Sun Lake Cave North Drop Chest",
"Molida Island North Grapple Chest",
"Archery Minigame 1700",
"Archery Minigame 2000",
"Molida Island South Cucco Grapple Small Island Dig",
],
"Temple of Courage": [
"Temple of Courage 1F Bomb Alcove Chest",
"Temple of Courage 1F Raised Platform Chest",
"Temple of Courage 1F Map Room Chest East",
"Temple of Courage 1F Map Room Chest West",
"Temple of Courage 1F Pols Voice Key",
"Temple of Courage 2F Beamos Maze Chest",
"Temple of Courage B1 Maze Chest",
"Temple of Courage B1 Bow Chest",
"Temple of Courage 2F Moving Platform Chest",
"Temple of Courage 2F Spike Corridor Chest",
"Temple of Courage B1 Torch Room Secret Chest",
"Temple of Courage 1F Pols Voice Key 2",
"Temple of Courage 2F Boss Key Chest",
"Temple of Courage 3F Before Boss Chest",
"Crayk Boss Reward",
"Crayk Sand of Hours",
"Crayk Heart Container",
],
"Crayk": [
"Crayk Boss Reward",
"Crayk Sand of Hours",
"Crayk Heart Container",
],
"Spirit Island": [
"Spirit Island Outside Chest",
"Spirit Island Gauntlet Chest",
"Spirit Shrine Power Upgrade Level 1",
"Spirit Shrine Power Upgrade Level 2",
"Spirit Shrine Wisdom Upgrade Level 1",
"Spirit Shrine Wisdom Upgrade Level 2",
"Spirit Shrine Courage Upgrade Level 1",
"Spirit Shrine Courage Upgrade Level 2",
],
"PoRL's Ship": [
"Prince of Red Lion Combat Reward",
"Prince of Red Lions Trade Quest Item",
],
"Isle of Gust": [
"Tiled Hideout Chest",
"Miniblin Cave North Chest",
"Miniblin Cave South Chest",
"Isle of Gust South NE Dig",
"Isle of Gust South NW Chest",
"Isle of Gust North Dig",
"Isle of Gust North Sandworm Chest",
],
"Temple of Wind": [
"Temple of Wind B1 SE Corner Chest",
"Temple of Wind B1 Ledge Chest",
"Temple of Wind B2 Chest",
"Temple of Wind B2 Bombable Wall Item",
"Temple of Wind B1 Key Drop",
"Temple of Wind B2 Bomb Bag Chest",
"Temple of Wind 1F Boss Key Chest",
"Cyclok Sand of Hours",
"Cyclok Boss Reward",
"Cyclok Heart Container",
],
"Cyclok": [
"Cyclok Sand of Hours",
"Cyclok Boss Reward",
"Cyclok Heart Container",
],
"Bannan Island": [
"Bannan Island West Grapple Chest",
"Bannan Island Wayfarers Dig",
"Wayfarer's Gift",
"Bannan Island East Grapple Chest East",
"Bannan Island East Grapple Chest West",
"Bannan Island East Grapple Dig",
"Bannan Island East Cannon Game",
"Wayfarer Trade Quest Chest",
"Wayfarer Give Loovar",
"Wayfarer Give Rusty Swordfish",
"Wayfarer Give Legendary Neptoona",
"Wayfarer Give Stowfish",
"Joanne Give Letter",
],
"Uncharted Island": [
"Uncharted Island Eye Dig",
"Descending Cave Grapple Chest",
"Golden Chief Gift",
],
"Zauz's Island": [
"Zauz's Island Cucco Chest",
"Zauz's Island Secret Dig",
"Zauz's House Triforce Crest",
"Zauz's House Phantom Blade",
],
"Ghost Ship": [
"Ghost Ship B1 Entrance Chest",
"Ghost Ship B1 Second Sister Chest",
"Ghost Ship B2 Third Sister Left Chest",
"Ghost Ship B2 Third Sister Right Chest",
"Ghost Ship B2 Spike Chest",
"Ghost Ship B3 Chest",
"Ghost Ship Rescue Tetra",
"Cubus Sisters Ghost Key",
"Cubus Sisters Heart Container",
],
"Cubus Sisters": [
"Cubus Sisters Ghost Key",
"Cubus Sisters Heart Container",
],
"Linebeck's Ship": [
"Ocean Pirate Ambush Item",
],
"Goron Island": [
"Goron Island SW Yellow Chu Item",
"Goron Island SW Grapple Chest",
"Goron Chief Goron Quiz",
"Goron Island NE Bombchu Switch Chest",
"Goron Island NW Dead End Chest",
"Goron Island NE Spike Chest",
"Goron Chief Post Dungeon Item",
],
"Goron Temple": [
"Goron Temple 1F Switch Chest",
"Goron Temple 1F Bow Chest",
"Goron Temple B1 Bombchu Bag Chest",
"Goron Temple B1 Kill Eyeslugs Chest",
"Goron Temple B3 Kill Miblins Chest",
"Goron Temple B2 Kill Eyeslugs Chest",
"Goron Temple B2 Boss Key Chest",
"Dongorongo Boss Reward",
"Dongorongo Sand of Hours",
"Dongorongo Heart Container",
],
"Dongorongo": [
"Dongorongo Boss Reward",
"Dongorongo Sand of Hours",
"Dongorongo Heart Container",
],
"Harrow Island": [
"Harrow Island Dig 1",
"Harrow Island Dig 2",
"Harrow Island Dig 3",
"Harrow Island Dig 4",
],
"Dee Ess Island": [
"Dee Ess Menu Button Dig",
"Dee Ess Left Speakers Dig SSW",
"Dee Ess Right Speakers Dig SE",
"Dee Ess Left Speakers Dig West",
"Dee Ess Win Goron Game",
"Dee Ess Eye Brute Chest",
"Dee Ess Blow in Microphone Chest",
],
"Isle of Frost": [
"Isle of Frost SW Nobodo Grapple Chest",
"Isle of Frost SW Chief's Sign Dig",
"Isle of Frost NW Estate Sign Dig",
"Isle of Frost Fofo Dig (SE)",
"Isle of Frost Dobo Dig (SW)",
"Isle of Frost NW Island Dig SW",
"Isle of Frost NW Island Dig SE",
"Isle of Frost SE South Ledge West Chest",
"Isle of Frost SE South Ledge East Chest",
"Isle of Frost SE Corner Chest",
"Isle of Frost SE East Ledge Chest",
],
"Temple of Ice": [
"Temple of Ice 3F Corner Chest",
"Temple of Ice 3F Switch State Chest",
"Temple of Ice 3F Key Drop",
"Temple of Ice 2F Grappling Hook Chest",
"Temple of Ice B1 Entrance Chest",
"Temple of Ice B1 SE Chest",
"Temple of Ice B1 Locked Room Chest",
"Temple of Ice B2 Bow Bounce Chest",
"Temple of Ice B2 Fight Chest",
"Temple of Ice B2 Boss Key Chest",
"Gleeok Boss Reward",
"Gleeok Sand of Hours",
"Gleeok Heart Container",
],
"Gleeok": [
"Gleeok Boss Reward",
"Gleeok Sand of Hours",
"Gleeok Heart Container",
],
"Isle of the Dead": [
"Rupoor Cave 1",
"Rupoor Cave 4",
"Rupoor Cave 2",
"Rupoor Cave 3",
"Stone Treasure Cave Chest",
"Isle of the Dead Face Chest",
"Isle of the Dead Crown Chest",
],
"Isle of Ruins": [
"Grassy Treasure Cave Chest",
"Isle of Ruins NW Lower Maze Chest",
"Isle of Ruins NE Dodge Boulders Chest",
"Isle of Ruins NE Secret Alcove Chest",
"Doylan's Gift",
"Isle of Ruins NE Outside Pyramid Chest",
"Isle of Ruins NW Like-Like Dig",
"Isle of Ruins Bonk Tree",
"Isle of Ruins NE Behind Temple Chest",
"Isle of Ruins NW Lower Water Bonk Tree",
],
"Mutoh's Temple": [
"Mutoh's Temple 2F Like-Like Maze Chest",
"Mutoh's Temple 3F Hammer Chest",
"Mutoh's Temple B2 Spike Roller Chest",
"Mutoh's Temple B2 Ledge Chest",
"Mutoh's Temple B1 Lower Water Chest",
"Mutoh's Temple B1 Push Boulder Chest",
"Mutoh's Temple B1 Boss Key Chest",
"Eox Boss Reward",
"Eox Sand of Hours",
"Eox Heart Container",
],
"Eox": [
"Eox Boss Reward",
"Eox Sand of Hours",
"Eox Heart Container",
],
"Maze Island": [
"Maze Island Bombable Wall Chest",
"Maze Island Beginner",
"Maze Island Normal",
"Maze Island Expert",
"Maze Island Bonus Reward",
"Maze Island SE Dig",
"Maze Island NE Dig",
"Maze Island NW Dig",
],
"Credits": [
"GOAL: Triforce Door",
],
"Man of Smiles' Ship": [
"Man Of Smiles' Item 1",
"Man Of Smiles' Item 2",
"Man of Smiles' Prize Postcard",
],
"Wayaway's Ship": [
"Hoiger Howgendoogen Trade Quest Item",
],
}
CATEGORY_LOCATION_GROUPS = {
"Shops": [
"Beedle Shop Bomb Bag",
"Beedle Shop Wisdom Gem",
"Masked Beedle Heart Container",
"Masked Beedle Courage Gem",
"Island Shop Power Gem",
"Island Shop Quiver",
"Island Shop Bombchu Bag",
"Island Shop Heart Container",
"Eddo's Cannon",
"Eddo's Salvage Arm",
"Mercay SE Ojibe (Docks Guy) Item",
],
"Island Shops": [
"Island Shop Power Gem",
"Island Shop Quiver",
"Island Shop Bombchu Bag",
"Island Shop Heart Container",
],
"Beedle": [
"Beedle Shop Bomb Bag",
"Beedle Shop Wisdom Gem",
"Beedle Membership Bronze",
"Beedle Membership Silver",
"Beedle Membership Gold",
"Beedle Membership Platinum",
"Beedle Membership VIP",
],
"Masked Beedle": [
"Masked Beedle Heart Container",
"Masked Beedle Courage Gem",
],
"Minigames": [
"Bannan Island East Cannon Game",
"Prince of Red Lions Combat Reward",
"Archery Minigame 1700",
"Archery Minigame 2000",
"Dee Ess Win Goron Game",
"Maze Island Beginner",
"Maze Island Normal",
"Maze Island Expert",
"Maze Island Bonus Reward",
],
"Rupee Dig Spots": [
"Maze Island SE Dig",
"Maze Island NE Dig",
"Maze Island NW Dig",
"Isle of Ruins NW Like-Like Dig",
"Isle of Frost SW Chief's Sign Dig",
"Isle of Frost NW Island Dig SE",
"Isle of Frost NW Estate Sign Dig",
"Isle of Frost NW Fofo's Sign Dig (SE)",
"Isle of Frost NW Dobo's Sign Dig (SW)",
"Dee Ess Left Speakers Dig SSW",
"Dee Ess Right Speakers Dig SE",
"Dee Ess Left Speakers Dig West",
"Isle of Gust North Dig",
"Isle of Gust South NE Dig",
"Molida Island South Cucco Grapple Small Island Dig",
"Shovel Hideout Dig",
"Sun Lake Cave Geozard Dig",
"Molida Island South Romanos Tree Dig",
"Cannon Island SE Dig",
"Cannon Island Bee Dig",
"Cannon Island East Dig",
],
"Trade Quest": [
"Nyave Trade Quest Item",
"Prince of Red Lions Trade Quest Item",
"Hoiger Howgendoogen Trade Quest Item",
"Wayfarer Trade Quest Chest",
],
"Bonk Trees": [
"Mercay NE Bonk Tree",
"Isle of Ruins Bonk Tree",
"Cannon Island Bonk Tree",
"Isle of Ruins NW Lower Water Bonk Tree"
],
"Golden Frogs": [
"Ocean SW Golden Frog X",
"Ocean SW Golden Frog Phi",
"Ocean NW Golden Frog N",
"Ocean SE Golden Frog Omega",
"Ocean SE Golden Frog W",
"Ocean NE Golden Frog Square",
],
"Salvage": [
"Ocean SW Salvage Courage Crest",
],
"Spirit Upgrades": [
"Spirit Shrine Power Upgrade Level 1",
"Spirit Shrine Power Upgrade Level 2",
"Spirit Shrine Wisdom Upgrade Level 1",
"Spirit Shrine Wisdom Upgrade Level 2",
"Spirit Shrine Courage Upgrade Level 1",
"Spirit Shrine Courage Upgrade Level 2",
],
"Fishing Locations": [
"Wayfarer Give Loovar",
"Wayfarer Give Rusty Swordfish",
"Wayfarer Give Legendary Neptoona",
"Wayfarer Give Stowfish",
"Fishing Catch Skippyjack",
"Fishing Catch Toona",
"Fishing Catch Loovar",
"Fishing Catch Rusty Swordfish",
"Fishing Catch Legendary Neptoona",
"Fishing Catch Stowfish",
],
"Fish": [
"Fishing Catch Skippyjack",
"Fishing Catch Toona",
"Fishing Catch Loovar",
"Fishing Catch Rusty Swordfish",
"Fishing Catch Legendary Neptoona",
"Fishing Catch Stowfish",
],
"Salvage Locations": [
"Ocean SW Salvage #1 Molida SW",
"Ocean SW Salvage #2 Mercay NE",
"Ocean NW Salvage #3 Gusts SW",
"Ocean NW Salvage #4 Bannan SE",
"Ocean SW Salvage #5 Molida N",
"Ocean NW Salvage #6 Bannan W",
"Ocean NW Salvage #7 Gusts E",
"Ocean SW Salvage #8 Mercay SE",
"Ocean SW Salvage #9 Cannon W",
"Ocean NW Salvage #10 Gusts SE",
"Ocean NW Salvage #11 Gusts N",
"Ocean SE Salvage #12 Dee Ess N",
"Ocean SE Salvage #13 Harrow E",
"Ocean SE Salvage #14 Goron NW",
"Ocean SE Salvage #15 Goron W",
"Ocean SE Salvage #16 Goron NE",
"Ocean SE Salvage #17 Frost S",
"Ocean SW Salvage #18 Cannon S",
"Ocean NW Salvage #19 Gusts NE",
"Ocean NW Salvage #20 Bannan E",
"Ocean SW Salvage #21 Molida NW",
"Ocean SE Salvage #22 Harrow S",
"Ocean SE Salvage #23 Frost NW",
"Ocean NE Salvage #24 Ruins W",
"Ocean NE Salvage #25 Dead E",
"Ocean NE Salvage #26 Ruins SW",
"Ocean NE Salvage #27 Maze E",
"Ocean NE Salvage #28 Ruins NW",
"Ocean NE Salvage #29 Maze W",
"Ocean NE Salvage #30 Ruins S",
"Ocean NE Salvage #31 Dead S",
],
"Boss Rewards": [
"Blaaz Boss Reward",
"Cyclok Boss Reward",
"Crayk Boss Reward",
"Dongorongo Boss Reward",
"Gleeok Boss Reward",
"Eox Boss Reward",
],
"Grappling Hook Excludes": [
"TotOK B3 NW Chest",
"TotOK B3 SW Chest",
"TotOK B3 SE Chest",
],
}
LOCATION_GROUPS = CATEGORY_LOCATION_GROUPS | STAGE_LOCATION_GROUPS
DUNGEON_NAMES = [
"Mountain Passage",
"Temple of the Ocean King",
"Temple of Fire",
"Temple of Wind",
"Temple of Courage",
"Goron Temple",
"Temple of Ice",
"Mutoh's Temple",
"Ghost Ship"
]
DUNGEON_TO_BOSS_ITEM_LOCATION = {
"Temple of the Ocean King": "TotOK B13 Sea Chart Chest",
"Temple of Fire": "Blaaz Boss Reward",
"Temple of Wind": "Cyclok Boss Reward",
"Temple of Courage": "Crayk Boss Reward",
"Goron Temple": "Dongorongo Boss Reward",
"Temple of Ice": "Gleeok Boss Reward",
"Mutoh's Temple": "Eox Boss Reward",
"Ghost Ship": "_gs",
}
BOSS_LOCATION_TO_DUNGEON = {
"TotOK B13 Sea Chart Chest": "Temple of the Ocean King",
"Blaaz Boss Reward": "Temple of Fire",
"Cyclok Boss Reward": "Temple of Wind",
"Crayk Boss Reward": "Temple of Courage",
"Dongorongo Boss Reward": "Goron Temple",
"Gleeok Boss Reward": "Temple of Ice",
"Eox Boss Reward": "Mutoh's Temple",
"Ghost Ship Rescue Tetra": "Ghost Ship",
"Cubus Sisters Ghost Key": "Ghost Ship",
}
GHOST_SHIP_BOSS_ITEM_LOCATION = [
"Ghost Ship Rescue Tetra",
"Cubus Sisters Ghost Key",
"Cubus Sisters Ghost Key"
]
# Entrance name: dungeon name
BOSS_STAIRCASES = {
"ToF Enter Boss": "Temple of Fire",
"ToW Enter Boss": "Temple of Wind",
"ToC Enter Boss": "Temple of Courage",
"Ghost Ship Cubus Sisters Reunion": "Ghost Ship",
"GT Enter Boss": "Goron Temple",
"ToI Enter Boss": "Temple of Ice",
"MT Enter Boss": "Mutoh's Temple",
}
BOSS_LOOKUP = {
"Temple of Fire": "Blaaz",
"Temple of Wind": "Cyclok",
"Temple of Courage": "Crayk",
"Ghost Ship": "Cubus Sisters",
"Goron Temple": "Dongorongo",
"Temple of Ice": "Gleeok",
"Mutoh's Temple": "Eox"
}
# Boss Room Entrance name: boss reward location name
BOSS_ENTRANCE_LOOKUP = {
"Blaaz Exit": "Blaaz Boss Reward",
"Cyclok Exit": "Cyclok Boss Reward",
"Crayk Exit": "Crayk Boss Reward",
"Cubus Sisters Blue Warp": "Cubus Sisters Ghost Key",
"Dongo Exit": "Dongorongo Boss Reward",
"Gleeok Exit": "Gleeok Boss Reward",
"Eox Exit": "Eox Boss Reward",
}
DUNGEON_KEY_DATA = {
39: {
"name": "Mountain Passage",
"address": PHAddr.small_key_storage_1,
"filter": 0x0C,
"value": 4,
"size": 2,
},
37: {
"name": "Temple of the Ocean King",
"address": PHAddr.small_key_storage_1,
"filter": 0xE0,
"value": 0x20,
"size": 3,
},
372: {
"name": "Temple of the Ocean King",
"address": PHAddr.small_key_storage_2,
"filter": 0xC0,
"value": 0x40,
"size": 2,
},
0x1C: {
"name": "Temple of Fire",
"address": PHAddr.small_key_storage_1,
"value": 1,
"size": 2,
"filter": 0x03,
},
0x1E: {
"name": "Temple of Courage",
"address": PHAddr.small_key_storage_2,
"value": 0x10,
"size": 2,
"filter": 0x30,
},
0x1D: {
"name": "Temple of Wind",
"address": PHAddr.small_key_storage_1,
"value": 0x10,
"size": 1,
"filter": 0x10
},
0x1F: {
"name": "Temple of Ice",
"address": PHAddr.small_key_storage_2,
"value": 0x1,
"size": 2,
"filter": 0x03
},
0x21: {
"name": "Mutoh's Temple",
"address": PHAddr.small_key_storage_2,
"value": 0x4,
"size": 2,
"filter": 0x0C
},
}
BOSS_DOOR_DATA = {
0x1C: {
"name": "Temple of Fire",
"address": PHAddr.tof_doors,
"value": 0x1
},
0x1D: {
"name": "Temple of Wind",
"address": PHAddr.tow_doors,
"value": 0x400
},
0x1E: {
"name": "Temple of Courage",
"address": PHAddr.toc_boss_door,
"value": 0x2
},
0x20: {
"name": "Goron Temple",
"address": PHAddr.gt_boss_door,
"value": 0x1
},
0x1F: {
"name": "Temple of Ice",
"address": PHAddr.toi_doors,
"value": 0x80
},
0x21: {
"name": "Mutoh's Temple",
"address": PHAddr.mt_doors,
"value": 0x1
},
}
COLOR_SWITCH_DATA = {
0x1F: {
"name": "Temple of Ice",
"address": PHAddr.color_switch_toi,
"value": 0x1
},
0x1E: {
"name": "Temple of Courage",
"address": PHAddr.color_switch_toc,
"value": 0x1
},
}
UT_EVENT_DATA = {
0x2400: {"address": PHAddr.adv_flags_6,
"value": 0x4,
"entrance": "EVENT: Bremeur's Temple Lower Water"},
0x800: {"address": PHAddr.adv_flags_22,
"value": 0x8,
"entrance": "EVENT: SS Wayfarer Give Wood Heart"},
0x1001: [
{"address": "stage_flags",
"value": 0x4,
"entrance": "EVENT: Goron NE Spike Switch",
"offset": 1},
{"address": PHAddr.goron_bomb_blocks,
"value": 0x8,
"event": "gms"},
{"address": PHAddr.goron_bomb_blocks,
"value": 0x1,
"event": "gss"}],
0x1003: [
{"address": PHAddr.adv_flags_35,
"value": 0x2,
"entrance": "EVENT: Goron SE Shout to Bridge Goron"},
],
0x1002: {"address": PHAddr.adv_flags_34,
"value": 0x20,
"entrance": "EVENT: Goron SW Kill Yellow Chus"},
0x130B: {"address": PHAddr.adv_flags_6,
"value": 0x2,
"entrance": "EVENT: Open Eddo's Door",},
0xe01: {"address": "stage_flags",
"value": 0x20,
"entrance": "EVENT: Gust Windmills",},
0x1000: [{"address": "stage_flags",
"value": 0x2,
"event": "gsb"},
{"address": "stage_flags",
"value": 0x20,
"event": "gls"},
],
0xB02: {"address": "stage_flags",
"value": 0x1,
"event": "fi",
"offset": 1},
0x1203: {"address": "stage_flags",
"value": 0x80,
"event": "rb",
"offset": 1},
0xF03: {"address": "stage_flags",
"value": 0x10,
"event": "fif",
"offset": 2},
0x1A00: {"address": PHAddr.adv_flags_38,
"value": 0x10,
"event": "ub"},
0xd01: {"address": "stage_flags",
"value": 0x40,
"event": "md"},
0x1c03: {"address": "stage_flags",
"value": 0x80,
"event": "tfw",
"offset": 1},
0x1d04: {"address": PHAddr.tow_warp,
"value": 0x1,
"event": "tww"},
0x1e03: {"address": PHAddr.toc_warp,
"value": 0x1,
"event": "tcw"},
0x2004: {"address": "stage_flags",
"value": 0x80,
"event": "gtw",
"offset": 3},
0x1f02: {"address": PHAddr.toi_warp,
"value": 0x1,
"event": "tiw"},
0x2105: {"address": "stage_flags",
"value": 0x10,
"event": "mtw",
"offset": 1},
0x1300: {"address": PHAddr.cannon_bomb_blocks,
"value": 0x1,
"event": "cb"},
0xC0A: {"address": PHAddr.molida_bomb_blocks,
"value": 0x1,
"event": "mcb"},
}
hidden_event_connect = {
# Connected on flag read
"gsb": ("Goron NW Shortcut", "Goron NW Outside Temple"),
"fi": ("Mercay NE", "Mercay NW Freedle Island"),
"gms": ("Goron NE Middle", "Goron NE"),
"gss": ("Goron NE South", "Goron NE"),
"gls": ("Goron NW Outside Temple", "Goron NW Like Like"),
"rb": ("Ruins SE Return Bridge West", "Ruins SE Return Bridge East"),
"fif": ("Frost SE Exit", "Frost SE"),
"ub": ("Uncharted Outside Cave", "Uncharted Island"),
"md": ("Molida Outside Temple", "Molida North"),
"cb": ("Cannon Outside Eddo", "Cannon Bomb Garden"),
"mcb": ("Sun Lake Cave", "Sun Lake Cave Back"),
"tfw": ("ToF 1F", "ToF 4F"),
"tww": ("ToW 1F", "ToW 2F"),
"tcw": ("ToC 1F", "ToC 3F"),
"gtw": ("GT 1F", "GT B4"),
"tiw": ("ToI 1F", "ToI Blue Warp"),
"mtw": ("MT 1F", "MT B3"),
# map warp connections
"wsw": ("Menu", "SW Ocean East", "Warp to SW Ocean"),
"wse": ("Menu", "SE Ocean", "Warp to SE Ocean"),
"wnw": ("Menu", "NW Ocean", "Warp to NW Ocean"),
"wne": ("Menu", "NE Ocean", "Warp to NE Ocean"),
"wmc": ("Menu", "Mercay SE", "Warp to Mercay Island"),
"wc": ("Menu", "Cannon Island", "Warp to Cannon Island"),
"we": ("Menu", "Ember Port", "Warp to Isle of Ember"),
"wml": ("Menu", "Molida South", "Warp to Molida Island"),
"ws": ("Menu", "Spirit Island", "Warp to Spirit Island"),
"wgu": ("Menu", "Gust South", "Warp to Isle of Gust"),
"wb": ("Menu", "Bannan Island", "Warp to Bannan Island"),
"wz": ("Menu", "Zauz's Island", "Warp to Zauz' Island"),
"wu": ("Menu", "Uncharted Island", "Warp to Uncharted Island"),
"wgo": ("Menu", "Goron SW", "Warp to Goron Island"),
"wf": ("Menu", "Frost SW", "Warp to Isle of Frost"),
"wh": ("Menu", "Harrow Island", "Warp to Harrow Island"),
"wds": ("Menu", "Dee Ess Island", "Warp to Dee Ess Island"),
"wd": ("Menu", "IotD Port", "Warp to Isle of the Dead"),
"wr": ("Menu", "Ruins SW Port", "Warp to Isle of Ruins"),
"wmz": ("Menu", "Maze Island", "Warp to Maze Island"),
}
BOSS_EVENT_TO_LOCATION = {
"EVENT: Defeat Blaaz": "Blaaz Boss Reward",
"EVENT: Defeat Cyclok": "Cyclok Boss Reward",
"EVENT: Defeat Crayk": "Crayk Boss Reward",
"EVENT: Rescue Tetra": ["Ghost Ship Rescue Tetra", "Cubus Sisters Ghost Key"],
"EVENT: Defeat Dongorongo": "Dongorongo Boss Reward",
"EVENT: Defeat Gleeok": "Gleeok Boss Reward",
"EVENT: Defeat Eox": "Eox Boss Reward",
}
DEAD_END_ENTRANCES = [
"Abandoned House Exit",
"Bannan East Cave",
"Bannan West Hut",
"Grassy Rupee Cave Exit",
"Molida South Cliff North",
"Ocara's House Exit",
"Shovel Hideout Exit",
"Spirit Shrine Exit",
"Stone Treasure Cave Exit",
"Tiled Hideout Exit",
"Anouki Chief's Exit",
"Apricot's Exit",
"Aroo's Exit",
"Astrid's Basement Stairs",
"Blaaz Exit",
"Bremeur's Exit",
"Crayk Exit",
"Cubus Sisters Blue Warp",
"Cyclok Exit",
"Dee Ess Boat",
"Dobo's Exit",
"Dongo Exit",
"Doylan's Chamber Exit",
"Eox Exit",
"Fofo's Exit",
"Gleeok Exit",
"Golden Chief Exit",
"Goron Chief House Exit",
"Goron Chu House Exit",
"Goron Coast House Exit",
"Goron Mountain House Exit",
"Goron North Dead End",
"Goron Port House Exit",
"Goron Rock House Exit",
"Goron Shop Exit",
"Goron South Dead End",
"Goron Spikes Dead End",
"Goron SW Mountains East",
"Gumo's Exit",
"Harrow Boat",
"IotD Crown Staircase",
"IotD Face Staircase",
"Kayo's Exit",
"Kumu's Exit",
"Max's Exit",
"Maze Boat",
"Mazo's Exit",
"Mercay Shop Exit",
"Milk Bar Exit",
"Molida Shop Exit",
"Oshus' Exit",
"Potato's Exit",
"Romanos' Exit",
"Ruins NE Doylan Bridge One-Way West",
"Ruins NE Secret Chest South",
"Ruins SE Coast North",
"Rupoor Cave Exit",
"Sensitive Anouki's Exit",
"Shipyard Exit",
"Smart Anouki's Exit",
"Sword Cave Exit",
"TotOK Lobby Exit",
"Treasure Teller's Exit",
"Tuzi's Exit",
"Wayfarer's Exit",
"Zauz' Exit",
]
# Decode classification for humans
CLASSIFICATION = {
1: "progression",
2: "useful",
4: "trap",
9: "progression_skip_balancing",
17: "progression_deprioritized",
25: "progression_deprioritized_skip_balancing",
0: "filler"
}
BOSS_WARP_LOOKUP = {
28: "ToF Exit",
29: "ToW Exit",
30: "ToC Exit",
31: "ToI Exit",
32: "GT Exit",
33: "MT Exit",
0x29: "Ghost Ship B1 Ascend"
}
BOSS_WARP_SCENE_LOOKUP = {
0x2B00: "Blaaz Exit",
0x2A00: "Cyclok Exit",
0x2C00: "Crayk Exit",
0x200A: "Dongo Exit",
0x2E00: "Dongo Exit",
0x1F06: "Gleeok Exit",
0x1D00: "Gleeok Exit",
0x2106: "Eox Exit",
0x2F00: "Eox Exit",
0x3000: "Cubus Sisters Blue Warp"
}
EQUIPPED_SHIP_PARTS_ADDR = [
PHAddr.equipped_ship_parts_0,
PHAddr.equipped_ship_parts_1,
PHAddr.equipped_ship_parts_2,
PHAddr.equipped_ship_parts_3,
PHAddr.equipped_ship_parts_4,
PHAddr.equipped_ship_parts_5,
PHAddr.equipped_ship_parts_6,
PHAddr.equipped_ship_parts_7,
]
TREASURE_READ_LIST = {i: (PHAddr.pink_coral_count + i * 4, 4, "Main RAM") for i in range(8)}
TREASURE_PRICES = {
"Treasure: Pink Coral": [1500, 50, 150, 50, 150, 150, 1500, 50, 50, 1500, 50],
"Treasure: White Pearl Loop": [800, 50, 50, 150, 50, 150, 50, 50, 1500, 800, 50],
"Treasure: Dark Pearl Loop": [150, 50, 50, 800, 800, 50, 800, 800, 50, 150, 50],
"Treasure: Zora Scale": [150, 150, 1500, 150, 150, 800, 800, 50, 50, 50, 50],
"Treasure: Goron Amber": [50, 150, 800, 800, 150, 50, 50, 800, 800, 50, 50],
"Treasure: Ruto Crown": [50, 1500, 50, 150, 50, 800, 50, 1500, 50, 50, 50],
"Treasure: Helmaroc Plume": [50, 800, 150, 50, 800, 150, 50, 50, 800, 50, 50],
"Treasure: Regal Ring": [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 50]
}
region_aliases = {
# Aliases
"ToF 1F": [
"Temple of Fire",
"ToF"],
"ToW 1F": ["Temple of Wind", "ToW", "Temple of Wind 1F"],
"ToC 1F": ["Temple of Courage", "ToC", "Temple of Courage 1F"],
"Ghost Ship 1F": ["Ghost Ship", "GS", "Ghost Ship Deck", "GS 1F"],
"GT 1F": ["Goron Temple", "GT"],
"ToI 1F": ["Temple of Ice", "ToI"],
"MT 1F": ["Mutoh's Temple", "MT"],
"TotOK Lobby": ["Temple of the Ocean King", "TotOK"],
"Mercay SE": ["Mercay Island", "Mercay", "Mercay Port"],
"Cannon Island": ["Cannon"],
"Ember Port": ["Isle of Ember", "Ember Island", "Ember"],
"Molida South": ["Molida Island", "Molida", "Molida Port"],
"Spirit Island": ["Isle of Spirits", "Spirit"],
"Gust South": ["Isle of Gust", "Gust"],
"Bannan Island": ["Bannan West", "Bannan", "Bannan Port"],
"Zauz's Island": ["Zauz"],
"Uncharted Island": ["Uncharted"],
"Goron SW": ["Goron", "Goron Island", "Goron Port"],
"Frost SW": ["Isle of Frost", "Frost", "Frost Island", "Ice Island", "Ice"],
"Harrow Island": ["Harrow"],
"Dee Ess Island": ["Dee Ess", "DS", "DS Island"],
"Isle of the Dead": ["IotD", "Dead"],
"Ruins SW Port": ["Ruins", "Isle of Ruins", "Ruins Island", "Ruins Port"],
"Maze Island": ["Maze"],
"Nyave": ["SW Ocean Nyave", "Nyave's Ship"],
"PoRL": ["Nyeve", "Nyeve's Ship", "Prince of Red Lions"],
"SE Ocean Trade": ["Wayaway", "Wayaway Ship", "Hoho Tribe", "Hoho Tribe's Ship"],
"NE Ocean Combat": ["Man of Smiles", "Man of Smiles' Ship", "Man of Smiles' Trade"],
"Sun Lake Cave": ["Molida Cave"],
"Keese Passage West": ["Bannan Cave West", "Bannan Cave", "Keese Passage"],
"Mountain Passage 1": ["MP", "Mountain Passage", "Mountain Passage 1F"],
"Mountain Passage 3": ["Mountain Passage 2F"]
}
map_type_lookup = {
0x2b00: "boss",
0x3000: "boss",
0x2c00: "boss",
0x2e00: "boss",
0x2d00: "boss",
0x2a00: "boss",
0x2f00: "boss",
0x2700: "cave",
0x2701: "cave",
0x1c00: "dung",
0x1c01: "dung",
0x1c02: "dung",
0x1c03: "dung",
0x2900: "dung",
0x2901: "dung",
0x2902: "dung",
0x2903: "dung",
0x2904: "dung",
0x2600: "dung",
0x2500: "dung",
0x2501: "dung",
0x2502: "dung",
0x2503: "dung",
0x2504: "dung",
0x2505: "dung",
0x2506: "dung",
0x2507: "dung",
0x2508: "dung",
0x2509: "dung",
0x250A: "dung",
0x250B: "dung",
0x250C: "dung",
0x250D: "dung",
0x250E: "dung",
0x250F: "dung",
0x2510: "dung",
0x2511: "dung",
0x2512: "dung",
0x1e00: "dung",
0x1e01: "dung",
0x1e02: "dung",
0x1e03: "dung",
0x2000: "dung",
0x2001: "dung",
0x2002: "dung",
0x2003: "dung",
0x2004: "dung",
0x2005: "dung",
0x200A: "boss",
0x2800: "cave",
0x1f00: "dung",
0x1f01: "dung",
0x1f02: "dung",
0x1f03: "dung",
0x1f05: "dung",
0x1f06: "boss",
0x1d00: "dung",
0x1d01: "dung",
0x1d02: "dung",
0x1d03: "dung",
0x1d04: "dung",
0x1d05: "dung",
0x2100: "dung",
0x2101: "dung",
0x2102: "dung",
0x2103: "dung",
0x2104: "dung",
0x2105: "dung",
0x2106: "boss",
0x2200: "house",
0x2201: "house",
0x2300: "house",
0x2400: "house",
0xd0a: "house",
0xd0b: "house",
0xd0c: "house",
0xd14: "cave",
0x1401: "house",
0x140a: "cave",
0x1400: "ow",
0xb0a: "house",
0xb0b: "house",
0xb0c: "house",
0xb0f: "house",
0xb0e: "house",
0xb0d: "house",
0xb10: "cave",
0xb11: "house",
0xb12: "cave",
0xb13: "cave",
0x1501: "cave",
0x1502: "cave",
0x1503: "cave",
0x1504: "cave",
0x1505: "house",
0x1506: "house",
0x1507: "house",
0x1508: "house",
0x1509: "house",
0x150a: "house",
0x1500: "ow",
0xc0a: "cave",
0xc0b: "house",
0xc0c: "house",
0xc0d: "house",
0xc0e: "house",
0xc0f: "cave",
0x100a: "house",
0x100b: "house",
0x100c: "house",
0x100d: "house",
0x100f: "house",
0x100e: "house",
0x1014: "house",
0x1701: "cave",
0x1700: "ow",
0x1800: "ow",
0x1900: "ow",
0x1a0a: "cave",
0x1a0b: "cave",
0x1a00: "ow",
0x1b00: "ow",
0x130a: "house",
0x130b: "house",
0x1300: "ow",
0xf0a: "house",
0xf0b: "house",
0xf0c: "house",
0xf0d: "house",
0xf0e: "house",
0xf0f: "house",
0xf10: "house",
0xf11: "house",
0xf12: "house",
0xf13: "cave",
0xe0a: "cave",
0xe0b: "cave",
0x110B: "cave",
0x120B: "cave",
0x110a: "cave",
0x120a: "cave",
0x160a: "house",
0x1600: "ow",
0x800: "ship",
0x700: "ship",
0xa00: "ship",
0x900: "ship",
0x400: "ship",
0x500: "ship",
0x600: "ship",
0xD00: "ow",
0xD01: "ow",
0xB00: "ow",
0xB01: "ow",
0xB02: "ow",
0xb03: "ow",
0xc00: "ow",
0xc01: "ow",
0x1000: "ow",
0x1001: "ow",
0x1002: "ow",
0x1003: "ow",
0xf00: "ow",
0xf01: "ow",
0xf02: "ow",
0xf03: "ow",
0xe00: "ow",
0xe01: "ow",
0x1100: "ow",
0x1101: "ow",
0x1102: "ow",
0x1103: "ow",
0x1200: "ow",
0x1201: "ow",
0x1202: "ow",
0x1203: "ow",
0x0: "sea",
0x1: "sea",
0x2: "sea",
0x3: "sea",
0x300: "sea"
}
if __name__ == "__main__":
for cat, value in CATEGORY_LOCATION_GROUPS.items():
print(f"\t\"{cat}\": [")
# for loc in value:
# print(f"\t\t\"{location_name_changes.get(loc, loc)}\",")
print(f"\t],")