Merge pull request #483 from espeon65536/oot
Ocarina of Time: V6.2 updates
This commit is contained in:
commit
76663f819b
|
@ -634,7 +634,8 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in
|
||||||
"Shadow Temple": (67485, 67532),
|
"Shadow Temple": (67485, 67532),
|
||||||
"Spirit Temple": (67533, 67582),
|
"Spirit Temple": (67533, 67582),
|
||||||
"Ice Cavern": (67583, 67596),
|
"Ice Cavern": (67583, 67596),
|
||||||
"Gerudo Training Grounds": (67597, 67635),
|
"Gerudo Training Ground": (67597, 67635),
|
||||||
|
"Thieves' Hideout": (67259, 67263),
|
||||||
"Ganon's Castle": (67636, 67673),
|
"Ganon's Castle": (67636, 67673),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,7 +643,7 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in
|
||||||
full_name = lookup_any_location_id_to_name[id]
|
full_name = lookup_any_location_id_to_name[id]
|
||||||
if id == 67673:
|
if id == 67673:
|
||||||
return full_name[13:] # Ganons Tower Boss Key Chest
|
return full_name[13:] # Ganons Tower Boss Key Chest
|
||||||
if area != 'Overworld':
|
if area not in ["Overworld", "Thieves' Hideout"]:
|
||||||
# trim dungeon name. leaves an extra space that doesn't display, or trims fully for DC/Jabu/GC
|
# trim dungeon name. leaves an extra space that doesn't display, or trims fully for DC/Jabu/GC
|
||||||
return full_name[len(area):]
|
return full_name[len(area):]
|
||||||
return full_name
|
return full_name
|
||||||
|
@ -653,6 +654,13 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in
|
||||||
checks_done = {area: len(list(filter(lambda x: x, location_info[area].values()))) for area in area_id_ranges}
|
checks_done = {area: len(list(filter(lambda x: x, location_info[area].values()))) for area in area_id_ranges}
|
||||||
checks_in_area = {area: len([id for id in range(min_id, max_id+1) if id in locations[player]])
|
checks_in_area = {area: len([id for id in range(min_id, max_id+1) if id in locations[player]])
|
||||||
for area, (min_id, max_id) in area_id_ranges.items()}
|
for area, (min_id, max_id) in area_id_ranges.items()}
|
||||||
|
|
||||||
|
# Remove Thieves' Hideout checks from Overworld, since it's in the middle of the range
|
||||||
|
checks_in_area["Overworld"] -= checks_in_area["Thieves' Hideout"]
|
||||||
|
checks_done["Overworld"] -= checks_done["Thieves' Hideout"]
|
||||||
|
for loc in location_info["Thieves' Hideout"]:
|
||||||
|
del location_info["Overworld"][loc]
|
||||||
|
|
||||||
checks_done['Total'] = sum(checks_done.values())
|
checks_done['Total'] = sum(checks_done.values())
|
||||||
checks_in_area['Total'] = sum(checks_in_area.values())
|
checks_in_area['Total'] = sum(checks_in_area.values())
|
||||||
|
|
||||||
|
@ -670,7 +678,8 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in
|
||||||
"Spirit Temple": inventory[66178],
|
"Spirit Temple": inventory[66178],
|
||||||
"Shadow Temple": inventory[66179],
|
"Shadow Temple": inventory[66179],
|
||||||
"Bottom of the Well": inventory[66180],
|
"Bottom of the Well": inventory[66180],
|
||||||
"Gerudo Training Grounds": inventory[66181],
|
"Gerudo Training Ground": inventory[66181],
|
||||||
|
"Thieves' Hideout": inventory[66182],
|
||||||
"Ganon's Castle": inventory[66183],
|
"Ganon's Castle": inventory[66183],
|
||||||
}
|
}
|
||||||
boss_key_counts = {
|
boss_key_counts = {
|
||||||
|
|
|
@ -1546,7 +1546,7 @@ local player_names_address = coop_context + 20
|
||||||
local player_name_length = 8 -- 8 bytes
|
local player_name_length = 8 -- 8 bytes
|
||||||
local rom_name_location = player_names_address + 0x800
|
local rom_name_location = player_names_address + 0x800
|
||||||
|
|
||||||
local master_quest_table_address = rando_context + 0xB220
|
local master_quest_table_address = rando_context + 0xB5A8
|
||||||
|
|
||||||
local save_context_addr = 0x11A5D0
|
local save_context_addr = 0x11A5D0
|
||||||
local internal_count_addr = save_context_addr + 0x90
|
local internal_count_addr = save_context_addr + 0x90
|
||||||
|
|
|
@ -87,8 +87,8 @@ dungeon_table = [
|
||||||
'dungeon_item': 1,
|
'dungeon_item': 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': 'Gerudo Training Grounds',
|
'name': 'Gerudo Training Ground',
|
||||||
'hint': 'the Gerudo Training Grounds',
|
'hint': 'the Gerudo Training Ground',
|
||||||
'font_color': 'Yellow',
|
'font_color': 'Yellow',
|
||||||
'boss_key': 0,
|
'boss_key': 0,
|
||||||
'small_key': 9,
|
'small_key': 9,
|
||||||
|
@ -122,7 +122,7 @@ def create_dungeons(ootworld):
|
||||||
hint = dungeon_info['hint'] if 'hint' in dungeon_info else name
|
hint = dungeon_info['hint'] if 'hint' in dungeon_info else name
|
||||||
font_color = dungeon_info['font_color'] if 'font_color' in dungeon_info else 'White'
|
font_color = dungeon_info['font_color'] if 'font_color' in dungeon_info else 'White'
|
||||||
|
|
||||||
if ootworld.logic_rules == 'glitchless':
|
if ootworld.logic_rules == 'glitchless' or ootworld.logic_rules == 'no_logic': # ER + NL
|
||||||
if not ootworld.dungeon_mq[name]:
|
if not ootworld.dungeon_mq[name]:
|
||||||
dungeon_json = os.path.join(data_path('World'), name + '.json')
|
dungeon_json = os.path.join(data_path('World'), name + '.json')
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -93,8 +93,8 @@ entrance_shuffle_table = [
|
||||||
('Bottom of the Well -> Kakariko Village', { 'index': 0x02A6 })),
|
('Bottom of the Well -> Kakariko Village', { 'index': 0x02A6 })),
|
||||||
('Dungeon', ('ZF Ice Ledge -> Ice Cavern Beginning', { 'index': 0x0088 }),
|
('Dungeon', ('ZF Ice Ledge -> Ice Cavern Beginning', { 'index': 0x0088 }),
|
||||||
('Ice Cavern Beginning -> ZF Ice Ledge', { 'index': 0x03D4 })),
|
('Ice Cavern Beginning -> ZF Ice Ledge', { 'index': 0x03D4 })),
|
||||||
('Dungeon', ('Gerudo Fortress -> Gerudo Training Grounds Lobby', { 'index': 0x0008 }),
|
('Dungeon', ('Gerudo Fortress -> Gerudo Training Ground Lobby', { 'index': 0x0008 }),
|
||||||
('Gerudo Training Grounds Lobby -> Gerudo Fortress', { 'index': 0x03A8 })),
|
('Gerudo Training Ground Lobby -> Gerudo Fortress', { 'index': 0x03A8 })),
|
||||||
|
|
||||||
('Interior', ('Kokiri Forest -> KF Midos House', { 'index': 0x0433 }),
|
('Interior', ('Kokiri Forest -> KF Midos House', { 'index': 0x0433 }),
|
||||||
('KF Midos House -> Kokiri Forest', { 'index': 0x0443 })),
|
('KF Midos House -> Kokiri Forest', { 'index': 0x0443 })),
|
||||||
|
@ -251,8 +251,8 @@ entrance_shuffle_table = [
|
||||||
('Graveyard Shield Grave -> Graveyard', { 'index': 0x035D })),
|
('Graveyard Shield Grave -> Graveyard', { 'index': 0x035D })),
|
||||||
('Grave', ('Graveyard -> Graveyard Heart Piece Grave', { 'index': 0x031C }),
|
('Grave', ('Graveyard -> Graveyard Heart Piece Grave', { 'index': 0x031C }),
|
||||||
('Graveyard Heart Piece Grave -> Graveyard', { 'index': 0x0361 })),
|
('Graveyard Heart Piece Grave -> Graveyard', { 'index': 0x0361 })),
|
||||||
('Grave', ('Graveyard -> Graveyard Composers Grave', { 'index': 0x002D }),
|
('Grave', ('Graveyard -> Graveyard Royal Familys Tomb', { 'index': 0x002D }),
|
||||||
('Graveyard Composers Grave -> Graveyard', { 'index': 0x050B })),
|
('Graveyard Royal Familys Tomb -> Graveyard', { 'index': 0x050B })),
|
||||||
('Grave', ('Graveyard -> Graveyard Dampes Grave', { 'index': 0x044F }),
|
('Grave', ('Graveyard -> Graveyard Dampes Grave', { 'index': 0x044F }),
|
||||||
('Graveyard Dampes Grave -> Graveyard', { 'index': 0x0359 })),
|
('Graveyard Dampes Grave -> Graveyard', { 'index': 0x0359 })),
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from BaseClasses import LocationProgressType
|
||||||
# DMC Death Mountain Crater
|
# DMC Death Mountain Crater
|
||||||
# DMT Death Mountain Trail
|
# DMT Death Mountain Trail
|
||||||
# GC Goron City
|
# GC Goron City
|
||||||
# GF Gerudo Fortress
|
# GF Gerudo's Fortress
|
||||||
# GS Gold Skulltula
|
# GS Gold Skulltula
|
||||||
# GV Gerudo Valley
|
# GV Gerudo Valley
|
||||||
# HC Hyrule Castle
|
# HC Hyrule Castle
|
||||||
|
@ -17,6 +17,7 @@ from BaseClasses import LocationProgressType
|
||||||
# LW Lost Woods
|
# LW Lost Woods
|
||||||
# OGC Outside Ganon's Castle
|
# OGC Outside Ganon's Castle
|
||||||
# SFM Sacred Forest Meadow
|
# SFM Sacred Forest Meadow
|
||||||
|
# TH Thieves' Hideout
|
||||||
# ZD Zora's Domain
|
# ZD Zora's Domain
|
||||||
# ZF Zora's Fountain
|
# ZF Zora's Fountain
|
||||||
# ZR Zora's River
|
# ZR Zora's River
|
||||||
|
@ -247,7 +248,7 @@ hintTable = {
|
||||||
'BossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'),
|
'BossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'),
|
||||||
'GanonBossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'),
|
'GanonBossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'),
|
||||||
'SmallKey': (["a tool for unlocking", "a dungeon pass", "a lock remover", "a lockpick"], "a Small Key", 'item'),
|
'SmallKey': (["a tool for unlocking", "a dungeon pass", "a lock remover", "a lockpick"], "a Small Key", 'item'),
|
||||||
'FortressSmallKey': (["a get out of jail free card"], "a Jail Key", 'item'),
|
'HideoutSmallKey': (["a get out of jail free card"], "a Jail Key", 'item'),
|
||||||
'KeyError': (["something mysterious", "an unknown treasure"], "An Error (Please Report This)", 'item'),
|
'KeyError': (["something mysterious", "an unknown treasure"], "An Error (Please Report This)", 'item'),
|
||||||
'Arrows (5)': (["a few danger darts", "a few sharp shafts"], "Arrows (5 pieces)", 'item'),
|
'Arrows (5)': (["a few danger darts", "a few sharp shafts"], "Arrows (5 pieces)", 'item'),
|
||||||
'Arrows (10)': (["some danger darts", "some sharp shafts"], "Arrows (10 pieces)", 'item'),
|
'Arrows (10)': (["some danger darts", "some sharp shafts"], "Arrows (10 pieces)", 'item'),
|
||||||
|
@ -271,7 +272,7 @@ hintTable = {
|
||||||
'KF Links House Cow': ("the #bovine bounty of a horseback hustle# gifts", "#Malon's obstacle course# leads to", 'always'),
|
'KF Links House Cow': ("the #bovine bounty of a horseback hustle# gifts", "#Malon's obstacle course# leads to", 'always'),
|
||||||
|
|
||||||
'Song from Ocarina of Time': ("the #Ocarina of Time# teaches", None, ['song', 'sometimes']),
|
'Song from Ocarina of Time': ("the #Ocarina of Time# teaches", None, ['song', 'sometimes']),
|
||||||
'Song from Composers Grave': (["#ReDead in the Composers' Grave# guard", "the #Composer Brothers wrote#"], None, ['song', 'sometimes']),
|
'Song from Royal Familys Tomb': (["#ReDead in the royal tomb# guard", "the #Composer Brothers wrote#"], None, ['song', 'sometimes']),
|
||||||
'Sheik in Forest': ("#in a meadow# Sheik teaches", None, ['song', 'sometimes']),
|
'Sheik in Forest': ("#in a meadow# Sheik teaches", None, ['song', 'sometimes']),
|
||||||
'Sheik at Temple': ("Sheik waits at a #monument to time# to teach", None, ['song', 'sometimes']),
|
'Sheik at Temple': ("Sheik waits at a #monument to time# to teach", None, ['song', 'sometimes']),
|
||||||
'Sheik in Crater': ("the #crater's melody# is", None, ['song', 'sometimes']),
|
'Sheik in Crater': ("the #crater's melody# is", None, ['song', 'sometimes']),
|
||||||
|
@ -304,7 +305,7 @@ hintTable = {
|
||||||
'ZF GS Hidden Cave': ("a spider high #above the icy waters# holds", None, ['overworld', 'sometimes']),
|
'ZF GS Hidden Cave': ("a spider high #above the icy waters# holds", None, ['overworld', 'sometimes']),
|
||||||
'Wasteland Chest': (["#deep in the wasteland# is", "beneath #the sands#, flames reveal"], None, ['overworld', 'sometimes']),
|
'Wasteland Chest': (["#deep in the wasteland# is", "beneath #the sands#, flames reveal"], None, ['overworld', 'sometimes']),
|
||||||
'Wasteland GS': ("a #spider in the wasteland# holds", None, ['overworld', 'sometimes']),
|
'Wasteland GS': ("a #spider in the wasteland# holds", None, ['overworld', 'sometimes']),
|
||||||
'Graveyard Composers Grave Chest': (["#flames in the Composers' Grave# reveal", "the #Composer Brothers hid#"], None, ['overworld', 'sometimes']),
|
'Royal Familys Tomb Chest': (["#flames in the royal tomb# reveal", "the #Composer Brothers hid#"], None, ['overworld', 'sometimes']),
|
||||||
'ZF Bottom Freestanding PoH': ("#under the icy waters# lies", None, ['overworld', 'sometimes']),
|
'ZF Bottom Freestanding PoH': ("#under the icy waters# lies", None, ['overworld', 'sometimes']),
|
||||||
'GC Pot Freestanding PoH': ("spinning #Goron pottery# contains", None, ['overworld', 'sometimes']),
|
'GC Pot Freestanding PoH': ("spinning #Goron pottery# contains", None, ['overworld', 'sometimes']),
|
||||||
'ZD King Zora Thawed': ("a #defrosted dignitary# gifts", "unfreezing #King Zora# grants", ['overworld', 'sometimes']),
|
'ZD King Zora Thawed': ("a #defrosted dignitary# gifts", "unfreezing #King Zora# grants", ['overworld', 'sometimes']),
|
||||||
|
@ -327,10 +328,10 @@ hintTable = {
|
||||||
'Water Temple MQ Freestanding Key': ("hidden in a #box under the lake# lies", "hidden in a #box in the Water Temple# lies", ['dungeon', 'sometimes']),
|
'Water Temple MQ Freestanding Key': ("hidden in a #box under the lake# lies", "hidden in a #box in the Water Temple# lies", ['dungeon', 'sometimes']),
|
||||||
'Water Temple MQ GS Freestanding Key Area': ("the #locked spider under the lake# holds", "the #locked spider in the Water Temple# holds", ['dungeon', 'sometimes']),
|
'Water Temple MQ GS Freestanding Key Area': ("the #locked spider under the lake# holds", "the #locked spider in the Water Temple# holds", ['dungeon', 'sometimes']),
|
||||||
'Water Temple MQ GS Triple Wall Torch': ("a spider behind a #gate under the lake# holds", "a spider behind a #gate in the Water Temple# holds", ['dungeon', 'sometimes']),
|
'Water Temple MQ GS Triple Wall Torch': ("a spider behind a #gate under the lake# holds", "a spider behind a #gate in the Water Temple# holds", ['dungeon', 'sometimes']),
|
||||||
'Gerudo Training Grounds Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']),
|
'Gerudo Training Ground Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']),
|
||||||
'Gerudo Training Grounds MQ Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']),
|
'Gerudo Training Ground MQ Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']),
|
||||||
'Gerudo Training Grounds Maze Path Final Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']),
|
'Gerudo Training Ground Maze Path Final Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']),
|
||||||
'Gerudo Training Grounds MQ Ice Arrows Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']),
|
'Gerudo Training Ground MQ Ice Arrows Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']),
|
||||||
'Bottom of the Well Lens of Truth Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']),
|
'Bottom of the Well Lens of Truth Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']),
|
||||||
'Bottom of the Well MQ Compass Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']),
|
'Bottom of the Well MQ Compass Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']),
|
||||||
'Spirit Temple Silver Gauntlets Chest': ("the treasure #sought by Nabooru# is", "upon the #Colossus's right hand# is", ['dungeon', 'sometimes']),
|
'Spirit Temple Silver Gauntlets Chest': ("the treasure #sought by Nabooru# is", "upon the #Colossus's right hand# is", ['dungeon', 'sometimes']),
|
||||||
|
@ -402,7 +403,7 @@ hintTable = {
|
||||||
'LLR Talons Chickens': ("#finding Super Cuccos# is rewarded with", None, 'exclude'),
|
'LLR Talons Chickens': ("#finding Super Cuccos# is rewarded with", None, 'exclude'),
|
||||||
'GC Rolling Goron as Child': ("the prize offered by a #large rolling Goron# is", None, 'exclude'),
|
'GC Rolling Goron as Child': ("the prize offered by a #large rolling Goron# is", None, 'exclude'),
|
||||||
'LH Underwater Item': ("the #sunken treasure in a lake# is", None, 'exclude'),
|
'LH Underwater Item': ("the #sunken treasure in a lake# is", None, 'exclude'),
|
||||||
'GF Gerudo Membership Card': ("#rescuing captured carpenters# is rewarded with", None, 'exclude'),
|
'Hideout Gerudo Membership Card': ("#rescuing captured carpenters# is rewarded with", None, 'exclude'),
|
||||||
'Wasteland Bombchu Salesman': ("a #carpet guru# sells", None, 'exclude'),
|
'Wasteland Bombchu Salesman': ("a #carpet guru# sells", None, 'exclude'),
|
||||||
|
|
||||||
'Kak Impas House Freestanding PoH': ("#imprisoned in a house# lies", None, 'exclude'),
|
'Kak Impas House Freestanding PoH': ("#imprisoned in a house# lies", None, 'exclude'),
|
||||||
|
@ -422,10 +423,10 @@ hintTable = {
|
||||||
'DMT Freestanding PoH': ("above a #mountain cavern entrance# is", None, 'exclude'),
|
'DMT Freestanding PoH': ("above a #mountain cavern entrance# is", None, 'exclude'),
|
||||||
'DMC Wall Freestanding PoH': ("nestled in a #volcanic wall# is", None, 'exclude'),
|
'DMC Wall Freestanding PoH': ("nestled in a #volcanic wall# is", None, 'exclude'),
|
||||||
'DMC Volcano Freestanding PoH': ("obscured by #volcanic ash# is", None, 'exclude'),
|
'DMC Volcano Freestanding PoH': ("obscured by #volcanic ash# is", None, 'exclude'),
|
||||||
'GF North F1 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
'Hideout Jail Guard (1 Torch)': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
||||||
'GF North F2 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
'Hideout Jail Guard (2 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
||||||
'GF South F1 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
'Hideout Jail Guard (3 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
||||||
'GF South F2 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
'Hideout Jail Guard (4 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'),
|
||||||
|
|
||||||
'Deku Tree Map Chest': ("in the #center of the Deku Tree# lies", None, 'exclude'),
|
'Deku Tree Map Chest': ("in the #center of the Deku Tree# lies", None, 'exclude'),
|
||||||
'Deku Tree Slingshot Chest': ("the #treasure guarded by a scrub# in the Deku Tree is", None, 'exclude'),
|
'Deku Tree Slingshot Chest': ("the #treasure guarded by a scrub# in the Deku Tree is", None, 'exclude'),
|
||||||
|
@ -641,42 +642,42 @@ hintTable = {
|
||||||
'Ice Cavern MQ Map Chest': ("a #wall of ice# protects", None, 'exclude'),
|
'Ice Cavern MQ Map Chest': ("a #wall of ice# protects", None, 'exclude'),
|
||||||
'Ice Cavern MQ Freestanding PoH': ("#winds of ice# surround", None, 'exclude'),
|
'Ice Cavern MQ Freestanding PoH': ("#winds of ice# surround", None, 'exclude'),
|
||||||
|
|
||||||
'Gerudo Training Grounds Lobby Left Chest': ("a #blinded eye in the Gerudo Training Grounds# drops", None, 'exclude'),
|
'Gerudo Training Ground Lobby Left Chest': ("a #blinded eye in the Gerudo Training Ground# drops", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Lobby Right Chest': ("a #blinded eye in the Gerudo Training Grounds# drops", None, 'exclude'),
|
'Gerudo Training Ground Lobby Right Chest': ("a #blinded eye in the Gerudo Training Ground# drops", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Stalfos Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Grounds guard", None, 'exclude'),
|
'Gerudo Training Ground Stalfos Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Ground guard", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Beamos Chest': ("#reptilian warriors# in the Gerudo Training Grounds protect", None, 'exclude'),
|
'Gerudo Training Ground Beamos Chest': ("#reptilian warriors# in the Gerudo Training Ground protect", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Grounds reveals", None, 'exclude'),
|
'Gerudo Training Ground Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Ground reveals", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'),
|
'Gerudo Training Ground Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'),
|
'Gerudo Training Ground Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'),
|
'Gerudo Training Ground Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Maze Right Central Chest': ("the #Song of Time# in the Gerudo Training Grounds leads to", None, 'exclude'),
|
'Gerudo Training Ground Maze Right Central Chest': ("the #Song of Time# in the Gerudo Training Ground leads to", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Maze Right Side Chest': ("the #Song of Time# in the Gerudo Training Grounds leads to", None, 'exclude'),
|
'Gerudo Training Ground Maze Right Side Chest': ("the #Song of Time# in the Gerudo Training Ground leads to", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Hammer Room Clear Chest': ("#fiery foes# in the Gerudo Training Grounds guard", None, 'exclude'),
|
'Gerudo Training Ground Hammer Room Clear Chest': ("#fiery foes# in the Gerudo Training Ground guard", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Hammer Room Switch Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'),
|
'Gerudo Training Ground Hammer Room Switch Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'),
|
'Gerudo Training Ground Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Near Scarecrow Chest': ("thieves #blind four faces# to find", None, 'exclude'),
|
'Gerudo Training Ground Near Scarecrow Chest': ("thieves #blind four faces# to find", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'),
|
'Gerudo Training Ground Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Heavy Block First Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
'Gerudo Training Ground Heavy Block First Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Heavy Block Second Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
'Gerudo Training Ground Heavy Block Second Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Heavy Block Third Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
'Gerudo Training Ground Heavy Block Third Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Heavy Block Fourth Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
'Gerudo Training Ground Heavy Block Fourth Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
||||||
'Gerudo Training Grounds Freestanding Key': ("the #Song of Time# in the Gerudo Training Grounds leads to", None, 'exclude'),
|
'Gerudo Training Ground Freestanding Key': ("the #Song of Time# in the Gerudo Training Ground leads to", None, 'exclude'),
|
||||||
|
|
||||||
'Gerudo Training Grounds MQ Lobby Right Chest': ("#thieves prepare for training# with", None, 'exclude'),
|
'Gerudo Training Ground MQ Lobby Right Chest': ("#thieves prepare for training# with", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Lobby Left Chest': ("#thieves prepare for training# with", None, 'exclude'),
|
'Gerudo Training Ground MQ Lobby Left Chest': ("#thieves prepare for training# with", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ First Iron Knuckle Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Grounds guard", None, 'exclude'),
|
'Gerudo Training Ground MQ First Iron Knuckle Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Ground guard", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'),
|
'Gerudo Training Ground MQ Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'),
|
'Gerudo Training Ground MQ Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Flame Circle Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'),
|
'Gerudo Training Ground MQ Flame Circle Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Second Iron Knuckle Chest': ("#fiery foes# in the Gerudo Training Grounds guard", None, 'exclude'),
|
'Gerudo Training Ground MQ Second Iron Knuckle Chest': ("#fiery foes# in the Gerudo Training Ground guard", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Dinolfos Chest': ("#reptilian warriors# in the Gerudo Training Grounds protect", None, 'exclude'),
|
'Gerudo Training Ground MQ Dinolfos Chest': ("#reptilian warriors# in the Gerudo Training Ground protect", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Maze Right Central Chest': ("a #path of fire# leads thieves to", None, 'exclude'),
|
'Gerudo Training Ground MQ Maze Right Central Chest': ("a #path of fire# leads thieves to", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'),
|
'Gerudo Training Ground MQ Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Maze Right Side Chest': ("a #path of fire# leads thieves to", None, 'exclude'),
|
'Gerudo Training Ground MQ Maze Right Side Chest': ("a #path of fire# leads thieves to", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'),
|
'Gerudo Training Ground MQ Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'),
|
'Gerudo Training Ground MQ Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Grounds reveals", None, 'exclude'),
|
'Gerudo Training Ground MQ Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Ground reveals", None, 'exclude'),
|
||||||
'Gerudo Training Grounds MQ Heavy Block Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
'Gerudo Training Ground MQ Heavy Block Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'),
|
||||||
|
|
||||||
'Ganons Tower Boss Key Chest': ("the #Evil King# hoards", None, 'exclude'),
|
'Ganons Tower Boss Key Chest': ("the #Evil King# hoards", None, 'exclude'),
|
||||||
|
|
||||||
|
@ -1038,7 +1039,7 @@ hintTable = {
|
||||||
'GV Fortress Side -> GV Carpenter Tent': ("a #tent in the valley# covers", None, 'entrance'),
|
'GV Fortress Side -> GV Carpenter Tent': ("a #tent in the valley# covers", None, 'entrance'),
|
||||||
'Graveyard Warp Pad Region -> Shadow Temple Entryway': ("at the #back of the Graveyard#, there is", None, 'entrance'),
|
'Graveyard Warp Pad Region -> Shadow Temple Entryway': ("at the #back of the Graveyard#, there is", None, 'entrance'),
|
||||||
'Lake Hylia -> Water Temple Lobby': ("deep #under a vast lake#, one can find", None, 'entrance'),
|
'Lake Hylia -> Water Temple Lobby': ("deep #under a vast lake#, one can find", None, 'entrance'),
|
||||||
'Gerudo Fortress -> Gerudo Training Grounds Lobby': ("paying a #fee to the Gerudos# grants access to", None, 'entrance'),
|
'Gerudo Fortress -> Gerudo Training Ground Lobby': ("paying a #fee to the Gerudos# grants access to", None, 'entrance'),
|
||||||
'Zoras Fountain -> Jabu Jabus Belly Beginning': ("inside #Jabu Jabu#, one can find", None, 'entrance'),
|
'Zoras Fountain -> Jabu Jabus Belly Beginning': ("inside #Jabu Jabu#, one can find", None, 'entrance'),
|
||||||
'Kakariko Village -> Bottom of the Well': ("a #village well# leads to", None, 'entrance'),
|
'Kakariko Village -> Bottom of the Well': ("a #village well# leads to", None, 'entrance'),
|
||||||
|
|
||||||
|
@ -1085,7 +1086,7 @@ hintTable = {
|
||||||
'ZF Great Fairy Fountain': ("a #Great Fairy Fountain#", None, 'region'),
|
'ZF Great Fairy Fountain': ("a #Great Fairy Fountain#", None, 'region'),
|
||||||
'Graveyard Shield Grave': ("a #grave with a free chest#", None, 'region'),
|
'Graveyard Shield Grave': ("a #grave with a free chest#", None, 'region'),
|
||||||
'Graveyard Heart Piece Grave': ("a chest spawned by #Sun's Song#", None, 'region'),
|
'Graveyard Heart Piece Grave': ("a chest spawned by #Sun's Song#", None, 'region'),
|
||||||
'Graveyard Composers Grave': ("the #Composers' Grave#", None, 'region'),
|
'Royal Familys Tomb': ("the #Royal Family's Tomb#", None, 'region'),
|
||||||
'Graveyard Dampes Grave': ("Dampé's Grave", None, 'region'),
|
'Graveyard Dampes Grave': ("Dampé's Grave", None, 'region'),
|
||||||
'DMT Cow Grotto': ("a solitary #Cow#", None, 'region'),
|
'DMT Cow Grotto': ("a solitary #Cow#", None, 'region'),
|
||||||
'HC Storms Grotto': ("a sandy grotto with #fragile walls#", None, 'region'),
|
'HC Storms Grotto': ("a sandy grotto with #fragile walls#", None, 'region'),
|
||||||
|
@ -1198,7 +1199,7 @@ hintTable = {
|
||||||
'Spirit Temple': ("the goddess of the sand", "Spirit Temple", 'dungeonName'),
|
'Spirit Temple': ("the goddess of the sand", "Spirit Temple", 'dungeonName'),
|
||||||
'Ice Cavern': ("a frozen maze", "Ice Cavern", 'dungeonName'),
|
'Ice Cavern': ("a frozen maze", "Ice Cavern", 'dungeonName'),
|
||||||
'Bottom of the Well': ("a shadow\'s prison", "Bottom of the Well", 'dungeonName'),
|
'Bottom of the Well': ("a shadow\'s prison", "Bottom of the Well", 'dungeonName'),
|
||||||
'Gerudo Training Grounds': ("the test of thieves", "Gerudo Training Grounds", 'dungeonName'),
|
'Gerudo Training Ground': ("the test of thieves", "Gerudo Training Ground", 'dungeonName'),
|
||||||
'Ganons Castle': ("a conquered citadel", "Inside Ganon's Castle", 'dungeonName'),
|
'Ganons Castle': ("a conquered citadel", "Inside Ganon's Castle", 'dungeonName'),
|
||||||
|
|
||||||
'Queen Gohma': ("One inside an #ancient tree#...", "One in the #Deku Tree#...", 'boss'),
|
'Queen Gohma': ("One inside an #ancient tree#...", "One in the #Deku Tree#...", 'boss'),
|
||||||
|
|
|
@ -636,7 +636,7 @@ def buildWorldGossipHints(world, checkedLocations=None):
|
||||||
world.woth_dungeon = 0
|
world.woth_dungeon = 0
|
||||||
|
|
||||||
if checkedLocations is None:
|
if checkedLocations is None:
|
||||||
checkedLocations = {player: set() for player in world.world.player_ids}
|
checkedLocations = {player: set() for player in world.world.get_all_ids()}
|
||||||
|
|
||||||
# If Ganondorf hints Light Arrows and is reachable without them, add to checkedLocations to prevent extra hinting
|
# If Ganondorf hints Light Arrows and is reachable without them, add to checkedLocations to prevent extra hinting
|
||||||
# Can only be forced with vanilla bridge or trials
|
# Can only be forced with vanilla bridge or trials
|
||||||
|
|
|
@ -570,15 +570,15 @@ vanillaSK = {
|
||||||
'Forest Temple Well Chest': 'Small Key (Forest Temple)',
|
'Forest Temple Well Chest': 'Small Key (Forest Temple)',
|
||||||
'Ganons Castle Light Trial Invisible Enemies Chest': 'Small Key (Ganons Castle)',
|
'Ganons Castle Light Trial Invisible Enemies Chest': 'Small Key (Ganons Castle)',
|
||||||
'Ganons Castle Light Trial Lullaby Chest': 'Small Key (Ganons Castle)',
|
'Ganons Castle Light Trial Lullaby Chest': 'Small Key (Ganons Castle)',
|
||||||
'Gerudo Training Grounds Beamos Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Beamos Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Eye Statue Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Eye Statue Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Hammer Room Switch Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Hammer Room Switch Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Heavy Block Third Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Heavy Block Third Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Hidden Ceiling Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Hidden Ceiling Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Near Scarecrow Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Near Scarecrow Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Stalfos Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Stalfos Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds Freestanding Key': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground Freestanding Key': 'Small Key (Gerudo Training Ground)',
|
||||||
'Shadow Temple After Wind Hidden Chest': 'Small Key (Shadow Temple)',
|
'Shadow Temple After Wind Hidden Chest': 'Small Key (Shadow Temple)',
|
||||||
'Shadow Temple Early Silver Rupee Chest': 'Small Key (Shadow Temple)',
|
'Shadow Temple Early Silver Rupee Chest': 'Small Key (Shadow Temple)',
|
||||||
'Shadow Temple Falling Spikes Switch Chest': 'Small Key (Shadow Temple)',
|
'Shadow Temple Falling Spikes Switch Chest': 'Small Key (Shadow Temple)',
|
||||||
|
@ -612,9 +612,9 @@ vanillaSK = {
|
||||||
'Ganons Castle MQ Shadow Trial Eye Switch Chest': 'Small Key (Ganons Castle)',
|
'Ganons Castle MQ Shadow Trial Eye Switch Chest': 'Small Key (Ganons Castle)',
|
||||||
'Ganons Castle MQ Spirit Trial Sun Back Left Chest': 'Small Key (Ganons Castle)',
|
'Ganons Castle MQ Spirit Trial Sun Back Left Chest': 'Small Key (Ganons Castle)',
|
||||||
'Ganons Castle MQ Forest Trial Freestanding Key': 'Small Key (Ganons Castle)',
|
'Ganons Castle MQ Forest Trial Freestanding Key': 'Small Key (Ganons Castle)',
|
||||||
'Gerudo Training Grounds MQ Dinolfos Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground MQ Dinolfos Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds MQ Flame Circle Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground MQ Flame Circle Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Gerudo Training Grounds MQ Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Grounds)',
|
'Gerudo Training Ground MQ Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Ground)',
|
||||||
'Shadow Temple MQ Falling Spikes Switch Chest': 'Small Key (Shadow Temple)',
|
'Shadow Temple MQ Falling Spikes Switch Chest': 'Small Key (Shadow Temple)',
|
||||||
'Shadow Temple MQ Invisible Blades Invisible Chest': 'Small Key (Shadow Temple)',
|
'Shadow Temple MQ Invisible Blades Invisible Chest': 'Small Key (Shadow Temple)',
|
||||||
'Shadow Temple MQ Early Gibdos Chest': 'Small Key (Shadow Temple)',
|
'Shadow Temple MQ Early Gibdos Chest': 'Small Key (Shadow Temple)',
|
||||||
|
@ -1031,7 +1031,7 @@ def get_pool_core(world):
|
||||||
pool.extend(['Bombchus'] * 2)
|
pool.extend(['Bombchus'] * 2)
|
||||||
if not world.dungeon_mq['Bottom of the Well']:
|
if not world.dungeon_mq['Bottom of the Well']:
|
||||||
pool.extend(['Bombchus'])
|
pool.extend(['Bombchus'])
|
||||||
if world.dungeon_mq['Gerudo Training Grounds']:
|
if world.dungeon_mq['Gerudo Training Ground']:
|
||||||
pool.extend(['Bombchus'])
|
pool.extend(['Bombchus'])
|
||||||
if world.shuffle_medigoron_carpet_salesman:
|
if world.shuffle_medigoron_carpet_salesman:
|
||||||
pool.append('Bombchus')
|
pool.append('Bombchus')
|
||||||
|
@ -1044,7 +1044,7 @@ def get_pool_core(world):
|
||||||
pool.extend(['Bombchus (10)'] * 2)
|
pool.extend(['Bombchus (10)'] * 2)
|
||||||
if not world.dungeon_mq['Bottom of the Well']:
|
if not world.dungeon_mq['Bottom of the Well']:
|
||||||
pool.extend(['Bombchus (10)'])
|
pool.extend(['Bombchus (10)'])
|
||||||
if world.dungeon_mq['Gerudo Training Grounds']:
|
if world.dungeon_mq['Gerudo Training Ground']:
|
||||||
pool.extend(['Bombchus (10)'])
|
pool.extend(['Bombchus (10)'])
|
||||||
if world.dungeon_mq['Ganons Castle']:
|
if world.dungeon_mq['Ganons Castle']:
|
||||||
pool.extend(['Bombchus (10)'])
|
pool.extend(['Bombchus (10)'])
|
||||||
|
@ -1058,49 +1058,49 @@ def get_pool_core(world):
|
||||||
skip_in_spoiler_locations.append('Wasteland Bombchu Salesman')
|
skip_in_spoiler_locations.append('Wasteland Bombchu Salesman')
|
||||||
|
|
||||||
pool.extend(['Ice Trap'])
|
pool.extend(['Ice Trap'])
|
||||||
if not world.dungeon_mq['Gerudo Training Grounds']:
|
if not world.dungeon_mq['Gerudo Training Ground']:
|
||||||
pool.extend(['Ice Trap'])
|
pool.extend(['Ice Trap'])
|
||||||
if not world.dungeon_mq['Ganons Castle']:
|
if not world.dungeon_mq['Ganons Castle']:
|
||||||
pool.extend(['Ice Trap'] * 4)
|
pool.extend(['Ice Trap'] * 4)
|
||||||
|
|
||||||
if world.gerudo_fortress == 'open':
|
if world.gerudo_fortress == 'open':
|
||||||
placed_items['GF North F1 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (1 Torch)'] = 'Recovery Heart'
|
||||||
placed_items['GF North F2 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart'
|
||||||
placed_items['GF South F1 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart'
|
||||||
placed_items['GF South F2 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart'
|
||||||
skip_in_spoiler_locations.extend(['GF North F1 Carpenter', 'GF North F2 Carpenter', 'GF South F1 Carpenter', 'GF South F2 Carpenter'])
|
skip_in_spoiler_locations.extend(['Hideout Jail Guard (1 Torch)', 'Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)'])
|
||||||
elif world.shuffle_fortresskeys in ['any_dungeon', 'overworld', 'keysanity']:
|
elif world.shuffle_fortresskeys in ['any_dungeon', 'overworld', 'keysanity']:
|
||||||
if world.gerudo_fortress == 'fast':
|
if world.gerudo_fortress == 'fast':
|
||||||
pool.append('Small Key (Gerudo Fortress)')
|
pool.append('Small Key (Thieves Hideout)')
|
||||||
placed_items['GF North F2 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart'
|
||||||
placed_items['GF South F1 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart'
|
||||||
placed_items['GF South F2 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart'
|
||||||
skip_in_spoiler_locations.extend(['GF North F2 Carpenter', 'GF South F1 Carpenter', 'GF South F2 Carpenter'])
|
skip_in_spoiler_locations.extend(['Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)'])
|
||||||
else:
|
else:
|
||||||
pool.extend(['Small Key (Gerudo Fortress)'] * 4)
|
pool.extend(['Small Key (Thieves Hideout)'] * 4)
|
||||||
if world.item_pool_value == 'plentiful':
|
if world.item_pool_value == 'plentiful':
|
||||||
pending_junk_pool.append('Small Key (Gerudo Fortress)')
|
pending_junk_pool.append('Small Key (Thieves Hideout)')
|
||||||
else:
|
else:
|
||||||
if world.gerudo_fortress == 'fast':
|
if world.gerudo_fortress == 'fast':
|
||||||
placed_items['GF North F1 Carpenter'] = 'Small Key (Gerudo Fortress)'
|
placed_items['Hideout Jail Guard (1 Torch)'] = 'Small Key (Thieves Hideout)'
|
||||||
placed_items['GF North F2 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart'
|
||||||
placed_items['GF South F1 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart'
|
||||||
placed_items['GF South F2 Carpenter'] = 'Recovery Heart'
|
placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart'
|
||||||
skip_in_spoiler_locations.extend(['GF North F2 Carpenter', 'GF South F1 Carpenter', 'GF South F2 Carpenter'])
|
skip_in_spoiler_locations.extend(['Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)'])
|
||||||
else:
|
else:
|
||||||
placed_items['GF North F1 Carpenter'] = 'Small Key (Gerudo Fortress)'
|
placed_items['Hideout Jail Guard (1 Torch)'] = 'Small Key (Gerudo Fortress)'
|
||||||
placed_items['GF North F2 Carpenter'] = 'Small Key (Gerudo Fortress)'
|
placed_items['Hideout Jail Guard (2 Torches)'] = 'Small Key (Gerudo Fortress)'
|
||||||
placed_items['GF South F1 Carpenter'] = 'Small Key (Gerudo Fortress)'
|
placed_items['Hideout Jail Guard (3 Torches)'] = 'Small Key (Gerudo Fortress)'
|
||||||
placed_items['GF South F2 Carpenter'] = 'Small Key (Gerudo Fortress)'
|
placed_items['Hideout Jail Guard (4 Torches)'] = 'Small Key (Gerudo Fortress)'
|
||||||
|
|
||||||
if world.shuffle_gerudo_card and world.gerudo_fortress != 'open':
|
if world.shuffle_gerudo_card and world.gerudo_fortress != 'open':
|
||||||
pool.append('Gerudo Membership Card')
|
pool.append('Gerudo Membership Card')
|
||||||
elif world.shuffle_gerudo_card:
|
elif world.shuffle_gerudo_card:
|
||||||
pending_junk_pool.append('Gerudo Membership Card')
|
pending_junk_pool.append('Gerudo Membership Card')
|
||||||
placed_items['GF Gerudo Membership Card'] = 'Ice Trap'
|
placed_items['Hideout Gerudo Membership Card'] = 'Ice Trap'
|
||||||
skip_in_spoiler_locations.append('GF Gerudo Membership Card')
|
skip_in_spoiler_locations.append('Hideout Gerudo Membership Card')
|
||||||
else:
|
else:
|
||||||
placed_items['GF Gerudo Membership Card'] = 'Gerudo Membership Card'
|
placed_items['Hideout Gerudo Membership Card'] = 'Gerudo Membership Card'
|
||||||
if world.shuffle_gerudo_card and world.item_pool_value == 'plentiful':
|
if world.shuffle_gerudo_card and world.item_pool_value == 'plentiful':
|
||||||
pending_junk_pool.append('Gerudo Membership Card')
|
pending_junk_pool.append('Gerudo Membership Card')
|
||||||
|
|
||||||
|
@ -1111,7 +1111,7 @@ def get_pool_core(world):
|
||||||
pending_junk_pool.append('Small Key (Water Temple)')
|
pending_junk_pool.append('Small Key (Water Temple)')
|
||||||
pending_junk_pool.append('Small Key (Shadow Temple)')
|
pending_junk_pool.append('Small Key (Shadow Temple)')
|
||||||
pending_junk_pool.append('Small Key (Spirit Temple)')
|
pending_junk_pool.append('Small Key (Spirit Temple)')
|
||||||
pending_junk_pool.append('Small Key (Gerudo Training Grounds)')
|
pending_junk_pool.append('Small Key (Gerudo Training Ground)')
|
||||||
pending_junk_pool.append('Small Key (Ganons Castle)')
|
pending_junk_pool.append('Small Key (Ganons Castle)')
|
||||||
|
|
||||||
if world.item_pool_value == 'plentiful' and world.shuffle_bosskeys in ['any_dungeon', 'overworld', 'keysanity']:
|
if world.item_pool_value == 'plentiful' and world.shuffle_bosskeys in ['any_dungeon', 'overworld', 'keysanity']:
|
||||||
|
@ -1250,7 +1250,7 @@ def get_pool_core(world):
|
||||||
pool.extend(ShT_vanilla)
|
pool.extend(ShT_vanilla)
|
||||||
if not world.dungeon_mq['Bottom of the Well']:
|
if not world.dungeon_mq['Bottom of the Well']:
|
||||||
pool.extend(BW_vanilla)
|
pool.extend(BW_vanilla)
|
||||||
if world.dungeon_mq['Gerudo Training Grounds']:
|
if world.dungeon_mq['Gerudo Training Ground']:
|
||||||
pool.extend(GTG_MQ)
|
pool.extend(GTG_MQ)
|
||||||
else:
|
else:
|
||||||
pool.extend(GTG_vanilla)
|
pool.extend(GTG_vanilla)
|
||||||
|
|
|
@ -6,7 +6,7 @@ def oot_data_to_ap_id(data, event):
|
||||||
if event or data[2] is None or data[0] == 'Shop':
|
if event or data[2] is None or data[0] == 'Shop':
|
||||||
return None
|
return None
|
||||||
offset = 66000
|
offset = 66000
|
||||||
if data[0] in ['Item', 'BossKey', 'Compass', 'Map', 'SmallKey', 'Token', 'GanonBossKey', 'FortressSmallKey', 'Song']:
|
if data[0] in ['Item', 'BossKey', 'Compass', 'Map', 'SmallKey', 'Token', 'GanonBossKey', 'HideoutSmallKey', 'Song']:
|
||||||
return offset + data[2]
|
return offset + data[2]
|
||||||
else:
|
else:
|
||||||
raise Exception(f'Unexpected OOT item type found: {data[0]}')
|
raise Exception(f'Unexpected OOT item type found: {data[0]}')
|
||||||
|
@ -53,7 +53,7 @@ class OOTItem(Item):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dungeonitem(self) -> bool:
|
def dungeonitem(self) -> bool:
|
||||||
return self.type in ['SmallKey', 'FortressSmallKey', 'BossKey', 'GanonBossKey', 'Map', 'Compass']
|
return self.type in ['SmallKey', 'HideoutSmallKey', 'BossKey', 'GanonBossKey', 'Map', 'Compass']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -193,8 +193,8 @@ item_table = {
|
||||||
'Small Key (Spirit Temple)': ('SmallKey', True, 0xB2, {'progressive': float('Inf')}),
|
'Small Key (Spirit Temple)': ('SmallKey', True, 0xB2, {'progressive': float('Inf')}),
|
||||||
'Small Key (Shadow Temple)': ('SmallKey', True, 0xB3, {'progressive': float('Inf')}),
|
'Small Key (Shadow Temple)': ('SmallKey', True, 0xB3, {'progressive': float('Inf')}),
|
||||||
'Small Key (Bottom of the Well)': ('SmallKey', True, 0xB4, {'progressive': float('Inf')}),
|
'Small Key (Bottom of the Well)': ('SmallKey', True, 0xB4, {'progressive': float('Inf')}),
|
||||||
'Small Key (Gerudo Training Grounds)': ('SmallKey',True, 0xB5, {'progressive': float('Inf')}),
|
'Small Key (Gerudo Training Ground)': ('SmallKey',True, 0xB5, {'progressive': float('Inf')}),
|
||||||
'Small Key (Gerudo Fortress)': ('FortressSmallKey',True, 0xB6, {'progressive': float('Inf')}),
|
'Small Key (Thieves Hideout)': ('HideoutSmallKey',True, 0xB6, {'progressive': float('Inf')}),
|
||||||
'Small Key (Ganons Castle)': ('SmallKey', True, 0xB7, {'progressive': float('Inf')}),
|
'Small Key (Ganons Castle)': ('SmallKey', True, 0xB7, {'progressive': float('Inf')}),
|
||||||
'Double Defense': ('Item', True, 0xB8, None),
|
'Double Defense': ('Item', True, 0xB8, None),
|
||||||
'Magic Bean Pack': ('Item', True, 0xC9, None),
|
'Magic Bean Pack': ('Item', True, 0xC9, None),
|
||||||
|
|
|
@ -19,6 +19,7 @@ def shop_address(shop_id, shelf_id):
|
||||||
# LW Lost Woods
|
# LW Lost Woods
|
||||||
# OGC Outside Ganon's Castle
|
# OGC Outside Ganon's Castle
|
||||||
# SFM Sacred Forest Meadow
|
# SFM Sacred Forest Meadow
|
||||||
|
# TH Thieves' Hideout
|
||||||
# ToT Temple of Time
|
# ToT Temple of Time
|
||||||
# ZD Zora's Domain
|
# ZD Zora's Domain
|
||||||
# ZF Zora's Fountain
|
# ZF Zora's Fountain
|
||||||
|
@ -52,7 +53,7 @@ location_table = OrderedDict([
|
||||||
("Song from Impa", ("Song", 0xFF, 0x26, (0x2E8E925, 0x2E8E925), 'Zeldas Lullaby', ("Hyrule Castle", "Market", "Songs"))),
|
("Song from Impa", ("Song", 0xFF, 0x26, (0x2E8E925, 0x2E8E925), 'Zeldas Lullaby', ("Hyrule Castle", "Market", "Songs"))),
|
||||||
("Song from Malon", ("Song", 0xFF, 0x27, (0x0D7EB53, 0x0D7EBCF), 'Eponas Song', ("Lon Lon Ranch", "Songs",))),
|
("Song from Malon", ("Song", 0xFF, 0x27, (0x0D7EB53, 0x0D7EBCF), 'Eponas Song', ("Lon Lon Ranch", "Songs",))),
|
||||||
("Song from Saria", ("Song", 0xFF, 0x28, (0x20B1DB1, 0x20B1DB1), 'Sarias Song', ("Sacred Forest Meadow", "Forest", "Songs"))),
|
("Song from Saria", ("Song", 0xFF, 0x28, (0x20B1DB1, 0x20B1DB1), 'Sarias Song', ("Sacred Forest Meadow", "Forest", "Songs"))),
|
||||||
("Song from Composers Grave", ("Song", 0xFF, 0x29, (0x332A871, 0x332A871), 'Suns Song', ("the Graveyard", "Kakariko", "Songs"))),
|
("Song from Royal Familys Tomb", ("Song", 0xFF, 0x29, (0x332A871, 0x332A871), 'Suns Song', ("the Graveyard", "Kakariko", "Songs"))),
|
||||||
("Song from Ocarina of Time", ("Song", 0xFF, 0x2A, (0x252FC89, 0x252FC89), 'Song of Time', ("Hyrule Field", "Songs", "Need Spiritual Stones"))),
|
("Song from Ocarina of Time", ("Song", 0xFF, 0x2A, (0x252FC89, 0x252FC89), 'Song of Time', ("Hyrule Field", "Songs", "Need Spiritual Stones"))),
|
||||||
("Song from Windmill", ("Song", 0xFF, 0x2B, (0x0E42C07, 0x0E42B8B), 'Song of Storms', ("Kakariko Village", "Kakariko", "Songs"))),
|
("Song from Windmill", ("Song", 0xFF, 0x2B, (0x0E42C07, 0x0E42B8B), 'Song of Storms', ("Kakariko Village", "Kakariko", "Songs"))),
|
||||||
("Sheik in Forest", ("Song", 0xFF, 0x20, (0x20B0809, 0x20B0809), 'Minuet of Forest', ("Sacred Forest Meadow", "Forest", "Songs"))),
|
("Sheik in Forest", ("Song", 0xFF, 0x20, (0x20B0809, 0x20B0809), 'Minuet of Forest', ("Sacred Forest Meadow", "Forest", "Songs"))),
|
||||||
|
@ -70,7 +71,7 @@ location_table = OrderedDict([
|
||||||
("KF Midos Bottom Right Chest", ("Chest", 0x28, 0x03, None, 'Recovery Heart', ("Kokiri Forest", "Forest",))),
|
("KF Midos Bottom Right Chest", ("Chest", 0x28, 0x03, None, 'Recovery Heart', ("Kokiri Forest", "Forest",))),
|
||||||
("KF Kokiri Sword Chest", ("Chest", 0x55, 0x00, None, 'Kokiri Sword', ("Kokiri Forest", "Forest",))),
|
("KF Kokiri Sword Chest", ("Chest", 0x55, 0x00, None, 'Kokiri Sword', ("Kokiri Forest", "Forest",))),
|
||||||
("KF Storms Grotto Chest", ("Chest", 0x3E, 0x0C, None, 'Rupees (20)', ("Kokiri Forest", "Forest", "Grottos"))),
|
("KF Storms Grotto Chest", ("Chest", 0x3E, 0x0C, None, 'Rupees (20)', ("Kokiri Forest", "Forest", "Grottos"))),
|
||||||
("KF Links House Cow", ("NPC", 0x34, 0x15, None, 'Milk', ("KF Links House", "Forest", "Cow", "Minigames"))),
|
("KF Links House Cow", ("NPC", 0x34, 0x15, None, 'Milk', ("Kokiri Forest", "Forest", "Cow", "Minigames"))),
|
||||||
("KF GS Know It All House", ("GS Token", 0x0C, 0x02, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))),
|
("KF GS Know It All House", ("GS Token", 0x0C, 0x02, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))),
|
||||||
("KF GS Bean Patch", ("GS Token", 0x0C, 0x01, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))),
|
("KF GS Bean Patch", ("GS Token", 0x0C, 0x01, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))),
|
||||||
("KF GS House of Twins", ("GS Token", 0x0C, 0x04, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))),
|
("KF GS House of Twins", ("GS Token", 0x0C, 0x04, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))),
|
||||||
|
@ -163,7 +164,7 @@ location_table = OrderedDict([
|
||||||
("HC GS Storms Grotto", ("GS Token", 0x0E, 0x02, None, 'Gold Skulltula Token', ("Hyrule Castle", "Skulltulas", "Grottos"))),
|
("HC GS Storms Grotto", ("GS Token", 0x0E, 0x02, None, 'Gold Skulltula Token', ("Hyrule Castle", "Skulltulas", "Grottos"))),
|
||||||
|
|
||||||
# Lon Lon Ranch
|
# Lon Lon Ranch
|
||||||
("LLR Talons Chickens", ("NPC", 0x4C, 0x14, None, 'Bottle with Milk', ("Lon Lon Ranch", "Kakariko", "Minigames"))),
|
("LLR Talons Chickens", ("NPC", 0x4C, 0x14, None, 'Bottle with Milk', ("Lon Lon Ranch", "Minigames"))),
|
||||||
("LLR Freestanding PoH", ("Collectable", 0x4C, 0x01, None, 'Piece of Heart', ("Lon Lon Ranch",))),
|
("LLR Freestanding PoH", ("Collectable", 0x4C, 0x01, None, 'Piece of Heart', ("Lon Lon Ranch",))),
|
||||||
("LLR Deku Scrub Grotto Left", ("GrottoNPC", 0xFC, 0x30, None, 'Buy Deku Nut (5)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))),
|
("LLR Deku Scrub Grotto Left", ("GrottoNPC", 0xFC, 0x30, None, 'Buy Deku Nut (5)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))),
|
||||||
("LLR Deku Scrub Grotto Center", ("GrottoNPC", 0xFC, 0x33, None, 'Buy Deku Seeds (30)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))),
|
("LLR Deku Scrub Grotto Center", ("GrottoNPC", 0xFC, 0x33, None, 'Buy Deku Seeds (30)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))),
|
||||||
|
@ -218,7 +219,7 @@ location_table = OrderedDict([
|
||||||
# Graveyard
|
# Graveyard
|
||||||
("Graveyard Shield Grave Chest", ("Chest", 0x40, 0x00, None, 'Hylian Shield', ("the Graveyard", "Kakariko",))),
|
("Graveyard Shield Grave Chest", ("Chest", 0x40, 0x00, None, 'Hylian Shield', ("the Graveyard", "Kakariko",))),
|
||||||
("Graveyard Heart Piece Grave Chest", ("Chest", 0x3F, 0x00, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))),
|
("Graveyard Heart Piece Grave Chest", ("Chest", 0x3F, 0x00, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))),
|
||||||
("Graveyard Composers Grave Chest", ("Chest", 0x41, 0x00, None, 'Bombs (5)', ("the Graveyard", "Kakariko",))),
|
("Graveyard Royal Familys Tomb Chest", ("Chest", 0x41, 0x00, None, 'Bombs (5)', ("the Graveyard", "Kakariko",))),
|
||||||
("Graveyard Freestanding PoH", ("Collectable", 0x53, 0x04, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))),
|
("Graveyard Freestanding PoH", ("Collectable", 0x53, 0x04, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))),
|
||||||
("Graveyard Dampe Gravedigging Tour", ("Collectable", 0x53, 0x08, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))),
|
("Graveyard Dampe Gravedigging Tour", ("Collectable", 0x53, 0x08, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))),
|
||||||
("Graveyard Hookshot Chest", ("Chest", 0x48, 0x00, None, 'Progressive Hookshot', ("the Graveyard", "Kakariko",))),
|
("Graveyard Hookshot Chest", ("Chest", 0x48, 0x00, None, 'Progressive Hookshot', ("the Graveyard", "Kakariko",))),
|
||||||
|
@ -337,12 +338,14 @@ location_table = OrderedDict([
|
||||||
("GV GS Behind Tent", ("GS Token", 0x13, 0x08, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))),
|
("GV GS Behind Tent", ("GS Token", 0x13, 0x08, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))),
|
||||||
("GV GS Pillar", ("GS Token", 0x13, 0x04, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))),
|
("GV GS Pillar", ("GS Token", 0x13, 0x04, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))),
|
||||||
|
|
||||||
|
# Thieves' Hideout
|
||||||
|
("Hideout Jail Guard (1 Torch)", ("Collectable", 0x0C, 0x0C, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))),
|
||||||
|
("Hideout Jail Guard (2 Torches)", ("Collectable", 0x0C, 0x0F, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))),
|
||||||
|
("Hideout Jail Guard (3 Torches)", ("Collectable", 0x0C, 0x0A, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))),
|
||||||
|
("Hideout Jail Guard (4 Torches)", ("Collectable", 0x0C, 0x0E, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))),
|
||||||
|
("Hideout Gerudo Membership Card", ("NPC", 0x0C, 0x3A, None, 'Gerudo Membership Card', ("Thieves' Hideout", "Gerudo",))),
|
||||||
|
|
||||||
# Gerudo's Fortress
|
# Gerudo's Fortress
|
||||||
("GF North F1 Carpenter", ("Collectable", 0x0C, 0x0C, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))),
|
|
||||||
("GF North F2 Carpenter", ("Collectable", 0x0C, 0x0A, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))),
|
|
||||||
("GF South F1 Carpenter", ("Collectable", 0x0C, 0x0E, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))),
|
|
||||||
("GF South F2 Carpenter", ("Collectable", 0x0C, 0x0F, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))),
|
|
||||||
("GF Gerudo Membership Card", ("NPC", 0x0C, 0x3A, None, 'Gerudo Membership Card', ("Gerudo's Fortress", "Gerudo",))),
|
|
||||||
("GF Chest", ("Chest", 0x5D, 0x00, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo",))),
|
("GF Chest", ("Chest", 0x5D, 0x00, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo",))),
|
||||||
("GF HBA 1000 Points", ("NPC", 0x5D, 0x3E, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo", "Minigames"))),
|
("GF HBA 1000 Points", ("NPC", 0x5D, 0x3E, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo", "Minigames"))),
|
||||||
("GF HBA 1500 Points", ("NPC", 0x5D, 0x30, None, 'Bow', ("Gerudo's Fortress", "Gerudo", "Minigames"))),
|
("GF HBA 1500 Points", ("NPC", 0x5D, 0x30, None, 'Bow', ("Gerudo's Fortress", "Gerudo", "Minigames"))),
|
||||||
|
@ -364,8 +367,8 @@ location_table = OrderedDict([
|
||||||
("Colossus GS Hill", ("GS Token", 0x15, 0x04, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas",))),
|
("Colossus GS Hill", ("GS Token", 0x15, 0x04, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas",))),
|
||||||
|
|
||||||
# Outside Ganon's Castle
|
# Outside Ganon's Castle
|
||||||
("OGC Great Fairy Reward", ("Cutscene", 0xFF, 0x15, None, 'Double Defense', ("outside Ganon's Castle", "Market", "Fairies"))),
|
("OGC Great Fairy Reward", ("Cutscene", 0xFF, 0x15, None, 'Double Defense', ("Outside Ganon's Castle", "Market", "Fairies"))),
|
||||||
("OGC GS", ("GS Token", 0x0E, 0x01, None, 'Gold Skulltula Token', ("outside Ganon's Castle", "Skulltulas",))),
|
("OGC GS", ("GS Token", 0x0E, 0x01, None, 'Gold Skulltula Token', ("Outside Ganon's Castle", "Skulltulas",))),
|
||||||
|
|
||||||
## Dungeons
|
## Dungeons
|
||||||
# Deku Tree vanilla
|
# Deku Tree vanilla
|
||||||
|
@ -725,47 +728,47 @@ location_table = OrderedDict([
|
||||||
("Ice Cavern MQ GS Ice Block", ("GS Token", 0x09, 0x04, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))),
|
("Ice Cavern MQ GS Ice Block", ("GS Token", 0x09, 0x04, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))),
|
||||||
("Ice Cavern MQ GS Scarecrow", ("GS Token", 0x09, 0x01, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))),
|
("Ice Cavern MQ GS Scarecrow", ("GS Token", 0x09, 0x01, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))),
|
||||||
|
|
||||||
# Gerudo Training Grounds vanilla
|
# Gerudo Training Ground vanilla
|
||||||
("Gerudo Training Grounds Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Rupees (5)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Arrows (10)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Stalfos Chest", ("Chest", 0x0B, 0x00, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Stalfos Chest", ("Chest", 0x0B, 0x00, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (30)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Heavy Block First Chest", ("Chest", 0x0B, 0x0F, None, 'Rupees (200)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Heavy Block First Chest", ("Chest", 0x0B, 0x0F, None, 'Rupees (200)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Heavy Block Second Chest", ("Chest", 0x0B, 0x0E, None, 'Rupees (5)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Heavy Block Second Chest", ("Chest", 0x0B, 0x0E, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Heavy Block Third Chest", ("Chest", 0x0B, 0x14, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Heavy Block Third Chest", ("Chest", 0x0B, 0x14, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Heavy Block Fourth Chest", ("Chest", 0x0B, 0x02, None, 'Ice Trap', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Heavy Block Fourth Chest", ("Chest", 0x0B, 0x02, None, 'Ice Trap', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Near Scarecrow Chest", ("Chest", 0x0B, 0x04, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Near Scarecrow Chest", ("Chest", 0x0B, 0x04, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Hammer Room Clear Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Hammer Room Clear Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Hammer Room Switch Chest", ("Chest", 0x0B, 0x10, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Hammer Room Switch Chest", ("Chest", 0x0B, 0x10, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Freestanding Key", ("Collectable", 0x0B, 0x01, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Freestanding Key", ("Collectable", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Bombchus (5)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Bombchus (5)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Arrows (30)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Beamos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Beamos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupees (50)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupees (50)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Arrows (30)', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
("Gerudo Training Grounds Maze Path Final Chest", ("Chest", 0x0B, 0x0C, None, 'Ice Arrows', ("Gerudo Training Grounds", "Vanilla",))),
|
("Gerudo Training Ground Maze Path Final Chest", ("Chest", 0x0B, 0x0C, None, 'Ice Arrows', ("Gerudo Training Ground", "Vanilla",))),
|
||||||
# Gerudo Training Grounds MQ
|
# Gerudo Training Ground MQ
|
||||||
("Gerudo Training Grounds MQ Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Arrows (10)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Bombchus (5)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Bombchus (5)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ First Iron Knuckle Chest", ("Chest", 0x0B, 0x00, None, 'Rupees (5)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ First Iron Knuckle Chest", ("Chest", 0x0B, 0x00, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (10)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Heavy Block Chest", ("Chest", 0x0B, 0x02, None, 'Rupees (50)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Heavy Block Chest", ("Chest", 0x0B, 0x02, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Bombchus (10)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Bombchus (10)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Ice Arrows Chest", ("Chest", 0x0B, 0x04, None, 'Ice Arrows', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Ice Arrows Chest", ("Chest", 0x0B, 0x04, None, 'Ice Arrows', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Second Iron Knuckle Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Second Iron Knuckle Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Flame Circle Chest", ("Chest", 0x0B, 0x0E, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Flame Circle Chest", ("Chest", 0x0B, 0x0E, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Rupees (5)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Dinolfos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Dinolfos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Rupees (50)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupee (1)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupee (1)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
("Gerudo Training Grounds MQ Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Grounds", "Master Quest",))),
|
("Gerudo Training Ground MQ Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Master Quest",))),
|
||||||
|
|
||||||
# Ganon's Castle vanilla
|
# Ganon's Castle vanilla
|
||||||
("Ganons Castle Forest Trial Chest", ("Chest", 0x0D, 0x09, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla",))),
|
("Ganons Castle Forest Trial Chest", ("Chest", 0x0D, 0x09, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla",))),
|
||||||
|
@ -902,7 +905,7 @@ business_scrubs = [
|
||||||
(0x79, 40, 0x10DD, ["enable you to pick up more \x05\x41Deku\x01Nuts", "sell you a \x05\x42mysterious item"]),
|
(0x79, 40, 0x10DD, ["enable you to pick up more \x05\x41Deku\x01Nuts", "sell you a \x05\x42mysterious item"]),
|
||||||
]
|
]
|
||||||
|
|
||||||
dungeons = ('Deku Tree', 'Dodongo\'s Cavern', 'Jabu Jabu\'s Belly', 'Forest Temple', 'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple', 'Ice Cavern', 'Bottom of the Well', 'Gerudo Training Grounds', 'Ganon\'s Castle')
|
dungeons = ('Deku Tree', 'Dodongo\'s Cavern', 'Jabu Jabu\'s Belly', 'Forest Temple', 'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple', 'Ice Cavern', 'Bottom of the Well', 'Gerudo Training Ground', 'Ganon\'s Castle')
|
||||||
location_groups = {
|
location_groups = {
|
||||||
'Song': [name for (name, data) in location_table.items() if data[0] == 'Song'],
|
'Song': [name for (name, data) in location_table.items() if data[0] == 'Song'],
|
||||||
'Chest': [name for (name, data) in location_table.items() if data[0] == 'Chest'],
|
'Chest': [name for (name, data) in location_table.items() if data[0] == 'Chest'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
known_logic_tricks = {
|
known_logic_tricks = {
|
||||||
'Fewer Tunic Requirements': {
|
'Fewer Tunic Requirements': {
|
||||||
'name' : 'logic_fewer_tunic_requirements',
|
'name' : 'logic_fewer_tunic_requirements',
|
||||||
'tags' : ("General", "Fire Temple", "Water Temple", "Gerudo Training Grounds", "Zora's Fountain",),
|
'tags' : ("General", "Fire Temple", "Water Temple", "Gerudo Training Ground", "Zora's Fountain",),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
Allows the following possible without Tunics:
|
Allows the following possible without Tunics:
|
||||||
- Enter Water Temple. The key below the center
|
- Enter Water Temple. The key below the center
|
||||||
|
@ -10,7 +10,7 @@ known_logic_tricks = {
|
||||||
accessible, and not Volvagia.
|
accessible, and not Volvagia.
|
||||||
- Zora's Fountain Bottom Freestanding PoH.
|
- Zora's Fountain Bottom Freestanding PoH.
|
||||||
Might not have enough health to resurface.
|
Might not have enough health to resurface.
|
||||||
- Gerudo Training Grounds Underwater
|
- Gerudo Training Ground Underwater
|
||||||
Silver Rupee Chest. May need to make multiple
|
Silver Rupee Chest. May need to make multiple
|
||||||
trips.
|
trips.
|
||||||
'''},
|
'''},
|
||||||
|
@ -73,9 +73,9 @@ known_logic_tricks = {
|
||||||
from below, by shooting it through the vines,
|
from below, by shooting it through the vines,
|
||||||
bypassing the need to lower the staircase.
|
bypassing the need to lower the staircase.
|
||||||
'''},
|
'''},
|
||||||
'Gerudo Fortress "Kitchen" with No Additional Items': {
|
'Thieves\' Hideout "Kitchen" with No Additional Items': {
|
||||||
'name' : 'logic_gerudo_kitchen',
|
'name' : 'logic_gerudo_kitchen',
|
||||||
'tags' : ("Gerudo's Fortress",),
|
'tags' : ("Thieves' Hideout", "Gerudo's Fortress"),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
The logic normally guarantees one of Bow, Hookshot,
|
The logic normally guarantees one of Bow, Hookshot,
|
||||||
or Hover Boots.
|
or Hover Boots.
|
||||||
|
@ -185,9 +185,9 @@ known_logic_tricks = {
|
||||||
a particularly egregious example. Logic normally
|
a particularly egregious example. Logic normally
|
||||||
expects Din's Fire and Song of Time.
|
expects Din's Fire and Song of Time.
|
||||||
'''},
|
'''},
|
||||||
'Gerudo Training Grounds MQ Left Side Silver Rupees with Hookshot': {
|
'Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot': {
|
||||||
'name' : 'logic_gtg_mq_with_hookshot',
|
'name' : 'logic_gtg_mq_with_hookshot',
|
||||||
'tags' : ("Gerudo Training Grounds",),
|
'tags' : ("Gerudo Training Ground",),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
The highest silver rupee can be obtained by
|
The highest silver rupee can be obtained by
|
||||||
hookshotting the target and then immediately jump
|
hookshotting the target and then immediately jump
|
||||||
|
@ -239,14 +239,6 @@ known_logic_tricks = {
|
||||||
or hit the shortcut switch at the top of the
|
or hit the shortcut switch at the top of the
|
||||||
room and jump from the glass blocks that spawn.
|
room and jump from the glass blocks that spawn.
|
||||||
'''},
|
'''},
|
||||||
'Forest Temple MQ Twisted Hallway Switch with Hookshot': {
|
|
||||||
'name' : 'logic_forest_mq_hallway_switch_hookshot',
|
|
||||||
'tags' : ("Forest Temple",),
|
|
||||||
'tooltip' : '''\
|
|
||||||
There's a very small gap between the glass block
|
|
||||||
and the wall. Through that gap you can hookshot
|
|
||||||
the target on the ceiling.
|
|
||||||
'''},
|
|
||||||
'Death Mountain Trail Chest with Strength': {
|
'Death Mountain Trail Chest with Strength': {
|
||||||
'name' : 'logic_dmt_bombable',
|
'name' : 'logic_dmt_bombable',
|
||||||
'tags' : ("Death Mountain Trail",),
|
'tags' : ("Death Mountain Trail",),
|
||||||
|
@ -907,9 +899,9 @@ known_logic_tricks = {
|
||||||
Skulltula and obtain the token by having the Boomerang
|
Skulltula and obtain the token by having the Boomerang
|
||||||
interact with it along the return path.
|
interact with it along the return path.
|
||||||
'''},
|
'''},
|
||||||
'Gerudo Training Grounds Left Side Silver Rupees without Hookshot': {
|
'Gerudo Training Ground Left Side Silver Rupees without Hookshot': {
|
||||||
'name' : 'logic_gtg_without_hookshot',
|
'name' : 'logic_gtg_without_hookshot',
|
||||||
'tags' : ("Gerudo Training Grounds",),
|
'tags' : ("Gerudo Training Ground",),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
After collecting the rest of the silver rupees in the room,
|
After collecting the rest of the silver rupees in the room,
|
||||||
you can reach the final silver rupee on the ceiling by being
|
you can reach the final silver rupee on the ceiling by being
|
||||||
|
@ -919,9 +911,9 @@ known_logic_tricks = {
|
||||||
the edge of a flame wall before it can rise up to block you.
|
the edge of a flame wall before it can rise up to block you.
|
||||||
To do so without taking damage is more precise.
|
To do so without taking damage is more precise.
|
||||||
'''},
|
'''},
|
||||||
'Gerudo Training Grounds MQ Left Side Silver Rupees without Hookshot': {
|
'Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot': {
|
||||||
'name' : 'logic_gtg_mq_without_hookshot',
|
'name' : 'logic_gtg_mq_without_hookshot',
|
||||||
'tags' : ("Gerudo Training Grounds",),
|
'tags' : ("Gerudo Training Ground",),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
After collecting the rest of the silver rupees in the room,
|
After collecting the rest of the silver rupees in the room,
|
||||||
you can reach the final silver rupee on the ceiling by being
|
you can reach the final silver rupee on the ceiling by being
|
||||||
|
@ -932,18 +924,18 @@ known_logic_tricks = {
|
||||||
Also included with this trick is that fact that the switch
|
Also included with this trick is that fact that the switch
|
||||||
that unbars the door to the final chest of GTG can be hit
|
that unbars the door to the final chest of GTG can be hit
|
||||||
without a projectile, using a precise jump slash.
|
without a projectile, using a precise jump slash.
|
||||||
This trick supersedes "Gerudo Training Grounds MQ Left Side
|
This trick supersedes "Gerudo Training Ground MQ Left Side
|
||||||
Silver Rupees with Hookshot".
|
Silver Rupees with Hookshot".
|
||||||
'''},
|
'''},
|
||||||
'Reach Gerudo Training Grounds Fake Wall Ledge with Hover Boots': {
|
'Reach Gerudo Training Ground Fake Wall Ledge with Hover Boots': {
|
||||||
'name' : 'logic_gtg_fake_wall',
|
'name' : 'logic_gtg_fake_wall',
|
||||||
'tags' : ("Gerudo Training Grounds",),
|
'tags' : ("Gerudo Training Ground",),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
A precise Hover Boots use from the top of the chest can allow
|
A precise Hover Boots use from the top of the chest can allow
|
||||||
you to grab the ledge without needing the usual requirements.
|
you to grab the ledge without needing the usual requirements.
|
||||||
In Master Quest, this always skips a Song of Time requirement.
|
In Master Quest, this always skips a Song of Time requirement.
|
||||||
In Vanilla, this skips a Hookshot requirement, but is only
|
In Vanilla, this skips a Hookshot requirement, but is only
|
||||||
relevant if "Gerudo Training Grounds Left Side Silver Rupees
|
relevant if "Gerudo Training Ground Left Side Silver Rupees
|
||||||
without Hookshot" is enabled.
|
without Hookshot" is enabled.
|
||||||
'''},
|
'''},
|
||||||
'Water Temple Cracked Wall with No Additional Items': {
|
'Water Temple Cracked Wall with No Additional Items': {
|
||||||
|
@ -1299,19 +1291,19 @@ known_logic_tricks = {
|
||||||
Removes the requirements for the Lens of Truth
|
Removes the requirements for the Lens of Truth
|
||||||
in Ganon's Castle.
|
in Ganon's Castle.
|
||||||
'''},
|
'''},
|
||||||
'Gerudo Training Grounds MQ without Lens of Truth': {
|
'Gerudo Training Ground MQ without Lens of Truth': {
|
||||||
'name' : 'logic_lens_gtg_mq',
|
'name' : 'logic_lens_gtg_mq',
|
||||||
'tags' : ("Lens of Truth","Gerudo Training Grounds",),
|
'tags' : ("Lens of Truth","Gerudo Training Ground",),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
Removes the requirements for the Lens of Truth
|
Removes the requirements for the Lens of Truth
|
||||||
in Gerudo Training Grounds MQ.
|
in Gerudo Training Ground MQ.
|
||||||
'''},
|
'''},
|
||||||
'Gerudo Training Grounds without Lens of Truth': {
|
'Gerudo Training Ground without Lens of Truth': {
|
||||||
'name' : 'logic_lens_gtg',
|
'name' : 'logic_lens_gtg',
|
||||||
'tags' : ("Lens of Truth","Gerudo Training Grounds",),
|
'tags' : ("Lens of Truth","Gerudo Training Ground",),
|
||||||
'tooltip' : '''\
|
'tooltip' : '''\
|
||||||
Removes the requirements for the Lens of Truth
|
Removes the requirements for the Lens of Truth
|
||||||
in Gerudo Training Grounds.
|
in Gerudo Training Ground.
|
||||||
'''},
|
'''},
|
||||||
'Jabu MQ without Lens of Truth': {
|
'Jabu MQ without Lens of Truth': {
|
||||||
'name' : 'logic_lens_jabu_mq',
|
'name' : 'logic_lens_jabu_mq',
|
||||||
|
|
|
@ -308,7 +308,7 @@ KEYSANITY_MESSAGES = {
|
||||||
0x0095: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x43Water Temple\x05\x40!\x09",
|
0x0095: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x43Water Temple\x05\x40!\x09",
|
||||||
0x009B: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09",
|
0x009B: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09",
|
||||||
0x009F: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Gerudo Training\x01Grounds\x05\x40!\x09",
|
0x009F: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Gerudo Training\x01Grounds\x05\x40!\x09",
|
||||||
0x00A0: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Gerudo's Fortress\x05\x40!\x09",
|
0x00A0: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Thieves' Hideout\x05\x40!\x09",
|
||||||
0x00A1: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for \x05\x41Ganon's Castle\x05\x40!\x09",
|
0x00A1: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for \x05\x41Ganon's Castle\x05\x40!\x09",
|
||||||
0x00A2: "\x13\x75\x08You found the \x05\x41Compass\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09",
|
0x00A2: "\x13\x75\x08You found the \x05\x41Compass\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09",
|
||||||
0x00A3: "\x13\x76\x08You found the \x05\x41Dungeon Map\x05\x40\x01for the \x05\x45Shadow Temple\x05\x40!\x09",
|
0x00A3: "\x13\x76\x08You found the \x05\x41Dungeon Map\x05\x40\x01for the \x05\x45Shadow Temple\x05\x40!\x09",
|
||||||
|
|
|
@ -421,8 +421,8 @@ class ShuffleKeys(Choice):
|
||||||
|
|
||||||
|
|
||||||
class ShuffleGerudoKeys(Choice):
|
class ShuffleGerudoKeys(Choice):
|
||||||
"""Control where to shuffle the Gerudo Fortress small keys."""
|
"""Control where to shuffle the Thieves' Hideout small keys."""
|
||||||
display_name = "Gerudo Fortress Keys"
|
display_name = "Thieves' Hideout Keys"
|
||||||
option_vanilla = 0
|
option_vanilla = 0
|
||||||
option_overworld = 1
|
option_overworld = 1
|
||||||
option_any_dungeon = 2
|
option_any_dungeon = 2
|
||||||
|
|
|
@ -710,7 +710,7 @@ def patch_rom(world, rom):
|
||||||
rom.write_byte(address,0x01)
|
rom.write_byte(address,0x01)
|
||||||
|
|
||||||
# Allow Warp Songs in additional places
|
# Allow Warp Songs in additional places
|
||||||
rom.write_byte(0xB6D3D2, 0x00) # Gerudo Training Grounds
|
rom.write_byte(0xB6D3D2, 0x00) # Gerudo Training Ground
|
||||||
rom.write_byte(0xB6D42A, 0x00) # Inside Ganon's Castle
|
rom.write_byte(0xB6D42A, 0x00) # Inside Ganon's Castle
|
||||||
|
|
||||||
#Tell Sheik at Ice Cavern we are always an Adult
|
#Tell Sheik at Ice Cavern we are always an Adult
|
||||||
|
@ -719,10 +719,10 @@ def patch_rom(world, rom):
|
||||||
rom.write_int32(0xc7BCA4, 0x00000000)
|
rom.write_int32(0xc7BCA4, 0x00000000)
|
||||||
|
|
||||||
# Allow Farore's Wind in dungeons where it's normally forbidden
|
# Allow Farore's Wind in dungeons where it's normally forbidden
|
||||||
rom.write_byte(0xB6D3D3, 0x00) # Gerudo Training Grounds
|
rom.write_byte(0xB6D3D3, 0x00) # Gerudo Training Ground
|
||||||
rom.write_byte(0xB6D42B, 0x00) # Inside Ganon's Castle
|
rom.write_byte(0xB6D42B, 0x00) # Inside Ganon's Castle
|
||||||
|
|
||||||
# Remove disruptive text from Gerudo Training Grounds and early Shadow Temple (vanilla)
|
# Remove disruptive text from Gerudo Training Ground and early Shadow Temple (vanilla)
|
||||||
Wonder_text = [0x27C00BC, 0x27C00CC, 0x27C00DC, 0x27C00EC, 0x27C00FC, 0x27C010C, 0x27C011C, 0x27C012C, 0x27CE080,
|
Wonder_text = [0x27C00BC, 0x27C00CC, 0x27C00DC, 0x27C00EC, 0x27C00FC, 0x27C010C, 0x27C011C, 0x27C012C, 0x27CE080,
|
||||||
0x27CE090, 0x2887070, 0x2887080, 0x2887090, 0x2897070, 0x28C7134, 0x28D91BC, 0x28A60F4, 0x28AE084,
|
0x27CE090, 0x2887070, 0x2887080, 0x2887090, 0x2897070, 0x28C7134, 0x28D91BC, 0x28A60F4, 0x28AE084,
|
||||||
0x28B9174, 0x28BF168, 0x28BF178, 0x28BF188, 0x28A1144, 0x28A6104, 0x28D0094]
|
0x28B9174, 0x28BF168, 0x28BF178, 0x28BF188, 0x28A1144, 0x28A6104, 0x28D0094]
|
||||||
|
@ -826,10 +826,6 @@ def patch_rom(world, rom):
|
||||||
|
|
||||||
exit_table = generate_exit_lookup_table()
|
exit_table = generate_exit_lookup_table()
|
||||||
|
|
||||||
if world.entrance_shuffle:
|
|
||||||
# Disable the fog state entirely to avoid fog glitches
|
|
||||||
rom.write_byte(rom.sym('NO_FOG_STATE'), 1)
|
|
||||||
|
|
||||||
if world.disable_trade_revert:
|
if world.disable_trade_revert:
|
||||||
# Disable trade quest timers and prevent trade items from ever reverting
|
# Disable trade quest timers and prevent trade items from ever reverting
|
||||||
rom.write_byte(rom.sym('DISABLE_TIMERS'), 0x01)
|
rom.write_byte(rom.sym('DISABLE_TIMERS'), 0x01)
|
||||||
|
@ -1202,7 +1198,7 @@ def patch_rom(world, rom):
|
||||||
if world.dungeon_mq['Ice Cavern']:
|
if world.dungeon_mq['Ice Cavern']:
|
||||||
mq_scenes.append(9)
|
mq_scenes.append(9)
|
||||||
# Scene 10 has no layout changes, so it doesn't need to be patched
|
# Scene 10 has no layout changes, so it doesn't need to be patched
|
||||||
if world.dungeon_mq['Gerudo Training Grounds']:
|
if world.dungeon_mq['Gerudo Training Ground']:
|
||||||
mq_scenes.append(11)
|
mq_scenes.append(11)
|
||||||
if world.dungeon_mq['Ganons Castle']:
|
if world.dungeon_mq['Ganons Castle']:
|
||||||
mq_scenes.append(13)
|
mq_scenes.append(13)
|
||||||
|
@ -1378,7 +1374,7 @@ def patch_rom(world, rom):
|
||||||
rom.write_byte(0x2E8E931, special['text_id']) #Fix text box
|
rom.write_byte(0x2E8E931, special['text_id']) #Fix text box
|
||||||
elif location.name == 'Song from Malon':
|
elif location.name == 'Song from Malon':
|
||||||
rom.write_byte(rom.sym('MALON_TEXT_ID'), special['text_id'])
|
rom.write_byte(rom.sym('MALON_TEXT_ID'), special['text_id'])
|
||||||
elif location.name == 'Song from Composers Grave':
|
elif location.name == 'Song from Royal Familys Tomb':
|
||||||
rom.write_int16(0xE09F66, bit_mask_pointer)
|
rom.write_int16(0xE09F66, bit_mask_pointer)
|
||||||
rom.write_byte(0x332A87D, special['text_id']) #Fix text box
|
rom.write_byte(0x332A87D, special['text_id']) #Fix text box
|
||||||
elif location.name == 'Song from Saria':
|
elif location.name == 'Song from Saria':
|
||||||
|
@ -1685,7 +1681,7 @@ def patch_rom(world, rom):
|
||||||
'Shadow Temple': ("the \x05\x45Shadow Temple", 'Bongo Bongo', 0x7f, 0xa3),
|
'Shadow Temple': ("the \x05\x45Shadow Temple", 'Bongo Bongo', 0x7f, 0xa3),
|
||||||
}
|
}
|
||||||
for dungeon in world.dungeon_mq:
|
for dungeon in world.dungeon_mq:
|
||||||
if dungeon in ['Gerudo Training Grounds', 'Ganons Castle']:
|
if dungeon in ['Gerudo Training Ground', 'Ganons Castle']:
|
||||||
pass
|
pass
|
||||||
elif dungeon in ['Bottom of the Well', 'Ice Cavern']:
|
elif dungeon in ['Bottom of the Well', 'Ice Cavern']:
|
||||||
dungeon_name, boss_name, compass_id, map_id = dungeon_list[dungeon]
|
dungeon_name, boss_name, compass_id, map_id = dungeon_list[dungeon]
|
||||||
|
@ -2184,7 +2180,7 @@ def configure_dungeon_info(rom, world):
|
||||||
codes = ['Deku Tree', 'Dodongos Cavern', 'Jabu Jabus Belly', 'Forest Temple',
|
codes = ['Deku Tree', 'Dodongos Cavern', 'Jabu Jabus Belly', 'Forest Temple',
|
||||||
'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple',
|
'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple',
|
||||||
'Bottom of the Well', 'Ice Cavern', 'Tower (N/A)',
|
'Bottom of the Well', 'Ice Cavern', 'Tower (N/A)',
|
||||||
'Gerudo Training Grounds', 'Hideout (N/A)', 'Ganons Castle']
|
'Gerudo Training Ground', 'Hideout (N/A)', 'Ganons Castle']
|
||||||
dungeon_is_mq = [1 if world.dungeon_mq.get(c) else 0 for c in codes]
|
dungeon_is_mq = [1 if world.dungeon_mq.get(c) else 0 for c in codes]
|
||||||
|
|
||||||
rom.write_int32(rom.sym('cfg_dungeon_info_enable'), 1)
|
rom.write_int32(rom.sym('cfg_dungeon_info_enable'), 1)
|
||||||
|
|
|
@ -81,7 +81,7 @@ class OOTWorld(World):
|
||||||
remote_items: bool = False
|
remote_items: bool = False
|
||||||
remote_start_inventory: bool = False
|
remote_start_inventory: bool = False
|
||||||
|
|
||||||
data_version = 1
|
data_version = 2
|
||||||
|
|
||||||
required_client_version = (0, 3, 2)
|
required_client_version = (0, 3, 2)
|
||||||
|
|
||||||
|
@ -167,12 +167,20 @@ class OOTWorld(World):
|
||||||
self.dungeon_mq = {item['name']: (item in mq_dungeons) for item in dungeon_table}
|
self.dungeon_mq = {item['name']: (item in mq_dungeons) for item in dungeon_table}
|
||||||
|
|
||||||
# Determine tricks in logic
|
# Determine tricks in logic
|
||||||
for trick in self.logic_tricks:
|
if self.logic_rules == 'glitchless':
|
||||||
normalized_name = trick.casefold()
|
for trick in self.logic_tricks:
|
||||||
if normalized_name in normalized_name_tricks:
|
normalized_name = trick.casefold()
|
||||||
setattr(self, normalized_name_tricks[normalized_name]['name'], True)
|
if normalized_name in normalized_name_tricks:
|
||||||
else:
|
setattr(self, normalized_name_tricks[normalized_name]['name'], True)
|
||||||
raise Exception(f'Unknown OOT logic trick for player {self.player}: {trick}')
|
else:
|
||||||
|
raise Exception(f'Unknown OOT logic trick for player {self.player}: {trick}')
|
||||||
|
|
||||||
|
# No Logic forces all tricks on, prog balancing off and beatable-only
|
||||||
|
elif self.logic_rules == 'no_logic':
|
||||||
|
self.world.progression_balancing[self.player].value = False
|
||||||
|
self.world.accessibility[self.player] = self.world.accessibility[self.player].from_text("minimal")
|
||||||
|
for trick in normalized_name_tricks.values():
|
||||||
|
setattr(self, trick['name'], True)
|
||||||
|
|
||||||
# Not implemented for now, but needed to placate the generator. Remove as they are implemented
|
# Not implemented for now, but needed to placate the generator. Remove as they are implemented
|
||||||
self.mq_dungeons_random = False # this will be a deprecated option later
|
self.mq_dungeons_random = False # this will be a deprecated option later
|
||||||
|
@ -295,8 +303,7 @@ class OOTWorld(World):
|
||||||
continue
|
continue
|
||||||
new_location.parent_region = new_region
|
new_location.parent_region = new_region
|
||||||
new_location.rule_string = rule
|
new_location.rule_string = rule
|
||||||
if self.world.logic_rules != 'none':
|
self.parser.parse_spot_rule(new_location)
|
||||||
self.parser.parse_spot_rule(new_location)
|
|
||||||
if new_location.never:
|
if new_location.never:
|
||||||
# We still need to fill the location even if ALR is off.
|
# We still need to fill the location even if ALR is off.
|
||||||
logger.debug('Unreachable location: %s', new_location.name)
|
logger.debug('Unreachable location: %s', new_location.name)
|
||||||
|
@ -308,8 +315,7 @@ class OOTWorld(World):
|
||||||
lname = '%s from %s' % (event, new_region.name)
|
lname = '%s from %s' % (event, new_region.name)
|
||||||
new_location = OOTLocation(self.player, lname, type='Event', parent=new_region)
|
new_location = OOTLocation(self.player, lname, type='Event', parent=new_region)
|
||||||
new_location.rule_string = rule
|
new_location.rule_string = rule
|
||||||
if self.world.logic_rules != 'none':
|
self.parser.parse_spot_rule(new_location)
|
||||||
self.parser.parse_spot_rule(new_location)
|
|
||||||
if new_location.never:
|
if new_location.never:
|
||||||
logger.debug('Dropping unreachable event: %s', new_location.name)
|
logger.debug('Dropping unreachable event: %s', new_location.name)
|
||||||
else:
|
else:
|
||||||
|
@ -433,7 +439,7 @@ class OOTWorld(World):
|
||||||
return item
|
return item
|
||||||
|
|
||||||
def create_regions(self): # create and link regions
|
def create_regions(self): # create and link regions
|
||||||
if self.logic_rules == 'glitchless':
|
if self.logic_rules == 'glitchless' or self.logic_rules == 'no_logic': # enables ER + NL
|
||||||
world_type = 'World'
|
world_type = 'World'
|
||||||
else:
|
else:
|
||||||
world_type = 'Glitched World'
|
world_type = 'Glitched World'
|
||||||
|
@ -503,6 +509,8 @@ class OOTWorld(World):
|
||||||
raise e
|
raise e
|
||||||
# Restore original state and delete assumed entrances
|
# Restore original state and delete assumed entrances
|
||||||
for entrance in self.get_shuffled_entrances():
|
for entrance in self.get_shuffled_entrances():
|
||||||
|
if entrance.connected_region is not None:
|
||||||
|
entrance.disconnect()
|
||||||
entrance.connect(self.world.get_region(entrance.vanilla_connected_region, self.player))
|
entrance.connect(self.world.get_region(entrance.vanilla_connected_region, self.player))
|
||||||
if entrance.assumed:
|
if entrance.assumed:
|
||||||
assumed_entrance = entrance.assumed
|
assumed_entrance = entrance.assumed
|
||||||
|
@ -580,7 +588,7 @@ class OOTWorld(World):
|
||||||
# only one exists
|
# only one exists
|
||||||
"Bottom of the Well Lens of Truth Chest", "Bottom of the Well MQ Lens of Truth Chest",
|
"Bottom of the Well Lens of Truth Chest", "Bottom of the Well MQ Lens of Truth Chest",
|
||||||
# only one exists
|
# only one exists
|
||||||
"Gerudo Training Grounds Maze Path Final Chest", "Gerudo Training Grounds MQ Ice Arrows Chest",
|
"Gerudo Training Ground Maze Path Final Chest", "Gerudo Training Ground MQ Ice Arrows Chest",
|
||||||
]
|
]
|
||||||
|
|
||||||
# Place/set rules for dungeon items
|
# Place/set rules for dungeon items
|
||||||
|
@ -616,32 +624,33 @@ class OOTWorld(World):
|
||||||
|
|
||||||
# Now fill items that can go into any dungeon. Retrieve the Gerudo Fortress keys from the pool if necessary
|
# Now fill items that can go into any dungeon. Retrieve the Gerudo Fortress keys from the pool if necessary
|
||||||
if self.shuffle_fortresskeys == 'any_dungeon':
|
if self.shuffle_fortresskeys == 'any_dungeon':
|
||||||
fortresskeys = filter(lambda item: item.player == self.player and item.type == 'FortressSmallKey',
|
fortresskeys = filter(lambda item: item.player == self.player and item.type == 'HideoutSmallKey',
|
||||||
self.world.itempool)
|
self.world.itempool)
|
||||||
itempools['any_dungeon'].extend(fortresskeys)
|
itempools['any_dungeon'].extend(fortresskeys)
|
||||||
if itempools['any_dungeon']:
|
if itempools['any_dungeon']:
|
||||||
for item in itempools['any_dungeon']:
|
for item in itempools['any_dungeon']:
|
||||||
self.world.itempool.remove(item)
|
self.world.itempool.remove(item)
|
||||||
itempools['any_dungeon'].sort(key=lambda item:
|
itempools['any_dungeon'].sort(key=lambda item:
|
||||||
{'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'FortressSmallKey': 1}.get(item.type, 0))
|
{'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'HideoutSmallKey': 1}.get(item.type, 0))
|
||||||
self.world.random.shuffle(any_dungeon_locations)
|
self.world.random.shuffle(any_dungeon_locations)
|
||||||
fill_restrictive(self.world, self.world.get_all_state(False), any_dungeon_locations,
|
fill_restrictive(self.world, self.world.get_all_state(False), any_dungeon_locations,
|
||||||
itempools['any_dungeon'], True, True)
|
itempools['any_dungeon'], True, True)
|
||||||
|
|
||||||
# If anything is overworld-only, fill into local non-dungeon locations
|
# If anything is overworld-only, fill into local non-dungeon locations
|
||||||
if self.shuffle_fortresskeys == 'overworld':
|
if self.shuffle_fortresskeys == 'overworld':
|
||||||
fortresskeys = filter(lambda item: item.player == self.player and item.type == 'FortressSmallKey',
|
fortresskeys = filter(lambda item: item.player == self.player and item.type == 'HideoutSmallKey',
|
||||||
self.world.itempool)
|
self.world.itempool)
|
||||||
itempools['overworld'].extend(fortresskeys)
|
itempools['overworld'].extend(fortresskeys)
|
||||||
if itempools['overworld']:
|
if itempools['overworld']:
|
||||||
for item in itempools['overworld']:
|
for item in itempools['overworld']:
|
||||||
self.world.itempool.remove(item)
|
self.world.itempool.remove(item)
|
||||||
itempools['overworld'].sort(key=lambda item:
|
itempools['overworld'].sort(key=lambda item:
|
||||||
{'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'FortressSmallKey': 1}.get(item.type, 0))
|
{'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'HideoutSmallKey': 1}.get(item.type, 0))
|
||||||
non_dungeon_locations = [loc for loc in self.get_locations() if
|
non_dungeon_locations = [loc for loc in self.get_locations() if
|
||||||
not loc.item and loc not in any_dungeon_locations
|
not loc.item and loc not in any_dungeon_locations and
|
||||||
and loc.type != 'Shop' and (
|
(loc.type != 'Shop' or loc.name in self.shop_prices) and
|
||||||
loc.type != 'Song' or self.shuffle_song_items != 'song')]
|
(loc.type != 'Song' or self.shuffle_song_items != 'song') and
|
||||||
|
(loc.name not in dungeon_song_locations or self.shuffle_song_items != 'dungeon')]
|
||||||
self.world.random.shuffle(non_dungeon_locations)
|
self.world.random.shuffle(non_dungeon_locations)
|
||||||
fill_restrictive(self.world, self.world.get_all_state(False), non_dungeon_locations,
|
fill_restrictive(self.world, self.world.get_all_state(False), non_dungeon_locations,
|
||||||
itempools['overworld'], True, True)
|
itempools['overworld'], True, True)
|
||||||
|
@ -840,7 +849,7 @@ class OOTWorld(World):
|
||||||
if loc.game == "Ocarina of Time" and loc.item.code and (not loc.locked or
|
if loc.game == "Ocarina of Time" and loc.item.code and (not loc.locked or
|
||||||
(loc.item.type == 'Song' or
|
(loc.item.type == 'Song' or
|
||||||
(loc.item.type == 'SmallKey' and world.worlds[loc.player].shuffle_smallkeys == 'any_dungeon') or
|
(loc.item.type == 'SmallKey' and world.worlds[loc.player].shuffle_smallkeys == 'any_dungeon') or
|
||||||
(loc.item.type == 'FortressSmallKey' and world.worlds[loc.player].shuffle_fortresskeys == 'any_dungeon') or
|
(loc.item.type == 'HideoutSmallKey' and world.worlds[loc.player].shuffle_fortresskeys == 'any_dungeon') or
|
||||||
(loc.item.type == 'BossKey' and world.worlds[loc.player].shuffle_bosskeys == 'any_dungeon') or
|
(loc.item.type == 'BossKey' and world.worlds[loc.player].shuffle_bosskeys == 'any_dungeon') or
|
||||||
(loc.item.type == 'GanonBossKey' and world.worlds[loc.player].shuffle_ganon_bosskey == 'any_dungeon'))):
|
(loc.item.type == 'GanonBossKey' and world.worlds[loc.player].shuffle_ganon_bosskey == 'any_dungeon'))):
|
||||||
if loc.player in barren_hint_players:
|
if loc.player in barren_hint_players:
|
||||||
|
@ -885,14 +894,29 @@ class OOTWorld(World):
|
||||||
if len(entrance) > 2:
|
if len(entrance) > 2:
|
||||||
hint_entrances.add(entrance[2][0])
|
hint_entrances.add(entrance[2][0])
|
||||||
|
|
||||||
|
# Get main hint entrance to region.
|
||||||
|
# If the region is directly adjacent to a hint-entrance, we return that one.
|
||||||
|
# If it's in a dungeon, scan all the entrances for all the regions in the dungeon.
|
||||||
|
# This should terminate on the first region anyway, but we scan everything to be safe.
|
||||||
|
# If it's one of the special cases, go one level deeper.
|
||||||
|
# Otherwise return None.
|
||||||
def get_entrance_to_region(region):
|
def get_entrance_to_region(region):
|
||||||
if region.name == 'Root':
|
special_case_regions = {
|
||||||
return None
|
"Beyond Door of Time",
|
||||||
|
"Kak Impas House Near Cow",
|
||||||
|
}
|
||||||
|
|
||||||
for entrance in region.entrances:
|
for entrance in region.entrances:
|
||||||
if entrance.name in hint_entrances:
|
if entrance.name in hint_entrances:
|
||||||
return entrance
|
return entrance
|
||||||
for entrance in region.entrances:
|
if region.dungeon is not None:
|
||||||
return get_entrance_to_region(entrance.parent_region)
|
for r in region.dungeon.regions:
|
||||||
|
for e in r.entrances:
|
||||||
|
if e.name in hint_entrances:
|
||||||
|
return e
|
||||||
|
if region.name in special_case_regions:
|
||||||
|
return get_entrance_to_region(region.entrances[0].parent_region)
|
||||||
|
return None
|
||||||
|
|
||||||
# Remove undesired items from start_inventory
|
# Remove undesired items from start_inventory
|
||||||
for item_name in self.remove_from_start_inventory:
|
for item_name in self.remove_from_start_inventory:
|
||||||
|
@ -907,6 +931,8 @@ class OOTWorld(World):
|
||||||
if self.shuffle_interior_entrances != 'off' or self.shuffle_dungeon_entrances or self.shuffle_grotto_entrances:
|
if self.shuffle_interior_entrances != 'off' or self.shuffle_dungeon_entrances or self.shuffle_grotto_entrances:
|
||||||
er_hint_data = {}
|
er_hint_data = {}
|
||||||
for region in self.regions:
|
for region in self.regions:
|
||||||
|
if not any(bool(loc.address) for loc in region.locations): # check if region has any non-event locations
|
||||||
|
continue
|
||||||
main_entrance = get_entrance_to_region(region)
|
main_entrance = get_entrance_to_region(region)
|
||||||
if main_entrance is not None and main_entrance.shuffled:
|
if main_entrance is not None and main_entrance.shuffled:
|
||||||
for location in region.locations:
|
for location in region.locations:
|
||||||
|
@ -955,7 +981,7 @@ class OOTWorld(World):
|
||||||
return False
|
return False
|
||||||
if item.type == 'SmallKey' and self.shuffle_smallkeys in ['dungeon', 'vanilla']:
|
if item.type == 'SmallKey' and self.shuffle_smallkeys in ['dungeon', 'vanilla']:
|
||||||
return False
|
return False
|
||||||
if item.type == 'FortressSmallKey' and self.shuffle_fortresskeys == 'vanilla':
|
if item.type == 'HideoutSmallKey' and self.shuffle_fortresskeys == 'vanilla':
|
||||||
return False
|
return False
|
||||||
if item.type == 'BossKey' and self.shuffle_bosskeys in ['dungeon', 'vanilla']:
|
if item.type == 'BossKey' and self.shuffle_bosskeys in ['dungeon', 'vanilla']:
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Lobby",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Lobby Left Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Lobby Right Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)",
|
||||||
|
"Gerudo Training Ground MQ Maze Path First Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Maze Path Second Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 1)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Fortress": "True",
|
||||||
|
"Gerudo Training Ground Left Side": "has_fire_source",
|
||||||
|
"Gerudo Training Ground Right Side": "Bow"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Right Side",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Dinolfos Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Underwater Silver Rupee Chest": "
|
||||||
|
(Hover_Boots or at('Gerudo Training Ground Central Maze Right', can_use(Longshot) or Bow)) and
|
||||||
|
has_fire_source and Iron_Boots and (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and
|
||||||
|
can_take_damage",
|
||||||
|
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room.
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Left Side",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ First Iron Knuckle Chest": "True"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Stalfos Room": "can_use(Longshot) or (logic_gtg_mq_with_hookshot and can_use(Hookshot))"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Stalfos Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Before Heavy Block Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Heavy Block Chest": "can_use(Silver_Gauntlets)",
|
||||||
|
"Blue Fire": "has_bottle"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Back Areas": "can_play(Song_of_Time) and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Back Areas",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Eye Statue Chest": "Bow",
|
||||||
|
"Gerudo Training Ground MQ Second Iron Knuckle Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Flame Circle Chest": "True"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Central Maze Right": "Megaton_Hammer",
|
||||||
|
"Gerudo Training Ground Right Side": "can_use(Longshot)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Central Maze Right",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Maze Right Central Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Maze Right Side Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Ice Arrows Chest": "
|
||||||
|
(Small_Key_Gerudo_Training_Ground, 3)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Right Side": "True"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,112 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Lobby",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||||
|
"Gerudo Training Ground Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||||
|
"Gerudo Training Ground Stalfos Chest": "can_jumpslash",
|
||||||
|
"Gerudo Training Ground Beamos Chest": "has_explosives and can_jumpslash",
|
||||||
|
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room.
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Heavy Block Room": "True",
|
||||||
|
"Gerudo Training Ground Lava Room": "
|
||||||
|
here(has_explosives and can_jumpslash)",
|
||||||
|
"Gerudo Training Ground Central Maze": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Central Maze",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Ground, 3)
|
||||||
|
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))",
|
||||||
|
"Gerudo Training Ground Maze Path First Chest": "(Small_Key_Gerudo_Training_Ground, 4)
|
||||||
|
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))",
|
||||||
|
"Gerudo Training Ground Maze Path Second Chest": "(Small_Key_Gerudo_Training_Ground, 6)
|
||||||
|
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))",
|
||||||
|
"Gerudo Training Ground Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 7)
|
||||||
|
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))",
|
||||||
|
"Gerudo Training Ground Maze Path Final Chest": "(Small_Key_Gerudo_Training_Ground, 9)
|
||||||
|
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Central Maze Right": "(Small_Key_Gerudo_Training_Ground, 9)
|
||||||
|
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Central Maze Right",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Maze Right Central Chest": "True",
|
||||||
|
"Gerudo Training Ground Maze Right Side Chest": "True",
|
||||||
|
"Gerudo Training Ground Freestanding Key": "True"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Lava Room": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Lava Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Underwater Silver Rupee Chest": "
|
||||||
|
can_use(Hookshot) and (can_play(Song_of_Time) or can_mega) and Iron_Boots"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Central Maze Right": "can_play(Song_of_Time) or is_child
|
||||||
|
or (can_use(Hookshot) and can_use(Hover_Boots) and can_shield and Bombs)",
|
||||||
|
"Gerudo Training Ground Hammer Room": "can_use(Hookshot)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Hammer Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Hammer Room Clear Chest": "True",
|
||||||
|
"Gerudo Training Ground Hammer Room Switch Chest": "can_use(Megaton_Hammer) or
|
||||||
|
can_live_dmg(0.5) or can_use(Nayrus_Love)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Eye Statue Lower": "can_use(Bow)",
|
||||||
|
"Gerudo Training Ground Lava Room": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Eye Statue Lower",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Eye Statue Chest": "can_use(Bow)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Hammer Room": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Eye Statue Upper",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Near Scarecrow Chest": "can_use(Bow)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Eye Statue Lower": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Heavy Block Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Before Heavy Block Chest": "True",
|
||||||
|
"Gerudo Training Ground Heavy Block First Chest": "can_use(Silver_Gauntlets)",
|
||||||
|
"Gerudo Training Ground Heavy Block Second Chest": "can_use(Silver_Gauntlets)",
|
||||||
|
"Gerudo Training Ground Heavy Block Third Chest": "can_use(Silver_Gauntlets)",
|
||||||
|
"Gerudo Training Ground Heavy Block Fourth Chest": "can_use(Silver_Gauntlets)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Eye Statue Upper": "can_use(Hookshot) or can_hover or
|
||||||
|
(is_adult and (Hover_Boots or (can_shield and Bombs)))"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -1,79 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Lobby",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Lobby Left Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Lobby Right Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)",
|
|
||||||
"Gerudo Training Grounds MQ Maze Path First Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Maze Path Second Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 1)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Fortress": "True",
|
|
||||||
"Gerudo Training Grounds Left Side": "has_fire_source",
|
|
||||||
"Gerudo Training Grounds Right Side": "Bow"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Right Side",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Dinolfos Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Underwater Silver Rupee Chest": "
|
|
||||||
(Hover_Boots or at('Gerudo Training Grounds Central Maze Right', can_use(Longshot) or Bow)) and
|
|
||||||
has_fire_source and Iron_Boots and (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and
|
|
||||||
can_take_damage",
|
|
||||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room.
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Left Side",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ First Iron Knuckle Chest": "True"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Stalfos Room": "can_use(Longshot) or (logic_gtg_mq_with_hookshot and can_use(Hookshot))"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Stalfos Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Before Heavy Block Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Heavy Block Chest": "can_use(Silver_Gauntlets)",
|
|
||||||
"Blue Fire": "has_bottle"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Back Areas": "can_play(Song_of_Time) and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Back Areas",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Eye Statue Chest": "Bow",
|
|
||||||
"Gerudo Training Grounds MQ Second Iron Knuckle Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Flame Circle Chest": "True"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Central Maze Right": "Megaton_Hammer",
|
|
||||||
"Gerudo Training Grounds Right Side": "can_use(Longshot)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Maze Right Central Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Maze Right Side Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Ice Arrows Chest": "
|
|
||||||
(Small_Key_Gerudo_Training_Grounds, 3)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Right Side": "True"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,112 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Lobby",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)",
|
|
||||||
"Gerudo Training Grounds Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)",
|
|
||||||
"Gerudo Training Grounds Stalfos Chest": "can_jumpslash",
|
|
||||||
"Gerudo Training Grounds Beamos Chest": "has_explosives and can_jumpslash",
|
|
||||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room.
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Heavy Block Room": "True",
|
|
||||||
"Gerudo Training Grounds Lava Room": "
|
|
||||||
here(has_explosives and can_jumpslash)",
|
|
||||||
"Gerudo Training Grounds Central Maze": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Central Maze",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Grounds, 3)
|
|
||||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))",
|
|
||||||
"Gerudo Training Grounds Maze Path First Chest": "(Small_Key_Gerudo_Training_Grounds, 4)
|
|
||||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))",
|
|
||||||
"Gerudo Training Grounds Maze Path Second Chest": "(Small_Key_Gerudo_Training_Grounds, 6)
|
|
||||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))",
|
|
||||||
"Gerudo Training Grounds Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 7)
|
|
||||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))",
|
|
||||||
"Gerudo Training Grounds Maze Path Final Chest": "(Small_Key_Gerudo_Training_Grounds, 9)
|
|
||||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Central Maze Right": "(Small_Key_Gerudo_Training_Grounds, 9)
|
|
||||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Maze Right Central Chest": "True",
|
|
||||||
"Gerudo Training Grounds Maze Right Side Chest": "True",
|
|
||||||
"Gerudo Training Grounds Freestanding Key": "True"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Lava Room": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Lava Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Underwater Silver Rupee Chest": "
|
|
||||||
can_use(Hookshot) and (can_play(Song_of_Time) or can_mega) and Iron_Boots"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Central Maze Right": "can_play(Song_of_Time) or is_child
|
|
||||||
or (can_use(Hookshot) and can_use(Hover_Boots) and can_shield and Bombs)",
|
|
||||||
"Gerudo Training Grounds Hammer Room": "can_use(Hookshot)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Hammer Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Hammer Room Clear Chest": "True",
|
|
||||||
"Gerudo Training Grounds Hammer Room Switch Chest": "can_use(Megaton_Hammer) or
|
|
||||||
can_live_dmg(0.5) or can_use(Nayrus_Love)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Lower": "can_use(Bow)",
|
|
||||||
"Gerudo Training Grounds Lava Room": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Eye Statue Lower",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Chest": "can_use(Bow)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Hammer Room": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Eye Statue Upper",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Near Scarecrow Chest": "can_use(Bow)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Lower": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Heavy Block Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Before Heavy Block Chest": "True",
|
|
||||||
"Gerudo Training Grounds Heavy Block First Chest": "can_use(Silver_Gauntlets)",
|
|
||||||
"Gerudo Training Grounds Heavy Block Second Chest": "can_use(Silver_Gauntlets)",
|
|
||||||
"Gerudo Training Grounds Heavy Block Third Chest": "can_use(Silver_Gauntlets)",
|
|
||||||
"Gerudo Training Grounds Heavy Block Fourth Chest": "can_use(Silver_Gauntlets)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Upper": "can_use(Hookshot) or can_hover or
|
|
||||||
(is_adult and (Hover_Boots or (can_shield and Bombs)))"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -324,18 +324,18 @@
|
||||||
Gerudo_Membership_Card and can_ride_epona and Bow and is_adult",
|
Gerudo_Membership_Card and can_ride_epona and Bow and is_adult",
|
||||||
"GF HBA 1500 Points": "
|
"GF HBA 1500 Points": "
|
||||||
Gerudo_Membership_Card and can_ride_epona and Bow and is_adult",
|
Gerudo_Membership_Card and can_ride_epona and Bow and is_adult",
|
||||||
"GF North F1 Carpenter": "is_adult or (is_child and can_child_damage)",
|
"Hideout Jail Guard (1 Torch)": "is_adult or (is_child and can_child_damage)",
|
||||||
"GF North F2 Carpenter": "is_adult or (is_child and can_child_damage)",
|
"Hideout Jail Guard (2 Torches)": "is_adult or (is_child and can_child_damage)",
|
||||||
"GF South F1 Carpenter": "is_adult or (is_child and can_child_damage)",
|
"Hideout Jail Guard (3 Torches)": "is_adult or (is_child and can_child_damage)",
|
||||||
"GF South F2 Carpenter": "is_adult or (is_child and can_child_damage)",
|
"Hideout Jail Guard (4 Torches)": "is_adult or (is_child and can_child_damage)",
|
||||||
"GF Gerudo Membership Card": "can_finish_GerudoFortress",
|
"Hideout Gerudo Membership Card": "can_finish_GerudoFortress",
|
||||||
"GF GS Archery Range": "can_use(Hookshot) and at_night",
|
"GF GS Archery Range": "can_use(Hookshot) and at_night",
|
||||||
"GF GS Top Floor": "at_night and is_adult"
|
"GF GS Top Floor": "at_night and is_adult"
|
||||||
},
|
},
|
||||||
"exits": {
|
"exits": {
|
||||||
"Haunted Wasteland": "is_child or 'GF Gate Open' or
|
"Haunted Wasteland": "is_child or 'GF Gate Open' or
|
||||||
((Progressive_Hookshot and (Hover_Boots or can_mega)) or (can_isg and Bombs) )",
|
((Progressive_Hookshot and (Hover_Boots or can_mega)) or (can_isg and Bombs) )",
|
||||||
"Gerudo Training Grounds Lobby": "True"
|
"Gerudo Training Ground Lobby": "True"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -707,7 +707,7 @@
|
||||||
},
|
},
|
||||||
"exits": {
|
"exits": {
|
||||||
"Graveyard Shield Grave": "True",
|
"Graveyard Shield Grave": "True",
|
||||||
"Graveyard Composers Grave": "can_play(Zeldas_Lullaby) or at('Graveyard Warp Pad Region', True)",
|
"Graveyard Royal Familys Tomb": "can_play(Zeldas_Lullaby) or at('Graveyard Warp Pad Region', True)",
|
||||||
"Graveyard Heart Piece Grave": "True",
|
"Graveyard Heart Piece Grave": "True",
|
||||||
"Graveyard Dampes Grave": "is_adult or at('Graveyard Warp Pad Region', True)",
|
"Graveyard Dampes Grave": "is_adult or at('Graveyard Warp Pad Region', True)",
|
||||||
"Graveyard Dampes House": "True",
|
"Graveyard Dampes House": "True",
|
||||||
|
@ -728,10 +728,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"region_name": "Graveyard Composers Grave",
|
"region_name": "Graveyard Royal Familys Tomb",
|
||||||
"locations": {
|
"locations": {
|
||||||
"Graveyard Composers Grave Chest": "has_fire_source or (is_child and Sticks and (can_live_dmg(0.75) or can_use(Nayrus_Love)))",
|
"Graveyard Royal Familys Tomb Chest": "has_fire_source or (is_child and Sticks and (can_live_dmg(0.75) or can_use(Nayrus_Love)))",
|
||||||
"Song from Composers Grave": "
|
"Song from Royal Familys Tomb": "
|
||||||
is_adult or
|
is_adult or
|
||||||
(Slingshot or Boomerang or Sticks or
|
(Slingshot or Boomerang or Sticks or
|
||||||
has_explosives or Kokiri_Sword)"
|
has_explosives or Kokiri_Sword)"
|
||||||
|
|
|
@ -83,8 +83,8 @@
|
||||||
"has_fire_source_with_torch": "has_fire_source or (is_child and Sticks)",
|
"has_fire_source_with_torch": "has_fire_source or (is_child and Sticks)",
|
||||||
|
|
||||||
# Gerudo Fortress
|
# Gerudo Fortress
|
||||||
"can_finish_GerudoFortress": "(gerudo_fortress == 'normal' and (Small_Key_Gerudo_Fortress, 4) and (is_adult or Kokiri_Sword or is_glitched) and (is_adult and (Bow or Hookshot or Hover_Boots) or Gerudo_Membership_Card or logic_gerudo_kitchen or is_glitched))
|
"can_finish_GerudoFortress": "(gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4) and (is_adult or Kokiri_Sword or is_glitched) and (is_adult and (Bow or Hookshot or Hover_Boots) or Gerudo_Membership_Card or logic_gerudo_kitchen or is_glitched))
|
||||||
or (gerudo_fortress == 'fast' and Small_Key_Gerudo_Fortress and (is_adult or Kokiri_Sword or is_glitched))
|
or (gerudo_fortress == 'fast' and Small_Key_Thieves_Hideout and (is_adult or Kokiri_Sword or is_glitched))
|
||||||
or (gerudo_fortress != 'normal' and gerudo_fortress != 'fast')",
|
or (gerudo_fortress != 'normal' and gerudo_fortress != 'fast')",
|
||||||
# Mirror shield does not count because it cannot reflect scrub attack.
|
# Mirror shield does not count because it cannot reflect scrub attack.
|
||||||
"has_shield": "(is_adult and Hylian_Shield) or (is_child and Deku_Shield)",
|
"has_shield": "(is_adult and Hylian_Shield) or (is_child and Deku_Shield)",
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
(can_use(Hookshot) or can_use(Boomerang)) and
|
(can_use(Hookshot) or can_use(Boomerang)) and
|
||||||
here(has_bombchus or
|
here(has_bombchus or
|
||||||
(Bombs and (can_play(Song_of_Time) or is_adult)) or
|
(Bombs and (can_play(Song_of_Time) or is_adult)) or
|
||||||
(can_use(Hammer) and (can_play(Song_of_Time) or logic_deku_mq_compass_gs)))"
|
(can_use(Megaton_Hammer) and (can_play(Song_of_Time) or logic_deku_mq_compass_gs)))"
|
||||||
},
|
},
|
||||||
"exits": {
|
"exits": {
|
||||||
"Deku Tree Lobby": "True"
|
"Deku Tree Lobby": "True"
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
(logic_dc_mq_eyes and Progressive_Strength_Upgrade and
|
(logic_dc_mq_eyes and Progressive_Strength_Upgrade and
|
||||||
(is_adult or logic_dc_mq_child_back) and
|
(is_adult or logic_dc_mq_child_back) and
|
||||||
(here(can_use(Sticks)) or can_use(Dins_Fire) or
|
(here(can_use(Sticks)) or can_use(Dins_Fire) or
|
||||||
(is_adult and (logic_dc_jump or Hammer or Hover_Boots or Hookshot))))"
|
(is_adult and (logic_dc_jump or Megaton_Hammer or Hover_Boots or Hookshot))))"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,8 +33,7 @@
|
||||||
is_adult and (Progressive_Strength_Upgrade or
|
is_adult and (Progressive_Strength_Upgrade or
|
||||||
(logic_forest_mq_block_puzzle and has_bombchus and can_use(Hookshot)))",
|
(logic_forest_mq_block_puzzle and has_bombchus and can_use(Hookshot)))",
|
||||||
"Forest Temple Outdoor Ledge": "
|
"Forest Temple Outdoor Ledge": "
|
||||||
(logic_forest_mq_hallway_switch_jumpslash and can_use(Hover_Boots)) or
|
(logic_forest_mq_hallway_switch_jumpslash and can_use(Hover_Boots))",
|
||||||
(logic_forest_mq_hallway_switch_hookshot and can_use(Hookshot))",
|
|
||||||
"Forest Temple Boss Region": "
|
"Forest Temple Boss Region": "
|
||||||
Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg"
|
Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg"
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Lobby",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Lobby Left Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Lobby Right Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)",
|
||||||
|
"Gerudo Training Ground MQ Maze Path First Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Maze Path Second Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 1)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Fortress": "True",
|
||||||
|
"Gerudo Training Ground Left Side": "here(has_fire_source)",
|
||||||
|
"Gerudo Training Ground Right Side": "here(can_use(Bow) or can_use(Slingshot))"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Right Side",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Dinolfos Chest": "is_adult",
|
||||||
|
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room.
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
# Still requires has_fire_source in the room
|
||||||
|
"Gerudo Training Ground Underwater": "
|
||||||
|
(Bow or can_use(Longshot)) and can_use(Hover_Boots)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Underwater",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Underwater Silver Rupee Chest": "
|
||||||
|
has_fire_source and can_use(Iron_Boots) and
|
||||||
|
(logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and can_take_damage"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Left Side",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ First Iron Knuckle Chest": "is_adult or Kokiri_Sword or has_explosives"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Stalfos Room": "
|
||||||
|
can_use(Longshot) or logic_gtg_mq_without_hookshot or
|
||||||
|
(logic_gtg_mq_with_hookshot and can_use(Hookshot))"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Stalfos Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
# Very difficult to fight the Stalfos and Stulltulas under the time limit as child.
|
||||||
|
"Gerudo Training Ground MQ Before Heavy Block Chest": "is_adult",
|
||||||
|
"Gerudo Training Ground MQ Heavy Block Chest": "can_use(Silver_Gauntlets)",
|
||||||
|
"Blue Fire": "has_bottle"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Back Areas": "
|
||||||
|
is_adult and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire and
|
||||||
|
(can_play(Song_of_Time) or (logic_gtg_fake_wall and can_use(Hover_Boots)))"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Back Areas",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Eye Statue Chest": "Bow",
|
||||||
|
"Gerudo Training Ground MQ Second Iron Knuckle Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Flame Circle Chest": "can_use(Hookshot) or Bow or has_explosives"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Central Maze Right": "Megaton_Hammer",
|
||||||
|
"Gerudo Training Ground Right Side": "can_use(Longshot)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Central Maze Right",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground MQ Maze Right Central Chest": "True",
|
||||||
|
"Gerudo Training Ground MQ Maze Right Side Chest": "True",
|
||||||
|
# The switch that opens the door to the Ice Arrows chest can be hit with a precise jumpslash.
|
||||||
|
"Gerudo Training Ground MQ Ice Arrows Chest": "
|
||||||
|
(Small_Key_Gerudo_Training_Ground, 3)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
# guarantees fire with torch
|
||||||
|
"Gerudo Training Ground Underwater": "
|
||||||
|
can_use(Longshot) or (can_use(Hookshot) and Bow)",
|
||||||
|
"Gerudo Training Ground Right Side": "can_use(Hookshot)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,120 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Lobby",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||||
|
"Gerudo Training Ground Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||||
|
"Gerudo Training Ground Stalfos Chest": "is_adult or Kokiri_Sword",
|
||||||
|
"Gerudo Training Ground Beamos Chest": "has_explosives and (is_adult or Kokiri_Sword)",
|
||||||
|
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room.
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Fortress": "True",
|
||||||
|
"Gerudo Training Ground Heavy Block Room": "
|
||||||
|
(is_adult or Kokiri_Sword) and
|
||||||
|
(can_use(Hookshot) or logic_gtg_without_hookshot)",
|
||||||
|
"Gerudo Training Ground Lava Room": "
|
||||||
|
here(has_explosives and (is_adult or Kokiri_Sword))",
|
||||||
|
"Gerudo Training Ground Central Maze": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Central Maze",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Ground, 3) and (logic_lens_gtg or can_use(Lens_of_Truth))",
|
||||||
|
"Gerudo Training Ground Maze Path First Chest": "(Small_Key_Gerudo_Training_Ground, 4)",
|
||||||
|
"Gerudo Training Ground Maze Path Second Chest": "(Small_Key_Gerudo_Training_Ground, 6)",
|
||||||
|
"Gerudo Training Ground Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 7)",
|
||||||
|
"Gerudo Training Ground Maze Path Final Chest": "(Small_Key_Gerudo_Training_Ground, 9)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Central Maze Right": "(Small_Key_Gerudo_Training_Ground, 9)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Central Maze Right",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Maze Right Central Chest": "True",
|
||||||
|
"Gerudo Training Ground Maze Right Side Chest": "True",
|
||||||
|
"Gerudo Training Ground Freestanding Key": "True"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Hammer Room": "can_use(Hookshot)",
|
||||||
|
"Gerudo Training Ground Lava Room": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Lava Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Underwater Silver Rupee Chest": "
|
||||||
|
can_use(Hookshot) and can_play(Song_of_Time) and Iron_Boots and
|
||||||
|
(logic_fewer_tunic_requirements or can_use(Zora_Tunic))"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Central Maze Right": "can_play(Song_of_Time) or is_child",
|
||||||
|
"Gerudo Training Ground Hammer Room": "
|
||||||
|
can_use(Longshot) or (can_use(Hookshot) and can_use(Hover_Boots))"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Hammer Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Hammer Room Clear Chest": "True",
|
||||||
|
"Gerudo Training Ground Hammer Room Switch Chest": "can_use(Megaton_Hammer)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Eye Statue Lower": "can_use(Megaton_Hammer) and Bow",
|
||||||
|
"Gerudo Training Ground Lava Room": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Eye Statue Lower",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Eye Statue Chest": "can_use(Bow)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Hammer Room": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Eye Statue Upper",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Near Scarecrow Chest": "can_use(Bow)"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Eye Statue Lower": "True"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Heavy Block Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Before Heavy Block Chest": "True"
|
||||||
|
},
|
||||||
|
"exits": {
|
||||||
|
"Gerudo Training Ground Eye Statue Upper": "
|
||||||
|
(logic_lens_gtg or can_use(Lens_of_Truth)) and
|
||||||
|
(can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))",
|
||||||
|
"Gerudo Training Ground Like Like Room": "
|
||||||
|
can_use(Silver_Gauntlets) and (logic_lens_gtg or can_use(Lens_of_Truth)) and
|
||||||
|
(can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"region_name": "Gerudo Training Ground Like Like Room",
|
||||||
|
"dungeon": "Gerudo Training Ground",
|
||||||
|
"locations": {
|
||||||
|
"Gerudo Training Ground Heavy Block First Chest": "True",
|
||||||
|
"Gerudo Training Ground Heavy Block Second Chest": "True",
|
||||||
|
"Gerudo Training Ground Heavy Block Third Chest": "True",
|
||||||
|
"Gerudo Training Ground Heavy Block Fourth Chest": "True"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -1,98 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Lobby",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Lobby Left Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Lobby Right Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)",
|
|
||||||
"Gerudo Training Grounds MQ Maze Path First Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Maze Path Second Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 1)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Fortress": "True",
|
|
||||||
"Gerudo Training Grounds Left Side": "here(has_fire_source)",
|
|
||||||
"Gerudo Training Grounds Right Side": "here(can_use(Bow) or can_use(Slingshot))"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Right Side",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Dinolfos Chest": "is_adult",
|
|
||||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room.
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
# Still requires has_fire_source in the room
|
|
||||||
"Gerudo Training Grounds Underwater": "
|
|
||||||
(Bow or can_use(Longshot)) and can_use(Hover_Boots)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Underwater",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Underwater Silver Rupee Chest": "
|
|
||||||
has_fire_source and can_use(Iron_Boots) and
|
|
||||||
(logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and can_take_damage"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Left Side",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ First Iron Knuckle Chest": "is_adult or Kokiri_Sword or has_explosives"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Stalfos Room": "
|
|
||||||
can_use(Longshot) or logic_gtg_mq_without_hookshot or
|
|
||||||
(logic_gtg_mq_with_hookshot and can_use(Hookshot))"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Stalfos Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
# Very difficult to fight the Stalfos and Stulltulas under the time limit as child.
|
|
||||||
"Gerudo Training Grounds MQ Before Heavy Block Chest": "is_adult",
|
|
||||||
"Gerudo Training Grounds MQ Heavy Block Chest": "can_use(Silver_Gauntlets)",
|
|
||||||
"Blue Fire": "has_bottle"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Back Areas": "
|
|
||||||
is_adult and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire and
|
|
||||||
(can_play(Song_of_Time) or (logic_gtg_fake_wall and can_use(Hover_Boots)))"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Back Areas",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Eye Statue Chest": "Bow",
|
|
||||||
"Gerudo Training Grounds MQ Second Iron Knuckle Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Flame Circle Chest": "can_use(Hookshot) or Bow or has_explosives"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Central Maze Right": "Megaton_Hammer",
|
|
||||||
"Gerudo Training Grounds Right Side": "can_use(Longshot)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds MQ Maze Right Central Chest": "True",
|
|
||||||
"Gerudo Training Grounds MQ Maze Right Side Chest": "True",
|
|
||||||
# The switch that opens the door to the Ice Arrows chest can be hit with a precise jumpslash.
|
|
||||||
"Gerudo Training Grounds MQ Ice Arrows Chest": "
|
|
||||||
(Small_Key_Gerudo_Training_Grounds, 3)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
# guarantees fire with torch
|
|
||||||
"Gerudo Training Grounds Underwater": "
|
|
||||||
can_use(Longshot) or (can_use(Hookshot) and Bow)",
|
|
||||||
"Gerudo Training Grounds Right Side": "can_use(Hookshot)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,120 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Lobby",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)",
|
|
||||||
"Gerudo Training Grounds Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)",
|
|
||||||
"Gerudo Training Grounds Stalfos Chest": "is_adult or Kokiri_Sword",
|
|
||||||
"Gerudo Training Grounds Beamos Chest": "has_explosives and (is_adult or Kokiri_Sword)",
|
|
||||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room.
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Fortress": "True",
|
|
||||||
"Gerudo Training Grounds Heavy Block Room": "
|
|
||||||
(is_adult or Kokiri_Sword) and
|
|
||||||
(can_use(Hookshot) or logic_gtg_without_hookshot)",
|
|
||||||
"Gerudo Training Grounds Lava Room": "
|
|
||||||
here(has_explosives and (is_adult or Kokiri_Sword))",
|
|
||||||
"Gerudo Training Grounds Central Maze": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Central Maze",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Grounds, 3) and (logic_lens_gtg or can_use(Lens_of_Truth))",
|
|
||||||
"Gerudo Training Grounds Maze Path First Chest": "(Small_Key_Gerudo_Training_Grounds, 4)",
|
|
||||||
"Gerudo Training Grounds Maze Path Second Chest": "(Small_Key_Gerudo_Training_Grounds, 6)",
|
|
||||||
"Gerudo Training Grounds Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 7)",
|
|
||||||
"Gerudo Training Grounds Maze Path Final Chest": "(Small_Key_Gerudo_Training_Grounds, 9)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Central Maze Right": "(Small_Key_Gerudo_Training_Grounds, 9)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Maze Right Central Chest": "True",
|
|
||||||
"Gerudo Training Grounds Maze Right Side Chest": "True",
|
|
||||||
"Gerudo Training Grounds Freestanding Key": "True"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Hammer Room": "can_use(Hookshot)",
|
|
||||||
"Gerudo Training Grounds Lava Room": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Lava Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Underwater Silver Rupee Chest": "
|
|
||||||
can_use(Hookshot) and can_play(Song_of_Time) and Iron_Boots and
|
|
||||||
(logic_fewer_tunic_requirements or can_use(Zora_Tunic))"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Central Maze Right": "can_play(Song_of_Time) or is_child",
|
|
||||||
"Gerudo Training Grounds Hammer Room": "
|
|
||||||
can_use(Longshot) or (can_use(Hookshot) and can_use(Hover_Boots))"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Hammer Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Hammer Room Clear Chest": "True",
|
|
||||||
"Gerudo Training Grounds Hammer Room Switch Chest": "can_use(Megaton_Hammer)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Lower": "can_use(Megaton_Hammer) and Bow",
|
|
||||||
"Gerudo Training Grounds Lava Room": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Eye Statue Lower",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Chest": "can_use(Bow)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Hammer Room": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Eye Statue Upper",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Near Scarecrow Chest": "can_use(Bow)"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Lower": "True"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Heavy Block Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Before Heavy Block Chest": "True"
|
|
||||||
},
|
|
||||||
"exits": {
|
|
||||||
"Gerudo Training Grounds Eye Statue Upper": "
|
|
||||||
(logic_lens_gtg or can_use(Lens_of_Truth)) and
|
|
||||||
(can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))",
|
|
||||||
"Gerudo Training Grounds Like Like Room": "
|
|
||||||
can_use(Silver_Gauntlets) and (logic_lens_gtg or can_use(Lens_of_Truth)) and
|
|
||||||
(can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"region_name": "Gerudo Training Grounds Like Like Room",
|
|
||||||
"dungeon": "Gerudo Training Grounds",
|
|
||||||
"locations": {
|
|
||||||
"Gerudo Training Grounds Heavy Block First Chest": "True",
|
|
||||||
"Gerudo Training Grounds Heavy Block Second Chest": "True",
|
|
||||||
"Gerudo Training Grounds Heavy Block Third Chest": "True",
|
|
||||||
"Gerudo Training Grounds Heavy Block Fourth Chest": "True"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -589,14 +589,14 @@
|
||||||
Gerudo_Membership_Card and can_ride_epona and Bow and at_day",
|
Gerudo_Membership_Card and can_ride_epona and Bow and at_day",
|
||||||
"GF HBA 1500 Points": "
|
"GF HBA 1500 Points": "
|
||||||
Gerudo_Membership_Card and can_ride_epona and Bow and at_day",
|
Gerudo_Membership_Card and can_ride_epona and Bow and at_day",
|
||||||
"GF North F1 Carpenter": "is_adult or Kokiri_Sword",
|
"Hideout Jail Guard (1 Torch)": "is_adult or Kokiri_Sword",
|
||||||
"GF North F2 Carpenter": "
|
"Hideout Jail Guard (2 Torches)": "is_adult or Kokiri_Sword",
|
||||||
|
"Hideout Jail Guard (3 Torches)": "
|
||||||
(is_adult or Kokiri_Sword) and
|
(is_adult or Kokiri_Sword) and
|
||||||
(Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot)
|
(Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot)
|
||||||
or can_use(Hover_Boots) or logic_gerudo_kitchen)",
|
or can_use(Hover_Boots) or logic_gerudo_kitchen)",
|
||||||
"GF South F1 Carpenter": "is_adult or Kokiri_Sword",
|
"Hideout Jail Guard (4 Torches)": "is_adult or Kokiri_Sword",
|
||||||
"GF South F2 Carpenter": "is_adult or Kokiri_Sword",
|
"Hideout Gerudo Membership Card": "can_finish_GerudoFortress",
|
||||||
"GF Gerudo Membership Card": "can_finish_GerudoFortress",
|
|
||||||
"GF GS Archery Range": "
|
"GF GS Archery Range": "
|
||||||
can_use(Hookshot) and Gerudo_Membership_Card and at_night",
|
can_use(Hookshot) and Gerudo_Membership_Card and at_night",
|
||||||
"GF GS Top Floor": "
|
"GF GS Top Floor": "
|
||||||
|
@ -607,7 +607,7 @@
|
||||||
"exits": {
|
"exits": {
|
||||||
"GV Fortress Side": "True",
|
"GV Fortress Side": "True",
|
||||||
"GF Outside Gate": "'GF Gate Open'",
|
"GF Outside Gate": "'GF Gate Open'",
|
||||||
"Gerudo Training Grounds Lobby": "Gerudo_Membership_Card and is_adult",
|
"Gerudo Training Ground Lobby": "Gerudo_Membership_Card and is_adult",
|
||||||
"GF Storms Grotto": "is_adult and can_open_storm_grotto" # Not there as child
|
"GF Storms Grotto": "is_adult and can_open_storm_grotto" # Not there as child
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1290,7 +1290,7 @@
|
||||||
},
|
},
|
||||||
"exits": {
|
"exits": {
|
||||||
"Graveyard Shield Grave": "is_adult or at_night",
|
"Graveyard Shield Grave": "is_adult or at_night",
|
||||||
"Graveyard Composers Grave": "can_play(Zeldas_Lullaby)",
|
"Graveyard Royal Familys Tomb": "can_play(Zeldas_Lullaby)",
|
||||||
"Graveyard Heart Piece Grave": "is_adult or at_night",
|
"Graveyard Heart Piece Grave": "is_adult or at_night",
|
||||||
"Graveyard Dampes Grave": "is_adult",
|
"Graveyard Dampes Grave": "is_adult",
|
||||||
"Graveyard Dampes House": "is_adult or at_dampe_time",
|
"Graveyard Dampes House": "is_adult or at_dampe_time",
|
||||||
|
@ -1321,12 +1321,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"region_name": "Graveyard Composers Grave",
|
"region_name": "Graveyard Royal Familys Tomb",
|
||||||
"pretty_name": "the Composers' Grave",
|
"pretty_name": "the Royal Family's Tomb",
|
||||||
"scene": "Graveyard Composers Grave",
|
"scene": "Graveyard Royal Familys Tomb",
|
||||||
"locations": {
|
"locations": {
|
||||||
"Graveyard Composers Grave Chest": "has_fire_source",
|
"Graveyard Royal Familys Tomb Chest": "has_fire_source",
|
||||||
"Song from Composers Grave": "
|
"Song from Royal Familys Tomb": "
|
||||||
is_adult or
|
is_adult or
|
||||||
(Slingshot or Boomerang or Sticks or
|
(Slingshot or Boomerang or Sticks or
|
||||||
has_explosives or Kokiri_Sword)"
|
has_explosives or Kokiri_Sword)"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"ADULT_INIT_ITEMS": "03481D40",
|
"ADULT_INIT_ITEMS": "03481D3C",
|
||||||
"ADULT_VALID_ITEMS": "03481D48",
|
"ADULT_VALID_ITEMS": "03481D44",
|
||||||
"AP_PLAYER_NAME": "03480834",
|
"AP_PLAYER_NAME": "03480834",
|
||||||
"AUDIO_THREAD_INFO": "03482FC0",
|
"AUDIO_THREAD_INFO": "03482F98",
|
||||||
"AUDIO_THREAD_INFO_MEM_SIZE": "03482FDC",
|
"AUDIO_THREAD_INFO_MEM_SIZE": "03482FB4",
|
||||||
"AUDIO_THREAD_INFO_MEM_START": "03482FD8",
|
"AUDIO_THREAD_INFO_MEM_START": "03482FB0",
|
||||||
"AUDIO_THREAD_MEM_START": "0348EF80",
|
"AUDIO_THREAD_MEM_START": "0348F310",
|
||||||
"BOMBCHUS_IN_LOGIC": "03480CBC",
|
"BOMBCHUS_IN_LOGIC": "03480CBC",
|
||||||
"CFG_A_BUTTON_COLOR": "03480854",
|
"CFG_A_BUTTON_COLOR": "03480854",
|
||||||
"CFG_A_NOTE_COLOR": "03480872",
|
"CFG_A_NOTE_COLOR": "03480872",
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
"CFG_B_BUTTON_COLOR": "0348085A",
|
"CFG_B_BUTTON_COLOR": "0348085A",
|
||||||
"CFG_C_BUTTON_COLOR": "03480860",
|
"CFG_C_BUTTON_COLOR": "03480860",
|
||||||
"CFG_C_NOTE_COLOR": "03480878",
|
"CFG_C_NOTE_COLOR": "03480878",
|
||||||
"CFG_DAMAGE_MULTIPLYER": "03482CB0",
|
"CFG_DAMAGE_MULTIPLYER": "03482C88",
|
||||||
"CFG_DISPLAY_DPAD": "0348088A",
|
"CFG_DISPLAY_DPAD": "0348088A",
|
||||||
"CFG_HEART_COLOR": "0348084E",
|
"CFG_HEART_COLOR": "0348084E",
|
||||||
"CFG_MAGIC_COLOR": "03480848",
|
"CFG_MAGIC_COLOR": "03480848",
|
||||||
|
@ -36,149 +36,151 @@
|
||||||
"CFG_RAINBOW_SWORD_OUTER_ENABLED": "0348088C",
|
"CFG_RAINBOW_SWORD_OUTER_ENABLED": "0348088C",
|
||||||
"CFG_SHOP_CURSOR_COLOR": "0348086C",
|
"CFG_SHOP_CURSOR_COLOR": "0348086C",
|
||||||
"CFG_TEXT_CURSOR_COLOR": "03480866",
|
"CFG_TEXT_CURSOR_COLOR": "03480866",
|
||||||
"CHAIN_HBA_REWARDS": "03483950",
|
"CHAIN_HBA_REWARDS": "03483928",
|
||||||
"CHEST_SIZE_MATCH_CONTENTS": "034826F0",
|
"CHEST_SIZE_MATCH_CONTENTS": "034826EC",
|
||||||
"COMPLETE_MASK_QUEST": "0348B201",
|
"COMPLETE_MASK_QUEST": "0348B585",
|
||||||
"COOP_CONTEXT": "03480020",
|
"COOP_CONTEXT": "03480020",
|
||||||
"COOP_VERSION": "03480020",
|
"COOP_VERSION": "03480020",
|
||||||
"COSMETIC_CONTEXT": "03480844",
|
"COSMETIC_CONTEXT": "03480844",
|
||||||
"COSMETIC_FORMAT_VERSION": "03480844",
|
"COSMETIC_FORMAT_VERSION": "03480844",
|
||||||
"CURRENT_GROTTO_ID": "03482E82",
|
"CURRENT_GROTTO_ID": "03482E5A",
|
||||||
"DEATH_LINK": "0348002A",
|
"DEATH_LINK": "0348002A",
|
||||||
"DEBUG_OFFSET": "034828A0",
|
"DEBUG_OFFSET": "03482878",
|
||||||
"DISABLE_TIMERS": "03480CDC",
|
"DISABLE_TIMERS": "03480CDC",
|
||||||
"DPAD_TEXTURE": "0348D780",
|
"DPAD_TEXTURE": "0348DB08",
|
||||||
"DUNGEONS_SHUFFLED": "03480CDE",
|
"DUNGEONS_SHUFFLED": "03480CDD",
|
||||||
"EXTENDED_OBJECT_TABLE": "03480C9C",
|
"EXTENDED_OBJECT_TABLE": "03480C9C",
|
||||||
"EXTERN_DAMAGE_MULTIPLYER": "03482CB1",
|
"EXTERN_DAMAGE_MULTIPLYER": "03482C89",
|
||||||
"FAST_BUNNY_HOOD_ENABLED": "03480CE0",
|
"FAST_BUNNY_HOOD_ENABLED": "03480CDF",
|
||||||
"FAST_CHESTS": "03480CD6",
|
"FAST_CHESTS": "03480CD6",
|
||||||
"FONT_TEXTURE": "0348C2B8",
|
"FONT_TEXTURE": "0348C640",
|
||||||
"FREE_SCARECROW_ENABLED": "03480CCC",
|
"FREE_SCARECROW_ENABLED": "03480CCC",
|
||||||
"GET_CHEST_OVERRIDE_COLOR_WRAPPER": "03482720",
|
"GANON_BOSS_KEY_CONDITION": "0348B550",
|
||||||
"GET_CHEST_OVERRIDE_SIZE_WRAPPER": "034826F4",
|
"GANON_BOSS_KEY_CONDITION_COUNT": "0348B54E",
|
||||||
"GET_ITEM_TRIGGERED": "0348140C",
|
"GET_CHEST_OVERRIDE_WRAPPER": "034826F0",
|
||||||
|
"GET_ITEM_TRIGGERED": "03481408",
|
||||||
"GOSSIP_HINT_CONDITION": "03480CC8",
|
"GOSSIP_HINT_CONDITION": "03480CC8",
|
||||||
"GROTTO_EXIT_LIST": "03482E40",
|
"GROTTO_EXIT_LIST": "03482E18",
|
||||||
"GROTTO_LOAD_TABLE": "03482DBC",
|
"GROTTO_LOAD_TABLE": "03482D94",
|
||||||
"INCOMING_ITEM": "03480028",
|
"INCOMING_ITEM": "03480028",
|
||||||
"INCOMING_PLAYER": "03480026",
|
"INCOMING_PLAYER": "03480026",
|
||||||
"INITIAL_SAVE_DATA": "0348089C",
|
"INITIAL_SAVE_DATA": "0348089C",
|
||||||
"JABU_ELEVATOR_ENABLE": "03480CD4",
|
"JABU_ELEVATOR_ENABLE": "03480CD4",
|
||||||
|
"KAKARIKO_WEATHER_FORECAST": "0348B5A4",
|
||||||
"LACS_CONDITION": "03480CC4",
|
"LACS_CONDITION": "03480CC4",
|
||||||
"LACS_CONDITION_COUNT": "03480CD2",
|
"LACS_CONDITION_COUNT": "03480CD2",
|
||||||
"MALON_GAVE_ICETRAP": "0348368C",
|
"MALON_GAVE_ICETRAP": "03483664",
|
||||||
"MALON_TEXT_ID": "03480CDB",
|
"MALON_TEXT_ID": "03480CDB",
|
||||||
"MAX_RUPEES": "0348B203",
|
"MAX_RUPEES": "0348B587",
|
||||||
"MOVED_ADULT_KING_ZORA": "03482FFC",
|
"MOVED_ADULT_KING_ZORA": "03482FD4",
|
||||||
"NO_ESCAPE_SEQUENCE": "0348B1CC",
|
"NO_ESCAPE_SEQUENCE": "0348B54C",
|
||||||
"NO_FOG_STATE": "03480CDD",
|
|
||||||
"OCARINAS_SHUFFLED": "03480CD5",
|
"OCARINAS_SHUFFLED": "03480CD5",
|
||||||
"OPEN_KAKARIKO": "0348B202",
|
"OPEN_KAKARIKO": "0348B586",
|
||||||
"OUTGOING_ITEM": "03480030",
|
"OUTGOING_ITEM": "03480030",
|
||||||
"OUTGOING_KEY": "0348002C",
|
"OUTGOING_KEY": "0348002C",
|
||||||
"OUTGOING_PLAYER": "03480032",
|
"OUTGOING_PLAYER": "03480032",
|
||||||
"OVERWORLD_SHUFFLED": "03480CDF",
|
"OVERWORLD_SHUFFLED": "03480CDE",
|
||||||
"PAYLOAD_END": "0348EF80",
|
"PAYLOAD_END": "0348F310",
|
||||||
"PAYLOAD_START": "03480000",
|
"PAYLOAD_START": "03480000",
|
||||||
"PLAYED_WARP_SONG": "03481210",
|
"PLAYED_WARP_SONG": "0348120C",
|
||||||
"PLAYER_ID": "03480024",
|
"PLAYER_ID": "03480024",
|
||||||
"PLAYER_NAMES": "03480034",
|
"PLAYER_NAMES": "03480034",
|
||||||
"PLAYER_NAME_ID": "03480025",
|
"PLAYER_NAME_ID": "03480025",
|
||||||
"RAINBOW_BRIDGE_CONDITION": "03480CC0",
|
"RAINBOW_BRIDGE_CONDITION": "03480CC0",
|
||||||
"RAINBOW_BRIDGE_COUNT": "03480CD0",
|
"RAINBOW_BRIDGE_COUNT": "03480CD0",
|
||||||
"RANDO_CONTEXT": "03480000",
|
"RANDO_CONTEXT": "03480000",
|
||||||
"SHUFFLE_BEANS": "03482D18",
|
"SHUFFLE_BEANS": "03482CF0",
|
||||||
"SHUFFLE_CARPET_SALESMAN": "03483A08",
|
"SHUFFLE_CARPET_SALESMAN": "034839E0",
|
||||||
"SHUFFLE_COWS": "03480CD7",
|
"SHUFFLE_COWS": "03480CD7",
|
||||||
"SHUFFLE_MEDIGORON": "03483A64",
|
"SHUFFLE_MEDIGORON": "03483A3C",
|
||||||
"SONGS_AS_ITEMS": "03480CD8",
|
"SONGS_AS_ITEMS": "03480CD8",
|
||||||
"SOS_ITEM_GIVEN": "034814D8",
|
"SOS_ITEM_GIVEN": "034814D4",
|
||||||
"SPEED_MULTIPLIER": "03482760",
|
"SPEED_MULTIPLIER": "03482738",
|
||||||
"START_TWINROVA_FIGHT": "0348307C",
|
"START_TWINROVA_FIGHT": "03483054",
|
||||||
"TIME_TRAVEL_SAVED_EQUIPS": "03481A64",
|
"TIME_TRAVEL_SAVED_EQUIPS": "03481A60",
|
||||||
"TRIFORCE_ICON_TEXTURE": "0348DF80",
|
"TRIFORCE_ICON_TEXTURE": "0348E308",
|
||||||
"TWINROVA_ACTION_TIMER": "03483080",
|
"TWINROVA_ACTION_TIMER": "03483058",
|
||||||
"WINDMILL_SONG_ID": "03480CD9",
|
"WINDMILL_SONG_ID": "03480CD9",
|
||||||
"WINDMILL_TEXT_ID": "03480CDA",
|
"WINDMILL_TEXT_ID": "03480CDA",
|
||||||
"a_button": "0348B190",
|
"a_button": "0348B510",
|
||||||
"a_note_b": "0348B17C",
|
"a_note_b": "0348B4FC",
|
||||||
"a_note_font_glow_base": "0348B164",
|
"a_note_font_glow_base": "0348B4E4",
|
||||||
"a_note_font_glow_max": "0348B160",
|
"a_note_font_glow_max": "0348B4E0",
|
||||||
"a_note_g": "0348B180",
|
"a_note_g": "0348B500",
|
||||||
"a_note_glow_base": "0348B16C",
|
"a_note_glow_base": "0348B4EC",
|
||||||
"a_note_glow_max": "0348B168",
|
"a_note_glow_max": "0348B4E8",
|
||||||
"a_note_r": "0348B184",
|
"a_note_r": "0348B504",
|
||||||
"active_item_action_id": "0348B1E4",
|
"active_item_action_id": "0348B568",
|
||||||
"active_item_fast_chest": "0348B1D4",
|
"active_item_fast_chest": "0348B558",
|
||||||
"active_item_graphic_id": "0348B1D8",
|
"active_item_graphic_id": "0348B55C",
|
||||||
"active_item_object_id": "0348B1DC",
|
"active_item_object_id": "0348B560",
|
||||||
"active_item_row": "0348B1E8",
|
"active_item_row": "0348B56C",
|
||||||
"active_item_text_id": "0348B1E0",
|
"active_item_text_id": "0348B564",
|
||||||
"active_override": "0348B1F0",
|
"active_override": "0348B574",
|
||||||
"active_override_is_outgoing": "0348B1EC",
|
"active_override_is_outgoing": "0348B570",
|
||||||
"b_button": "0348B18C",
|
"b_button": "0348B50C",
|
||||||
"beating_dd": "0348B198",
|
"beating_dd": "0348B518",
|
||||||
"beating_no_dd": "0348B1A0",
|
"beating_no_dd": "0348B520",
|
||||||
"c_button": "0348B188",
|
"c_button": "0348B508",
|
||||||
"c_note_b": "0348B170",
|
"c_note_b": "0348B4F0",
|
||||||
"c_note_font_glow_base": "0348B154",
|
"c_note_font_glow_base": "0348B4D4",
|
||||||
"c_note_font_glow_max": "0348B150",
|
"c_note_font_glow_max": "0348B4D0",
|
||||||
"c_note_g": "0348B174",
|
"c_note_g": "0348B4F4",
|
||||||
"c_note_glow_base": "0348B15C",
|
"c_note_glow_base": "0348B4DC",
|
||||||
"c_note_glow_max": "0348B158",
|
"c_note_glow_max": "0348B4D8",
|
||||||
"c_note_r": "0348B178",
|
"c_note_r": "0348B4F8",
|
||||||
"cfg_dungeon_info_enable": "0348B11C",
|
"cfg_dungeon_info_enable": "0348B49C",
|
||||||
"cfg_dungeon_info_mq_enable": "0348B1C0",
|
"cfg_dungeon_info_mq_enable": "0348B540",
|
||||||
"cfg_dungeon_info_mq_need_map": "0348B1BC",
|
"cfg_dungeon_info_mq_need_map": "0348B53C",
|
||||||
"cfg_dungeon_info_reward_enable": "0348B118",
|
"cfg_dungeon_info_reward_enable": "0348B498",
|
||||||
"cfg_dungeon_info_reward_need_altar": "0348B1B4",
|
"cfg_dungeon_info_reward_need_altar": "0348B534",
|
||||||
"cfg_dungeon_info_reward_need_compass": "0348B1B8",
|
"cfg_dungeon_info_reward_need_compass": "0348B538",
|
||||||
"cfg_dungeon_is_mq": "0348B220",
|
"cfg_dungeon_is_mq": "0348B5A8",
|
||||||
"cfg_dungeon_rewards": "03489F14",
|
"cfg_dungeon_rewards": "0348A254",
|
||||||
"cfg_file_select_hash": "0348B1C8",
|
"cfg_file_select_hash": "0348B548",
|
||||||
"cfg_item_overrides": "0348B274",
|
"cfg_item_overrides": "0348B5FC",
|
||||||
"defaultDDHeart": "0348B1A4",
|
"defaultDDHeart": "0348B524",
|
||||||
"defaultHeart": "0348B1AC",
|
"defaultHeart": "0348B52C",
|
||||||
"dpad_sprite": "0348A088",
|
"dpad_sprite": "0348A408",
|
||||||
"dummy_actor": "0348B1F8",
|
"dummy_actor": "0348B57C",
|
||||||
"dungeon_count": "0348B120",
|
"dungeon_count": "0348B4A0",
|
||||||
"dungeons": "03489F38",
|
"dungeons": "0348A278",
|
||||||
"empty_dlist": "0348B138",
|
"empty_dlist": "0348B4B8",
|
||||||
"extern_ctxt": "03489FD4",
|
"extern_ctxt": "0348A314",
|
||||||
"font_sprite": "0348A098",
|
"font_sprite": "0348A418",
|
||||||
"freecam_modes": "03489C90",
|
"freecam_modes": "03489FD0",
|
||||||
"hash_sprites": "0348B12C",
|
"hash_sprites": "0348B4AC",
|
||||||
"hash_symbols": "03489FE8",
|
"hash_symbols": "0348A328",
|
||||||
"heap_next": "0348B21C",
|
"heap_next": "0348B5A0",
|
||||||
"heart_sprite": "0348A028",
|
"heart_sprite": "0348A3A8",
|
||||||
"icon_sprites": "03489E54",
|
"icon_sprites": "0348A194",
|
||||||
"item_digit_sprite": "0348A048",
|
"item_digit_sprite": "0348A3C8",
|
||||||
"item_overrides_count": "0348B1FC",
|
"item_overrides_count": "0348B580",
|
||||||
"item_table": "0348A110",
|
"item_table": "0348A490",
|
||||||
"items_sprite": "0348A0B8",
|
"items_sprite": "0348A438",
|
||||||
"key_rupee_clock_sprite": "0348A058",
|
"key_rupee_clock_sprite": "0348A3D8",
|
||||||
"last_fog_distance": "0348B124",
|
"last_fog_distance": "0348B4A4",
|
||||||
"linkhead_skull_sprite": "0348A038",
|
"linkhead_skull_sprite": "0348A3B8",
|
||||||
"medal_colors": "03489F24",
|
"medal_colors": "0348A264",
|
||||||
"medals_sprite": "0348A0C8",
|
"medals_sprite": "0348A448",
|
||||||
"normal_dd": "0348B194",
|
"normal_dd": "0348B514",
|
||||||
"normal_no_dd": "0348B19C",
|
"normal_no_dd": "0348B51C",
|
||||||
"object_slots": "0348C274",
|
"num_to_bits": "0348A368",
|
||||||
"pending_freezes": "0348B200",
|
"object_slots": "0348C5FC",
|
||||||
"pending_item_queue": "0348B25C",
|
"pending_freezes": "0348B584",
|
||||||
"quest_items_sprite": "0348A0A8",
|
"pending_item_queue": "0348B5E4",
|
||||||
"rupee_colors": "03489E60",
|
"quest_items_sprite": "0348A428",
|
||||||
"satisified_pending_frames": "0348B1D0",
|
"rupee_colors": "0348A1A0",
|
||||||
"scene_fog_distance": "0348B128",
|
"satisified_pending_frames": "0348B554",
|
||||||
"setup_db": "0348A0E8",
|
"scene_fog_distance": "0348B4A8",
|
||||||
"song_note_sprite": "0348A068",
|
"setup_db": "0348A468",
|
||||||
"stones_sprite": "0348A0D8",
|
"song_note_sprite": "0348A3E8",
|
||||||
"text_cursor_border_base": "0348B144",
|
"stones_sprite": "0348A458",
|
||||||
"text_cursor_border_max": "0348B140",
|
"text_cursor_border_base": "0348B4C4",
|
||||||
"text_cursor_inner_base": "0348B14C",
|
"text_cursor_border_max": "0348B4C0",
|
||||||
"text_cursor_inner_max": "0348B148",
|
"text_cursor_inner_base": "0348B4CC",
|
||||||
"triforce_hunt_enabled": "0348B210",
|
"text_cursor_inner_max": "0348B4C8",
|
||||||
"triforce_pieces_requied": "0348B1B2",
|
"triforce_hunt_enabled": "0348B594",
|
||||||
"triforce_sprite": "0348A078"
|
"triforce_pieces_requied": "0348B532",
|
||||||
|
"triforce_sprite": "0348A3F8"
|
||||||
}
|
}
|
Loading…
Reference in New Issue