diff --git a/ootrando_overworldmap_hamsda.zip b/ootrando_overworldmap_hamsda.zip index 56b821ea..0ffa1d80 100644 Binary files a/ootrando_overworldmap_hamsda.zip and b/ootrando_overworldmap_hamsda.zip differ diff --git a/ootrando_overworldmap_hamsda/README.md b/ootrando_overworldmap_hamsda/README.md index b45e553b..c7414057 100644 --- a/ootrando_overworldmap_hamsda/README.md +++ b/ootrando_overworldmap_hamsda/README.md @@ -260,8 +260,6 @@ The entrance randomizer variants are very different from the regular map tracker - `Entrances`: randomized or otherwise important grottos, houses, and dungeons - `Connectors`: connections between different overworld areas -There are two variants, one for keysanity and one without, but none of the keys are actually used for logic (yet). - All `Entrances` and `Connectors` have a capture spot, where you can mark what is at that location. Later you can see what led where by simply hovering over the locations with your mouse. If the location is useless, just mark off the icon to clean up the map. Some important locations should not be cleared, because they might be relevant to logic as pathways: - Links House @@ -271,7 +269,9 @@ All `Entrances` and `Connectors` have a capture spot, where you can mark what is - Potion Shop Front/Back - Spirit Temple -I made a [quick explanation](https://www.twitch.tv/videos/429980574) on how to use the ER variant (slightly outdated but the general principle still is the same). +There are two variants, one for keysanity and one without. The keysanity variant uses the keys you mark for logic, while the other variant just assumes you have all keys at all times. + +I made a [quick explanation](https://youtu.be/4l8gDPkovAc) on how to use the ER variant. Excuse the poor sounds quality, I don't have a great microphone. ### Settings (Entrance Randomizer only) diff --git a/ootrando_overworldmap_hamsda/changelog.md b/ootrando_overworldmap_hamsda/changelog.md index 3c890b6c..f744da1f 100644 --- a/ootrando_overworldmap_hamsda/changelog.md +++ b/ootrando_overworldmap_hamsda/changelog.md @@ -1,5 +1,42 @@ # Changelog +## 3.3.0.0 + +- fixed child scarecrow showing w/ scarecrow marked +- changed non ER assumption about tunics from shops +- fixed Gohma requires nuts w/o sling +- added all 12 dungeons to ER +- changed logic based on [this PR](https://github.com/TestRunnerSRL/OoT-Randomizer/pull/1128) +- added sequence breaks for new logic tricks: + - BotW MQ jump over the pits + - DC MQ light the eyes w/ str + - DC MQ back areas as child w/o explo + - Deku basement web w/ bow + - Deku MQ compass GS w/ hammer + - Deku MQ roll under the spiked log + - Fire MQ GS above flame maze w/ long + - Fire MQ upper maze w/ hovers + - Fire MQ upper maze w/ nothing + - Fire Trial MQ w/ hook + - Forest first GS w/ difficult weapons + - Forest MQ switch w/ js + - Forest east GS w/ rang + - IC MQ red ice GS w/o SoT + - Jabu near boss GS as adult + - Jabu scrub as adult + - Kak rooftop GS w/ hovers + - LW bridge as adult w/ nothing + - Shadow MQ invisible blades w/o SoT + - Spirit MQ sun block room as child w/o SoT + - DMT lower GS w/ hovers + - visible one-way collisions + - Water central GS w/ FW + - Water dragon statue as child + - Water falling platform GS w/ rang + - Water MQ central pillar w/ FA + - Water MQ north basement GS w/o SK +- changed a few sometimes hinted overworld checks to have captures + ## 3.2.2.0 - fixed Sheik at Colossus not showing in ER diff --git a/ootrando_overworldmap_hamsda/images/entrance_dungeon_ganon.png b/ootrando_overworldmap_hamsda/images/entrance_dungeon_ganon.png new file mode 100644 index 00000000..331ce0c8 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_dungeon_ganon.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_biggoron_bolero.png b/ootrando_overworldmap_hamsda/images/logic_biggoron_bolero.png new file mode 100644 index 00000000..b80ce413 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_biggoron_bolero.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_botw_mq_pits.png b/ootrando_overworldmap_hamsda/images/logic_botw_mq_pits.png new file mode 100644 index 00000000..b136cf72 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_botw_mq_pits.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_child_dampe_race_poh.png b/ootrando_overworldmap_hamsda/images/logic_child_dampe_race_poh.png new file mode 100644 index 00000000..16aa12f8 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_child_dampe_race_poh.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_dc_mq_child_back.png b/ootrando_overworldmap_hamsda/images/logic_dc_mq_child_back.png new file mode 100644 index 00000000..425e1b7c Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_dc_mq_child_back.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_dc_mq_eyes.png b/ootrando_overworldmap_hamsda/images/logic_dc_mq_eyes.png new file mode 100644 index 00000000..5ec0336e Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_dc_mq_eyes.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_deku_b1_webs_with_bow.png b/ootrando_overworldmap_hamsda/images/logic_deku_b1_webs_with_bow.png new file mode 100644 index 00000000..f19fe0a4 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_deku_b1_webs_with_bow.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_deku_mq_compass_gs.png b/ootrando_overworldmap_hamsda/images/logic_deku_mq_compass_gs.png new file mode 100644 index 00000000..eefb24ad Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_deku_mq_compass_gs.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_deku_mq_log.png b/ootrando_overworldmap_hamsda/images/logic_deku_mq_log.png new file mode 100644 index 00000000..770779dd Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_deku_mq_log.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_fire_mq_above_maze_gs.png b/ootrando_overworldmap_hamsda/images/logic_fire_mq_above_maze_gs.png new file mode 100644 index 00000000..bcfb4071 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_fire_mq_above_maze_gs.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_fire_mq_blocked_chest.png b/ootrando_overworldmap_hamsda/images/logic_fire_mq_blocked_chest.png new file mode 100644 index 00000000..5578be94 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_fire_mq_blocked_chest.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_fire_mq_bombable_chest.png b/ootrando_overworldmap_hamsda/images/logic_fire_mq_bombable_chest.png deleted file mode 100644 index e1cd7181..00000000 Binary files a/ootrando_overworldmap_hamsda/images/logic_fire_mq_bombable_chest.png and /dev/null differ diff --git a/ootrando_overworldmap_hamsda/images/logic_fire_mq_maze_hovers.png b/ootrando_overworldmap_hamsda/images/logic_fire_mq_maze_hovers.png new file mode 100644 index 00000000..934af731 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_fire_mq_maze_hovers.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_fire_mq_maze_jump.png b/ootrando_overworldmap_hamsda/images/logic_fire_mq_maze_jump.png new file mode 100644 index 00000000..447f202c Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_fire_mq_maze_jump.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_fire_trial_mq.png b/ootrando_overworldmap_hamsda/images/logic_fire_trial_mq.png new file mode 100644 index 00000000..40019d10 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_fire_trial_mq.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_forest_door_frame.png b/ootrando_overworldmap_hamsda/images/logic_forest_door_frame.png new file mode 100644 index 00000000..bd7c15bd Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_forest_door_frame.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_forest_first_gs.png b/ootrando_overworldmap_hamsda/images/logic_forest_first_gs.png new file mode 100644 index 00000000..52a6e7a2 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_forest_first_gs.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_forest_mq_hallway_switch.png b/ootrando_overworldmap_hamsda/images/logic_forest_mq_hallway_switch_hookshot.png similarity index 100% rename from ootrando_overworldmap_hamsda/images/logic_forest_mq_hallway_switch.png rename to ootrando_overworldmap_hamsda/images/logic_forest_mq_hallway_switch_hookshot.png diff --git a/ootrando_overworldmap_hamsda/images/logic_forest_mq_hallway_switch_jumpslash.png b/ootrando_overworldmap_hamsda/images/logic_forest_mq_hallway_switch_jumpslash.png new file mode 100644 index 00000000..5f907a95 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_forest_mq_hallway_switch_jumpslash.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_forest_outdoor_east_gs.png b/ootrando_overworldmap_hamsda/images/logic_forest_outdoor_east_gs.png new file mode 100644 index 00000000..52c97472 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_forest_outdoor_east_gs.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_forest_scarecrow.png b/ootrando_overworldmap_hamsda/images/logic_forest_scarecrow.png deleted file mode 100644 index 8b4ee3a0..00000000 Binary files a/ootrando_overworldmap_hamsda/images/logic_forest_scarecrow.png and /dev/null differ diff --git a/ootrando_overworldmap_hamsda/images/logic_ice_mq_red_ice_gs.png b/ootrando_overworldmap_hamsda/images/logic_ice_mq_red_ice_gs.png new file mode 100644 index 00000000..9e057ad5 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_ice_mq_red_ice_gs.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_jabu_boss_gs_adult.png b/ootrando_overworldmap_hamsda/images/logic_jabu_boss_gs_adult.png new file mode 100644 index 00000000..8b41123e Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_jabu_boss_gs_adult.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_jabu_scrub_jump_dive.png b/ootrando_overworldmap_hamsda/images/logic_jabu_scrub_jump_dive.png new file mode 100644 index 00000000..f7588cd9 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_jabu_scrub_jump_dive.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_kakariko_rooftop_gs.png b/ootrando_overworldmap_hamsda/images/logic_kakariko_rooftop_gs.png new file mode 100644 index 00000000..76b50ccd Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_kakariko_rooftop_gs.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_lost_woods_bridge.png b/ootrando_overworldmap_hamsda/images/logic_lost_woods_bridge.png new file mode 100644 index 00000000..644cdc24 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_lost_woods_bridge.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_shadow_mq_invisible_blades.png b/ootrando_overworldmap_hamsda/images/logic_shadow_mq_invisible_blades.png new file mode 100644 index 00000000..b2892c93 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_shadow_mq_invisible_blades.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_spirit_mq_sun_block_sot.png b/ootrando_overworldmap_hamsda/images/logic_spirit_mq_sun_block_sot.png new file mode 100644 index 00000000..e7145344 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_spirit_mq_sun_block_sot.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_trail_gs_lower_hovers.png b/ootrando_overworldmap_hamsda/images/logic_trail_gs_lower_hovers.png new file mode 100644 index 00000000..efcf2f72 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_trail_gs_lower_hovers.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_visible_collisions.png b/ootrando_overworldmap_hamsda/images/logic_visible_collisions.png new file mode 100644 index 00000000..44837a2e Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_visible_collisions.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_water_central_gs_fw.png b/ootrando_overworldmap_hamsda/images/logic_water_central_gs_fw.png new file mode 100644 index 00000000..ae3fecf3 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_water_central_gs_fw.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_water_dragon_child.png b/ootrando_overworldmap_hamsda/images/logic_water_dragon_child.png new file mode 100644 index 00000000..4dc362dc Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_water_dragon_child.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_water_falling_platform_gs_boomerang.png b/ootrando_overworldmap_hamsda/images/logic_water_falling_platform_gs_boomerang.png new file mode 100644 index 00000000..7e0486b1 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_water_falling_platform_gs_boomerang.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_water_mq_central_pillar.png b/ootrando_overworldmap_hamsda/images/logic_water_mq_central_pillar.png new file mode 100644 index 00000000..6cf73fe3 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_water_mq_central_pillar.png differ diff --git a/ootrando_overworldmap_hamsda/images/logic_water_mq_locked_gs.png b/ootrando_overworldmap_hamsda/images/logic_water_mq_locked_gs.png new file mode 100644 index 00000000..8fe0003d Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/logic_water_mq_locked_gs.png differ diff --git a/ootrando_overworldmap_hamsda/images/overworld_entrance.png b/ootrando_overworldmap_hamsda/images/map_entrance.png similarity index 76% rename from ootrando_overworldmap_hamsda/images/overworld_entrance.png rename to ootrando_overworldmap_hamsda/images/map_entrance.png index d3f6bf6a..5a3322bd 100644 Binary files a/ootrando_overworldmap_hamsda/images/overworld_entrance.png and b/ootrando_overworldmap_hamsda/images/map_entrance.png differ diff --git a/ootrando_overworldmap_hamsda/images/overworld_spawns.png b/ootrando_overworldmap_hamsda/images/map_spawns.png similarity index 91% rename from ootrando_overworldmap_hamsda/images/overworld_spawns.png rename to ootrando_overworldmap_hamsda/images/map_spawns.png index 938e4ea0..3f904d2c 100644 Binary files a/ootrando_overworldmap_hamsda/images/overworld_spawns.png and b/ootrando_overworldmap_hamsda/images/map_spawns.png differ diff --git a/ootrando_overworldmap_hamsda/items/tricks.json b/ootrando_overworldmap_hamsda/items/tricks.json index 1331d9a5..f7cc4cac 100644 --- a/ootrando_overworldmap_hamsda/items/tricks.json +++ b/ootrando_overworldmap_hamsda/items/tricks.json @@ -13,6 +13,13 @@ "img": "images/logic_grottos_without_agony.png", "codes": "logic_grottos_without_agony" }, + { + "name": "Pass Through Visible One-Way Collisions", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_visible_collisions.png", + "codes": "logic_visible_collisions" + }, { "name": "Child Deadhand without Kokiri Sword", "type": "toggle", @@ -20,6 +27,13 @@ "img": "images/logic_child_deadhand.png", "codes": "logic_child_deadhand" }, + { + "name": "Second Dampe Race as Child", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_child_dampe_race_poh.png", + "codes": "logic_child_dampe_race_poh" + }, { "name": "Man on Roof without Hookshot", "type": "toggle", @@ -62,6 +76,20 @@ "img": "images/logic_deku_basement_gs.png", "codes": "logic_deku_basement_gs" }, + { + "name": "Deku Tree Basement Web to Gohma with Bow", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_deku_b1_webs_with_bow.png", + "codes": "logic_deku_b1_webs_with_bow" + }, + { + "name": "Deku Tree MQ Roll Under the Spiked Log", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_deku_mq_log.png", + "codes": "logic_deku_mq_log" + }, { "name": "Hammer Rusted Switches Through Walls", "type": "toggle", @@ -76,6 +104,13 @@ "img": "images/logic_botw_basement.png", "codes": "logic_botw_basement" }, + { + "name": "Bottom of the Well MQ Jump Over the Pits", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_botw_mq_pits.png", + "codes": "logic_botw_mq_pits" + }, { "name": "Skip Forest Temple MQ Block Puzzle with Bombchu", "type": "toggle", @@ -111,6 +146,13 @@ "img": "images/logic_zora_with_cucco.png", "codes": "logic_zora_with_cucco" }, + { + "name": "Water Temple MQ Central Pillar with Fire Arrows", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_water_mq_central_pillar.png", + "codes": "logic_water_mq_central_pillar" + }, { "name": "Gerudo Training Grounds MQ Left Side Silver Rupees with Hookshot", "type": "toggle", @@ -125,19 +167,40 @@ "img": "images/logic_forest_vines.png", "codes": "logic_forest_vines" }, + { + "name": "Forest Temple East Courtyard GS with Boomerang", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_forest_outdoor_east_gs.png", + "codes": "logic_forest_outdoor_east_gs" + }, + { + "name": "Forest Temple First Room GS with Difficult-to-Use Weapons", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_forest_first_gs.png", + "codes": "logic_forest_first_gs" + }, { "name": "Swim Through Forest Temple MQ Well with Hookshot", "type": "toggle", - "initial_active_state": true, + "initial_active_state": false, "img": "images/logic_forest_well_swim.png", "codes": "logic_forest_well_swim" }, { - "name": "Reach Forest Temple MQ Twisted Hallway Switch with Hookshot", + "name": "Forest Temple MQ Twisted Hallway Switch with Jump Slash", "type": "toggle", - "initial_active_state": true, - "img": "images/logic_forest_mq_hallway_switch.png", - "codes": "logic_forest_mq_hallway_switch" + "initial_active_state": false, + "img": "images/logic_forest_mq_hallway_switch_jumpslash.png", + "codes": "logic_forest_mq_hallway_switch_jumpslash" + }, + { + "name": "Forest Temple MQ Twisted Hallway Switch with Hookshot", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_forest_mq_hallway_switch_hookshot.png", + "codes": "logic_forest_mq_hallway_switch_hookshot" }, { "name": "Death Mountain Trail Bombable Chest with Strength", @@ -149,7 +212,7 @@ { "name": "Goron City Spinning Pot PoH with Strength", "type": "toggle", - "initial_active_state": true, + "initial_active_state": false, "img": "images/logic_goron_city_pot_with_strength.png", "codes": "logic_goron_city_pot_with_strength" }, @@ -196,18 +259,18 @@ "codes": "logic_spirit_mq_sun_block_gs" }, { - "name": "Jabu MQ Song of Time Block GS with Boomerang", + "name": "Jabu Scrub as Adult with Jump Dive", "type": "toggle", "initial_active_state": false, - "img": "images/logic_jabu_mq_sot_gs.png", - "codes": "logic_jabu_mq_sot_gs" + "img": "images/logic_jabu_scrub_jump_dive.png", + "codes": "logic_jabu_scrub_jump_dive" }, { - "name": "Bottom of the Well Cage GS without Boomerang", + "name": "Jabu MQ Song of Time Block GS with Boomerang", "type": "toggle", "initial_active_state": false, - "img": "images/logic_botw_cage_gs.png", - "codes": "logic_botw_cage_gs" + "img": "images/logic_jabu_mq_sot_gs.png", + "codes": "logic_jabu_mq_sot_gs" }, { "name": "Bottom of the Well MQ Dead Hand Freestanding Key with Boomerang", @@ -237,6 +300,13 @@ "img": "images/logic_fire_mq_climb.png", "codes": "logic_fire_mq_climb" }, + { + "name": "Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_fire_mq_maze_hovers.png", + "codes": "logic_fire_mq_maze_hovers" + }, { "name": "Fire Temple MQ Chest Near Boss without Breaking Crate", "type": "toggle", @@ -258,6 +328,13 @@ "img": "images/logic_fire_mq_bk_chest.png", "codes": "logic_fire_mq_bk_chest" }, + { + "name": "Fire Temple MQ Above Flame Wall Maze GS from Below with Longshot", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_fire_mq_above_maze_gs.png", + "codes": "logic_fire_mq_above_maze_gs" + }, { "name": "Zora's River Lower Freestanding PoH as Adult with Nothing", "type": "toggle", @@ -279,6 +356,13 @@ "img": "images/logic_shadow_freestanding_key.png", "codes": "logic_shadow_freestanding_key" }, + { + "name": "Shadow Temple MQ Invisible Blades Silver Rupees without Song of Time", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_shadow_mq_invisible_blades.png", + "codes": "logic_shadow_mq_invisible_blades" + }, { "name": "Shadow Temple MQ Lower Huge Pit without Fire Source", "type": "toggle", @@ -307,6 +391,13 @@ "img": "images/logic_lab_diving.png", "codes": "logic_lab_diving" }, + { + "name": "Deliver Eye Drops with Bolero of Fire", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_biggoron_bolero.png", + "codes": "logic_biggoron_bolero" + }, { "name": "Wasteland Crossing without Hover Boots or Longshot", "type": "toggle", @@ -335,6 +426,13 @@ "img": "images/logic_kakariko_tower_gs.png", "codes": "logic_kakariko_tower_gs" }, + { + "name": "Deku Tree MQ Compass Room GS Boulders with Just Hammer", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_deku_mq_compass_gs.png", + "codes": "logic_deku_mq_compass_gs" + }, { "name": "Lake Hylia Lab Wall GS with Jump Slash", "type": "toggle", @@ -363,6 +461,13 @@ "img": "images/logic_spirit_sun_chest.png", "codes": "logic_spirit_sun_chest" }, + { + "name": "Spirit Temple MQ Sun Block Room as Child without Song of Time", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_spirit_mq_sun_block_sot.png", + "codes": "logic_spirit_mq_sun_block_sot" + }, { "name": "Shadow Trial MQ Torch with Bow", "type": "toggle", @@ -384,6 +489,13 @@ "img": "images/logic_water_boss_key_region.png", "codes": "logic_water_boss_key_region" }, + { + "name": "Water Temple MQ North Basement GS without Small Key", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_water_mq_locked_gs.png", + "codes": "logic_water_mq_locked_gs" + }, { "name": "Water Temple Falling Platform Room GS with Hookshot", "type": "toggle", @@ -391,6 +503,13 @@ "img": "images/logic_water_falling_platform_gs_hookshot.png", "codes": "logic_water_falling_platform_gs_hookshot" }, + { + "name": "Water Temple Falling Platform Room GS with Boomerang", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_water_falling_platform_gs_boomerang.png", + "codes": "logic_water_falling_platform_gs_boomerang" + }, { "name": "Water Temple Serpent River GS without Iron Boots", "type": "toggle", @@ -426,6 +545,13 @@ "img": "images/logic_trail_gs_lower_hookshot.png", "codes": "logic_trail_gs_lower_hookshot" }, + { + "name": "Death Mountain Trail Lower Red Rock GS with Hover Boots", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_trail_gs_lower_hovers.png", + "codes": "logic_trail_gs_lower_hovers" + }, { "name": "Death Mountain Trail Lower Red Rock GS with Magic Bean", "type": "toggle", @@ -486,8 +612,15 @@ "name": "Fire Temple MQ Big Lava Room Blocked Door without Hookshot", "type": "toggle", "initial_active_state": false, - "img": "images/logic_fire_mq_bombable_chest.png", - "codes": "logic_fire_mq_bombable_chest" + "img": "images/logic_fire_mq_blocked_chest.png", + "codes": "logic_fire_mq_blocked_chest" + }, + { + "name": "Fire Temple MQ Lower to Upper Lizalfos Maze with Precise Jump", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_fire_mq_maze_jump.png", + "codes": "logic_fire_mq_maze_jump" }, { "name": "Light Trial MQ without Hookshot", @@ -503,6 +636,13 @@ "img": "images/logic_ice_mq_scarecrow.png", "codes": "logic_ice_mq_scarecrow" }, + { + "name": "Ice Cavern MQ Red Ice GS without Song of Time", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_ice_mq_red_ice_gs.png", + "codes": "logic_ice_mq_red_ice_gs" + }, { "name": "Ice Cavern Block Room GS with Hover Boots", "type": "toggle", @@ -538,6 +678,20 @@ "img": "images/logic_lost_woods_gs_bean.png", "codes": "logic_lost_woods_gs_bean" }, + { + "name": "Jabu Near Boss GS without Boomerang as Adult", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_jabu_boss_gs_adult.png", + "codes": "logic_jabu_boss_gs_adult" + }, + { + "name": "Kakariko Rooftop GS with Hover Boots", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_kakariko_rooftop_gs.png", + "codes": "logic_kakariko_rooftop_gs" + }, { "name": "Graveyard Freestanding PoH with Boomerang", "type": "toggle", @@ -601,6 +755,13 @@ "img": "images/logic_water_temple_torch_longshot.png", "codes": "logic_water_temple_torch_longshot" }, + { + "name": "Water Temple Central Pillar GS with Farore's Wind", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_water_central_gs_fw.png", + "codes": "logic_water_central_gs_fw" + }, { "name": "Water Temple Central Pillar GS with Iron Boots", "type": "toggle", @@ -629,6 +790,13 @@ "img": "images/logic_water_dragon_adult.png", "codes": "logic_water_dragon_adult" }, + { + "name": "Water Temple Dragon Statue Switch from Above the Water as Child", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_water_dragon_child.png", + "codes": "logic_water_dragon_child" + }, { "name": "Goron City Maze Left Chest with Hover Boots", "type": "toggle", @@ -665,11 +833,11 @@ "codes": "logic_forest_outside_backdoor" }, { - "name": "Forest Temple Scarecrow Route", + "name": "Forest Temple East Courtyard Door Frame with Hover Boots", "type": "toggle", "initial_active_state": false, - "img": "images/logic_forest_scarecrow.png", - "codes": "logic_forest_scarecrow" + "img": "images/logic_forest_door_frame.png", + "codes": "logic_forest_door_frame" }, { "name": "Dodongo's Cavern MQ Early Bomb Bag Area as Child", @@ -692,6 +860,20 @@ "img": "images/logic_dc_slingshot_skip.png", "codes": "logic_dc_slingshot_skip" }, + { + "name": "Dodongo's Cavern MQ Light the Eyes with Strength", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_dc_mq_eyes.png", + "codes": "logic_dc_mq_eyes" + }, + { + "name": "Dodongo's Cavern MQ Back Areas as Child without Explosives", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_dc_mq_child_back.png", + "codes": "logic_dc_mq_child_back" + }, { "name": "Rolling Goron (Hot Rodder Goron) as Child with Strength", "type": "toggle", @@ -713,6 +895,13 @@ "img": "images/logic_valley_crate_hovers.png", "codes": "logic_valley_crate_hovers" }, + { + "name": "Jump onto the Lost Woods Bridge as Adult with Nothing", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_lost_woods_bridge.png", + "codes": "logic_lost_woods_bridge" + }, { "name": "Spirit Trial without Hookshot", "type": "toggle", @@ -748,6 +937,13 @@ "img": "images/logic_fire_scarecrow.png", "codes": "logic_fire_scarecrow" }, + { + "name": "Fire Trial MQ with Hookshot", + "type": "toggle", + "initial_active_state": false, + "img": "images/logic_fire_trial_mq.png", + "codes": "logic_fire_trial_mq" + }, { "name": "Shadow Temple Entry with Fire Arrows", "type": "toggle", diff --git a/ootrando_overworldmap_hamsda/layouts/tricks.json b/ootrando_overworldmap_hamsda/layouts/tricks.json index 1166b0e4..68b4fa58 100644 --- a/ootrando_overworldmap_hamsda/layouts/tricks.json +++ b/ootrando_overworldmap_hamsda/layouts/tricks.json @@ -16,12 +16,24 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_visible_collisions", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_child_deadhand", "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_child_dampe_race_poh", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_man_on_roof", @@ -58,6 +70,18 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_deku_b1_webs_with_bow", + "width": 200, + "height": 16 + }, + { + "type": "item", + "item": "logic_deku_mq_log", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_rusted_switches", @@ -70,6 +94,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_botw_mq_pits", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_forest_mq_block_puzzle", @@ -100,6 +130,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_water_mq_central_pillar", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_gtg_mq_with_hookshot", @@ -112,6 +148,18 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_forest_outdoor_east_gs", + "width": 200, + "height": 16 + }, + { + "type": "item", + "item": "logic_forest_first_gs", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_forest_well_swim", @@ -120,7 +168,13 @@ }, { "type": "item", - "item": "logic_forest_mq_hallway_switch", + "item": "logic_forest_mq_hallway_switch_jumpslash", + "width": 200, + "height": 16 + }, + { + "type": "item", + "item": "logic_forest_mq_hallway_switch_hookshot", "width": 200, "height": 16 }, @@ -174,13 +228,13 @@ }, { "type": "item", - "item": "logic_jabu_mq_sot_gs", + "item": "logic_jabu_scrub_jump_dive", "width": 200, "height": 16 }, { "type": "item", - "item": "logic_botw_cage_gs", + "item": "logic_jabu_mq_sot_gs", "width": 200, "height": 16 }, @@ -208,6 +262,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_fire_mq_maze_hovers", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_fire_mq_near_boss", @@ -226,6 +286,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_fire_mq_above_maze_gs", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_zora_river_lower", @@ -244,6 +310,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_shadow_mq_invisible_blades", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_shadow_mq_huge_pit", @@ -268,6 +340,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_biggoron_bolero", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_wasteland_crossing", @@ -292,6 +370,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_deku_mq_compass_gs", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_lab_wall_gs", @@ -316,6 +400,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_spirit_mq_sun_block_sot", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_shadow_trial_mq", @@ -334,12 +424,24 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_water_mq_locked_gs", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_water_falling_platform_gs_hookshot", "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_water_falling_platform_gs_boomerang", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_water_river_gs", @@ -370,6 +472,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_trail_gs_lower_hovers", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_trail_gs_lower_bean", @@ -420,7 +528,13 @@ }, { "type": "item", - "item": "logic_fire_mq_bombable_chest", + "item": "logic_fire_mq_blocked_chest", + "width": 200, + "height": 16 + }, + { + "type": "item", + "item": "logic_fire_mq_maze_jump", "width": 200, "height": 16 }, @@ -436,6 +550,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_ice_mq_red_ice_gs", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_ice_block_gs", @@ -466,6 +586,18 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_jabu_boss_gs_adult", + "width": 200, + "height": 16 + }, + { + "type": "item", + "item": "logic_kakariko_rooftop_gs", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_graveyard_poh", @@ -520,6 +652,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_water_central_gs_fw", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_water_central_gs_irons", @@ -544,6 +682,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_water_dragon_child", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_goron_city_leftmost", @@ -576,7 +720,7 @@ }, { "type": "item", - "item": "logic_forest_scarecrow", + "item": "logic_forest_door_frame", "width": 200, "height": 16 }, @@ -598,6 +742,18 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_dc_mq_eyes", + "width": 200, + "height": 16 + }, + { + "type": "item", + "item": "logic_dc_mq_child_back", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_child_rolling_with_strength", @@ -616,6 +772,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_lost_woods_bridge", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_spirit_trial_hookshot", @@ -646,6 +808,12 @@ "width": 200, "height": 16 }, + { + "type": "item", + "item": "logic_fire_trial_mq", + "width": 200, + "height": 16 + }, { "type": "item", "item": "logic_shadow_fire_arrow_entry", diff --git a/ootrando_overworldmap_hamsda/locations/dung_mq.json b/ootrando_overworldmap_hamsda/locations/dung_mq.json index 09c5f4c6..68e96940 100644 --- a/ootrando_overworldmap_hamsda/locations/dung_mq.json +++ b/ootrando_overworldmap_hamsda/locations/dung_mq.json @@ -19,11 +19,15 @@ "item_count": 1 }, { - "name": "Basement Back Room", + "name": "Basement Water Room Front", "access_rules": [ "sling,sticks", "sling,dinsfire,magic", - "[logic_deku_b1_skip]" + //^^^ forward ^^^ + //vvv reverse vvv + "[logic_deku_b1_skip],sword1", + "[logic_deku_b1_skip],$has_projectile|child", + "[logic_deku_b1_skip],sticks,nuts" ], "visibility_rules": [ "hidden_region" @@ -31,13 +35,33 @@ "item_count": 1 }, { - "name": "Basement Water Room", + "name": "Basement Water Room Back", "access_rules": [ - "sling,sticks", - "sling,dinsfire,magic", - "@Deku Tree MQ/Basement Back Room,sword1", - "@Deku Tree MQ/Basement Back Room,$has_projectile|child", - "@Deku Tree MQ/Basement Back Room,nuts,sticks" + "@Deku Tree MQ/Basement Water Room Front,[logic_deku_mq_log]", + "@Deku Tree MQ/Basement Water Room Front,shield1", + "@Deku Tree MQ/Basement Water Room Front,shield2", + //^^^ forward ^^^ + //vvv reverse vvv + "[logic_deku_b1_skip],sword1", + "[logic_deku_b1_skip],$has_projectile|child", + "[logic_deku_b1_skip],sticks,nuts" + ], + "visibility_rules": [ + "hidden_region" + ], + "item_count": 1 + }, + { + "name": "Basement Back Room", + "access_rules": [ + "@Deku Tree MQ/Basement Water Room Back,sticks,sword1", + "@Deku Tree MQ/Basement Water Room Back,sticks,$has_projectile|child", + "@Deku Tree MQ/Basement Water Room Back,sticks,nuts", + "@Deku Tree MQ/Basement Water Room Back,dinsfire,magic,sword1", + "@Deku Tree MQ/Basement Water Room Back,dinsfire,magic,$has_projectile|child", + //^^^ forward ^^^ + //vvv reverse vvv + "[logic_deku_b1_skip]" ], "visibility_rules": [ "hidden_region" @@ -47,7 +71,10 @@ { "name": "Basement Ledge", "access_rules": [ - "@Deku Tree MQ/Basement Back Room" + "@Deku Tree MQ/Basement Back Room", + //^^^ forward ^^^ + //vvv reverse vvv + "[logic_deku_b1_skip]" ], "visibility_rules": [ "hidden_region" @@ -129,7 +156,7 @@ "name": "Before Spinning Log Chest", "short_name": "Before Log", "access_rules": [ - "@Deku Tree MQ/Basement Water Room" + "@Deku Tree MQ/Basement Water Room Front" ], "item_count": 1 }, @@ -137,7 +164,7 @@ "name": "After Spinning Log Chest", "short_name": "After Log", "access_rules": [ - "@Deku Tree MQ/Basement Water Room,ocarina,time", + "@Deku Tree MQ/Basement Water Room Back,ocarina,time", "{$hintable}" ], "capture_item": true, @@ -265,7 +292,15 @@ { "name": "Boss Area", "access_rules": [ - "@Dodongos Cavern MQ/Lobby,$has_explosives" + "@Dodongos Cavern MQ/Lobby,$has_explosives", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|both,sticks", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|child,[logic_dc_mq_child_back],sticks", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|child,[logic_dc_mq_child_back],dinsfire,magic", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|adult,dinsfire,magic", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|adult,[logic_dc_jump]", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|adult,hammer", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|adult,hoverboots", + "@Dodongos Cavern MQ/Lobby,[logic_dc_mq_eyes],lift1,$has_age|adult,hookshot" ], "visibility_rules": [ "hidden_region" @@ -735,7 +770,8 @@ "name": "GS Red Ice", "short_name": "Red Ice", "access_rules": [ - "ocarina,time" + "ocarina,time", + "[logic_ice_mq_red_ice_gs]" ], "visibility_rules": [ "setting_tokens_dungeons" @@ -820,7 +856,7 @@ "name": "After Block Puzzle", "access_rules": [ "@Forest Temple MQ/Central Area,$has_age|adult,lift1", - "@Forest Temple MQ/Central Area,$has_age|adult,$has_bombchus,[logic_forest_mq_block_puzzle],hookshot" + "@Forest Temple MQ/Central Area,$has_age|adult,[logic_forest_mq_block_puzzle],$has_bombchus,hookshot" ], "visibility_rules": [ "hidden_region" @@ -840,11 +876,11 @@ { "name": "Outdoor Ledge", "access_rules": [ - "@Forest Temple MQ/Central Area,hoverboots", - "@Forest Temple MQ/Central Area,hookshot,lift1", - "@Forest Temple MQ/Central Area,hookshot,[logic_forest_mq_hallway_switch]", - "@Forest Temple MQ/Central Area,hookshot,$has_bombchus,[logic_forest_mq_block_puzzle]", - "@Forest Temple MQ/After Block Puzzle,forest_small_keys:2,[forest_small_keys:3]" + "@Forest Temple MQ/Central Area,[logic_forest_mq_hallway_switch_jumpslash],hoverboots", + "@Forest Temple MQ/Central Area,[logic_forest_mq_hallway_switch_hookshot],hookshot", + "@Forest Temple MQ/After Block Puzzle,forest_small_keys:2,[forest_small_keys:3]", + "@Forest Temple MQ/After Block Puzzle,[logic_forest_mq_hallway_switch_jumpslash],hookshot", + "@Forest Temple MQ/After Block Puzzle,[logic_forest_mq_hallway_switch_jumpslash],[logic_forest_outside_backdoor]" ], "visibility_rules": [ "hidden_region" @@ -855,6 +891,7 @@ "name": "NW Outdoors", "access_rules": [ "@Forest Temple MQ/Central Area,$has_age|adult,bow", + "@Forest Temple MQ/After Block Puzzle,forest_small_keys:2", "@Forest Temple MQ/Outdoor Ledge" ], "visibility_rules": [ @@ -962,7 +999,9 @@ "name": "GS Raised Island Courtyard", "short_name": "Outdoor East", "access_rules": [ - "@Forest Temple MQ/NE Outdoors,hookshot" + "@Forest Temple MQ/NE Outdoors,hookshot", + "@Forest Temple MQ/NE Outdoors,bow,firearrow,magic,ocarina,time", + "@Forest Temple MQ/NE Outdoors,bow,firearrow,magic,hoverboots,[logic_forest_door_frame]" ], "visibility_rules": [ "setting_tokens_dungeons" @@ -1132,9 +1171,7 @@ { "name": "Lower Locked Door", "access_rules": [ - "fire_small_keys:1,[fire_small_keys:5],$has_explosives", - "fire_small_keys:1,[fire_small_keys:5],$has_age|adult,hammer", - "fire_small_keys:1,[fire_small_keys:5],$has_age|adult,hookshot" + "fire_small_keys:1,[fire_small_keys:5]" ], "visibility_rules": [ "hidden_region" @@ -1166,7 +1203,9 @@ "name": "Upper Maze", "access_rules": [ "@Fire Temple MQ/Lower Maze,$has_explosives,hookshot", - "@Fire Temple MQ/Lower Maze,[logic_rusted_switches],hookshot" + "@Fire Temple MQ/Lower Maze,[logic_rusted_switches],hookshot", + "@Fire Temple MQ/Lower Maze,[logic_fire_mq_maze_hovers],hoverboots", + "@Fire Temple MQ/Lower Maze,[logic_fire_mq_maze_jump]" ], "visibility_rules": [ "hidden_region" @@ -1176,7 +1215,8 @@ { "name": "West Top", "access_rules": [ - "@Fire Temple MQ/Upper Maze,fire_small_keys:2,[fire_small_keys:3],bow" + "@Fire Temple MQ/Upper Maze,fire_small_keys:2,[fire_small_keys:3],bow,hookshot", + "@Fire Temple MQ/Upper Maze,fire_small_keys:2,[fire_small_keys:3],bow,firearrow,magic" ], "visibility_rules": [ "hidden_region" @@ -1222,7 +1262,9 @@ "name": "Megaton Hammer Chest", "short_name": "Hammer", "access_rules": [ - "@Fire Temple MQ/Lower Locked Door,$has_age|adult" + "@Fire Temple MQ/Lower Locked Door,$has_age|adult,$has_explosives", + "@Fire Temple MQ/Lower Locked Door,$has_age|adult,hammer", + "@Fire Temple MQ/Lower Locked Door,$has_age|adult,hookshot" ], "item_count": 1 }, @@ -1240,8 +1282,7 @@ "short_name": "Lava Room Bombable", "access_rules": [ "@Fire Temple MQ/Big Lava Room,$has_fire,$has_explosives,hookshot", - "@Fire Temple MQ/Big Lava Room,$has_fire,$has_explosives,[logic_fire_mq_bombable_chest],$damage_below_ohko", - "@Fire Temple MQ/Big Lava Room,$has_fire,$has_explosives,[logic_fire_mq_bombable_chest],nayrus,magic" + "@Fire Temple MQ/Big Lava Room,$has_fire,$has_explosives,[logic_fire_mq_blocked_chest]" ], "chest_unopened_img": "images/chest_brown_small_key.png", "item_count": 1 @@ -1283,7 +1324,7 @@ "short_name": "Maze Side", "access_rules": [ "@Fire Temple MQ/Lower Maze,$has_explosives,[logic_fire_mq_maze_side_room]", - "@Fire Temple MQ/Lower Maze,$has_explosives,hookshot" + "@Fire Temple MQ/Lower Maze,$has_explosives,@Fire Temple MQ/Upper Maze" ], "chest_unopened_img": "images/chest_brown_small_key.png", "item_count": 1 @@ -1309,7 +1350,8 @@ "name": "GS Skull On Fire", "short_name": "East Tower Top", "access_rules": [ - "@Fire Temple MQ/Upper Maze,ocarina,time", + "@Fire Temple MQ/Upper Maze,ocarina,time,hookshot,$has_explosives", + "@Fire Temple MQ/Upper Maze,ocarina,time,hookshot,[logic_rusted_switches]", "@Fire Temple MQ/Upper Maze,longshot" ], "visibility_rules": [ @@ -1351,7 +1393,8 @@ "name": "Freestanding Key", "short_name": "Flare Dancer 2", "access_rules": [ - "@Fire Temple MQ/West Top" + "@Fire Temple MQ/West Top,hookshot", + "@Fire Temple MQ/West Top,[logic_fire_mq_flame_maze]" ], "chest_unopened_img": "images/small_key.png", "chest_opened_img": "images/small_key_check.png", @@ -1361,7 +1404,8 @@ "name": "Chest On Fire", "short_name": "West Tower Top", "access_rules": [ - "@Fire Temple MQ/West Top,fire_small_keys:3,[fire_small_keys:4]", + "@Fire Temple MQ/West Top,hookshot,fire_small_keys:3,[fire_small_keys:4]", + "@Fire Temple MQ/West Top,[logic_fire_mq_flame_maze],fire_small_keys:3,[fire_small_keys:4]", "{$hintable}" ], "capture_item": true, @@ -1372,7 +1416,8 @@ "name": "GS Above Fire Wall Maze", "short_name": "Above Fire Maze", "access_rules": [ - "@Fire Temple MQ/West Top,fire_small_keys:4,[fire_small_keys:5]", + "@Fire Temple MQ/West Top,hookshot,fire_small_keys:4,[fire_small_keys:5]", + "@Fire Temple MQ/West Top,[logic_fire_mq_above_maze_gs],longshot", "{$hintable}" ], "visibility_rules": [ @@ -1512,7 +1557,7 @@ "name": "Central Pillar Chest", "short_name": "Central Pillar", "access_rules": [ - "@Water Temple MQ/Dive,[$zora_tunic],hookshot,bow,firearrow,magic", + "@Water Temple MQ/Dive,[$zora_tunic],hookshot,[logic_water_mq_central_pillar],bow,firearrow,magic", "@Water Temple MQ/Dive,[$zora_tunic],hookshot,dinsfire,magic,ocarina,time" ], "chest_unopened_img": "images/chest_brown_small_key.png", @@ -1535,7 +1580,9 @@ "name": "Boss Key Chest", "short_name": "Boss Key", "access_rules": [ - "@Water Temple MQ/Dark Link Region,dinsfire,magic", + "@Water Temple MQ/Dark Link Region,$FTR_or_zora,dinsfire,magic,[logic_water_dragon_jump_dive]", + "@Water Temple MQ/Dark Link Region,$FTR_or_zora,dinsfire,magic,scale", + "@Water Temple MQ/Dark Link Region,$FTR_or_zora,dinsfire,magic,ironboots", "{$hintable}" ], "capture_item": true, @@ -1561,6 +1608,7 @@ "name": "GS Freestanding Key Area", "short_name": "North Basement", "access_rules": [ + "@Water Temple MQ/Basement Gated Areas,[logic_water_mq_locked_gs]", "@Water Temple MQ/Basement Gated Areas,water_small_keys:2,hoverboots", "@Water Temple MQ/Basement Gated Areas,water_small_keys:2,ocarina,scarecrow", "@Water Temple MQ/Basement Gated Areas,water_small_keys:2,[logic_water_north_basement_ledge_jump]", @@ -1754,7 +1802,8 @@ "name": "Invisible Blades Chests", "short_name": "Like Like", "access_rules": [ - "@Shadow Temple MQ/Upper Huge Pit,ocarina,time" + "@Shadow Temple MQ/Upper Huge Pit,ocarina,time", + "@Shadow Temple MQ/Upper Huge Pit,[logic_shadow_mq_invisible_blades],$damage_below_ohko" ], "chest_unopened_img": "images/chest_brown_small_key.png", "item_count": 2 @@ -2079,7 +2128,7 @@ "access_rules": [ "@Spirit Temple MQ/Child,sticks", "@Spirit Temple MQ/Child,sword1", - "@Spirit Temple MQ/Child,$has_explosives" + "@Spirit Temple MQ/Child,bombs" ], "chest_unopened_img": "images/chest_brown_map.png", "item_count": 1 @@ -2122,6 +2171,7 @@ "short_name": "Sun Block", "access_rules": [ "@Spirit Temple MQ/Shared,ocarina,time", + "@Spirit Temple MQ/Shared,[logic_spirit_mq_sun_block_sot]", "@Spirit Temple MQ/Adult" ], "item_count": 1 @@ -2130,7 +2180,8 @@ "name": "GS Sun Block Room", "short_name": "Sun Block", "access_rules": [ - "@Spirit Temple MQ/Shared,[logic_spirit_mq_sun_block_gs],ocarina,time,boomerang", + "@Spirit Temple MQ/Shared,[logic_spirit_mq_sun_block_gs],boomerang,ocarina,time", + "@Spirit Temple MQ/Shared,[logic_spirit_mq_sun_block_gs],boomerang,[logic_spirit_mq_sun_block_sot]", "@Spirit Temple MQ/Adult" ], "visibility_rules": [ @@ -2145,6 +2196,7 @@ "short_name": "Right Hand", "access_rules": [ "@Spirit Temple MQ/Shared,spirit_small_keys:3,[spirit_small_keys:7],ocarina,time", + "@Spirit Temple MQ/Shared,spirit_small_keys:3,[spirit_small_keys:7],[logic_spirit_mq_sun_block_sot]", "@Spirit Temple MQ/Adult,spirit_small_keys:1,[spirit_small_keys:7],$has_age|adult", "@Spirit Temple MQ/Adult,spirit_small_keys:1,[spirit_small_keys:4],ocarina,time,[logic_lens_spirit_mq]", "@Spirit Temple MQ/Adult,spirit_small_keys:1,[spirit_small_keys:4],ocarina,time,$can_use_lens" @@ -2350,12 +2402,22 @@ "botw_mq,$has_age|child,ocarina,storm" ], "sections": [ + { + "name": "Middle", + "access_rules": [ + "ocarina,lullaby", + "[logic_botw_mq_pits],$has_explosives" + ], + "visibility_rules": [ + "hidden_region" + ], + "item_count": 1 + }, { "name": "Map Chest", "short_name": "Map", "access_rules": [ - "$has_explosives", - "ocarina,lullaby" + "@Bottom of the Well MQ/Middle" ], "chest_unopened_img": "images/chest_brown_map.png", "item_count": 1 @@ -2364,8 +2426,8 @@ "name": "GS West Inner Room", "short_name": "West Inner", "access_rules": [ - "$can_child_attack,ocarina,lullaby", - "$can_child_attack,$has_explosives" + "@Bottom of the Well MQ/Middle,$can_child_attack,[logic_botw_mq_pits]", + "@Bottom of the Well MQ/Middle,$can_child_attack,$has_explosives" ], "visibility_rules": [ "setting_tokens_dungeons" @@ -2378,8 +2440,7 @@ "name": "East Inner Room Freestanding Key", "short_name": "East Inner", "access_rules": [ - "$has_explosives", - "ocarina,lullaby" + "@Bottom of the Well MQ/Middle" ], "chest_unopened_img": "images/small_key.png", "chest_opened_img": "images/small_key_check.png", @@ -2412,7 +2473,7 @@ "name": "Lens of Truth Chest", "short_name": "Lens", "access_rules": [ - "$has_explosives,botw_small_keys:1,[botw_small_keys:2]" + "@Bottom of the Well MQ/Middle,$has_explosives,botw_small_keys:1,[botw_small_keys:2]" ], "item_count": 1 }, @@ -2570,7 +2631,8 @@ "short_name": "Fire Trial", "access_rules": [ "[$goron_tunic],lift3,$can_LA,longshot", - "[$goron_tunic],lift3,$can_LA,hoverboots" + "[$goron_tunic],lift3,$can_LA,hoverboots", + "[$goron_tunic],lift3,$can_LA,[logic_fire_trial_mq],hookshot" ], "visibility_rules": [ "setting_trials:1" @@ -2590,9 +2652,9 @@ "short_name": "Light Trial", "access_rules": [ "lift3,$can_LA,gc_small_keys:2,[gc_small_keys:3],[logic_lens_castle_mq],hookshot", - "lift3,$can_LA,gc_small_keys:2,[gc_small_keys:3],[logic_lens_castle_mq],[logic_light_trial_mq],$damage_single_instance_ohko", + "lift3,$can_LA,gc_small_keys:2,[gc_small_keys:3],[logic_lens_castle_mq],[logic_light_trial_mq]", "lift3,$can_LA,gc_small_keys:2,[gc_small_keys:3],$can_use_lens,hookshot", - "lift3,$can_LA,gc_small_keys:2,[gc_small_keys:3],$can_use_lens,[logic_light_trial_mq],$damage_single_instance_ohko" + "lift3,$can_LA,gc_small_keys:2,[gc_small_keys:3],$can_use_lens,[logic_light_trial_mq]" ], "visibility_rules": [ "setting_trials:1" diff --git a/ootrando_overworldmap_hamsda/locations/dung_reg.json b/ootrando_overworldmap_hamsda/locations/dung_reg.json index 1af245a3..ebb90b73 100644 --- a/ootrando_overworldmap_hamsda/locations/dung_reg.json +++ b/ootrando_overworldmap_hamsda/locations/dung_reg.json @@ -103,9 +103,9 @@ "name": "Queen Gohma", "access_rules": [ "shield1,sticks,sling", - "shield1,sticks,[logic_deku_b1_skip]", + "shield1,sticks,nuts,[logic_deku_b1_skip]", "shield1,sword1,dinsfire,magic,sling", - "shield1,sword1,dinsfire,magic,[logic_deku_b1_skip]" + "shield1,sword1,dinsfire,magic,nuts,[logic_deku_b1_skip]" ], "hosted_item": "deku", "chest_unopened_img": "images/HC.png", @@ -741,12 +741,12 @@ "access_rules": [ "@Forest Temple/Bow Region,forest_small_keys:5,$has_age|adult,bow", "@Forest Temple/Bow Region,forest_small_keys:5,dinsfire,magic", - "[logic_forest_scarecrow],hoverboots,ocarina,scarecrow,hookshot,ocarina,time,$has_age|adult", - "[logic_forest_scarecrow],hoverboots,ocarina,scarecrow,hookshot,@Forest Temple/Outside Upper Ledge,$has_age|adult", - "[logic_forest_scarecrow],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,longshot", - "[logic_forest_scarecrow],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,[logic_forest_vines],hookshot", - "[logic_forest_scarecrow],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,ironboots", - "[logic_forest_scarecrow],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,scale2" + "[logic_forest_door_frame],hoverboots,ocarina,scarecrow,hookshot,ocarina,time,$has_age|adult", + "[logic_forest_door_frame],hoverboots,ocarina,scarecrow,hookshot,@Forest Temple/Outside Upper Ledge,$has_age|adult", + "[logic_forest_door_frame],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,longshot", + "[logic_forest_door_frame],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,[logic_forest_vines],hookshot", + "[logic_forest_door_frame],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,ironboots", + "[logic_forest_door_frame],hoverboots,ocarina,scarecrow,hookshot,$has_age|adult,bow,scale2" ], "visibility_rules": [ "hidden_region" @@ -1469,9 +1469,9 @@ "@Water Temple/Dive,ocarina,lullaby,longshot,water_small_keys:1,[water_small_keys:5]", "@Water Temple/Dive,ocarina,lullaby,longshot,bow", "@Water Temple/Dive,ocarina,lullaby,longshot,dinsfire,magic", - "@Water Temple/Dive,ocarina,lullaby,hookshot,faroreswind,magic,water_small_keys:1,[water_small_keys:5]", - "@Water Temple/Dive,ocarina,lullaby,hookshot,faroreswind,magic,bow", - "@Water Temple/Dive,ocarina,lullaby,hookshot,faroreswind,magic,dinsfire", + "@Water Temple/Dive,ocarina,lullaby,[logic_water_central_gs_fw],hookshot,faroreswind,magic,water_small_keys:1,[water_small_keys:5]", + "@Water Temple/Dive,ocarina,lullaby,[logic_water_central_gs_fw],hookshot,faroreswind,magic,bow", + "@Water Temple/Dive,ocarina,lullaby,[logic_water_central_gs_fw],hookshot,faroreswind,magic,dinsfire", "@Water Temple/Dive,ocarina,lullaby,[logic_water_central_gs_irons],hookshot,ironboots,bow", "@Water Temple/Dive,ocarina,lullaby,[logic_water_central_gs_irons],hookshot,ironboots,dinsfire,magic", "{@Water Temple/Middle Water Level,bow}" @@ -1523,7 +1523,7 @@ "name": "GS River", "short_name": "River", "access_rules": [ - "@Water Temple/Dark Link Region,ocarina,time,ironboots", + "@Water Temple/Dark Link Region,ocarina,time,ironboots,$FTR_or_zora", "@Water Temple/Dark Link Region,ocarina,time,[logic_water_river_gs],longshot,bow", "@Water Temple/Dark Link Region,ocarina,time,[logic_water_river_gs],longshot,$has_bombchus" ], @@ -1556,9 +1556,9 @@ "@Water Temple/Dive,ocarina,lullaby,lift1,[logic_water_dragon_adult],bow,ironboots", "@Water Temple/Dive,ocarina,lullaby,lift1,[logic_water_dragon_adult],hookshot,scale", "@Water Temple/Dive,ocarina,lullaby,lift1,[logic_water_dragon_adult],hookshot,ironboots", - "@Water Temple/Dark Link Region,ocarina,time,bow,ironboots,$FTR_or_zora", - "@Water Temple/Dark Link Region,ocarina,time,bow,[logic_water_dragon_jump_dive]", - "@Water Temple/Dark Link Region,ocarina,time,bow,[logic_water_dragon_adult]" + "@Water Temple/Dark Link Region,$FTR_or_zora,ocarina,time,bow,ironboots", + "@Water Temple/Dark Link Region,$FTR_or_zora,ocarina,time,bow,[logic_water_dragon_jump_dive]", + "@Water Temple/Dark Link Region,$FTR_or_zora,ocarina,time,bow,[logic_water_dragon_adult]" ], "chest_unopened_img": "images/chest_brown_small_key.png", "item_count": 1 @@ -2420,8 +2420,7 @@ "name": "GS Like Like Cage", "short_name": "Like Like", "access_rules": [ - "@Bottom of the Well/Like Like Chest,boomerang", - "@Bottom of the Well/Like Like Chest,[logic_botw_cage_gs],$can_child_attack" + "@Bottom of the Well/Like Like Chest,boomerang" ], "visibility_rules": [ "setting_tokens_dungeons" diff --git a/ootrando_overworldmap_hamsda/locations/overworld.json b/ootrando_overworldmap_hamsda/locations/overworld.json index aae7d26e..1ec6bfca 100644 --- a/ootrando_overworldmap_hamsda/locations/overworld.json +++ b/ootrando_overworldmap_hamsda/locations/overworld.json @@ -26,13 +26,15 @@ "map_locations": [ { "map": "child", - "x": 175, - "y": 1421 + "size": 40, + "x": 58, + "y": 1475 }, { "map": "adult", - "x": 175, - "y": 1421 + "size": 40, + "x": 58, + "y": 1475 } ] }, @@ -54,13 +56,15 @@ "map_locations": [ { "map": "child", - "x": 244, - "y": 1421 + "size": 40, + "x": 158, + "y": 1475 }, { "map": "adult", - "x": 244, - "y": 1421 + "size": 40, + "x": 158, + "y": 1475 } ] } @@ -189,11 +193,13 @@ "name": "KF Links House Cow", "short_name": "Cow", "access_rules": [ - "$has_age|adult,ocarina,epona" + "$has_age|adult,ocarina,epona", + "{$hintable}" ], "visibility_rules": [ "setting_cowsanity_yes" ], + "capture_item": true, "chest_unopened_img": "images/cow.png", "chest_opened_img": "images/bottle_milk.png", "item_count": 1 @@ -1089,11 +1095,13 @@ "short_name": "Cow", "access_rules": [ "$has_age|child,$has_explosives,dinsfire,magic,ocarina,epona", - "$has_age|adult,hammer,$has_fire,ocarina,epona" + "$has_age|adult,hammer,$has_fire,ocarina,epona", + "{$hintable}" ], "visibility_rules": [ "setting_cowsanity_yes" ], + "capture_item": true, "chest_unopened_img": "images/cow.png", "chest_opened_img": "images/bottle_milk.png", "item_count": 1 @@ -1283,7 +1291,7 @@ { "name": "Play Song", "access_rules": [ - "$has_age|child,ocarina,scarecrow_kid,$has|scarecrow|0" + "$has_age|child,ocarina,scarecrow_kid" ], "hosted_item": "scarecrow_adult" } @@ -1291,6 +1299,9 @@ "map_locations": [ { "map": "child", + "force_invisibility_rules": [ + "scarecrow" + ], "x": 1150, "y": 1180 } @@ -1310,6 +1321,9 @@ "map_locations": [ { "map": "adult", + "force_invisibility_rules": [ + "scarecrow" + ], "x": 1150, "y": 1180 } @@ -1935,6 +1949,7 @@ "access_rules": [ "$has_age|child" ], + "capture_item": true, "item_count": 1 } ], @@ -2174,7 +2189,8 @@ "name": "Kak GS Above Impas House (N)", "short_name": "GS", "access_rules": [ - "$has_age|adult,$night_gs,hookshot" + "$has_age|adult,$night_gs,hookshot", + "$has_age|adult,$night_gs,[logic_kakariko_rooftop_gs],hoverboots" ], "visibility_rules": [ "setting_tokens_overworld" @@ -3103,6 +3119,7 @@ "access_rules": [ "$has_age|adult,$night_gs,hammer", "$has_age|adult,$night_gs,[logic_trail_gs_lower_hookshot],hookshot", + "$has_age|adult,$night_gs,[logic_trail_gs_lower_hovers],hoverboots", "$has_age|both,$night_gs,[logic_trail_gs_lower_bean],setting_plant_no,beans,$has_explosives", "$has_age|both,$night_gs,[logic_trail_gs_lower_bean],setting_plant_no,beans,lift1", "$has_age|both,$night_gs,[logic_trail_gs_lower_bean],bean_trail_yes" @@ -3429,11 +3446,13 @@ "access_rules": [ "$can_blast,$has_age|child,$can_child_attack", "$spawn_access|Death Mountain Summit|child,$can_child_attack", - "$spawn_access|DMT Fairy|child,$can_child_attack" + "$spawn_access|DMT Fairy|child,$can_child_attack", + "{$hintable}" ], "visibility_rules": [ "setting_tokens_overworld" ], + "capture_item": true, "chest_unopened_img": "images/skulltula.png", "chest_opened_img": "images/skulltula_token.png", "item_count": 1 @@ -4745,11 +4764,13 @@ { "name": "Cow", "access_rules": [ - "$has_age|child,ocarina,epona" + "$has_age|child,ocarina,epona", + "{$hintable}" ], "visibility_rules": [ "setting_cowsanity_yes" ], + "capture_item": true, "chest_unopened_img": "images/cow.png", "chest_opened_img": "images/bottle_milk.png", "item_count": 1 @@ -4834,8 +4855,10 @@ { "name": "Smash 'em", "access_rules": [ - "hammer" + "hammer", + "{$hintable}" ], + "capture_item": true, "item_count": 1 } ], diff --git a/ootrando_overworldmap_hamsda/locations/overworld_entrance.json b/ootrando_overworldmap_hamsda/locations/overworld_entrance.json index 90744218..1688fcf1 100644 --- a/ootrando_overworldmap_hamsda/locations/overworld_entrance.json +++ b/ootrando_overworldmap_hamsda/locations/overworld_entrance.json @@ -29,18 +29,18 @@ "map_locations": [ { "map": "overworldchecks", - "x": 175, - "y": 1421 + "x": 58, + "y": 1140 }, { "map": "entrances", - "x": 175, - "y": 1421 + "x": 58, + "y": 1140 }, { "map": "connectors", - "x": 175, - "y": 1421 + "x": 58, + "y": 1140 } ] }, @@ -65,18 +65,18 @@ "map_locations": [ { "map": "overworldchecks", - "x": 244, - "y": 1421 + "x": 158, + "y": 1140 }, { "map": "entrances", - "x": 244, - "y": 1421 + "x": 158, + "y": 1140 }, { "map": "connectors", - "x": 244, - "y": 1421 + "x": 158, + "y": 1140 } ] }, @@ -101,18 +101,18 @@ "map_locations": [ { "map": "overworldchecks", - "x": 37, - "y": 1497 + "x": 58, + "y": 1250 }, { "map": "entrances", - "x": 37, - "y": 1497 + "x": 58, + "y": 1250 }, { "map": "connectors", - "x": 37, - "y": 1497 + "x": 58, + "y": 1250 } ] }, @@ -137,18 +137,18 @@ "map_locations": [ { "map": "overworldchecks", - "x": 106, - "y": 1497 + "x": 158, + "y": 1250 }, { "map": "entrances", - "x": 106, - "y": 1497 + "x": 158, + "y": 1250 }, { "map": "connectors", - "x": 106, - "y": 1497 + "x": 158, + "y": 1250 } ] }, @@ -173,18 +173,18 @@ "map_locations": [ { "map": "overworldchecks", - "x": 175, - "y": 1497 + "x": 258, + "y": 1250 }, { "map": "entrances", - "x": 175, - "y": 1497 + "x": 258, + "y": 1250 }, { "map": "connectors", - "x": 175, - "y": 1497 + "x": 258, + "y": 1250 } ] }, @@ -209,18 +209,18 @@ "map_locations": [ { "map": "overworldchecks", - "x": 244, - "y": 1497 + "x": 358, + "y": 1250 }, { "map": "entrances", - "x": 244, - "y": 1497 + "x": 358, + "y": 1250 }, { "map": "connectors", - "x": 244, - "y": 1497 + "x": 358, + "y": 1250 } ] }, @@ -245,18 +245,18 @@ "map_locations": [ { "map": "overworldchecks", - "x": 313, - "y": 1497 + "x": 458, + "y": 1250 }, { "map": "entrances", - "x": 313, - "y": 1497 + "x": 458, + "y": 1250 }, { "map": "connectors", - "x": 313, - "y": 1497 + "x": 458, + "y": 1250 } ] }, @@ -281,18 +281,4623 @@ "map_locations": [ { "map": "overworldchecks", - "x": 382, - "y": 1497 + "x": 558, + "y": 1250 + }, + { + "map": "entrances", + "x": 558, + "y": 1250 + }, + { + "map": "connectors", + "x": 558, + "y": 1250 + } + ] + } + ] + }, + { + "name": "Dungeons", + "color": "#ffffff", + "children": [ + { + "name": "Bottom of the Well", + "sections": [ + { + "name": "Front Left Fake Wall Chest", + "short_name": "Front Hidden", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Front Left Fake Wall Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Right Bottom Fake Wall Chest", + "short_name": "Right Hidden", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Right Bottom Fake Wall Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Center Large", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Center Skulltula Chest", + "short_name": "Center Small", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Center Skulltula Chest" + ], + "item_count": 1 + }, + { + "name": "GS West Inner Room", + "short_name": "West Inner", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well GS West Inner Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS East Inner Room", + "short_name": "East Inner", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well GS East Inner Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Fire Keese Chest", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Fire Keese Chest" + ], + "item_count": 1 + }, + { + "name": "Like Like Chest", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Like Like Chest" + ], + "item_count": 1 + }, + { + "name": "GS Like Like Cage", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well GS Like Like Cage" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Freestanding Key", + "short_name": "Coffin Key", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Freestanding Key" + ], + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "Front Center Bombable Chest", + "short_name": "Front Bombable", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Front Center Bombable Chest" + ], + "item_count": 1 + }, + { + "name": "Back Left Bombable Chest", + "short_name": "Back Bombable", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Back Left Bombable Chest" + ], + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Basement", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Underwater Left Chest", + "short_name": "Underwater Left", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Underwater Left Chest" + ], + "item_count": 1 + }, + { + "name": "Underwater Front Chest", + "short_name": "Underwater Front", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Underwater Front Chest" + ], + "item_count": 1 + }, + { + "name": "Lens of Truth Chest", + "short_name": "Dead Hand", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Lens of Truth Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "Invisible Chest", + "access_rules": [ + "$access_location|Bottom of the Well Main Area|Bottom of the Well Invisible Chest" + ], + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "botw_mq" + ], + "size": 40, + "x": 430, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "botw_mq" + ], + "size": 40, + "x": 430, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "botw_mq" + ], + "size": 40, + "x": 430, + "y": 1465 + } + ] + }, + { + "name": "Bottom of the Well MQ", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Bottom of the Well MQ Middle|Bottom of the Well MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "GS West Inner Room", + "short_name": "West Inner", + "access_rules": [ + "$access_location|Bottom of the Well MQ Middle|Bottom of the Well MQ GS West Inner Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "East Inner Room Freestanding Key", + "short_name": "East Inner", + "access_rules": [ + "$access_location|Bottom of the Well MQ Middle|Bottom of the Well MQ East Inner Room Freestanding Key" + ], + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Dead Hand", + "access_rules": [ + "$access_location|Bottom of the Well MQ Perimeter|Bottom of the Well MQ Compass Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Dead Hand Freestanding Key", + "short_name": "Dead Hand Key", + "access_rules": [ + "$access_location|Bottom of the Well MQ Perimeter|Bottom of the Well MQ Dead Hand Freestanding Key" + ], + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "Lens of Truth Chest", + "short_name": "Lens", + "access_rules": [ + "$access_location|Bottom of the Well MQ Middle|Bottom of the Well MQ Lens of Truth Chest" + ], + "item_count": 1 + }, + { + "name": "GS Basement", + "short_name": "Basement", + "access_rules": [ + "$access_location|Bottom of the Well MQ Perimeter|Bottom of the Well MQ GS Basement" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Coffin Room", + "short_name": "Coffin", + "access_rules": [ + "$access_location|Bottom of the Well MQ Perimeter|Bottom of the Well MQ GS Coffin Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "botw_reg" + ], + "size": 40, + "x": 475, + "y": 1465 }, { "map": "entrances", - "x": 382, - "y": 1497 + "force_invisibility_rules": [ + "botw_reg" + ], + "size": 40, + "x": 475, + "y": 1465 }, { "map": "connectors", - "x": 382, - "y": 1497 + "force_invisibility_rules": [ + "botw_reg" + ], + "size": 40, + "x": 475, + "y": 1465 + } + ] + }, + { + "name": "Deku Tree", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Deku Tree Lobby|Deku Tree Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Slingshot Room Chests", + "short_name": "Slingshot", + "access_rules": [ + "$access_location|Deku Tree Slingshot Room|Deku Tree Slingshot Room Chests" + ], + "item_count": 2 + }, + { + "name": "Compass Room Chests", + "short_name": "Compass", + "access_rules": [ + "$access_location|Deku Tree Lobby|Deku Tree Compass Room Chests" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 2 + }, + { + "name": "GS Compass Room", + "short_name": "Compass", + "access_rules": [ + "$access_location|Deku Tree Lobby|Deku Tree GS Compass Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Basement Chest", + "short_name": "Basement", + "access_rules": [ + "$access_location|Deku Tree Lobby|Deku Tree Basement Chest" + ], + "item_count": 1 + }, + { + "name": "GS Basement Vines", + "short_name": "Vines", + "access_rules": [ + "$access_location|Deku Tree Lobby|Deku Tree GS Basement Vines" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Basement Gate", + "short_name": "Gate", + "access_rules": [ + "$access_location|Deku Tree Lobby|Deku Tree GS Basement Gate" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Basement Back Room", + "short_name": "Back Room", + "access_rules": [ + "$access_location|Deku Tree Basement Backroom|Deku Tree GS Basement Back Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Queen Gohma", + "access_rules": [ + "$access_location|Deku Tree Boss Room|Queen Gohma" + ], + "hosted_item": "deku", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "deku_mq" + ], + "size": 40, + "x": 30, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "deku_mq" + ], + "size": 40, + "x": 30, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "deku_mq" + ], + "size": 40, + "x": 30, + "y": 1465 + } + ] + }, + { + "name": "Deku Tree MQ", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Deku Tree MQ Lobby|Deku Tree MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "GS Lobby", + "short_name": "Lobby", + "access_rules": [ + "$access_location|Deku Tree MQ Lobby|Deku Tree MQ GS Lobby" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Slingshot Chest", + "short_name": "Slingshot", + "access_rules": [ + "$access_location|Deku Tree MQ Lobby|Deku Tree MQ Slingshot Chest" + ], + "item_count": 1 + }, + { + "name": "Slingshot Room Back Chest", + "short_name": "Slingshot Back", + "access_rules": [ + "$access_location|Deku Tree MQ Lobby|Deku Tree MQ Slingshot Room Back Chest" + ], + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Deku Tree MQ Compass Room|Deku Tree MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "GS Compass Room", + "short_name": "Compass", + "access_rules": [ + "$access_location|Deku Tree MQ Compass Room|Deku Tree MQ GS Compass Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Basement Chest", + "short_name": "Basement", + "access_rules": [ + "$access_location|Deku Tree MQ Lobby|Deku Tree MQ Basement Chest" + ], + "item_count": 1 + }, + { + "name": "Before Spinning Log Chest", + "short_name": "Before Log", + "access_rules": [ + "$access_location|Deku Tree MQ Basement Water Room Front|Deku Tree MQ Before Spinning Log Chest" + ], + "item_count": 1 + }, + { + "name": "After Spinning Log Chest", + "short_name": "After Log", + "access_rules": [ + "$access_location|Deku Tree MQ Basement Water Room Back|Deku Tree MQ After Spinning Log Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "GS Basement Graves Room", + "short_name": "Ceiling", + "access_rules": [ + "$access_location|Deku Tree MQ Basement Back Room|Deku Tree MQ GS Basement Graves Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Basement Back Room", + "short_name": "Back Room", + "access_rules": [ + "$access_location|Deku Tree MQ Basement Back Room|Deku Tree MQ GS Basement Back Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Deku Scrub", + "access_rules": [ + "$access_location|Deku Tree MQ Basement Ledge|Deku Tree MQ Deku Scrub" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "item_count": 1 + }, + { + "name": "Queen Gohma", + "access_rules": [ + "$access_location|Deku Tree MQ Basement Ledge|Queen Gohma" + ], + "hosted_item": "deku", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "deku_reg" + ], + "size": 40, + "x": 75, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "deku_reg" + ], + "size": 40, + "x": 75, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "deku_reg" + ], + "size": 40, + "x": 75, + "y": 1465 + } + ] + }, + { + "name": "Dodongos Cavern", + "sections": [ + { + "name": "GS Side Room Near Lower Lizalfos", + "short_name": "East Side", + "access_rules": [ + "$access_location|Dodongos Cavern Lobby|Dodongos Cavern GS Side Room Near Lower Lizalfos" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Scarecrow", + "short_name": "Scarecrow", + "access_rules": [ + "$access_location|Dodongos Cavern Lobby|Dodongos Cavern GS Scarecrow" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Deku Scrub Side Room Near Dodongos", + "short_name": "East Side", + "access_rules": [ + "$access_location|Dodongos Cavern Lobby|Dodongos Cavern Deku Scrub Side Room Near Dodongos" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Dodongos Cavern Lobby|Dodongos Cavern Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Deku Scrub Lobby", + "short_name": "Lobby", + "access_rules": [ + "$access_location|Dodongos Cavern Lobby|Dodongos Cavern Deku Scrub Lobby" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Dodongos Cavern Staircase Room|Dodongos Cavern Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "GS Alcove Above Stairs", + "short_name": "Above Stairs", + "access_rules": [ + "$access_location|Dodongos Cavern Far Bridge|Dodongos Cavern GS Alcove Above Stairs" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Vines Above Stairs", + "short_name": "Vines", + "access_rules": [ + "$access_location|Dodongos Cavern Staircase Room|Dodongos Cavern GS Vines Above Stairs" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Bomb Flower Platform Chest", + "short_name": "Bomb Flower", + "access_rules": [ + "$access_location|Dodongos Cavern Climb|Dodongos Cavern Bomb Flower Platform Chest" + ], + "item_count": 1 + }, + { + "name": "Deku Scrubs Near Bomb Bag", + "short_name": "Near Bomb Bag", + "access_rules": [ + "$access_location|Dodongos Cavern Climb|Dodongos Cavern Deku Scrubs Near Bomb Bag" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "clear_as_group": false, + "item_count": 2 + }, + { + "name": "Bomb Bag Chest", + "short_name": "Bomb Bag", + "access_rules": [ + "$access_location|Dodongos Cavern Far Bridge|Dodongos Cavern Bomb Bag Chest" + ], + "item_count": 1 + }, + { + "name": "End of Bridge Chest", + "short_name": "Bridge", + "access_rules": [ + "$access_location|Dodongos Cavern Far Bridge|Dodongos Cavern End of Bridge Chest" + ], + "item_count": 1 + }, + { + "name": "GS Back Room", + "short_name": "Back Room", + "access_rules": [ + "$access_location|Dodongos Cavern Boss Area|Dodongos Cavern GS Back Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Boss Room Chest", + "short_name": "Boss Room", + "access_rules": [ + "$access_location|Dodongos Cavern Boss Area|Dodongos Cavern Boss Room Chest" + ], + "item_count": 1 + }, + { + "name": "King Dodongo", + "access_rules": [ + "$access_location|Dodongos Cavern Boss Area|King Dodongo" + ], + "hosted_item": "dodongo", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "dodongo_mq" + ], + "size": 40, + "x": 130, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "dodongo_mq" + ], + "size": 40, + "x": 130, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "dodongo_mq" + ], + "size": 40, + "x": 130, + "y": 1465 + } + ] + }, + { + "name": "Dodongos Cavern MQ", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Bomb Bag Chest", + "short_name": "Bomb Bag", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Bomb Bag Area|Dodongos Cavern MQ Bomb Bag Chest" + ], + "item_count": 1 + }, + { + "name": "GS Scrub Room", + "short_name": "Scrub", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Bomb Bag Area|Dodongos Cavern MQ GS Scrub Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Deku Scrub Side Room Near Lower Lizalfos", + "short_name": "East Side", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lower Right Side|Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "item_count": 1 + }, + { + "name": "Torch Puzzle Room Chest", + "short_name": "Platform", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ Torch Puzzle Room Chest" + ], + "item_count": 1 + }, + { + "name": "GS Lizalfos Room", + "short_name": "Lizalfos", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ GS Lizalfos Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Larvae Room Chest", + "short_name": "Larvae", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ Larvae Room Chest" + ], + "item_count": 1 + }, + { + "name": "GS Larvae Room", + "short_name": "Larvae", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ GS Larvae Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Deku Scrub Staircase", + "short_name": "Above Stairs", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ Deku Scrub Staircase" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "item_count": 1 + }, + { + "name": "GS Song of Time Block Room", + "short_name": "Song of Time", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ GS Song of Time Block Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Deku Scrubs Lobby", + "short_name": "Lobby", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Lobby|Dodongos Cavern MQ Deku Scrubs Lobby" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "clear_as_group": false, + "item_count": 2 + }, + { + "name": "GS Back Area", + "short_name": "Back Area", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Boss Area|Dodongos Cavern MQ GS Back Area" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Under Grave Chest", + "short_name": "Under Grave", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Boss Area|Dodongos Cavern MQ Under Grave Chest" + ], + "item_count": 1 + }, + { + "name": "Boss Room Chest", + "short_name": "Boss Room", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Boss Area|Dodongos Cavern Boss Room Chest" + ], + "item_count": 1 + }, + { + "name": "King Dodongo", + "access_rules": [ + "$access_location|Dodongos Cavern MQ Boss Area|King Dodongo" + ], + "hosted_item": "dodongo", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "dodongo_reg" + ], + "size": 40, + "x": 175, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "dodongo_reg" + ], + "size": 40, + "x": 175, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "dodongo_reg" + ], + "size": 40, + "x": 175, + "y": 1465 + } + ] + }, + { + "name": "Fire Temple", + "sections": [ + { + "name": "Near Boss Chest", + "short_name": "Near Boss", + "access_rules": [ + "$access_location|Fire Temple Lower|Fire Temple Near Boss Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Boss Key Loop", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Fire Temple Lower|Fire Temple GS Boss Key Loop" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Flare Dancer Chest", + "short_name": "Flare Dancer", + "access_rules": [ + "$access_location|Fire Temple Lower|Fire Temple Flare Dancer Chest" + ], + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Fire Temple Lower|Fire Temple Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "GS Song of Time Room", + "short_name": "Time Block", + "access_rules": [ + "$access_location|Fire Temple Big Lava Room|Fire Temple GS Song of Time Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Big Lava Room Lower Open Door Chest", + "short_name": "Lava Room Open", + "access_rules": [ + "$access_location|Fire Temple Big Lava Room|Fire Temple Big Lava Room Lower Open Door Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Big Lava Room Blocked Door Chest", + "short_name": "Lava Room Bombable", + "access_rules": [ + "$access_location|Fire Temple Big Lava Room|Fire Temple Big Lava Room Blocked Door Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Boulder Maze Lower Chest", + "short_name": "Boulder Maze Lower", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple Boulder Maze Lower Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Boulder Maze Side Room Chest", + "short_name": "Boulder Maze Side", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple Boulder Maze Side Room Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Boulder Maze", + "short_name": "Boulder Maze", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple GS Boulder Maze" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Boulder Maze Upper Chest", + "short_name": "Boulder Maze Upper", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple Boulder Maze Upper Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Boulder Maze Shortcut Chest", + "short_name": "Shortcut", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple Boulder Maze Shortcut Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Scarecrow Climb", + "short_name": "Scarecrow 1", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple GS Scarecrow Climb" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Scarecrow Top", + "short_name": "Scarecrow 2", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple GS Scarecrow Top" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Scarecrow Chest", + "short_name": "Scarecrow", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple Scarecrow Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Fire Temple Middle|Fire Temple Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Highest Goron Chest", + "short_name": "Highest Goron", + "access_rules": [ + "$access_location|Fire Temple Upper|Fire Temple Highest Goron Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Megaton Hammer Chest", + "short_name": "Hammer", + "access_rules": [ + "$access_location|Fire Temple Upper|Fire Temple Megaton Hammer Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "Volvagia", + "access_rules": [ + "$access_location|Fire Temple Lower|Volvagia" + ], + "hosted_item": "fire", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "fire_mq" + ], + "size": 40, + "x": 130, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "fire_mq" + ], + "size": 40, + "x": 130, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "fire_mq" + ], + "size": 40, + "x": 130, + "y": 1350 + } + ] + }, + { + "name": "Fire Temple MQ", + "sections": [ + { + "name": "Near Boss Chest", + "short_name": "Near Boss", + "access_rules": [ + "$access_location|Fire Temple MQ Lower|Fire Temple MQ Near Boss Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Map Room Side Chest", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Fire Temple MQ Lower|Fire Temple MQ Map Room Side Chest" + ], + "item_count": 1 + }, + { + "name": "Megaton Hammer Chest", + "short_name": "Hammer", + "access_rules": [ + "$access_location|Fire MQ Lower Locked Door|Fire Temple MQ Megaton Hammer Chest" + ], + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Fire MQ Lower Locked Door|Fire Temple MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Big Lava Room Blocked Door Chest", + "short_name": "Lava Room Bombable", + "access_rules": [ + "$access_location|Fire MQ Big Lava Room|Fire Temple MQ Big Lava Room Blocked Door Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Fire MQ Big Lava Room|Fire Temple MQ Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "GS Big Lava Room Open Door", + "short_name": "Lava Room", + "access_rules": [ + "$access_location|Fire MQ Big Lava Room|Fire Temple MQ GS Big Lava Room Open Door" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Lizalfos Maze Lower Chest", + "short_name": "Maze Lower", + "access_rules": [ + "$access_location|Fire MQ Lower Maze|Fire Temple MQ Lizalfos Maze Lower Chest" + ], + "item_count": 1 + }, + { + "name": "Lizalfos Maze Side Room Chest", + "short_name": "Maze Side", + "access_rules": [ + "$access_location|Fire MQ Lower Maze|Fire Temple MQ Lizalfos Maze Side Room Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Lizalfos Maze Upper Chest", + "short_name": "Maze Upper", + "access_rules": [ + "$access_location|Fire MQ Upper Maze|Fire Temple MQ Lizalfos Maze Upper Chest" + ], + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Fire MQ Upper Maze|Fire Temple MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "GS Skull On Fire", + "short_name": "East Tower Top", + "access_rules": [ + "$access_location|Fire MQ Upper Maze|Fire Temple MQ GS Skull On Fire" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Fire Wall Maze Side Room", + "short_name": "Fire Maze Side", + "access_rules": [ + "$access_location|Fire Temple MQ Upper|Fire Temple MQ GS Fire Wall Maze Side Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Fire Wall Maze Center", + "short_name": "Fire Maze Center", + "access_rules": [ + "$access_location|Fire Temple MQ Upper|Fire Temple MQ GS Fire Wall Maze Center" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Freestanding Key", + "short_name": "Flare Dancer 2", + "access_rules": [ + "$access_location|Fire Temple MQ Upper|Fire Temple MQ Freestanding Key" + ], + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "Chest On Fire", + "short_name": "West Tower Top", + "access_rules": [ + "$access_location|Fire Temple MQ Upper|Fire Temple MQ Chest On Fire" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Above Fire Wall Maze", + "short_name": "Above Fire Maze", + "access_rules": [ + "$access_location|Fire Temple MQ Upper|Fire Temple MQ GS Above Fire Wall Maze" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Volvagia", + "access_rules": [ + "$access_location|Fire MQ Boss Room|Volvagia" + ], + "hosted_item": "fire", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "fire_reg" + ], + "size": 40, + "x": 175, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "fire_reg" + ], + "size": 40, + "x": 175, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "fire_reg" + ], + "size": 40, + "x": 175, + "y": 1350 + } + ] + }, + { + "name": "Forest Temple", + "sections": [ + { + "name": "GS First Room", + "short_name": "First Room", + "access_rules": [ + "$access_location|Forest Temple Lobby|Forest Temple GS First Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "First Room Chest", + "short_name": "Tree", + "access_rules": [ + "$access_location|Forest Temple Lobby|Forest Temple First Room Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Lobby", + "short_name": "Lobby", + "access_rules": [ + "$access_location|Forest Temple Lobby|Forest Temple GS Lobby" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "First Stalfos Chest", + "short_name": "Stalfos", + "access_rules": [ + "$access_location|Forest Temple Lobby|Forest Temple First Stalfos Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Raised Island Courtyard Chest", + "short_name": "Island", + "access_rules": [ + "$access_location|Forest Temple NE Outdoors|Forest Temple Raised Island Courtyard Chest" + ], + "item_count": 1 + }, + { + "name": "GS Raised Island Courtyard", + "short_name": "Island", + "access_rules": [ + "$access_location|Forest Temple NE Outdoors|Forest Temple GS Raised Island Courtyard" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Forest Temple Outdoors High Balconies|Forest Temple Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Well Chest", + "short_name": "Well", + "access_rules": [ + "$access_location|Forest Temple Outdoors High Balconies|Forest Temple Well Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Level Island Courtyard", + "short_name": "Outdoor West", + "access_rules": [ + "$access_location|Forest Temple NW Outdoors|Forest Temple GS Level Island Courtyard" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Eye Switch Chest", + "short_name": "Block Push", + "access_rules": [ + "$access_location|Forest Temple Block Push Room|Forest Temple Eye Switch Chest" + ], + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Forest Temple Straightened Hall|Forest Temple Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Floormaster Chest", + "short_name": "Floormaster", + "access_rules": [ + "$access_location|Forest Temple Outside Upper Ledge|Forest Temple Floormaster Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Red Poe Chest", + "short_name": "Red Poe", + "access_rules": [ + "$access_location|Forest Temple Bow Region|Forest Temple Red Poe Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Bow Chest", + "short_name": "Bow", + "access_rules": [ + "$access_location|Forest Temple Bow Region|Forest Temple Bow Chest" + ], + "item_count": 1 + }, + { + "name": "Blue Poe Chest", + "short_name": "Blue Poe", + "access_rules": [ + "$access_location|Forest Temple Bow Region|Forest Temple Blue Poe Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Falling Ceiling Room Chest", + "short_name": "Checkerboard", + "access_rules": [ + "$access_location|Forest Temple Falling Room|Forest Temple Falling Ceiling Room Chest" + ], + "item_count": 1 + }, + { + "name": "Basement Chest", + "short_name": "Basement", + "access_rules": [ + "$access_location|Forest Temple Boss Region|Forest Temple Basement Chest" + ], + "item_count": 1 + }, + { + "name": "GS Basement", + "short_name": "Basement", + "access_rules": [ + "$access_location|Forest Temple Boss Region|Forest Temple GS Basement" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Phantom Ganon", + "access_rules": [ + "$access_location|Forest Temple Boss Region|Phantom Ganon" + ], + "hosted_item": "forest", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "forest_mq" + ], + "size": 40, + "x": 30, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "forest_mq" + ], + "size": 40, + "x": 30, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "forest_mq" + ], + "size": 40, + "x": 30, + "y": 1350 + } + ] + }, + { + "name": "Forest Temple MQ", + "sections": [ + { + "name": "First Room Chest", + "short_name": "Tree", + "access_rules": [ + "$access_location|Forest Temple MQ Lobby|Forest Temple MQ First Room Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS First Hallway", + "short_name": "First Hallway", + "access_rules": [ + "$access_location|Forest Temple MQ Lobby|Forest Temple MQ GS First Hallway" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Wolfos Chest", + "short_name": "Wolfos", + "access_rules": [ + "$access_location|Forest Temple MQ Central Area|Forest Temple MQ Wolfos Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Raised Island Courtyard", + "short_name": "Outdoor East", + "access_rules": [ + "$access_location|Forest Temple MQ NE Outdoors|Forest Temple MQ GS Raised Island Courtyard" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Raised Island Courtyard Upper Chest", + "short_name": "Balcony", + "access_rules": [ + "$access_location|Forest Temple MQ Outdoors Top Ledges|Forest Temple MQ Raised Island Courtyard Upper Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Well Chest", + "short_name": "Well", + "access_rules": [ + "$access_location|Forest Temple MQ NE Outdoors|Forest Temple MQ Well Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Well", + "short_name": "Well", + "access_rules": [ + "$access_location|Forest Temple MQ NE Outdoors|Forest Temple MQ GS Well" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Level Island Courtyard", + "short_name": "Outdoor West", + "access_rules": [ + "$access_location|Forest Temple MQ NW Outdoors|Forest Temple MQ GS Level Island Courtyard" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Block Push Room", + "short_name": "Block Push", + "access_rules": [ + "$access_location|Forest Temple MQ Central Area|Forest Temple MQ GS Block Push Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Forest Temple MQ After Block Puzzle|Forest Temple MQ Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Redead Chest", + "short_name": "Redead", + "access_rules": [ + "$access_location|Forest Temple MQ Outdoor Ledge|Forest Temple MQ Redead Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Forest Temple MQ Bow Region|Forest Temple MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Bow Chest", + "short_name": "Bow", + "access_rules": [ + "$access_location|Forest Temple MQ Bow Region|Forest Temple MQ Bow Chest" + ], + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Forest Temple MQ Bow Region|Forest Temple MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Falling Ceiling Room Chest", + "short_name": "Checkerboard", + "access_rules": [ + "$access_location|Forest Temple MQ Falling Room|Forest Temple MQ Falling Ceiling Room Chest" + ], + "item_count": 1 + }, + { + "name": "Raised Island Courtyard Lower Chest", + "short_name": "Island", + "access_rules": [ + "$access_location|Forest Temple MQ NE Outdoors Ledge|Forest Temple MQ Raised Island Courtyard Lower Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Basement Chest", + "short_name": "Basement", + "access_rules": [ + "$access_location|Forest Temple MQ Boss Region|Forest Temple MQ Basement Chest" + ], + "item_count": 1 + }, + { + "name": "Phantom Ganon", + "access_rules": [ + "$access_location|Forest Temple MQ Boss Region|Phantom Ganon" + ], + "hosted_item": "forest", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "forest_reg" + ], + "size": 40, + "x": 75, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "forest_reg" + ], + "size": 40, + "x": 75, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "forest_reg" + ], + "size": 40, + "x": 75, + "y": 1350 + } + ] + }, + { + "name": "Ganons Castle", + "sections": [ + { + "name": "Forest Trial Chest", + "short_name": "Forest Trial", + "access_rules": [ + "$access_location|Ganons Castle Forest Trial|Ganons Castle Forest Trial Chest" + ], + "item_count": 1 + }, + { + "name": "Forest Trial Clear", + "short_name": "Forest Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_forest" + }, + { + "name": "Water Trial Chests", + "short_name": "Water Trial", + "access_rules": [ + "$access_location|Ganons Castle Water Trial|Ganons Castle Water Trial Chests" + ], + "item_count": 2 + }, + { + "name": "Water Trial Clear", + "short_name": "Water Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_water" + }, + { + "name": "Shadow Trial Front Chest", + "short_name": "Shadow Trial 1", + "access_rules": [ + "$access_location|Ganons Castle Shadow Trial|Ganons Castle Shadow Trial Front Chest" + ], + "item_count": 1 + }, + { + "name": "Shadow Trial Golden Gauntlets Chest", + "short_name": "Shadow Trial 2", + "access_rules": [ + "$access_location|Ganons Castle Shadow Trial|Ganons Castle Shadow Trial Golden Gauntlets Chest" + ], + "item_count": 1 + }, + { + "name": "Shadow Trial Clear", + "short_name": "Shadow Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_shadow" + }, + { + "name": "Fire Trial Clear", + "short_name": "Fire Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_fire" + }, + { + "name": "Light Trial Chests", + "short_name": "Light Trial Front", + "access_rules": [ + "$access_location|Ganons Castle Light Trial|Ganons Castle Light Trial Chests" + ], + "item_count": 6 + }, + { + "name": "Light Trial Invisible Enemies Chest", + "short_name": "Light Trial Enemies", + "access_rules": [ + "$access_location|Ganons Castle Light Trial|Ganons Castle Light Trial Invisible Enemies Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Light Trial Lullaby Chest", + "short_name": "Light Trial Lullaby", + "access_rules": [ + "$access_location|Ganons Castle Light Trial|Ganons Castle Light Trial Lullaby Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Light Trial Clear", + "short_name": "Light Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_light" + }, + { + "name": "Spirit Trial Crystal Switch Chest", + "short_name": "Spirit Trial 1", + "access_rules": [ + "$access_location|Ganons Castle Spirit Trial|Ganons Castle Spirit Trial Crystal Switch Chest" + ], + "item_count": 1 + }, + { + "name": "Spirit Trial Invisible Chest", + "short_name": "Spirit Trial 2", + "access_rules": [ + "$access_location|Ganons Castle Spirit Trial|Ganons Castle Spirit Trial Invisible Chest" + ], + "item_count": 1 + }, + { + "name": "Spirit Trial Clear", + "short_name": "Spirit Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_spirit" + }, + { + "name": "Deku Scrubs", + "access_rules": [ + "$access_location|Ganons Castle Deku Scrubs|Ganons Castle Deku Scrubs" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "clear_as_group": false, + "item_count": 4 + }, + { + "name": "Ganons Tower Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Ganons Castle Tower|Ganons Tower Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "gc_mq" + ], + "size": 40, + "x": 530, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "gc_mq" + ], + "size": 40, + "x": 530, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "gc_mq" + ], + "size": 40, + "x": 530, + "y": 1350 + } + ] + }, + { + "name": "Ganons Castle MQ", + "sections": [ + { + "name": "Forest Trial Freestanding Key", + "short_name": "Forest Trial Key", + "access_rules": [ + "$access_location|Ganons Castle MQ Forest Trial|Ganons Castle MQ Forest Trial Freestanding Key" + ], + "capture_item": true, + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "Forest Trial Eye Switch Chest", + "short_name": "Forest Trial 1", + "access_rules": [ + "$access_location|Ganons Castle MQ Forest Trial|Ganons Castle MQ Forest Trial Eye Switch Chest" + ], + "item_count": 1 + }, + { + "name": "Forest Trial Frozen Eye Switch Chest", + "short_name": "Forest Trial 2", + "access_rules": [ + "$access_location|Ganons Castle MQ Forest Trial|Ganons Castle MQ Forest Trial Frozen Eye Switch Chest" + ], + "item_count": 1 + }, + { + "name": "Forest Trial Clear", + "short_name": "Forest Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_forest" + }, + { + "name": "Water Trial Chest", + "short_name": "Water Trial", + "access_rules": [ + "$access_location|Ganons Castle MQ Water Trial|Ganons Castle MQ Water Trial Chest" + ], + "item_count": 1 + }, + { + "name": "Water Trial Clear", + "short_name": "Water Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_water" + }, + { + "name": "Shadow Trial Bomb Flower Chest", + "short_name": "Shadow Trial 1", + "access_rules": [ + "$access_location|Ganons Castle MQ Shadow Trial|Ganons Castle MQ Shadow Trial Bomb Flower Chest" + ], + "item_count": 1 + }, + { + "name": "Shadow Trial Eye Switch Chest", + "short_name": "Shadow Trial 2", + "access_rules": [ + "$access_location|Ganons Castle MQ Shadow Trial|Ganons Castle MQ Shadow Trial Eye Switch Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Shadow Trial Clear", + "short_name": "Shadow Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_shadow" + }, + { + "name": "Fire Trial Clear", + "short_name": "Fire Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_fire" + }, + { + "name": "Light Trial Lullaby Chest", + "short_name": "Light Trial", + "access_rules": [ + "$access_location|Ganons Castle MQ Light Trial|Ganons Castle MQ Light Trial Lullaby Chest" + ], + "item_count": 1 + }, + { + "name": "Light Trial Clear", + "short_name": "Light Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_light" + }, + { + "name": "Spirit Trial First Chest", + "short_name": "Spirit Trial 1", + "access_rules": [ + "$access_location|Ganons Castle MQ Spirit Trial|Ganons Castle MQ Spirit Trial First Chest" + ], + "item_count": 1 + }, + { + "name": "Spirit Trial Invisible Chest", + "short_name": "Spirit Trial 2", + "access_rules": [ + "$access_location|Ganons Castle MQ Spirit Trial|Ganons Castle MQ Spirit Trial Invisible Chest" + ], + "item_count": 1 + }, + { + "name": "Spirit Trial Sun Chests", + "short_name": "Spirit Trial Sun", + "access_rules": [ + "$access_location|Ganons Castle MQ Spirit Trial|Ganons Castle MQ Spirit Trial Sun Chests" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 4 + }, + { + "name": "Spirit Trial Clear", + "short_name": "Spirit Trial", + "visibility_rules": [ + "setting_trials:1" + ], + "hosted_item": "trial_spirit" + }, + { + "name": "Deku Scrubs", + "access_rules": [ + "$access_location|Ganons Castle MQ Deku Scrubs|Ganons Castle MQ Deku Scrubs" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "clear_as_group": false, + "item_count": 5 + }, + { + "name": "Ganons Tower Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Ganons Castle Tower|Ganons Tower Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "gc_reg" + ], + "size": 40, + "x": 575, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "gc_reg" + ], + "size": 40, + "x": 575, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "gc_reg" + ], + "size": 40, + "x": 575, + "y": 1350 + } + ] + }, + { + "name": "Gerudo Training Grounds", + "sections": [ + { + "name": "Lobby Chests", + "short_name": "Lobby", + "access_rules": [ + "$access_location|Gerudo Training Grounds Lobby|Gerudo Training Grounds Lobby Chests" + ], + "item_count": 2 + }, + { + "name": "Beamos Chest", + "short_name": "Beamos", + "access_rules": [ + "$access_location|Gerudo Training Grounds Lobby|Gerudo Training Grounds Beamos Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Stalfos Chest", + "short_name": "Stalfos", + "access_rules": [ + "$access_location|Gerudo Training Grounds Lobby|Gerudo Training Grounds Stalfos Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Before Heavy Block Chest", + "short_name": "Wolfos", + "access_rules": [ + "$access_location|Gerudo Training Grounds Heavy Block Room|Gerudo Training Grounds Before Heavy Block Chest" + ], + "item_count": 1 + }, + { + "name": "Heavy Block Chests", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Gerudo Training Grounds Like Like Room|Gerudo Training Grounds Heavy Block Chests" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 4 + }, + { + "name": "Eye Statue Chest", + "short_name": "Eye Statue", + "access_rules": [ + "$access_location|Gerudo Training Grounds Eye Statue Lower|Gerudo Training Grounds Eye Statue Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Near Scarecrow Chest", + "short_name": "Near Scarecrow", + "access_rules": [ + "$access_location|Gerudo Training Grounds Eye Statue Upper|Gerudo Training Grounds Near Scarecrow Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Hammer Room Clear Chest", + "short_name": "Flaming Enemies", + "access_rules": [ + "$access_location|Gerudo Training Grounds Hammer Room|Gerudo Training Grounds Hammer Room Clear Chest" + ], + "item_count": 1 + }, + { + "name": "Hammer Room Switch Chest", + "short_name": "Hammer Switch", + "access_rules": [ + "$access_location|Gerudo Training Grounds Hammer Room|Gerudo Training Grounds Hammer Room Switch Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Freestanding Key", + "short_name": "Ledge Key", + "access_rules": [ + "$access_location|Gerudo Training Grounds Central Maze Right|Gerudo Training Grounds Freestanding Key" + ], + "capture_item": true, + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "Maze Right Chests", + "short_name": "Maze Right", + "access_rules": [ + "$access_location|Gerudo Training Grounds Central Maze Right|Gerudo Training Grounds Maze Right Chests" + ], + "item_count": 2 + }, + { + "name": "Underwater Silver Rupee Chest", + "short_name": "Toilet", + "access_rules": [ + "$access_location|Gerudo Training Grounds Lava Room|Gerudo Training Grounds Underwater Silver Rupee Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Hidden Ceiling Chest", + "short_name": "Hidden Ceiling", + "access_rules": [ + "$access_location|Gerudo Training Grounds Central Maze|Gerudo Training Grounds Hidden Ceiling Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Maze Path First Chest", + "short_name": "Maze 1", + "access_rules": [ + "$access_location|Gerudo Training Grounds Central Maze|Gerudo Training Grounds Maze Path First Chest" + ], + "item_count": 1 + }, + { + "name": "Maze Path Second Chest", + "short_name": "Maze 2", + "access_rules": [ + "$access_location|Gerudo Training Grounds Central Maze|Gerudo Training Grounds Maze Path Second Chest" + ], + "item_count": 1 + }, + { + "name": "Maze Path Third Chest", + "short_name": "Maze 3", + "access_rules": [ + "$access_location|Gerudo Training Grounds Central Maze|Gerudo Training Grounds Maze Path Third Chest" + ], + "item_count": 1 + }, + { + "name": "Maze Path Final Chest", + "short_name": "Ice Arrows", + "access_rules": [ + "$access_location|Gerudo Training Grounds Central Maze|Gerudo Training Grounds Maze Path Final Chest" + ], + "capture_item": true, + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "gtg_mq" + ], + "size": 40, + "x": 330, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "gtg_mq" + ], + "size": 40, + "x": 330, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "gtg_mq" + ], + "size": 40, + "x": 330, + "y": 1465 + } + ] + }, + { + "name": "Gerudo Training Grounds MQ", + "sections": [ + { + "name": "Lobby Chests", + "short_name": "Lobby", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Lobby|Gerudo Training Grounds MQ Lobby Chests" + ], + "item_count": 2 + }, + { + "name": "First Iron Knuckle Chest", + "short_name": "Knuckle 1", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Left Side|Gerudo Training Grounds MQ First Iron Knuckle Chest" + ], + "item_count": 1 + }, + { + "name": "Before Heavy Block Chest", + "short_name": "Stalfos", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Stalfos Room|Gerudo Training Grounds MQ Before Heavy Block Chest" + ], + "item_count": 1 + }, + { + "name": "Heavy Block Chest", + "short_name": "Freezards", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Stalfos Room|Gerudo Training Grounds MQ Heavy Block Chest" + ], + "item_count": 1 + }, + { + "name": "Eye Statue Chest", + "short_name": "Eye Statue", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Back Areas|Gerudo Training Grounds MQ Eye Statue Chest" + ], + "item_count": 1 + }, + { + "name": "Second Iron Knuckle Chest", + "short_name": "Knuckle 2", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Back Areas|Gerudo Training Grounds MQ Second Iron Knuckle Chest" + ], + "item_count": 1 + }, + { + "name": "Flame Circle Chest", + "short_name": "Flame Circle", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Back Areas|Gerudo Training Grounds MQ Flame Circle Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Maze Right Chests", + "short_name": "Maze Right", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Central Maze Right|Gerudo Training Grounds MQ Maze Right Chests" + ], + "item_count": 2 + }, + { + "name": "Dinolfos Chest", + "short_name": "Dinolfos", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Right Side|Gerudo Training Grounds MQ Dinolfos Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Underwater Silver Rupee Chest", + "short_name": "Toilet", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Underwater|Gerudo Training Grounds MQ Underwater Silver Rupee Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Hidden Ceiling Chest", + "short_name": "Hidden Ceiling", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Lobby|Gerudo Training Grounds MQ Hidden Ceiling Chest" + ], + "item_count": 1 + }, + { + "name": "Maze Path First Chest", + "short_name": "Maze 1", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Lobby|Gerudo Training Grounds MQ Maze Path First Chest" + ], + "item_count": 1 + }, + { + "name": "Maze Path Second Chest", + "short_name": "Maze 2", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Lobby|Gerudo Training Grounds MQ Maze Path Second Chest" + ], + "item_count": 1 + }, + { + "name": "Maze Path Third Chest", + "short_name": "Maze 3", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Lobby|Gerudo Training Grounds MQ Maze Path Third Chest" + ], + "item_count": 1 + }, + { + "name": "Ice Arrows Chest", + "short_name": "Ice Arrows", + "access_rules": [ + "$access_location|Gerudo Training Grounds MQ Central Maze Right|Gerudo Training Grounds MQ Ice Arrows Chest" + ], + "capture_item": true, + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "gtg_reg" + ], + "size": 40, + "x": 375, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "gtg_reg" + ], + "size": 40, + "x": 375, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "gtg_reg" + ], + "size": 40, + "x": 375, + "y": 1465 + } + ] + }, + { + "name": "Ice Cavern", + "sections": [ + { + "name": "GS Spinning Scythe Room", + "short_name": "Spinning Scythe", + "access_rules": [ + "$access_location|Ice Cavern|Ice Cavern GS Spinning Scythe Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Ice Cavern|Ice Cavern Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Ice Cavern|Ice Cavern Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Freestanding PoH", + "short_name": "Frozen HP", + "access_rules": [ + "$access_location|Ice Cavern|Ice Cavern Freestanding PoH" + ], + "chest_unopened_img": "images/HP.png", + "chest_opened_img": "images/HP_grey.png", + "item_count": 1 + }, + { + "name": "GS Heart Piece Room", + "short_name": "Compass", + "access_rules": [ + "$access_location|Ice Cavern|Ice Cavern GS Heart Piece Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Push Block Room", + "short_name": "Push Block", + "access_rules": [ + "$access_location|Ice Cavern|Ice Cavern GS Push Block Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Iron Boots Chest", + "short_name": "Iron Boots", + "access_rules": [ + "$access_location|Ice Cavern|Ice Cavern Iron Boots Chest" + ], + "item_count": 1 + }, + { + "name": "Sheik in Ice Cavern", + "short_name": "Song", + "access_rules": [ + "$access_location|Ice Cavern|Sheik in Ice Cavern" + ], + "capture_item": true, + "chest_unopened_img": "images/grey_note.png", + "chest_opened_img": "images/grey_note_check.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "ice_mq" + ], + "size": 40, + "x": 530, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "ice_mq" + ], + "size": 40, + "x": 530, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "ice_mq" + ], + "size": 40, + "x": 530, + "y": 1465 + } + ] + }, + { + "name": "Ice Cavern MQ", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Ice Cavern MQ Map Room|Ice Cavern MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Ice Cavern MQ Compass Room|Ice Cavern MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Freestanding PoH", + "short_name": "Frozen HP", + "access_rules": [ + "$access_location|Ice Cavern MQ Compass Room|Ice Cavern MQ Freestanding PoH" + ], + "capture_item": true, + "chest_unopened_img": "images/HP.png", + "chest_opened_img": "images/HP_grey.png", + "item_count": 1 + }, + { + "name": "GS Red Ice", + "short_name": "Red Ice", + "access_rules": [ + "$access_location|Ice Cavern MQ Compass Room|Ice Cavern MQ GS Red Ice" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Scarecrow", + "short_name": "Scarecrow", + "access_rules": [ + "$access_location|Ice Cavern MQ Iron Boots Region|Ice Cavern MQ GS Scarecrow" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Ice Block", + "short_name": "Ice Block", + "access_rules": [ + "$access_location|Ice Cavern MQ Iron Boots Region|Ice Cavern MQ GS Ice Block" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Iron Boots Chest", + "short_name": "Iron Boots", + "access_rules": [ + "$access_location|Ice Cavern MQ Iron Boots Region|Ice Cavern MQ Iron Boots Chest" + ], + "item_count": 1 + }, + { + "name": "Sheik in Ice Cavern", + "short_name": "Song", + "access_rules": [ + "$access_location|Ice Cavern MQ Iron Boots Region|Sheik in Ice Cavern" + ], + "capture_item": true, + "chest_unopened_img": "images/grey_note.png", + "chest_opened_img": "images/grey_note_check.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "ice_reg" + ], + "size": 40, + "x": 575, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "ice_reg" + ], + "size": 40, + "x": 575, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "ice_reg" + ], + "size": 40, + "x": 575, + "y": 1465 + } + ] + }, + { + "name": "Jabu Jabus Belly", + "sections": [ + { + "name": "GS Water Switch Room", + "short_name": "Water Switch", + "access_rules": [ + "$access_location|Jabu Jabus Belly Main|Jabu Jabus Belly GS Water Switch Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Deku Scrub", + "access_rules": [ + "$access_location|Jabu Jabus Belly Main|Jabu Jabus Belly Deku Scrub" + ], + "visibility_rules": [ + "setting_scrub_shuffle_yes" + ], + "chest_unopened_img": "images/deku_scrub.png", + "chest_opened_img": "images/deku_scrub_grey.png", + "item_count": 1 + }, + { + "name": "Boomerang Chest", + "short_name": "Boomerang", + "access_rules": [ + "$access_location|Jabu Jabus Belly Main|Jabu Jabus Belly Boomerang Chest" + ], + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Jabu Jabus Belly Depths|Jabu Jabus Belly Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Jabu Jabus Belly Depths|Jabu Jabus Belly Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "GS Lobby Basement Lower", + "short_name": "Basement 1", + "access_rules": [ + "$access_location|Jabu Jabus Belly Main|Jabu Jabus Belly GS Lobby Basement Lower" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Lobby Basement Upper", + "short_name": "Basement 2", + "access_rules": [ + "$access_location|Jabu Jabus Belly Main|Jabu Jabus Belly GS Lobby Basement Upper" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Near Boss", + "short_name": "Near Boss", + "access_rules": [ + "$access_location|Jabu Jabus Belly Boss Area|Jabu Jabus Belly GS Near Boss" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Barinade", + "access_rules": [ + "$access_location|Jabu Jabus Belly Boss Area|Barinade" + ], + "hosted_item": "jabu", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "jabu_mq" + ], + "size": 40, + "x": 230, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "jabu_mq" + ], + "size": 40, + "x": 230, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "jabu_mq" + ], + "size": 40, + "x": 230, + "y": 1465 + } + ] + }, + { + "name": "Jabu Jabus Belly MQ", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Beginning|Jabu Jabus Belly MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "First Room Side Chest", + "short_name": "First Room", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Beginning|Jabu Jabus Belly MQ First Room Side Chest" + ], + "item_count": 1 + }, + { + "name": "Second Room Lower Chest", + "short_name": "Second Room Lower", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Main|Jabu Jabus Belly MQ Second Room Lower Chest" + ], + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Main|Jabu Jabus Belly MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Basement Chests", + "short_name": "Basement", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Main|Jabu Jabus Belly MQ Basement Chests" + ], + "item_count": 2 + }, + { + "name": "Boomerang Room Chests", + "short_name": "Boomerang", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Main|Jabu Jabus Belly MQ Boomerang Room Chests" + ], + "item_count": 2 + }, + { + "name": "GS Boomerang Chest Room", + "short_name": "Boomerang", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Main|Jabu Jabus Belly MQ GS Boomerang Chest Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Falling Like Like Room Chest", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Depths|Jabu Jabus Belly MQ Falling Like Like Room Chest" + ], + "item_count": 1 + }, + { + "name": "GS Tailpasaran Room", + "short_name": "Tailpasaran", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Depths|Jabu Jabus Belly MQ GS Tailpasaran Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Invisible Enemies Room", + "short_name": "Invis Enemies", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Depths|Jabu Jabus Belly MQ GS Invisible Enemies Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Cow", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Boss Area|Jabu Jabus Belly MQ Cow" + ], + "visibility_rules": [ + "setting_cowsanity_yes" + ], + "chest_unopened_img": "images/cow.png", + "chest_opened_img": "images/bottle_milk.png", + "item_count": 1 + }, + { + "name": "Second Room Upper Chest", + "short_name": "Second Room Upper", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Main|Jabu Jabus Belly MQ Second Room Upper Chest" + ], + "item_count": 1 + }, + { + "name": "GS Near Boss", + "short_name": "Near Boss", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Boss Area|Jabu Jabus Belly MQ GS Near Boss" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Near Boss Chest", + "short_name": "Near Boss", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Boss Area|Jabu Jabus Belly MQ Near Boss Chest" + ], + "item_count": 1 + }, + { + "name": "Barinade", + "access_rules": [ + "$access_location|Jabu Jabus Belly MQ Boss Area|Barinade" + ], + "hosted_item": "jabu", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "jabu_reg" + ], + "size": 40, + "x": 275, + "y": 1465 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "jabu_reg" + ], + "size": 40, + "x": 275, + "y": 1465 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "jabu_reg" + ], + "size": 40, + "x": 275, + "y": 1465 + } + ] + }, + { + "name": "Shadow Temple", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Shadow Temple Beginning|Shadow Temple Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Hover Boots Chest", + "short_name": "Dead Hand", + "access_rules": [ + "$access_location|Shadow Temple Beginning|Shadow Temple Hover Boots Chest" + ], + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Shadow Temple First Beamos|Shadow Temple Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Early Silver Rupee Chest", + "short_name": "Early Silver Rupee", + "access_rules": [ + "$access_location|Shadow Temple First Beamos|Shadow Temple Early Silver Rupee Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Invisible Blades Chests", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple Invisible Blades Chests" + ], + "item_count": 2 + }, + { + "name": "GS Like Like Room", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple GS Like Like Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Falling Spikes Lower Chest", + "short_name": "Crusher Lower", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple Falling Spikes Lower Chest" + ], + "item_count": 1 + }, + { + "name": "GS Falling Spikes Room", + "short_name": "Crusher", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple GS Falling Spikes Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Falling Spikes Upper Chests", + "short_name": "Crusher Upper", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple Falling Spikes Upper Chests" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 2 + }, + { + "name": "Invisible Spikes Chest", + "short_name": "Invisible Spikes", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple Invisible Spikes Chest" + ], + "item_count": 1 + }, + { + "name": "Freestanding Key", + "short_name": "Skull Pot", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple Freestanding Key" + ], + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "GS Single Giant Pot", + "short_name": "Single Skull", + "access_rules": [ + "$access_location|Shadow Temple Huge Pit|Shadow Temple GS Single Giant Pot" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Wind Hint Chest", + "short_name": "Wind Hint", + "access_rules": [ + "$access_location|Shadow Temple Wind Tunnel|Shadow Temple Wind Hint Chest" + ], + "item_count": 1 + }, + { + "name": "After Wind Chests", + "short_name": "After Wind", + "access_rules": [ + "$access_location|Shadow Temple Wind Tunnel|Shadow Temple After Wind Chests" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 2 + }, + { + "name": "GS Near Ship", + "short_name": "Near Boat", + "access_rules": [ + "$access_location|Shadow Temple Wind Tunnel|Shadow Temple GS Near Ship" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Shadow Temple Beyond Boat|Shadow Temple Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Spike Walls Left Chest", + "short_name": "Near Boss Key", + "access_rules": [ + "$access_location|Shadow Temple Beyond Boat|Shadow Temple Spike Walls Left Chest" + ], + "item_count": 1 + }, + { + "name": "GS Triple Giant Pot", + "short_name": "Triple Skull", + "access_rules": [ + "$access_location|Shadow Temple Beyond Boat|Shadow Temple GS Triple Giant Pot" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Invisible Floormaster Chest", + "short_name": "Floormaster", + "access_rules": [ + "$access_location|Shadow Temple Beyond Boat|Shadow Temple Invisible Floormaster Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Bongo Bongo", + "access_rules": [ + "$access_location|Shadow Temple Beyond Boat|Bongo Bongo" + ], + "hosted_item": "shadow", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "shadow_mq" + ], + "size": 40, + "x": 430, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "shadow_mq" + ], + "size": 40, + "x": 430, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "shadow_mq" + ], + "size": 40, + "x": 430, + "y": 1350 + } + ] + }, + { + "name": "Shadow Temple MQ", + "sections": [ + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Shadow Temple MQ Dead Hand Area|Shadow Temple MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Hover Boots Chest", + "short_name": "Dead Hand 1", + "access_rules": [ + "$access_location|Shadow Temple MQ Dead Hand Area|Shadow Temple MQ Hover Boots Chest" + ], + "item_count": 1 + }, + { + "name": "Early Gibdos Chest", + "short_name": "Early Gibdos", + "access_rules": [ + "$access_location|Shadow Temple MQ First Beamos|Shadow Temple MQ Early Gibdos Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Shadow Temple MQ First Beamos|Shadow Temple MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Near Ship Invisible Chest", + "short_name": "Shortcut", + "access_rules": [ + "$access_location|Shadow Temple MQ First Beamos|Shadow Temple MQ Near Ship Invisible Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Invisible Blades Chests", + "short_name": "Like Like", + "access_rules": [ + "$access_location|Shadow Temple MQ Upper Huge Pit|Shadow Temple MQ Invisible Blades Chests" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 2 + }, + { + "name": "Beamos Silver Rupees Chest", + "short_name": "Beamos Silvers", + "access_rules": [ + "$access_location|Shadow Temple MQ Lower Huge Pit|Shadow Temple MQ Beamos Silver Rupees Chest" + ], + "item_count": 1 + }, + { + "name": "Falling Spikes Lower Chest", + "short_name": "Crusher Lower", + "access_rules": [ + "$access_location|Shadow Temple MQ Lower Huge Pit|Shadow Temple MQ Falling Spikes Lower Chest" + ], + "item_count": 1 + }, + { + "name": "GS Falling Spikes Room", + "short_name": "Crusher", + "access_rules": [ + "$access_location|Shadow Temple MQ Lower Huge Pit|Shadow Temple MQ GS Falling Spikes Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Falling Spikes Upper Chests", + "short_name": "Crusher Upper", + "access_rules": [ + "$access_location|Shadow Temple MQ Lower Huge Pit|Shadow Temple MQ Falling Spikes Upper Chests" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 2 + }, + { + "name": "Invisible Spikes Chest", + "short_name": "Invisible Spikes", + "access_rules": [ + "$access_location|Shadow Temple MQ Lower Huge Pit|Shadow Temple MQ Invisible Spikes Chest" + ], + "item_count": 1 + }, + { + "name": "Stalfos Room Chest", + "short_name": "Stalfos", + "access_rules": [ + "$access_location|Shadow Temple MQ Lower Huge Pit|Shadow Temple MQ Stalfos Room Chest" + ], + "item_count": 1 + }, + { + "name": "Wind Hint Chest", + "short_name": "Wind Hint", + "access_rules": [ + "$access_location|Shadow Temple MQ Wind Tunnel|Shadow Temple MQ Wind Hint Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Wind Hint Room", + "short_name": "Wind Hint", + "access_rules": [ + "$access_location|Shadow Temple MQ Wind Tunnel|Shadow Temple MQ GS Wind Hint Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "After Wind Chests", + "short_name": "After Wind", + "access_rules": [ + "$access_location|Shadow Temple MQ Wind Tunnel|Shadow Temple MQ After Wind Chests" + ], + "item_count": 2 + }, + { + "name": "GS After Wind", + "short_name": "After Wind", + "access_rules": [ + "$access_location|Shadow Temple MQ Wind Tunnel|Shadow Temple MQ GS After Wind" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS After Ship", + "short_name": "After Ship", + "access_rules": [ + "$access_location|Shadow Temple MQ Beyond Boat|Shadow Temple MQ GS After Ship" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Shadow Temple MQ Invisible Maze|Shadow Temple MQ Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Spike Walls Left Chest", + "short_name": "Near Boss Key", + "access_rules": [ + "$access_location|Shadow Temple MQ Invisible Maze|Shadow Temple MQ Spike Walls Left Chest" + ], + "item_count": 1 + }, + { + "name": "Freestanding Key", + "short_name": "Triple Skull", + "access_rules": [ + "$access_location|Shadow Temple MQ Invisible Maze|Shadow Temple MQ Freestanding Key" + ], + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "Bomb Flower Chest", + "short_name": "Dead Hand 2", + "access_rules": [ + "$access_location|Shadow Temple MQ Invisible Maze|Shadow Temple MQ Bomb Flower Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "GS Near Boss", + "short_name": "Near Boss", + "access_rules": [ + "$access_location|Shadow Temple MQ Beyond Boat|Shadow Temple MQ GS Near Boss" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Bongo Bongo", + "access_rules": [ + "$access_location|Shadow Temple MQ Beyond Boat|Bongo Bongo" + ], + "hosted_item": "shadow", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "shadow_reg" + ], + "size": 40, + "x": 475, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "shadow_reg" + ], + "size": 40, + "x": 475, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "shadow_reg" + ], + "size": 40, + "x": 475, + "y": 1350 + } + ] + }, + { + "name": "Spirit Temple", + "sections": [ + { + "name": "Child Bridge Chest", + "short_name": "Child Left", + "access_rules": [ + "$access_location|Child Spirit Temple|Spirit Temple Child Bridge Chest" + ], + "item_count": 1 + }, + { + "name": "Child Early Torches Chest", + "short_name": "Child Right", + "access_rules": [ + "$access_location|Child Spirit Temple|Spirit Temple Child Early Torches Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Metal Fence", + "short_name": "Metal Fence", + "access_rules": [ + "$access_location|Child Spirit Temple|Spirit Temple GS Metal Fence" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Child Climb Chests", + "short_name": "Child Climb", + "access_rules": [ + "$access_location|Child Spirit Temple Climb|Spirit Temple Child Climb Chests" + ], + "item_count": 2 + }, + { + "name": "GS Sun on Floor Room", + "short_name": "Child Climb", + "access_rules": [ + "$access_location|Child Spirit Temple Climb|Spirit Temple GS Sun on Floor Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Sun Block Room Chest", + "short_name": "Sun Block", + "access_rules": [ + "$access_location|Spirit Temple Central Chamber|Spirit Temple Sun Block Room Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Hall After Sun Block Room", + "short_name": "Before Knuckle", + "access_rules": [ + "$access_location|Spirit Temple Central Chamber|Spirit Temple GS Hall After Sun Block Room" + ], + "capture_item": true, + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Silver Gauntlets Chest", + "short_name": "Right Hand", + "access_rules": [ + "$access_location|Spirit Temple Outdoor Hands|Spirit Temple Silver Gauntlets Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Spirit Temple Central Chamber|Spirit Temple Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "GS Lobby", + "short_name": "Lobby", + "access_rules": [ + "$access_location|Spirit Temple Central Chamber|Spirit Temple GS Lobby" + ], + "capture_item": true, + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Early Adult Spirit Temple|Spirit Temple Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Early Adult Right Chest", + "short_name": "Boulders", + "access_rules": [ + "$access_location|Early Adult Spirit Temple|Spirit Temple Early Adult Right Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Boulder Room", + "short_name": "Boulders", + "access_rules": [ + "$access_location|Early Adult Spirit Temple|Spirit Temple GS Boulder Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "First Mirror Chests", + "short_name": "Mirror", + "access_rules": [ + "$access_location|Early Adult Spirit Temple|Spirit Temple First Mirror Chests" + ], + "item_count": 2 + }, + { + "name": "Statue Room Hand Chest", + "short_name": "Statue Hand", + "access_rules": [ + "$access_location|Spirit Temple Central Chamber|Spirit Temple Statue Room Hand Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Statue Room Northeast Chest", + "short_name": "Statue Ledge", + "access_rules": [ + "$access_location|Spirit Temple Central Chamber|Spirit Temple Statue Room Northeast Chest" + ], + "item_count": 1 + }, + { + "name": "Near Four Armos Chest", + "short_name": "Near Armos", + "access_rules": [ + "$access_location|Spirit Temple Beyond Central Locked Door|Spirit Temple Near Four Armos Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Hallway Invisible Chests", + "short_name": "Invisible Hallway", + "access_rules": [ + "$access_location|Spirit Temple Beyond Central Locked Door|Spirit Temple Hallway Invisible Chests" + ], + "item_count": 2 + }, + { + "name": "Mirror Shield Chest", + "short_name": "Left Hand", + "access_rules": [ + "$access_location|Spirit Temple Outdoor Hands|Spirit Temple Mirror Shield Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Spirit Temple Beyond Final Locked Door|Spirit Temple Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Topmost Chest", + "short_name": "Topmost Sun", + "access_rules": [ + "$access_location|Spirit Temple Beyond Final Locked Door|Spirit Temple Topmost Chest" + ], + "item_count": 1 + }, + { + "name": "Twinrova", + "access_rules": [ + "$access_location|Spirit Temple Beyond Final Locked Door|Twinrova" + ], + "hosted_item": "spirit", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "spirit_mq" + ], + "size": 40, + "x": 330, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "spirit_mq" + ], + "size": 40, + "x": 330, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "spirit_mq" + ], + "size": 40, + "x": 330, + "y": 1350 + } + ] + }, + { + "name": "Spirit Temple MQ", + "sections": [ + { + "name": "Entrance Front Left Chest", + "short_name": "Entry Front Left", + "access_rules": [ + "$access_location|Spirit Temple MQ Lobby|Spirit Temple MQ Entrance Front Left Chest" + ], + "item_count": 1 + }, + { + "name": "Entrance Back Left Chest", + "short_name": "Entry Back Left", + "access_rules": [ + "$access_location|Spirit Temple MQ Lobby|Spirit Temple MQ Entrance Back Left Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Entrance Back Right Chest", + "short_name": "Entry Back Right", + "access_rules": [ + "$access_location|Spirit Temple MQ Lobby|Spirit Temple MQ Entrance Back Right Chest" + ], + "item_count": 1 + }, + { + "name": "Map Room Enemy Chest", + "short_name": "Child Left", + "access_rules": [ + "$access_location|Child Spirit Temple MQ|Spirit Temple MQ Map Room Enemy Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Child Spirit Temple MQ|Spirit Temple MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Child Hammer Switch Chest", + "short_name": "Hammer Switch", + "access_rules": [ + "$access_location|Child Spirit Temple MQ|Spirit Temple MQ Child Hammer Switch Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Silver Block Hallway Chest", + "short_name": "Silver Block", + "access_rules": [ + "$access_location|Child Spirit Temple MQ|Spirit Temple MQ Silver Block Hallway Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Spirit Temple MQ Shared|Spirit Temple MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Sun Block Room Chest", + "short_name": "Sun Block", + "access_rules": [ + "$access_location|Spirit Temple MQ Shared|Spirit Temple MQ Sun Block Room Chest" + ], + "item_count": 1 + }, + { + "name": "GS Sun Block Room", + "short_name": "Sun Block", + "access_rules": [ + "$access_location|Spirit Temple MQ Shared|Spirit Temple MQ GS Sun Block Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Silver Gauntlets Chest", + "short_name": "Right Hand", + "access_rules": [ + "$access_location|Silver Gauntlets Hand MQ|Spirit Temple MQ Silver Gauntlets Chest" + ], + "item_count": 1 + }, + { + "name": "Child Climb North Chest", + "short_name": "Child Climb Ground", + "access_rules": [ + "$access_location|Spirit Temple MQ Shared|Spirit Temple MQ Child Climb North Chest" + ], + "item_count": 1 + }, + { + "name": "Child Climb South Chest", + "short_name": "Child Climb Ledge", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ Child Climb South Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Statue Room Lullaby Chest", + "short_name": "Statue Boxes", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ Statue Room Lullaby Chest" + ], + "item_count": 1 + }, + { + "name": "Statue Room Invisible Chest", + "short_name": "Statue Ledge", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ Statue Room Invisible Chest" + ], + "item_count": 1 + }, + { + "name": "Leever Room Chest", + "short_name": "Leever", + "access_rules": [ + "$access_location|Lower Adult Spirit Temple MQ|Spirit Temple MQ Leever Room Chest" + ], + "item_count": 1 + }, + { + "name": "GS Leever Room", + "short_name": "Leever", + "access_rules": [ + "$access_location|Lower Adult Spirit Temple MQ|Spirit Temple MQ GS Leever Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Symphony Room Chest", + "short_name": "Symphony", + "access_rules": [ + "$access_location|Lower Adult Spirit Temple MQ|Spirit Temple MQ Symphony Room Chest" + ], + "capture_item": true, + "item_count": 1 + }, + { + "name": "GS Symphony Room", + "short_name": "Symphony", + "access_rules": [ + "$access_location|Lower Adult Spirit Temple MQ|Spirit Temple MQ GS Symphony Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Entrance Front Right Chest", + "short_name": "Entry Front Right", + "access_rules": [ + "$access_location|Lower Adult Spirit Temple MQ|Spirit Temple MQ Entrance Front Right Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Beamos Room Chest", + "short_name": "Beamos", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ Beamos Room Chest" + ], + "item_count": 1 + }, + { + "name": "Chest Switch Chest", + "short_name": "Chest Switch", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ Chest Switch Chest" + ], + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ Boss Key Chest" + ], + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Mirror Shield Chest", + "short_name": "Left Hand", + "access_rules": [ + "$access_location|Mirror Shield Hand MQ|Spirit Temple MQ Mirror Shield Chest" + ], + "item_count": 1 + }, + { + "name": "GS Nine Thrones Room North", + "short_name": "Iron Knuckle 1", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ GS Nine Thrones Room North" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Nine Thrones Room West", + "short_name": "Iron Knuckle 2", + "access_rules": [ + "$access_location|Adult Spirit Temple MQ|Spirit Temple MQ GS Nine Thrones Room West" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Mirror Puzzle Invisible Chest", + "short_name": "Mirror Puzzle", + "access_rules": [ + "$access_location|Spirit Temple MQ Boss Area|Spirit Temple MQ Mirror Puzzle Invisible Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Twinrova", + "access_rules": [ + "$access_location|Spirit Temple MQ Boss Area|Twinrova" + ], + "hosted_item": "spirit", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "spirit_reg" + ], + "size": 40, + "x": 375, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "spirit_reg" + ], + "size": 40, + "x": 375, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "spirit_reg" + ], + "size": 40, + "x": 375, + "y": 1350 + } + ] + }, + { + "name": "Water Temple", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Water Temple Dive|Water Temple Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Cracked Wall Chest", + "short_name": "Cracked Wall", + "access_rules": [ + "$access_location|Water Temple Cracked Wall|Water Temple Cracked Wall Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Torches Chest", + "short_name": "Torches", + "access_rules": [ + "$access_location|Water Temple Dive|Water Temple Torches Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Behind Gate", + "short_name": "South Basement", + "access_rules": [ + "$access_location|Water Temple Dive|Water Temple GS Behind Gate" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Water Temple Dive|Water Temple Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "Central Bow Target Chest", + "short_name": "Central Bow Target", + "access_rules": [ + "$access_location|Water Temple Dive|Water Temple Central Bow Target Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Central Pillar", + "short_name": "Central Pillar", + "access_rules": [ + "$access_location|Water Temple Dive|Water Temple GS Central Pillar" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Central Pillar Chest", + "short_name": "Central Pillar", + "access_rules": [ + "$access_location|Water Temple Middle Water Level|Water Temple Central Pillar Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Falling Platform Room", + "short_name": "Platform Room", + "access_rules": [ + "$access_location|Water Temple Falling Platform Room|Water Temple GS Falling Platform Room" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Longshot Chest", + "short_name": "Longshot", + "access_rules": [ + "$access_location|Water Temple Dark Link Region|Water Temple Longshot Chest" + ], + "item_count": 1 + }, + { + "name": "GS River", + "short_name": "River", + "access_rules": [ + "$access_location|Water Temple Dark Link Region|Water Temple GS River" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "River Chest", + "short_name": "River", + "access_rules": [ + "$access_location|Water Temple Dark Link Region|Water Temple River Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "Dragon Chest", + "short_name": "Dragon", + "access_rules": [ + "$access_location|Water Temple Dragon Statue|Water Temple Dragon Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS Near Boss Key Chest", + "short_name": "Near Boss Key", + "access_rules": [ + "$access_location|Water Temple North Basement|Water Temple GS Near Boss Key Chest" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Water Temple North Basement|Water Temple Boss Key Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Morpha", + "access_rules": [ + "$access_location|Water Temple Highest Water Level|Morpha" + ], + "hosted_item": "water", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "water_mq" + ], + "size": 40, + "x": 230, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "water_mq" + ], + "size": 40, + "x": 230, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "water_mq" + ], + "size": 40, + "x": 230, + "y": 1350 + } + ] + }, + { + "name": "Water Temple MQ", + "sections": [ + { + "name": "Map Chest", + "short_name": "Map", + "access_rules": [ + "$access_location|Water Temple MQ Dive|Water Temple MQ Map Chest" + ], + "chest_unopened_img": "images/chest_brown_map.png", + "item_count": 1 + }, + { + "name": "Longshot Chest", + "short_name": "Longshot", + "access_rules": [ + "$access_location|Water Temple MQ Lowered Water Levels|Water Temple MQ Longshot Chest" + ], + "item_count": 1 + }, + { + "name": "Compass Chest", + "short_name": "Compass", + "access_rules": [ + "$access_location|Water Temple MQ Lowered Water Levels|Water Temple MQ Compass Chest" + ], + "chest_unopened_img": "images/chest_brown_compass.png", + "item_count": 1 + }, + { + "name": "GS Lizalfos Hallway", + "short_name": "Lizalfos", + "access_rules": [ + "$access_location|Water Temple MQ Lowered Water Levels|Water Temple MQ GS Lizalfos Hallway" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Before Upper Water Switch", + "short_name": "Before Upper Water Switch", + "access_rules": [ + "$access_location|Water Temple MQ Lowered Water Levels|Water Temple MQ GS Before Upper Water Switch" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Central Pillar Chest", + "short_name": "Central Pillar", + "access_rules": [ + "$access_location|Water Temple MQ Dive|Water Temple MQ Central Pillar Chest" + ], + "chest_unopened_img": "images/chest_brown_small_key.png", + "item_count": 1 + }, + { + "name": "GS River", + "short_name": "River", + "access_rules": [ + "$access_location|Water Temple MQ Dark Link Region|Water Temple MQ GS River" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Boss Key Chest", + "short_name": "Boss Key", + "access_rules": [ + "$access_location|Water Temple MQ Dark Link Region|Water Temple MQ Boss Key Chest" + ], + "capture_item": true, + "chest_unopened_img": "images/chest_golden_closed.png", + "chest_opened_img": "images/chest_golden_open.png", + "item_count": 1 + }, + { + "name": "Freestanding Key", + "short_name": "Key", + "access_rules": [ + "$access_location|Water Temple MQ Basement Gated Areas|Water Temple MQ Freestanding Key" + ], + "capture_item": true, + "chest_unopened_img": "images/small_key.png", + "chest_opened_img": "images/small_key_check.png", + "item_count": 1 + }, + { + "name": "GS Freestanding Key Area", + "short_name": "North Basement", + "access_rules": [ + "$access_location|Water Temple MQ Basement Gated Areas|Water Temple MQ GS Freestanding Key Area" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "GS Triple Wall Torch", + "short_name": "South Basement", + "access_rules": [ + "$access_location|Water Temple MQ Basement Gated Areas|Water Temple MQ GS Triple Wall Torch" + ], + "visibility_rules": [ + "setting_tokens_dungeons" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + }, + { + "name": "Morpha", + "access_rules": [ + "$access_location|Water Temple MQ Lobby|Morpha" + ], + "hosted_item": "water", + "chest_unopened_img": "images/HC.png", + "chest_opened_img": "images/HC_grey.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "overworldchecks", + "force_invisibility_rules": [ + "water_reg" + ], + "size": 40, + "x": 275, + "y": 1350 + }, + { + "map": "entrances", + "force_invisibility_rules": [ + "water_reg" + ], + "size": 40, + "x": 275, + "y": 1350 + }, + { + "map": "connectors", + "force_invisibility_rules": [ + "water_reg" + ], + "size": 40, + "x": 275, + "y": 1350 } ] } diff --git a/ootrando_overworldmap_hamsda/manifest.json b/ootrando_overworldmap_hamsda/manifest.json index 657f231e..56d2dc91 100644 --- a/ootrando_overworldmap_hamsda/manifest.json +++ b/ootrando_overworldmap_hamsda/manifest.json @@ -1,7 +1,7 @@ { "name": "OoT Randomizer - Map and Item Tracker", "game_name": "Ocarina of Time Randomizer", - "package_version": "3.2.2.0", + "package_version": "3.3.0.0", "package_uid": "ootrando_overworldmap_hamsda", "author": "Hamsda", "variants": { diff --git a/ootrando_overworldmap_hamsda/maps/maps.json b/ootrando_overworldmap_hamsda/maps/maps.json index 683f9066..2ee5404d 100644 --- a/ootrando_overworldmap_hamsda/maps/maps.json +++ b/ootrando_overworldmap_hamsda/maps/maps.json @@ -3,12 +3,12 @@ "name": "child", "location_size": 35, "location_border_thickness": 5, - "img": "images/overworld_spawns.png" + "img": "images/map_spawns.png" }, { "name": "adult", "location_size": 35, "location_border_thickness": 5, - "img": "images/overworld_spawns.png" + "img": "images/map_spawns.png" } ] \ No newline at end of file diff --git a/ootrando_overworldmap_hamsda/maps/maps_entrance.json b/ootrando_overworldmap_hamsda/maps/maps_entrance.json index 847b575e..37c60f8a 100644 --- a/ootrando_overworldmap_hamsda/maps/maps_entrance.json +++ b/ootrando_overworldmap_hamsda/maps/maps_entrance.json @@ -3,18 +3,18 @@ "name": "overworldchecks", "location_size": 35, "location_border_thickness": 5, - "img": "images/overworld_entrance.png" + "img": "images/map_entrance.png" }, { "name": "entrances", "location_size": 35, "location_border_thickness": 5, - "img": "images/overworld_entrance.png" + "img": "images/map_entrance.png" }, { "name": "connectors", "location_size": 35, "location_border_thickness": 5, - "img": "images/overworld_entrance.png" + "img": "images/map_entrance.png" } ] \ No newline at end of file diff --git a/ootrando_overworldmap_hamsda/scripts/init.lua b/ootrando_overworldmap_hamsda/scripts/init.lua index 64d93851..1af624c0 100644 --- a/ootrando_overworldmap_hamsda/scripts/init.lua +++ b/ootrando_overworldmap_hamsda/scripts/init.lua @@ -56,7 +56,7 @@ end variant = Tracker.ActiveVariantUID has_map = variant ~= "var_minimalist" and (not variant:find("itemsonly")) -has_keys = variant:find("keysanity") +is_keys = variant:find("keysanity") is_er = variant:find("entrance") if has_map then @@ -107,7 +107,7 @@ else end tracker_on_accessibility_updated() -if has_keys then +if is_keys then Tracker:AddLayouts("layouts/dungeon_grids_keysanity.json") else Tracker:AddLayouts("layouts/dungeon_grids.json") diff --git a/ootrando_overworldmap_hamsda/scripts/logic.lua b/ootrando_overworldmap_hamsda/scripts/logic.lua index f64640da..b31614ad 100644 --- a/ootrando_overworldmap_hamsda/scripts/logic.lua +++ b/ootrando_overworldmap_hamsda/scripts/logic.lua @@ -425,6 +425,9 @@ function goron_tunic() if has("redtunic") then return 1, AccessibilityLevel.Normal elseif has("wallet") then + if has("setting_shopsanity_yes") then + return 1, AccessibilityLevel.SequenceBreak + end if spawn_access("GC Shop", "adult") > 0 then return 1, AccessibilityLevel.Normal end @@ -772,6 +775,9 @@ function zora_tunic() if has("bluetunic") then return 1, AccessibilityLevel.Normal elseif has("wallet2") then + if has("setting_shopsanity_yes") then + return 1, AccessibilityLevel.SequenceBreak + end if spawn_access("ZD Shop", "adult") > 0 then return 1, AccessibilityLevel.Normal end diff --git a/ootrando_overworldmap_hamsda/scripts/logic_entrance.lua b/ootrando_overworldmap_hamsda/scripts/logic_entrance.lua index 03a31b3a..3f2c5f8e 100644 --- a/ootrando_overworldmap_hamsda/scripts/logic_entrance.lua +++ b/ootrando_overworldmap_hamsda/scripts/logic_entrance.lua @@ -121,6 +121,13 @@ function has_projectile(age) return has_explosives() end +function can_use_scarecrow() + if has("ocarina") and has("scarecrow") and has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None +end + function has_fire() if has("magic") and ((has("bow") and has("firearrow")) or has("dinsfire")) then return AccessibilityLevel.Normal diff --git a/ootrando_overworldmap_hamsda/scripts/regions.lua b/ootrando_overworldmap_hamsda/scripts/regions.lua index 4e946b18..76614a32 100644 --- a/ootrando_overworldmap_hamsda/scripts/regions.lua +++ b/ootrando_overworldmap_hamsda/scripts/regions.lua @@ -1159,12 +1159,8 @@ data_per_region = { return AccessibilityLevel.None end, ["adult_access"] = function() - if has("ocarina") and has("scarecrow") and has("hookshot") then - return AccessibilityLevel.Normal - elseif has("beans") then - return access_region("Lake Hylia", "child") - end - return AccessibilityLevel.None + local beans = has("beans") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility(can_use_scarecrow(), and_accessibility(beans, access_region("Lake Hylia", "child"))) end }, ["LH GS Bean Patch"] = { @@ -1255,12 +1251,13 @@ data_per_region = { return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("water") or has("ocarina") and has("scarecrow") and has("hookshot") then - return AccessibilityLevel.Normal - elseif has("beans") then - return access_region("Lake Hylia", "child") - end - return AccessibilityLevel.None + local water = has("water") and AccessibilityLevel.Normal or AccessibilityLevel.None + local beans = has("beans") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + water, + can_use_scarecrow(), + and_accessibility(beans, access_region("Lake Hylia", "child")) + ) end }, ["Water Temple Split"] = { @@ -1659,10 +1656,10 @@ data_per_region = { return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") or (has("ocarina") and has("scarecrow") and has("hookshot")) or has("longshot") then + if has("hoverboots") or has("longshot") then return AccessibilityLevel.Normal end - return AccessibilityLevel.None + return can_use_scarecrow() end }, ["GF HBA 1000 Points"] = { @@ -2866,7 +2863,7 @@ data_per_region = { return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("logic_visible_collisions") or has("hookshot") then + if has("logic_visible_collisions") then return AccessibilityLevel.Normal end return AccessibilityLevel.SequenceBreak @@ -3580,11 +3577,12 @@ data_per_region = { local bean = AccessibilityLevel.None if has("beans") then + local trick = has("logic_trail_gs_lower_bean") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak local lift = AccessibilityLevel.None if has("lift1") then lift = AccessibilityLevel.Normal end - bean = and_accessibility(access_region("Death Mountain", "child"), or_accessibility(has_explosives(), lift)) + bean = and_accessibility(trick, access_region("Death Mountain", "child"), or_accessibility(has_explosives(), lift)) end return and_accessibility(night_gs(), or_accessibility(hs, hb, bean)) @@ -5054,11 +5052,6 @@ data_per_region = { } } }, - ["Ganons Castle Tower"] = { - ["dungeon"] = "Ganons Castle", - ["interior"] = true, - ["exits"] = {} - }, ["GF Storms Grotto"] = { ["scene"] = "GF Storms Grotto", ["interior"] = true, @@ -5584,141 +5577,257 @@ data_per_region = { ["scene"] = "Bottom of the Well", ["dungeon"] = true, ["locations"] = { - --CONTINUE with dungeon locations ["Bottom of the Well Front Left Fake Wall Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("logic_lens_botw") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Front Center Bombable Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return has_explosives() end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Right Bottom Fake Wall Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("logic_lens_botw") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Compass Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("logic_lens_botw") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Center Skulltula Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("logic_lens_botw") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Back Left Bombable Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local lens = + (has("logic_lens_botw") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(has_explosives(), lens) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Freestanding Key"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Lens of Truth Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("ocarina") and has("lullaby") then + if has("sword1") then + return AccessibilityLevel.Normal + end + if has("sticks") then + if has("logic_child_deadhand") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Invisible Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("ocarina") and has("lullaby") then + if has("logic_lens_botw") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Underwater Front Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("ocarina") and has("lullaby") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Underwater Left Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("ocarina") and has("lullaby") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Map Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local lift = has("lift") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys = AccessibilityLevel.None + if has("botw_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local lens = + (has("logic_lens_botw") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = AccessibilityLevel.None + if has("sticks") then + if has("logic_botw_basement") then + trick = AccessibilityLevel.Normal + else + trick = AccessibilityLevel.SequenceBreak + end + end + + return or_accessibility( + has_explosives(), + and_accessibility(lift, or_accessibility(and_accessibility(keys, lens), df, trick)) + ) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Fire Keese Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local keys = AccessibilityLevel.None + if has("botw_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local lens = + (has("logic_lens_botw") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + return and_accessibility(keys, lens) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well Like Like Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local keys = AccessibilityLevel.None + if has("botw_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local lens = + (has("logic_lens_botw") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + return and_accessibility(keys, lens) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well GS West Inner Room"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys = AccessibilityLevel.None + if has("botw_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local lens = + (has("logic_lens_botw") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + return and_accessibility(rang, lens, keys) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well GS East Inner Room"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys = AccessibilityLevel.None + if has("botw_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local lens = + (has("logic_lens_botw") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + return and_accessibility(rang, lens, keys) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, ["Bottom of the Well GS Like Like Cage"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys = AccessibilityLevel.None + if has("botw_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local lens = + (has("logic_lens_botw") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + return and_accessibility(rang, lens, keys) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end } }, @@ -5745,7 +5854,7 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Bottom of the Well MQ Main Area"] = { + ["Bottom of the Well MQ Perimeter"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -5755,9 +5864,66 @@ data_per_region = { } } }, - ["Bottom of the Well MQ Main Area"] = { + ["Bottom of the Well MQ Perimeter"] = { ["scene"] = "Bottom of the Well", ["dungeon"] = true, + ["locations"] = { + ["Bottom of the Well MQ Compass Chest"] = { + ["child_access"] = function() + if has("sword1") then + return AccessibilityLevel.Normal + end + if has("sticks") then + if has("logic_child_deadhand") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Bottom of the Well MQ Dead Hand Freestanding Key"] = { + ["child_access"] = function() + local trick = AccessibilityLevel.None + if has("boomerang") then + if has("logic_botw_mq_dead_hand_key") then + trick = AccessibilityLevel.Normal + else + trick = AccessibilityLevel.SequenceBreak + end + end + return or_accessibility(has_explosives(), trick) + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Bottom of the Well MQ GS Basement"] = { + ["child_access"] = function() + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Bottom of the Well MQ GS Coffin Room"] = { + ["child_access"] = function() + local keys = AccessibilityLevel.None + if has("botw_small_keys", 2) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(can_child_attack(), keys) + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Bottom of the Well MQ"] = { ["child_access"] = function() @@ -5766,6 +5932,73 @@ data_per_region = { ["adult_access"] = function() return AccessibilityLevel.Normal end + }, + ["Bottom of the Well MQ Middle"] = { + ["child_access"] = function() + if has("ocarina") and has("lullaby") then + return AccessibilityLevel.Normal + end + local trick = has("logic_botw_mq_pits") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, has_explosives()) + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Bottom of the Well MQ Middle"] = { + ["scene"] = "Bottom of the Well", + ["dungeon"] = true, + ["locations"] = { + ["Bottom of the Well MQ Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Bottom of the Well MQ Lens of Truth Chest"] = { + ["child_access"] = function() + local keys = AccessibilityLevel.None + if has("botw_small_keys", 2) then + keys = AccessibilityLevel.Normal + elseif has("botw_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(has_explosives(), keys) + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Bottom of the Well MQ East Inner Room Freestanding Key"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Bottom of the Well MQ GS West Inner Room"] = { + ["child_access"] = function() + local trick = has("logic_botw_mq_pits") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(can_child_attack(), or_accessibility(trick, has_explosives())) + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Bottom of the Well MQ Perimeter"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end } } }, @@ -5806,8 +6039,8 @@ data_per_region = { ["Deku Tree Lobby"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, - ["exits"] = { - ["KF Outside Deku Tree"] = { + ["locations"] = { + ["Deku Tree Map Chest"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -5815,7 +6048,67 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Deku Tree Slingshot Room"] = { + ["Deku Tree Compass Room Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Deku Tree Basement Chest"] = { + ["child_access"] = function() + if has("nuts") then + return AccessibilityLevel.Normal + end + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Deku Tree GS Compass Room"] = { + ["child_access"] = function() + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Deku Tree GS Basement Vines"] = { + ["child_access"] = function() + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_deku_basement_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local weapon = (has("sticks") or has("sword1")) and AccessibilityLevel.Normal or AccessibilityLevel.None + + return or_accessibility(has_projectile("child"), df, and_accessibility(trick, weapon)) + end, + ["adult_access"] = function() + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_deku_basement_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + + return or_accessibility(has_projectile("adult"), df, trick) + end + }, + ["Deku Tree GS Basement Gate"] = { + ["child_access"] = function() + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["KF Outside Deku Tree"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Deku Tree Slingshot Room"] = { ["child_access"] = function() if has("shield1") then return AccessibilityLevel.Normal @@ -5830,6 +6123,7 @@ data_per_region = { end }, ["Deku Tree Basement Backroom"] = { + --TODO: redo this bit of logic ["child_access"] = function() if (has("slingshot") and (has("sticks") or (has("dinsfire") and has("magic")))) or has("logic_deku_b1_skip") or @@ -5847,6 +6141,7 @@ data_per_region = { end }, ["Deku Tree Boss Room"] = { + --TODO: redo this bit of logic ["child_access"] = function() local adult = access_region("Deku Tree Lobby", "adult") @@ -5892,6 +6187,16 @@ data_per_region = { ["Deku Tree Slingshot Room"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, + ["locations"] = { + ["Deku Tree Slingshot Room Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = { ["Deku Tree Lobby"] = { ["child_access"] = function() @@ -5906,6 +6211,37 @@ data_per_region = { ["Deku Tree Basement Backroom"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, + ["locations"] = { + ["Deku Tree GS Basement Back Room"] = { + ["child_access"] = function() + if has("boomerang") then + local fire = + (has("sticks") or (has("dinsfire") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.None + local adult = access_region("Deku Tree Basement Backroom", "adult") + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hammer = has("hammer") and AccessibilityLevel.Normal or AccessibilityLevel.None + + return and_accessibility( + or_accessibility(fire, and_accessibility(adult, bow)), + or_accessibility(has_explosives(), and_accessibility(adult, hammer)) + ) + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local sticks = has("sticks") and Normal or AccessibilityLevel.None + local child = access_region("Deku Tree Basement Backroom", "child") + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + + return and_accessibility(or_accessibility(df, bow, and_accessibility(sticks, child)), can_blast()) + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Deku Tree Lobby"] = { ["child_access"] = function() @@ -5920,6 +6256,22 @@ data_per_region = { ["Deku Tree Boss Room"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, + ["locations"] = { + ["Queen Gohma"] = { + ["child_access"] = function() + if has("shield1") and (has("sword1") or has("sticks")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("shield2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Deku Tree Lobby"] = { ["child_access"] = function() @@ -5934,6 +6286,60 @@ data_per_region = { ["Deku Tree MQ Lobby"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, + ["locations"] = { + ["Deku Tree MQ Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Deku Tree MQ Slingshot Chest"] = { + ["child_access"] = function() + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Deku Tree MQ Slingshot Room Back Chest"] = { + ["child_access"] = function() + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Deku Tree MQ Basement Chest"] = { + ["child_access"] = function() + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Deku Tree MQ GS Lobby"] = { + ["child_access"] = function() + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = { ["KF Outside Deku Tree"] = { ["child_access"] = function() @@ -5961,12 +6367,7 @@ data_per_region = { web = adult end - if eye == AccessibilityLevel.Normal and web == AccessibilityLevel.Normal then - return AccessibilityLevel.Normal - elseif eye ~= AccessibilityLevel.None and web ~= AccessibilityLevel.None then - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return and_accessibility(eye, web) end, ["adult_access"] = function() if has("bow") then @@ -5987,15 +6388,10 @@ data_per_region = { web = child end - if eye == AccessibilityLevel.Normal and web == AccessibilityLevel.Normal then - return AccessibilityLevel.Normal - elseif eye ~= AccessibilityLevel.None and web ~= AccessibilityLevel.None then - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return and_accessibility(eye, web) end }, - ["Deku Tree MQ Basement Water Room"] = { + ["Deku Tree MQ Basement Water Room Front"] = { ["child_access"] = function() local adult = access_region("Deku Tree MQ Lobby", "adult") @@ -6013,12 +6409,7 @@ data_per_region = { web = adult end - if eye == AccessibilityLevel.Normal and web == AccessibilityLevel.Normal then - return AccessibilityLevel.Normal - elseif eye ~= AccessibilityLevel.None and web ~= AccessibilityLevel.None then - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return and_accessibility(eye, web) end, ["adult_access"] = function() local child = access_region("Deku Tree MQ Lobby", "child") @@ -6037,12 +6428,7 @@ data_per_region = { web = child end - if eye == AccessibilityLevel.Normal and web == AccessibilityLevel.Normal then - return AccessibilityLevel.Normal - elseif eye ~= AccessibilityLevel.None and web ~= AccessibilityLevel.None then - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return and_accessibility(eye, web) end }, ["Deku Tree MQ Basement Ledge"] = { @@ -6061,6 +6447,47 @@ data_per_region = { ["Deku Tree MQ Compass Room"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, + ["locations"] = { + ["Deku Tree MQ Compass Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Deku Tree MQ GS Compass Room"] = { + ["child_access"] = function() + if has("boomerang") then + local bombs = has("bombs") and AccessibilityLevel.Normal or AccessibilityLevel.None + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local hammer = has("hammer") and AccessibilityLevel.Normal or AccessibilityLevel.None + local adult = access_region("Deku Tree MQ Compass Room", "adult") + local trick = + has("logic_deku_mq_compass_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + + return or_accessibility( + has_bombchus(), + and_accessibility(bombs, or_accessibility(sot, adult)), + and_accessibility(adult, hammer, or_accessibility(sot, trick)) + ) + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + local bombs = has("bombs") and AccessibilityLevel.Normal or AccessibilityLevel.None + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local hammer = has("hammer") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_deku_mq_compass_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + + return or_accessibility(has_bombchus(), bombs, and_accessibility(hammer, or_accessibility(sot, trick))) + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Deku Tree MQ Lobby"] = { ["child_access"] = function() @@ -6072,17 +6499,33 @@ data_per_region = { } } }, - ["Deku Tree MQ Basement Water Room"] = { + ["Deku Tree MQ Basement Water Room Front"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, - ["exits"] = { - ["Deku Tree MQ Basement Back Room"] = { + ["locations"] = { + ["Deku Tree MQ Before Spinning Log Chest"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.Normal end + } + }, + ["exits"] = { + ["Deku Tree MQ Basement Water Room Back"] = { + ["child_access"] = function() + if has("logic_deku_mq_log") or has("shield1") or has("shield2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end, + ["adult_access"] = function() + if has("logic_deku_mq_log") or has("longshot") or (has("hookshot") and has("ironboots")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end }, ["Deku Tree MQ Lobby"] = { ["child_access"] = function() @@ -6094,47 +6537,52 @@ data_per_region = { } } }, - ["Deku Tree MQ Basement Back Room"] = { + ["Deku Tree MQ Basement Water Room Back"] = { ["scene"] = "Deku Tree", ["dungeon"] = true, - ["exits"] = { - ["Deku Tree MQ Basement Ledge"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.None - end - }, - ["Deku Tree MQ Basement Water Room"] = { + ["locations"] = { + ["Deku Tree MQ After Spinning Log Chest"] = { ["child_access"] = function() - if has("sword1") or has("sling") or has("boomerang") or (has("nuts") and has("sticks")) then + if has("ocarina") and has("time") then return AccessibilityLevel.Normal end - return has_explosives() + return AccessibilityLevel.None end, ["adult_access"] = function() - if has("bow") or has("hookshot") then + if has("ocarina") and has("time") then return AccessibilityLevel.Normal end - return has_explosives() + return AccessibilityLevel.None end } - } - }, - ["Deku Tree MQ Basement Ledge"] = { - ["scene"] = "Deku Tree", - ["dungeon"] = true, + }, ["exits"] = { ["Deku Tree MQ Basement Back Room"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local fire = AccessibilityLevel.None + if has("sticks") or (has("dinsfire") and has("magic")) then + fire = AccessibilityLevel.Normal + elseif has("bow") and has("firearrow") and has("magic") then + fire = access_region("Deku Tree MQ Basement Water Room Front", "adult") + end + + if has("sword1") or (has("nuts") and has("sticks")) then + return fire + end + + local adult = access_region("Deku Tree MQ Basement Water Room Back", "adult") + return and_accessibility(fire, or_accessibility(adult, has_projectile("child"))) end, ["adult_access"] = function() + if (has("dinsfire") and has("magic")) or (has("bow") and has("firearrow") and has("magic")) then + return AccessibilityLevel.Normal + elseif has("sticks") then + return access_region("Deku Tree MQ Basement Water Room Back", "child") + end return AccessibilityLevel.None end }, - ["Deku Tree MQ Lobby"] = { + ["Deku Tree MQ Basement Water Room Front"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -6144,69 +6592,184 @@ data_per_region = { } } }, - ["Dodongos Cavern Split"] = { - ["scene"] = "Dodongos Cavern", + ["Deku Tree MQ Basement Back Room"] = { + ["scene"] = "Deku Tree", ["dungeon"] = true, - ["exits"] = { - ["Dodongos Cavern Beginning"] = { + ["locations"] = { + ["Deku Tree MQ GS Basement Graves Room"] = { ["child_access"] = function() - if has("dodongo_reg") then + if has("time") and has("boomerang") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("dodongo_reg") then + if has("longshot") or (has("time") and has("hookshot")) then return AccessibilityLevel.Normal end return AccessibilityLevel.None end }, - ["Dodongos Cavern MQ Beginning"] = { + ["Deku Tree MQ GS Basement Back Room"] = { ["child_access"] = function() - if has("dodongo_mq") then - return AccessibilityLevel.Normal + if has("boomerang") then + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + elseif has("bow") and has("firearrow") and has("magic") then + return access_region("Deku Tree MQ Basement Back Room", "adult") + end end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("dodongo_mq") then - return AccessibilityLevel.Normal + if has("hookshot") then + if (has("dinsfire") and has("magic")) or (has("bow") and has("firearrow") and has("magic")) then + return AccessibilityLevel.Normal + elseif has("sticks") then + return access_region("Deku Tree MQ Basement Back Room", "child") + end end return AccessibilityLevel.None end } - } - }, - ["Dodongos Cavern Beginning"] = { - ["scene"] = "Dodongos Cavern", - ["dungeon"] = true, + }, ["exits"] = { - ["Death Mountain"] = { + ["Deku Tree MQ Basement Ledge"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, - ["Dodongos Cavern Lobby"] = { + ["Deku Tree MQ Basement Water Room Back"] = { ["child_access"] = function() - if has("lift1") then + if has("sword1") or (has("nuts") and has("sticks")) then return AccessibilityLevel.Normal end - local adult = AccessibilityLevel.None - if has("hammer") then - adult = access_region("Dodongos Cavern Beginning", "adult") + return has_projectile("child") + end, + ["adult_access"] = function() + return has_projectile("adult") + end + } + } + }, + ["Deku Tree MQ Basement Ledge"] = { + ["scene"] = "Deku Tree", + ["dungeon"] = true, + ["locations"] = { + ["Deku Tree MQ Deku Scrub"] = { + ["child_access"] = function() + if has("nuts") or has("shield1") then + return AccessibilityLevel.Normal end - local explo = has_explosives() - if adult == AccessibilityLevel.Normal or explo == AccessibilityLevel.Normal then + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Queen Gohma"] = { + ["child_access"] = function() + if has("shield1") and (has("sword1") or has("sticks")) then + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + elseif has("bow") and has("firearrow") and has("magic") then + return access_region("Deku Tree MQ Basement Ledge", "adult") + end + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("shield2") then + if (has("dinsfire") and has("magic")) or (has("bow") and has("firearrow") and has("magic")) then + return AccessibilityLevel.Normal + elseif has("sticks") then + return access_region("Deku Tree MQ Basement Ledge", "child") + end + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Deku Tree MQ Basement Back Room"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Deku Tree MQ Lobby"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Dodongos Cavern Split"] = { + ["scene"] = "Dodongos Cavern", + ["dungeon"] = true, + ["exits"] = { + ["Dodongos Cavern Beginning"] = { + ["child_access"] = function() + if has("dodongo_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("dodongo_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Dodongos Cavern MQ Beginning"] = { + ["child_access"] = function() + if has("dodongo_mq") then return AccessibilityLevel.Normal - elseif adult == AccessibilityLevel.SequenceBreak or explo == AccessibilityLevel.SequenceBreak then - return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end, + ["adult_access"] = function() + if has("dodongo_mq") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Dodongos Cavern Beginning"] = { + ["scene"] = "Dodongos Cavern", + ["dungeon"] = true, + ["exits"] = { + ["Death Mountain"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern Lobby"] = { + ["child_access"] = function() + if has("lift1") then + return AccessibilityLevel.Normal + end + + local hammer = has("hammer") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + has_explosives(), + and_accessibility(hammer, access_region("Dodongos Cavern Beginning", "adult")) + ) + end, ["adult_access"] = function() if has("lift1") then return AccessibilityLevel.Normal @@ -6219,6 +6782,57 @@ data_per_region = { ["Dodongos Cavern Lobby"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern GS Side Room Near Lower Lizalfos"] = { + ["child_access"] = function() + if has("sling") or has("boomerang") or has("sticks") or has("sword1") then + return AccessibilityLevel.Normal + end + return has_explosives() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern GS Scarecrow"] = { + ["child_access"] = function() + local trick = has("logic_dc_scarecrow_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, can_child_attack()) + end, + ["adult_access"] = function() + local ls = has("longshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_dc_scarecrow_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility(can_use_scarecrow(), ls, trick) + end + }, + ["Dodongos Cavern Deku Scrub Side Room Near Dodongos"] = { + ["child_access"] = function() + if has("sling") or has("sticks") or has("sword1") then + return AccessibilityLevel.Normal + end + return has_explosives() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern Deku Scrub Lobby"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = { ["Dodongos Cavern Beginning"] = { ["child_access"] = function() @@ -6239,13 +6853,7 @@ data_per_region = { end explo = has_explosives() end - local adult = access_region("Dodongos Cavern Lobby", "adult") - if adult == AccessibilityLevel.Normal or explo == AccessibilityLevel.Normal then - return AccessibilityLevel.Normal - elseif adult == AccessibilityLevel.SequenceBreak or explo == AccessibilityLevel.SequenceBreak then - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return or_accessibility(explo, access_region("Dodongos Cavern Lobby", "adult")) end, ["adult_access"] = function() return AccessibilityLevel.Normal @@ -6264,6 +6872,46 @@ data_per_region = { ["Dodongos Cavern Staircase Room"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern Compass Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern GS Vines Above Stairs"] = { + ["child_access"] = function() + if has("lift1") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return has_explosives() + end, + ["adult_access"] = function() + if has("lift1") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + local bow = AccessibilityLevel.None + if has("bow") then + if has("logic_dc_staircase") then + bow = AccessibilityLevel.Normal + else + bow = AccessibilityLevel.SequenceBreak + end + end + local longshot = AccessibilityLevel.None + if has("longshot") then + if has("logic_dc_vines_gs") then + longshot = AccessibilityLevel.Normal + else + longshot = AccessibilityLevel.SequenceBreak + end + end + return or_accessibility(bow, longshot, has_explosives()) + end + } + }, ["exits"] = { ["Dodongos Cavern Lobby"] = { ["child_access"] = function() @@ -6284,16 +6932,15 @@ data_per_region = { if has("lift1") or (has("dinsfire") and has("magic")) then return AccessibilityLevel.Normal end - local explo = has_explosives() + local bow = AccessibilityLevel.None if has("bow") then if has("logic_dc_staircase") then - return AccessibilityLevel.Normal - end - if explo ~= AccessibilityLevel.Normal then - return AccessibilityLevel.SequenceBreak + bow = AccessibilityLevel.Normal + else + bow = AccessibilityLevel.SequenceBreak end end - return explo + return or_accessibility(bow, has_explosives()) end } } @@ -6301,6 +6948,32 @@ data_per_region = { ["Dodongos Cavern Climb"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern Bomb Flower Platform Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern Deku Scrubs Near Bomb Bag"] = { + ["child_access"] = function() + return has_explosives() + end, + ["adult_access"] = function() + local trick = AccessibilityLevel.None + if has("lift1") then + if has("logic_dc_scrub_room") then + trick = AccessibilityLevel.Normal + else + trick = AccessibilityLevel.SequenceBreak + end + end + return or_accessibility(trick, can_blast()) + end + } + }, ["exits"] = { ["Dodongos Cavern Lobby"] = { ["child_access"] = function() @@ -6315,15 +6988,11 @@ data_per_region = { if has("sling") then return AccessibilityLevel.Normal end - local level = has("logic_dc_slingshot_skip") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local trick = has("logic_dc_slingshot_skip") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak if has("sticks") or has("sword1") then - return level + return trick end - local explo = has_explosives() - if explo == AccessibilityLevel.Normal then - return level - end - return explo + return and_accessibility(trick, has_explosives()) end, ["adult_access"] = function() if has("bow") or has("hoverboots") or has("longshot") or has("logic_dc_jump") then @@ -6337,6 +7006,38 @@ data_per_region = { ["Dodongos Cavern Far Bridge"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern Bomb Bag Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern End of Bridge Chest"] = { + ["child_access"] = function() + return has_explosives() + end, + ["adult_access"] = function() + return can_blast() + end + }, + ["Dodongos Cavern GS Alcove Above Stairs"] = { + ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Dodongos Cavern Boss Area"] = { ["child_access"] = function() @@ -6359,22 +7060,16 @@ data_per_region = { ["Dodongos Cavern Boss Area"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, - ["exits"] = { - ["Dodongos Cavern Lobby"] = { + ["locations"] = { + ["Dodongos Cavern Boss Room Chest"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.Normal end - } - } - }, - ["Dodongos Cavern MQ Beginning"] = { - ["scene"] = "Dodongos Cavern", - ["dungeon"] = true, - ["exits"] = { - ["Death Mountain"] = { + }, + ["Dodongos Cavern GS Back Room"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -6382,22 +7077,57 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Dodongos Cavern MQ Lobby"] = { + ["King Dodongo"] = { ["child_access"] = function() - if has("lift1") then + if (has("bombs") or has("lift1")) and (has("sticks") or has("sword1")) then return AccessibilityLevel.Normal end - local adult = AccessibilityLevel.None - if has("hammer") then - adult = access_region("Dodongos Cavern MQ Beginning", "adult") - end - local explo = has_explosives() - if adult == AccessibilityLevel.Normal or explo == AccessibilityLevel.Normal then + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bombs") or has("lift1") then return AccessibilityLevel.Normal - elseif adult == AccessibilityLevel.SequenceBreak or explo == AccessibilityLevel.SequenceBreak then + elseif has("bombchu") and (has("shield2") or has("shield3")) then return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Dodongos Cavern Lobby"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Dodongos Cavern MQ Beginning"] = { + ["scene"] = "Dodongos Cavern", + ["dungeon"] = true, + ["exits"] = { + ["Death Mountain"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern MQ Lobby"] = { + ["child_access"] = function() + if has("lift1") then + return AccessibilityLevel.Normal + end + + local hammer = has("hammer") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + has_explosives(), + and_accessibility(hammer, access_region("Dodongos Cavern MQ Beginning", "adult")) + ) end, ["adult_access"] = function() if has("lift1") then @@ -6411,6 +7141,111 @@ data_per_region = { ["Dodongos Cavern MQ Lobby"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern MQ Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern MQ Compass Chest"] = { + ["child_access"] = function() + if has("nuts") then + return AccessibilityLevel.Normal + end + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern MQ Larvae Room Chest"] = { + ["child_access"] = function() + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_fire() + end + }, + ["Dodongos Cavern MQ Torch Puzzle Room Chest"] = { + ["child_access"] = function() + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return has_explosives() + end, + ["adult_access"] = function() + if has("dinsfire") and has("magic") then + return AccessibilityLevel.Normal + end + if has("logic_dc_jump") or has("hoverboots") or has("hookshot") then + return AccessibilityLevel.Normal + end + local trick = AccessibilityLevel.SequenceBreak + return or_accessibility(trick, can_blast()) + end + }, + ["Dodongos Cavern MQ GS Song of Time Block Room"] = { + ["child_access"] = function() + if has("ocarina") and has("time") then + return can_child_attack() + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("time") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Dodongos Cavern MQ GS Larvae Room"] = { + ["child_access"] = function() + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_fire() + end + }, + ["Dodongos Cavern MQ GS Lizalfos Room"] = { + ["child_access"] = function() + return has_explosives() + end, + ["adult_access"] = function() + return can_blast() + end + }, + ["Dodongos Cavern MQ Deku Scrubs Lobby"] = { + ["child_access"] = function() + if has("nuts") or has("shield1") then + return AccessibilityLevel.Normal + end + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern MQ Deku Scrub Staircase"] = { + ["child_access"] = function() + if has("nuts") or has("shield1") then + return AccessibilityLevel.Normal + end + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = { ["Dodongos Cavern MQ Lower Right Side"] = { ["child_access"] = function() @@ -6455,12 +7290,44 @@ data_per_region = { end }, ["Dodongos Cavern MQ Boss Area"] = { - --TODO: logic_dc_mq_eyes ["child_access"] = function() - return has_explosives() + local lift = has("lift1") and AccessibilityLevel.Normal or AccessibilityLevel.None + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick_eyes = has("logic_dc_mq_eyes") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local trick_child = + has("logic_dc_mq_child_back") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + + return or_accessibility( + has_explosives(), + and_accessibility(trick_eyes, lift, trick_child, or_accessibility(sticks, df)) + ) end, ["adult_access"] = function() - return has_explosives() + local lift = has("lift1") and AccessibilityLevel.Normal or AccessibilityLevel.None + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hammer = has("hammer") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick_eyes = has("logic_dc_mq_eyes") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local trick_jump = has("logic_dc_jump") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + + return or_accessibility( + has_explosives(), + and_accessibility( + trick_eyes, + lift, + or_accessibility( + and_accessibility(sticks, access_region("Dodongos Cavern MQ Lobby", "child")), + df, + trick_jump, + hammer, + hb, + hs + ) + ) + ) end } } @@ -6468,6 +7335,19 @@ data_per_region = { ["Dodongos Cavern MQ Lower Right Side"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos"] = { + ["child_access"] = function() + if has("nuts") or has("shield1") then + return AccessibilityLevel.Normal + end + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = { ["Dodongos Cavern MQ Bomb Bag Area"] = { ["child_access"] = function() @@ -6492,6 +7372,40 @@ data_per_region = { ["Dodongos Cavern MQ Bomb Bag Area"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern MQ Bomb Bag Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern MQ GS Scrub Room"] = { + ["child_access"] = function() + if has("boomerang") then + if has("lift1") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + local bow = AccessibilityLevel.None + if has("bow") then + bow = access_region("Dodongos Cavern MQ Bomb Bag Area", "adult") + end + return or_accessibility(bow, has_explosives()) + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + if has("bow") or has("lift1") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return has_explosives() + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Dodongos Cavern MQ Lower Right Side"] = { ["child_access"] = function() @@ -6506,6 +7420,48 @@ data_per_region = { ["Dodongos Cavern MQ Boss Area"] = { ["scene"] = "Dodongos Cavern", ["dungeon"] = true, + ["locations"] = { + ["Dodongos Cavern MQ Under Grave Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern Boss Room Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Dodongos Cavern MQ GS Back Area"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["King Dodongo"] = { + ["child_access"] = function() + if (has("bombs") or has("lift1")) and (has("sticks") or has("sword1")) then + return has_explosives() + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bombs") or has("lift1") then + return can_blast() + elseif has("bombchu") and (has("shield2") or has("shield3")) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + } + }, ["exits"] = {} }, ["Fire Temple Split"] = { @@ -6545,115 +7501,88 @@ data_per_region = { ["Fire Temple Lower"] = { ["scene"] = "Fire Temple", ["dungeon"] = true, - ["exits"] = { - ["DMC Fire Temple Entrance"] = { + ["locations"] = { + ["Fire Temple Near Boss Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("logic_fewer_tunic_requirements") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return FTR_or_goron() end }, - ["Fire Temple Big Lava Room"] = { + ["Fire Temple Flare Dancer Chest"] = { ["child_access"] = function() - if has("fire_small_keys", 2) and has("logic_fewer_tunic_requirements") then - return AccessibilityLevel.Normal - elseif has("fire_small_keys", 1) then - return AccessibilityLevel.SequenceBreak - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("fire_small_keys", 2) then - return FTR_or_goron() - elseif has("fire_small_keys", 1) then - return AccessibilityLevel.SequenceBreak + if has("hammer") then + if not is_keys or has("fire_small_keys", 8) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end end return AccessibilityLevel.None end - } - } - }, - ["Fire Temple Big Lava Room"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = { - ["Fire Temple Lower"] = { + }, + ["Fire Temple Boss Key Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("hammer") then + if not is_keys or has("fire_small_keys", 8) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None end }, - ["Fire Temple Middle"] = { + ["Volvagia"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - local tunic = has("redtunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak - local keys = AccessibilityLevel.None - if has("fire_small_keys", 4) then - keys = AccessibilityLevel.Normal - elseif has("fire_small_keys", 3) then - keys = AccessibilityLevel.SequenceBreak - end - local block = AccessibilityLevel.SequenceBreak - if has("lift1") or has("logic_fire_strength") then - block = AccessibilityLevel.Normal - end - local ranged = AccessibilityLevel.None - if has("bow") or has("hookshot") then - ranged = AccessibilityLevel.Normal - else - ranged = has_explosives() - end + if has("hammer") and has("fire_boss_key") then + local tunic = has("redtunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local trick = + has("logic_fire_boss_door_jump") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None - if keys ~= AccessibilityLevel.None and ranged ~= AccessibilityLevel.None then - if - tunic == AccessibilityLevel.Normal and keys == AccessibilityLevel.Normal and - block == AccessibilityLevel.Normal and - ranged == AccessibilityLevel.Normal - then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak + return and_accessibility( + tunic, + or_accessibility( + trick, + hb, + and_accessibility(or_accessibility(sot, has_explosives()), access_region("Fire Temple Upper", "adult")) + ) + ) end - return AccessibilityLevel.None end - } - } - }, - ["Fire Temple Middle"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = { - ["Fire Temple Upper"] = { + }, + ["Fire Temple GS Boss Key Loop"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("fire_small_keys", 8) then - return AccessibilityLevel.Normal - elseif has("fire_small_keys", 7) and ((has("hoverboots") and has("hammer")) or has("logic_fire_flame_maze")) then - return AccessibilityLevel.Normal - elseif has("fire_small_keys", 6) then - return AccessibilityLevel.SequenceBreak + if has("hammer") then + if not is_keys or has("fire_small_keys", 8) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end end return AccessibilityLevel.None end } - } - }, - ["Fire Temple Upper"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Fire Temple MQ Lower"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, + }, ["exits"] = { ["DMC Fire Temple Entrance"] = { ["child_access"] = function() @@ -6663,249 +7592,826 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Fire MQ Boss Room"] = { - ["child_access"] = function() - return AccessibilityLevel.None - end, - ["adult_access"] = function() - if has("hammer") and has("fire_boss_key") then - local tunic = AccessibilityLevel.SequenceBreak - if has("redtunic") then - tunic = AccessibilityLevel.Normal - end - - local jump = AccessibilityLevel.SequenceBreak - if has("logic_fire_boss_door_jump") or has("hoverboots") then - jump = AccessibilityLevel.Normal - end - - local pillar = access_region("Fire Temple MQ Upper", "adult") - - return and_accessibility(tunic, or_accessibility(and_accessibility(has_fire(), jump), pillar)) - end - return AccessibilityLevel.None - end - }, - ["Fire MQ Lower Locked Door"] = { + ["Fire Temple Big Lava Room"] = { ["child_access"] = function() - if has("sword1") then - if has("fire_small_keys", 5) then - return AccessibilityLevel.Normal - elseif has("fire_small_keys", 1) then - return AccessibilityLevel.SequenceBreak - end - end - return AccessibilityLevel.None - end, - ["adult_access"] = function() - if has("fire_small_keys", 5) then + if has("fire_small_keys", 2) and has("logic_fewer_tunic_requirements") then return AccessibilityLevel.Normal elseif has("fire_small_keys", 1) then return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None - end - }, - ["Fire MQ Big Lava Room"] = { - ["child_access"] = function() - return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hammer") then + if has("fire_small_keys", 2) then return FTR_or_goron() + elseif has("fire_small_keys", 1) then + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end } } }, - ["Fire MQ Lower Locked Door"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Fire MQ Big Lava Room"] = { + ["Fire Temple Big Lava Room"] = { ["scene"] = "Fire Temple", ["dungeon"] = true, - ["exits"] = { - ["Fire MQ Lower Maze"] = { + ["locations"] = { + ["Fire Temple Big Lava Room Lower Open Door Chest"] = { ["child_access"] = function() - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("fire_small_keys", 1) then - local keys = AccessibilityLevel.SequenceBreak - if has("fire_small_keys", 2) then - keys = AccessibilityLevel.Normal - end - - local tunic = AccessibilityLevel.SequenceBreak - if has("redtunic") then - tunic = AccessibilityLevel.Normal - end - - local trick = AccessibilityLevel.None - if has("hoverboots") then - trick = AccessibilityLevel.SequenceBreak - if has("logic_fire_mq_climb") then - trick = AccessibilityLevel.Normal - end - end - - return and_accessibility(tunic, keys, or_accessibility(has_fire(), trick)) - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end - } - } - }, - ["Fire MQ Lower Maze"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = { - ["Fire MQ Upper Maze"] = { + }, + ["Fire Temple Big Lava Room Blocked Door Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("logic_fire_mq_maze_jump") then - return AccessibilityLevel.Normal - end - if has("logic_fire_mq_maze_hovers") and has("hoverboots") then - return AccessibilityLevel.Normal - end - if has("hookshot") then - if has("logic_rusted_switches") or (has_explosives() == AccessibilityLevel.Normal) then - return AccessibilityLevel.Normal - end - end - return AccessibilityLevel.SequenceBreak + return has_explosives() end - } - } - }, - ["Fire MQ Upper Maze"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = { - ["Fire Temple MQ Upper"] = { + }, + ["Fire Temple GS Song of Time Room"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("fire_small_keys", 2) then - local level = AccessibilityLevel.SequenceBreak - if has("fire_small_keys", 3) then - level = AccessibilityLevel.Normal - end - - if has("bow") and (has("hookshot") or (has("firearrow") and has("magic"))) then - return level - end + if (has("ocarina") and has("time")) or has("logic_fire_song_of_time") then + return AccessibilityLevel.Normal end - return AccessibilityLevel.None + return AccessibilityLevel.SequenceBreak end } - } - }, - ["Fire Temple MQ Upper"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Fire MQ Boss Room"] = { - ["scene"] = "Fire Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Forest Temple Split"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Forest Temple Lobby"] = { + ["Fire Temple Lower"] = { ["child_access"] = function() - if has("forest_reg") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("forest_reg") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end }, - ["Forest Temple MQ Lobby"] = { + ["Fire Temple Middle"] = { ["child_access"] = function() - if has("forest_mq") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("forest_mq") then - return AccessibilityLevel.Normal + local tunic = has("redtunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local keys = AccessibilityLevel.None + if has("fire_small_keys", 4) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 3) then + keys = AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.None + local block = AccessibilityLevel.SequenceBreak + if has("lift1") or has("logic_fire_strength") then + block = AccessibilityLevel.Normal + end + + return and_accessibility(tunic, keys, block, has_projectile("adult")) end } } }, - ["Forest Temple Lobby"] = { - ["scene"] = "Forest Temple", + ["Fire Temple Middle"] = { + ["scene"] = "Fire Temple", ["dungeon"] = true, - ["exits"] = { - ["SFM Forest Temple Entrance Ledge"] = { + ["locations"] = { + ["Fire Temple Boulder Maze Lower Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Forest Temple NW Outdoors"] = { + ["Fire Temple Boulder Maze Upper Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - if has("ocarina") and has("time") then + if has("fire_small_keys", 6) then return AccessibilityLevel.Normal + elseif has("fire_small_keys", 5) then + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end }, - ["Forest Temple NE Outdoors"] = { + ["Fire Temple Boulder Maze Side Room Chest"] = { ["child_access"] = function() - if has("sling") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("bow") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end }, - ["Forest Temple Block Push Room"] = { + ["Fire Temple Boulder Maze Shortcut Chest"] = { ["child_access"] = function() - if has("forest_small_keys", 1) then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("forest_small_keys", 1) then - return AccessibilityLevel.Normal + local keys = AccessibilityLevel.None + if has("fire_small_keys", 6) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 5) then + keys = AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.None + return and_accessibility(keys, has_explosives()) end }, - ["Forest Temple Boss Region"] = { + ["Fire Temple Scarecrow Chest"] = { ["child_access"] = function() - return poes_killed() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local keys = AccessibilityLevel.None + if has("fire_small_keys", 6) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 5) then + keys = AccessibilityLevel.SequenceBreak + end + local pixelshot = AccessibilityLevel.None + if has("longshot") then + if has("logic_fire_scarecrow") then + pixelshot = AccessibilityLevel.Normal + else + pixelshot = AccessibilityLevel.SequenceBreak + end + end + return and_accessibility(keys, or_accessibility(can_use_scarecrow(), pixelshot)) + end + }, + ["Fire Temple Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("fire_small_keys", 6) or (has("fire_small_keys", 5) and has("bow")) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 5) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Fire Temple Compass Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("fire_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 6) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Fire Temple GS Boulder Maze"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local keys = AccessibilityLevel.None + if has("fire_small_keys", 4) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 3) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(keys, has_explosives()) + end + }, + ["Fire Temple GS Scarecrow Climb"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local keys = AccessibilityLevel.None + if has("fire_small_keys", 6) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 5) then + keys = AccessibilityLevel.SequenceBreak + end + local pixelshot = AccessibilityLevel.None + if has("longshot") then + if has("logic_fire_scarecrow") then + pixelshot = AccessibilityLevel.Normal + else + pixelshot = AccessibilityLevel.SequenceBreak + end + end + return and_accessibility(keys, or_accessibility(can_use_scarecrow(), pixelshot)) + end + }, + ["Fire Temple GS Scarecrow Top"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local keys = AccessibilityLevel.None + if has("fire_small_keys", 6) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 5) then + keys = AccessibilityLevel.SequenceBreak + end + local pixelshot = AccessibilityLevel.None + if has("longshot") then + if has("logic_fire_scarecrow") then + pixelshot = AccessibilityLevel.Normal + else + pixelshot = AccessibilityLevel.SequenceBreak + end + end + return and_accessibility(keys, or_accessibility(can_use_scarecrow(), pixelshot)) + end + } + }, + ["exits"] = { + ["Fire Temple Upper"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("fire_small_keys", 8) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 7) and ((has("hoverboots") and has("hammer")) or has("logic_fire_flame_maze")) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 6) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + } + } + }, + ["Fire Temple Upper"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Fire Temple Highest Goron Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + if has("ocarina") and has("time") then + return AccessibilityLevel.Normal + end + local trick = has("logic_rusted_switches") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility(trick, or_accessibility(hb, has_explosives())) + end + return AccessibilityLevel.None + end + }, + ["Fire Temple Megaton Hammer Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_explosives() + end + } + }, + ["exits"] = {} + }, + ["Fire Temple MQ Lower"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Fire Temple MQ Map Room Side Chest"] = { + ["child_access"] = function() + if has("sword1") or has("sticks") or has("sling") or has("bombs") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Fire Temple MQ Near Boss Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_fire_mq_near_boss") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local fa = + (has("bow") and has("firearrow") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local tunic = has("redtunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local ls = has("longshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + + return and_accessibility( + FTR_or_goron(), + or_accessibility( + and_accessibility(or_accessibility(hb, and_accessibility(trick, bow)), has_fire()), + and_accessibility( + hs, + or_accessibility(fa, and_accessibility(df, or_accessibility(damage_below_quadruple(), tunic, bow, ls))) + ) + ) + ) + end + } + }, + ["exits"] = { + ["DMC Fire Temple Entrance"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Fire MQ Boss Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") and has("fire_boss_key") then + local tunic = has("redtunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local jump = + (has("logic_fire_boss_door_jump") or has("hoverboots")) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + return and_accessibility( + tunic, + or_accessibility(and_accessibility(has_fire(), jump), access_region("Fire Temple MQ Upper", "adult")) + ) + end + return AccessibilityLevel.None + end + }, + ["Fire MQ Lower Locked Door"] = { + ["child_access"] = function() + if has("sword1") then + if has("fire_small_keys", 5) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("fire_small_keys", 5) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Fire MQ Big Lava Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + return FTR_or_goron() + end + return AccessibilityLevel.None + end + } + } + }, + ["Fire MQ Lower Locked Door"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Fire Temple MQ Megaton Hammer Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") or has("hookshot") then + return AccessibilityLevel.Normal + end + return has_explosives() + end + }, + ["Fire Temple MQ Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Fire MQ Big Lava Room"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Fire Temple MQ Boss Key Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + local trick = + (has("bow") or has("logic_fire_mq_bk_chest")) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(has_fire(), trick) + end + return AccessibilityLevel.None + end + }, + ["Fire Temple MQ Big Lava Room Blocked Door Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local trick = + (has("hookshot") or has("logic_fire_mq_blocked_chest")) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(has_fire(), has_explosives(), trick) + end + }, + ["Fire Temple MQ GS Big Lava Room Open Door"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Fire MQ Lower Maze"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local tunic = has("redtunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local keys = AccessibilityLevel.None + if has("fire_small_keys", 2) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local trick = AccessibilityLevel.None + if has("hoverboots") then + if has("logic_fire_mq_climb") then + trick = AccessibilityLevel.Normal + else + trick = AccessibilityLevel.SequenceBreak + end + end + + return and_accessibility(tunic, keys, or_accessibility(has_fire(), trick)) + end + } + } + }, + ["Fire MQ Lower Maze"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Fire Temple MQ Lizalfos Maze Lower Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Fire Temple MQ Lizalfos Maze Side Room Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local trick = + has("logic_fire_mq_maze_side_room") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility( + has_explosives(), + or_accessibility(trick, access_region("Fire MQ Upper Maze", "adult")) + ) + end + } + }, + ["exits"] = { + ["Fire MQ Upper Maze"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("logic_fire_mq_maze_jump") then + return AccessibilityLevel.Normal + end + if has("logic_fire_mq_maze_hovers") and has("hoverboots") then + return AccessibilityLevel.Normal + end + if has("hookshot") then + if has("logic_rusted_switches") or (has_explosives() == AccessibilityLevel.Normal) then + return AccessibilityLevel.Normal + end + end + return AccessibilityLevel.SequenceBreak + end + } + } + }, + ["Fire MQ Upper Maze"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Fire Temple MQ Lizalfos Maze Upper Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Fire Temple MQ Compass Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_explosives() + end + }, + ["Fire Temple MQ GS Skull On Fire"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") then + return AccessibilityLevel.Normal + end + if has("ocarina") and has("time") and has("hookshot") then + local trick = has("logic_rusted_switches") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility(has_explosives(), trick) + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Fire Temple MQ Upper"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") and (has("hookshot") or (has("firearrow") and has("magic"))) then + if has("fire_small_keys", 3) then + return AccessibilityLevel.Normal + elseif has("fire_small_keys", 2) then + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None + end + } + } + }, + ["Fire Temple MQ Upper"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Fire Temple MQ Freestanding Key"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") or has("logic_fire_mq_flame_maze") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Fire Temple MQ Chest On Fire"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local trick = + (has("hookshot") or has("logic_fire_mq_flame_maze")) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local keys = AccessibilityLevel.None + if has("fire_small_keys", 4) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 3) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(trick, keys) + end + }, + ["Fire Temple MQ GS Fire Wall Maze Side Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if (has("ocarina") and has("time")) or has("hoverboots") or has("logic_fire_mq_flame_maze") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Fire Temple MQ GS Fire Wall Maze Center"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_explosives() + end + }, + ["Fire Temple MQ GS Above Fire Wall Maze"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys = AccessibilityLevel.None + if has("fire_small_keys", 5) then + keys = AccessibilityLevel.Normal + elseif has("fire_small_keys", 4) then + keys = AccessibilityLevel.SequenceBreak + end + local trick = + has("logic_fire_mq_above_maze_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local ls = has("longshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + + return or_accessibility(and_accessibility(hs, keys), and_accessibility(trick, ls)) + end + } + }, + ["exits"] = {} + }, + ["Fire MQ Boss Room"] = { + ["scene"] = "Fire Temple", + ["dungeon"] = true, + ["locations"] = { + ["Volvagia"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = {} + }, + ["Forest Temple Split"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["exits"] = { + ["Forest Temple Lobby"] = { + ["child_access"] = function() + if has("forest_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ Lobby"] = { + ["child_access"] = function() + if has("forest_mq") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_mq") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple Lobby"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple First Room Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple First Stalfos Chest"] = { + ["child_access"] = function() + if has("sword1") then + return AccessibilityLevel.Normal + elseif has("sticks") then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple GS First Room"] = { + ["child_access"] = function() + if has("boomerang") or has("sling") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + local trick = has("logic_forest_first_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local bombs = has("bombs") and AccessibilityLevel.Normal or AccessibilityLevel.None + local js = (has("sticks") or has("sword1")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + has_bombchus(), + and_accessibility(trick, or_accessibility(bombs, and_accessibility(js, damage_single_instance_ohko()))) + ) + end, + ["adult_access"] = function() + if has("hookshot") or has("bow") or has("bombs") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + local trick = has("logic_forest_first_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility(has_bombchus(), and_accessibility(trick, damage_single_instance_ohko())) + end + }, + ["Forest Temple GS Lobby"] = { + ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["SFM Forest Temple Entrance Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple NW Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + if has("ocarina") and has("time") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple NE Outdoors"] = { + ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple Block Push Room"] = { + ["child_access"] = function() + if has("forest_small_keys", 1) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 1) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple Boss Region"] = { + ["child_access"] = function() + return poes_killed() end, ["adult_access"] = function() return poes_killed() @@ -6913,93 +8419,2768 @@ data_per_region = { } } }, - ["Forest Temple NW Outdoors"] = { - ["scene"] = "Forest Temple", + ["Forest Temple NW Outdoors"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple GS Level Island Courtyard"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + if has("longshot") then + return AccessibilityLevel.Normal + elseif has("hookshot") then + return access_region("Forest Temple Outside Upper Ledge", "adult") + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Forest Temple NE Outdoors"] = { + ["child_access"] = function() + if has("scale2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("scale2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple Outdoors High Balconies"] = { + ["child_access"] = function() + if (has("boomerang") or has("nuts") or has("shield1")) and (has("sticks") or has("sword1") or has("sling")) then + return AccessibilityLevel.Normal + end + return or_accessibility(access_region("Forest Temple NW Outdoors", "adult"), has_explosives()) + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Forest Temple NE Outdoors"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Raised Island Courtyard Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + local trick = + has("logic_forest_outdoors_ledge") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + access_region("Forest Temple Falling Room", "adult"), + and_accessibility(trick, hb, access_region("Forest Temple Outdoors High Balconies", "adult")) + ) + end + }, + ["Forest Temple GS Raised Island Courtyard"] = { + ["child_access"] = function() + if has("boomerang") then + if has("logic_forest_outdoor_east_gs") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility( + access_region("Forest Temple Falling Room", "adult"), + or_accessibility(bow, df, has_explosives()) + ) + end + } + }, + ["exits"] = { + ["Forest Temple Outdoors High Balconies"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") then + return AccessibilityLevel.Normal + elseif has("hookshot") then + if has("logic_forest_vines") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Forest Temple NW Outdoors"] = { + ["child_access"] = function() + if has("scale2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ironboots") or has("scale2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple Lobby"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Forest Temple Outdoors High Balconies"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Well Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple NW Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple NE Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple Falling Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hoverboots") then + local trick = + has("logic_forest_door_frame") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, can_use_scarecrow()) + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple Falling Room"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Falling Ceiling Room Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple NE Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Forest Temple Block Push Room"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Eye Switch Chest"] = { + ["child_access"] = function() + if has("lift1") and has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift1") and has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Forest Temple Outside Upper Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hoverboots") then + return AccessibilityLevel.Normal + elseif has("lift1") then + if has("logic_forest_outside_backdoor") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Forest Temple Bow Region"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift1") and has("forest_small_keys", 3) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple Straightened Hall"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift1") and has("forest_small_keys", 2) and has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple Straightened Hall"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Boss Key Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple Outside Upper Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Forest Temple Outside Upper Ledge"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Floormaster Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple NW Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Forest Temple Bow Region"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Bow Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple Red Poe Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple Blue Poe Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Forest Temple Falling Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 5) and (has("bow") or (has("dinsfire") and has("magic"))) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple Boss Region"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple Basement Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple GS Basement"] = { + ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Phantom Ganon"] = { + ["child_access"] = function() + if has("forest_boss_key") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_boss_key") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Forest Temple MQ Lobby"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ First Room Chest"] = { + ["child_access"] = function() + if + has("bombs") or has("sticks") or has("nuts") or has("boomerang") or (has("dinsfire") and has("magic")) or + has("sword1") or + has("sling") + then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple MQ GS First Hallway"] = { + ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["SFM Forest Temple Entrance Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple MQ Central Area"] = { + ["child_access"] = function() + if has("forest_small_keys", 1) then + if has("nuts") then + return AccessibilityLevel.Normal + end + return can_child_attack() + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 1) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple MQ Central Area"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Wolfos Chest"] = { + ["child_access"] = function() + if (has("dinsfire") and has("magic")) or has("sticks") or has("sling") or has("sword1") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("time") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ GS Block Push Room"] = { + ["child_access"] = function() + if has("sword1") then + return AccessibilityLevel.Normal + elseif has("sticks") then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple MQ NW Outdoors"] = { + ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ NE Outdoors"] = { + ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ After Block Puzzle"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift1") then + return AccessibilityLevel.Normal + end + if has("hookshot") then + local trick = + has("logic_forest_mq_block_puzzle") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, has_bombchus()) + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ Outdoor Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local hb = AccessibilityLevel.None + if has("hoverboots") then + if has("logic_forest_mq_hallway_switch_jumpslash") then + return AccessibilityLevel.Normal + end + hb = AccessibilityLevel.SequenceBreak + end + local hs = AccessibilityLevel.None + if has("hookshot") then + if has("logic_forest_mq_hallway_switch_hookshot") then + return AccessibilityLevel.Normal + end + hs = AccessibilityLevel.SequenceBreak + end + return or_accessibility(hb, hs) + end + }, + ["Forest Temple MQ Boss Region"] = { + ["child_access"] = function() + return poes_killed_mq() + end, + ["adult_access"] = function() + return poes_killed_mq() + end + } + } + }, + ["Forest Temple MQ After Block Puzzle"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Boss Key Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 3) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Forest Temple MQ Bow Region"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 4) then + return AccessibilityLevel.Normal + elseif has("forest_small_keys", 3) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ Outdoor Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 3) then + return AccessibilityLevel.Normal + end + + local keys = has("forest_small_keys", 2) and AccessibilityLevel.SequenceBreak or AccessibilityLevel.None + local trick1 = + has("logic_forest_mq_hallway_switch_jumpslash") and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local hook = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick2 = + has("logic_forest_outside_backdoor") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + + return or_accessibility(keys, and_accessibility(trick1, or_accessibility(hook, trick2))) + end + }, + ["Forest Temple MQ NW Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 2) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple MQ Outdoor Ledge"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Redead Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple MQ NW Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Forest Temple MQ NW Outdoors"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ GS Level Island Courtyard"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple MQ NE Outdoors"] = { + ["child_access"] = function() + if has("scale2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ironboots") or has("longshot") or has("scale2") then + return AccessibilityLevel.Normal + end + if has("hookshot") then + if has("logic_forest_well_swim") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ Outdoors Top Ledges"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") and has("firearrow") and has("magic") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple MQ NE Outdoors"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Well Chest"] = { + ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ GS Raised Island Courtyard"] = { + ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + elseif has("bow") and has("firearrow") and has("magic") then + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_forest_door_frame") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility(sot, and_accessibility(hb, trick)) + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ GS Well"] = { + ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if (has("ironboots") and has("hookshot")) or has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Forest Temple MQ Outdoors Top Ledges"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + if has("longshot") or has("hoverboots") or (has("ocarina") and has("time")) or has("logic_forest_vines") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ NE Outdoors Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple MQ Outdoors Top Ledges"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Raised Island Courtyard Upper Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple MQ NE Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple MQ NE Outdoors Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hoverboots") then + if has("logic_forest_outdoors_ledge") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple MQ NE Outdoors Ledge"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Raised Island Courtyard Lower Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple MQ NE Outdoors"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple MQ Falling Room"] = { + ["child_access"] = function() + if has("ocarina") and has("time") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("time") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple MQ Bow Region"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Bow Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Forest Temple MQ Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Forest Temple MQ Compass Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Forest Temple MQ Falling Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_small_keys", 5) and (has("bow") or (has("dinsfire") and has("magic"))) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Forest Temple MQ Falling Room"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Falling Ceiling Room Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Forest Temple MQ NE Outdoors Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Forest Temple MQ Boss Region"] = { + ["scene"] = "Forest Temple", + ["dungeon"] = true, + ["locations"] = { + ["Forest Temple MQ Basement Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Phantom Ganon"] = { + ["child_access"] = function() + if has("forest_boss_key") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("forest_boss_key") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle Split"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["exits"] = { + ["Ganons Castle Lobby"] = { + ["child_access"] = function() + if has("gc_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gc_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle MQ Lobby"] = { + ["child_access"] = function() + if has("gc_mq") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gc_mq") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Ganons Castle Lobby"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["exits"] = { + ["Castle Grounds"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle Forest Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle Fire Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle Water Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle Shadow Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle Spirit Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle Light Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift3") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle Tower"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal --TODO: trials logic + end + }, + ["Ganons Castle Deku Scrubs"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + if has("logic_lens_castle") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + } + } + }, + ["Ganons Castle Deku Scrubs"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle Deku Scrubs"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle Forest Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle Forest Trial Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle Fire Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["exits"] = {} + }, + ["Ganons Castle Water Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle Water Trial Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle Shadow Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle Shadow Trial Front Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if + (has("bow") and has("firearrow") and has("magic")) or has("hookshot") or has("hoverboots") or + (has("ocarina") and has("time")) + then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle Shadow Trial Golden Gauntlets Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if + (has("bow") and has("firearrow") and has("magic")) or + (has("longshot") and (has("hoverboots") or (has("dinsfire") and has("magic")))) + then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle Spirit Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle Spirit Trial Crystal Switch Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("logic_spirit_trial_hookshot") or has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Ganons Castle Spirit Trial Invisible Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local hs = + (has("logic_spirit_trial_hookshot") or has("hookshot")) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local lot = + (has("logic_lens_castle") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(hs, has_bombchus(), lot) + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle Light Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle Light Trial Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle Light Trial Invisible Enemies Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("logic_lens_castle") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Ganons Castle Light Trial Lullaby Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("lullaby") and has("gc_small_keys", 1) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle MQ Lobby"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["exits"] = { + ["Castle Grounds"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle MQ Forest Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle MQ Fire Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle MQ Water Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle MQ Shadow Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle MQ Spirit Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ganons Castle MQ Light Trial"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift3") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle Tower"] = { + --TODO: split off MQ? + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal --TODO: trials logic + end + }, + ["Ganons Castle MQ Deku Scrubs"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + if has("logic_lens_castle_mq") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + } + } + }, + ["Ganons Castle MQ Deku Scrubs"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle MQ Deku Scrubs"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle MQ Forest Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle MQ Forest Trial Eye Switch Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle MQ Forest Trial Frozen Eye Switch Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_fire() + end + }, + ["Ganons Castle MQ Forest Trial Freestanding Key"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle MQ Fire Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["exits"] = {} + }, + ["Ganons Castle MQ Water Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle MQ Water Trial Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_bottle() + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle MQ Shadow Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle MQ Shadow Trial Bomb Flower Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") and (has("hookshot") and has("hoverboots")) then + return AccessibilityLevel.Normal + elseif has("hoverboots") then + local lot = + (has("logic_lens_castle_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local lift = has("lift1") and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility(lot, or_accessibility(has_explosives(), lift, df)) + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle MQ Shadow Trial Eye Switch Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + local lot = + (has("logic_lens_castle_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_shadow_trial_mq") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility( + lot, + or_accessibility(hb, and_accessibility(hs, or_accessibility(has_fire(), trick))) + ) + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle MQ Spirit Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle MQ Spirit Trial First Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + if has("bow") or has("logic_rusted_switches") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle MQ Spirit Trial Invisible Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + local bow = + (has("bow") or has("logic_rusted_switches")) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local lot = + (has("logic_lens_castle_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(bow, has_bombchus(), lot) + end + return AccessibilityLevel.None + end + }, + ["Ganons Castle MQ Spirit Trial Sun Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") and (has("bow") and has("firearrow") and has("magic")) and has("shield3") then + return has_bombchus() + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle MQ Light Trial"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Castle MQ Light Trial Lullaby Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("lullaby") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ganons Castle Tower"] = { + ["scene"] = "Ganons Castle", + ["dungeon"] = true, + ["locations"] = { + ["Ganons Tower Boss Key Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = {} + }, + ["Gerudo Training Grounds Split"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["exits"] = { + ["Gerudo Training Grounds Lobby"] = { + ["child_access"] = function() + if has("gtg_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds MQ Lobby"] = { + ["child_access"] = function() + if has("gtg_mq") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_mq") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Gerudo Training Grounds Lobby"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Lobby Chests"] = { + ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds Stalfos Chest"] = { + ["child_access"] = function() + if has("sword1") then + return AccessibilityLevel.Normal + elseif has("sticks") then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds Beamos Chest"] = { + ["child_access"] = function() + local weapon = AccessibilityLevel.None + if has("sword1") then + weapon = AccessibilityLevel.Normal + elseif has("sticks") then + weapon = AccessibilityLevel.SequenceBreak + end + return and_accessibility(has_explosives(), weapon) + end, + ["adult_access"] = function() + return has_explosives() + end + } + }, + ["exits"] = { + ["Gerudo Fortress"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds Heavy Block Room"] = { + ["child_access"] = function() + if has("sword1") and has("logic_gtg_without_hookshot") then + return AccessibilityLevel.Normal + elseif has("sword1") or has("sticks") then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") or has("logic_gtg_without_hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Gerudo Training Grounds Lava Room"] = { + ["child_access"] = function() + local explo = has_explosives() + if has("sword1") or (access_region("Gerudo Training Grounds Lobby", "adult") == AccessibilityLevel.Normal) then + return explo + end + if has("sticks") and explo ~= AccessibilityLevel.None then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_explosives() + end + }, + ["Gerudo Training Grounds Central Maze"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Gerudo Training Grounds Central Maze"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Hidden Ceiling Chest"] = { + ["child_access"] = function() + local lot = + (has("logic_lens_gtg") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local keys = AccessibilityLevel.None + if has("gtg_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("gtg_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(keys, lot) + end, + ["adult_access"] = function() + local lot = + (has("logic_lens_gtg") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local keys = AccessibilityLevel.None + if has("gtg_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("gtg_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(keys, lot) + end + }, + ["Gerudo Training Grounds Maze Path First Chest"] = { + ["child_access"] = function() + if has("gtg_small_keys", 4) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 2) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_small_keys", 4) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 2) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds Maze Path Second Chest"] = { + ["child_access"] = function() + if has("gtg_small_keys", 6) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 4) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_small_keys", 6) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 4) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds Maze Path Third Chest"] = { + ["child_access"] = function() + if has("gtg_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 5) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 5) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds Maze Path Final Chest"] = { + ["child_access"] = function() + if has("gtg_small_keys", 9) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 7) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_small_keys", 9) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 7) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds Central Maze Right"] = { + ["child_access"] = function() + if has("gtg_small_keys", 9) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 2) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_small_keys", 9) then + return AccessibilityLevel.Normal + elseif has("gtg_small_keys", 2) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + } + } + }, + ["Gerudo Training Grounds Central Maze Right"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Maze Right Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds Freestanding Key"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds Hammer Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds Lava Room"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Gerudo Training Grounds Lava Room"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Underwater Silver Rupee Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") and has("ocarina") and has("time") and has("ironboots") then + return FTR_or_zora() + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds Central Maze Right"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + if has("ocarina") and has("time") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds Hammer Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") or (has("hookshot") and has("hoverboots")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Gerudo Training Grounds Hammer Room"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Hammer Room Clear Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds Hammer Room Switch Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds Eye Statue Lower"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") and has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds Lava Room"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Gerudo Training Grounds Eye Statue Lower"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Eye Statue Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds Hammer Room"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Gerudo Training Grounds Eye Statue Upper"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Near Scarecrow Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds Eye Statue Lower"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Gerudo Training Grounds Heavy Block Room"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Before Heavy Block Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds Eye Statue Upper"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local wall = + (has("logic_lens_gtg") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + local climb = AccessibilityLevel.None + if has("hookshot") then + climb = AccessibilityLevel.Normal + elseif has("hoverboots") then + if has("logic_gtg_fake_wall") then + climb = AccessibilityLevel.Normal + else + climb = AccessibilityLevel.SequenceBreak + end + elseif has("bombs") and (has("shield2") or has("shield3")) then + climb = AccessibilityLevel.SequenceBreak + end + + return and_accessibility(wall, climb) + end + }, + ["Gerudo Training Grounds Like Like Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift2") then + local wall = + (has("logic_lens_gtg") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + + local climb = AccessibilityLevel.None + if has("hookshot") then + climb = AccessibilityLevel.Normal + elseif has("hoverboots") then + if has("logic_gtg_fake_wall") then + climb = AccessibilityLevel.Normal + else + climb = AccessibilityLevel.SequenceBreak + end + elseif has("bombs") and (has("shield2") or has("shield3")) then + climb = AccessibilityLevel.SequenceBreak + end + + return and_accessibility(wall, climb) + end + return AccessibilityLevel.None + end + } + } + }, + ["Gerudo Training Grounds Like Like Room"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds Heavy Block Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = {} + }, + ["Gerudo Training Grounds MQ Lobby"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds MQ Lobby Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds MQ Hidden Ceiling Chest"] = { + ["child_access"] = function() + if has("logic_lens_gtg_mq") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end, + ["adult_access"] = function() + if has("logic_lens_gtg_mq") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Gerudo Training Grounds MQ Maze Path First Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds MQ Maze Path Second Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds MQ Maze Path Third Chest"] = { + ["child_access"] = function() + if has("gtg_small_keys", 1) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_small_keys", 1) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Gerudo Fortress"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds MQ Left Side"] = { + ["child_access"] = function() + if has("dinsfire") and has("magic") then + return AccessibilityLevel.Normal + end + if has("bow") and has("firearrow") and has("magic") then + return access_region("Gerudo Training Grounds MQ Lobby", "adult") + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_fire() + end + }, + ["Gerudo Training Grounds MQ Right Side"] = { + ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end + if has("bow") then + return access_region("Gerudo Training Grounds MQ Lobby", "adult") + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + if has("sling") then + return access_region("Gerudo Training Grounds MQ Lobby", "child") + end + return AccessibilityLevel.None + end + } + } + }, + ["Gerudo Training Grounds MQ Right Side"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds MQ Dinolfos Chest"] = { + ["child_access"] = function() + if has("sticks") then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds MQ Underwater"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if (has("bow") or has("longshot")) and has("hoverboots") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Gerudo Training Grounds MQ Underwater"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds MQ Underwater Silver Rupee Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ironboots") then + return and_accessibility(has_fire(), FTR_or_zora(), damage_single_instance_ohko()) + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Gerudo Training Grounds MQ Left Side"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds MQ First Iron Knuckle Chest"] = { + ["child_access"] = function() + local weapon = AccessibilityLevel.None + if has("sword1") then + weapon = AccessibilityLevel.Normal + elseif has("sticks") then + weapon = AccessibilityLevel.SequenceBreak + end + return or_accessibility(has_explosives(), weapon) + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds MQ Stalfos Room"] = { + ["child_access"] = function() + if has("logic_gtg_mq_without_hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end, + ["adult_access"] = function() + if + has("longshot") or has("logic_gtg_mq_without_hookshot") or + (has("logic_gtg_mq_with_hookshot") and has("hookshot")) + then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + } + } + }, + ["Gerudo Training Grounds MQ Stalfos Room"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds MQ Before Heavy Block Chest"] = { + ["child_access"] = function() + if has("sticks") then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds MQ Heavy Block Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift2") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds MQ Back Areas"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local lot = + (has("logic_lens_gtg_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + + local wall = AccessibilityLevel.None + if has("hoverboots") then + if has("logic_gtg_fake_wall") then + wall = AccessibilityLevel.Normal + else + wall = AccessibilityLevel.SequenceBreak + end + end + + return and_accessibility(lot, has_bottle(), or_accessibility(sot, wall)) + end + } + } + }, + ["Gerudo Training Grounds MQ Back Areas"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds MQ Eye Statue Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds MQ Second Iron Knuckle Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds MQ Flame Circle Chest"] = { + ["child_access"] = function() + return has_explosives() + end, + ["adult_access"] = function() + if has("hookshot") or has("bow") then + return AccessibilityLevel.Normal + end + return has_explosives() + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds MQ Central Maze Right"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds MQ Right Side"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Gerudo Training Grounds MQ Central Maze Right"] = { + ["scene"] = "Gerudo Training Grounds", + ["dungeon"] = true, + ["locations"] = { + ["Gerudo Training Grounds MQ Maze Right Chests"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Gerudo Training Grounds MQ Ice Arrows Chest"] = { + ["child_access"] = function() + if has("gtg_small_keys", 3) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("gtg_small_keys", 3) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Gerudo Training Grounds MQ Underwater"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") or (has("hookshot") and has("bow")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Gerudo Training Grounds MQ Right Side"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + } + }, + ["Ice Cavern Split"] = { + ["scene"] = "Ice Cavern", ["dungeon"] = true, ["exits"] = { - ["Forest Temple NE Outdoors"] = { + ["Ice Cavern Beginning"] = { ["child_access"] = function() - if has("scale2") then + if has("ice_reg") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("scale2") then + if has("ice_reg") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end }, - ["Forest Temple Outdoors High Balconies"] = { + ["Ice Cavern MQ Beginning"] = { ["child_access"] = function() - if (has("boomerang") or has("nuts") or has("shield1")) and (has("sticks") or has("sword1") or has("sling")) then + if has("ice_mq") then return AccessibilityLevel.Normal end - local adult = access_region("Forest Temple NW Outdoors", "adult") - local explo = has_explosives() - if adult == AccessibilityLevel.Normal or explo == AccessibilityLevel.Normal then + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ice_mq") then return AccessibilityLevel.Normal - elseif adult == AccessibilityLevel.SequenceBreak or explo == AccessibilityLevel.SequenceBreak then - return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + } + } + }, + ["Ice Cavern Beginning"] = { + ["scene"] = "Ice Cavern", + ["dungeon"] = true, + ["exits"] = { + ["ZF Ice Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ice Cavern"] = { + ["child_access"] = function() + if has("dinsfire") and has("magic") then + return AccessibilityLevel.Normal + end + return or_accessibility(access_region("Ice Cavern Beginning", "adult"), has_explosives()) + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + } + }, + ["Ice Cavern"] = { + ["scene"] = "Ice Cavern", + ["dungeon"] = true, + ["locations"] = { + ["Ice Cavern Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_bottle() + end + }, + ["Ice Cavern Compass Chest"] = { + ["child_access"] = function() + return has_bottle() --TODO: blue fire + end, + ["adult_access"] = function() + return has_bottle() + end + }, + ["Ice Cavern Iron Boots Chest"] = { + ["child_access"] = function() + if has("sling") or has("sticks") or has("sword1") or (has("dinsfire") and has("magic")) then + return has_bottle() --TODO: blue fire + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_bottle() + end + }, + ["Sheik in Ice Cavern"] = { + ["child_access"] = function() + if has("sling") or has("sticks") or has("sword1") or (has("dinsfire") and has("magic")) then + return has_bottle() --TODO: blue fire + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_bottle() + end + }, + ["Ice Cavern Freestanding PoH"] = { + ["child_access"] = function() + return has_bottle() --TODO: blue fire + end, + ["adult_access"] = function() + return has_bottle() + end + }, + ["Ice Cavern GS Spinning Scythe Room"] = { + ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Ice Cavern GS Heart Piece Room"] = { + ["child_access"] = function() + if has("boomerang") then + return has_bottle() --TODO: blue fire + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return has_bottle() + end + return AccessibilityLevel.None + end + }, + ["Ice Cavern GS Push Block Room"] = { + ["child_access"] = function() + if has("boomerang") then + return has_bottle() --TODO: blue fire + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return has_bottle() + elseif has("hoverboots") then + local trick = has("logic_ice_block_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(has_bottle(), trick) + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Ice Cavern MQ Beginning"] = { + ["scene"] = "Ice Cavern", + ["dungeon"] = true, + ["exits"] = { + ["ZF Ice Ledge"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ice Cavern MQ Map Room"] = { + ["child_access"] = function() + if has("dinsfire") and has("magic") then + return AccessibilityLevel.Normal + end + if has("sticks") or has("sling") or has("sword1") then + return has_explosives() end return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end + }, + ["Ice Cavern MQ Compass Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_bottle() + end + }, + ["Ice Cavern MQ Iron Boots Region"] = { + ["child_access"] = function() + return has_bottle() --TODO: blue fire + end, + ["adult_access"] = function() + return has_bottle() + end } } }, - ["Forest Temple NE Outdoors"] = { - ["scene"] = "Forest Temple", + ["Ice Cavern MQ Map Room"] = { + ["scene"] = "Ice Cavern", + ["dungeon"] = true, + ["locations"] = { + ["Ice Cavern MQ Map Chest"] = { + ["child_access"] = function() + if has("sticks") or has("sword1") then + return has_bottle() + end + return and_accessibility(has_bottle(), has_projectile("child")) + end, + ["adult_access"] = function() + return has_bottle() + end + } + }, + ["exits"] = {} + }, + ["Ice Cavern MQ Iron Boots Region"] = { + ["scene"] = "Ice Cavern", + ["dungeon"] = true, + ["locations"] = { + ["Ice Cavern MQ Iron Boots Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Sheik in Ice Cavern"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ice Cavern MQ GS Ice Block"] = { + ["child_access"] = function() + return can_child_attack() + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ice Cavern MQ GS Scarecrow"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if + (can_use_scarecrow() == AccessibilityLevel.Normal) or (has("hoverboots") and has("longshot")) or + has("logic_ice_mq_scarecrow") + then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + } + }, + ["exits"] = {} + }, + ["Ice Cavern MQ Compass Room"] = { + ["scene"] = "Ice Cavern", + ["dungeon"] = true, + ["locations"] = { + ["Ice Cavern MQ Compass Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Ice Cavern MQ Freestanding PoH"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_explosives() + end + }, + ["Ice Cavern MQ GS Red Ice"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if (has("ocarina") and has("time")) or has("logic_ice_mq_red_ice_gs") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + } + }, + ["exits"] = {} + }, + ["Jabu Jabus Belly Split"] = { + ["scene"] = "Jabu Jabus Belly", ["dungeon"] = true, ["exits"] = { - ["Forest Temple Outdoors High Balconies"] = { + ["Jabu Jabus Belly Beginning"] = { ["child_access"] = function() + if has("jabu_reg") then + return AccessibilityLevel.Normal + end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("longshot") then + if has("jabu_reg") then return AccessibilityLevel.Normal - elseif has("hookshot") then - if has("logic_forest_vines") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end }, - ["Forest Temple NW Outdoors"] = { + ["Jabu Jabus Belly MQ Beginning"] = { ["child_access"] = function() - if has("scale2") then + if has("jabu_mq") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("ironboots") or has("scale2") then + if has("jabu_mq") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end - }, - ["Forest Temple Lobby"] = { + } + } + }, + ["Jabu Jabus Belly Beginning"] = { + ["scene"] = "Jabu Jabus Belly", + ["dungeon"] = true, + ["exits"] = { + ["Zoras Fountain"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.Normal end + }, + ["Jabu Jabus Belly Main"] = { + ["child_access"] = function() + return has_projectile("child") + end, + ["adult_access"] = function() + return has_projectile("adult") + end } } }, - ["Forest Temple Outdoors High Balconies"] = { - ["scene"] = "Forest Temple", + ["Jabu Jabus Belly Main"] = { + ["scene"] = "Jabu Jabus Belly", ["dungeon"] = true, - ["exits"] = { - ["Forest Temple NW Outdoors"] = { + ["locations"] = { + ["Jabu Jabus Belly Boomerang Chest"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7007,7 +11188,7 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Forest Temple NE Outdoors"] = { + ["Jabu Jabus Belly GS Water Switch Room"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7015,99 +11196,95 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Forest Temple Falling Room"] = { + ["Jabu Jabus Belly GS Lobby Basement Lower"] = { ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") and has("ocarina") and has("scarecrow") then - if has("logic_forest_scarecrow") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak + if has("hookshot") then + return AccessibilityLevel.Normal end return AccessibilityLevel.None end - } - } - }, - ["Forest Temple Falling Room"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, - ["exits"] = { - ["Forest Temple NE Outdoors"] = { + }, + ["Jabu Jabus Belly GS Lobby Basement Upper"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end, ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Jabu Jabus Belly Deku Scrub"] = { + ["child_access"] = function() return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + if has("scale") or has("logic_jabu_scrub_jump_dive") or has("ironboots") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end } - } - }, - ["Forest Temple Block Push Room"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Forest Temple Outside Upper Ledge"] = { + ["Jabu Jabus Belly Beginning"] = { ["child_access"] = function() - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("hoverboots") then - return AccessibilityLevel.Normal - elseif has("lift1") then - if has("logic_forest_outside_backdoor") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end }, - ["Forest Temple Bow Region"] = { + ["Jabu Jabus Belly Depths"] = { ["child_access"] = function() + if has("boomerang") then + return AccessibilityLevel.Normal + end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift1") and has("forest_small_keys", 3) then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end }, - ["Forest Temple Straightened Hall"] = { + ["Jabu Jabus Belly Boss Area"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift1") and has("forest_small_keys", 2) and has("bow") then - return AccessibilityLevel.Normal + if has("hoverboots") then + if has("logic_jabu_boss_gs_adult") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end } } }, - ["Forest Temple Straightened Hall"] = { - ["scene"] = "Forest Temple", + ["Jabu Jabus Belly Depths"] = { + ["scene"] = "Jabu Jabus Belly", ["dungeon"] = true, - ["exits"] = { - ["Forest Temple Outside Upper Ledge"] = { + ["locations"] = { + ["Jabu Jabus Belly Map Chest"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.Normal end - } - } - }, - ["Forest Temple Outside Upper Ledge"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, - ["exits"] = { - ["Forest Temple NW Outdoors"] = { + }, + ["Jabu Jabus Belly Compass Chest"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7115,35 +11292,9 @@ data_per_region = { return AccessibilityLevel.Normal end } - } - }, - ["Forest Temple Bow Region"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, - ["exits"] = { - ["Forest Temple Falling Room"] = { - ["child_access"] = function() - return AccessibilityLevel.None - end, - ["adult_access"] = function() - if has("forest_small_keys", 5) and (has("bow") or (has("dinsfire") and has("magic"))) then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None - end - } - } - }, - ["Forest Temple Boss Region"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Forest Temple MQ Lobby"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["SFM Forest Temple Entrance Ledge"] = { + ["Jabu Jabus Belly Main"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7151,284 +11302,230 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Forest Temple MQ Central Area"] = { + ["Jabu Jabus Belly Boss Area"] = { ["child_access"] = function() - if has("forest_small_keys", 1) then - if has("nuts") then - return AccessibilityLevel.Normal - end - return can_child_attack() + if has("sticks") or has("sword1") then + return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("forest_small_keys", 1) then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end } } }, - ["Forest Temple MQ Central Area"] = { - ["scene"] = "Forest Temple", + ["Jabu Jabus Belly Boss Area"] = { + ["scene"] = "Jabu Jabus Belly", ["dungeon"] = true, - ["exits"] = { - ["Forest Temple MQ NW Outdoors"] = { + ["locations"] = { + ["Barinade"] = { ["child_access"] = function() - if has("sling") then + if has("boomerang") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("bow") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end }, - ["Forest Temple MQ NE Outdoors"] = { + ["Jabu Jabus Belly GS Near Boss"] = { ["child_access"] = function() - if has("sling") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("bow") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end - }, - ["Forest Temple MQ After Block Puzzle"] = { + } + }, + ["exits"] = { + ["Jabu Jabus Belly Main"] = { ["child_access"] = function() - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("lift1") then - return AccessibilityLevel.Normal - end - if has("hookshot") then - local trick = AccessibilityLevel.SequenceBreak - if has("logic_forest_mq_block_puzzle") then - trick = AccessibilityLevel.Normal - end - return and_accessibility(trick, has_bombchus()) - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal + end + } + } + }, + ["Jabu Jabus Belly MQ Beginning"] = { + ["scene"] = "Jabu Jabus Belly", + ["dungeon"] = true, + ["locations"] = { + ["Jabu Jabus Belly MQ Map Chest"] = { + ["child_access"] = function() + return has_explosives() + end, + ["adult_access"] = function() + return can_blast() end }, - ["Forest Temple MQ Outdoor Ledge"] = { + ["Jabu Jabus Belly MQ First Room Side Chest"] = { ["child_access"] = function() + if has("sling") then + return AccessibilityLevel.Normal + end return AccessibilityLevel.None end, ["adult_access"] = function() - local hovers = AccessibilityLevel.None - if has("hoverboots") then - if has("logic_forest_mq_hallway_switch_jumpslash") then - return AccessibilityLevel.Normal - end - hovers = AccessibilityLevel.SequenceBreak - end - local hook = AccessibilityLevel.None - if has("hookshot") then - if has("logic_forest_mq_hallway_switch_hookshot") then - return AccessibilityLevel.Normal - end - hook = AccessibilityLevel.SequenceBreak - end - if hovers == AccessibilityLevel.SequenceBreak or hook == AccessibilityLevel.SequenceBreak then - return AccessibilityLevel.SequenceBreak - end return AccessibilityLevel.None end + } + }, + ["exits"] = { + ["Zoras Fountain"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end }, - ["Forest Temple MQ Boss Region"] = { + ["Jabu Jabus Belly MQ Main"] = { ["child_access"] = function() - return poes_killed_mq() + if has("sling") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return poes_killed_mq() + if has("sling") then + return access_region("Jabu Jabus Belly MQ Beginning", "child") + end + return AccessibilityLevel.None end } } }, - ["Forest Temple MQ After Block Puzzle"] = { - ["scene"] = "Forest Temple", + ["Jabu Jabus Belly MQ Main"] = { + ["scene"] = "Jabu Jabus Belly", ["dungeon"] = true, - ["exits"] = { - ["Forest Temple MQ Bow Region"] = { + ["locations"] = { + ["Jabu Jabus Belly MQ Second Room Lower Chest"] = { ["child_access"] = function() - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("forest_small_keys", 4) then - return AccessibilityLevel.Normal - elseif has("forest_small_keys", 3) then - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end }, - ["Forest Temple MQ Outdoor Ledge"] = { + ["Jabu Jabus Belly MQ Second Room Upper Chest"] = { ["child_access"] = function() - return AccessibilityLevel.None + return access_region("Jabu Jabus Belly MQ Boss Area", "child") end, ["adult_access"] = function() - if has("forest_small_keys", 3) then + if has("hoverboots") or has("hookshot") then return AccessibilityLevel.Normal end - - local keys = AccessibilityLevel.None - if has("forest_small_keys", 2) then - keys = AccessibilityLevel.SequenceBreak - end - local trick1 = AccessibilityLevel.SequenceBreak - if has("logic_forest_mq_hallway_switch_jumpslash") then - trick1 = AccessibilityLevel.Normal - end - local hook = AccessibilityLevel.None - if has("hookshot") then - hook = AccessibilityLevel.Normal - end - local trick2 = AccessibilityLevel.SequenceBreak - if has("logic_forest_outside_backdoor") then - trick2 = AccessibilityLevel.Normal - end - - return or_accessibility(keys, and_accessibility(trick1, or_accessibility(hook, trick2))) + return AccessibilityLevel.None end }, - ["Forest Temple MQ NW Outdoors"] = { + ["Jabu Jabus Belly MQ Compass Chest"] = { ["child_access"] = function() - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("forest_small_keys", 2) then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end - } - } - }, - ["Forest Temple MQ Outdoor Ledge"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, - ["exits"] = { - ["Forest Temple MQ NW Outdoors"] = { + }, + ["Jabu Jabus Belly MQ Basement Chests"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.Normal end - } - } - }, - ["Forest Temple MQ NW Outdoors"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, - ["exits"] = { - ["Forest Temple MQ NE Outdoors"] = { + }, + ["Jabu Jabus Belly MQ Boomerang Room Chests"] = { ["child_access"] = function() - if has("scale2") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("ironboots") or has("longshot") or has("scale2") then + return AccessibilityLevel.Normal + end + }, + ["Jabu Jabus Belly MQ GS Boomerang Chest Room"] = { + ["child_access"] = function() + if has("ocarina") and has("time") then return AccessibilityLevel.Normal - end - if has("hookshot") then - if has("logic_forest_well_swim") then + elseif has("boomerang") then + if has("logic_jabu_mq_sot_gs") then return AccessibilityLevel.Normal end return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None - end - }, - ["Forest Temple MQ Outdoors Top Ledges"] = { - ["child_access"] = function() - return AccessibilityLevel.None end, ["adult_access"] = function() - if has("bow") and has("firearrow") and has("magic") then + if has("ocarina") and has("time") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end } - } - }, - ["Forest Temple MQ NE Outdoors"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Forest Temple MQ Outdoors Top Ledges"] = { + ["Jabu Jabus Belly MQ Beginning"] = { ["child_access"] = function() - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() - if has("hookshot") then - if has("longshot") or has("hoverboots") or (has("ocarina") and has("time")) or has("logic_forest_vines") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end }, - ["Forest Temple MQ NE Outdoors Ledge"] = { + ["Jabu Jabus Belly MQ Depths"] = { ["child_access"] = function() + if has("boomerang") then + return has_explosives() + end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("longshot") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end } } }, - ["Forest Temple MQ Outdoors Top Ledges"] = { - ["scene"] = "Forest Temple", + ["Jabu Jabus Belly MQ Depths"] = { + ["scene"] = "Jabu Jabus Belly", ["dungeon"] = true, - ["exits"] = { - ["Forest Temple MQ NE Outdoors"] = { + ["locations"] = { + ["Jabu Jabus Belly MQ Falling Like Like Room Chest"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, - ["Forest Temple MQ NE Outdoors Ledge"] = { + ["Jabu Jabus Belly MQ GS Tailpasaran Room"] = { ["child_access"] = function() + if has("sticks") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") then - if has("logic_forest_outdoors_ledge") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak - end + return AccessibilityLevel.None + end + }, + ["Jabu Jabus Belly MQ GS Invisible Enemies Room"] = { + ["child_access"] = function() + local lot = + (has("logic_lens_jabu_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + local adult = (has("hoverboots") or has("hookshot")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility(lot, and_accessibility(access_region("Jabu Jabus Belly MQ Main", "adult"), adult)) + end, + ["adult_access"] = function() return AccessibilityLevel.None end } - } - }, - ["Forest Temple MQ NE Outdoors Ledge"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Forest Temple MQ NE Outdoors"] = { + ["Jabu Jabus Belly MQ Main"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7436,44 +11533,61 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Forest Temple MQ Falling Room"] = { + ["Jabu Jabus Belly MQ Boss Area"] = { ["child_access"] = function() - if has("ocarina") and has("time") then + if has("sticks") or (has("dinsfire") and has("magic") and has("sword1")) then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("ocarina") and has("time") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end } } }, - ["Forest Temple MQ Bow Region"] = { - ["scene"] = "Forest Temple", + ["Jabu Jabus Belly MQ Boss Area"] = { + ["scene"] = "Jabu Jabus Belly", ["dungeon"] = true, - ["exits"] = { - ["Forest Temple MQ Falling Room"] = { + ["locations"] = { + ["Jabu Jabus Belly MQ Cow"] = { ["child_access"] = function() + if has("ocarina") and has("epona") then + return AccessibilityLevel.Normal + end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("forest_small_keys", 5) and (has("bow") or (has("dinsfire") and has("magic"))) then - return AccessibilityLevel.Normal - end + return AccessibilityLevel.None + end + }, + ["Jabu Jabus Belly MQ Near Boss Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Barinade"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.None + end + }, + ["Jabu Jabus Belly MQ GS Near Boss"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() return AccessibilityLevel.None end } - } - }, - ["Forest Temple MQ Falling Room"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Forest Temple MQ NE Outdoors Ledge"] = { + ["Jabu Jabus Belly MQ Main"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7483,38 +11597,33 @@ data_per_region = { } } }, - ["Forest Temple MQ Boss Region"] = { - ["scene"] = "Forest Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle Split"] = { - ["scene"] = "Ganons Castle", + ["Shadow Temple Split"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, ["exits"] = { - ["Ganons Castle Lobby"] = { + ["Shadow Temple Entryway"] = { ["child_access"] = function() - if has("gc_reg") then + if has("shadow_reg") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("gc_reg") then + if has("shadow_reg") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end }, - ["Ganons Castle MQ Lobby"] = { + ["Shadow Temple MQ Entryway"] = { ["child_access"] = function() - if has("gc_mq") then + if has("shadow_mq") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("gc_mq") then + if has("shadow_mq") then return AccessibilityLevel.Normal end return AccessibilityLevel.None @@ -7522,19 +11631,11 @@ data_per_region = { } } }, - ["Ganons Castle Lobby"] = { - ["scene"] = "Ganons Castle", + ["Shadow Temple Entryway"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, ["exits"] = { - ["Castle Grounds"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.Normal - end - }, - ["Ganons Castle Forest Trial"] = { + ["Graveyard Warp Pad Region"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7542,31 +11643,45 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Ganons Castle Fire Trial"] = { + ["Shadow Temple Beginning"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("hoverboots") or has("hookshot") then + if has("logic_lens_shadow") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None end - }, - ["Ganons Castle Water Trial"] = { + } + } + }, + ["Shadow Temple Beginning"] = { + ["scene"] = "Shadow Temple", + ["dungeon"] = true, + ["locations"] = { + ["Shadow Temple Map Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Ganons Castle Shadow Trial"] = { + ["Shadow Temple Hover Boots Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end - }, - ["Ganons Castle Spirit Trial"] = { + } + }, + ["exits"] = { + ["Shadow Temple Entryway"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -7574,859 +11689,770 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Ganons Castle Light Trial"] = { + ["Shadow Temple First Beamos"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift3") then + if has("hoverboots") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end - }, - ["Ganons Castle Tower"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.Normal --TODO: trials logic - end - }, - ["Ganons Castle Deku Scrubs"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - if has("logic_lens_castle") or (has("lens") and has("magic")) then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak - end } } }, - ["Ganons Castle Deku Scrubs"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle Forest Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle Fire Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle Water Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle Shadow Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle Spirit Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle Light Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle MQ Lobby"] = { - ["scene"] = "Ganons Castle", + ["Shadow Temple First Beamos"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["Castle Grounds"] = { + ["locations"] = { + ["Shadow Temple Compass Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Ganons Castle MQ Forest Trial"] = { + ["Shadow Temple Early Silver Rupee Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end - }, - ["Ganons Castle MQ Fire Trial"] = { + } + }, + ["exits"] = { + ["Shadow Temple Huge Pit"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("shadow_small_keys", 1) then + return has_explosives() + end + return AccessibilityLevel.None end - }, - ["Ganons Castle MQ Water Trial"] = { + } + } + }, + ["Shadow Temple Huge Pit"] = { + ["scene"] = "Shadow Temple", + ["dungeon"] = true, + ["locations"] = { + ["Shadow Temple Invisible Blades Chests"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Ganons Castle MQ Shadow Trial"] = { + ["Shadow Temple Falling Spikes Lower Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Ganons Castle MQ Spirit Trial"] = { + ["Shadow Temple Falling Spikes Upper Chests"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("logic_shadow_umbrella") or has("lift1") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end }, - ["Ganons Castle MQ Light Trial"] = { + ["Shadow Temple Invisible Spikes Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift3") then - return AccessibilityLevel.Normal + if has("shadow_small_keys", 2) then + if has("logic_lens_shadow_back") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end }, - ["Ganons Castle MQ Tower"] = { + ["Shadow Temple Freestanding Key"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal --TODO: trials logic + if has("shadow_small_keys", 2) and has("hookshot") then + local lot = + (has("logic_lens_shadow_back") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + if has("bombs") or has("lift1") then + return lot + end + local trick = + has("logic_shadow_freestanding_key") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(lot, trick, has_bombchus()) + end + return AccessibilityLevel.None end }, - ["Ganons Castle MQ Deku Scrubs"] = { + ["Shadow Temple GS Like Like Room"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - if has("logic_lens_castle_mq") or (has("lens") and has("magic")) then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak + return AccessibilityLevel.Normal end - } - } - }, - ["Ganons Castle MQ Deku Scrubs"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle MQ Forest Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle MQ Fire Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle MQ Water Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle MQ Shadow Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle MQ Spirit Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ganons Castle MQ Light Trial"] = { - ["scene"] = "Ganons Castle", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Gerudo Training Grounds Split"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds Lobby"] = { + }, + ["Shadow Temple GS Falling Spikes Room"] = { ["child_access"] = function() - if has("gtg_reg") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("gtg_reg") then + if has("logic_shadow_umbrella_gs") or has("hookshot") then return AccessibilityLevel.Normal end - return AccessibilityLevel.None + return AccessibilityLevel.SequenceBreak end }, - ["Gerudo Training Grounds MQ Lobby"] = { + ["Shadow Temple GS Single Giant Pot"] = { ["child_access"] = function() - if has("gtg_mq") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("gtg_mq") then - return AccessibilityLevel.Normal + if has("shadow_small_keys", 2) and has("hookshot") then + if has("logic_lens_shadow_back") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end } - } - }, - ["Gerudo Training Grounds Lobby"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, + }, ["exits"] = { - ["Gerudo Fortress"] = { + ["Shadow Temple Wind Tunnel"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal - end - }, - ["Gerudo Training Grounds Heavy Block Room"] = { - ["child_access"] = function() - if has("sword1") and has("logic_gtg_without_hookshot") then - return AccessibilityLevel.Normal - elseif has("sword1") or has("sticks") then + if has("shadow_small_keys", 3) and has("hookshot") then + if has("logic_lens_shadow_back") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None - end, - ["adult_access"] = function() - if has("hookshot") or has("logic_gtg_without_hookshot") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak end - }, - ["Gerudo Training Grounds Lava Room"] = { + } + } + }, + ["Shadow Temple Wind Tunnel"] = { + ["scene"] = "Shadow Temple", + ["dungeon"] = true, + ["locations"] = { + ["Shadow Temple Wind Hint Chest"] = { ["child_access"] = function() - local explo = has_explosives() - if has("sword1") or (access_region("Gerudo Training Grounds Lobby", "adult") == AccessibilityLevel.Normal) then - return explo - end - if has("sticks") and explo ~= AccessibilityLevel.None then - return AccessibilityLevel.SequenceBreak - end return AccessibilityLevel.None end, ["adult_access"] = function() - return has_explosives() + return AccessibilityLevel.Normal end }, - ["Gerudo Training Grounds Central Maze"] = { + ["Shadow Temple After Wind Chests"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal - end - } - } - }, - ["Gerudo Training Grounds Central Maze"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds Central Maze Right"] = { + end + }, + ["Shadow Temple GS Near Ship"] = { ["child_access"] = function() - if has("gtg_small_keys", 9) then - return AccessibilityLevel.Normal - elseif has("gtg_small_keys", 2) then - return AccessibilityLevel.SequenceBreak - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("gtg_small_keys", 9) then + if has("longshot") and has("shadow_small_keys", 4) then return AccessibilityLevel.Normal - elseif has("gtg_small_keys", 2) then - return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end } - } - }, - ["Gerudo Training Grounds Central Maze Right"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, + }, ["exits"] = { - ["Gerudo Training Grounds Hammer Room"] = { + ["Shadow Temple Beyond Boat"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hookshot") then + if has("ocarina") and has("lullaby") and has("shadow_small_keys", 4) then return AccessibilityLevel.Normal end return AccessibilityLevel.None end - }, - ["Gerudo Training Grounds Lava Room"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.Normal - end } } }, - ["Gerudo Training Grounds Lava Room"] = { - ["scene"] = "Gerudo Training Grounds", + ["Shadow Temple Beyond Boat"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds Central Maze Right"] = { + ["locations"] = { + ["Shadow Temple Spike Walls Left Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - if has("ocarina") and has("time") then + if has("dinsfire") and has("magic") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end }, - ["Gerudo Training Grounds Hammer Room"] = { + ["Shadow Temple Boss Key Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("longshot") or (has("hookshot") and has("hoverboots")) then + if has("dinsfire") and has("magic") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end - } - } - }, - ["Gerudo Training Grounds Hammer Room"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds Eye Statue Lower"] = { + }, + ["Shadow Temple Invisible Floormaster Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hammer") and has("bow") then - return AccessibilityLevel.Normal + return AccessibilityLevel.Normal + end + }, + ["Bongo Bongo"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("shadow_small_keys", 5) and has("shadow_boss_key") then + if has("bow") or (can_use_scarecrow() and has("longshot")) then + return AccessibilityLevel.Normal + end + local trick = has("logic_shadow_statue") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, has_bombchus()) end return AccessibilityLevel.None end }, - ["Gerudo Training Grounds Lava Room"] = { + ["Shadow Temple GS Triple Giant Pot"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end } - } + }, + ["exits"] = {} }, - ["Gerudo Training Grounds Eye Statue Lower"] = { - ["scene"] = "Gerudo Training Grounds", + ["Shadow Temple MQ Entryway"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, ["exits"] = { - ["Gerudo Training Grounds Hammer Room"] = { + ["Graveyard Warp Pad Region"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.Normal end + }, + ["Shadow Temple MQ Beginning"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hoverboots") or has("hookshot") then + if has("logic_lens_shadow_mq") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end } } }, - ["Gerudo Training Grounds Eye Statue Upper"] = { - ["scene"] = "Gerudo Training Grounds", + ["Shadow Temple MQ Beginning"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, ["exits"] = { - ["Gerudo Training Grounds Eye Statue Lower"] = { + ["Shadow Temple MQ Entryway"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.Normal end - } - } - }, - ["Gerudo Training Grounds Heavy Block Room"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds Eye Statue Upper"] = { + }, + ["Shadow Temple MQ First Beamos"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - local wall = AccessibilityLevel.SequenceBreak - if has("logic_lens_gtg") or (has("lens") and has("magic")) then - wall = AccessibilityLevel.Normal - end - - local climb = AccessibilityLevel.None - if has("hookshot") then - climb = AccessibilityLevel.Normal - elseif has("hoverboots") then - if has("logic_gtg_fake_wall") then - climb = AccessibilityLevel.Normal - else - climb = AccessibilityLevel.SequenceBreak - end - elseif has("bombs") and (has("shield2") or has("shield3")) then - climb = AccessibilityLevel.SequenceBreak - end - - if wall == AccessibilityLevel.Normal and climb == AccessibilityLevel.Normal then + if (has("bow") and has("firearrow") and has("magic")) or has("hoverboots") then return AccessibilityLevel.Normal - elseif climb ~= AccessibilityLevel.None then + elseif has("longshot") then + if has("logic_shadow_mq_gap") then + return AccessibilityLevel.Normal + end return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end }, - ["Gerudo Training Grounds Like Like Room"] = { + ["Shadow Temple MQ Dead Hand Area"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift2") then - local wall = AccessibilityLevel.SequenceBreak - if has("logic_lens_gtg") or (has("lens") and has("magic")) then - wall = AccessibilityLevel.Normal - end - - local climb = AccessibilityLevel.None - if has("hookshot") then - climb = AccessibilityLevel.Normal - elseif has("hoverboots") then - if has("logic_gtg_fake_wall") then - climb = AccessibilityLevel.Normal - else - climb = AccessibilityLevel.SequenceBreak - end - elseif has("bombs") and (has("shield2") or has("shield3")) then - climb = AccessibilityLevel.SequenceBreak - end - - if wall == AccessibilityLevel.Normal and climb == AccessibilityLevel.Normal then - return AccessibilityLevel.Normal - elseif climb ~= AccessibilityLevel.None then - return AccessibilityLevel.SequenceBreak - end + local keys = AccessibilityLevel.None + if has("shadow_small_keys", 6) then + keys = AccessibilityLevel.Normal + elseif has("shadow_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.None + return and_accessibility(has_explosives(), keys) end } } }, - ["Gerudo Training Grounds Like Like Room"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Gerudo Training Grounds MQ Lobby"] = { - ["scene"] = "Gerudo Training Grounds", + ["Shadow Temple MQ Dead Hand Area"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["Gerudo Fortress"] = { + ["locations"] = { + ["Shadow Temple MQ Compass Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Gerudo Training Grounds MQ Left Side"] = { + ["Shadow Temple MQ Hover Boots Chest"] = { ["child_access"] = function() - if has("dinsfire") and has("magic") then + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("time") and has("bow") then return AccessibilityLevel.Normal end - if has("bow") and has("firearrow") and has("magic") then - return access_region("Gerudo Training Grounds MQ Lobby", "adult") - end + return AccessibilityLevel.None + end + } + }, + ["exits"] = {} + }, + ["Shadow Temple MQ First Beamos"] = { + ["scene"] = "Shadow Temple", + ["dungeon"] = true, + ["locations"] = { + ["Shadow Temple MQ Map Chest"] = { + ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - return has_fire() + return AccessibilityLevel.Normal end }, - ["Gerudo Training Grounds MQ Right Side"] = { + ["Shadow Temple MQ Early Gibdos Chest"] = { ["child_access"] = function() - if has("sling") then - return AccessibilityLevel.Normal - end - if has("bow") then - return access_region("Gerudo Training Grounds MQ Lobby", "adult") - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("bow") then - return AccessibilityLevel.Normal - end - if has("sling") then - return access_region("Gerudo Training Grounds MQ Lobby", "child") - end + return AccessibilityLevel.Normal + end + }, + ["Shadow Temple MQ Near Ship Invisible Chest"] = { + ["child_access"] = function() return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal end } - } - }, - ["Gerudo Training Grounds MQ Right Side"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, + }, ["exits"] = { - ["Gerudo Training Grounds MQ Underwater"] = { + ["Shadow Temple MQ Upper Huge Pit"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if (has("bow") or has("longshot")) and has("hoverboots") then - return AccessibilityLevel.Normal + local keys = AccessibilityLevel.None + if has("shadow_small_keys", 2) then + keys = AccessibilityLevel.Normal + elseif has("shadow_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.None + return and_accessibility(has_explosives(), keys) end } } }, - ["Gerudo Training Grounds MQ Underwater"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Gerudo Training Grounds MQ Left Side"] = { - ["scene"] = "Gerudo Training Grounds", + ["Shadow Temple MQ Upper Huge Pit"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds MQ Stalfos Room"] = { + ["locations"] = { + ["Shadow Temple MQ Invisible Blades Chests"] = { ["child_access"] = function() - if has("logic_gtg_mq_without_hookshot") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("longshot") or has("logic_gtg_mq_without_hookshot") then + if has("ocarina") and has("time") then return AccessibilityLevel.Normal end - if has("hookshot") then - if has("logic_gtg_mq_with_hookshot") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak - end - return AccessibilityLevel.None + local trick = + has("logic_shadow_mq_invisible_blades") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, damage_below_ohko()) end } - } - }, - ["Gerudo Training Grounds MQ Stalfos Room"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, + }, ["exits"] = { - ["Gerudo Training Grounds MQ Back Areas"] = { + ["Shadow Temple MQ Lower Huge Pit"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - local lens = AccessibilityLevel.SequenceBreak - if has("logic_lens_gtg_mq") or (has("lens") and has("magic")) then - lens = AccessibilityLevel.Normal - end - - local time = AccessibilityLevel.None - if has("ocarina") and has("time") then - time = AccessibilityLevel.Normal - end - - local wall = AccessibilityLevel.None - if has("hoverboots") then - if has("logic_gtg_fake_wall") then - wall = AccessibilityLevel.Normal - else - wall = AccessibilityLevel.SequenceBreak - end - end - - return and_accessibility(lens, has_bottle(), or_accessibility(time, wall)) + local trick = + has("logic_shadow_mq_huge_pit") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility(has_fire(), trick) end } } }, - ["Gerudo Training Grounds MQ Back Areas"] = { - ["scene"] = "Gerudo Training Grounds", + ["Shadow Temple MQ Lower Huge Pit"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds MQ Central Maze Right"] = { + ["locations"] = { + ["Shadow Temple MQ Beamos Silver Rupees Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hammer") then + if has("longshot") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end }, - ["Gerudo Training Grounds MQ Right Side"] = { + ["Shadow Temple MQ Falling Spikes Lower Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("longshot") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end - } - } - }, - ["Gerudo Training Grounds MQ Central Maze Right"] = { - ["scene"] = "Gerudo Training Grounds", - ["dungeon"] = true, - ["exits"] = { - ["Gerudo Training Grounds MQ Underwater"] = { + }, + ["Shadow Temple MQ Falling Spikes Upper Chests"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("longshot") or (has("hookshot") and has("bow")) then + if has("lift1") then return AccessibilityLevel.Normal + elseif has("hoverboots") then + if has("logic_shadow_umbrella") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end }, - ["Gerudo Training Grounds MQ Right Side"] = { + ["Shadow Temple MQ Invisible Spikes Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hookshot") then - return AccessibilityLevel.Normal + if has("hoverboots") then + local keys = AccessibilityLevel.None + if has("shadow_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("shadow_small_keys", 2) then + keys = AccessibilityLevel.SequenceBreak + end + local lot = + (has("logic_lens_shadow_mq_back") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(keys, lot) end return AccessibilityLevel.None end - } - } - }, - ["Ice Cavern Split"] = { - ["scene"] = "Ice Cavern", - ["dungeon"] = true, - ["exits"] = { - ["Ice Cavern Beginning"] = { + }, + ["Shadow Temple MQ Stalfos Room Chest"] = { ["child_access"] = function() - if has("ice_reg") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("ice_reg") then - return AccessibilityLevel.Normal + if has("hoverboots") and has("hookshot") then + local keys = AccessibilityLevel.None + if has("shadow_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("shadow_small_keys", 2) then + keys = AccessibilityLevel.SequenceBreak + end + local lot = + (has("logic_lens_shadow_mq_back") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(keys, lot) end return AccessibilityLevel.None end }, - ["Ice Cavern MQ Beginning"] = { + ["Shadow Temple MQ GS Falling Spikes Room"] = { ["child_access"] = function() - if has("ice_mq") then + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then return AccessibilityLevel.Normal + elseif has("hoverboots") then + if has("logic_shadow_umbrella_gs") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Shadow Temple MQ Wind Tunnel"] = { + ["child_access"] = function() + return AccessibilityLevel.None end, ["adult_access"] = function() - if has("ice_mq") then - return AccessibilityLevel.Normal + if has("hoverboots") and has("hookshot") then + local keys = AccessibilityLevel.None + if has("shadow_small_keys", 4) then + keys = AccessibilityLevel.Normal + elseif has("shadow_small_keys", 3) then + keys = AccessibilityLevel.SequenceBreak + end + local lot = + (has("logic_lens_shadow_mq_back") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(lot, keys) end return AccessibilityLevel.None end } } }, - ["Ice Cavern Beginning"] = { - ["scene"] = "Ice Cavern", + ["Shadow Temple MQ Wind Tunnel"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["ZF Ice Ledge"] = { + ["locations"] = { + ["Shadow Temple MQ Wind Hint Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Shadow Temple MQ After Wind Chests"] = { ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() return AccessibilityLevel.Normal + end + }, + ["Shadow Temple MQ GS Wind Hint Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Ice Cavern"] = { + ["Shadow Temple MQ GS After Wind"] = { ["child_access"] = function() - if has("dinsfire") and has("magic") then - return AccessibilityLevel.Normal - end - return or_accessibility(access_region("Ice Cavern Beginning", "adult"), has_explosives()) + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end } + }, + ["exits"] = { + ["Shadow Temple MQ Beyond Boat"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("lullaby") then + if has("shadow_small_keys", 5) then + return AccessibilityLevel.Normal + elseif has("shadow_small_keys", 4) then + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None + end + } } }, - ["Ice Cavern"] = { - ["scene"] = "Ice Cavern", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ice Cavern MQ Beginning"] = { - ["scene"] = "Ice Cavern", + ["Shadow Temple MQ Beyond Boat"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["ZF Ice Ledge"] = { + ["locations"] = { + ["Bongo Bongo"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("shadow_boss_key") then + if has("bow") then + return AccessibilityLevel.Normal + end + local trick = has("logic_shadow_statue") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, has_bombchus()) + end + return AccessibilityLevel.None end }, - ["Ice Cavern MQ Map Room"] = { + ["Shadow Temple MQ GS After Ship"] = { ["child_access"] = function() - if has("dinsfire") and has("magic") then - return AccessibilityLevel.Normal - end - if has("sticks") or has("sling") or has("sword1") then - return has_explosives() - end return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.Normal end }, - ["Ice Cavern MQ Compass Room"] = { + ["Shadow Temple MQ GS Near Boss"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - return has_bottle() + if has("bow") then + return AccessibilityLevel.Normal + end + local trick = has("logic_shadow_statue") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick, has_bombchus()) end - }, - ["Ice Cavern MQ Iron Boots Region"] = { + } + }, + ["exits"] = { + ["Shadow Temple MQ Invisible Maze"] = { ["child_access"] = function() - return has_bottle() + return AccessibilityLevel.None end, ["adult_access"] = function() - return has_bottle() + if has("bow") and has("ocarina") and has("time") and has("longshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end } } }, - ["Ice Cavern MQ Map Room"] = { - ["scene"] = "Ice Cavern", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ice Cavern MQ Iron Boots Region"] = { - ["scene"] = "Ice Cavern", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Ice Cavern MQ Compass Room"] = { - ["scene"] = "Ice Cavern", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Jabu Jabus Belly Split"] = { - ["scene"] = "Jabu Jabus Belly", + ["Shadow Temple MQ Invisible Maze"] = { + ["scene"] = "Shadow Temple", ["dungeon"] = true, - ["exits"] = { - ["Jabu Jabus Belly Beginning"] = { + ["locations"] = { + ["Shadow Temple MQ Spike Walls Left Chest"] = { ["child_access"] = function() - if has("jabu_reg") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("jabu_reg") then - return AccessibilityLevel.Normal + if has("dinsfire") and has("magic") then + if has("shadow_small_keys", 6) then + return AccessibilityLevel.Normal + elseif has("shadow_small_keys", 5) then + return AccessibilityLevel.SequenceBreak + end end return AccessibilityLevel.None end }, - ["Jabu Jabus Belly MQ Beginning"] = { + ["Shadow Temple MQ Boss Key Chest"] = { ["child_access"] = function() - if has("jabu_mq") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("jabu_mq") then - return AccessibilityLevel.Normal + if has("dinsfire") and has("magic") then + if has("shadow_small_keys", 6) then + return AccessibilityLevel.Normal + elseif has("shadow_small_keys", 5) then + return AccessibilityLevel.SequenceBreak + end end return AccessibilityLevel.None end + }, + ["Shadow Temple MQ Bomb Flower Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Shadow Temple MQ Freestanding Key"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end } - } + }, + ["exits"] = {} }, - ["Jabu Jabus Belly Beginning"] = { - ["scene"] = "Jabu Jabus Belly", + ["Spirit Temple Split"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, ["exits"] = { - ["Zoras Fountain"] = { + ["Spirit Temple Lobby"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("spirit_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("spirit_reg") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end }, - ["Jabu Jabus Belly Main"] = { + ["Spirit Temple MQ Lobby"] = { ["child_access"] = function() - if has("sling") or has("boomerang") then + if has("spirit_mq") then return AccessibilityLevel.Normal end - return has_explosives() + return AccessibilityLevel.None end, ["adult_access"] = function() - if has("bow") or has("hookshot") then + if has("spirit_mq") then return AccessibilityLevel.Normal end - return has_explosives() + return AccessibilityLevel.None end } } }, - ["Jabu Jabus Belly Main"] = { - ["scene"] = "Jabu Jabus Belly", + ["Spirit Temple Lobby"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, ["exits"] = { - ["Jabu Jabus Belly Beginning"] = { + ["Desert Colossus From Spirit Lobby"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -8434,243 +12460,249 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Jabu Jabus Belly Depths"] = { + ["Child Spirit Temple"] = { ["child_access"] = function() - if has("boomerang") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + return AccessibilityLevel.Normal end, ["adult_access"] = function() return AccessibilityLevel.None end }, - ["Jabu Jabus Belly Boss Area"] = { + ["Early Adult Spirit Temple"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") then - if has("logic_jabu_boss_gs_adult") then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak + if has("lift2") then + return AccessibilityLevel.Normal end return AccessibilityLevel.None end } } }, - ["Jabu Jabus Belly Depths"] = { - ["scene"] = "Jabu Jabus Belly", + ["Child Spirit Temple"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Jabu Jabus Belly Main"] = { + ["locations"] = { + ["Spirit Temple Child Bridge Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local ranged = (has("boomerang") or has("sling")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_child_bombchu") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local stun = (has("nuts") or has("boomerang")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local armos = (has("sword1") or has("sling")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility( + or_accessibility(ranged, and_accessibility(has_bombchus(), trick)), + or_accessibility(sticks, has_explosives(), and_accessibility(stun, armos)) + ) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end }, - ["Jabu Jabus Belly Boss Area"] = { + ["Spirit Temple Child Early Torches Chest"] = { ["child_access"] = function() - if has("sticks") or has("sword1") then - return AccessibilityLevel.Normal - end + local ranged = (has("boomerang") or has("sling")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_child_bombchu") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local stun = (has("nuts") or has("boomerang")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local armos = (has("sword1") or has("sling")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility( + or_accessibility(ranged, and_accessibility(has_bombchus(), trick)), + or_accessibility(sticks, has_explosives(), and_accessibility(stun, armos)), + or_accessibility(sticks, df) + ) + end, + ["adult_access"] = function() return AccessibilityLevel.None + end + }, + ["Spirit Temple GS Metal Fence"] = { + ["child_access"] = function() + local ranged = (has("boomerang") or has("sling")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_child_bombchu") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local stun = (has("nuts") or has("boomerang")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local armos = (has("sword1") or has("sling")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility( + or_accessibility(ranged, and_accessibility(has_bombchus(), trick)), + or_accessibility(sticks, has_explosives(), and_accessibility(stun, armos)) + ) end, ["adult_access"] = function() return AccessibilityLevel.None end } - } - }, - ["Jabu Jabus Belly Boss Area"] = { - ["scene"] = "Jabu Jabus Belly", - ["dungeon"] = true, + }, ["exits"] = { - ["Jabu Jabus Belly Main"] = { + ["Child Spirit Before Locked Door"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end } } }, - ["Jabu Jabus Belly MQ Beginning"] = { - ["scene"] = "Jabu Jabus Belly", + ["Child Spirit Before Locked Door"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, ["exits"] = { - ["Zoras Fountain"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.Normal - end - }, - ["Jabu Jabus Belly MQ Main"] = { + ["Child Spirit Temple Climb"] = { ["child_access"] = function() - if has("sling") then + if has("spirit_small_keys", 1) then return AccessibilityLevel.Normal end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("sling") then - return access_region("Jabu Jabus Belly MQ Beginning", "child") + if has("spirit_small_keys", 1) then + return AccessibilityLevel.Normal end return AccessibilityLevel.None end } } }, - ["Jabu Jabus Belly MQ Main"] = { - ["scene"] = "Jabu Jabus Belly", + ["Child Spirit Temple Climb"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Jabu Jabus Belly MQ Beginning"] = { + ["locations"] = { + ["Spirit Temple Child Climb Chests"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local keys = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility(has_projectile("both"), and_accessibility(keys, has_projectile("child"))) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + local keys = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local lift2 = has("lift2") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility(has_projectile("both"), and_accessibility(keys, lift2, has_projectile("adult"))) end }, - ["Jabu Jabus Belly MQ Depths"] = { + ["Spirit Temple GS Sun on Floor Room"] = { ["child_access"] = function() - if has("boomerang") then - return has_explosives() - end - return AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local weapon = (has("sticks") or has("sword1")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + has_projectile("both"), + df, + and_accessibility(damage_single_instance_ohko(), or_accessibility(weapon, has_projectile("child"))), + and_accessibility(keys, has_projectile("child")) + ) end, ["adult_access"] = function() - return AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local weapon = (has("sticks") or has("sword1")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local lift2 = has("lift2") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + has_projectile("both"), + df, + and_accessibility(damage_single_instance_ohko(), or_accessibility(weapon, has_projectile("child"))), + and_accessibility(keys, lift2, or_accessibility(has_projectile("adult"), damage_single_instance_ohko())) + ) end } - } - }, - ["Jabu Jabus Belly MQ Depths"] = { - ["scene"] = "Jabu Jabus Belly", - ["dungeon"] = true, + }, ["exits"] = { - ["Jabu Jabus Belly MQ Main"] = { + ["Spirit Temple Central Chamber"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return has_explosives() end, ["adult_access"] = function() - return AccessibilityLevel.Normal + return has_explosives() end }, - ["Jabu Jabus Belly MQ Boss Area"] = { + ["Child Spirit Before Locked Door"] = { ["child_access"] = function() - if has("sticks") or (has("dinsfire") and has("magic") and has("sword1")) then + if has("spirit_small_keys", 5) then return AccessibilityLevel.Normal end - end, - ["adult_access"] = function() return AccessibilityLevel.None - end - } - } - }, - ["Jabu Jabus Belly MQ Boss Area"] = { - ["scene"] = "Jabu Jabus Belly", - ["dungeon"] = true, - ["exits"] = { - ["Jabu Jabus Belly MQ Main"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("spirit_small_keys", 5) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end } } }, - ["Shadow Temple Split"] = { - ["scene"] = "Shadow Temple", + ["Early Adult Spirit Temple"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple Entryway"] = { + ["locations"] = { + ["Spirit Temple Compass Chest"] = { ["child_access"] = function() - if has("shadow_reg") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("shadow_reg") then + if has("hookshot") and has("ocarina") and has("lullaby") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end }, - ["Shadow Temple MQ Entryway"] = { + ["Spirit Temple Early Adult Right Chest"] = { ["child_access"] = function() - if has("shadow_mq") then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("shadow_mq") then + if has("bow") or has("hookshot") then return AccessibilityLevel.Normal end - return AccessibilityLevel.None + local bombs = has("bombs") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_lower_adult_switch") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility(has_bombchus(), and_accessibility(bombs, trick)) end - } - } - }, - ["Shadow Temple Entryway"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, - ["exits"] = { - ["Graveyard Warp Pad Region"] = { + }, + ["Spirit Temple First Mirror Chests"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("spirit_small_keys", 3) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None end }, - ["Shadow Temple Beginning"] = { + ["Spirit Temple GS Boulder Room"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") or has("hookshot") then - if has("logic_lens_shadow") or (has("lens") and has("magic")) then + if has("ocarina") and has("time") then + if has("bow") or has("hookshot") then return AccessibilityLevel.Normal end - return AccessibilityLevel.SequenceBreak + local bombs = has("bombs") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_lower_adult_switch") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility(has_bombchus(), and_accessibility(bombs, trick)) end return AccessibilityLevel.None end } - } - }, - ["Shadow Temple Beginning"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Shadow Temple Entryway"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.Normal - end - }, - ["Shadow Temple First Beamos"] = { + ["Spirit Temple Central Chamber"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") then + if has("spirit_small_keys", 1) then return AccessibilityLevel.Normal end return AccessibilityLevel.None @@ -8678,76 +12710,164 @@ data_per_region = { } } }, - ["Shadow Temple First Beamos"] = { - ["scene"] = "Shadow Temple", + ["Spirit Temple Central Chamber"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple Huge Pit"] = { + ["locations"] = { + ["Spirit Temple Map Chest"] = { + ["child_access"] = function() + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local fa = (has("firearrow") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_spirit_map_chest") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys5 = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + and_accessibility( + or_accessibility(has_explosives(), keys3), + or_accessibility(df, and_accessibility(or_accessibility(fa, trick), bow, sticks)) + ), + and_accessibility(keys5, has_explosives(), sticks) + ) + end, + ["adult_access"] = function() + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local fa = (has("firearrow") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_spirit_map_chest") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local lift2 = has("lift2") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + and_accessibility( + or_accessibility(has_explosives(), keys3), + or_accessibility(df, and_accessibility(or_accessibility(fa, trick), bow, sticks)) + ), + and_accessibility(keys3, bow, or_accessibility(fa, trick), lift2) + ) + end + }, + ["Spirit Temple Sun Block Room Chest"] = { + ["child_access"] = function() + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local fa = (has("firearrow") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_spirit_sun_chest") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys5 = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + and_accessibility( + or_accessibility(has_explosives(), keys3), + or_accessibility(df, and_accessibility(or_accessibility(fa, trick), bow, sticks)) + ), + and_accessibility(keys5, has_explosives(), sticks) + ) + end, + ["adult_access"] = function() + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local fa = (has("firearrow") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_spirit_sun_chest") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local lift2 = has("lift2") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + and_accessibility( + or_accessibility(has_explosives(), keys3), + or_accessibility(df, and_accessibility(or_accessibility(fa, trick), bow, sticks)) + ), + and_accessibility(keys3, bow, or_accessibility(fa, trick), lift2) + ) + end + }, + ["Spirit Temple Statue Room Hand Chest"] = { ["child_access"] = function() - if has("shadow_small_keys", 1) then - return has_explosives() - end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("shadow_small_keys", 1) then - return has_explosives() + if has("lift2") and has("ocarina") and has("lullaby") then + if has("spirit_small_keys", 3) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end end return AccessibilityLevel.None end - } - } - }, - ["Shadow Temple Huge Pit"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple Wind Tunnel"] = { + }, + ["Spirit Temple Statue Room Northeast Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("shadow_small_keys", 3) and has("hookshot") then - if has("logic_lens_shadow_back") or (has("lens") and has("magic")) then - return AccessibilityLevel.Normal + if has("lift2") and has("ocarina") and has("lullaby") then + local keys = AccessibilityLevel.None + if has("spirit_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.SequenceBreak + local jump = + (has("hookshot") or has("hoverboots") or has("logic_spirit_lobby_jump")) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(keys, jump) end return AccessibilityLevel.None end - } - } - }, - ["Shadow Temple Wind Tunnel"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple Beyond Boat"] = { + }, + ["Spirit Temple GS Hall After Sun Block Room"] = { ["child_access"] = function() - if has("ocarina") and has("lullaby") and has("shadow_small_keys", 4) then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys5 = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + and_accessibility(has_explosives(), rang, hs), + and_accessibility(rang, keys5, has_explosives()) + ) end, ["adult_access"] = function() - if has("ocarina") and has("lullaby") and has("shadow_small_keys", 4) then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.None + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local lift2 = has("lift2") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility(and_accessibility(has_explosives(), rang, hs), and_accessibility(hs, lift2, keys3)) + end + }, + ["Spirit Temple GS Lobby"] = { + ["child_access"] = function() + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick1 = has("logic_spirit_lobby_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick2 = + has("logic_spirit_lobby_jump") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local keys5 = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + and_accessibility(or_accessibility(has_explosives(), keys3), trick1, rang, or_accessibility(hs, hb, trick2)), + and_accessibility(trick1, keys5, has_explosives(), rang) + ) + end, + ["adult_access"] = function() + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick1 = has("logic_spirit_lobby_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick2 = + has("logic_spirit_lobby_jump") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local lift2 = has("lift2") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + and_accessibility(or_accessibility(has_explosives(), keys3), trick1, rang, or_accessibility(hs, hb, trick2)), + and_accessibility(keys3, lift2, or_accessibility(hs, hb, trick2)) + ) end } - } - }, - ["Shadow Temple Beyond Boat"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Shadow Temple MQ Entryway"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Graveyard Warp Pad Region"] = { + ["Spirit Temple Outdoor Hands"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -8755,221 +12875,233 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Shadow Temple MQ Beginning"] = { + ["Spirit Temple Beyond Central Locked Door"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") or has("hookshot") then - if has("logic_lens_shadow_mq") or (has("lens") and has("magic")) then + if has("lift2") then + if has("spirit_small_keys", 4) then return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 2) then + return AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end + }, + ["Child Spirit Temple Climb"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end } } }, - ["Shadow Temple MQ Beginning"] = { - ["scene"] = "Shadow Temple", + ["Spirit Temple Outdoor Hands"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple MQ Entryway"] = { + ["locations"] = { + ["Spirit Temple Silver Gauntlets Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local ls = has("longshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys5 = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility(and_accessibility(keys3, ls, has_explosives()), keys5) end, ["adult_access"] = function() - return AccessibilityLevel.Normal + local keys3 = has("spirit_small_keys", 3) and AccessibilityLevel.Normal or AccessibilityLevel.None + local ls = has("longshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys5 = has("spirit_small_keys", 5) and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility(and_accessibility(keys3, ls, has_explosives()), keys5) end }, - ["Shadow Temple MQ First Beamos"] = { + ["Spirit Temple Mirror Shield Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if (has("bow") and has("firearrow") and has("magic")) or has("hoverboots") then - return AccessibilityLevel.Normal - elseif has("longshot") then - if has("logic_shadow_mq_gap") then - return AccessibilityLevel.Normal + if has("lift2") then + local keys = AccessibilityLevel.None + if has("spirit_small_keys", 4) then + keys = AccessibilityLevel.Normal + elseif has("spirit_small_keys", 2) then + keys = AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.SequenceBreak + return and_accessibility(keys, has_explosives()) end return AccessibilityLevel.None end - }, - ["Shadow Temple MQ Dead Hand Area"] = { + } + }, + ["exits"] = { + ["Desert Colossus"] = { + ["fixed"] = true, ["child_access"] = function() + if has("spirit_small_keys", 5) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 2) then + return AccessibilityLevel.SequenceBreak + end return AccessibilityLevel.None end, ["adult_access"] = function() - local keys = AccessibilityLevel.None - if has("shadow_small_keys", 6) then - keys = AccessibilityLevel.Normal - elseif has("shadow_small_keys", 1) then - keys = AccessibilityLevel.SequenceBreak + if has("lift2") then + if has("spirit_small_keys", 5) then + return AccessibilityLevel.Normal + end + local keys = AccessibilityLevel.None + if has("spirit_small_keys", 3) then + keys = AccessibilityLevel.Normal + elseif has("spirit_small_keys", 2) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(keys, has_explosives()) end - return and_accessibility(has_explosives(), keys) + return AccessibilityLevel.None end } } }, - ["Shadow Temple MQ Dead Hand Area"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Shadow Temple MQ First Beamos"] = { - ["scene"] = "Shadow Temple", + ["Spirit Temple Beyond Central Locked Door"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple MQ Upper Huge Pit"] = { + ["locations"] = { + ["Spirit Temple Near Four Armos Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - local keys = AccessibilityLevel.None - if has("shadow_small_keys", 2) then - keys = AccessibilityLevel.Normal - elseif has("shadow_small_keys", 1) then - keys = AccessibilityLevel.SequenceBreak + if has("shield3") then + return has_explosives() end - return and_accessibility(has_explosives(), keys) + return AccessibilityLevel.None end - } - } - }, - ["Shadow Temple MQ Upper Huge Pit"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple MQ Lower Huge Pit"] = { + }, + ["Spirit Temple Hallway Invisible Chests"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("logic_shadow_mq_huge_pit") then - return AccessibilityLevel.Normal - end - local fire = has_fire() - if fire ~= AccessibilityLevel.None then - return AccessibilityLevel.Normal - end - return AccessibilityLevel.SequenceBreak + local lot = + (has("logic_lens_spirit") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(lot, has_explosives()) end } - } - }, - ["Shadow Temple MQ Lower Huge Pit"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Shadow Temple MQ Wind Tunnel"] = { + ["Spirit Temple Beyond Final Locked Door"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("hoverboots") and has("hookshot") then - local lens = AccessibilityLevel.SequenceBreak - if has("logic_lens_shadow_mq") or (has("lens") and has("magic")) then - lens = AccessibilityLevel.Normal - end - - local keys = AccessibilityLevel.None - if has("shadow_small_keys", 4) then - keys = AccessibilityLevel.Normal - elseif has("shadow_small_keys", 3) then - keys = AccessibilityLevel.SequenceBreak + if has("spirit_small_keys", 3) then + if + has("spirit_small_keys", 5) and + (has("logic_spirit_wall") or has("longshot") or has_bombchus() == AccessibilityLevel.Normal or + ((has("bombs") or has("nuts") or (has("dinsfire") and has("magic"))) and + (has("bow") or has("hookshot") or has("hammer")))) + then + return AccessibilityLevel.Normal end - - return and_accessibility(lens, keys) + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end } } }, - ["Shadow Temple MQ Wind Tunnel"] = { - ["scene"] = "Shadow Temple", + ["Spirit Temple Beyond Final Locked Door"] = { + ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple MQ Beyond Boat"] = { + ["locations"] = { + ["Spirit Temple Boss Key Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() if has("ocarina") and has("lullaby") then - if has("shadow_small_keys", 5) then - keys = {1, AccessibilityLevel.Normal} - elseif has("shadow_small_keys", 4) then - keys = {1, AccessibilityLevel.SequenceBreak} + if has("bow") and has("hookshot") then + return AccessibilityLevel.Normal end + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end - } - } - }, - ["Shadow Temple MQ Beyond Boat"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, - ["exits"] = { - ["Shadow Temple MQ Invisible Maze"] = { + }, + ["Spirit Temple Topmost Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("bow") and has("ocarina") and has("time") and has("longshot") then + if has("shield3") then return AccessibilityLevel.Normal end return AccessibilityLevel.None end + }, + ["Twinrova"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("shield3") and has("hookshot") and has("spirit_boss_key") then + return has_explosives() + end + return AccessibilityLevel.None + end } - } - }, - ["Shadow Temple MQ Invisible Maze"] = { - ["scene"] = "Shadow Temple", - ["dungeon"] = true, + }, ["exits"] = {} }, - ["Spirit Temple Split"] = { + ["Spirit Temple MQ Lobby"] = { ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Spirit Temple Lobby"] = { + ["locations"] = { + ["Spirit Temple MQ Entrance Front Left Chest"] = { ["child_access"] = function() - if has("spirit_reg") then - return AccessibilityLevel.Normal + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Spirit Temple MQ Entrance Back Left Chest"] = { + ["child_access"] = function() + if has("sling") then + local hammer = has("hammer") and AccessibilityLevel.Normal or AccessibilityLevel.None + return or_accessibility( + has_explosives(), + and_accessibility(hammer, access_region("Spirit Temple MQ Lobby", "adult")) + ) end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("spirit_reg") then - return AccessibilityLevel.Normal + if has("bow") then + return can_blast() end return AccessibilityLevel.None end }, - ["Spirit Temple MQ Lobby"] = { + ["Spirit Temple MQ Entrance Back Right Chest"] = { ["child_access"] = function() - if has("spirit_mq") then + if has("sling") or has("boomerang") then return AccessibilityLevel.Normal end - return AccessibilityLevel.None + return has_bombchus() end, ["adult_access"] = function() - if has("spirit_mq") then + if has("bow") or has("hookshot") then return AccessibilityLevel.Normal end - return AccessibilityLevel.None + return has_bombchus() end } - } - }, - ["Spirit Temple Lobby"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, + }, ["exits"] = { ["Desert Colossus From Spirit Lobby"] = { ["child_access"] = function() @@ -8979,7 +13111,7 @@ data_per_region = { return AccessibilityLevel.Normal end }, - ["Child Spirit Temple"] = { + ["Child Spirit Temple MQ"] = { ["child_access"] = function() return AccessibilityLevel.Normal end, @@ -8987,255 +13119,220 @@ data_per_region = { return AccessibilityLevel.None end }, - ["Early Adult Spirit Temple"] = { + ["Adult Spirit Temple MQ"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift2") then - return AccessibilityLevel.Normal + if has("longshot") and has("lift2") then + return has_bombchus() end return AccessibilityLevel.None end } } }, - ["Child Spirit Temple"] = { + ["Child Spirit Temple MQ"] = { ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Child Spirit Before Locked Door"] = { + ["locations"] = { + ["Spirit Temple MQ Child Hammer Switch Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + if has("hammer") then + local keys = AccessibilityLevel.None + if has("spirit_small_keys", 7) then + keys = AccessibilityLevel.Normal + elseif has("spirit_small_keys", 2) then + keys = AccessibilityLevel.SequenceBreak + end + return and_accessibility(access_region("Adult Spirit Temple MQ", "adult"), keys) + end + return AccessibilityLevel.None end, ["adult_access"] = function() return AccessibilityLevel.None end - } - } - }, - ["Child Spirit Before Locked Door"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, - ["exits"] = { - ["Child Spirit Temple Climb"] = { + }, + ["Spirit Temple MQ Map Room Enemy Chest"] = { ["child_access"] = function() - if has("spirit_small_keys", 1) then - return AccessibilityLevel.Normal + if (has("sticks") or has("sword1")) and has("sling") and (has("dinsfire") and has("magic")) then + return has_bombchus() end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("spirit_small_keys", 1) then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end - } - } - }, - ["Child Spirit Temple Climb"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, - ["exits"] = { - ["Spirit Temple Central Chamber"] = { + }, + ["Spirit Temple MQ Map Chest"] = { ["child_access"] = function() - return has_explosives() + if has("sticks") or has("sword1") or has("bombs") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None end, ["adult_access"] = function() - return has_explosives() + return AccessibilityLevel.None end }, - ["Child Spirit Before Locked Door"] = { + ["Spirit Temple MQ Silver Block Hallway Chest"] = { ["child_access"] = function() - if has("spirit_small_keys", 5) then - return AccessibilityLevel.Normal + if has("sling") then + local keys = AccessibilityLevel.None + if has("spirit_small_keys", 7) then + keys = AccessibilityLevel.Normal + elseif has("spirit_small_keys", 2) then + keys = AccessibilityLevel.SequenceBreak + end + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local fa = (has("firearrow") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_sun_chest") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility( + keys, + has_bombchus(), + or_accessibility( + df, + and_accessibility( + access_region("Adult Spirit Temple MQ", "adult"), + bow, + or_accessibility(fa, and_accessibility(trick, sot)) + ) + ) + ) end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("spirit_small_keys", 5) then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end } - } - }, - ["Early Adult Spirit Temple"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, + }, ["exits"] = { - ["Spirit Temple Central Chamber"] = { + ["Spirit Temple MQ Shared"] = { ["child_access"] = function() - if has("spirit_small_keys", 1) then - return AccessibilityLevel.Normal + if has("spirit_small_keys", 2) then + return has_bombchus() end return AccessibilityLevel.None end, ["adult_access"] = function() - if has("spirit_small_keys", 1) then - return AccessibilityLevel.Normal - end return AccessibilityLevel.None end } } }, - ["Spirit Temple Central Chamber"] = { + ["Adult Spirit Temple MQ"] = { ["scene"] = "Spirit Temple", ["dungeon"] = true, - ["exits"] = { - ["Spirit Temple Outdoor Hands"] = { + ["locations"] = { + ["Spirit Temple MQ Child Climb South Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("spirit_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None end }, - ["Spirit Temple Beyond Central Locked Door"] = { + ["Spirit Temple MQ Statue Room Lullaby Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift2") then - if has("spirit_small_keys", 4) then - return AccessibilityLevel.Normal - end - if has("spirit_small_keys", 2) then - return AccessibilityLevel.SequenceBreak - end + if has("ocarina") and has("lullaby") then + return AccessibilityLevel.Normal end return AccessibilityLevel.None end }, - ["Child Spirit Temple Climb"] = { + ["Spirit Temple MQ Statue Room Invisible Chest"] = { ["child_access"] = function() - return AccessibilityLevel.Normal + return AccessibilityLevel.None end, ["adult_access"] = function() - return AccessibilityLevel.Normal + if has("logic_lens_spirit_mq") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end - } - } - }, - ["Spirit Temple Outdoor Hands"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, - ["exits"] = { - ["Desert Colossus"] = { - ["fixed"] = true, + }, + ["Spirit Temple MQ Beamos Room Chest"] = { ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() if has("spirit_small_keys", 5) then return AccessibilityLevel.Normal - end - if has("spirit_small_keys", 2) then + elseif has("spirit_small_keys", 1) then return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None + end + }, + ["Spirit Temple MQ Chest Switch Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None end, ["adult_access"] = function() - if has("lift2") then + if has("ocarina") and has("time") then if has("spirit_small_keys", 5) then return AccessibilityLevel.Normal - end - local explo = has_explosives() - if explo ~= AccessibilityLevel.None and has("spirit_small_keys", 2) then - if explo == AccessibilityLevel.Normal and has("spirit_small_keys", 3) then - return AccessibilityLevel.Normal - end + elseif has("spirit_small_keys", 1) then return AccessibilityLevel.SequenceBreak end end return AccessibilityLevel.None end - } - } - }, - ["Spirit Temple Beyond Central Locked Door"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, - ["exits"] = { - ["Spirit Temple Beyond Final Locked Door"] = { + }, + ["Spirit Temple MQ Boss Key Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("spirit_small_keys", 3) then - if - has("spirit_small_keys", 5) and - (has("logic_spirit_wall") or has("longshot") or has_bombchus() == AccessibilityLevel.Normal or - ((has("bombs") or has("nuts") or (has("dinsfire") and has("magic"))) and - (has("bow") or has("hookshot") or has("hammer")))) - then + if has("ocarina") and has("time") and has("shield3") then + if has("spirit_small_keys", 5) then return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + return AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end - } - } - }, - ["Spirit Temple Beyond Final Locked Door"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, - ["exits"] = {} - }, - ["Spirit Temple MQ Lobby"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, - ["exits"] = { - ["Desert Colossus From Spirit Lobby"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.Normal - end - }, - ["Child Spirit Temple MQ"] = { - ["child_access"] = function() - return AccessibilityLevel.Normal - end, - ["adult_access"] = function() - return AccessibilityLevel.None - end }, - ["Adult Spirit Temple MQ"] = { + ["Spirit Temple MQ GS Nine Thrones Room West"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - if has("longshot") and has("lift2") then - return has_bombchus() + if has("spirit_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 3) then + return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None end - } - } - }, - ["Child Spirit Temple MQ"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, - ["exits"] = { - ["Spirit Temple MQ Shared"] = { + }, + ["Spirit Temple MQ GS Nine Thrones Room North"] = { ["child_access"] = function() - if has("spirit_small_keys", 2) then - return has_bombchus() - end return AccessibilityLevel.None end, ["adult_access"] = function() + if has("spirit_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 3) then + return AccessibilityLevel.SequenceBreak + end return AccessibilityLevel.None end } - } - }, - ["Adult Spirit Temple MQ"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, + }, ["exits"] = { ["Lower Adult Spirit Temple MQ"] = { ["child_access"] = function() @@ -9245,8 +13342,7 @@ data_per_region = { if has("shield3") and has("bow") and has("magic") then if has("firearrow") then return AccessibilityLevel.Normal - end - if has("dinsfire") then + elseif has("dinsfire") then if has("logic_spirit_mq_lower_adult") then return AccessibilityLevel.Normal end @@ -9279,139 +13375,175 @@ data_per_region = { return AccessibilityLevel.None end }, - ["Mirror Shield Hand MQ"] = { + ["Mirror Shield Hand MQ"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("time") then + local keys = AccessibilityLevel.None + if has("spirit_small_keys", 5) then + keys = AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + keys = AccessibilityLevel.SequenceBreak + end + local lot = + (has("logic_lens_spirit_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak + return and_accessibility(keys, lot) + end + return AccessibilityLevel.None + end + } + } + }, + ["Spirit Temple MQ Shared"] = { + ["scene"] = "Spirit Temple", + ["dungeon"] = true, + ["locations"] = { + ["Spirit Temple MQ Child Climb North Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("spirit_small_keys", 6) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Spirit Temple MQ Compass Chest"] = { + ["child_access"] = function() + if has("bow") and has("sling") then + return AccessibilityLevel.Normal + elseif has("sling") then + if has("spirit_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 2) then + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Spirit Temple MQ Sun Block Room Chest"] = { ["child_access"] = function() - return AccessibilityLevel.None + if (has("ocarina") and has("time")) or has("logic_spirit_mq_sun_block_sot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak end, ["adult_access"] = function() - if has("ocarina") and has("time") then - local lens = AccessibilityLevel.SequenceBreak - if has("logic_lens_spirit_mq") or (has("lens") and has("magic")) then - lens = AccessibilityLevel.Normal - end - - local keys = AccessibilityLevel.None - if has("spirit_small_keys", 5) then - keys = AccessibilityLevel.Normal - elseif has("spirit_small_keys", 1) then - keys = AccessibilityLevel.SequenceBreak - end - - return and_accessibility(lens, keys) + return AccessibilityLevel.Normal + end + }, + ["Spirit Temple MQ GS Sun Block Room"] = { + ["child_access"] = function() + if has("boomerang") then + local trick1 = + has("logic_spirit_mq_sun_block_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick2 = + has("logic_spirit_mq_sun_block_sot") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility(trick1, or_accessibility(sot, trick2)) end return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal end } - } - }, - ["Spirit Temple MQ Shared"] = { - ["scene"] = "Spirit Temple", - ["dungeon"] = true, + }, ["exits"] = { ["Silver Gauntlets Hand MQ"] = { ["child_access"] = function() - local keys1 = AccessibilityLevel.None + local keys7 = AccessibilityLevel.None if has("spirit_small_keys", 7) then - keys1 = AccessibilityLevel.Normal + keys7 = AccessibilityLevel.Normal elseif has("spirit_small_keys", 3) then - keys1 = AccessibilityLevel.SequenceBreak - end - - local block = AccessibilityLevel.SequenceBreak - if has("logic_spirit_mq_sun_block_sot") or (has("ocarina") and has("time")) then - block = AccessibilityLevel.Normal + keys7 = AccessibilityLevel.SequenceBreak end - - local keys2 = AccessibilityLevel.None + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_mq_sun_block_sot") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local keys4 = AccessibilityLevel.None if has("spirit_small_keys", 4) then - keys2 = AccessibilityLevel.Normal + keys4 = AccessibilityLevel.Normal elseif has("spirit_small_keys", 1) then - keys2 = AccessibilityLevel.SequenceBreak - end - - local song = AccessibilityLevel.None - if has("ocarina") and has("time") then - song = AccessibilityLevel.Normal - end - - local lens = AccessibilityLevel.SequenceBreak - if has("logic_lens_spirit_mq") or (has("lens") and has("magic")) then - lens = AccessibilityLevel.Normal + keys4 = AccessibilityLevel.SequenceBreak end + local lot = + (has("logic_lens_spirit_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak - return or_accessibility(and_accessibility(keys1, block), and_accessibility(keys2, song, lens)) + return or_accessibility( + and_accessibility(keys7, or_accessibility(sot, trick)), + and_accessibility(keys4, sot, lot) + ) end, ["adult_access"] = function() - local keys1 = AccessibilityLevel.None + local keys7 = AccessibilityLevel.None if has("spirit_small_keys", 7) then - keys1 = AccessibilityLevel.Normal - elseif has("spirit_small_keys", 3) then - keys1 = AccessibilityLevel.SequenceBreak + keys7 = AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + keys7 = AccessibilityLevel.SequenceBreak end - - local keys2 = AccessibilityLevel.None + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys4 = AccessibilityLevel.None if has("spirit_small_keys", 4) then - keys2 = AccessibilityLevel.Normal + keys4 = AccessibilityLevel.Normal elseif has("spirit_small_keys", 1) then - keys2 = AccessibilityLevel.SequenceBreak - end - - local song = AccessibilityLevel.None - if has("ocarina") and has("time") then - song = AccessibilityLevel.Normal - end - - local lens = AccessibilityLevel.SequenceBreak - if has("logic_lens_spirit_mq") or (has("lens") and has("magic")) then - lens = AccessibilityLevel.Normal + keys4 = AccessibilityLevel.SequenceBreak end + local lot = + (has("logic_lens_spirit_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak - return or_accessibility(keys1, and_accessibility(keys2, song, lens)) + return or_accessibility(keys7, and_accessibility(keys4, sot, lot)) end }, ["Desert Colossus"] = { ["fixed"] = true, ["child_access"] = function() - local keys1 = AccessibilityLevel.None + local keys7 = AccessibilityLevel.None if has("spirit_small_keys", 7) then - keys1 = AccessibilityLevel.Normal + keys7 = AccessibilityLevel.Normal elseif has("spirit_small_keys", 3) then - keys1 = AccessibilityLevel.SequenceBreak - end - - local block = AccessibilityLevel.SequenceBreak - if has("logic_spirit_mq_sun_block_sot") or (has("ocarina") and has("time")) then - block = AccessibilityLevel.Normal + keys7 = AccessibilityLevel.SequenceBreak end + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = + has("logic_spirit_mq_sun_block_sot") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak - return and_accessibility(keys1, block) + return and_accessibility(keys7, or_accessibility(sot, trick)) end, ["adult_access"] = function() - local keys1 = AccessibilityLevel.None + local keys7 = AccessibilityLevel.None if has("spirit_small_keys", 7) then - keys1 = AccessibilityLevel.Normal + keys7 = AccessibilityLevel.Normal elseif has("spirit_small_keys", 3) then - keys1 = AccessibilityLevel.SequenceBreak + keys7 = AccessibilityLevel.SequenceBreak end - - local keys2 = AccessibilityLevel.None + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys4 = AccessibilityLevel.None if has("spirit_small_keys", 4) then - keys2 = AccessibilityLevel.Normal + keys4 = AccessibilityLevel.Normal elseif has("spirit_small_keys", 1) then - keys2 = AccessibilityLevel.SequenceBreak - end - - local song = AccessibilityLevel.None - if has("ocarina") and has("time") then - song = AccessibilityLevel.Normal + keys4 = AccessibilityLevel.SequenceBreak end + local lot = + (has("logic_lens_spirit_mq") or (has("lens") and has("magic"))) and AccessibilityLevel.Normal or + AccessibilityLevel.SequenceBreak - local lens = AccessibilityLevel.SequenceBreak - if has("logic_lens_spirit_mq") or (has("lens") and has("magic")) then - lens = AccessibilityLevel.Normal - end - - return or_accessibility(keys1, and_accessibility(keys2, song, lens)) + return or_accessibility(keys7, and_accessibility(keys4, sot, lot)) end } } @@ -9419,21 +13551,130 @@ data_per_region = { ["Lower Adult Spirit Temple MQ"] = { ["scene"] = "Spirit Temple", ["dungeon"] = true, + ["locations"] = { + ["Spirit Temple MQ Leever Room Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Spirit Temple MQ Symphony Room Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if + has("hammer") and has("ocarina") and has("time") and has("epona") and has("sun") and has("storm") and + has("lullaby") + then + if has("spirit_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None + end + }, + ["Spirit Temple MQ Entrance Front Right Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hammer") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Spirit Temple MQ GS Leever Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Spirit Temple MQ GS Symphony Room"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if + has("hammer") and has("ocarina") and has("time") and has("epona") and has("sun") and has("storm") and + has("lullaby") + then + if has("spirit_small_keys", 7) then + return AccessibilityLevel.Normal + elseif has("spirit_small_keys", 1) then + return AccessibilityLevel.SequenceBreak + end + end + return AccessibilityLevel.None + end + } + }, ["exits"] = {} }, ["Spirit Temple MQ Boss Area"] = { ["scene"] = "Spirit Temple", ["dungeon"] = true, + ["locations"] = { + ["Spirit Temple MQ Mirror Puzzle Invisible Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("logic_lens_spirit_mq") or (has("lens") and has("magic")) then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Twinrova"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("shield3") and has("spirit_boss_key") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, ["exits"] = {} }, ["Mirror Shield Hand MQ"] = { ["scene"] = "Spirit Temple", ["dungeon"] = true, + ["locations"] = { + ["Spirit Temple MQ Mirror Shield Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = {} }, ["Silver Gauntlets Hand MQ"] = { ["scene"] = "Spirit Temple", ["dungeon"] = true, + ["locations"] = { + ["Spirit Temple MQ Silver Gauntlets Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.Normal + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = {} }, ["Water Temple Split"] = { @@ -9497,8 +13738,7 @@ data_per_region = { ["adult_access"] = function() if has("ironboots") then return FTR_or_zora() - end - if has("longshot") then + elseif has("longshot") then if has("logic_water_temple_torch_longshot") then return FTR_or_zora() end @@ -9512,13 +13752,25 @@ data_per_region = { ["Water Temple Highest Water Level"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Morpha"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("water_boss_key") and has("longshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Water Temple Falling Platform Room"] = { ["child_access"] = function() if has("water_small_keys", 4) then return AccessibilityLevel.Normal - end - if has("water_small_keys", 1) then + elseif has("water_small_keys", 1) then return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None @@ -9526,8 +13778,7 @@ data_per_region = { ["adult_access"] = function() if has("water_small_keys", 4) then return AccessibilityLevel.Normal - end - if has("water_small_keys", 1) then + elseif has("water_small_keys", 1) then return AccessibilityLevel.SequenceBreak end return AccessibilityLevel.None @@ -9538,28 +13789,151 @@ data_per_region = { ["Water Temple Dive"] = { ["scene"] = "Water Temple", ["dungeon"] = true, - ["exits"] = { - ["Water Temple Cracked Wall"] = { + ["locations"] = { + ["Water Temple Map Chest"] = { + ["child_access"] = function() + return raise_water_level() + end, + ["adult_access"] = function() + return raise_water_level() + end + }, + ["Water Temple Compass Chest"] = { ["child_access"] = function() return AccessibilityLevel.None end, ["adult_access"] = function() - local level = AccessibilityLevel.None + if ((has("ocarina") and has("lullaby")) or has("ironboots")) and has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Water Temple Torches Chest"] = { + ["child_access"] = function() if has("ocarina") and has("lullaby") then - if has("hookshot") then - if has("logic_water_cracked_wall_nothing") then - return AccessibilityLevel.Normal - end - level = AccessibilityLevel.SequenceBreak + if has("sticks") and has("sword1") and has("magic") then + return access_region("Water Temple Lobby", "child") end - if has("hoverboots") then - if has("logic_water_cracked_wall_nothing") or has("logic_water_cracked_wall_hovers") then - return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("lullaby") then + if has("bow") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + end + end + return AccessibilityLevel.None + end + }, + ["Water Temple Central Bow Target Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("lift1") and has("ocarina") and has("lullaby") then + local adult = AccessibilityLevel.None + if has("bow") then + if has("logic_water_central_bow") or has("hoverboots") or has("longshot") then + adult = AccessibilityLevel.Normal + else + adult = AccessibilityLevel.SequenceBreak end - level = AccessibilityLevel.SequenceBreak end + local child = AccessibilityLevel.None + if has("sling") then + local trick = + has("logic_water_central_bow") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + child = + and_accessibility( + trick, + access_region("Water Temple Lobby", "child"), + access_region("Water Temple Middle Water Level") + ) + end + return or_accessibility(adult, child) + end + return AccessibilityLevel.None + end + }, + ["Water Temple GS Behind Gate"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if + (has("hookshot") or has("hoverboots")) and has("ocarina") and has("lullaby") and + (has("ironboots") or has("scale")) + then + return has_explosives() + end + return AccessibilityLevel.None + end + }, + ["Water Temple GS Central Pillar"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("lullaby") then + local ls = has("longshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local ib = has("ironboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local rang = has("boomerang") and AccessibilityLevel.Normal or AccessibilityLevel.None + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local fw = (has("faroreswind") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick_fw = + has("logic_water_central_gs_fw") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local trick_ib = + has("logic_water_central_gs_irons") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local keys5 = AccessibilityLevel.None + if has("water_small_keys", 5) then + keys5 = AccessibilityLevel.Normal + elseif has("water_small_keys", 1) then + keys5 = AccessibilityLevel.SequenceBreak + end + return or_accessibility( + and_accessibility( + or_accessibility(ls, and_accessibility(trick_fw, hs, fw)), + or_accessibility(keys5, bow, df) + ), + and_accessibility(trick_ib, hs, ib, or_accessibility(bow, df)), + and_accessibility( + trick_fw, + access_region("Water Temple Lobby", "child"), + rang, + fw, + or_accessibility(sticks, df, and_accessibility(keys5, or_accessibility(hb, bow))) + ) + ) + end + return AccessibilityLevel.None + end + } + }, + ["exits"] = { + ["Water Temple Cracked Wall"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("lullaby") then + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local hb = has("hoverboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick_no = + has("logic_water_cracked_wall_nothing") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local trick_hb = + has("logic_water_cracked_wall_hovers") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return and_accessibility( + or_accessibility(hs, hb), + or_accessibility(trick_no, and_accessibility(trick_hb, hb)) + ) end - return level + return AccessibilityLevel.None end }, ["Water Temple Middle Water Level"] = { @@ -9568,25 +13942,22 @@ data_per_region = { end, ["adult_access"] = function() if has("ocarina") and has("lullaby") then - if has("bow") or (has("dinsfire") and has("magic")) then - return AccessibilityLevel.Normal - end - local level = AccessibilityLevel.None - if has("hookshot") then - if has("water_small_keys", 5) then - return AccessibilityLevel.Normal - end - if has("water_small_keys", 1) then - level = AccessibilityLevel.SequenceBreak - end - end - if has("sticks") then - local child = access_region("Water Temple Lobby", "child") - if child ~= AccessibilityLevel.None then - return child - end + local hs = has("hookshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local sticks = has("sticks") and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local keys5 = AccessibilityLevel.None + if has("water_small_keys", 5) then + keys5 = AccessibilityLevel.Normal + elseif has("water_small_keys", 1) then + keys5 = AccessibilityLevel.SequenceBreak end - return level + return or_accessibility( + bow, + df, + and_accessibility(keys5, hs), + and_accessibility(access_region("Water Temple Lobby", "child"), sticks) + ) end return AccessibilityLevel.None end @@ -9670,21 +14041,97 @@ data_per_region = { ["Water Temple North Basement"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple Boss Key Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + local keys5 = AccessibilityLevel.None + if has("water_small_keys", 5) then + keys5 = AccessibilityLevel.Normal + elseif has("water_small_keys", 2) then + keys5 = AccessibilityLevel.SequenceBreak + end + local dive = AccessibilityLevel.SequenceBreak + if has("logic_water_bk_jump_dive") or has("ironboots") then + dive = AccessibilityLevel.Normal + end + local ledge = AccessibilityLevel.SequenceBreak + if has("logic_water_north_basement_ledge_jump") or has("hoverboots") then + ledge = AccessibilityLevel.Normal + elseif has("lift1") then + ledge = has_explosives() + end + return and_accessibility(keys5, dive, ledge) + end + }, + ["Water Temple GS Near Boss Key Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = {} }, ["Water Temple Cracked Wall"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple Cracked Wall Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return has_explosives() + end + } + }, ["exits"] = {} }, ["Water Temple Dragon Statue"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple Dragon Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = {} }, ["Water Temple Middle Water Level"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple Central Pillar Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ironboots") and has("hookshot") then + local tunic = has("bluetunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local keys5 = AccessibilityLevel.None + if has("water_small_keys", 5) then + keys5 = AccessibilityLevel.Normal + elseif has("water_small_keys", 1) then + keys5 = AccessibilityLevel.SequenceBreak + end + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility(tunic, or_accessibility(keys5, bow, df)) + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Water Temple Cracked Wall"] = { ["child_access"] = function() @@ -9699,6 +14146,30 @@ data_per_region = { ["Water Temple Falling Platform Room"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple GS Falling Platform Room"] = { + ["child_access"] = function() + if has("boomerang") then + if has("logic_water_falling_platform_gs_boomerang") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") then + return AccessibilityLevel.Normal + elseif has("hookshot") then + if has("logic_water_falling_platform_gs_hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Water Temple Dark Link Region"] = { ["child_access"] = function() @@ -9720,6 +14191,45 @@ data_per_region = { ["Water Temple Dark Link Region"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple Longshot Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + }, + ["Water Temple River Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("time") and has("bow") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Water Temple GS River"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("ocarina") and has("time") then + local ib = has("ironboots") and AccessibilityLevel.Normal or AccessibilityLevel.None + local ls = has("longshot") and AccessibilityLevel.Normal or AccessibilityLevel.None + local bow = has("bow") and AccessibilityLevel.Normal or AccessibilityLevel.None + local trick = has("logic_water_river_gs") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + return or_accessibility( + and_accessibility(ib, FTR_or_zora()), + and_accessibility(trick, ls, or_accessibility(bow, has_bombchus())) + ) + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Water Temple Dragon Statue"] = { ["child_access"] = function() @@ -9727,10 +14237,7 @@ data_per_region = { end, ["adult_access"] = function() if has("ocarina") and has("time") and has("bow") then - if has("logic_water_dragon_jump_dive") or has("logic_water_dragon_adult") then - return AccessibilityLevel.Normal - end - if has("ironboots") then + if has("ironboots") or has("logic_water_dragon_jump_dive") or has("logic_water_dragon_adult") then return FTR_or_zora() end return AccessibilityLevel.SequenceBreak @@ -9743,6 +14250,19 @@ data_per_region = { ["Water Temple MQ Lobby"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Morpha"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("water_boss_key") and has("longshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Lake Hylia"] = { ["child_access"] = function() @@ -9779,6 +14299,38 @@ data_per_region = { ["Water Temple MQ Dive"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple MQ Map Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return has_fire() + end + return AccessibilityLevel.None + end + }, + ["Water Temple MQ Central Pillar Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + local tunic = has("bluetunic") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local trick = + has("logic_water_mq_central_pillar") and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak + local fa = + (has("bow") and has("firearrow") and has("magic")) and AccessibilityLevel.Normal or + AccessibilityLevel.None + local df = (has("dinsfire") and has("magic")) and AccessibilityLevel.Normal or AccessibilityLevel.None + local sot = (has("ocarina") and has("time")) and AccessibilityLevel.Normal or AccessibilityLevel.None + return and_accessibility(tunic, or_accessibility(and_accessibility(trick, fa), and_accessibility(df, sot))) + end + return AccessibilityLevel.None + end + } + }, ["exits"] = { ["Water Temple MQ Lowered Water Levels"] = { ["child_access"] = function() @@ -9796,11 +14348,83 @@ data_per_region = { ["Water Temple MQ Lowered Water Levels"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple MQ Compass Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") or (has("dinsfire") and has("magic")) then + return AccessibilityLevel.Normal + elseif has("sticks") then + return and_accessibility(access_region("Water Temple MQ Lobby", "child"), has_explosives()) + end + return AccessibilityLevel.None + end + }, + ["Water Temple MQ Longshot Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("hookshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Water Temple MQ GS Lizalfos Hallway"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("dinsfire") and has("magic") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + }, + ["Water Temple MQ GS Before Upper Water Switch"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("longshot") then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.None + end + } + }, ["exits"] = {} }, ["Water Temple MQ Dark Link Region"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple MQ Boss Key Chest"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("dinsfire") and has("magic") then + if has("logic_water_dragon_jump_dive") or has("scale") or has("ironboots") then + return FTR_or_zora() + end + return AccessibilityLevel.SequenceBreak + end + return AccessibilityLevel.None + end + }, + ["Water Temple MQ GS River"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + return AccessibilityLevel.Normal + end + } + }, ["exits"] = { ["Water Temple MQ Basement Gated Areas"] = { ["child_access"] = function() @@ -9818,6 +14442,54 @@ data_per_region = { ["Water Temple MQ Basement Gated Areas"] = { ["scene"] = "Water Temple", ["dungeon"] = true, + ["locations"] = { + ["Water Temple MQ Freestanding Key"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if + has("hoverboots") or (can_use_scarecrow() == AccessibilityLevel.Normal) or + has("logic_water_north_basement_ledge_jump") + then + return AccessibilityLevel.Normal + end + return AccessibilityLevel.SequenceBreak + end + }, + ["Water Temple MQ GS Triple Wall Torch"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("bow") and has("firearrow") and has("magic") then + if has("hoverboots") then + return AccessibilityLevel.Normal + end + return can_use_scarecrow() + end + return AccessibilityLevel.None + end + }, + ["Water Temple MQ GS Freestanding Key Area"] = { + ["child_access"] = function() + return AccessibilityLevel.None + end, + ["adult_access"] = function() + if has("logic_water_mq_locked_gs") then + return AccessibilityLevel.Normal + elseif has("water_small_keys", 2) then + if + has("hoverboots") or (can_use_scarecrow() == AccessibilityLevel.Normal) or + has("logic_water_north_basement_ledge_jump") + then + return AccessibilityLevel.Normal + end + end + return AccessibilityLevel.SequenceBreak + end + } + }, ["exits"] = {} } } diff --git a/ootrando_overworldmap_hamsda/scripts/update_shared.lua b/ootrando_overworldmap_hamsda/scripts/update_shared.lua index 541ea694..2cb857bd 100644 --- a/ootrando_overworldmap_hamsda/scripts/update_shared.lua +++ b/ootrando_overworldmap_hamsda/scripts/update_shared.lua @@ -41,7 +41,7 @@ function update_keycounts() else key_object.MaxCount = math.max(key_counts["vanilla"][dungeon], key_counts["mq"][dungeon]) end - if not has_keys then + if not is_keys then key_object.AcquiredCount = key_object.MaxCount local bk = get_object(dungeon .. "_boss_key") if bk then @@ -78,7 +78,7 @@ function update_fortress() elseif setting_normal then item_gf_keys.MaxCount = 4 end - if not has_keys then + if not is_keys then item_gf_keys.AcquiredCount = item_gf_keys.MaxCount end end diff --git a/repository.json b/repository.json index 5dbdf27f..7701cfc3 100644 --- a/repository.json +++ b/repository.json @@ -10,7 +10,7 @@ "pins", "chathud" ], - "version": "3.2.2.0", + "version": "3.3.0.0", "uid": "ootrando_overworldmap_hamsda", "link": "https://hamsda.github.io/EmoTrackerPacks/ootrando_overworldmap_hamsda.zip", "documentation_url": "https://github.com/Hamsda/EmoTrackerPacks/blob/master/ootrando_overworldmap_hamsda/README.md",