From cd71c102f94211de1713d8f390ad2dcb76a6fc8f Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sun, 20 Jul 2025 16:05:28 +0000 Subject: [PATCH] split up logic.s, ignore generated file, flesh out code for alternative output, fix CMake to generate implicitly --- CMakeLists.txt | 7 - soh/CMakeLists.txt | 44 + soh/compile_logic.py | 299 +- .../randomizer/generated/.gitignore | 1 + .../randomizer/location_access/generated.cpp | 6326 ---------------- soh/soh/Enhancements/randomizer/logic.s | 6722 ----------------- .../logic/dungeons/bottom_of_the_well.s | 230 + .../randomizer/logic/dungeons/deku_tree.s | 339 + .../logic/dungeons/dodongos_cavern.s | 437 ++ .../randomizer/logic/dungeons/fire_temple.s | 553 ++ .../randomizer/logic/dungeons/forest_temple.s | 433 ++ .../randomizer/logic/dungeons/ganons_castle.s | 364 + .../logic/dungeons/gerudo_training_ground.s | 225 + .../randomizer/logic/dungeons/ice_cavern.s | 100 + .../logic/dungeons/jabu_jabus_belly.s | 267 + .../randomizer/logic/dungeons/shadow_temple.s | 306 + .../randomizer/logic/dungeons/spirit_temple.s | 395 + .../randomizer/logic/dungeons/water_temple.s | 634 ++ .../logic/overworld/castle_grounds.s | 83 + .../logic/overworld/death_mountain_crater.s | 114 + .../logic/overworld/death_mountain_trail.s | 84 + .../logic/overworld/desert_colossus.s | 51 + .../logic/overworld/gerudo_fortress.s | 192 + .../logic/overworld/gerudo_valley.s | 86 + .../randomizer/logic/overworld/goron_city.s | 82 + .../randomizer/logic/overworld/graveyard.s | 103 + .../logic/overworld/haunted_wasteland.s | 29 + .../randomizer/logic/overworld/hyrule_field.s | 177 + .../randomizer/logic/overworld/kakariko.s | 212 + .../logic/overworld/kokiri_forest.s | 158 + .../randomizer/logic/overworld/lake_hylia.s | 160 + .../logic/overworld/lon_lon_ranch.s | 51 + .../randomizer/logic/overworld/lost_woods.s | 119 + .../randomizer/logic/overworld/market.s | 229 + .../logic/overworld/sacred_forest_meadow.s | 50 + .../logic/overworld/thieves_hideout.s | 94 + .../randomizer/logic/overworld/zoras_domain.s | 70 + .../logic/overworld/zoras_fountain.s | 87 + .../randomizer/logic/overworld/zoras_river.s | 106 + soh/soh/Enhancements/randomizer/logic/root.s | 55 + 40 files changed, 6878 insertions(+), 13196 deletions(-) create mode 100644 soh/soh/Enhancements/randomizer/generated/.gitignore delete mode 100644 soh/soh/Enhancements/randomizer/location_access/generated.cpp delete mode 100644 soh/soh/Enhancements/randomizer/logic.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/bottom_of_the_well.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/deku_tree.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/dodongos_cavern.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/fire_temple.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/forest_temple.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/ganons_castle.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/gerudo_training_ground.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/shadow_temple.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/spirit_temple.s create mode 100644 soh/soh/Enhancements/randomizer/logic/dungeons/water_temple.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/castle_grounds.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_crater.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_trail.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/desert_colossus.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/gerudo_fortress.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/gerudo_valley.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/goron_city.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/graveyard.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/haunted_wasteland.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/hyrule_field.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/kokiri_forest.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/lake_hylia.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/lon_lon_ranch.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/lost_woods.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/market.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/sacred_forest_meadow.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/thieves_hideout.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/zoras_domain.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/zoras_fountain.s create mode 100644 soh/soh/Enhancements/randomizer/logic/overworld/zoras_river.s create mode 100644 soh/soh/Enhancements/randomizer/logic/root.s diff --git a/CMakeLists.txt b/CMakeLists.txt index 695b36fdd..7333da8d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -229,13 +229,6 @@ add_custom_target( DEPENDS ZAPD ) -add_custom_target( - CompileLogic - - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/soh/compile_logic.py ${CMAKE_CURRENT_SOURCE_DIR}/soh/soh/Enhancements/randomizer/logic.s ${CMAKE_CURRENT_SOURCE_DIR}/soh/soh/Enhancements/randomizer/location_access/generated.cpp - BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/soh/soh/Enhancements/randomizer/location_access/generated.cpp -) - if(CMAKE_SYSTEM_NAME MATCHES "Linux") find_package(ImageMagick COMPONENTS convert) if (ImageMagick_FOUND) diff --git a/soh/CMakeLists.txt b/soh/CMakeLists.txt index e74c14f4c..fbe597f16 100644 --- a/soh/CMakeLists.txt +++ b/soh/CMakeLists.txt @@ -124,6 +124,7 @@ source_group("include" FILES ${Header_Files__include}) file(GLOB_RECURSE soh__ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "soh/*.c" "soh/*.cpp" "soh/*.h" "soh/*.hpp") # Add specific files that don't match the pattern +list(APPEND soh__ ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/generated/regions.cpp) list(APPEND soh__ ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/savestates_extern.inc) list(APPEND soh__ ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/speechsynthesizer/DarwinSpeechSynthesizer.mm) @@ -212,6 +213,49 @@ source_group("src\\overlays\\gamestates" REGULAR_EXPRESSION "src/overlays/games source_group("src\\overlays\\misc" REGULAR_EXPRESSION "src/overlays/misc/*") # }}} +find_package(Python3 COMPONENTS Interpreter) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/generated/regions.cpp + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/compile_logic.py + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/bottom_of_the_well.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/deku_tree.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/dodongos_cavern.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/fire_temple.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/forest_temple.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/ganons_castle.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/gerudo_training_ground.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/shadow_temple.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/spirit_temple.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/dungeons/water_temple.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/castle_grounds.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/death_mountain_crater.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/death_mountain_trail.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/desert_colossus.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/gerudo_fortress.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/gerudo_valley.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/goron_city.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/graveyard.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/haunted_wasteland.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/hyrule_field.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/kakariko.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/kokiri_forest.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/lake_hylia.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/lon_lon_ranch.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/lost_woods.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/market.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/sacred_forest_meadow.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/thieves_hideout.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/zoras_domain.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/zoras_fountain.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/overworld/zoras_river.s + ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic/root.s + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/compile_logic.py cpp ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/logic ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/randomizer/generated + VERBATIM +) + set(ALL_FILES ${Header_Files} ${Header_Files__include} diff --git a/soh/compile_logic.py b/soh/compile_logic.py index b445b3f6a..39a4a316b 100755 --- a/soh/compile_logic.py +++ b/soh/compile_logic.py @@ -1,54 +1,69 @@ #!/usr/bin/env python from sys import argv +import os -if len(argv) < 2: - print("expects input file & output file") +if len(argv) < 3: + print("compile_logic.py type input-directory output-directory") exit() -class RR: - __slots__ = "name", "scene", "timepass", "areas", "ui_name", "events", "checks", "exits" - def __init__(self, name, scene, timepass, *areas): - self.name = name - self.scene = scene - self.timepass = timepass == "true" - self.areas = areas - self.ui_name = "" - self.events = [] - self.checks = [] - self.exits = [] +class Cpp: + RR_PRELUDE = """ +#include "soh/Enhancements/randomizer/location_access.h" +#include "soh/Enhancements/randomizer/entrance.h" +#include "soh/Enhancements/randomizer/dungeon.h" - def gen(self, code): - return self.to_cpp(self.parse(code)) +using namespace Rando; +extern "C" SaveContext gSaveContext; - def parse(self, code): - if code[0] == "(" and code[-1] == ")": - code = code[1:-1] - stack = [] - ast = [] - balance = 0 - lastidx = 0 - for idx, ch in enumerate(code): - if ch.isspace(): - if idx > lastidx: - ast.append(code[lastidx:idx]) - lastidx = idx+1 - elif ch == "(": - stack.append(ast) - ast = [] - lastidx = idx+1 - elif ch == ")": - if idx > lastidx: - ast.append(code[lastidx:idx]) - subast = ast - ast = stack.pop() - ast.append(subast) - lastidx = idx+1 - if len(code) > lastidx: - ast.append(code[lastidx:]) - return ast +void RegionTable_Init_Generated() { + // clang-format off + """ - def to_cpp(self, ast): + RR_EPILOGUE = """ + // clang-format on +}""" + + def generate_rr(self, dirname, RRs): + result = [] + output = result.append + output(self.RR_PRELUDE) + for rr in RRs: + if isinstance(rr, str): + output(rr) + output("\n") + continue + output(f"areaTable[{rr.name}] = Region(\"{rr.ui_name}\", {rr.scene}, {'true' if rr.timepass else 'false'}, {{{','.join(rr.areas)}}}, {{") + if rr.events: + output("\n") + for name, code in rr.events: + output(f"\tEventAccess(&logic->{name}, []{{return {self.compile_rr(rr, code)};}}),\n") + output("}, {") + + if rr.checks: + output("\n") + for name, code in rr.checks: + output(f"\tLOCATION({name}, {self.compile_rr(rr, code)}),\n") + output("}, {") + + if rr.exits: + output("\n") + for name, code in rr.exits: + deprioritize = isinstance(code, list) and isinstance(code[0], str) and code[0] == "@deprioritize" + if deprioritize: + code = code[1] + output(f"\tEntrance({name}, []{{return {self.compile_rr(rr, code)};}}") + if deprioritize: + output(", false") + output("),\n") + output("});\n") + + output(self.RR_EPILOGUE) + with open(dirname + "/regions.cpp", "w", encoding="ascii") as f: + for s in result: + f.write(s) + + def compile_rr(self, rr, ast): result = [] output = result.append if ast: @@ -62,35 +77,35 @@ class RR: output(f"logic->{f}") elif f in logicFUNC: output(f"logic->{f}(") - output(", ".join(map(self.to_cpp, ast[1:]))) + output(", ".join(self.compile_rr(rr, node) for node in ast[1:])) output(")") elif f in ctxFUNC: output(f"ctx->{f}(") - output(", ".join(map(self.to_cpp, ast[1:]))) + output(", ".join(self.compile_rr(rr, node) for node in ast[1:])) output(")") elif f in FUNC: output(f"{f}(") - output(", ".join(map(self.to_cpp, ast[1:]))) + output(", ".join(self.compile_rr(rr, node) for node in ast[1:])) output(")") elif f in binOP: if f == "==" and isinstance(ast[1], str) and ast[1].startswith("RSK_"): - output(f"{self.to_cpp(ast[1])}.Is({self.to_cpp(ast[2])})") + output(f"{self.compile_rr(rr, ast[1])}.Is({self.compile_rr(rr, ast[2])})") elif f == "!=" and isinstance(ast[1], str) and ast[1].startswith("RSK_"): - output(f"{self.to_cpp(ast[1])}.IsNot({self.to_cpp(ast[2])})") + output(f"{self.compile_rr(rr, ast[1])}.IsNot({self.compile_rr(rr, ast[2])})") else: output("(") - output(binOP[f].join(map(self.to_cpp, ast[1:]))) + output(binOP[f].join(self.compile_rr(rr, node) for node in ast[1:])) output(")") elif f == "not": output("!") - output(self.to_cpp(ast[1])) + output(self.compile_rr(rr, ast[1])) elif f == "if": output("(") - output(self.to_cpp(ast[1])) + output(self.compile_rr(rr, ast[1])) output(" ? ") - output(self.to_cpp(ast[2])) + output(self.compile_rr(rr, ast[2])) output(" : ") - output(self.to_cpp(ast[3])) + output(self.compile_rr(rr, ast[3])) output(")") elif f.startswith("RSK_"): output(f"ctx->GetOption({f})") @@ -99,11 +114,11 @@ class RR: elif f.startswith("RT_"): output(f"(bool)ctx->GetTrickOption({f})") elif f == "IsDungeonVanilla": - output(f"ctx->GetDungeon({self.to_cpp(ast[1])})->IsVanilla()") + output(f"ctx->GetDungeon({self.compile_rr(rr, ast[1])})->IsVanilla()") elif f == "IsDungeonMQ": - output(f"ctx->GetDungeon({self.to_cpp(ast[1])})->IsMQ()") + output(f"ctx->GetDungeon({self.compile_rr(rr, ast[1])})->IsMQ()") elif f == "IsTrialSkipped": - output(f"ctx->GetTrial({self.to_cpp(ast[1])})->IsSkipped()") + output(f"ctx->GetTrial({self.compile_rr(rr, ast[1])})->IsSkipped()") elif f == "TriforcePiecesCollected": output("gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected") elif f.startswith("HasProjectileAge"): @@ -111,9 +126,9 @@ class RR: elif f in RANDO: output(f"Rando::{f}") elif f == "Here": - output(f"Here({self.name}, []{{return {self.to_cpp(ast[1])};}})") + output(f"Here({rr.name}, []{{return {self.compile_rr(rr, ast[1])};}})") elif f in ("MQSpiritSharedStatueRoom", "MQSpiritSharedBrokenWallRoom"): - output(f"{f}({self.to_cpp(ast[1])}, []{{return {self.to_cpp(ast[2])};}})") + output(f"{f}({self.compile_rr(rr, ast[1])}, []{{return {self.compile_rr(rr, ast[2])};}})") elif f != "//": if len(ast) != 1: print("expected atom, got tree", ast) @@ -123,6 +138,45 @@ class RR: print("invalid atom", f) return "".join(result) +class RR: + __slots__ = "name", "scene", "timepass", "areas", "ui_name", "events", "checks", "exits" + def __init__(self, name, scene, timepass, *areas): + self.name = name + self.scene = scene + self.timepass = timepass == "true" + self.areas = areas + self.ui_name = "" + self.events = [] + self.checks = [] + self.exits = [] + +def parse(code): + if code[0] == "(" and code[-1] == ")": + code = code[1:-1] + stack = [] + ast = [] + balance = 0 + lastidx = 0 + for idx, ch in enumerate(code): + if ch.isspace(): + if idx > lastidx: + ast.append(code[lastidx:idx]) + lastidx = idx+1 + elif ch == "(": + stack.append(ast) + ast = [] + lastidx = idx+1 + elif ch == ")": + if idx > lastidx: + ast.append(code[lastidx:idx]) + subast = ast + ast = stack.pop() + ast.append(subast) + lastidx = idx+1 + if len(code) > lastidx: + ast.append(code[lastidx:]) + return ast + binOP = { "==": " == ", "and": " && ", "or": " || ", ">=": " >= ", "!=": " != ", ">": " > ", "<": " < ", "add": " + " } LOGIC = { @@ -229,89 +283,52 @@ ctxFUNC = { "GetOption", } -RRs = [] -active_rr = None -buf = "" -open_count = close_count = 0 -mode = None -for line in open(argv[1], "r", encoding="ascii"): - line = line.strip("\n") - if line == "::": - mode = None if mode == line else line - continue - if mode == "::": - RRs.append(line) - continue - line = line.strip() - if line.startswith("def "): - if open_count != close_count: - print("error parsing", line) - defline = line.split() - active_rr = RR(*defline[1:]) - RRs.append(active_rr) - buf = "" - open_count = close_count = 0 - continue - if active_rr and not active_rr.ui_name: - active_rr.ui_name = line - continue - if not active_rr or line.startswith("//"): - continue - open_count += line.count('(') - close_count += line.count(')') - buf += " " - buf += line - if open_count != close_count: - continue - if not buf or buf.isspace(): - continue - try: - thing, code = buf.split(None, 1) - except: - print("failed to parse line", repr(buf)) - continue - if thing.startswith("RR_"): - active_rr.exits.append((thing, code)) - elif thing.startswith("RC_"): - active_rr.checks.append((thing, code)) - else: - LOGIC.add(thing) - active_rr.events.append((thing, code)) - buf = "" +def main(): + RRs = [] + for root, dirs, files in os.walk(argv[2]): + for file in files: + active_rr = None + buf = "" + pcount = 0 + for line in open(os.path.join(root, file), "r", encoding="ascii"): + line = line.strip() + if line.startswith("def "): + if pcount != 0: + print("error parsing", line) + defline = line.split() + active_rr = RR(*defline[1:]) + RRs.append(active_rr) + buf = "" + pcount = 0 + continue + if active_rr and not active_rr.ui_name: + active_rr.ui_name = line + continue + if not active_rr or line.startswith("//"): + continue + pcount += line.count('(') - line.count(')') + buf += " " + buf += line + if pcount != 0: + continue + if not buf or buf.isspace(): + continue + try: + thing, code = buf.split(None, 1) + except: + print("failed to parse line", repr(buf)) + continue + if thing.startswith("RR_"): + active_rr.exits.append((thing, parse(code))) + elif thing.startswith("RC_"): + active_rr.checks.append((thing, parse(code))) + else: + LOGIC.add(thing) + active_rr.events.append((thing, parse(code))) + buf = "" + generator = { "cpp": Cpp }[argv[1]]() + generator.generate_rr(argv[3], RRs) -result = [] -output = result.append -for rr in RRs: - if isinstance(rr, str): - output(rr) - output("\n") - continue - output(f"areaTable[{rr.name}] = Region(\"{rr.ui_name}\", {rr.scene}, {'true' if rr.timepass else 'false'}, {{{','.join(rr.areas)}}}, {{") - if rr.events: - output("\n") - for name, code in rr.events: - output(f"\tEventAccess(&logic->{name}, []{{return {rr.gen(code)};}}),\n") - output("}, {") - - if rr.checks: - output("\n") - for name, code in rr.checks: - output(f"\tLOCATION({name}, {rr.gen(code)}),\n") - output("}, {") - - if rr.exits: - output("\n") - for name, code in rr.exits: - deprioritize = code.startswith("@deprioritize ") - if deprioritize: - _, code = code.split(None, 1) - output(f"\tEntrance({name}, []{{return {rr.gen(code)};}}") - if deprioritize: - output(", false") - output("),\n") - output("});\n") - -source = "".join(result) -with open(argv[2], "w", encoding="ascii") as f: - f.write(source) +if __name__ == "__main__": + main() diff --git a/soh/soh/Enhancements/randomizer/generated/.gitignore b/soh/soh/Enhancements/randomizer/generated/.gitignore new file mode 100644 index 000000000..72e8ffc0d --- /dev/null +++ b/soh/soh/Enhancements/randomizer/generated/.gitignore @@ -0,0 +1 @@ +* diff --git a/soh/soh/Enhancements/randomizer/location_access/generated.cpp b/soh/soh/Enhancements/randomizer/location_access/generated.cpp deleted file mode 100644 index d2e5c61b7..000000000 --- a/soh/soh/Enhancements/randomizer/location_access/generated.cpp +++ /dev/null @@ -1,6326 +0,0 @@ -#include "soh/Enhancements/randomizer/location_access.h" -#include "soh/Enhancements/randomizer/entrance.h" -#include "soh/Enhancements/randomizer/dungeon.h" - -using namespace Rando; -extern "C" SaveContext gSaveContext; - -void RegionTable_Init_Generated() { - // clang-format off -areaTable[RR_ROOT] = Region("Root", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, { - EventAccess(&logic->KakarikoVillageGateOpen, []{return ctx->GetOption(RSK_KAK_GATE).Is(RO_KAK_GATE_OPEN);}), - EventAccess(&logic->THCouldFree1TorchCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);}), - EventAccess(&logic->THCouldFreeDoubleCellCarpenter, []{return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST));}), - EventAccess(&logic->TH_CouldFreeDeadEndCarpenter, []{return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST));}), - EventAccess(&logic->THCouldRescueSlopeCarpenter, []{return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST));}), - EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);}), -}, { - LOCATION(RC_LINKS_POCKET, true), - LOCATION(RC_TRIFORCE_COMPLETED, (gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected >= (ctx->GetOption(RSK_TRIFORCE_HUNT_PIECES_REQUIRED).Get() + 1))), - LOCATION(RC_SARIA_SONG_HINT, logic->CanUse(RG_SARIAS_SONG)), -}, { - Entrance(RR_ROOT_EXITS, []{return true;}), -}); -areaTable[RR_ROOT_EXITS] = Region("Root Exits", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_CHILD_SPAWN, []{return logic->IsChild;}), - Entrance(RR_ADULT_SPAWN, []{return logic->IsAdult;}), - Entrance(RR_MINUET_OF_FOREST_WARP, []{return logic->CanUse(RG_MINUET_OF_FOREST);}), - Entrance(RR_BOLERO_OF_FIRE_WARP, []{return logic->CanUse(RG_BOLERO_OF_FIRE);}), - Entrance(RR_SERENADE_OF_WATER_WARP, []{return logic->CanUse(RG_SERENADE_OF_WATER);}), - Entrance(RR_NOCTURNE_OF_SHADOW_WARP, []{return logic->CanUse(RG_NOCTURNE_OF_SHADOW);}), - Entrance(RR_REQUIEM_OF_SPIRIT_WARP, []{return logic->CanUse(RG_REQUIEM_OF_SPIRIT);}), - Entrance(RR_PRELUDE_OF_LIGHT_WARP, []{return logic->CanUse(RG_PRELUDE_OF_LIGHT);}), -}); -areaTable[RR_CHILD_SPAWN] = Region("Child Spawn", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_KF_LINKS_HOUSE, []{return true;}), -}); -areaTable[RR_ADULT_SPAWN] = Region("Adult Spawn", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_TEMPLE_OF_TIME, []{return true;}), -}); -areaTable[RR_MINUET_OF_FOREST_WARP] = Region("Minuet of Forest Warp", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}), -}); -areaTable[RR_BOLERO_OF_FIRE_WARP] = Region("Bolero of Fire Warp", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_DMC_CENTRAL_LOCAL, []{return true;}), -}); -areaTable[RR_SERENADE_OF_WATER_WARP] = Region("Serenade of Water Warp", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_LAKE_HYLIA, []{return true;}), -}); -areaTable[RR_REQUIEM_OF_SPIRIT_WARP] = Region("Requiem of Spirit Warp", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_DESERT_COLOSSUS, []{return true;}), -}); -areaTable[RR_NOCTURNE_OF_SHADOW_WARP] = Region("Nocturne of Shadow Warp", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return true;}), -}); -areaTable[RR_PRELUDE_OF_LIGHT_WARP] = Region("Prelude of Light Warp", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, {}, {}, { - Entrance(RR_TEMPLE_OF_TIME, []{return true;}), -}); -areaTable[RR_KOKIRI_FOREST] = Region("Kokiri Forest", SCENE_KOKIRI_FOREST, false, {RA_KOKIRI_FOREST}, { - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)));}), - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), - EventAccess(&logic->ShowedMidoSwordAndShield, []{return (logic->IsChild && (logic->CanUse(RG_KOKIRI_SWORD) && logic->CanUse(RG_DEKU_SHIELD)));}), -}, { - LOCATION(RC_KF_KOKIRI_SWORD_CHEST, logic->IsChild), - LOCATION(RC_KF_GS_KNOW_IT_ALL_HOUSE, (logic->IsChild && (logic->CanAttack() && logic->CanGetNightTimeGS()))), - LOCATION(RC_KF_GS_BEAN_PATCH, (logic->CanSpawnSoilSkull() && logic->CanAttack())), - LOCATION(RC_KF_GS_HOUSE_OF_TWINS, (logic->IsAdult && ((logic->HookshotOrBoomerang() || ((bool)ctx->GetTrickOption(RT_KF_ADULT_GS) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanGetNightTimeGS()))), - LOCATION(RC_KF_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_KF_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_KF_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_KF_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_KF_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_KF_BRIDGE_RUPEE, logic->IsChild), - LOCATION(RC_KF_BEHIND_MIDOS_RUPEE, logic->IsChild), - LOCATION(RC_KF_SOUTH_GRASS_WEST_RUPEE, logic->IsChild), - LOCATION(RC_KF_SOUTH_GRASS_EAST_RUPEE, logic->IsChild), - LOCATION(RC_KF_NORTH_GRASS_WEST_RUPEE, logic->IsChild), - LOCATION(RC_KF_NORTH_GRASS_EAST_RUPEE, logic->IsChild), - LOCATION(RC_KF_BOULDER_RUPEE_1, logic->IsChild), - LOCATION(RC_KF_BOULDER_RUPEE_2, logic->IsChild), - LOCATION(RC_KF_BEAN_RUPEE_1, (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_KF_BEAN_RUPEE_2, (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_KF_BEAN_RUPEE_3, (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_KF_BEAN_RUPEE_4, (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_KF_BEAN_RUPEE_5, (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_KF_BEAN_RUPEE_6, (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_KF_BEAN_RED_RUPEE, (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_KF_SARIAS_ROOF_WEST_HEART, logic->IsChild), - LOCATION(RC_KF_SARIAS_ROOF_EAST_HEART, logic->IsChild), - LOCATION(RC_KF_SARIAS_ROOF_NORTH_HEART, logic->IsChild), - LOCATION(RC_KF_GOSSIP_STONE, true), - LOCATION(RC_KF_CHILD_GRASS_1, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_2, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_3, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_4, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_5, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_6, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_7, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_8, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_9, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_10, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_11, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_12, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_MAZE_1, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_MAZE_2, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_CHILD_GRASS_MAZE_3, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_1, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_2, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_3, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_4, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_5, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_6, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_7, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_8, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_9, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_10, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_11, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_12, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_13, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_14, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_15, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_16, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_17, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_18, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_19, (logic->IsAdult && logic->CanCutShrubs())), - LOCATION(RC_KF_ADULT_GRASS_20, (logic->IsAdult && logic->CanCutShrubs())), -}, { - Entrance(RR_KF_LINKS_HOUSE, []{return true;}), - Entrance(RR_KF_MIDOS_HOUSE, []{return true;}), - Entrance(RR_KF_SARIAS_HOUSE, []{return true;}), - Entrance(RR_KF_HOUSE_OF_TWINS, []{return true;}), - Entrance(RR_KF_KNOW_IT_ALL_HOUSE, []{return true;}), - Entrance(RR_KF_KOKIRI_SHOP, []{return true;}), - Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return ((logic->IsAdult && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->ForestTempleClear)) || (ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield));}), - Entrance(RR_THE_LOST_WOODS, []{return true;}), - Entrance(RR_LW_BRIDGE_FROM_FOREST, []{return (logic->IsAdult || (ctx->GetOption(RSK_FOREST).IsNot(RO_CLOSED_FOREST_ON) || logic->DekuTreeClear));}), - Entrance(RR_KF_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}), -}); -areaTable[RR_KF_LINKS_HOUSE] = Region("KF Link's House", SCENE_LINKS_HOUSE, false, {}, {}, { - LOCATION(RC_KF_LINKS_HOUSE_COW, (logic->IsAdult && (logic->CanUse(RG_EPONAS_SONG) && logic->LinksCow))), - LOCATION(RC_KF_LINKS_HOUSE_POT, logic->CanBreakPots()), -}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_KF_MIDOS_HOUSE] = Region("KF Mido's House", SCENE_MIDOS_HOUSE, false, {}, {}, { - LOCATION(RC_KF_MIDOS_TOP_LEFT_CHEST, true), - LOCATION(RC_KF_MIDOS_TOP_RIGHT_CHEST, true), - LOCATION(RC_KF_MIDOS_BOTTOM_LEFT_CHEST, true), - LOCATION(RC_KF_MIDOS_BOTTOM_RIGHT_CHEST, true), -}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_KF_SARIAS_HOUSE] = Region("KF Saria's House", SCENE_SARIAS_HOUSE, false, {}, {}, { - LOCATION(RC_KF_SARIAS_TOP_LEFT_HEART, true), - LOCATION(RC_KF_SARIAS_TOP_RIGHT_HEART, true), - LOCATION(RC_KF_SARIAS_BOTTOM_LEFT_HEART, true), - LOCATION(RC_KF_SARIAS_BOTTOM_RIGHT_HEART, true), -}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_KF_HOUSE_OF_TWINS] = Region("KF House of Twins", SCENE_TWINS_HOUSE, false, {}, {}, { - LOCATION(RC_KF_TWINS_HOUSE_POT_1, logic->CanBreakPots()), - LOCATION(RC_KF_TWINS_HOUSE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_KF_KNOW_IT_ALL_HOUSE] = Region("KF Know It All House", SCENE_KNOW_IT_ALL_BROS_HOUSE, false, {}, {}, { - LOCATION(RC_KF_BROTHERS_HOUSE_POT_1, logic->CanBreakPots()), - LOCATION(RC_KF_BROTHERS_HOUSE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_KF_KOKIRI_SHOP] = Region("KF Kokiri Shop", SCENE_KOKIRI_SHOP, false, {}, {}, { - LOCATION(RC_KF_SHOP_ITEM_1, true), - LOCATION(RC_KF_SHOP_ITEM_2, true), - LOCATION(RC_KF_SHOP_ITEM_3, true), - LOCATION(RC_KF_SHOP_ITEM_4, true), - LOCATION(RC_KF_SHOP_ITEM_5, true), - LOCATION(RC_KF_SHOP_ITEM_6, true), - LOCATION(RC_KF_SHOP_ITEM_7, true), - LOCATION(RC_KF_SHOP_ITEM_8, true), -}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_KF_OUTSIDE_DEKU_TREE] = Region("KF Outside Deku Tree", SCENE_KOKIRI_FOREST, false, {RA_KOKIRI_FOREST}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), - EventAccess(&logic->ShowedMidoSwordAndShield, []{return (logic->IsChild && (logic->CanUse(RG_KOKIRI_SWORD) && logic->CanUse(RG_DEKU_SHIELD)));}), -}, { - LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE, true), - LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, true), -}, { - Entrance(RR_DEKU_TREE_ENTRYWAY, []{return (logic->IsChild || (ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) && (ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield)));}), - Entrance(RR_KOKIRI_FOREST, []{return ((logic->IsAdult && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->ForestTempleClear)) || (ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield));}), -}); -areaTable[RR_KF_STORMS_GROTTO] = Region("KF Storms Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_KF_STORMS_GROTTO_CHEST, true), - LOCATION(RC_KF_STORMS_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_KF_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_KF_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_KF_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_KF_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_THE_LOST_WOODS] = Region("Lost Woods", SCENE_LOST_WOODS, false, {RA_THE_LOST_WOODS}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)));}), - EventAccess(&logic->BugShrub, []{return (logic->IsChild && logic->CanCutShrubs());}), - EventAccess(&logic->BorrowSpookyMask, []{return (logic->IsChild && (logic->BorrowSkullMask && (logic->CanUse(RG_SARIAS_SONG) && logic->HasItem(RG_CHILD_WALLET))));}), -}, { - LOCATION(RC_LW_SKULL_KID, (logic->IsChild && logic->CanUse(RG_SARIAS_SONG))), - LOCATION(RC_LW_TRADE_COJIRO, (logic->IsAdult && logic->CanUse(RG_COJIRO))), - LOCATION(RC_LW_TRADE_ODD_POTION, (logic->IsAdult && logic->CanUse(RG_ODD_POTION))), - LOCATION(RC_LW_OCARINA_MEMORY_GAME, (logic->IsChild && (logic->HasItem(RG_FAIRY_OCARINA) && (logic->OcarinaButtons() >= 5)))), - LOCATION(RC_LW_TARGET_IN_WOODS, (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))), - LOCATION(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, (logic->IsChild && logic->CanStunDeku())), - LOCATION(RC_LW_GS_BEAN_PATCH_NEAR_BRIDGE, (logic->CanSpawnSoilSkull() && logic->CanAttack())), - LOCATION(RC_LW_SHORTCUT_RUPEE_1, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_SHORTCUT_RUPEE_2, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_SHORTCUT_RUPEE_3, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_SHORTCUT_RUPEE_4, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_SHORTCUT_RUPEE_5, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_SHORTCUT_RUPEE_6, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_SHORTCUT_RUPEE_7, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_SHORTCUT_RUPEE_8, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LW_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_LW_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_LW_SHORTCUT_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_LW_GOSSIP_STONE, true), - LOCATION(RC_LW_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_LW_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_LW_GRASS_3, logic->CanCutShrubs()), -}, { - Entrance(RR_LW_FOREST_EXIT, []{return true;}), - Entrance(RR_GC_WOODS_WARP, []{return true;}), - Entrance(RR_LW_BRIDGE, []{return ((logic->IsAdult && (CanPlantBean(RR_THE_LOST_WOODS) || (bool)ctx->GetTrickOption(RT_LW_BRIDGE))) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT)));}), - Entrance(RR_ZR_FROM_SHORTCUT, []{return (logic->HasItem(RG_SILVER_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || ((bool)ctx->GetTrickOption(RT_LOST_WOOD_NAVI_DIVE) && (logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash())))));}), - Entrance(RR_LW_BEYOND_MIDO, []{return (logic->IsChild || (logic->CanUse(RG_SARIAS_SONG) || (bool)ctx->GetTrickOption(RT_LW_MIDO_BACKFLIP)));}), - Entrance(RR_LW_NEAR_SHORTCUTS_GROTTO, []{return Here(RR_THE_LOST_WOODS, []{return logic->BlastOrSmash();});}), -}); -areaTable[RR_LW_BRIDGE_FROM_FOREST] = Region("LW Bridge From Forest", SCENE_LOST_WOODS, false, {RA_THE_LOST_WOODS}, {}, { - LOCATION(RC_LW_GIFT_FROM_SARIA, true), -}, { - Entrance(RR_LW_BRIDGE, []{return true;}), -}); -areaTable[RR_LW_BRIDGE] = Region("LW Bridge", SCENE_LOST_WOODS, false, {RA_THE_LOST_WOODS}, {}, {}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), - Entrance(RR_HYRULE_FIELD, []{return true;}), - Entrance(RR_THE_LOST_WOODS, []{return logic->CanUse(RG_LONGSHOT);}), -}); -areaTable[RR_LW_FOREST_EXIT] = Region("LW Forest Exit", SCENE_LOST_WOODS, false, {RA_THE_LOST_WOODS}, {}, {}, { - Entrance(RR_KOKIRI_FOREST, []{return true;}), -}); -areaTable[RR_LW_BEYOND_MIDO] = Region("LW Beyond Mido", SCENE_LOST_WOODS, false, {RA_THE_LOST_WOODS}, { - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), -}, { - LOCATION(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, (logic->IsChild && logic->CanStunDeku())), - LOCATION(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, (logic->IsChild && logic->CanStunDeku())), - LOCATION(RC_LW_GS_ABOVE_THEATER, (logic->IsAdult && (((CanPlantBean(RR_LW_BEYOND_MIDO) && logic->CanAttack()) || ((bool)ctx->GetTrickOption(RT_LW_GS_BEAN) && (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) || logic->CanUse(RG_DINS_FIRE)))))))) && logic->CanGetNightTimeGS()))), - LOCATION(RC_LW_GS_BEAN_PATCH_NEAR_THEATER, (logic->CanSpawnSoilSkull() && (logic->CanAttack() || (ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_OFF) && logic->CanReflectNuts())))), - LOCATION(RC_LW_BOULDER_RUPEE, logic->BlastOrSmash()), - LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, (logic->IsChild && (logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, (logic->IsChild && (logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, (logic->IsChild && (logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LW_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_LW_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_LW_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_LW_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_LW_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_LW_GRASS_9, logic->CanCutShrubs()), -}, { - Entrance(RR_LW_FOREST_EXIT, []{return true;}), - Entrance(RR_THE_LOST_WOODS, []{return (logic->IsChild || logic->CanUse(RG_SARIAS_SONG));}), - Entrance(RR_SFM_ENTRYWAY, []{return true;}), - Entrance(RR_DEKU_THEATER, []{return true;}), - Entrance(RR_LW_SCRUBS_GROTTO, []{return Here(RR_LW_BEYOND_MIDO, []{return logic->BlastOrSmash();});}), -}); -areaTable[RR_LW_NEAR_SHORTCUTS_GROTTO] = Region("LW Near Shortcuts Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST, true), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_THE_LOST_WOODS, []{return true;}), -}); -areaTable[RR_DEKU_THEATER] = Region("Deku Theater", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_DEKU_THEATER_SKULL_MASK, (logic->IsChild && logic->BorrowSkullMask)), - LOCATION(RC_DEKU_THEATER_MASK_OF_TRUTH, (logic->IsChild && logic->BorrowRightMasks)), -}, { - Entrance(RR_LW_BEYOND_MIDO, []{return true;}), -}); -areaTable[RR_LW_SCRUBS_GROTTO] = Region("LW Scrubs Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_LW_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()), - LOCATION(RC_LW_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()), - LOCATION(RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), - LOCATION(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_LW_BEYOND_MIDO, []{return true;}), -}); -areaTable[RR_SFM_ENTRYWAY] = Region("SFM Entryway", SCENE_SACRED_FOREST_MEADOW, false, {RA_SACRED_FOREST_MEADOW}, {}, {}, { - Entrance(RR_LW_BEYOND_MIDO, []{return true;}), - Entrance(RR_SACRED_FOREST_MEADOW, []{return (logic->IsAdult || logic->CanKillEnemy(RE_WOLFOS));}), - Entrance(RR_SFM_WOLFOS_GROTTO, []{return logic->CanOpenBombGrotto();}), -}); -areaTable[RR_SACRED_FOREST_MEADOW] = Region("Sacred Forest Meadow", SCENE_SACRED_FOREST_MEADOW, false, {RA_SACRED_FOREST_MEADOW}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), -}, { - LOCATION(RC_SONG_FROM_SARIA, (logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER))), - LOCATION(RC_SHEIK_IN_FOREST, logic->IsAdult), - LOCATION(RC_SFM_GS, (logic->IsAdult && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE, true), - LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE, true), - LOCATION(RC_SFM_SARIA_GOSSIP_STONE, true), -}, { - Entrance(RR_SFM_ENTRYWAY, []{return true;}), - Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_SFM_FAIRY_GROTTO, []{return true;}), - Entrance(RR_SFM_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}), -}); -areaTable[RR_SFM_WOLFOS_GROTTO] = Region("SFM Wolfos Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_SFM_WOLFOS_GROTTO_CHEST, logic->CanKillEnemy(RE_WOLFOS, ED_CLOSE, true, 2)), -}, { - Entrance(RR_SFM_ENTRYWAY, []{return true;}), -}); -areaTable[RR_SFM_FAIRY_GROTTO] = Region("SFM Fairy Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->FreeFairies, []{return true;}), -}, { - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_1, true), - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_2, true), - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_3, true), - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_4, true), - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_5, true), - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_6, true), - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_7, true), - LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_8, true), -}, { - Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}), -}); -areaTable[RR_SFM_STORMS_GROTTO] = Region("SFM Storms Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_SFM_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()), - LOCATION(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()), - LOCATION(RC_SFM_STORMS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}), -}); -areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", SCENE_HYRULE_FIELD, true, {RA_HYRULE_FIELD}, { - EventAccess(&logic->BigPoeKill, []{return (logic->HasBottle() && (logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_EPONA) || (bool)ctx->GetTrickOption(RT_HF_BIG_POE_WITHOUT_EPONA))));}), - EventAccess(&logic->BorrowRightMasks, []{return (logic->IsChild && (logic->BorrowBunnyHood && (logic->HasItem(RG_KOKIRI_EMERALD) && (logic->HasItem(RG_GORON_RUBY) && (logic->HasItem(RG_ZORA_SAPPHIRE) && logic->HasItem(RG_CHILD_WALLET))))));}), -}, { - LOCATION(RC_HF_OCARINA_OF_TIME_ITEM, (logic->IsChild && ((logic->StoneCount() == 3) && logic->HasItem(RG_BRONZE_SCALE)))), - LOCATION(RC_SONG_FROM_OCARINA_OF_TIME, (logic->IsChild && ((logic->StoneCount() == 3) && logic->HasItem(RG_BRONZE_SCALE)))), - LOCATION(RC_HF_POND_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HF_CENTRAL_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_9, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_10, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_11, logic->CanCutShrubs()), - LOCATION(RC_HF_CENTRAL_GRASS_12, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_9, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_10, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_11, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTH_GRASS_12, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_9, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_10, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_11, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GRASS_12, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_9, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_10, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_11, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_KF_GRASS_12, logic->CanCutShrubs()), -}, { - Entrance(RR_LW_BRIDGE, []{return true;}), - Entrance(RR_LAKE_HYLIA, []{return true;}), - Entrance(RR_GERUDO_VALLEY, []{return true;}), - Entrance(RR_MARKET_ENTRANCE, []{return true;}), - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), - Entrance(RR_ZR_FRONT, []{return true;}), - Entrance(RR_LON_LON_RANCH, []{return true;}), - Entrance(RR_HF_SOUTHEAST_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}), - Entrance(RR_HF_OPEN_GROTTO, []{return true;}), - Entrance(RR_HF_INSIDE_FENCE_GROTTO, []{return logic->CanOpenBombGrotto();}), - Entrance(RR_HF_COW_GROTTO, []{return ((logic->CanUse(RG_MEGATON_HAMMER) || logic->IsChild) && logic->CanOpenBombGrotto());}), - Entrance(RR_HF_NEAR_MARKET_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}), - Entrance(RR_HF_FAIRY_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}), - Entrance(RR_HF_NEAR_KAK_GROTTO, []{return logic->CanOpenBombGrotto();}), - Entrance(RR_HF_TEKTITE_GROTTO, []{return logic->CanOpenBombGrotto();}), -}); -areaTable[RR_HF_SOUTHEAST_GROTTO] = Region("HF Southeast Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_HF_SOUTHEAST_GROTTO_CHEST, true), - LOCATION(RC_HF_SOUTHEAST_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_HF_OPEN_GROTTO] = Region("HF Open Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_HF_OPEN_GROTTO_CHEST, true), - LOCATION(RC_HF_OPEN_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_HF_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_HF_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_HF_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_HF_INSIDE_FENCE_GROTTO] = Region("HF Inside Fence Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_HF_DEKU_SCRUB_GROTTO, logic->CanStunDeku()), - LOCATION(RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, logic->CanBreakLowerBeehives()), - LOCATION(RC_HF_FENCE_GROTTO_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_HF_COW_GROTTO] = Region("HF Cow Grotto", SCENE_GROTTOS, false, {}, {}, {}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), - Entrance(RR_HF_COW_GROTTO_BEHIND_WEBS, []{return logic->HasFireSource();}), -}); -areaTable[RR_HF_COW_GROTTO_BEHIND_WEBS] = Region("HF Cow Grotto Behind Webs", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), -}, { - LOCATION(RC_HF_GS_COW_GROTTO, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_HF_COW_GROTTO_COW, logic->CanUse(RG_EPONAS_SONG)), - LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_HF_COW_GROTTO_POT_1, logic->CanBreakPots()), - LOCATION(RC_HF_COW_GROTTO_POT_2, logic->CanBreakPots()), - LOCATION(RC_HF_COW_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_COW_GROTTO_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_HF_COW_GROTTO, []{return true;}), -}); -areaTable[RR_HF_NEAR_MARKET_GROTTO] = Region("HF Near Market Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_HF_NEAR_MARKET_GROTTO_CHEST, true), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_HF_FAIRY_GROTTO] = Region("HF Fairy Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->FreeFairies, []{return true;}), -}, { - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_1, true), - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_2, true), - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_3, true), - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_4, true), - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_5, true), - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_6, true), - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_7, true), - LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_8, true), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_HF_NEAR_KAK_GROTTO] = Region("HF Near Kak Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_HF_GS_NEAR_KAK_GROTTO, logic->HookshotOrBoomerang()), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_HF_TEKTITE_GROTTO] = Region("HF Tektite Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, (logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS))), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_LAKE_HYLIA] = Region("Lake Hylia", SCENE_LAKE_HYLIA, true, {RA_LAKE_HYLIA}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)));}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return (logic->IsChild && logic->CanCutShrubs());}), - EventAccess(&logic->ChildScarecrow, []{return (logic->IsChild && (logic->HasItem(RG_FAIRY_OCARINA) && (logic->OcarinaButtons() >= 2)));}), - EventAccess(&logic->AdultScarecrow, []{return (logic->IsAdult && (logic->HasItem(RG_FAIRY_OCARINA) && (logic->OcarinaButtons() >= 2)));}), -}, { - LOCATION(RC_LH_UNDERWATER_ITEM, (logic->IsChild && logic->HasItem(RG_SILVER_SCALE))), - LOCATION(RC_LH_SUN, (logic->IsAdult && (((logic->WaterTempleClear && logic->HasItem(RG_BRONZE_SCALE)) || logic->CanUse(RG_DISTANT_SCARECROW)) && logic->CanUse(RG_FAIRY_BOW)))), - LOCATION(RC_LH_FREESTANDING_POH, (logic->IsAdult && (logic->CanUse(RG_SCARECROW) || CanPlantBean(RR_LAKE_HYLIA)))), - LOCATION(RC_LH_GS_BEAN_PATCH, (logic->CanSpawnSoilSkull() && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA))), - LOCATION(RC_LH_GS_LAB_WALL, (logic->IsChild && ((logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) || ((bool)ctx->GetTrickOption(RT_LH_LAB_WALL_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()))), - LOCATION(RC_LH_GS_SMALL_ISLAND, (logic->IsChild && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) && (logic->CanGetNightTimeGS() && logic->HasItem(RG_BRONZE_SCALE))))), - LOCATION(RC_LH_GS_TREE, (logic->IsAdult && (logic->CanUse(RG_LONGSHOT) && logic->CanGetNightTimeGS()))), - LOCATION(RC_LH_FRONT_RUPEE, (logic->IsChild && logic->HasItem(RG_BRONZE_SCALE))), - LOCATION(RC_LH_MIDDLE_RUPEE, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LH_BACK_RUPEE, (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)))), - LOCATION(RC_LH_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LH_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LH_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_LH_LAB_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_LH_ISLAND_SUN_FAIRY, (logic->CanUse(RG_SUNS_SONG) && ((logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->WaterTempleClear)) || logic->CanUse(RG_DISTANT_SCARECROW)))), - LOCATION(RC_LH_LAB_GOSSIP_STONE, true), - LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE, true), - LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE, true), - LOCATION(RC_LH_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_9, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_10, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_11, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_12, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_13, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_14, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_15, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_16, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_17, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_18, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_19, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_20, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_21, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_22, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_23, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_24, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_25, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_26, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_27, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_28, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_29, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_30, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_31, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_32, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_33, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_34, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_35, logic->CanCutShrubs()), - LOCATION(RC_LH_GRASS_36, logic->CanCutShrubs()), - LOCATION(RC_LH_CHILD_GRASS_1, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_LH_CHILD_GRASS_2, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_LH_CHILD_GRASS_3, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_LH_CHILD_GRASS_4, (logic->IsChild && logic->CanCutShrubs())), - LOCATION(RC_LH_WARP_PAD_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_LH_WARP_PAD_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), - Entrance(RR_LH_FROM_SHORTCUT, []{return true;}), - Entrance(RR_LH_OWL_FLIGHT, []{return logic->IsChild;}, false), - Entrance(RR_LH_FISHING_ISLAND, []{return (((logic->IsChild || logic->WaterTempleClear) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->IsAdult && (logic->CanUse(RG_SCARECROW) || CanPlantBean(RR_LAKE_HYLIA))));}), - Entrance(RR_LH_LAB, []{return logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY);}), - Entrance(RR_LH_FROM_WATER_TEMPLE, []{return true;}), - Entrance(RR_LH_GROTTO, []{return true;}), -}); -areaTable[RR_LH_FROM_SHORTCUT] = Region("LH From Shortcut", SCENE_LAKE_HYLIA, false, {RA_LAKE_HYLIA}, {}, {}, { - Entrance(RR_LAKE_HYLIA, []{return ((logic->Hearts() > 1) || (logic->HasItem(RG_BOTTLE_WITH_FAIRY) || (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))));}), - Entrance(RR_ZORAS_DOMAIN, []{return (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)));}), -}); -areaTable[RR_LH_FROM_WATER_TEMPLE] = Region("LH From Water Temple", SCENE_LAKE_HYLIA, false, {RA_LAKE_HYLIA}, {}, {}, { - Entrance(RR_LAKE_HYLIA, []{return (logic->HasItem(RG_BRONZE_SCALE) || (logic->HasItem(RG_BOTTLE_WITH_FAIRY) || logic->CanUse(RG_IRON_BOOTS)));}), - Entrance(RR_WATER_TEMPLE_ENTRYWAY, []{return (logic->CanUse(RG_HOOKSHOT) && ((logic->CanUse(RG_IRON_BOOTS) || ((bool)ctx->GetTrickOption(RT_LH_WATER_HOOKSHOT) && logic->HasItem(RG_GOLDEN_SCALE))) || (logic->IsAdult && (logic->CanUse(RG_LONGSHOT) && logic->HasItem(RG_GOLDEN_SCALE)))));}), -}); -areaTable[RR_LH_FISHING_ISLAND] = Region("LH Fishing Island", SCENE_LAKE_HYLIA, true, {RA_LAKE_HYLIA}, {}, {}, { - Entrance(RR_LAKE_HYLIA, []{return logic->HasItem(RG_BRONZE_SCALE);}), - Entrance(RR_LH_FISHING_POND, []{return logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY);}), -}); -areaTable[RR_LH_OWL_FLIGHT] = Region("LH Owl Flight", SCENE_LAKE_HYLIA, true, {RA_LAKE_HYLIA}, {}, {}, { - Entrance(RR_HYRULE_FIELD, []{return true;}, false), -}); -areaTable[RR_LH_LAB] = Region("LH Lab", SCENE_LAKESIDE_LABORATORY, false, {}, {}, { - LOCATION(RC_LH_LAB_DIVE, (logic->HasItem(RG_GOLDEN_SCALE) || ((bool)ctx->GetTrickOption(RT_LH_LAB_DIVING) && (logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_BRONZE_SCALE)))))), - LOCATION(RC_LH_TRADE_FROG, (logic->IsAdult && logic->CanUse(RG_EYEBALL_FROG))), - LOCATION(RC_LH_GS_LAB_CRATE, (logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_HOOKSHOT) && logic->CanBreakCrates()))), - LOCATION(RC_LH_LAB_FRONT_RUPEE, (logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE))), - LOCATION(RC_LH_LAB_LEFT_RUPEE, (logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE))), - LOCATION(RC_LH_LAB_RIGHT_RUPEE, (logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE))), - LOCATION(RC_LH_LAB_CRATE, (logic->CanUse(RG_IRON_BOOTS) && logic->CanBreakCrates())), -}, { - Entrance(RR_LAKE_HYLIA, []{return true;}), -}); -areaTable[RR_LH_FISHING_POND] = Region("LH Fishing Hole", SCENE_FISHING_POND, false, {}, {}, { - LOCATION(RC_LH_CHILD_FISHING, (logic->CanUse(RG_FISHING_POLE) && logic->IsChild)), - LOCATION(RC_LH_CHILD_FISH_1, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_2, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_3, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_4, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_5, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_6, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_7, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_8, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_9, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_10, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_11, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_12, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_13, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_14, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_FISH_15, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_LOACH_1, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_CHILD_LOACH_2, (logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISHING, (logic->CanUse(RG_FISHING_POLE) && logic->IsAdult)), - LOCATION(RC_LH_ADULT_FISH_1, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_2, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_3, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_4, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_5, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_6, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_7, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_8, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_9, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_10, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_11, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_12, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_13, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_14, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_FISH_15, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_ADULT_LOACH, (logic->CanUse(RG_FISHING_POLE) && (logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)))), - LOCATION(RC_LH_HYRULE_LOACH, logic->CanUse(RG_FISHING_POLE)), - LOCATION(RC_FISHING_POLE_HINT, true), -}, { - Entrance(RR_LH_FISHING_ISLAND, []{return true;}), -}); -areaTable[RR_LH_GROTTO] = Region("LH Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_LH_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()), - LOCATION(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()), - LOCATION(RC_LH_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()), - LOCATION(RC_LH_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_LAKE_HYLIA, []{return true;}), -}); -areaTable[RR_GERUDO_VALLEY] = Region("Gerudo Valley", SCENE_GERUDO_VALLEY, true, {RA_GERUDO_VALLEY}, { - EventAccess(&logic->BugRock, []{return logic->IsChild;}), -}, { - LOCATION(RC_GV_GS_SMALL_BRIDGE, (logic->IsChild && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), - Entrance(RR_GV_UPPER_STREAM, []{return (logic->IsChild || (logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage()));}), - Entrance(RR_GV_CRATE_LEDGE, []{return (logic->IsChild || logic->CanUse(RG_LONGSHOT));}), - Entrance(RR_GV_GROTTO_LEDGE, []{return true;}), - Entrance(RR_GV_FORTRESS_SIDE, []{return ((logic->IsAdult && (logic->CanUse(RG_EPONA) || (logic->CanUse(RG_LONGSHOT) || (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters)))) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), -}); -areaTable[RR_GV_UPPER_STREAM] = Region("GV Upper Stream", SCENE_GERUDO_VALLEY, true, {RA_GERUDO_VALLEY}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)));}), -}, { - LOCATION(RC_GV_WATERFALL_FREESTANDING_POH, (logic->IsChild || logic->HasItem(RG_BRONZE_SCALE))), - LOCATION(RC_GV_GS_BEAN_PATCH, (logic->CanSpawnSoilSkull() && logic->CanAttack())), - LOCATION(RC_GV_COW, (logic->IsChild && logic->CanUse(RG_EPONAS_SONG))), - LOCATION(RC_GV_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_GV_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_GV_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_GV_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_GV_GOSSIP_STONE, true), - LOCATION(RC_GV_NEAR_COW_CRATE, (logic->IsChild && logic->CanBreakCrates())), -}, { - Entrance(RR_GV_LOWER_STREAM, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}), -}); -areaTable[RR_GV_LOWER_STREAM] = Region("GV Lower Stream", SCENE_GERUDO_VALLEY, true, {RA_GERUDO_VALLEY}, {}, {}, { - Entrance(RR_LAKE_HYLIA, []{return true;}), -}); -areaTable[RR_GV_GROTTO_LEDGE] = Region("GV Grotto Ledge", SCENE_GERUDO_VALLEY, true, {RA_GERUDO_VALLEY}, {}, {}, { - Entrance(RR_GV_UPPER_STREAM, []{return ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives());}), - Entrance(RR_GV_LOWER_STREAM, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}), - Entrance(RR_GV_OCTOROK_GROTTO, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}), - Entrance(RR_GV_CRATE_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}), -}); -areaTable[RR_GV_CRATE_LEDGE] = Region("GV Crate Ledge", SCENE_GERUDO_VALLEY, true, {RA_GERUDO_VALLEY}, {}, { - LOCATION(RC_GV_CRATE_FREESTANDING_POH, logic->CanBreakCrates()), - LOCATION(RC_GV_FREESTANDING_POH_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_GV_UPPER_STREAM, []{return ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives());}), - Entrance(RR_GV_LOWER_STREAM, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}), -}); -areaTable[RR_GV_OCTOROK_GROTTO] = Region("GV Octorok Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GV_OCTOROK_GROTTO_RED_RUPEE, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), -}, { - Entrance(RR_GV_GROTTO_LEDGE, []{return true;}), -}); -areaTable[RR_GV_FORTRESS_SIDE] = Region("GV Fortress Side", SCENE_GERUDO_VALLEY, true, {RA_GERUDO_VALLEY}, {}, { - LOCATION(RC_GV_CHEST, (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))), - LOCATION(RC_GV_TRADE_SAW, (logic->IsAdult && logic->CanUse(RG_POACHERS_SAW))), - LOCATION(RC_GV_GS_BEHIND_TENT, (logic->IsAdult && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_GV_GS_PILLAR, (logic->IsAdult && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_GV_CRATE_BRIDGE_1, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_GV_CRATE_BRIDGE_2, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_GV_CRATE_BRIDGE_3, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_GV_CRATE_BRIDGE_4, (logic->IsChild && logic->CanBreakCrates())), -}, { - Entrance(RR_GF_OUTSKIRTS, []{return true;}), - Entrance(RR_GV_UPPER_STREAM, []{return true;}), - Entrance(RR_GERUDO_VALLEY, []{return (logic->IsChild || (logic->CanUse(RG_EPONA) || (logic->CanUse(RG_LONGSHOT) || (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters))));}), - Entrance(RR_GV_CARPENTER_TENT, []{return logic->IsAdult;}), - Entrance(RR_GV_STORMS_GROTTO, []{return (logic->IsAdult && logic->CanOpenStormsGrotto());}), - Entrance(RR_GV_CRATE_LEDGE, []{return ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives());}), -}); -areaTable[RR_GV_CARPENTER_TENT] = Region("GV Carpenter Tent", SCENE_CARPENTERS_TENT, false, {}, {}, {}, { - Entrance(RR_GV_FORTRESS_SIDE, []{return true;}), -}); -areaTable[RR_GV_STORMS_GROTTO] = Region("GV Storms Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_GV_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()), - LOCATION(RC_GV_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()), - LOCATION(RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_GV_FORTRESS_SIDE, []{return true;}), -}); -areaTable[RR_GF_OUTSKIRTS] = Region("Gerudo Fortress Outskirts", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, { - EventAccess(&logic->GF_GateOpen, []{return (logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD));}), -}, { - LOCATION(RC_GF_OUTSKIRTS_NE_CRATE, ((logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)) && logic->CanBreakCrates())), - LOCATION(RC_GF_OUTSKIRTS_NW_CRATE, (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD))), -}, { - Entrance(RR_GV_FORTRESS_SIDE, []{return true;}), - Entrance(RR_TH_1_TORCH_CELL, []{return true;}), - Entrance(RR_GF_OUTSIDE_GATE, []{return logic->GF_GateOpen;}), - Entrance(RR_GF_NEAR_GROTTO, []{return (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD));}), - Entrance(RR_GF_OUTSIDE_GTG, []{return (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD));}), - Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), -}); -areaTable[RR_GF_NEAR_GROTTO] = Region("GF Near Grotto", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_GF_SOUTHMOST_CENTER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_MID_SOUTH_CENTER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_MID_NORTH_CENTER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_NORTHMOST_CENTER_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_TH_1_TORCH_CELL, []{return true;}), - Entrance(RR_TH_STEEP_SLOPE_CELL, []{return true;}), - Entrance(RR_TH_KITCHEN_CORRIDOR, []{return true;}), - Entrance(RR_GF_OUTSKIRTS, []{return true;}), - Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_GF_OUTSIDE_GTG, []{return (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD));}), - Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_GF_STORMS_GROTTO, []{return (logic->IsAdult && logic->CanOpenStormsGrotto());}), -}); -areaTable[RR_GF_OUTSIDE_GTG] = Region("GF Outside GTG", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, { - EventAccess(&logic->GtG_GateOpen, []{return (logic->IsAdult && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->HasItem(RG_CHILD_WALLET)));}), -}, {}, { - Entrance(RR_GF_TO_GTG, []{return (logic->GtG_GateOpen && (logic->IsAdult || ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES)));}), - Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_GF_OUTSKIRTS, []{return true;}), - Entrance(RR_GF_NEAR_GROTTO, []{return (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD));}), - Entrance(RR_GF_ABOVE_GTG, []{return (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD));}), - Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_LONGSHOT));}), - Entrance(RR_GF_HBA_RANGE, []{return (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD));}), -}); -areaTable[RR_GF_TO_GTG] = Region("GF to GTG", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}), -}); -areaTable[RR_GF_EXITING_GTG] = Region("GF Exiting GTG", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_GF_OUTSIDE_GTG, []{return (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD));}), - Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_GF_OUTSKIRTS, []{return true;}), -}); -areaTable[RR_GF_ABOVE_GTG] = Region("GF Above GTG", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_TH_DOUBLE_CELL, []{return true;}), - Entrance(RR_TH_KITCHEN_CORRIDOR, []{return true;}), - Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_GF_OUTSKIRTS, []{return true;}), - Entrance(RR_GF_NEAR_GROTTO, []{return true;}), - Entrance(RR_GF_OUTSIDE_GTG, []{return (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD));}), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return ((bool)ctx->GetTrickOption(RT_GF_JUMP) != 0);}), -}); -areaTable[RR_GF_BOTTOM_OF_LOWER_VINES] = Region("GF Bottom of Lower Vines", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_TH_STEEP_SLOPE_CELL, []{return true;}), - Entrance(RR_GF_NEAR_GROTTO, []{return true;}), - Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_ABOVE_GTG, []{return true;}), -}); -areaTable[RR_GF_TOP_OF_LOWER_VINES] = Region("GF Top of Lower Vines", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_TH_KITCHEN_TOP, []{return true;}), - Entrance(RR_TH_DOUBLE_CELL, []{return true;}), - Entrance(RR_GF_ABOVE_GTG, []{return true;}), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return (logic->IsAdult && (bool)ctx->GetTrickOption(RT_GF_JUMP));}), -}); -areaTable[RR_GF_NEAR_GS] = Region("GF Near GS", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_GF_GS_TOP_FLOOR, (logic->IsAdult && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOMB_THROW) && logic->CanGetNightTimeGS()))), -}, { - Entrance(RR_TH_KITCHEN_TOP, []{return true;}), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult;}), - Entrance(RR_GF_LONG_ROOF, []{return (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_GF_JUMP)));}), - Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_GF_BELOW_GS, []{return true;}), -}); -areaTable[RR_GF_SLOPED_ROOF] = Region("GF Sloped Roof", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_NEAR_GS, []{return true;}), - Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return true;}), - Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return (logic->IsAdult && (bool)ctx->GetTrickOption(RT_GF_JUMP));}), -}); -areaTable[RR_GF_BOTTOM_OF_UPPER_VINES] = Region("GF Bottom of Upper Vines", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_GF_OUTSIDE_GTG, []{return true;}), - Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_SLOPED_ROOF, []{return (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return true;}), - Entrance(RR_GF_TO_GTG, []{return (logic->IsAdult && (bool)ctx->GetTrickOption(RT_GF_LEDGE_CLIP_INTO_GTG));}), -}); -areaTable[RR_GF_TOP_OF_UPPER_VINES] = Region("GF Top of Upper Vines", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_GF_GS_TOP_FLOOR, (logic->IsAdult && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH) && logic->CanGetNightTimeGS()))), -}, { - Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_SLOPED_ROOF, []{return true;}), - Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return true;}), - Entrance(RR_GF_NEAR_CHEST, []{return (logic->CanUse(RG_HOVER_BOOTS) || ((logic->IsAdult && (logic->CanUse(RG_SCARECROW) && logic->CanUse(RG_HOOKSHOT))) || logic->CanUse(RG_LONGSHOT)));}), -}); -areaTable[RR_GF_NEAR_CHEST] = Region("GF Near Chest", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_GF_CHEST, true), - LOCATION(RC_GF_GS_TOP_FLOOR, (logic->IsAdult && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && logic->CanGetNightTimeGS()))), -}, { - Entrance(RR_GF_NEAR_GS, []{return true;}), - Entrance(RR_GF_LONG_ROOF, []{return true;}), -}); -areaTable[RR_GF_LONG_ROOF] = Region("GF Long Roof", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), - Entrance(RR_GF_NEAR_GS, []{return ((logic->IsAdult && (bool)ctx->GetTrickOption(RT_GF_JUMP)) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_GF_BELOW_GS, []{return true;}), - Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_GF_BELOW_CHEST, []{return true;}), -}); -areaTable[RR_GF_BELOW_GS] = Region("GF Below GS", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_GF_GS_TOP_FLOOR, (logic->IsAdult && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONGSHOT) && logic->CanGetNightTimeGS()))), -}, { - Entrance(RR_TH_DEAD_END_CELL, []{return true;}), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), -}); -areaTable[RR_GF_BELOW_CHEST] = Region("GF Below Chest", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_TH_BREAK_ROOM, []{return true;}), - Entrance(RR_GF_OUTSKIRTS, []{return true;}), -}); -areaTable[RR_GF_HBA_RANGE] = Region("GF HBA Range", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_GF_HBA_1000_POINTS, (logic->IsAdult && (logic->HasItem(RG_CHILD_WALLET) && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && (logic->CanUse(RG_EPONA) && (logic->CanUse(RG_FAIRY_BOW) && logic->AtDay)))))), - LOCATION(RC_GF_HBA_1500_POINTS, (logic->IsAdult && (logic->HasItem(RG_CHILD_WALLET) && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && (logic->CanUse(RG_EPONA) && (logic->CanUse(RG_FAIRY_BOW) && logic->AtDay)))))), - LOCATION(RC_GF_HBA_RANGE_GS, (logic->IsAdult && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && logic->CanGetNightTimeGS()))), - LOCATION(RC_GF_HBA_RANGE_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_7, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_CANOPY_EAST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_CANOPY_WEST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_NORTH_TARGET_EAST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_NORTH_TARGET_WEST_CRATE, (logic->IsAdult || (logic->BlastOrSmash() || (logic->HookshotOrBoomerang() || logic->CanUse(RG_HOVER_BOOTS))))), - LOCATION(RC_GF_NORTH_TARGET_CHILD_CRATE, (logic->IsChild && logic->BlastOrSmash())), - LOCATION(RC_GF_SOUTH_TARGET_EAST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_SOUTH_TARGET_WEST_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_GF_OUTSIDE_GTG, []{return (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD));}), -}); -areaTable[RR_GF_ABOVE_JAIL] = Region("GF Above Jail", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_GF_ABOVE_JAIL_CRATE, true), -}, { - Entrance(RR_GF_OUTSKIRTS, []{return ((bool)ctx->GetTrickOption(RT_GF_JUMP) != 0);}), - Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_GF_BELOW_CHEST, []{return logic->TakeDamage();}), - Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), -}); -areaTable[RR_GF_JAIL_WINDOW] = Region("GF Jail Window", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_GF_OUTSKIRTS, []{return true;}), - Entrance(RR_GF_BELOW_CHEST, []{return true;}), -}); -areaTable[RR_GF_OUTSIDE_GATE] = Region("GF Outside Gate", SCENE_GERUDOS_FORTRESS, false, {RA_GERUDO_FORTRESS}, { - EventAccess(&logic->GF_GateOpen, []{return (logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD));}), -}, {}, { - Entrance(RR_GF_OUTSKIRTS, []{return logic->GF_GateOpen;}), - Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return true;}), -}); -areaTable[RR_GF_STORMS_GROTTO] = Region("GF Storms Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->FreeFairies, []{return true;}), -}, { - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_1, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_2, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_3, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_4, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_5, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_6, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_7, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_8, true), -}, { - Entrance(RR_GF_NEAR_GROTTO, []{return true;}), -}); -areaTable[RR_TH_1_TORCH_CELL] = Region("Thieves Hideout 1 Torch Cell", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, { - EventAccess(&logic->THCouldFree1TorchCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), - EventAccess(&logic->THRescuedAllCarpenters, []{return (logic->SmallKeys(RR_GF_OUTSKIRTS, (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1)) && (logic->THCouldFree1TorchCarpenter && (logic->THCouldFreeDoubleCellCarpenter && (logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter))));}), -}, { - LOCATION(RC_TH_1_TORCH_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_1_TORCH_CELL_RIGHT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_1_TORCH_CELL_MID_POT, logic->CanBreakPots()), - LOCATION(RC_TH_1_TORCH_CELL_LEFT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_1_TORCH_CELL_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), -}, { - Entrance(RR_GF_OUTSKIRTS, []{return true;}), - Entrance(RR_GF_NEAR_GROTTO, []{return true;}), -}); -areaTable[RR_TH_DOUBLE_CELL] = Region("Thieves Hideout Double Cell", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, { - EventAccess(&logic->THCouldFreeDoubleCellCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), - EventAccess(&logic->THRescuedAllCarpenters, []{return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && (logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && (logic->THCouldFree1TorchCarpenter && (logic->THCouldFreeDoubleCellCarpenter && (logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter)))));}), -}, { - LOCATION(RC_TH_DOUBLE_CELL_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_NEAR_DOUBLE_CELL_MID_POT, logic->CanBreakPots()), - LOCATION(RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_RIGHTMOST_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_RIGHT_MIDDLE_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_LEFT_MIDDLE_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_LEFTMOST_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_DOUBLE_CELL_LEFT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_DOUBLE_CELL_RIGHT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), -}, { - Entrance(RR_GF_OUTSKIRTS, []{return true;}), - Entrance(RR_GF_NEAR_GROTTO, []{return true;}), -}); -areaTable[RR_TH_DEAD_END_CELL] = Region("Thieves Hideout Dead End Cell", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, { - EventAccess(&logic->TH_CouldFreeDeadEndCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), - EventAccess(&logic->THRescuedAllCarpenters, []{return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && (logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && (logic->THCouldFree1TorchCarpenter && (logic->THCouldFreeDoubleCellCarpenter && (logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter)))));}), -}, { - LOCATION(RC_TH_DEAD_END_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_DEAD_END_CELL_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), -}, { - Entrance(RR_GF_BELOW_GS, []{return true;}), -}); -areaTable[RR_TH_STEEP_SLOPE_CELL] = Region("Thieves Hideout Steep Slope Cell", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, { - EventAccess(&logic->THCouldRescueSlopeCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), - EventAccess(&logic->THRescuedAllCarpenters, []{return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && (logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && (logic->THCouldFree1TorchCarpenter && (logic->THCouldFreeDoubleCellCarpenter && (logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter)))));}), -}, { - LOCATION(RC_TH_STEEP_SLOPE_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_STEEP_SLOPE_RIGHT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_STEEP_SLOPE_LEFT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), -}, { - Entrance(RR_GF_ABOVE_GTG, []{return true;}), - Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), -}); -areaTable[RR_TH_KITCHEN_CORRIDOR] = Region("Thieves Hideout Kitchen Corridor", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_GF_NEAR_GROTTO, []{return true;}), - Entrance(RR_GF_ABOVE_GTG, []{return true;}), - Entrance(RR_TH_KITCHEN_MAIN, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), -}); -areaTable[RR_TH_KITCHEN_MAIN] = Region("Thieves Hideout Kitchen Bottom", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_TH_KITCHEN_POT_1, (logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD))), - LOCATION(RC_TH_KITCHEN_POT_2, (logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD))), - LOCATION(RC_TH_KITCHEN_CRATE, (logic->CanBreakCrates() && logic->CanPassEnemy(RE_GERUDO_GUARD))), - LOCATION(RC_TH_KITCHEN_SUN_FAIRY, (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_SUNS_SONG))), -}, { - Entrance(RR_TH_KITCHEN_CORRIDOR, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), - Entrance(RR_TH_KITCHEN_TOP, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), -}); -areaTable[RR_TH_KITCHEN_TOP] = Region("Thieves Hideout Kitchen Top", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_TH_KITCHEN_POT_1, logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_TH_KITCHEN_POT_2, logic->CanUse(RG_BOOMERANG)), -}, { - Entrance(RR_TH_KITCHEN_MAIN, []{return true;}), - Entrance(RR_GF_NEAR_GS, []{return (logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return (logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS));}), -}); -areaTable[RR_TH_BREAK_ROOM] = Region("Thieves Hideout Break Room", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, {}, { - LOCATION(RC_TH_BREAK_ROOM_FRONT_POT, ((logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) || (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_TH_BREAK_ROOM_BACK_POT, ((logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) || (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_TH_BREAK_HALLWAY_OUTER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_BREAK_HALLWAY_INNER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_BREAK_ROOM_RIGHT_CRATE, ((logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) || (logic->CanPassEnemy(RE_GERUDO_GUARD) && (logic->HasExplosives() && logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_TH_BREAK_ROOM_LEFT_CRATE, ((logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) || (logic->CanPassEnemy(RE_GERUDO_GUARD) && (logic->HasExplosives() && logic->CanUse(RG_BOOMERANG))))), -}, { - Entrance(RR_GF_BELOW_CHEST, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), - Entrance(RR_TH_BREAK_ROOM_CORRIDOR, []{return logic->CanUse(RG_HOOKSHOT);}), -}); -areaTable[RR_TH_BREAK_ROOM_CORRIDOR] = Region("Thieves Hideout Break Room", SCENE_THIEVES_HIDEOUT, false, {RA_GERUDO_FORTRESS}, {}, {}, { - Entrance(RR_TH_BREAK_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_GF_ABOVE_JAIL, []{return true;}), -}); -areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", SCENE_HAUNTED_WASTELAND, false, {RA_HAUNTED_WASTELAND}, {}, { - LOCATION(RC_HW_BEFORE_QUICKSAND_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_GF_OUTSIDE_GATE, []{return true;}), - Entrance(RR_HAUNTED_WASTELAND, []{return (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_LONGSHOT) || (bool)ctx->GetTrickOption(RT_HW_CROSSING)));}), -}); -areaTable[RR_HAUNTED_WASTELAND] = Region("Haunted Wasteland", SCENE_HAUNTED_WASTELAND, false, {RA_HAUNTED_WASTELAND}, { - EventAccess(&logic->FairyPot, []{return true;}), - EventAccess(&logic->NutPot, []{return true;}), - EventAccess(&logic->CarpetMerchant, []{return (logic->HasItem(RG_ADULT_WALLET) && (CanBuyAnother(RC_WASTELAND_BOMBCHU_SALESMAN) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))));}), -}, { - LOCATION(RC_WASTELAND_CHEST, logic->HasFireSource()), - LOCATION(RC_WASTELAND_BOMBCHU_SALESMAN, (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))), - LOCATION(RC_WASTELAND_GS, logic->HookshotOrBoomerang()), - LOCATION(RC_WASTELAND_NEAR_GS_POT_1, logic->CanBreakPots()), - LOCATION(RC_WASTELAND_NEAR_GS_POT_2, logic->CanBreakPots()), - LOCATION(RC_WASTELAND_NEAR_GS_POT_3, logic->CanBreakPots()), - LOCATION(RC_WASTELAND_NEAR_GS_POT_4, logic->CanBreakPots()), - LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_3, logic->CanBreakCrates()), -}, { - Entrance(RR_WASTELAND_NEAR_COLOSSUS, []{return ((bool)ctx->GetTrickOption(RT_LENS_HW) || logic->CanUse(RG_LENS_OF_TRUTH));}), - Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_LONGSHOT) || (bool)ctx->GetTrickOption(RT_HW_CROSSING)));}), -}); -areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Region("Wasteland Near Colossus", SCENE_HAUNTED_WASTELAND, false, {RA_HAUNTED_WASTELAND}, {}, { - LOCATION(RC_HW_NEAR_COLOSSUS_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_DESERT_COLOSSUS, []{return true;}), - Entrance(RR_HAUNTED_WASTELAND, []{return ((bool)ctx->GetTrickOption(RT_HW_REVERSE) || false);}), -}); -areaTable[RR_DESERT_COLOSSUS] = Region("Desert Colossus", SCENE_DESERT_COLOSSUS, true, {RA_DESERT_COLOSSUS}, { - EventAccess(&logic->FairyPond, []{return logic->CanUse(RG_SONG_OF_STORMS);}), - EventAccess(&logic->BugRock, []{return true;}), -}, { - LOCATION(RC_COLOSSUS_FREESTANDING_POH, (logic->IsAdult && CanPlantBean(RR_DESERT_COLOSSUS))), - LOCATION(RC_COLOSSUS_GS_BEAN_PATCH, (logic->CanSpawnSoilSkull() && logic->CanAttack())), - LOCATION(RC_COLOSSUS_GS_TREE, (logic->IsAdult && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_COLOSSUS_GS_HILL, (logic->IsAdult && (((CanPlantBean(RR_DESERT_COLOSSUS) && logic->CanAttack()) || (logic->CanUse(RG_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_COLOSSUS_GS) && logic->CanUse(RG_HOOKSHOT)))) && logic->CanGetNightTimeGS()))), - LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_COLOSSUS_GOSSIP_STONE, true), -}, { - Entrance(RR_DESERT_COLOSSUS_OASIS, []{return (logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)));}), - Entrance(RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN, []{return logic->HasExplosives();}), - Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_WASTELAND_NEAR_COLOSSUS, []{return true;}), - Entrance(RR_COLOSSUS_GROTTO, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}), -}); -areaTable[RR_DESERT_COLOSSUS_OASIS] = Region("Desert Colossus Oasis", SCENE_DESERT_COLOSSUS, true, {RA_DESERT_COLOSSUS}, { - EventAccess(&logic->FairyPond, []{return true;}), -}, { - LOCATION(RC_COLOSSUS_OASIS_FAIRY_1, true), - LOCATION(RC_COLOSSUS_OASIS_FAIRY_2, true), - LOCATION(RC_COLOSSUS_OASIS_FAIRY_3, true), - LOCATION(RC_COLOSSUS_OASIS_FAIRY_4, true), - LOCATION(RC_COLOSSUS_OASIS_FAIRY_5, true), - LOCATION(RC_COLOSSUS_OASIS_FAIRY_6, true), - LOCATION(RC_COLOSSUS_OASIS_FAIRY_7, true), - LOCATION(RC_COLOSSUS_OASIS_FAIRY_8, true), -}, { - Entrance(RR_DESERT_COLOSSUS, []{return true;}), -}); -areaTable[RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE] = Region("Desert Colossus From Spirit Entryway", SCENE_DESERT_COLOSSUS, true, {RA_DESERT_COLOSSUS}, {}, { - LOCATION(RC_SHEIK_AT_COLOSSUS, true), -}, { - Entrance(RR_DESERT_COLOSSUS, []{return true;}), -}); -areaTable[RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = Region("Colossus Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, false, {}, {}, { - LOCATION(RC_COLOSSUS_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)), -}, { - Entrance(RR_DESERT_COLOSSUS, []{return true;}), -}); -areaTable[RR_COLOSSUS_GROTTO] = Region("Colossus Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()), - LOCATION(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()), - LOCATION(RC_COLOSSUS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_DESERT_COLOSSUS, []{return true;}), -}); -areaTable[RR_MARKET_ENTRANCE] = Region("Market Entrance", SCENE_MARKET_ENTRANCE_DAY, false, {RA_THE_MARKET}, {}, {}, { - Entrance(RR_HYRULE_FIELD, []{return (logic->IsAdult || logic->AtDay);}), - Entrance(RR_THE_MARKET, []{return true;}), - Entrance(RR_MARKET_GUARD_HOUSE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), -}); -areaTable[RR_THE_MARKET] = Region("Market", SCENE_MARKET_DAY, false, {RA_THE_MARKET}, {}, { - LOCATION(RC_MARKET_GRASS_1, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MARKET_GRASS_2, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MARKET_GRASS_3, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MARKET_GRASS_4, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MARKET_GRASS_5, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MARKET_GRASS_6, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MARKET_GRASS_7, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MARKET_GRASS_8, (logic->IsChild && (logic->CanUseSword() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_MK_NEAR_BAZAAR_CRATE_1, logic->IsChild), - LOCATION(RC_MK_NEAR_BAZAAR_CRATE_2, logic->IsChild), - LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_1, logic->IsChild), - LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_2, logic->IsChild), -}, { - Entrance(RR_MARKET_ENTRANCE, []{return true;}), - Entrance(RR_TOT_ENTRANCE, []{return true;}), - Entrance(RR_CASTLE_GROUNDS, []{return true;}), - Entrance(RR_MARKET_BAZAAR, []{return (logic->IsChild && (logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_BAZAAR_KEY)));}), - Entrance(RR_MARKET_MASK_SHOP, []{return (logic->IsChild && (logic->AtDay && logic->CanOpenOverworldDoor(RG_MASK_SHOP_KEY)));}), - Entrance(RR_MARKET_SHOOTING_GALLERY, []{return (logic->IsChild && (logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_GALLERY_KEY)));}), - Entrance(RR_MARKET_BOMBCHU_BOWLING, []{return (logic->IsChild && logic->CanOpenOverworldDoor(RG_BOMBCHU_BOWLING_KEY));}), - Entrance(RR_MARKET_TREASURE_CHEST_GAME, []{return (logic->IsChild && (logic->AtNight && logic->CanOpenOverworldDoor(RG_TREASURE_CHEST_GAME_BUILDING_KEY)));}), - Entrance(RR_MARKET_POTION_SHOP, []{return (logic->IsChild && (logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_POTION_SHOP_KEY)));}), - Entrance(RR_MARKET_BACK_ALLEY, []{return logic->IsChild;}), -}); -areaTable[RR_MARKET_GUARD_HOUSE] = Region("Market Guard House", SCENE_MARKET_GUARD_HOUSE, false, {}, { - EventAccess(&logic->CanEmptyBigPoes, []{return logic->IsAdult;}), -}, { - LOCATION(RC_MARKET_10_BIG_POES, (logic->IsAdult && (logic->BigPoeKill || (logic->BigPoes >= ctx->GetOption(RSK_BIG_POE_COUNT).Get())))), - LOCATION(RC_MARKET_GS_GUARD_HOUSE, logic->IsChild), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_2, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_3, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_4, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_5, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_6, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_7, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_8, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_9, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_10, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_11, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_12, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_13, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_14, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_15, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_16, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_17, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_18, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_19, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_20, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_21, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_22, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_23, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_24, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_25, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_26, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_27, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_28, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_29, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_30, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_31, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_32, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_33, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_34, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_35, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_36, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_37, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_38, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_39, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_40, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_41, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_42, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_43, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_44, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_1, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_2, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_3, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_4, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_5, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_6, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_7, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_8, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_9, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_10, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_11, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_1, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_2, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_3, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_4, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_5, (logic->IsChild && logic->CanBreakCrates())), -}, { - Entrance(RR_MARKET_ENTRANCE, []{return true;}), -}); -areaTable[RR_MARKET_BAZAAR] = Region("Market Bazaar", SCENE_BAZAAR, false, {}, {}, { - LOCATION(RC_MARKET_BAZAAR_ITEM_1, true), - LOCATION(RC_MARKET_BAZAAR_ITEM_2, true), - LOCATION(RC_MARKET_BAZAAR_ITEM_3, true), - LOCATION(RC_MARKET_BAZAAR_ITEM_4, true), - LOCATION(RC_MARKET_BAZAAR_ITEM_5, true), - LOCATION(RC_MARKET_BAZAAR_ITEM_6, true), - LOCATION(RC_MARKET_BAZAAR_ITEM_7, true), - LOCATION(RC_MARKET_BAZAAR_ITEM_8, true), -}, { - Entrance(RR_THE_MARKET, []{return true;}), -}); -areaTable[RR_MARKET_MASK_SHOP] = Region("Market Mask Shop", SCENE_HAPPY_MASK_SHOP, false, {}, { - EventAccess(&logic->CanBorrowMasks, []{return (logic->HasItem(RG_ZELDAS_LETTER) && logic->KakarikoVillageGateOpen);}), - EventAccess(&logic->BorrowSkullMask, []{return (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) && logic->CanBorrowMasks);}), - EventAccess(&logic->BorrowSpookyMask, []{return (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) && logic->CanBorrowMasks);}), - EventAccess(&logic->BorrowBunnyHood, []{return (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) && logic->CanBorrowMasks);}), - EventAccess(&logic->BorrowRightMasks, []{return (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) && logic->CanBorrowMasks);}), -}, { - LOCATION(RC_MASK_SHOP_HINT, true), -}, { - Entrance(RR_THE_MARKET, []{return true;}), -}); -areaTable[RR_MARKET_SHOOTING_GALLERY] = Region("Market Shooting Gallery", SCENE_SHOOTING_GALLERY, false, {}, {}, { - LOCATION(RC_MARKET_SHOOTING_GALLERY_REWARD, (logic->IsChild && logic->HasItem(RG_CHILD_WALLET))), -}, { - Entrance(RR_THE_MARKET, []{return true;}), -}); -areaTable[RR_MARKET_BOMBCHU_BOWLING] = Region("Market Bombchu Bowling", SCENE_BOMBCHU_BOWLING_ALLEY, false, {}, { - EventAccess(&logic->CouldPlayBowling, []{return logic->HasItem(RG_CHILD_WALLET);}), -}, { - LOCATION(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, (logic->CouldPlayBowling && logic->BombchusEnabled())), - LOCATION(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, (logic->CouldPlayBowling && logic->BombchusEnabled())), -}, { - Entrance(RR_THE_MARKET, []{return true;}), -}); -areaTable[RR_MARKET_TREASURE_CHEST_GAME] = Region("Market Treasure Chest Game", SCENE_TREASURE_BOX_SHOP, false, {}, {}, { - LOCATION(RC_GREG_HINT, logic->HasItem(RG_CHILD_WALLET)), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_REWARD, (logic->HasItem(RG_CHILD_WALLET) && ((logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 6)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), - LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, (logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))))), -}, { - Entrance(RR_THE_MARKET, []{return true;}), -}); -areaTable[RR_MARKET_POTION_SHOP] = Region("Market Potion Shop", SCENE_POTION_SHOP_MARKET, false, {}, {}, { - LOCATION(RC_MARKET_POTION_SHOP_ITEM_1, true), - LOCATION(RC_MARKET_POTION_SHOP_ITEM_2, true), - LOCATION(RC_MARKET_POTION_SHOP_ITEM_3, true), - LOCATION(RC_MARKET_POTION_SHOP_ITEM_4, true), - LOCATION(RC_MARKET_POTION_SHOP_ITEM_5, true), - LOCATION(RC_MARKET_POTION_SHOP_ITEM_6, true), - LOCATION(RC_MARKET_POTION_SHOP_ITEM_7, true), - LOCATION(RC_MARKET_POTION_SHOP_ITEM_8, true), -}, { - Entrance(RR_THE_MARKET, []{return true;}), -}); -areaTable[RR_MARKET_BACK_ALLEY] = Region("Market Back Alley", SCENE_BACK_ALLEY_DAY, false, {RA_THE_MARKET}, {}, {}, { - Entrance(RR_THE_MARKET, []{return true;}), - Entrance(RR_MARKET_BOMBCHU_SHOP, []{return (logic->AtNight && logic->CanOpenOverworldDoor(RG_BOMBCHU_SHOP_KEY));}), - Entrance(RR_MARKET_DOG_LADY_HOUSE, []{return logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY);}), - Entrance(RR_MARKET_MAN_IN_GREEN_HOUSE, []{return (logic->AtNight && logic->CanOpenOverworldDoor(RG_ALLEY_HOUSE_KEY));}), -}); -areaTable[RR_MARKET_BOMBCHU_SHOP] = Region("Market Bombchu Shop", SCENE_BOMBCHU_SHOP, false, {}, {}, { - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_1, true), - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_2, true), - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_3, true), - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_4, true), - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_5, true), - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_6, true), - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_7, true), - LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_8, true), -}, { - Entrance(RR_MARKET_BACK_ALLEY, []{return true;}), -}); -areaTable[RR_MARKET_DOG_LADY_HOUSE] = Region("Market Dog Lady House", SCENE_DOG_LADY_HOUSE, false, {}, {}, { - LOCATION(RC_MARKET_LOST_DOG, (logic->IsChild && logic->AtNight)), - LOCATION(RC_MK_LOST_DOG_HOUSE_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_MARKET_BACK_ALLEY, []{return true;}), -}); -areaTable[RR_MARKET_MAN_IN_GREEN_HOUSE] = Region("Market Man in Green House", SCENE_BACK_ALLEY_HOUSE, false, {}, {}, { - LOCATION(RC_MK_BACK_ALLEY_HOUSE_POT_1, logic->CanBreakPots()), - LOCATION(RC_MK_BACK_ALLEY_HOUSE_POT_2, logic->CanBreakPots()), - LOCATION(RC_MK_BACK_ALLEY_HOUSE_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_MARKET_BACK_ALLEY, []{return true;}), -}); -areaTable[RR_TOT_ENTRANCE] = Region("ToT Entrance", SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, false, {RA_THE_MARKET}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), -}, { - LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, (logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult))), - LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, (logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult))), - LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, (logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult))), - LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, (logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult))), - LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE, true), - LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE, true), - LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE, true), - LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE, true), -}, { - Entrance(RR_THE_MARKET, []{return true;}), - Entrance(RR_TEMPLE_OF_TIME, []{return true;}), -}); -areaTable[RR_TEMPLE_OF_TIME] = Region("Temple of Time", SCENE_TEMPLE_OF_TIME, false, {RA_TEMPLE_OF_TIME}, {}, { - LOCATION(RC_TOT_LIGHT_ARROWS_CUTSCENE, (logic->IsAdult && logic->CanTriggerLACS())), - LOCATION(RC_ALTAR_HINT_CHILD, logic->IsChild), - LOCATION(RC_ALTAR_HINT_ADULT, logic->IsAdult), - LOCATION(RC_TOT_SHEIK_HINT, logic->IsAdult), -}, { - Entrance(RR_TOT_ENTRANCE, []{return true;}), - Entrance(RR_TOT_BEYOND_DOOR_OF_TIME, []{return (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_OPEN) || (logic->CanUse(RG_SONG_OF_TIME) && (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_SONGONLY) || ((logic->StoneCount() == 3) && logic->HasItem(RG_OCARINA_OF_TIME)))));}), -}); -areaTable[RR_TOT_BEYOND_DOOR_OF_TIME] = Region("Beyond Door of Time", SCENE_TEMPLE_OF_TIME, false, {RA_TEMPLE_OF_TIME}, {}, { - LOCATION(RC_TOT_MASTER_SWORD, logic->IsAdult), - LOCATION(RC_GIFT_FROM_RAURU, logic->IsAdult), - LOCATION(RC_SHEIK_AT_TEMPLE, (logic->HasItem(RG_FOREST_MEDALLION) && logic->IsAdult)), -}, { - Entrance(RR_TEMPLE_OF_TIME, []{return true;}), -}); -areaTable[RR_CASTLE_GROUNDS] = Region("Castle Grounds", SCENE_OUTSIDE_GANONS_CASTLE, false, {RA_CASTLE_GROUNDS}, {}, {}, { - Entrance(RR_THE_MARKET, []{return true;}), - Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return logic->IsChild;}), - Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->IsAdult;}), -}); -areaTable[RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE] = Region("Castle Grounds From Ganon's Castle", SCENE_OUTSIDE_GANONS_CASTLE, false, {RA_OUTSIDE_GANONS_CASTLE}, {}, {}, { - Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return logic->IsChild;}), - Entrance(RR_GANONS_CASTLE_LEDGE, []{return logic->IsAdult;}), -}); -areaTable[RR_HYRULE_CASTLE_GROUNDS] = Region("Hyrule Castle Grounds", SCENE_HYRULE_CASTLE, true, {RA_HYRULE_CASTLE}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugRock, []{return true;}), -}, { - LOCATION(RC_HC_MALON_EGG, true), - LOCATION(RC_HC_GS_TREE, (logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE))), - LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HC_MALON_GOSSIP_STONE, true), - LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE, true), - LOCATION(RC_HC_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_HC_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_CASTLE_GROUNDS, []{return true;}), - Entrance(RR_HC_GARDEN, []{return (logic->CanUse(RG_WEIRD_EGG) || ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && (logic->HasExplosives() && logic->CanJumpslash())));}), - Entrance(RR_HC_GREAT_FAIRY_FOUNTAIN, []{return logic->BlastOrSmash();}), - Entrance(RR_HC_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}), -}); -areaTable[RR_HC_GARDEN] = Region("HC Garden", SCENE_CASTLE_COURTYARD_ZELDA, false, {}, {}, { - LOCATION(RC_HC_ZELDAS_LETTER, true), - LOCATION(RC_SONG_FROM_IMPA, true), -}, { - Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return true;}), -}); -areaTable[RR_HC_GREAT_FAIRY_FOUNTAIN] = Region("HC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, false, {}, {}, { - LOCATION(RC_HC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)), -}, { - Entrance(RR_CASTLE_GROUNDS, []{return true;}), -}); -areaTable[RR_HC_STORMS_GROTTO] = Region("HC Storms Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_HC_GS_STORMS_GROTTO, (logic->CanUse(RG_BOOMERANG) && (bool)ctx->GetTrickOption(RT_HC_STORMS_GS))), -}, { - Entrance(RR_CASTLE_GROUNDS, []{return true;}), - Entrance(RR_HC_STORMS_GROTTO_BEHIND_WALLS, []{return logic->CanBreakMudWalls();}), -}); -areaTable[RR_HC_STORMS_GROTTO_BEHIND_WALLS] = Region("HC Storms Grotto Behind Walls", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->NutPot, []{return true;}), - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->WanderingBugs, []{return true;}), -}, { - LOCATION(RC_HC_GS_STORMS_GROTTO, logic->HookshotOrBoomerang()), - LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_HC_STORMS_GROTTO_POT_1, logic->CanBreakPots()), - LOCATION(RC_HC_STORMS_GROTTO_POT_2, logic->CanBreakPots()), - LOCATION(RC_HC_STORMS_GROTTO_POT_3, logic->CanBreakPots()), - LOCATION(RC_HC_STORMS_GROTTO_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_HC_STORMS_GROTTO, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_GROUNDS] = Region("Ganon's Castle Grounds", SCENE_OUTSIDE_GANONS_CASTLE, false, {RA_OUTSIDE_GANONS_CASTLE}, { - EventAccess(&logic->BuiltRainbowBridge, []{return logic->CanBuildRainbowBridge();}), -}, { - LOCATION(RC_OGC_GS, (logic->CanJumpslashExceptHammer() || (logic->CanUseProjectile() || ((logic->CanShield() && logic->CanUse(RG_MEGATON_HAMMER)) || logic->CanUse(RG_DINS_FIRE))))), -}, { - Entrance(RR_CASTLE_GROUNDS, []{return logic->AtNight;}), - Entrance(RR_OGC_GREAT_FAIRY_FOUNTAIN, []{return (logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->AtNight);}), - Entrance(RR_GANONS_CASTLE_LEDGE, []{return logic->BuiltRainbowBridge;}), -}); -areaTable[RR_OGC_GREAT_FAIRY_FOUNTAIN] = Region("OGC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, false, {}, {}, { - LOCATION(RC_OGC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)), -}, { - Entrance(RR_CASTLE_GROUNDS, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_LEDGE] = Region("Ganon's Castle Ledge", SCENE_OUTSIDE_GANONS_CASTLE, false, {RA_OUTSIDE_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->BuiltRainbowBridge;}), - Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->IsAdult;}), -}); -areaTable[RR_KAKARIKO_VILLAGE] = Region("Kakariko Village", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, { - EventAccess(&logic->BugRock, []{return true;}), - EventAccess(&logic->KakarikoVillageGateOpen, []{return (logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER));}), - EventAccess(&logic->BorrowSkullMask, []{return (logic->IsChild && (logic->CanBorrowMasks && logic->HasItem(RG_CHILD_WALLET)));}), -}, { - LOCATION(RC_SHEIK_IN_KAKARIKO, (logic->IsAdult && (logic->HasItem(RG_FOREST_MEDALLION) && (logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION))))), - LOCATION(RC_KAK_ANJU_AS_CHILD, (logic->IsChild && logic->AtDay)), - LOCATION(RC_KAK_ANJU_AS_ADULT, (logic->IsAdult && logic->AtDay)), - LOCATION(RC_KAK_TRADE_POCKET_CUCCO, (logic->IsAdult && (logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)))), - LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, (logic->IsChild && logic->CanGetNightTimeGS())), - LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, (logic->IsChild && logic->CanGetNightTimeGS())), - LOCATION(RC_KAK_GS_GUARDS_HOUSE, (logic->IsChild && logic->CanGetNightTimeGS())), - LOCATION(RC_KAK_GS_TREE, (logic->IsChild && logic->CanGetNightTimeGS())), - LOCATION(RC_KAK_GS_WATCHTOWER, (logic->IsChild && ((logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()))), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_3, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_KAK_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_KAK_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_KAK_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_KAK_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_KAK_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_KAK_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_KAK_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, (logic->IsAdult && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_GY_CHILD_CRATE, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_FENCE_CHILD_CRATE, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, (logic->IsChild && logic->CanBreakCrates())), - LOCATION(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, (logic->IsChild && logic->CanBreakCrates())), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), - Entrance(RR_KAK_CARPENTER_BOSS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_BOSS_HOUSE_KEY);}), - Entrance(RR_KAK_HOUSE_OF_SKULLTULA, []{return logic->CanOpenOverworldDoor(RG_SKULLTULA_HOUSE_KEY);}), - Entrance(RR_KAK_IMPAS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_IMPAS_HOUSE_KEY);}), - Entrance(RR_KAK_WINDMILL, []{return logic->CanOpenOverworldDoor(RG_WINDMILL_KEY);}), - Entrance(RR_KAK_BAZAAR, []{return (logic->IsAdult && (logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_BAZAAR_KEY)));}), - Entrance(RR_KAK_SHOOTING_GALLERY, []{return (logic->IsAdult && (logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_GALLERY_KEY)));}), - Entrance(RR_KAK_WELL, []{return (logic->IsAdult || (logic->DrainWell || (logic->CanUse(RG_IRON_BOOTS) || ((bool)ctx->GetTrickOption(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE) && (logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash()))))));}), - Entrance(RR_KAK_POTION_SHOP_FRONT, []{return ((logic->AtDay || logic->IsChild) && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY));}), - Entrance(RR_KAK_REDEAD_GROTTO, []{return logic->CanOpenBombGrotto();}), - Entrance(RR_KAK_IMPAS_LEDGE, []{return ((logic->IsChild && logic->AtDay) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_VISIBLE_COLLISION)));}), - Entrance(RR_KAK_WATCHTOWER, []{return (logic->IsAdult || (logic->AtDay || (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer()))));}), - Entrance(RR_KAK_ROOFTOP, []{return (logic->CanUse(RG_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsAdult));}), - Entrance(RR_KAK_IMPAS_ROOFTOP, []{return (logic->CanUse(RG_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_KAK_ROOFTOP_GS) && logic->CanUse(RG_HOVER_BOOTS)));}), - Entrance(RR_THE_GRAVEYARD, []{return true;}), - Entrance(RR_KAK_BEHIND_GATE, []{return (logic->IsAdult || logic->KakarikoVillageGateOpen);}), - Entrance(RR_KAK_BACKYARD, []{return (logic->IsAdult || logic->AtDay);}), -}); -areaTable[RR_KAK_CARPENTER_BOSS_HOUSE] = Region("Kak Carpenter Boss House", SCENE_KAKARIKO_CENTER_GUEST_HOUSE, false, {}, { - EventAccess(&logic->WakeUpAdultTalon, []{return (logic->IsAdult && logic->CanUse(RG_POCKET_EGG));}), -}, {}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_HOUSE_OF_SKULLTULA] = Region("Kak House of Skulltula", SCENE_HOUSE_OF_SKULLTULA, false, {}, {}, { - LOCATION(RC_KAK_10_GOLD_SKULLTULA_REWARD, (logic->GetGSCount() >= 10)), - LOCATION(RC_KAK_20_GOLD_SKULLTULA_REWARD, (logic->GetGSCount() >= 20)), - LOCATION(RC_KAK_30_GOLD_SKULLTULA_REWARD, (logic->GetGSCount() >= 30)), - LOCATION(RC_KAK_40_GOLD_SKULLTULA_REWARD, (logic->GetGSCount() >= 40)), - LOCATION(RC_KAK_50_GOLD_SKULLTULA_REWARD, (logic->GetGSCount() >= 50)), - LOCATION(RC_KAK_100_GOLD_SKULLTULA_REWARD, (logic->GetGSCount() >= 100)), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_IMPAS_HOUSE] = Region("Kak Impas House", SCENE_IMPAS_HOUSE, false, {}, {}, { - LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_IMPAS_LEDGE] = Region("Kak Impas Ledge", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, {}, {}, { - Entrance(RR_KAK_IMPAS_HOUSE_BACK, []{return true;}), - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_IMPAS_HOUSE_BACK] = Region("Kak Impas House Back", SCENE_IMPAS_HOUSE, false, {}, {}, { - LOCATION(RC_KAK_IMPAS_HOUSE_FREESTANDING_POH, true), - LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)), -}, { - Entrance(RR_KAK_IMPAS_LEDGE, []{return true;}), -}); -areaTable[RR_KAK_WINDMILL] = Region("Kak Windmill", SCENE_WINDMILL_AND_DAMPES_GRAVE, false, {}, { - EventAccess(&logic->DrainWell, []{return (logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS));}), -}, { - LOCATION(RC_KAK_WINDMILL_FREESTANDING_POH, (logic->CanUse(RG_BOOMERANG) || (logic->DampesWindmillAccess || ((logic->IsAdult && (bool)ctx->GetTrickOption(RT_KAK_ADULT_WINDMILL_POH)) || (logic->IsChild && (logic->CanJumpslashExceptHammer() && (bool)ctx->GetTrickOption(RT_KAK_CHILD_WINDMILL_POH))))))), - LOCATION(RC_SONG_FROM_WINDMILL, (logic->IsAdult && logic->HasItem(RG_FAIRY_OCARINA))), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_BAZAAR] = Region("Kak Bazaar", SCENE_BAZAAR, false, {}, {}, { - LOCATION(RC_KAK_BAZAAR_ITEM_1, true), - LOCATION(RC_KAK_BAZAAR_ITEM_2, true), - LOCATION(RC_KAK_BAZAAR_ITEM_3, true), - LOCATION(RC_KAK_BAZAAR_ITEM_4, true), - LOCATION(RC_KAK_BAZAAR_ITEM_5, true), - LOCATION(RC_KAK_BAZAAR_ITEM_6, true), - LOCATION(RC_KAK_BAZAAR_ITEM_7, true), - LOCATION(RC_KAK_BAZAAR_ITEM_8, true), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_SHOOTING_GALLERY] = Region("Kak Shooting Gallery", SCENE_SHOOTING_GALLERY, false, {}, {}, { - LOCATION(RC_KAK_SHOOTING_GALLERY_REWARD, (logic->HasItem(RG_CHILD_WALLET) && (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)))), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_POTION_SHOP_FRONT] = Region("Kak Potion Shop Front", SCENE_POTION_SHOP_KAKARIKO, false, {}, {}, { - LOCATION(RC_KAK_POTION_SHOP_ITEM_1, logic->IsAdult), - LOCATION(RC_KAK_POTION_SHOP_ITEM_2, logic->IsAdult), - LOCATION(RC_KAK_POTION_SHOP_ITEM_3, logic->IsAdult), - LOCATION(RC_KAK_POTION_SHOP_ITEM_4, logic->IsAdult), - LOCATION(RC_KAK_POTION_SHOP_ITEM_5, logic->IsAdult), - LOCATION(RC_KAK_POTION_SHOP_ITEM_6, logic->IsAdult), - LOCATION(RC_KAK_POTION_SHOP_ITEM_7, logic->IsAdult), - LOCATION(RC_KAK_POTION_SHOP_ITEM_8, logic->IsAdult), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), - Entrance(RR_KAK_POTION_SHOP_BACK, []{return logic->IsAdult;}), -}); -areaTable[RR_KAK_POTION_SHOP_BACK] = Region("Kak Potion Shop Back", SCENE_POTION_SHOP_KAKARIKO, false, {}, {}, {}, { - Entrance(RR_KAK_BACKYARD, []{return logic->IsAdult;}), - Entrance(RR_KAK_POTION_SHOP_FRONT, []{return true;}), -}); -areaTable[RR_KAK_WATCHTOWER] = Region("Kak Watchtower", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, {}, { - LOCATION(RC_KAK_GS_WATCHTOWER, (logic->IsChild && (logic->CanUse(RG_DINS_FIRE) && logic->CanGetNightTimeGS()))), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), - Entrance(RR_KAK_ROOFTOP, []{return ((bool)ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsChild);}), -}); -areaTable[RR_KAK_ROOFTOP] = Region("Kak Rooftop", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, {}, { - LOCATION(RC_KAK_MAN_ON_ROOF, true), -}, { - Entrance(RR_KAK_BACKYARD, []{return true;}), - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_IMPAS_ROOFTOP] = Region("Kak Impas Rooftop", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, {}, { - LOCATION(RC_KAK_GS_ABOVE_IMPAS_HOUSE, (logic->IsAdult && (logic->CanGetNightTimeGS() && logic->CanKillEnemy(RE_GOLD_SKULLTULA)))), -}, { - Entrance(RR_KAK_IMPAS_LEDGE, []{return true;}), - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_BEHIND_GATE] = Region("Kak Behind Gate", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, {}, {}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return (logic->IsAdult || ((bool)ctx->GetTrickOption(RT_VISIBLE_COLLISION) || logic->KakarikoVillageGateOpen));}), - Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), -}); -areaTable[RR_KAK_BACKYARD] = Region("Kak Backyard", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, {}, { - LOCATION(RC_KAK_NEAR_MEDICINE_SHOP_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_KAK_NEAR_MEDICINE_SHOP_POT_2, (logic->IsChild && logic->CanBreakPots())), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), - Entrance(RR_KAK_OPEN_GROTTO, []{return true;}), - Entrance(RR_KAK_ODD_POTION_BUILDING, []{return (logic->IsAdult && logic->CanOpenOverworldDoor(RG_GRANNYS_POTION_SHOP_KEY));}), - Entrance(RR_KAK_POTION_SHOP_BACK, []{return (logic->IsAdult && (logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY)));}), -}); -areaTable[RR_KAK_WELL] = Region("Kak Well", SCENE_KAKARIKO_VILLAGE, true, {RA_KAKARIKO_VILLAGE}, {}, {}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return (logic->IsAdult || (logic->HasItem(RG_BRONZE_SCALE) || logic->DrainWell));}), - Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return (logic->IsChild || (logic->DrainWell && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)));}), -}); -areaTable[RR_KAK_ODD_POTION_BUILDING] = Region("Kak Granny's Potion Shop", SCENE_POTION_SHOP_GRANNY, false, {}, {}, { - LOCATION(RC_KAK_TRADE_ODD_MUSHROOM, (logic->IsAdult && logic->CanUse(RG_ODD_MUSHROOM))), - LOCATION(RC_KAK_GRANNYS_SHOP, (logic->IsAdult && (logic->CanUse(RG_ODD_MUSHROOM) || logic->TradeQuestStep(RG_ODD_MUSHROOM)))), -}, { - Entrance(RR_KAK_BACKYARD, []{return true;}), -}); -areaTable[RR_KAK_REDEAD_GROTTO] = Region("Kak Redead Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_KAK_REDEAD_GROTTO_CHEST, logic->CanKillEnemy(RE_REDEAD, ED_CLOSE, true, 2)), -}, { - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), -}); -areaTable[RR_KAK_OPEN_GROTTO] = Region("Kak Open Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_KAK_OPEN_GROTTO_CHEST, true), - LOCATION(RC_KAK_OPEN_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_KAK_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_KAK_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_KAK_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_KAK_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_KAK_BACKYARD, []{return true;}), -}); -areaTable[RR_THE_GRAVEYARD] = Region("The Graveyard", SCENE_GRAVEYARD, false, {RA_THE_GRAVEYARD}, { - EventAccess(&logic->ButterflyFairy, []{return (logic->CanUse(RG_STICKS) && logic->AtDay);}), - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)));}), - EventAccess(&logic->BugRock, []{return true;}), - EventAccess(&logic->BorrowBunnyHood, []{return (logic->IsChild && (logic->AtDay && (logic->BorrowSpookyMask && logic->HasItem(RG_CHILD_WALLET))));}), -}, { - LOCATION(RC_GRAVEYARD_FREESTANDING_POH, ((((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()) || ((bool)ctx->GetTrickOption(RT_GY_POH) && logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, (logic->HasItem(RG_CHILD_WALLET) && (logic->IsChild && logic->AtNight))), - LOCATION(RC_GRAVEYARD_GS_WALL, (logic->IsChild && (logic->HookshotOrBoomerang() && (logic->AtNight && logic->CanGetNightTimeGS())))), - LOCATION(RC_GRAVEYARD_GS_BEAN_PATCH, (logic->CanSpawnSoilSkull() && logic->CanAttack())), - LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_GY_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_9, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_10, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_11, logic->CanCutShrubs()), - LOCATION(RC_GY_GRASS_12, logic->CanCutShrubs()), - LOCATION(RC_GRAVEYARD_CRATE, (((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates())), -}, { - Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return (logic->IsAdult || logic->AtNight);}), - Entrance(RR_GRAVEYARD_COMPOSERS_GRAVE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), - Entrance(RR_GRAVEYARD_HEART_PIECE_GRAVE, []{return (logic->IsAdult || logic->AtNight);}), - Entrance(RR_GRAVEYARD_DAMPES_GRAVE, []{return logic->IsAdult;}), - Entrance(RR_GRAVEYARD_DAMPES_HOUSE, []{return (logic->IsAdult && logic->CanOpenOverworldDoor(RG_DAMPES_HUT_KEY));}), - Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), - Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return false;}), -}); -areaTable[RR_GRAVEYARD_DAMPES_GRAVE] = Region("Graveyard Dampes Grave", SCENE_WINDMILL_AND_DAMPES_GRAVE, false, {}, { - EventAccess(&logic->NutPot, []{return true;}), - EventAccess(&logic->DampesWindmillAccess, []{return (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME));}), -}, { - LOCATION(RC_GRAVEYARD_HOOKSHOT_CHEST, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, (logic->IsAdult || (bool)ctx->GetTrickOption(RT_GY_CHILD_DAMPE_RACE_POH))), - LOCATION(RC_GY_DAMPES_GRAVE_POT_1, logic->CanBreakPots()), - LOCATION(RC_GY_DAMPES_GRAVE_POT_2, logic->CanBreakPots()), - LOCATION(RC_GY_DAMPES_GRAVE_POT_3, logic->CanBreakPots()), - LOCATION(RC_GY_DAMPES_GRAVE_POT_4, logic->CanBreakPots()), - LOCATION(RC_GY_DAMPES_GRAVE_POT_5, logic->CanBreakPots()), - LOCATION(RC_GY_DAMPES_GRAVE_POT_6, logic->CanBreakPots()), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_1, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_2, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_3, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_4, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_5, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_6, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_7, true), - LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, true), -}, { - Entrance(RR_THE_GRAVEYARD, []{return true;}), - Entrance(RR_KAK_WINDMILL, []{return (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME));}, false), -}); -areaTable[RR_GRAVEYARD_DAMPES_HOUSE] = Region("Graveyard Dampes House", SCENE_GRAVEKEEPERS_HUT, false, {}, {}, { - LOCATION(RC_DAMPE_HINT, logic->IsAdult), -}, { - Entrance(RR_THE_GRAVEYARD, []{return true;}), -}); -areaTable[RR_GRAVEYARD_SHIELD_GRAVE] = Region("Graveyard Shield Grave", SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, false, {}, {}, { - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_CHEST, true), -}, { - Entrance(RR_THE_GRAVEYARD, []{return true;}), - Entrance(RR_GRAVEYARD_SHIELD_GRAVE_BACK, []{return Here(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->CanBreakMudWalls();});}), -}); -areaTable[RR_GRAVEYARD_SHIELD_GRAVE_BACK] = Region("Graveyard Shield Grave Back", SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, false, {}, {}, { - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, true), - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, true), - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, true), - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, true), - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, true), - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, true), - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, true), - LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, true), -}, { - Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return true;}), -}); -areaTable[RR_GRAVEYARD_COMPOSERS_GRAVE] = Region("Graveyard Composers Grave", SCENE_ROYAL_FAMILYS_TOMB, false, {}, {}, { - LOCATION(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST, logic->HasFireSource()), - LOCATION(RC_SONG_FROM_ROYAL_FAMILYS_TOMB, (logic->CanUseProjectile() || logic->CanJumpslash())), - LOCATION(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_THE_GRAVEYARD, []{return true;}), -}); -areaTable[RR_GRAVEYARD_HEART_PIECE_GRAVE] = Region("Graveyard Heart Piece Grave", SCENE_REDEAD_GRAVE, false, {}, {}, { - LOCATION(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_THE_GRAVEYARD, []{return true;}), -}); -areaTable[RR_GRAVEYARD_WARP_PAD_REGION] = Region("Graveyard Warp Pad Region", SCENE_GRAVEYARD, false, {RA_THE_GRAVEYARD}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), -}, { - LOCATION(RC_GRAVEYARD_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_GRAVEYARD_GOSSIP_STONE, true), -}, { - Entrance(RR_THE_GRAVEYARD, []{return true;}), - Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return (logic->CanUse(RG_DINS_FIRE) || ((bool)ctx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && (logic->IsAdult && logic->CanUse(RG_FIRE_ARROWS))));}), -}); -areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Region("Death Mountain", SCENE_DEATH_MOUNTAIN_TRAIL, true, {RA_DEATH_MOUNTAIN_TRAIL}, { - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))));}), -}, { - LOCATION(RC_DMT_CHEST, (logic->BlastOrSmash() || ((bool)ctx->GetTrickOption(RT_DMT_BOMBABLE) && (logic->IsChild && logic->HasItem(RG_GORONS_BRACELET))))), - LOCATION(RC_DMT_FREESTANDING_POH, (logic->TakeDamage() || (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))))))), - LOCATION(RC_DMT_GS_BEAN_PATCH, (logic->CanSpawnSoilSkull() && (logic->HasExplosives() || (logic->HasItem(RG_GORONS_BRACELET) || ((bool)ctx->GetTrickOption(RT_DMT_SOIL_GS) && ((logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG))))))), - LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash()), - LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, (logic->IsAdult && (logic->AtNight && ((logic->CanUse(RG_MEGATON_HAMMER) || (((bool)ctx->GetTrickOption(RT_DMT_HOOKSHOT_LOWER_GS) && logic->CanUse(RG_HOOKSHOT)) || (((bool)ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL)) || (((bool)ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) || (bool)ctx->GetTrickOption(RT_DMT_JS_LOWER_GS))))) && logic->CanGetNightTimeGS())))), - LOCATION(RC_DMT_BLUE_RUPEE, (logic->IsChild && logic->BlastOrSmash())), - LOCATION(RC_DMT_RED_RUPEE, (logic->IsChild && logic->BlastOrSmash())), - LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))))), - LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))))), - LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))))), - LOCATION(RC_DMT_FLAG_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_KAK_BEHIND_GATE, []{return true;}), - Entrance(RR_GORON_CITY, []{return true;}), - Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return (Here(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->BlastOrSmash();}) || (logic->IsAdult && ((CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && logic->HasItem(RG_GORONS_BRACELET)) || (logic->CanUse(RG_HOVER_BOOTS) && (bool)ctx->GetTrickOption(RT_DMT_CLIMB_HOVERS)))));}), - Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return (logic->HasExplosives() || (logic->HasItem(RG_GORONS_BRACELET) || logic->IsAdult));}), - Entrance(RR_DMT_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}), -}); -areaTable[RR_DEATH_MOUNTAIN_SUMMIT] = Region("Death Mountain Summit", SCENE_DEATH_MOUNTAIN_TRAIL, true, {RA_DEATH_MOUNTAIN_TRAIL}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->BugRock, []{return logic->IsChild;}), -}, { - LOCATION(RC_DMT_TRADE_BROKEN_SWORD, (logic->IsAdult && logic->CanUse(RG_BROKEN_SWORD))), - LOCATION(RC_DMT_TRADE_EYEDROPS, (logic->IsAdult && logic->CanUse(RG_EYEDROPS))), - LOCATION(RC_DMT_TRADE_CLAIM_CHECK, (logic->IsAdult && logic->CanUse(RG_CLAIM_CHECK))), - LOCATION(RC_DMT_GS_FALLING_ROCKS_PATH, (logic->IsAdult && (logic->AtNight && ((logic->CanUse(RG_MEGATON_HAMMER) || (bool)ctx->GetTrickOption(RT_DMT_UPPER_GS)) && logic->CanGetNightTimeGS())))), - LOCATION(RC_DMT_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_DMT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_DMT_GOSSIP_STONE, true), -}, { - Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), - Entrance(RR_DMC_UPPER_LOCAL, []{return true;}), - Entrance(RR_DMT_OWL_FLIGHT, []{return logic->IsChild;}), - Entrance(RR_DMT_COW_GROTTO, []{return Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return logic->BlastOrSmash();});}), - Entrance(RR_DMT_GREAT_FAIRY_FOUNTAIN, []{return Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return logic->BlastOrSmash();});}), -}); -areaTable[RR_DMT_OWL_FLIGHT] = Region("DMT Owl Flight", SCENE_DEATH_MOUNTAIN_TRAIL, true, {RA_DEATH_MOUNTAIN_TRAIL}, {}, {}, { - Entrance(RR_KAK_IMPAS_ROOFTOP, []{return true;}), -}); -areaTable[RR_DMT_GREAT_FAIRY_FOUNTAIN] = Region("DMT Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, false, {}, {}, { - LOCATION(RC_DMT_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)), -}, { - Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}), -}); -areaTable[RR_DMT_COW_GROTTO] = Region("DMT Cow Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_DMT_COW_GROTTO_COW, logic->CanUse(RG_EPONAS_SONG)), - LOCATION(RC_DMT_COW_GROTTO_BEEHIVE, logic->CanBreakLowerBeehives()), - LOCATION(RC_DMT_COW_GROTTO_LEFT_HEART, true), - LOCATION(RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, true), - LOCATION(RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, true), - LOCATION(RC_DMT_COW_GROTTO_RIGHT_HEART, true), - LOCATION(RC_DMT_COW_GROTTO_RUPEE_1, true), - LOCATION(RC_DMT_COW_GROTTO_RUPEE_2, true), - LOCATION(RC_DMT_COW_GROTTO_RUPEE_3, true), - LOCATION(RC_DMT_COW_GROTTO_RUPEE_4, true), - LOCATION(RC_DMT_COW_GROTTO_RUPEE_5, true), - LOCATION(RC_DMT_COW_GROTTO_RUPEE_6, true), - LOCATION(RC_DMT_COW_GROTTO_RED_RUPEE, true), - LOCATION(RC_DMT_COW_GROTTO_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_DMT_COW_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DMT_COW_GROTTO_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}), -}); -areaTable[RR_DMT_STORMS_GROTTO] = Region("DMT Storms Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_DMT_STORMS_GROTTO_CHEST, true), - LOCATION(RC_DMT_STORMS_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_DMT_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DMT_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DMT_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DMT_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), -}); -areaTable[RR_GORON_CITY] = Region("Goron City", SCENE_GORON_CITY, false, {RA_GORON_CITY}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), - EventAccess(&logic->StickPot, []{return logic->IsChild;}), - EventAccess(&logic->BugRock, []{return (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS));}), - EventAccess(&logic->GoronCityChildFire, []{return (logic->IsChild && logic->CanUse(RG_DINS_FIRE));}), - EventAccess(&logic->GCWoodsWarpOpen, []{return (logic->CanDetonateUprightBombFlower() || (logic->CanUse(RG_MEGATON_HAMMER) || logic->GoronCityChildFire));}), - EventAccess(&logic->GCDaruniasDoorOpenChild, []{return (logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY));}), - EventAccess(&logic->StopGCRollingGoronAsAdult, []{return (logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || (logic->HasExplosives() || (logic->CanUse(RG_FAIRY_BOW) || ((bool)ctx->GetTrickOption(RT_GC_LINK_GORON_DINS) && (logic->CanUse(RG_DINS_FIRE) || ((bool)ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE))))))));}), -}, { - LOCATION(RC_GC_MAZE_LEFT_CHEST, (logic->CanUse(RG_MEGATON_HAMMER) || (logic->CanUse(RG_SILVER_GAUNTLETS) || ((bool)ctx->GetTrickOption(RT_GC_LEFTMOST) && (logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS)))))), - LOCATION(RC_GC_MAZE_CENTER_CHEST, (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS))), - LOCATION(RC_GC_MAZE_RIGHT_CHEST, (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS))), - LOCATION(RC_GC_POT_FREESTANDING_POH, (logic->IsChild && (logic->GoronCityChildFire && (logic->CanUse(RG_BOMB_BAG) || ((logic->HasItem(RG_GORONS_BRACELET) && (bool)ctx->GetTrickOption(RT_GC_POT_STRENGTH)) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_GC_POT))))))), - LOCATION(RC_GC_ROLLING_GORON_AS_CHILD, (logic->IsChild && (logic->HasExplosives() || (logic->HasItem(RG_GORONS_BRACELET) && (bool)ctx->GetTrickOption(RT_GC_ROLLING_STRENGTH))))), - LOCATION(RC_GC_ROLLING_GORON_AS_ADULT, logic->StopGCRollingGoronAsAdult), - LOCATION(RC_GC_GS_BOULDER_MAZE, (logic->IsChild && logic->BlastOrSmash())), - LOCATION(RC_GC_GS_CENTER_PLATFORM, (logic->IsAdult && logic->CanAttack())), - LOCATION(RC_GC_MEDIGORON, (logic->IsAdult && (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)))), - LOCATION(RC_GC_MAZE_GOSSIP_STONE_FAIRY, ((logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CallGossipFairyExceptSuns())), - LOCATION(RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, ((logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CanUse(RG_SONG_OF_STORMS))), - LOCATION(RC_GC_MAZE_GOSSIP_STONE, (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS))), - LOCATION(RC_GC_LOWER_STAIRCASE_POT_1, logic->CanBreakPots()), - LOCATION(RC_GC_LOWER_STAIRCASE_POT_2, logic->CanBreakPots()), - LOCATION(RC_GC_UPPER_STAIRCASE_POT_1, logic->CanBreakPots()), - LOCATION(RC_GC_UPPER_STAIRCASE_POT_2, logic->CanBreakPots()), - LOCATION(RC_GC_UPPER_STAIRCASE_POT_3, logic->CanBreakPots()), - LOCATION(RC_GC_MAZE_CRATE, (logic->BlastOrSmash() || (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanBreakCrates()))), -}, { - Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), - Entrance(RR_GC_MEDIGORON, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));}), - Entrance(RR_GC_WOODS_WARP, []{return logic->GCWoodsWarpOpen;}), - Entrance(RR_GC_SHOP, []{return ((logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && (logic->BlastOrSmash() || (logic->HasItem(RG_GORONS_BRACELET) || (logic->GoronCityChildFire || logic->CanUse(RG_FAIRY_BOW))))));}), - Entrance(RR_GC_DARUNIAS_CHAMBER, []{return ((logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && logic->GCDaruniasDoorOpenChild));}), - Entrance(RR_GC_GROTTO_PLATFORM, []{return (logic->IsAdult && ((logic->CanUse(RG_SONG_OF_TIME) && ((logic->EffectiveHealth() > 2) || (logic->CanUse(RG_GORON_TUNIC) || (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_NAYRUS_LOVE))))) || (((logic->EffectiveHealth() > 1) && (logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_HOOKSHOT))) || ((logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_HOOKSHOT)) || ((logic->EffectiveHealth() > 2) && (logic->CanUse(RG_HOOKSHOT) && (bool)ctx->GetTrickOption(RT_GC_GROTTO)))))));}), -}); -areaTable[RR_GC_MEDIGORON] = Region("GC Medigoron", SCENE_GORON_CITY, false, {RA_GORON_CITY}, {}, { - LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE, true), - LOCATION(RC_GC_MEDIGORON_POT_1, logic->CanBreakPots()), -}, { - Entrance(RR_GORON_CITY, []{return true;}), -}); -areaTable[RR_GC_WOODS_WARP] = Region("GC Woods Warp", SCENE_GORON_CITY, false, {RA_GORON_CITY}, { - EventAccess(&logic->GCWoodsWarpOpen, []{return (logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE));}), -}, {}, { - Entrance(RR_GORON_CITY, []{return logic->GCWoodsWarpOpen;}), - Entrance(RR_THE_LOST_WOODS, []{return true;}), -}); -areaTable[RR_GC_DARUNIAS_CHAMBER] = Region("GC Darunias Chamber", SCENE_GORON_CITY, false, {RA_GORON_CITY}, { - EventAccess(&logic->GoronCityChildFire, []{return (logic->IsChild && logic->CanUse(RG_STICKS));}), -}, { - LOCATION(RC_GC_DARUNIAS_JOY, (logic->IsChild && logic->CanUse(RG_SARIAS_SONG))), - LOCATION(RC_GC_DARUNIA_POT_1, logic->CanBreakPots()), - LOCATION(RC_GC_DARUNIA_POT_2, logic->CanBreakPots()), - LOCATION(RC_GC_DARUNIA_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_GORON_CITY, []{return true;}), - Entrance(RR_DMC_LOWER_LOCAL, []{return logic->IsAdult;}), -}); -areaTable[RR_GC_GROTTO_PLATFORM] = Region("GC Grotto Platform", SCENE_GORON_CITY, false, {RA_GORON_CITY}, {}, {}, { - Entrance(RR_GC_GROTTO, []{return true;}), - Entrance(RR_GORON_CITY, []{return ((logic->EffectiveHealth() > 2) || (logic->CanUse(RG_GORON_TUNIC) || (logic->CanUse(RG_NAYRUS_LOVE) || ((logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanUse(RG_LONGSHOT)))));}), -}); -areaTable[RR_GC_SHOP] = Region("GC Shop", SCENE_GORON_SHOP, false, {}, {}, { - LOCATION(RC_GC_SHOP_ITEM_1, true), - LOCATION(RC_GC_SHOP_ITEM_2, true), - LOCATION(RC_GC_SHOP_ITEM_3, true), - LOCATION(RC_GC_SHOP_ITEM_4, true), - LOCATION(RC_GC_SHOP_ITEM_5, true), - LOCATION(RC_GC_SHOP_ITEM_6, true), - LOCATION(RC_GC_SHOP_ITEM_7, true), - LOCATION(RC_GC_SHOP_ITEM_8, true), -}, { - Entrance(RR_GORON_CITY, []{return true;}), -}); -areaTable[RR_GC_GROTTO] = Region("GC Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_GC_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()), - LOCATION(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()), - LOCATION(RC_GC_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()), - LOCATION(RC_GC_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_GC_GROTTO_PLATFORM, []{return true;}), -}); -areaTable[RR_DMC_UPPER_LOCAL] = Region("DMC Upper Local", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, { - EventAccess(&logic->GossipStoneFairy, []{return (logic->HasExplosives() && (logic->CallGossipFairyExceptSuns() && ((logic->FireTimer() >= 16) || (logic->Hearts() >= 3))));}), -}, { - LOCATION(RC_DMC_WALL_FREESTANDING_POH, ((logic->FireTimer() >= 16) || (logic->Hearts() >= 3))), - LOCATION(RC_DMC_GS_CRATE, (((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)) && (logic->IsChild && (logic->CanAttack() && logic->CanBreakCrates())))), - LOCATION(RC_DMC_GOSSIP_STONE_FAIRY, (logic->CallGossipFairyExceptSuns() && (logic->HasExplosives() && ((logic->FireTimer() >= 16) || (logic->Hearts() >= 3))))), - LOCATION(RC_DMC_GOSSIP_STONE_FAIRY_BIG, (logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() && ((logic->FireTimer() >= 16) || (logic->Hearts() >= 3))))), - LOCATION(RC_DMC_GOSSIP_STONE, (logic->HasExplosives() && ((logic->FireTimer() >= 16) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_CRATE, (((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)) && (logic->IsChild && logic->CanBreakCrates()))), -}, { - Entrance(RR_DMC_UPPER_NEARBY, []{return true;}), - Entrance(RR_DMC_LADDER_AREA_NEARBY, []{return ((logic->FireTimer() >= 16) || (logic->Hearts() >= 3));}), - Entrance(RR_DMC_CENTRAL_NEARBY, []{return (logic->IsAdult && (logic->CanUse(RG_GORON_TUNIC) && (logic->CanUse(RG_DISTANT_SCARECROW) && ((logic->EffectiveHealth() > 2) || ((logic->CanUse(RG_BOTTLE_WITH_FAIRY) && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || logic->CanUse(RG_NAYRUS_LOVE))))));}), - Entrance(RR_DMC_LOWER_NEARBY, []{return false;}), - Entrance(RR_DMC_DISTANT_PLATFORM, []{return (((logic->FireTimer() >= 48) && (logic->Hearts() >= 2)) || (logic->Hearts() >= 3));}), -}); -areaTable[RR_DMC_CENTRAL_LOCAL] = Region("DMC Central Local", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, { - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))));}), -}, { - LOCATION(RC_DMC_GS_BEAN_PATCH, (((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)) && (logic->CanSpawnSoilSkull() && logic->CanAttack()))), - LOCATION(RC_DMC_NEAR_PLATFORM_RED_RUPEE, logic->IsChild), - LOCATION(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, (logic->IsChild && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, (logic->IsChild && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, (logic->IsChild && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, (logic->IsChild && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, (logic->IsChild && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, (logic->IsChild && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, (logic->IsChild && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), - LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))))), - LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))))), - LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && (logic->CanUse(RG_SONG_OF_STORMS) && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))))), -}, { - Entrance(RR_DMC_CENTRAL_NEARBY, []{return true;}), - Entrance(RR_DMC_LOWER_NEARBY, []{return ((logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL)) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_DMC_UPPER_NEARBY, []{return (logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL));}), - Entrance(RR_FIRE_TEMPLE_ENTRYWAY, []{return ((logic->IsChild && ((logic->Hearts() >= 3) && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) || (logic->IsAdult && (logic->FireTimer() >= 24)));}), - Entrance(RR_DMC_DISTANT_PLATFORM, []{return ((logic->FireTimer() >= 48) && logic->CanUse(RG_DISTANT_SCARECROW));}), -}); -areaTable[RR_DMC_LOWER_LOCAL] = Region("DMC Lower Local", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, {}, {}, { - Entrance(RR_DMC_LOWER_NEARBY, []{return true;}), - Entrance(RR_DMC_LADDER_AREA_NEARBY, []{return ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3));}), - Entrance(RR_DMC_CENTRAL_NEARBY, []{return ((logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)) && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)));}), - Entrance(RR_DMC_CENTRAL_LOCAL, []{return ((logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && (logic->CanShield() && (bool)ctx->GetTrickOption(RT_DMC_BOLERO_JUMP))))) && (logic->FireTimer() >= 24));}), -}); -areaTable[RR_DMC_LOWER_NEARBY] = Region("DMC Lower Nearby", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, {}, { - LOCATION(RC_DMC_NEAR_GC_POT_1, logic->CanBreakPots()), - LOCATION(RC_DMC_NEAR_GC_POT_2, logic->CanBreakPots()), - LOCATION(RC_DMC_NEAR_GC_POT_3, logic->CanBreakPots()), - LOCATION(RC_DMC_NEAR_GC_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_DMC_LOWER_LOCAL, []{return (logic->FireTimer() >= 48);}), - Entrance(RR_GC_DARUNIAS_CHAMBER, []{return true;}), - Entrance(RR_DMC_GREAT_FAIRY_FOUNTAIN, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - Entrance(RR_DMC_HAMMER_GROTTO, []{return (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER));}), -}); -areaTable[RR_DMC_UPPER_NEARBY] = Region("DMC Upper Nearby", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, {}, {}, { - Entrance(RR_DMC_UPPER_LOCAL, []{return (logic->FireTimer() >= 48);}), - Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}), - Entrance(RR_DMC_UPPER_GROTTO, []{return Here(RR_DMC_UPPER_NEARBY, []{return (logic->BlastOrSmash() && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)));});}), -}); -areaTable[RR_DMC_CENTRAL_NEARBY] = Region("DMC Central Nearby", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, {}, { - LOCATION(RC_DMC_VOLCANO_FREESTANDING_POH, (logic->IsAdult && ((logic->Hearts() >= 3) && (CanPlantBean(RR_DMC_CENTRAL_LOCAL) || ((bool)ctx->GetTrickOption(RT_DMC_HOVER_BEAN_POH) && logic->CanUse(RG_HOVER_BOOTS)))))), - LOCATION(RC_SHEIK_IN_CRATER, (logic->IsAdult && ((logic->FireTimer() >= 8) || (logic->Hearts() >= 3)))), -}, { - Entrance(RR_DMC_CENTRAL_LOCAL, []{return (logic->FireTimer() >= 48);}), -}); -areaTable[RR_DMC_LADDER_AREA_NEARBY] = Region("DMC Ladder Region Nearby", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, {}, { - LOCATION(RC_DMC_DEKU_SCRUB, (logic->IsChild && logic->CanStunDeku())), -}, { - Entrance(RR_DMC_UPPER_NEARBY, []{return (logic->Hearts() >= 3);}), - Entrance(RR_DMC_LOWER_NEARBY, []{return ((logic->Hearts() >= 3) && (logic->CanUse(RG_HOVER_BOOTS) || (((bool)ctx->GetTrickOption(RT_DMC_BOULDER_JS) && (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))) || ((bool)ctx->GetTrickOption(RT_DMC_BOULDER_SKIP) && logic->IsAdult))));}), -}); -areaTable[RR_DMC_UPPER_GROTTO] = Region("DMC Upper Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_DMC_UPPER_GROTTO_CHEST, true), - LOCATION(RC_DMC_UPPER_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_DMC_UPPER_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DMC_UPPER_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DMC_UPPER_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DMC_UPPER_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_DMC_UPPER_LOCAL, []{return true;}), -}); -areaTable[RR_DMC_HAMMER_GROTTO] = Region("DMC Hammer Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()), - LOCATION(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()), - LOCATION(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()), - LOCATION(RC_DMC_HAMMER_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_DMC_LOWER_LOCAL, []{return true;}), -}); -areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Region("DMC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, false, {}, {}, { - LOCATION(RC_DMC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)), -}, { - Entrance(RR_DMC_LOWER_LOCAL, []{return true;}), -}); -areaTable[RR_DMC_DISTANT_PLATFORM] = Region("DMC Distant Platform", SCENE_DEATH_MOUNTAIN_CRATER, false, {RA_DEATH_MOUNTAIN_CRATER}, {}, { - LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, logic->IsAdult), - LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, logic->IsAdult), - LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, logic->IsAdult), - LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, logic->IsAdult), - LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, logic->IsAdult), - LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, logic->IsAdult), - LOCATION(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, logic->IsAdult), -}, { - Entrance(RR_DMC_CENTRAL_LOCAL, []{return ((logic->FireTimer() >= 48) && logic->CanUse(RG_DISTANT_SCARECROW));}), -}); -areaTable[RR_ZR_FRONT] = Region("ZR Front", SCENE_ZORAS_RIVER, true, {RA_ZORAS_RIVER}, {}, { - LOCATION(RC_ZR_GS_TREE, (logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE))), - LOCATION(RC_ZR_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_8, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_9, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_10, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_11, logic->CanCutShrubs()), - LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()), -}, { - Entrance(RR_ZORAS_RIVER, []{return (logic->IsAdult || logic->BlastOrSmash());}), - Entrance(RR_HYRULE_FIELD, []{return true;}), -}); -areaTable[RR_ZORAS_RIVER] = Region("Zora River", SCENE_ZORAS_RIVER, true, {RA_ZORAS_RIVER}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->BeanPlantFairy, []{return (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)));}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), -}, { - LOCATION(RC_ZR_MAGIC_BEAN_SALESMAN, (logic->HasItem(RG_CHILD_WALLET) && logic->IsChild)), - LOCATION(RC_ZR_FROGS_OCARINA_GAME, (logic->IsChild && (logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanUse(RG_SARIAS_SONG) && (logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_EPONAS_SONG) && (logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_SONG_OF_STORMS)))))))), - LOCATION(RC_ZR_FROGS_IN_THE_RAIN, (logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS))), - LOCATION(RC_ZR_FROGS_ZELDAS_LULLABY, (logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY))), - LOCATION(RC_ZR_FROGS_EPONAS_SONG, (logic->IsChild && logic->CanUse(RG_EPONAS_SONG))), - LOCATION(RC_ZR_FROGS_SARIAS_SONG, (logic->IsChild && logic->CanUse(RG_SARIAS_SONG))), - LOCATION(RC_ZR_FROGS_SUNS_SONG, (logic->IsChild && logic->CanUse(RG_SUNS_SONG))), - LOCATION(RC_ZR_FROGS_SONG_OF_TIME, (logic->IsChild && logic->CanUse(RG_SONG_OF_TIME))), - LOCATION(RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, (logic->IsChild || (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_ZR_LOWER))))), - LOCATION(RC_ZR_NEAR_DOMAIN_FREESTANDING_POH, (logic->IsChild || (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_ZR_UPPER))))), - LOCATION(RC_ZR_GS_LADDER, (logic->IsChild && (logic->CanAttack() && logic->CanGetNightTimeGS()))), - LOCATION(RC_ZR_GS_NEAR_RAISED_GROTTOS, (logic->IsAdult && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_ZR_GS_ABOVE_BRIDGE, (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) && logic->CanGetNightTimeGS()))), - LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_1, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_2, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_3, (logic->IsChild && (logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)))), - LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, (logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, (logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, (logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, (logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true), - LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true), - LOCATION(RC_ZR_NEAR_FREESTANDING_POH_GRASS, logic->CanCutShrubs()), -}, { - Entrance(RR_ZR_FRONT, []{return true;}), - Entrance(RR_ZR_OPEN_GROTTO, []{return true;}), - Entrance(RR_ZR_FAIRY_GROTTO, []{return Here(RR_ZORAS_RIVER, []{return logic->BlastOrSmash();});}), - Entrance(RR_THE_LOST_WOODS, []{return (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS));}), - Entrance(RR_ZR_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}), - Entrance(RR_ZR_BEHIND_WATERFALL, []{return (ctx->GetOption(RSK_SLEEPING_WATERFALL).Is(RO_WATERFALL_OPEN) || (Here(RR_ZORAS_RIVER, []{return logic->CanUse(RG_ZELDAS_LULLABY);}) || ((logic->IsChild && (bool)ctx->GetTrickOption(RT_ZR_CUCCO)) || (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) && (bool)ctx->GetTrickOption(RT_ZR_HOVERS))))));}), -}); -areaTable[RR_ZR_FROM_SHORTCUT] = Region("ZR From Shortcut", SCENE_ZORAS_RIVER, false, {RA_ZORAS_RIVER}, {}, {}, { - Entrance(RR_ZORAS_RIVER, []{return ((logic->Hearts() > 1) || (logic->HasItem(RG_BOTTLE_WITH_FAIRY) || logic->HasItem(RG_BRONZE_SCALE)));}), - Entrance(RR_THE_LOST_WOODS, []{return (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS));}), -}); -areaTable[RR_ZR_BEHIND_WATERFALL] = Region("ZR Behind Waterfall", SCENE_ZORAS_RIVER, true, {RA_ZORAS_RIVER}, {}, {}, { - Entrance(RR_ZORAS_RIVER, []{return true;}), - Entrance(RR_ZORAS_DOMAIN, []{return true;}), -}); -areaTable[RR_ZR_OPEN_GROTTO] = Region("ZR Open Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), -}, { - LOCATION(RC_ZR_OPEN_GROTTO_CHEST, true), - LOCATION(RC_ZR_OPEN_GROTTO_FISH, logic->HasBottle()), - LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, true), - LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), - LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), - LOCATION(RC_ZR_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_ZR_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_ZR_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_ZR_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_ZORAS_RIVER, []{return true;}), -}); -areaTable[RR_ZR_FAIRY_GROTTO] = Region("ZR Fairy Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->FreeFairies, []{return true;}), -}, { - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_1, true), - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_2, true), - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_3, true), - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_4, true), - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_5, true), - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_6, true), - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_7, true), - LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_8, true), -}, { - Entrance(RR_ZORAS_RIVER, []{return true;}), -}); -areaTable[RR_ZR_STORMS_GROTTO] = Region("ZR Storms Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_ZR_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()), - LOCATION(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()), - LOCATION(RC_ZR_STORMS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_ZORAS_RIVER, []{return true;}), -}); -areaTable[RR_ZORAS_DOMAIN] = Region("Zoras Domain", SCENE_ZORAS_DOMAIN, false, {RA_ZORAS_DOMAIN}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), - EventAccess(&logic->NutPot, []{return true;}), - EventAccess(&logic->StickPot, []{return logic->IsChild;}), - EventAccess(&logic->FishGroup, []{return logic->IsChild;}), - EventAccess(&logic->KingZoraThawed, []{return (logic->IsAdult && logic->BlueFire());}), - EventAccess(&logic->DeliverLetter, []{return (logic->CanUse(RG_RUTOS_LETTER) && (logic->IsChild && ctx->GetOption(RSK_ZORAS_FOUNTAIN).IsNot(RO_ZF_OPEN)));}), -}, { - LOCATION(RC_ZD_DIVING_MINIGAME, (logic->HasItem(RG_BRONZE_SCALE) && (logic->HasItem(RG_CHILD_WALLET) && logic->IsChild))), - LOCATION(RC_ZD_CHEST, (logic->IsChild && logic->CanUse(RG_STICKS))), - LOCATION(RC_ZD_KING_ZORA_THAWED, (logic->IsAdult && logic->KingZoraThawed)), - LOCATION(RC_ZD_TRADE_PRESCRIPTION, (logic->IsAdult && (logic->KingZoraThawed && logic->CanUse(RG_PRESCRIPTION)))), - LOCATION(RC_ZD_GS_FROZEN_WATERFALL, (logic->IsAdult && ((logic->HookshotOrBoomerang() || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_MAGIC_SINGLE) && (logic->CanUse(RG_MASTER_SWORD) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)))) || ((bool)ctx->GetTrickOption(RT_ZD_GS) && logic->CanJumpslashExceptHammer()))))) && logic->CanGetNightTimeGS()))), - LOCATION(RC_ZD_FISH_1, (logic->IsChild && logic->HasBottle())), - LOCATION(RC_ZD_FISH_2, (logic->IsChild && logic->HasBottle())), - LOCATION(RC_ZD_FISH_3, (logic->IsChild && logic->HasBottle())), - LOCATION(RC_ZD_FISH_4, (logic->IsChild && logic->HasBottle())), - LOCATION(RC_ZD_FISH_5, (logic->IsChild && logic->HasBottle())), - LOCATION(RC_ZD_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_ZD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_ZD_GOSSIP_STONE, true), - LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, (logic->IsChild && logic->CanBreakUpperBeehives())), - LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, (logic->IsChild && logic->CanBreakUpperBeehives())), - LOCATION(RC_ZD_NEAR_SHOP_POT_1, logic->CanBreakPots()), - LOCATION(RC_ZD_NEAR_SHOP_POT_2, logic->CanBreakPots()), - LOCATION(RC_ZD_NEAR_SHOP_POT_3, logic->CanBreakPots()), - LOCATION(RC_ZD_NEAR_SHOP_POT_4, logic->CanBreakPots()), - LOCATION(RC_ZD_NEAR_SHOP_POT_5, logic->CanBreakPots()), -}, { - Entrance(RR_ZR_BEHIND_WATERFALL, []{return true;}), - Entrance(RR_LH_FROM_SHORTCUT, []{return (logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)));}), - Entrance(RR_ZD_BEHIND_KING_ZORA, []{return (logic->DeliverLetter || (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || ((ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && logic->IsAdult) || ((bool)ctx->GetTrickOption(RT_ZD_KING_ZORA_SKIP) && logic->IsAdult))));}), - Entrance(RR_ZD_SHOP, []{return (logic->IsChild || logic->BlueFire());}), - Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}), -}); -areaTable[RR_ZORAS_DOMAIN_ISLAND] = Region("Zoras Domain Island", SCENE_ZORAS_DOMAIN, false, {RA_ZORAS_DOMAIN}, {}, {}, { - Entrance(RR_ZORAS_DOMAIN, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE));}), - Entrance(RR_ZD_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}), -}); -areaTable[RR_ZD_BEHIND_KING_ZORA] = Region("ZD Behind King Zora", SCENE_ZORAS_DOMAIN, false, {RA_ZORAS_DOMAIN}, { - EventAccess(&logic->KingZoraThawed, []{return (logic->IsAdult && logic->BlueFire());}), -}, { - LOCATION(RC_ZD_BEHIND_KING_ZORA_BEEHIVE, (logic->IsChild && logic->CanBreakUpperBeehives())), -}, { - Entrance(RR_ZORAS_DOMAIN, []{return (logic->DeliverLetter || (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && logic->IsAdult)));}), - Entrance(RR_ZORAS_FOUNTAIN, []{return true;}), -}); -areaTable[RR_ZD_SHOP] = Region("ZD Shop", SCENE_ZORA_SHOP, false, {}, {}, { - LOCATION(RC_ZD_SHOP_ITEM_1, true), - LOCATION(RC_ZD_SHOP_ITEM_2, true), - LOCATION(RC_ZD_SHOP_ITEM_3, true), - LOCATION(RC_ZD_SHOP_ITEM_4, true), - LOCATION(RC_ZD_SHOP_ITEM_5, true), - LOCATION(RC_ZD_SHOP_ITEM_6, true), - LOCATION(RC_ZD_SHOP_ITEM_7, true), - LOCATION(RC_ZD_SHOP_ITEM_8, true), -}, { - Entrance(RR_ZORAS_DOMAIN, []{return true;}), -}); -areaTable[RR_ZD_STORMS_GROTTO] = Region("ZD Storms Grotto", SCENE_GROTTOS, false, {}, { - EventAccess(&logic->FreeFairies, []{return true;}), -}, { - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_1, true), - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_2, true), - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_3, true), - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_4, true), - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_5, true), - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_6, true), - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_7, true), - LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_8, true), -}, { - Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}), -}); -areaTable[RR_ZORAS_FOUNTAIN] = Region("Zoras Fountain", SCENE_ZORAS_FOUNTAIN, false, {RA_ZORAS_FOUNTAIN}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), - EventAccess(&logic->ButterflyFairy, []{return (logic->CanUse(RG_STICKS) && logic->AtDay);}), -}, { - LOCATION(RC_ZF_GS_TREE, logic->IsChild), - LOCATION(RC_ZF_GS_ABOVE_THE_LOG, (logic->IsChild && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()), - LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_ZF_FAIRY_GOSSIP_STONE, true), - LOCATION(RC_ZF_JABU_GOSSIP_STONE, true), - LOCATION(RC_ZF_NEAR_JABU_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_ZF_NEAR_JABU_POT_2, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_ZF_NEAR_JABU_POT_3, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_ZF_NEAR_JABU_POT_4, (logic->IsChild && logic->CanBreakPots())), -}, { - Entrance(RR_ZD_BEHIND_KING_ZORA, []{return true;}), - Entrance(RR_ZF_ICEBERGS, []{return logic->IsAdult;}), - Entrance(RR_ZF_LAKEBED, []{return logic->CanUse(RG_IRON_BOOTS);}), - Entrance(RR_ZF_HIDDEN_CAVE, []{return (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->BlastOrSmash());}), - Entrance(RR_ZF_ROCK, []{return (logic->IsAdult && logic->CanUse(RG_SCARECROW));}), - Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return (logic->IsChild && (ctx->GetOption(RSK_JABU_OPEN).Is(RO_JABU_OPEN) || logic->CanUse(RG_BOTTLE_WITH_FISH)));}), - Entrance(RR_ZF_GREAT_FAIRY_FOUNTAIN, []{return (logic->HasExplosives() || ((bool)ctx->GetTrickOption(RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES) && (logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_SILVER_GAUNTLETS))));}), -}); -areaTable[RR_ZF_ICEBERGS] = Region("ZF Icebergs", SCENE_ZORAS_FOUNTAIN, false, {RA_ZORAS_FOUNTAIN}, {}, { - LOCATION(RC_ZF_ICEBERG_FREESTANDING_POH, logic->IsAdult), -}, { - Entrance(RR_ZORAS_FOUNTAIN, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_ZF_LAKEBED, []{return logic->CanUse(RG_IRON_BOOTS);}), - Entrance(RR_ZF_LEDGE, []{return true;}), -}); -areaTable[RR_ZF_LAKEBED] = Region("ZF Lakebed", SCENE_ZORAS_FOUNTAIN, false, {RA_ZORAS_FOUNTAIN}, {}, { - LOCATION(RC_ZF_BOTTOM_FREESTANDING_POH, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTH_INNER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTH_INNER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTH_OUTER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), - LOCATION(RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))), -}, { - Entrance(RR_ZORAS_FOUNTAIN, []{return logic->HasItem(RG_BRONZE_SCALE);}), -}); -areaTable[RR_ZF_LEDGE] = Region("ZF Ledge", SCENE_ZORAS_FOUNTAIN, false, {RA_ZORAS_FOUNTAIN}, {}, {}, { - Entrance(RR_ZORAS_FOUNTAIN, []{return logic->HasItem(RG_BRONZE_SCALE);}), - Entrance(RR_ZF_ICEBERGS, []{return logic->IsAdult;}), - Entrance(RR_ZF_LAKEBED, []{return logic->CanUse(RG_IRON_BOOTS);}), - Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}), -}); -areaTable[RR_ZF_HIDDEN_CAVE] = Region("ZF Hidden Cave", SCENE_ZORAS_FOUNTAIN, false, {RA_ZORAS_FOUNTAIN}, {}, { - LOCATION(RC_ZF_HIDDEN_CAVE_POT_1, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_ZF_HIDDEN_CAVE_POT_2, (logic->IsAdult && logic->CanBreakPots())), - LOCATION(RC_ZF_HIDDEN_CAVE_POT_3, (logic->IsAdult && logic->CanBreakPots())), -}, { - Entrance(RR_ZF_HIDDEN_LEDGE, []{return true;}), -}); -areaTable[RR_ZF_HIDDEN_LEDGE] = Region("ZF Hidden Ledge", SCENE_ZORAS_FOUNTAIN, false, {RA_ZORAS_FOUNTAIN}, {}, { - LOCATION(RC_ZF_GS_HIDDEN_CAVE, (logic->IsAdult && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOMB_THROW) && logic->CanGetNightTimeGS()))), -}, { - Entrance(RR_ZORAS_FOUNTAIN, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage());}), - Entrance(RR_ZF_HIDDEN_CAVE, []{return true;}), -}); -areaTable[RR_ZF_ROCK] = Region("ZF Rock", SCENE_ZORAS_FOUNTAIN, false, {RA_ZORAS_FOUNTAIN}, {}, {}, { - Entrance(RR_ZORAS_FOUNTAIN, []{return true;}), -}); -areaTable[RR_ZF_GREAT_FAIRY_FOUNTAIN] = Region("ZF Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, false, {}, {}, { - LOCATION(RC_ZF_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)), -}, { - Entrance(RR_ZORAS_FOUNTAIN, []{return true;}), -}); -areaTable[RR_LON_LON_RANCH] = Region("Lon Lon Ranch", SCENE_LON_LON_RANCH, true, {RA_LON_LON_RANCH}, { - EventAccess(&logic->FreedEpona, []{return ((logic->HasItem(RG_CHILD_WALLET) || ctx->GetOption(RSK_SKIP_EPONA_RACE)) && (logic->CanUse(RG_EPONAS_SONG) && (logic->IsAdult && logic->AtDay)));}), - EventAccess(&logic->LinksCow, []{return (logic->HasItem(RG_CHILD_WALLET) && (logic->CanUse(RG_EPONAS_SONG) && (logic->IsAdult && logic->AtDay)));}), -}, { - LOCATION(RC_SONG_FROM_MALON, (logic->IsChild && (logic->HasItem(RG_ZELDAS_LETTER) && (logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay)))), - LOCATION(RC_LLR_GS_TREE, logic->IsChild), - LOCATION(RC_LLR_GS_RAIN_SHED, (logic->IsChild && logic->CanGetNightTimeGS())), - LOCATION(RC_LLR_GS_HOUSE_WINDOW, (logic->IsChild && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_LLR_GS_BACK_WALL, (logic->IsChild && (logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()))), - LOCATION(RC_LLR_FRONT_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_LLR_FRONT_POT_2, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_LLR_FRONT_POT_3, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_LLR_FRONT_POT_4, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_LLR_RAIN_SHED_POT_1, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_LLR_RAIN_SHED_POT_2, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_LLR_RAIN_SHED_POT_3, (logic->IsChild && logic->CanBreakPots())), - LOCATION(RC_LLR_NEAR_TREE_CRATE, (logic->IsChild && logic->CanBreakCrates())), -}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), - Entrance(RR_LLR_TALONS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_TALONS_HOUSE_KEY);}), - Entrance(RR_LLR_STABLES, []{return logic->CanOpenOverworldDoor(RG_STABLES_KEY);}), - Entrance(RR_LLR_TOWER, []{return logic->CanOpenOverworldDoor(RG_BACK_TOWER_KEY);}), - Entrance(RR_LLR_GROTTO, []{return logic->IsChild;}), -}); -areaTable[RR_LLR_TALONS_HOUSE] = Region("LLR Talons House", SCENE_LON_LON_BUILDINGS, false, {}, {}, { - LOCATION(RC_LLR_TALONS_CHICKENS, (logic->HasItem(RG_CHILD_WALLET) && (logic->IsChild && (logic->AtDay && logic->HasItem(RG_ZELDAS_LETTER))))), - LOCATION(RC_LLR_TALONS_HOUSE_POT_1, logic->CanBreakPots()), - LOCATION(RC_LLR_TALONS_HOUSE_POT_2, logic->CanBreakPots()), - LOCATION(RC_LLR_TALONS_HOUSE_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_LON_LON_RANCH, []{return true;}), -}); -areaTable[RR_LLR_STABLES] = Region("LLR Stables", SCENE_STABLE, false, {}, {}, { - LOCATION(RC_LLR_STABLES_LEFT_COW, logic->CanUse(RG_EPONAS_SONG)), - LOCATION(RC_LLR_STABLES_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)), -}, { - Entrance(RR_LON_LON_RANCH, []{return true;}), -}); -areaTable[RR_LLR_TOWER] = Region("LLR Tower", SCENE_LON_LON_BUILDINGS, false, {}, {}, { - LOCATION(RC_LLR_FREESTANDING_POH, logic->IsChild), - LOCATION(RC_LLR_TOWER_LEFT_COW, logic->CanUse(RG_EPONAS_SONG)), - LOCATION(RC_LLR_TOWER_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)), -}, { - Entrance(RR_LON_LON_RANCH, []{return true;}), -}); -areaTable[RR_LLR_GROTTO] = Region("LLR Grotto", SCENE_GROTTOS, false, {}, {}, { - LOCATION(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()), - LOCATION(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()), - LOCATION(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()), - LOCATION(RC_LLR_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()), -}, { - Entrance(RR_LON_LON_RANCH, []{return true;}), -}); -areaTable[RR_DEKU_TREE_ENTRYWAY] = Region("Deku Tree Entryway", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, {}, { - Entrance(RR_DEKU_TREE_LOBBY, []{return ctx->GetDungeon(Rando::DEKU_TREE)->IsVanilla();}), - Entrance(RR_DEKU_TREE_MQ_1F, []{return ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ();}), - Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Region("Dodongos Cavern Entryway", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_BEGINNING, []{return ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsVanilla();}), - Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ();}), - Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), -}); -areaTable[RR_JABU_JABUS_BELLY_ENTRYWAY] = Region("Jabu Jabus Belly Entryway", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, {}, { - Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsVanilla();}), - Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ();}), - Entrance(RR_ZORAS_FOUNTAIN, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Region("Forest Temple Entryway", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, []{return ctx->GetDungeon(Rando::FOREST_TEMPLE)->IsVanilla();}), - Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return ctx->GetDungeon(Rando::FOREST_TEMPLE)->IsMQ();}), - Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Region("Fire Temple Entryway", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla();}), - Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsMQ();}), - Entrance(RR_DMC_CENTRAL_LOCAL, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Region("Water Temple Entryway", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return (logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(Rando::WATER_TEMPLE)->IsVanilla());}), - Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return (logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(Rando::WATER_TEMPLE)->IsMQ());}), - Entrance(RR_LH_FROM_WATER_TEMPLE, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Region("Spirit Temple Entryway", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_LOBBY, []{return ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla();}), - Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ();}), - Entrance(RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, []{return true;}), -}); -areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Region("Shadow Temple Entryway", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, {}, { - Entrance(RR_SHADOW_TEMPLE_BEGINNING, []{return (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsVanilla() && (((bool)ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))));}), - Entrance(RR_SHADOW_TEMPLE_MQ_BEGINNING, []{return ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsMQ();}), - Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_ENTRYWAY] = Region("Bottom of the Well Entryway", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, {}, { - Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() && (logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA)));}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ() && logic->IsChild);}), - Entrance(RR_KAK_WELL, []{return true;}), -}); -areaTable[RR_ICE_CAVERN_ENTRYWAY] = Region("Ice Cavern Entryway", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, {}, {}, { - Entrance(RR_ICE_CAVERN_BEGINNING, []{return ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla();}), - Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return (ctx->GetDungeon(Rando::ICE_CAVERN)->IsMQ() && logic->CanUseProjectile());}), - Entrance(RR_ZF_LEDGE, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_ENTRYWAY] = Region("Gerudo Training Ground Entryway", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla();}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsMQ();}), - Entrance(RR_GF_EXITING_GTG, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Region("Ganon's Castle Entryway", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_LOBBY, []{return ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla();}), - Entrance(RR_GANONS_CASTLE_MQ_LOBBY, []{return ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ();}), - Entrance(RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE, []{return true;}), -}); -areaTable[RR_DEKU_TREE_LOBBY] = Region("Deku Tree Lobby", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_DEKU_TREE_MAP_CHEST, true), - LOCATION(RC_DEKU_TREE_LOBBY_LOWER_HEART, true), - LOCATION(RC_DEKU_TREE_LOBBY_UPPER_HEART, logic->CanPassEnemy(RE_BIG_SKULLTULA)), - LOCATION(RC_DEKU_TREE_LOBBY_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_LOBBY_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_LOBBY_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_LOBBY_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_LOBBY_GRASS_5, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}), - Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return true;}), - Entrance(RR_DEKU_TREE_COMPASS_ROOM, []{return true;}), - Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return Here(RR_DEKU_TREE_LOBBY, []{return (logic->CanAttack() || logic->CanUse(RG_NUTS));});}), - Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return false;}), - Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return false;}), -}); -areaTable[RR_DEKU_TREE_2F_MIDDLE_ROOM] = Region("Deku Tree 2F Middle Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, {}, { - Entrance(RR_DEKU_TREE_LOBBY, []{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return (logic->CanReflectNuts() || logic->CanUse(RG_MEGATON_HAMMER));});}), - Entrance(RR_DEKU_TREE_SLINGSHOT_ROOM, []{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return (logic->CanReflectNuts() || logic->CanUse(RG_MEGATON_HAMMER));});}), -}); -areaTable[RR_DEKU_TREE_SLINGSHOT_ROOM] = Region("Deku Tree Slingshot Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_SLINGSHOT_CHEST, true), - LOCATION(RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, true), - LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_1, (logic->CanCutShrubs() && logic->CanReflectNuts())), - LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_2, (logic->CanCutShrubs() && logic->CanReflectNuts())), - LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_3, (logic->CanCutShrubs() && logic->CanReflectNuts())), - LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_4, (logic->CanCutShrubs() && logic->CanReflectNuts())), -}, { - Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS));}), -}); -areaTable[RR_DEKU_TREE_COMPASS_ROOM] = Region("Deku Tree Compass Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_DEKU_TREE_COMPASS_CHEST, true), - LOCATION(RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, true), - LOCATION(RC_DEKU_TREE_GS_COMPASS_ROOM, logic->CanAttack()), - LOCATION(RC_DEKU_TREE_COMPASS_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_COMPASS_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_LOBBY, []{return (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));}), - Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return false;}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_LOWER] = Region("Deku Tree Basement Lower", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_DEKU_TREE_BASEMENT_CHEST, true), - LOCATION(RC_DEKU_TREE_GS_BASEMENT_GATE, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)), - LOCATION(RC_DEKU_TREE_GS_BASEMENT_VINES, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ((bool)ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS) ? ED_SHORT_JUMPSLASH : ED_BOMB_THROW))), - LOCATION(RC_DEKU_TREE_BASEMENT_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_BASEMENT_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_LOBBY, []{return true;}), - Entrance(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_LOWER, []{return (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));});}), - Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return (logic->IsAdult || ((bool)ctx->GetTrickOption(RT_DEKU_B1_SKIP) || HasAccessTo(RR_DEKU_TREE_BASEMENT_UPPER)));}), - Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return false;}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Region("Deku Tree Basement Scrub Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return true;}), - Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return Here(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return logic->CanHitEyeTargets();});}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT] = Region("Deku Tree Basement Water Room Front", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, {}, { - Entrance(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return true;}), - Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return (logic->HasItem(RG_BRONZE_SCALE) || (bool)ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG));}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree Basement Water Room Back", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return (logic->HasItem(RG_BRONZE_SCALE) || (bool)ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG));}), - Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_TORCH_ROOM] = Region("Deku Tree Basement Torch Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return true;}), - Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return Here(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));});}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_BACK_LOBBY] = Region("Deku Tree Basement Back Lobby", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}), - Entrance(RR_DEKU_TREE_BASEMENT_BACK_ROOM, []{return (Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));}) && Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->BlastOrSmash();}));}), - Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return (Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));}) && logic->IsChild);}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_BACK_ROOM] = Region("Deku Tree Basement Back Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM, logic->HookshotOrBoomerang()), -}, { - Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return true;}), -}); -areaTable[RR_DEKU_TREE_BASEMENT_UPPER] = Region("Deku Tree Basement Upper", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, {}, { - Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return true;}), - Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->IsChild;}), - Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_UPPER, []{return (logic->HasFireSourceWithTorch() || ((bool)ctx->GetTrickOption(RT_DEKU_B1_BOW_WEBS) && (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW))));});}), -}); -areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Region("Deku Tree Outside Boss Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, (logic->CanCutShrubs() && logic->HasFireSourceWithTorch())), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, (logic->CanCutShrubs() && logic->HasFireSourceWithTorch())), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, (logic->CanCutShrubs() && logic->HasFireSourceWithTorch())), -}, { - Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return true;}), - Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return ((logic->HasItem(RG_BRONZE_SCALE) || Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->CanUse(RG_IRON_BOOTS);})) && Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->CanReflectNuts();}));}), -}); -areaTable[RR_DEKU_TREE_MQ_1F] = Region("Deku Tree MQ 1F", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanKillEnemy(RE_WITHERED_DEKU_BABA);}), - EventAccess(&logic->BrokeDeku1FWeb, []{return logic->HasFireSource();}), -}, { - LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_5, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->BrokeDeku1FWeb;}), -}); -areaTable[RR_DEKU_TREE_MQ_2F] = Region("Deku Tree MQ 2F", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_MQ_MAP_CHEST, true), - LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_3F, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_2F, []{return logic->HasFireSource();});}), -}); -areaTable[RR_DEKU_TREE_MQ_3F] = Region("Deku Tree MQ 3F", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), - EventAccess(&logic->BrokeDeku1FWeb, []{return true;}), -}, { - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, logic->CanKillEnemy(RE_DEKU_BABA)), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, (logic->HasFireSourceWithTorch() || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)))), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, true), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, logic->CanBreakCrates()), -}, { - Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_3F, []{return (logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_BOW));});}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}), -}); -areaTable[RR_DEKU_TREE_MQ_EYE_TARGET_ROOM] = Region("Deku Tree MQ Eye Target Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, true), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return Here(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanHitEyeTargets();});}), - Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}), -}); -areaTable[RR_DEKU_TREE_MQ_COMPASS_ROOM] = Region("Deku Tree MQ Compass Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_MQ_COMPASS_CHEST, true), - LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_DEKU_TREE_MQ_PAST_BOULDER_VINES, []{return Here(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return (logic->CanUse(RG_BOMBCHU_5) || ((logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)))) || (logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_SONG_OF_TIME) || (bool)ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS)))));});}), -}); -areaTable[RR_DEKU_TREE_MQ_PAST_BOULDER_VINES] = Region("Deku Tree MQ Past Boulder Vines", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_MQ_GS_PAST_BOULDER_VINES, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, true), -}, { - Entrance(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return logic->BlastOrSmash();}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT] = Region("Deku Tree MQ Basement", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_CHEST, (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW))), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();});}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return (Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();}) && (logic->ClearedMQDekuSERoom && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanUse(RG_STICKS);})));}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return ((bool)ctx->GetTrickOption(RT_DEKU_B1_SKIP) || (logic->PushedDekuBasementBlock || (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))));}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM] = Region("Deku Tree MQ Southeast Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->ClearedMQDekuSERoom, []{return logic->CanKillEnemy(RE_MAD_SCRUB);}), -}, { - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasFireSource();}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->ClearedMQDekuSERoom;}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT] = Region("Deku Tree MQ Basement Water Room Front", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->MQDekuWaterRoomTorches, []{return (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_STICKS) && ((bool)ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()))));}), -}, { - LOCATION(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, true), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, []{return ((bool)ctx->GetTrickOption(RT_DEKU_MQ_LOG) || ((logic->IsChild && logic->CanShield()) || (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS)))));}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, []{return true;}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree MQ Basement Water Room Back", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanKillEnemy(RE_WITHERED_DEKU_BABA);}), - EventAccess(&logic->MQDekuWaterRoomTorches, []{return logic->HasFireSource();}), -}, { - LOCATION(RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, (logic->CanUse(RG_SONG_OF_TIME) && logic->CanPassEnemy(RE_BIG_SKULLTULA))), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return (logic->MQDekuWaterRoomTorches && logic->CanPassEnemy(RE_BIG_SKULLTULA, (logic->CanUse(RG_SONG_OF_TIME) ? ED_CLOSE : ED_SHORT_JUMPSLASH)));}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return ((bool)ctx->GetTrickOption(RT_DEKU_MQ_LOG) || ((logic->IsChild && logic->CanShield()) || (logic->CanUse(RG_LONGSHOT) || (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)))))));}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM] = Region("Deku Tree MQ Basement Southwest Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return (logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE));});}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return (logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE));});}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM] = Region("Deku Tree MQ Basement Grave Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)))), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return (logic->IsChild && Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));}));}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));});}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM] = Region("Deku Tree MQ Basement Back Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return true;}), -}); -areaTable[RR_DEKU_TREE_MQ_BASEMENT_LEDGE] = Region("Deku Tree MQ Basement Ledge", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, { - EventAccess(&logic->PushedDekuBasementBlock, []{return true;}), -}, { - LOCATION(RC_DEKU_TREE_MQ_DEKU_SCRUB, logic->CanStunDeku()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->IsChild;}), - Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}), - Entrance(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return (Here(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return (logic->HasFireSource() || logic->CanUse(RG_STICKS));}) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)));}), -}); -areaTable[RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] = Region("Deku Tree MQ Outside Boss Room", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, { - LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return Here(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return logic->CanReflectNuts();});}), -}); -areaTable[RR_DEKU_TREE_BOSS_ENTRYWAY] = Region("Deku Tree Boss Entryway", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, {}, { - Entrance(RR_DEKU_TREE_BOSS_ROOM, []{return true;}), -}); -areaTable[RR_DEKU_TREE_BOSS_EXIT] = Region("Deku Tree Boss Exit", SCENE_DEKU_TREE, false, {RA_DEKU_TREE}, {}, {}, { - Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return ctx->GetDungeon(Rando::DEKU_TREE)->IsVanilla();}), - Entrance(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ();}), -}); -areaTable[RR_DEKU_TREE_BOSS_ROOM] = Region("Deku Tree Boss Room", SCENE_DEKU_TREE_BOSS, false, {}, { - EventAccess(&logic->DekuTreeClear, []{return logic->CanKillEnemy(RE_GOHMA);}), -}, { - LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_HEART, logic->DekuTreeClear), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, logic->CanCutShrubs()), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, logic->CanCutShrubs()), -}, { - Entrance(RR_DEKU_TREE_BOSS_EXIT, []{return true;}), - Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, false), -}); -areaTable[RR_DODONGOS_CAVERN_BEGINNING] = Region("Dodongos Cavern Beginning", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return Here(RR_DODONGOS_CAVERN_BEGINNING, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));});}), -}); -areaTable[RR_DODONGOS_CAVERN_LOBBY] = Region("Dodongos Cavern Lobby", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->GossipStoneFairy, []{return ((Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls();}) || logic->HasItem(RG_GORONS_BRACELET)) && logic->CallGossipFairy());}), -}, { - LOCATION(RC_DODONGOS_CAVERN_MAP_CHEST, Here(RR_DODONGOS_CAVERN_LOBBY, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));})), - LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, (logic->CanStunDeku() || logic->HasItem(RG_GORONS_BRACELET))), - LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, (Here(RR_DODONGOS_CAVERN_LOBBY, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));}) && logic->CallGossipFairy())), - LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, (Here(RR_DODONGOS_CAVERN_LOBBY, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));}) && logic->CanUse(RG_SONG_OF_STORMS))), - LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE, Here(RR_DODONGOS_CAVERN_LOBBY, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));})), -}, { - Entrance(RR_DODONGOS_CAVERN_BEGINNING, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, []{return logic->IsAdult;}), - Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return Here(RR_DODONGOS_CAVERN_LOBBY, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));});}), - Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return HasAccessTo(RR_DODONGOS_CAVERN_LOBBY_SWITCH);}), - Entrance(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return HasAccessTo(RR_DODONGOS_CAVERN_FAR_BRIDGE);}), - Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->HasExplosives();});}), - Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return false;}), -}); -areaTable[RR_DODONGOS_CAVERN_LOBBY_SWITCH] = Region("Dodongos Cavern Lobby Switch", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_SE_CORRIDOR] = Region("Dodongos Cavern SE Corridor", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_GS_SCARECROW, (logic->CanUse(RG_SCARECROW) || ((logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || ((bool)ctx->GetTrickOption(RT_DC_SCARECROW_GS) && logic->CanAttack())))), - LOCATION(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_SE_ROOM, []{return Here(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return (logic->CanBreakMudWalls() || (logic->CanAttack() || (logic->TakeDamage() && logic->CanShield())));});}), - Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_SE_ROOM] = Region("Dodongos Cavern SE Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, logic->CanAttack()), -}, { - Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS] = Region("Dodongos Cavern Near Lower Lizalfos", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_LOWER_LIZALFOS] = Region("Dodongos Cavern Lower Lizalfos", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_LIZALFOS_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_LIZALFOS_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_LIZALFOS_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_LIZALFOS_POT_4, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, true), -}, { - Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), - Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_DODONGOS_CAVERN_DODONGO_ROOM] = Region("Dodongos Cavern Dodongo Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, []{return logic->HasFireSourceWithTorch();}), - Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));});}), -}); -areaTable[RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM] = Region("Dodongos Cavern Near Dodongo Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, logic->CanStunDeku()), -}, { - Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_STAIRS_LOWER] = Region("Dodongos Cavern Stairs Lower", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return (logic->HasExplosives() || (logic->HasItem(RG_GORONS_BRACELET) || (logic->CanUse(RG_DINS_FIRE) || ((bool)ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW)))));}), - Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, []{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));});}), -}); -areaTable[RR_DODONGOS_CAVERN_STAIRS_UPPER] = Region("Dodongos Cavern Stairs Upper", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, (Here(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return logic->HookshotOrBoomerang();}) || logic->CanUse(RG_LONGSHOT))), - LOCATION(RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, (logic->IsAdult || (logic->CanAttack() || (HasAccessTo(RR_DODONGOS_CAVERN_STAIRS_LOWER) && (logic->CanUse(RG_LONGSHOT) && (bool)ctx->GetTrickOption(RT_DC_VINES_GS)))))), - LOCATION(RC_DODONGOS_CAVERN_STAIRCASE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_STAIRCASE_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_STAIRCASE_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_STAIRCASE_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_COMPASS_ROOM] = Region("Dodongos Cavern Compass Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_COMPASS_CHEST, true), -}, { - Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return (logic->CanUse(RG_MASTER_SWORD) || (logic->CanUse(RG_BIGGORON_SWORD) || (logic->CanUse(RG_MEGATON_HAMMER) || (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))));}), -}); -areaTable[RR_DODONGOS_CAVERN_ARMOS_ROOM] = Region("Dodongos Cavern Armos Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER] = Region("Dodongos Cavern Bomb Room Lower", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, true), - LOCATION(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, true), - LOCATION(RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, logic->CanCutShrubs()), - LOCATION(RC_DODONGOS_CAVERN_BLADE_GRASS, logic->CanCutShrubs()), -}, { - Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_2F_SIDE_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return (logic->CanBreakMudWalls() || ((bool)ctx->GetTrickOption(RT_DC_SCRUB_ROOM) && logic->HasItem(RG_GORONS_BRACELET)));});}), - Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));});}), - Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, []{return ((logic->IsAdult && (bool)ctx->GetTrickOption(RT_DC_JUMP)) || (logic->CanUse(RG_HOVER_BOOTS) || ((logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && (logic->HasExplosives() && logic->CanJumpslash())))));}), -}); -areaTable[RR_DODONGOS_CAVERN_2F_SIDE_ROOM] = Region("Dodongos Cavern 2F Side Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, logic->CanStunDeku()), - LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, logic->CanStunDeku()), -}, { - Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM] = Region("Dodongos Cavern First Slingshot Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, logic->CanCutShrubs()), -}, { - Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, []{return (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_FAIRY_BOW) || (bool)ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP)));}), -}); -areaTable[RR_DODONGOS_CAVERN_UPPER_LIZALFOS] = Region("Dodongos Cavern Upper Lizalfos", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, true), - LOCATION(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, true), - LOCATION(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, true), -}, { - Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), - Entrance(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM] = Region("Dodongos Cavern Second Slingshot Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, []{return (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_FAIRY_BOW) || (bool)ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP)));}), -}); -areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER] = Region("Dodongos Cavern Bomb Room Upper", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, true), - LOCATION(RC_DODONGOS_CAVERN_BLADE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_BLADE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_FAR_BRIDGE] = Region("Dodongos Cavern Far Bridge", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return logic->CanBreakMudWalls();})), -}, { - Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_BOSS_AREA] = Region("Dodongos Cavern Boss Region", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, logic->CanCutShrubs()), -}, { - Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_BACK_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOSS_AREA, []{return logic->CanBreakMudWalls();});}), - Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_BACK_ROOM] = Region("Dodongos Cavern Back Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_GS_BACK_ROOM, logic->CanAttack()), - LOCATION(RC_DODONGOS_CAVERN_BACK_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_BEGINNING] = Region("Dodongos Cavern MQ Beginning", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return Here(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_LOBBY] = Region("Dodongos Cavern MQ Lobby", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_MAP_CHEST, (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET))), - LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, logic->CanStunDeku()), - LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, logic->CanStunDeku()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET));});}), - Entrance(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return (logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET));});}), - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return (logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET));});}), - Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return (Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->CanBreakMudWalls();}) || Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return (logic->HasItem(RG_GORONS_BRACELET) && logic->TakeDamage());}));}), - Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->IsAdult;}), - Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return (logic->HasExplosives() || (logic->ClearMQDCUpperLobbyRocks && (logic->HasItem(RG_GORONS_BRACELET) && ((logic->IsAdult && (bool)ctx->GetTrickOption(RT_DC_MQ_ADULT_EYES)) || (logic->IsChild && (bool)ctx->GetTrickOption(RT_DC_MQ_CHILD_EYES))))));});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE] = Region("Dodongos Cavern MQ Gossip Stone", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), -}, { - LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE, true), - LOCATION(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), - LOCATION(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE] = Region("Dodongos Cavern MQ Mouth Side Bridge", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->ClearMQDCUpperLobbyRocks, []{return (logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE));}), -}, {}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->ClearMQDCUpperLobbyRocks;}), - Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return (logic->CanUse(RG_HOVER_BOOTS) || ((bool)ctx->GetTrickOption(RT_DC_MQ_CHILD_BOMBS) && (logic->CanJumpslashExceptHammer() && logic->TakeDamage())));}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL] = Region("Dodongos Cavern MQ Stairs Past Mud Wall", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), -}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA))), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return (logic->HasExplosives() || ((logic->HasItem(RG_GORONS_BRACELET) && (logic->CanUse(RG_STICKS) || (bool)ctx->GetTrickOption(RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH))) || (logic->CanUse(RG_DINS_FIRE) || ((bool)ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW)))));}), - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER] = Region("Dodongos Cavern MQ Stairs Lower", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, logic->CanBreakCrates()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return (logic->HasExplosives() || (logic->CanUse(RG_DINS_FIRE) || ((bool)ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW))));});}), - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->CanBreakMudWalls();});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER] = Region("Dodongos Cavern MQ Stairs Upper", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, logic->CanBreakCrates()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, []{return (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->CanUse(RG_HOVER_BOOTS));}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS] = Region("Dodongos Cavern MQ Past Big Skulltulas", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->TakeDamage();}), - Entrance(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM] = Region("Dodongos Cavern MQ Dodongo Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, (logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET))), - LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return Here(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return (logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET));});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER] = Region("Dodongos Cavern MQ Torch Puzzle Lower", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->ClearMQDCUpperLobbyRocks, []{return (((logic->IsAdult && (bool)ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_STICKS));}), -}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, true), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->TakeDamage();}), - Entrance(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, []{return logic->HasFireSourceWithTorch();}), - Entrance(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->HasFireSourceWithTorch();});}), - Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return ((logic->IsAdult && (bool)ctx->GetTrickOption(RT_DC_JUMP)) || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return (logic->CanUse(RG_STICKS) && logic->HasItem(RG_GORONS_BRACELET));}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM] = Region("Dodongos Cavern MQ Torch Puzzle Lower", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}), - Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return ((logic->HasFireSource() && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanBreakMudWalls());}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM] = Region("Dodongos Cavern MQ Larvae Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, true), - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, logic->CanBreakCrates()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS] = Region("Dodongos Cavern MQ Before Upper Lizalfos", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, logic->BlastOrSmash()), - LOCATION(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, logic->BlastOrSmash()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}), - Entrance(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM] = Region("Dodongos Cavern MQ Before Upper Lizalfos", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, logic->CanBreakCrates()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return (logic->IsAdult || Here(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, []{return (logic->BlastOrSmash() || (logic->CanAttack() && logic->HasItem(RG_GORONS_BRACELET)));}));}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER] = Region("Dodongos Cavern MQ Torch Puzzle Upper", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->ClearMQDCUpperLobbyRocks, []{return (logic->CanDetonateUprightBombFlower() || logic->CanUse(RG_MEGATON_HAMMER));}), -}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST, true), - LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, []{return logic->ClearMQDCUpperLobbyRocks;}), - Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Region("Dodongos Cavern MQ Lower Right Side", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, ((logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)) && logic->CanStunDeku())), - LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return (Here(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return (logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET));}) && logic->CanHitEyeTargets());}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS] = Region("Dodongos Cavern MQ Lower Lizalfos", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, true), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}), - Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_POES_ROOM] = Region("Dodongos Cavern MQ Poes Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, true), - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return (logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET));}) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG, true))), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, logic->CanBreakCrates()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return (logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET));});}), - Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return (logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET));});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM] = Region("Dodongos Cavern Mad Scrub Room", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG, true)), - LOCATION(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, []{return (logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB));});}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH] = Region("Dodongos Cavern MQ Behind Mouth", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, logic->CanBreakPots()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return logic->IsAdult;}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE] = Region("Dodongos Cavern MQ Back Behind Fire", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, true), - LOCATION(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, logic->CanCutShrubs()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return logic->CanAttack();}), - Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return (Here(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return logic->CanDetonateBombFlowers();}) || Here(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return logic->CanAttack();}));}), -}); -areaTable[RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE] = Region("Dodongos Cavern MQ BossArea", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA, (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) || (logic->HasItem(RG_GORONS_BRACELET) || Here(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));})))), - LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, logic->CanCutShrubs()), -}, { - Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_BOSS_ENTRYWAY] = Region("Dodongos Cavern Boss Entryway", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return true;}), -}); -areaTable[RR_DODONGOS_CAVERN_BOSS_EXIT] = Region("Dodongos Cavern Boss Exit", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { - Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsVanilla();}), - Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ();}), -}); -areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] = Region("Dodongos Cavern Boss Room", SCENE_DODONGOS_CAVERN_BOSS, false, {}, { - EventAccess(&logic->DodongosCavernClear, []{return (Here(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return (logic->HasExplosives() || ((bool)ctx->GetTrickOption(RT_DC_HAMMER_FLOOR) ? (logic->CanUse(RG_MEGATON_HAMMER) || ((bool)ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->BlueFire())) : ((bool)ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE))));}) && logic->CanKillEnemy(RE_KING_DODONGO));}), -}, { - LOCATION(RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, true), - LOCATION(RC_DODONGOS_CAVERN_KING_DODONGO_HEART, logic->DodongosCavernClear), - LOCATION(RC_KING_DODONGO, logic->DodongosCavernClear), -}, { - Entrance(RR_DODONGOS_CAVERN_BOSS_EXIT, []{return true;}), - Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, false), -}); -areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Region("Jabu Jabus Belly Beginning", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, {}, { - Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->CanUseProjectile();}), -}); -areaTable[RR_JABU_JABUS_BELLY_MAIN] = Region("Jabu Jabus Belly Main", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->JabuWestTentacle, []{return (logic->JabuRutoIn1F && logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG));}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, (logic->HasItem(RG_BRONZE_SCALE) && ((logic->IsChild || (logic->HasItem(RG_SILVER_SCALE) || ((bool)ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)))) && logic->CanStunDeku()))), - LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, logic->JabuRutoIn1F), - LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle), - LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->JabuWestTentacle;}), - Entrance(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return logic->JabuWestTentacle;}), - Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return logic->JabuEastTentacle;}), - Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->JabuNorthTentacle;}), - Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return (logic->LoweredJabuPath || ((bool)ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS)));}), -}); -areaTable[RR_JABU_JABUS_BELLY_B1_NORTH] = Region("Jabu Jabus Belly B1 North", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->JabuRutoIn1F, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE));}), - EventAccess(&logic->FairyPot, []{return (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK)));}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, logic->HookshotOrBoomerang()), - LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->HookshotOrBoomerang()), - LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()), - LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))), - LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))), - LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))), - LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))), - LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))), -}, { - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE));}), -}); -areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH] = Region("Jabu Jabus Belly Water Switch Room South", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()), -}, { - Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE));}), - Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->CanUseProjectile();}), -}); -areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE] = Region("Jabu Jabus Belly Water Switch Room Ledge", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, (logic->HasItem(RG_BRONZE_SCALE) || ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW)))), - LOCATION(RC_JABU_JABUS_BELLY_BASEMENT_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BASEMENT_POT_2, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BASEMENT_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return true;}), -}); -areaTable[RR_JABU_JABUS_BELLY_COMPASS_ROOM] = Region("Jabu Jabus Belly Compass Room", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_COMPASS_CHEST, logic->CanKillEnemy(RE_SHABOM)), -}, { - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return Here(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->CanKillEnemy(RE_SHABOM);});}), -}); -areaTable[RR_JABU_JABUS_BELLY_BLUE_TENTACLE] = Region("Jabu Jabus Belly Blue Tentacle", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->JabuEastTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}), -}, {}, { - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->JabuEastTentacle;}), -}); -areaTable[RR_JABU_JABUS_BELLY_GREEN_TENTACLE] = Region("Jabu Jabus Belly Green Tentacle", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->JabuNorthTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}), -}, {}, { - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->JabuNorthTentacle;}), -}); -areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE] = Region("Jabu Jabus Belly Bigocto Room", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, (logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH))), -}, { - Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, []{return (logic->JabuRutoIn1F && Here(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->CanKillEnemy(RE_BIG_OCTO);}));}), -}); -areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly Above Bigocto", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->FairyPot, []{return true;}), - EventAccess(&logic->NutPot, []{return true;}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, []{return logic->CanUse(RG_BOOMERANG);}), -}); -areaTable[RR_JABU_JABUS_BELLY_LIFT_UPPER] = Region("Jabu Jabus Belly Lift Upper", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->LoweredJabuPath, []{return true;}), -}, {}, { - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}), -}); -areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Region("Jabu Jabus Belly Near Boss Room", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW)), -}, { - Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return (logic->CanUse(RG_BOOMERANG) || (((bool)ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) || ((bool)ctx->GetTrickOption(RT_JABU_NEAR_BOSS_EXPLOSIVES) && (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_BOMB_BAG))))));}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_BEGINNING] = Region("Jabu Jabus Belly MQ Beginning", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->NutPot, []{return true;}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, logic->BlastOrSmash()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return Here(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM] = Region("Jabu Jabus Belly MQ Lift Room", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->MQJabuLiftRoomCow, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, true), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, true), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, true), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, logic->CanUse(RG_IRON_BOOTS)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, logic->CanUse(RG_IRON_BOOTS)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, logic->CanUse(RG_IRON_BOOTS)), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE, []{return (logic->HasItem(RG_SILVER_SCALE) || (logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || (logic->CanUse(RG_IRON_BOOTS) || (bool)ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE)))));}), - Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->MQJabuHolesRoomDoor;}), - Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return (logic->LoweredJabuPath || (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_HOOKSHOT) && logic->MQJabuLiftRoomCow)));}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE] = Region("Jabu Jabus Belly MQ Lift Room East Ledge", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, logic->MQJabuLiftRoomCow), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return logic->JabuNorthTentacle;}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE] = Region("Jabu Jabus Belly MQ Underwater Alcove", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->MQJabuHolesRoomDoor, []{return true;}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_COMPASS_CHEST, (logic->CanHitSwitch(ED_HOOKSHOT, true) || ((bool)ctx->GetTrickOption(RT_JABU_MQ_RANG_JUMP) && (logic->CanUse(RG_BOOMERANG) && logic->HasItem(RG_BRONZE_SCALE))))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, (logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG))), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->HasItem(RG_BRONZE_SCALE);}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM] = Region("Jabu Jabus Belly MQ Holes Room", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, (logic->CanCutShrubs() && logic->HasExplosives())), - LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, (logic->CanCutShrubs() && logic->HasExplosives())), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, logic->CanCutShrubs()), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return (logic->CanUse(RG_BOOMERANG) && (logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);})));}), - Entrance(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, []{return logic->JabuNorthTentacle;}), - Entrance(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return (logic->JabuWestTentacle && (Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanKillEnemy(RE_BIG_OCTO);}) && logic->CanUse(RG_FAIRY_SLINGSHOT)));}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM] = Region("Jabu Jabus Belly MQ Water Switch Room", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, true), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, logic->CanKillEnemy(RE_LIZALFOS)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, ((logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)) || ((bool)ctx->GetTrickOption(RT_JABU_MQ_SOT_GS) && logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, logic->CanCutShrubs()), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);});}), - Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return ((logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)) && Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);}));}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR] = Region("Jabu Jabus Belly MQ Forked Corridor", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->JabuNorthTentacle, []{return (Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->BlastOrSmash();}) && logic->CanUse(RG_BOOMERANG));}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}), - Entrance(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, []{return (Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG);}) && (Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return (logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanUse(RG_STICKS));}) || Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->HasFireSource();})));}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS] = Region("Jabu Jabus Belly MQ West Forked Rooms", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->JabuWestTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, (Here(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, []{return logic->HasExplosives();}) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG))), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM] = Region("Jabu Jabus Belly MQ Invisible Keese Room", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONGSHOT)) || (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && ((logic->CanUse(RG_HOVER_BOOTS) || Here(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, []{return (((bool)ctx->GetTrickOption(RT_LENS_JABU_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanKillEnemy(RE_STINGER, ED_BOOMERANG, false, 2, false, true) && (logic->CanKillEnemy(RE_KEESE, ED_LONGSHOT, false) || ((bool)ctx->GetTrickOption(RT_LENS_JABU_MQ) && (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS))))));})) && ((logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)) || (logic->IsAdult && logic->CanUse(RG_IRON_BOOTS))))))), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return ((logic->JabuNorthTentacle || logic->TakeDamage()) && logic->HasItem(RG_BRONZE_SCALE));}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_PAST_OCTO] = Region("Jabu Jabus Belly MQ Past Octo", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->LoweredJabuPath, []{return (logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT));}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, (logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_GRASS, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_1, (logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates())), - LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_2, (logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates())), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return (logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT));}), - Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return (logic->TakeDamage() && Here(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);}));}), -}); -areaTable[RR_JABU_JABUS_BELLY_MQ_EAST_ROOM] = Region("Jabu Jabus Belly MQ Boss Region", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, (logic->CanUse(RG_BOOMERANG) || ((bool)ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()), -}, { - Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return true;}), - Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return Here(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}), -}); -areaTable[RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY] = Region("Jabu Jabus Belly Boss Entryway", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, {}, { - Entrance(RR_JABU_JABUS_BELLY_BOSS_ROOM, []{return true;}), -}); -areaTable[RR_JABU_JABUS_BELLY_BOSS_EXIT] = Region("Jabu Jabus Belly Boss Exit", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, {}, { - Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsVanilla();}), - Entrance(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ();}), -}); -areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] = Region("Jabu Jabus Belly Boss Room", SCENE_JABU_JABU_BOSS, false, {}, { - EventAccess(&logic->JabuJabusBellyClear, []{return logic->CanKillEnemy(RE_BARINADE);}), -}, { - LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_2, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_3, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_4, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_5, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_6, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_BARINADE_HEART, logic->JabuJabusBellyClear), - LOCATION(RC_BARINADE, logic->JabuJabusBellyClear), -}, { - Entrance(RR_JABU_JABUS_BELLY_BOSS_EXIT, []{return false;}), - Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, false), -}); -areaTable[RR_FOREST_TEMPLE_FIRST_ROOM] = Region("Forest Temple First Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, true), - LOCATION(RC_FOREST_TEMPLE_GS_FIRST_ROOM, ((logic->IsAdult && logic->CanUse(RG_BOMB_BAG)) || (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_DINS_FIRE) || ((bool)ctx->GetTrickOption(RT_FOREST_FIRST_GS) && (logic->CanJumpslashExceptHammer() || (logic->IsChild && logic->CanUse(RG_BOMB_BAG)))))))))))), -}, { - Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_SOUTH_CORRIDOR] = Region("Forest Temple South Corridor", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, []{return true;}), - Entrance(RR_FOREST_TEMPLE_LOBBY, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}), -}); -areaTable[RR_FOREST_TEMPLE_LOBBY] = Region("Forest Temple Lobby", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleMeg, []{return (logic->ForestTempleJoelle && (logic->ForestTempleBeth && (logic->ForestTempleAmy && logic->CanUse(RG_FAIRY_BOW))));}), -}, { - LOCATION(RC_FOREST_TEMPLE_GS_LOBBY, logic->HookshotOrBoomerang()), - LOCATION(RC_FOREST_TEMPLE_LOBBY_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_LOBBY_POT_2, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_LOBBY_POT_3, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_LOBBY_POT_4, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_LOBBY_POT_5, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_LOBBY_POT_6, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, []{return true;}), - Entrance(RR_FOREST_TEMPLE_NORTH_CORRIDOR, []{return true;}), - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return (logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild);}), - Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT));}), - Entrance(RR_FOREST_TEMPLE_WEST_CORRIDOR, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 1, 5);}), - Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, []{return false;}), - Entrance(RR_FOREST_TEMPLE_BOSS_REGION, []{return logic->ForestTempleMeg;}), - Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}), -}); -areaTable[RR_FOREST_TEMPLE_NORTH_CORRIDOR] = Region("Forest Temple North Corridor", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_LOBBY, []{return true;}), - Entrance(RR_FOREST_TEMPLE_LOWER_STALFOS, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_LOWER_STALFOS] = Region("Forest Temple Lower Stalfos", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)), - LOCATION(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_NORTH_CORRIDOR, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER] = Region("Forest Temple NW Outdoors Lower", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD, (logic->CanUse(RG_LONGSHOT) || Here(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return logic->HookshotOrBoomerang();}))), - LOCATION(RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, (logic->CanUse(RG_BOOMERANG) && (bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), - LOCATION(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, (logic->CanUse(RG_BOOMERANG) && (bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), -}, { - Entrance(RR_FOREST_TEMPLE_LOBBY, []{return logic->CanUse(RG_SONG_OF_TIME);}), - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return ((bool)ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && (logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS))));}), - Entrance(RR_FOREST_TEMPLE_MAP_ROOM, []{return true;}), - Entrance(RR_FOREST_TEMPLE_SEWER, []{return (logic->HasItem(RG_GOLDEN_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER)));}), - Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}), -}); -areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER] = Region("Forest Temple NW Outdoors Upper", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, true), - LOCATION(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, true), -}, { - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return true;}), - Entrance(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return true;}), - Entrance(RR_FOREST_TEMPLE_FLOORMASTER_ROOM, []{return true;}), - Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER] = Region("Forest Temple NE Outdoors Lower", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST, (logic->CanUse(RG_HOOKSHOT) || (HasAccessTo(RR_FOREST_TEMPLE_FALLING_ROOM) || (HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) && (logic->IsAdult && ((bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_LEDGE) && logic->CanUse(RG_HOVER_BOOTS))))))), - LOCATION(RC_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD, (logic->CanUse(RG_HOOKSHOT) || (((bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_EAST_GS) && logic->CanUse(RG_BOOMERANG)) || Here(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_DINS_FIRE) || logic->HasExplosives())));})))), -}, { - Entrance(RR_FOREST_TEMPLE_LOBBY, []{return true;}), - Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, []{return (logic->CanUse(RG_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_FOREST_VINES) && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_FOREST_TEMPLE_SEWER, []{return (logic->HasItem(RG_GOLDEN_SCALE) || (logic->CanUse(RG_IRON_BOOTS) || HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER)));}), - Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return false;}), -}); -areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER] = Region("Forest Temple NE Outdoors Upper", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, {}, { - Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return true;}), - Entrance(RR_FOREST_TEMPLE_MAP_ROOM, []{return true;}), - Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return ((bool)ctx->GetTrickOption(RT_FOREST_DOORFRAME) && (logic->CanJumpslashExceptHammer() && (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_SCARECROW))));}), -}); -areaTable[RR_FOREST_TEMPLE_MAP_ROOM] = Region("Forest Temple Map Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MAP_CHEST, logic->CanKillEnemy(RE_BLUE_BUBBLE)), -}, { - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);});}), - Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, []{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);});}), -}); -areaTable[RR_FOREST_TEMPLE_SEWER] = Region("Forest Temple Sewer", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_WELL_CHEST, (HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanOpenUnderwaterChest() && (logic->WaterTimer() >= 8)))), - LOCATION(RC_FOREST_TEMPLE_WELL_WEST_HEART, (HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)))), - LOCATION(RC_FOREST_TEMPLE_WELL_EAST_HEART, (HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)))), -}, { - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return true;}), - Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST] = Region("Forest Temple Below Boss Key Chest", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return Here(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);});}), -}); -areaTable[RR_FOREST_TEMPLE_FLOORMASTER_ROOM] = Region("Forest Temple Floormaster Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_FLOORMASTER_CHEST, logic->CanDamage()), -}, { - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_WEST_CORRIDOR] = Region("Forest Temple West Corridor", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_LOBBY, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 1, 5);}), - Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return (logic->CanAttack() || logic->CanUse(RG_NUTS));}), -}); -areaTable[RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM] = Region("Forest Temple Block Push Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_EYE_SWITCH_CHEST, (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))), -}, { - Entrance(RR_FOREST_TEMPLE_WEST_CORRIDOR, []{return true;}), - Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return (logic->CanUse(RG_HOVER_BOOTS) || ((bool)ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && (logic->CanJumpslashExceptHammer() && logic->HasItem(RG_GORONS_BRACELET))));}), - Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, []{return (logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) && logic->SmallKeys(RR_FOREST_TEMPLE, 2)));}), - Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED, []{return (logic->IsAdult && ((logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)) && (logic->HasItem(RG_GORONS_BRACELET) && logic->SmallKeys(RR_FOREST_TEMPLE, 2))));}), -}); -areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED] = Region("Forest Temple NW Corridor Twisted", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 2);}), - Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}), -}); -areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED] = Region("Forest Temple NW Corridor Straightened", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_BOSS_KEY_CHEST, true), -}, { - Entrance(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return true;}), - Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 2);}), -}); -areaTable[RR_FOREST_TEMPLE_RED_POE_ROOM] = Region("Forest Temple Red Poe Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleJoelle, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, { - LOCATION(RC_FOREST_TEMPLE_RED_POE_CHEST, logic->ForestTempleJoelle), -}, { - Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}), - Entrance(RR_FOREST_TEMPLE_UPPER_STALFOS, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_UPPER_STALFOS] = Region("Forest Temple Upper Stalfos", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_BOW_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)), - LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}), - Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}), -}); -areaTable[RR_FOREST_TEMPLE_BLUE_POE_ROOM] = Region("Forest Temple Blue Poe Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleBeth, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, { - LOCATION(RC_FOREST_TEMPLE_BLUE_POE_CHEST, logic->ForestTempleBeth), - LOCATION(RC_FOREST_TEMPLE_BLUE_POE_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_BLUE_POE_POT_2, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_BLUE_POE_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_UPPER_STALFOS, []{return true;}), - Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 4);}), -}); -areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED] = Region("Forest Temple NE Corridor Straightened", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 4);}), - Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5);}), -}); -areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED] = Region("Forest Temple NE Corridor Twisted", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5);}), - Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_FROZEN_EYE_ROOM] = Region("Forest Temple Frozen Eye Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5);}), - Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED, []{return (logic->SmallKeys(RR_FOREST_TEMPLE, 5) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE)));}), -}); -areaTable[RR_FOREST_TEMPLE_FALLING_ROOM] = Region("Forest Temple Falling Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, true), -}, { - Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return true;}), - Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_GREEN_POE_ROOM] = Region("Forest Temple Green Poe Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleAmy, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, { - LOCATION(RC_FOREST_TEMPLE_GREEN_POE_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_GREEN_POE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return true;}), - Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, []{return logic->ForestTempleAmy;}), -}); -areaTable[RR_FOREST_TEMPLE_EAST_CORRIDOR] = Region("Forest Temple East Corridor", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_LOBBY, []{return (logic->CanAttack() || logic->CanUse(RG_NUTS));}), - Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, []{return (logic->CanAttack() || logic->CanUse(RG_NUTS));}), -}); -areaTable[RR_FOREST_TEMPLE_BOSS_REGION] = Region("Forest Temple Boss Region", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_BASEMENT_CHEST, true), - LOCATION(RC_FOREST_TEMPLE_GS_BASEMENT, logic->HookshotOrBoomerang()), -}, { - Entrance(RR_FOREST_TEMPLE_LOBBY, []{return true;}), - Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_LOBBY] = Region("Forest Temple MQ Lobby", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, (logic->CanPassEnemy(RE_BIG_SKULLTULA, ED_SHORT_JUMPSLASH, false) || logic->CanUse(RG_HOVER_BOOTS))), - LOCATION(RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, logic->HookshotOrBoomerang()), -}, { - Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return (logic->SmallKeys(RR_FOREST_TEMPLE, 1) && logic->CanPassEnemy(RE_BIG_SKULLTULA));}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_CENTRAL_AREA] = Region("Forest Temple MQ Central Region", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleMeg, []{return (logic->ForestTempleJoelle && (logic->ForestTempleBeth && (logic->ForestTempleAmy && logic->CanKillEnemy(RE_MEG))));}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_2, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_3, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_4, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_5, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, []{return (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME));}), - Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->CanHitEyeTargets();}), - Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return logic->CanHitEyeTargets();}), - Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return Here(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->CanKillEnemy(RE_STALFOS);});}), - Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->ForestTempleMeg;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM] = Region("Forest Temple MQ Wolfos Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), - EventAccess(&logic->ForestClearBelowBowChest, []{return logic->CanKillEnemy(RE_WOLFOS);}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST, logic->ForestClearBelowBowChest), - LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return (logic->ForestClearBelowBowChest && (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)));}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE] = Region("Forest Temple MQ Lower Block Puzzle", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->MQForestBlockRoomTargets, []{return ((bool)ctx->GetTrickOption(RT_FOREST_MQ_BLOCK_PUZZLE) && logic->CanUse(RG_BOMBCHU_5));}), - EventAccess(&logic->ForestCanTwistHallway, []{return ((((bool)ctx->GetTrickOption(RT_FOREST_MQ_JS_HALLWAY_SWITCH) && (logic->CanUse(RG_HOVER_BOOTS) && (logic->IsAdult && logic->CanJumpslash()))) || (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_BIGGORON_SWORD) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_MASTER_SWORD))))) || (((bool)ctx->GetTrickOption(RT_FOREST_MQ_RANG_HALLWAY_SWITCH) && logic->CanUse(RG_BOOMERANG)) || ((bool)ctx->GetTrickOption(RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH) && logic->CanUse(RG_HOOKSHOT))));}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return Here(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return logic->CanKillEnemy(RE_STALFOS);});}), - Entrance(RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE, []{return (logic->HasItem(RG_GORONS_BRACELET) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return ((logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return (logic->ForestCanTwistHallway && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)));}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE] = Region("Forest Temple MQ Middle Block Puzzle", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->MQForestBlockRoomTargets, []{return (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_LONGSHOT)));}), - EventAccess(&logic->ForestCanTwistHallway, []{return (((bool)ctx->GetTrickOption(RT_FOREST_MQ_JS_HALLWAY_SWITCH) && (logic->IsAdult && logic->CanJumpslash())) || (logic->CanUse(RG_HOVER_BOOTS) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MASTER_SWORD)))));}), -}, {}, { - Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return true;}), - Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return ((logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return ((logic->ForestCanTwistHallway && logic->CanUse(RG_HOVER_BOOTS)) || ((bool)ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && (logic->CanJumpslashExceptHammer() || (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)))));}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE] = Region("Forest Temple MQ After Block Puzzle", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, logic->SmallKeys(RR_FOREST_TEMPLE, 3)), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}), - Entrance(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, []{return (logic->ForestCanTwistHallway && logic->SmallKeys(RR_FOREST_TEMPLE, 4));}), - Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return (logic->SmallKeys(RR_FOREST_TEMPLE, 2) && Here(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return logic->CanKillEnemy(RE_FLOORMASTER);}));}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY] = Region("Forest Temple MQ Straight Hallway", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, logic->SmallKeys(RR_FOREST_TEMPLE, 3)), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM] = Region("Forest Temple MQ Floormaster Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return Here(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE] = Region("Forest Temple MQ Outdoor Ledge", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestCanTwistHallway, []{return logic->CanHitSwitch();}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, logic->CanKillEnemy(RE_REDEAD)), - LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, true), - LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, true), - LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, true), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_NW_OUTDOORS] = Region("Forest Temple MQ NW Outdoors", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_FOREST_TEMPLE_MQ_GS_WELL, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 8) && logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, (logic->CanUse(RG_BOOMERANG) && (bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), - LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, (logic->CanUse(RG_BOOMERANG) && (bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), - LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, (logic->CanUse(RG_BOOMERANG) && (bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), - LOCATION(RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8))), - LOCATION(RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8))), - LOCATION(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8))), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return ((((logic->CanUse(RG_IRON_BOOTS) || (logic->CanUse(RG_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_FOREST_MQ_WELL_SWIM) && logic->CanUse(RG_HOOKSHOT)))) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && (logic->WaterTimer() >= 16));}), - Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return logic->CanUse(RG_FIRE_ARROWS);}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS] = Region("Forest Temple MQ NE Outdoors", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_WELL_CHEST, (logic->CanHitEyeTargets() || (logic->CanOpenUnderwaterChest() && (logic->WaterTimer() >= 8)))), - LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_FOREST_TEMPLE_MQ_GS_WELL, (logic->CanHitEyeTargets() || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)) || logic->CanHitEyeTargets())), - LOCATION(RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)) || logic->CanHitEyeTargets())), - LOCATION(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)) || logic->CanHitEyeTargets())), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return ((((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT)) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && (logic->WaterTimer() >= 16));}), - Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || logic->CanUse(RG_SONG_OF_TIME))));}), - Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES] = Region("Forest Temple MQ Outdoors Top Ledges", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, true), - LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, (((logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)) || (logic->CanUse(RG_HOVER_BOOTS) && (bool)ctx->GetTrickOption(RT_FOREST_DOORFRAME))) && (logic->CanJumpslash() && (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->BlastOrSmash() || (logic->CanUse(RG_DINS_FIRE) || (logic->CanUse(RG_FAIRY_BOW) || (logic->HookshotOrBoomerang() || (logic->CanStandingShield() && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_BIGGORON_SWORD) || (logic->CanUse(RG_MASTER_SWORD) || (logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD)))))))))))))), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->HasFireSourceWithTorch();}), - Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return true;}), - Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return ((bool)ctx->GetTrickOption(RT_FOREST_OUTDOORS_LEDGE) && (logic->CanUse(RG_HOVER_BOOTS) && (logic->CanJumpslash() && logic->TakeDamage())));}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE] = Region("Forest Temple MQ NE Outdoors Ledge", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, true), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return true;}), - Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return logic->CanUse(RG_SONG_OF_TIME);}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_JOELLE_ROOM] = Region("Forest Temple MQ Joelle room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleJoelle, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_MAP_CHEST, logic->ForestTempleJoelle), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 4);}), - Entrance(RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM] = Region("Forest Temple MQ 3 Stalfos Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestClearBelowBowChest, []{return logic->CanKillEnemy(RE_WOLFOS);}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_BOW_CHEST, (logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3))), - LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, []{return (logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3));}), - Entrance(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return (logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3));}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_BETH_ROOM] = Region("Forest Temple MQ Beth Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleBeth, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_COMPASS_CHEST, logic->ForestTempleBeth), - LOCATION(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return (logic->SmallKeys(RR_FOREST_TEMPLE, 5) && Here(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE));}));}), - Entrance(RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}), - Entrance(RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM] = Region("Forest Temple MQ Torch Shot Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE));}), - Entrance(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_FALLING_ROOM] = Region("Forest Temple MQ Falling Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST, true), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return true;}), - Entrance(RR_FOREST_TEMPLE_MQ_AMY_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_AMY_ROOM] = Region("Forest Temple MQ Amy Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestTempleAmy, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestTempleAmy;}), - Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_BASEMENT] = Region("Forest Temple MQ Basement", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, { - EventAccess(&logic->ForestOpenBossCorridor, []{return logic->CanHitEyeTargets();}), -}, { - LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, true), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestTempleMeg;}), - Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM, []{return (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->TakeDamage());}), - Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, []{return logic->ForestOpenBossCorridor;}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM] = Region("Forest Temple MQ Basement Pot Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { - LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, logic->CanBreakPots()), - LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}), -}); -areaTable[RR_FOREST_TEMPLE_MQ_BOSS_REGION] = Region("Forest Temple MQ Boss Region", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->ForestOpenBossCorridor;}), - Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_FOREST_TEMPLE_BOSS_ENTRYWAY] = Region("Forest Temple Boss Entryway", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, {}, { - Entrance(RR_FOREST_TEMPLE_BOSS_REGION, []{return (ctx->GetDungeon(Rando::FOREST_TEMPLE)->IsVanilla() && false);}), - Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, []{return (ctx->GetDungeon(Rando::FOREST_TEMPLE)->IsMQ() && false);}), - Entrance(RR_FOREST_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_FOREST_TEMPLE_BOSS_KEY);}), -}); -areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Region("Forest Temple Boss Room", SCENE_FOREST_TEMPLE_BOSS, false, {}, { - EventAccess(&logic->ForestTempleClear, []{return logic->CanKillEnemy(RE_PHANTOM_GANON);}), -}, { - LOCATION(RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, logic->ForestTempleClear), - LOCATION(RC_PHANTOM_GANON, logic->ForestTempleClear), -}, { - Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, false), -}); -areaTable[RR_FIRE_TEMPLE_FIRST_ROOM] = Region("Fire Temple First Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return (logic->FireTimer() >= 24);}), - Entrance(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return (Here(RR_FIRE_TEMPLE_FIRST_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && (logic->SmallKeys(RR_FIRE_TEMPLE, 8) || !logic->IsFireLoopLocked));}), - Entrance(RR_FIRE_TEMPLE_LOOP_EXIT, []{return true;}), - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return (logic->SmallKeys(RR_FIRE_TEMPLE, 2) && (logic->FireTimer() >= 24));}), -}); -areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_ROOM] = Region("Fire Temple Near Boss Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT));}), -}, { - LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_CHEST, true), - LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_POT_1, (logic->CanBreakPots() && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_POT_2, (logic->CanBreakPots() && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, (logic->CanBreakPots() && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, (logic->CanBreakPots() && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)))), -}, { - Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return (logic->IsAdult && ((bool)ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || (Here(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) || logic->CanUse(RG_HOVER_BOOTS))));}), -}); -areaTable[RR_FIRE_TEMPLE_LOOP_ENEMIES] = Region("Fire Temple Loop Enemies", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return (logic->SmallKeys(RR_FIRE_TEMPLE, 8) || !logic->IsFireLoopLocked);}), - Entrance(RR_FIRE_TEMPLE_LOOP_TILES, []{return Here(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return (logic->CanKillEnemy(RE_TORCH_SLUG) && logic->CanKillEnemy(RE_FIRE_KEESE));});}), -}); -areaTable[RR_FIRE_TEMPLE_LOOP_TILES] = Region("Fire Temple Loop Tiles", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP, logic->CanAttack()), -}, { - Entrance(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return true;}), - Entrance(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_LOOP_FLARE_DANCER] = Region("Fire Temple Loop Flare Dancer", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_FLARE_DANCER_CHEST, ((logic->HasExplosives() || logic->CanUse(RG_MEGATON_HAMMER)) && logic->IsAdult)), -}, { - Entrance(RR_FIRE_TEMPLE_LOOP_TILES, []{return true;}), - Entrance(RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH, []{return Here(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}), -}); -areaTable[RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH] = Region("Fire Temple Loop Hammer Switch", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->FireLoopSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}, {}, { - Entrance(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, []{return logic->FireLoopSwitch;}), -}); -areaTable[RR_FIRE_TEMPLE_LOOP_GORON_ROOM] = Region("Fire Temple Loop Goron Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BOSS_KEY_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH, []{return logic->FireLoopSwitch;}), - Entrance(RR_FIRE_TEMPLE_LOOP_EXIT, []{return logic->FireLoopSwitch;}), -}); -areaTable[RR_FIRE_TEMPLE_LOOP_EXIT] = Region("Fire Temple Loop Exit", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, []{return logic->FireLoopSwitch;}), -}); -areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM] = Region("Fire Temple Big Lava Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 2);}), - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON, []{return true;}), - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES, []{return (logic->IsAdult && (logic->CanUse(RG_SONG_OF_TIME) || (bool)ctx->GetTrickOption(RT_FIRE_SOT)));}), - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON, []{return (logic->IsAdult && logic->HasExplosives());}), - Entrance(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}), -}); -areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON] = Region("Fire Temple Big Lava Room North Goron", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES] = Region("Fire Temple Big Lava Room North Tiles", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, ((logic->IsAdult && logic->CanAttack()) || logic->HookshotOrBoomerang())), -}, { - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON] = Region("Fire Temple Big Lava Room South Goron", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM] = Region("Fire Temple Fire Pillar Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, (logic->FireTimer() >= 56)), - LOCATION(RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, (logic->FireTimer() >= 56)), - LOCATION(RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, (logic->FireTimer() >= 56)), -}, { - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}), - Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return ((logic->FireTimer() >= 56) && logic->SmallKeys(RR_FIRE_TEMPLE, 4));}), -}); -areaTable[RR_FIRE_TEMPLE_SHORTCUT_ROOM] = Region("Fire Temple Shortcut Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, Here(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return true;})), -}, { - Entrance(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}), - Entrance(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return Here(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return true;});}), - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return (logic->IsAdult && ((logic->HasItem(RG_GORONS_BRACELET) || (bool)ctx->GetTrickOption(RT_FIRE_STRENGTH)) && (logic->HasExplosives() || (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT))))));}), -}); -areaTable[RR_FIRE_TEMPLE_SHORTCUT_CLIMB] = Region("Fire Temple Shortcut Climb", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER] = Region("Fire Temple Boulder Maze Lower", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, true), - LOCATION(RC_FIRE_TEMPLE_GS_BOULDER_MAZE, (logic->HasExplosives() && (logic->IsAdult || logic->HookshotOrBoomerang()))), -}, { - Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 5, 7);}), - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return false;}), -}); -areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM] = Region("Fire Temple Boulder Maze Lower Side Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM] = Region("Fire Temple East Central Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, true), - LOCATION(RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, true), - LOCATION(RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, true), -}, { - Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return logic->TakeDamage();}), - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 5, 8);}), - Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 6, 8);}), - Entrance(RR_FIRE_TEMPLE_MAP_AREA, []{return (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW));}), -}); -areaTable[RR_FIRE_TEMPLE_FIRE_WALL_CHASE] = Region("Fire Temple Fire Wall Chase", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, ((logic->FireTimer() >= 24) && (logic->IsAdult || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, ((logic->FireTimer() >= 24) && (logic->IsAdult || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, (logic->FireTimer() >= 24)), -}, { - Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return ((logic->FireTimer() >= 24) && logic->SmallKeys(RR_FIRE_TEMPLE, 6, 8));}), - Entrance(RR_FIRE_TEMPLE_MAP_AREA, []{return logic->IsAdult;}), - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return ((logic->FireTimer() >= 24) && logic->IsAdult);}), - Entrance(RR_FIRE_TEMPLE_CORRIDOR, []{return ((logic->FireTimer() >= 24) && (logic->IsAdult && logic->SmallKeys(RR_FIRE_TEMPLE, 7)));}), -}); -areaTable[RR_FIRE_TEMPLE_MAP_AREA] = Region("Fire Temple Map Region", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MAP_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER] = Region("Fire Temple Boulder Maze Upper", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return logic->HasExplosives();}), - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, []{return true;}), - Entrance(RR_FIRE_TEMPLE_SCARECROW_ROOM, []{return (logic->CanUse(RG_SCARECROW) || ((bool)ctx->GetTrickOption(RT_FIRE_SCARECROW) && (logic->IsAdult && logic->CanUse(RG_LONGSHOT))));}), -}); -areaTable[RR_FIRE_TEMPLE_SCARECROW_ROOM] = Region("Fire Temple Scarecrow Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, (logic->CanJumpslashExceptHammer() || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOOMERANG) || (logic->HasExplosives() || (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_DINS_FIRE)))))))), -}, { - Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_EAST_PEAK, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_EAST_PEAK] = Region("Fire Temple East Peak", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_SCARECROW_CHEST, true), - LOCATION(RC_FIRE_TEMPLE_GS_SCARECROW_TOP, logic->CanUseProjectile()), -}, { - Entrance(RR_FIRE_TEMPLE_SCARECROW_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return logic->TakeDamage();}), -}); -areaTable[RR_FIRE_TEMPLE_CORRIDOR] = Region("Fire Temple Corridor", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 7);}), - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_ROOM] = Region("Fire Temple Fire Maze Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_CORRIDOR, []{return true;}), - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return logic->CanUse(RG_HOVER_BOOTS);}), - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 8);}), - Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, []{return ((bool)ctx->GetTrickOption(RT_FIRE_FLAME_MAZE) || false);}), -}); -areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_UPPER] = Region("Fire Temple Fire Maze Upper", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}); -areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM] = Region("Fire Temple Fire Maze Side Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_COMPASS_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER] = Region("Fire Temple West Central Lower", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, Here(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, []{return ((logic->CanUse(RG_SONG_OF_TIME) || (bool)ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER));})), -}, { - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 8);}), - Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME));}), - Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER] = Region("Fire Temple West Central Upper", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_LATE_FIRE_MAZE] = Region("Fire Temple Late Fire Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return false;}), - Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->HasExplosives();}), -}); -areaTable[RR_FIRE_TEMPLE_UPPER_FLARE_DANCER] = Region("Fire Temple Upper Flare Dancer", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, []{return Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}), - Entrance(RR_FIRE_TEMPLE_WEST_CLIMB, []{return Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}), -}); -areaTable[RR_FIRE_TEMPLE_WEST_CLIMB] = Region("Fire Temple West Climb", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_WEST_PEAK, []{return logic->CanUseProjectile();}), -}); -areaTable[RR_FIRE_TEMPLE_WEST_PEAK] = Region("Fire Temple West Peak", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return logic->TakeDamage();}), - Entrance(RR_FIRE_TEMPLE_WEST_CLIMB, []{return true;}), - Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}); -areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Region("Fire Temple Hammer Return Path", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}); -areaTable[RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE] = Region("Fire Temple Above Fire Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, []{return true;}), - Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER] = Region("Fire Temple MQ First Room Lower", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return (logic->IsAdult || logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_FIRE_TEMPLE_MQ_STALFOS_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 5);}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER] = Region("Fire Temple MQ First Room Upper", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return logic->HasFireSource();}), - Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);});}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH] = Region("Fire Temple MQ Map Room South", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, logic->CanKillEnemy(RE_LIKE_LIKE)), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return Here(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return logic->CanKillEnemy(RE_LIKE_LIKE);});}), - Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE, []{return logic->OpenedLowestGoronCage;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_STALFOS_ROOM] = Region("Fire Temple MQ Stalfos Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM, []{return Here(RR_FIRE_TEMPLE_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM] = Region("Fire Temple MQ Iron Knuckle Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_STALFOS_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return Here(RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER] = Region("Fire Temple MQ Lower Flare Dancer", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, ((logic->IsAdult || logic->CanUse(RG_HOOKSHOT)) && Here(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);}))), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH, []{return Here(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH] = Region("Fire Temple MQ Map Room North", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->OpenedLowestGoronCage, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}, {}, { - Entrance(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE, []{return logic->OpenedLowestGoronCage;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE] = Region("Fire Temple MQ Map Room Cage", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_MAP_CHEST, true), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH, []{return logic->OpenedLowestGoronCage;}), - Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return logic->OpenedLowestGoronCage;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM] = Region("Fire Temple MQ Near Boss Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, ((logic->FireTimer() > 25) && ((bool)ctx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && (logic->CanUse(RG_FIRE_ARROWS) || (logic->IsAdult && (logic->CanUse(RG_DINS_FIRE) && logic->CanUse(RG_FAIRY_BOW))))))), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, ((logic->FireTimer() > 25) && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, ((logic->FireTimer() > 25) && logic->CanBreakCrates())), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH, []{return ((logic->FireTimer() > 32) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))));}), - Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return ((logic->FireTimer() >= 15) && ((logic->IsAdult && ((bool)ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || logic->CanUse(RG_HOVER_BOOTS))) || ((logic->IsAdult && logic->HitFireTemplePlatform) || (logic->HitFireTemplePlatform && logic->CanUse(RG_HOVER_BOOTS)))));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH] = Region("Fire Temple MQ Near Boss Room North", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_GORON_TUNIC) || ((logic->EffectiveHealth() >= 2) || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_STICKS))))))))))), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, ((logic->FireTimer() > 25) && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, ((logic->FireTimer() > 25) && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, logic->CanBreakCrates()), -}, { - Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM] = Region("Fire Temple MQ Big Lava Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, ((logic->FireTimer() >= 40) && (logic->HasFireSource() && (logic->HasExplosives() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_FIRE_MQ_BLOCKED_CHEST))))))), - LOCATION(RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, ((logic->FireTimer() >= 20) && logic->CanUse(RG_MEGATON_HAMMER))), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, ((logic->FireTimer() >= 40) && (logic->CanUse(RG_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_FIRE_MQ_BLOCKED_CHEST) && ((logic->IsAdult && logic->CanBreakPots()) || logic->CanUse(RG_BOOMERANG)))))), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return (logic->FireTimer() >= 20);}), - Entrance(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, []{return (logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 2));}), - Entrance(RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM, []{return (logic->HasFireSource() && (((logic->CanUse(RG_FAIRY_BOW) && (logic->FireTimer() >= 25)) || ((bool)ctx->GetTrickOption(RT_FIRE_MQ_BK_CHEST) && (logic->FireTimer() >= 50))) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_FIRE_SOT)))));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM] = Region("Fire Temple MQ Torch Firewall Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_HOOKSHOT);}), -}, { - LOCATION(RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, logic->CanUse(RG_HOOKSHOT)), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, logic->HookshotOrBoomerang()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, logic->HookshotOrBoomerang()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM] = Region("Fire Temple MQ Elevator Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, true), - LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, true), - LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, true), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM] = Region("Fire Temple MQ Big Torch Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return ((logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)) || ((bool)ctx->GetTrickOption(RT_FIRE_MQ_CLIMB) && logic->CanUse(RG_HOVER_BOOTS)));}), - Entrance(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, []{return logic->CanUse(RG_GORON_TUNIC);}), - Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE, []{return logic->OpenedUpperFireShortcut;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE] = Region("Fire Temple MQ Lower Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, (logic->HasExplosives() && (bool)ctx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM))), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return logic->CanJumpslash();});}), - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return (logic->HasExplosives() && (logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT)));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE] = Region("Fire Temple MQ Lower Maze Crate Cage", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, true), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, logic->CanBreakCrates()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return (logic->IsAdult && (((bool)ctx->GetTrickOption(RT_FIRE_MQ_MAZE_HOVERS) && logic->CanUse(RG_HOVER_BOOTS)) || (bool)ctx->GetTrickOption(RT_FIRE_MQ_MAZE_JUMP)));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE] = Region("Fire Temple MQ Upper Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return (logic->CanJumpslash() || logic->HasExplosives());});}), - Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->HasExplosives();}), - Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB, []{return (logic->HasExplosives() && (logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME)))));}), - Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return (logic->SmallKeys(RR_FIRE_TEMPLE, 3) && logic->CanUse(RG_GORON_TUNIC));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE] = Region("Fire Temple MQ Upper Maze Box Cage", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, true), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT] = Region("Fire Temple MQ Maze Shortcut", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->OpenedUpperFireShortcut, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}, {}, { - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE, []{return logic->OpenedUpperFireShortcut;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE] = Region("Fire Temple MQ Maze Shortcut Cage", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, logic->OpenedUpperFireShortcut), - LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, (logic->OpenedUpperFireShortcut && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, (logic->OpenedUpperFireShortcut && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, (logic->OpenedUpperFireShortcut && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, (logic->OpenedUpperFireShortcut && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, (logic->OpenedUpperFireShortcut && logic->CanBreakCrates())), - LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, (logic->OpenedUpperFireShortcut && logic->CanBreakCrates())), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->OpenedUpperFireShortcut;}), - Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return logic->OpenedUpperFireShortcut;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB] = Region("Fire Temple MQ Burning Block Climb", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_MEGATON_HAMMER))), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return logic->TakeDamage();}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM] = Region("Fire Temple MQ Narrow Path Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return logic->TakeDamage();}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM] = Region("Fire Temple MQ High Torch Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}), - Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return (Here(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_HOOKSHOT)));}) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE] = Region("Fire Temple MQ South Fire Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, logic->HasExplosives()), - LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return logic->HitFireTemplePlatform;}), - Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return (logic->IsAdult || (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS)));}), - Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}), - Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return logic->OpenedFireMQFireMazeDoor;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS] = Region("Fire Temple MQ Fire Maze Platforms", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, { - EventAccess(&logic->HitFireTemplePlatform, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - EventAccess(&logic->OpenedFireMQFireMazeDoor, []{return (logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT));}), -}, {}, { - Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE] = Region("Fire Temple MQ North Fire Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanBreakPots()), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return (logic->IsAdult || (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE));}), - Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE] = Region("Fire Temple MQ West Fire Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return true;}), - Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL] = Region("Fire Temple MQ Fire Maze Past Wall", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanUse(RG_BOOMERANG)), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return true;}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER] = Region("Fire Temple MQ North Fire Maze", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, logic->CanKillEnemy(RE_FLARE_DANCER)), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return logic->CanKillEnemy(RE_FLARE_DANCER);}), - Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return (logic->CanKillEnemy(RE_FLARE_DANCER) && logic->SmallKeys(RR_FIRE_TEMPLE, 4));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM] = Region("Fire Temple MQ Scarecrow Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE, (logic->IsAdult || logic->CanUse(RG_SCARECROW))), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}), - Entrance(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return (Here(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && logic->SmallKeys(RR_FIRE_TEMPLE, 5));}), -}); -areaTable[RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS] = Region("Fire Temple MQ Collapsed Stairs", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, { - LOCATION(RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, logic->CanUse(RG_HOOKSHOT)), -}, { - Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return (logic->CanUse(RG_HOOKSHOT) && Here(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return logic->CanUse(RG_MEGATON_HAMMER);}));}), - Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return (logic->IsAdult && logic->CanUse(RG_HOOKSHOT));}), -}); -areaTable[RR_FIRE_TEMPLE_BOSS_ENTRYWAY] = Region("Fire Temple Boss Entryway", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { - Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla() && false);}), - Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsMQ() && false);}), - Entrance(RR_FIRE_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_FIRE_TEMPLE_BOSS_KEY);}), -}); -areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] = Region("Fire Temple Boss Room", SCENE_FIRE_TEMPLE_BOSS, false, {}, { - EventAccess(&logic->FireTempleClear, []{return ((logic->FireTimer() >= 64) && logic->CanKillEnemy(RE_VOLVAGIA));}), -}, { - LOCATION(RC_FIRE_TEMPLE_VOLVAGIA_HEART, logic->FireTempleClear), - LOCATION(RC_VOLVAGIA, logic->FireTempleClear), -}, { - Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false), -}); -areaTable[RR_WATER_TEMPLE_LOBBY] = Region("Water Temple Lobby", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, (logic->CanBreakPots() && (logic->CanWaterTempleLowFromHigh || (logic->CanWaterTempleMiddle || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)))))), - LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, (logic->CanBreakPots() && (logic->CanWaterTempleLowFromHigh || (logic->CanWaterTempleMiddle || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)))))), -}, { - Entrance(RR_WATER_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return (logic->CanWaterTempleLowFromHigh || (((bool)ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && (logic->CanUse(RG_IRON_BOOTS) || (logic->CanUse(RG_LONGSHOT) && (bool)ctx->GetTrickOption(RT_WATER_LONGSHOT_TORCH)))));}), - Entrance(RR_WATER_TEMPLE_NORTH_LOWER, []{return (logic->CanWaterTempleLowFromHigh || (((bool)ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && logic->CanUse(RG_IRON_BOOTS)));}), - Entrance(RR_WATER_TEMPLE_SOUTH_LOWER, []{return (logic->CanWaterTempleLowFromHigh && (logic->HasExplosives() && ((logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)) && ((bool)ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)))));}), - Entrance(RR_WATER_TEMPLE_WEST_LOWER, []{return (logic->CanWaterTempleLowFromHigh && (logic->HasItem(RG_GORONS_BRACELET) && ((logic->IsChild || (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))) && ((bool)ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)))));}), - Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, []{return (logic->CanWaterTempleLowFromHigh && logic->SmallKeys(RR_WATER_TEMPLE, 5));}), - Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, []{return ((logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle) && (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)));}), - Entrance(RR_WATER_TEMPLE_EAST_MIDDLE, []{return ((logic->CanWaterTempleLowFromHigh || (logic->CanWaterTempleMiddle || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))) && logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_WATER_TEMPLE_WEST_MIDDLE, []{return logic->CanWaterTempleMiddle;}), - Entrance(RR_WATER_TEMPLE_HIGH_WATER, []{return (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST) && (logic->CanUse(RG_BOMB_BAG) && logic->TakeDamage()))));}), - Entrance(RR_WATER_TEMPLE_BLOCK_CORRIDOR, []{return ((logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle) && ((logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) || ((bool)ctx->GetTrickOption(RT_WATER_CENTRAL_BOW) && (logic->IsAdult || logic->CanWaterTempleMiddle))))));}), - Entrance(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, []{return (logic->CanWaterTempleHigh && logic->SmallKeys(RR_WATER_TEMPLE, 4));}), - Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, []{return ((logic->CanWaterTempleHigh && logic->CanUse(RG_LONGSHOT)) || ((bool)ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && (logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS)))));}), -}); -areaTable[RR_WATER_TEMPLE_EAST_LOWER] = Region("Water Temple East Lower", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->CanWaterTempleLowFromHigh, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}, { - LOCATION(RC_WATER_TEMPLE_TORCH_POT_1, (logic->CanBreakPots() && (logic->CanWaterTempleLowFromHigh || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS))))), - LOCATION(RC_WATER_TEMPLE_TORCH_POT_2, (logic->CanBreakPots() && (logic->CanWaterTempleLowFromHigh || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS))))), -}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return (logic->CanWaterTempleLowFromHigh || (((bool)ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && logic->CanUse(RG_IRON_BOOTS)));}), - Entrance(RR_WATER_TEMPLE_MAP_ROOM, []{return logic->CanWaterTempleHigh;}), - Entrance(RR_WATER_TEMPLE_CRACKED_WALL, []{return (logic->CanWaterTempleMiddle || (logic->CanWaterTempleHigh && (logic->CanWaterTempleLowFromHigh && ((logic->CanUse(RG_HOVER_BOOTS) && (bool)ctx->GetTrickOption(RT_WATER_CRACKED_WALL_HOVERS)) || (bool)ctx->GetTrickOption(RT_WATER_CRACKED_WALL)))));}), - Entrance(RR_WATER_TEMPLE_TORCH_ROOM, []{return (logic->CanWaterTempleLowFromHigh && (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)));}), -}); -areaTable[RR_WATER_TEMPLE_MAP_ROOM] = Region("Water Temple Map Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MAP_CHEST, logic->CanKillEnemy(RE_SPIKE, ED_CLOSE, true, 3)), -}, { - Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return logic->CanKillEnemy(RE_SPIKE, ED_CLOSE, true, 3);}), -}); -areaTable[RR_WATER_TEMPLE_CRACKED_WALL] = Region("Water Temple Cracked Wall", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_CRACKED_WALL_CHEST, logic->HasExplosives()), -}, { - Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_TORCH_ROOM] = Region("Water Temple Torch Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_TORCHES_CHEST, logic->CanKillEnemy(RE_SHELL_BLADE, ED_CLOSE, true, 3)), -}, { - Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return logic->CanKillEnemy(RE_SHELL_BLADE, ED_CLOSE, true, 3);}), -}); -areaTable[RR_WATER_TEMPLE_NORTH_LOWER] = Region("Water Temple North Lower", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}), - Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, []{return ((logic->CanUse(RG_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_WATER_BK_REGION) && logic->CanUse(RG_HOVER_BOOTS))) && logic->SmallKeys(RR_WATER_TEMPLE, 4));}), -}); -areaTable[RR_WATER_TEMPLE_BOULDERS_LOWER] = Region("Water Temple Boulders Lower", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, (logic->CanUse(RG_LONGSHOT) || Here(RR_WATER_TEMPLE_BOULDERS_LOWER, []{return ((logic->IsAdult && logic->HookshotOrBoomerang()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)));}))), -}, { - Entrance(RR_WATER_TEMPLE_NORTH_LOWER, []{return logic->SmallKeys(RR_WATER_TEMPLE, 4);}), - Entrance(RR_WATER_TEMPLE_BLOCK_ROOM, []{return true;}), - Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return ((logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || (bool)ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP))) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_IRON_BOOTS)));}), -}); -areaTable[RR_WATER_TEMPLE_BLOCK_ROOM] = Region("Water Temple Block Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, []{return ((logic->HasItem(RG_GORONS_BRACELET) && logic->HasExplosives()) || logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_WATER_TEMPLE_JETS_ROOM, []{return ((logic->HasItem(RG_GORONS_BRACELET) && logic->HasExplosives()) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_HOVER_BOOTS)));}), -}); -areaTable[RR_WATER_TEMPLE_JETS_ROOM] = Region("Water Temple Jets Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_BLOCK_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_BOULDERS_UPPER] = Region("Water Temple Boulders Upper", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, []{return true;}), - Entrance(RR_WATER_TEMPLE_JETS_ROOM, []{return logic->IsAdult;}), - Entrance(RR_WATER_TEMPLE_BOSS_KEY_ROOM, []{return ((logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE))) && logic->SmallKeys(RR_WATER_TEMPLE, 5));}), -}); -areaTable[RR_WATER_TEMPLE_BOSS_KEY_ROOM] = Region("Water Temple Boss Key Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_WATER_TEMPLE_BOSS_KEY_CHEST, true), - LOCATION(RC_WATER_TEMPLE_BOSS_KEY_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_BOSS_KEY_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return ((logic->CanUse(RG_IRON_BOOTS) || ((logic->IsAdult && (bool)ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE)) || (logic->IsChild || logic->HasItem(RG_SILVER_SCALE)))) && logic->SmallKeys(RR_WATER_TEMPLE, 5));}), -}); -areaTable[RR_WATER_TEMPLE_SOUTH_LOWER] = Region("Water Temple South Lower", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_GS_BEHIND_GATE, (logic->CanJumpslash() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))))), - LOCATION(RC_WATER_TEMPLE_BEHIND_GATE_POT_1, (logic->CanJumpslash() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))))), - LOCATION(RC_WATER_TEMPLE_BEHIND_GATE_POT_2, (logic->CanJumpslash() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))))), - LOCATION(RC_WATER_TEMPLE_BEHIND_GATE_POT_3, (logic->CanJumpslash() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))))), - LOCATION(RC_WATER_TEMPLE_BEHIND_GATE_POT_4, (logic->CanJumpslash() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))))), -}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_IRON_BOOTS);}), -}); -areaTable[RR_WATER_TEMPLE_WEST_LOWER] = Region("Water Temple West Lower", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_GORONS_BRACELET)));}), - Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, []{return (logic->CanJumpslashExceptHammer() || logic->CanUseProjectile());}), -}); -areaTable[RR_WATER_TEMPLE_DRAGON_ROOM] = Region("Water Temple Dragon Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_DRAGON_CHEST, ((logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS)) || ((((logic->IsAdult && ((bool)ctx->GetTrickOption(RT_WATER_ADULT_DRAGON) && (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_BOMBCHU_5))))) || (logic->IsChild && ((bool)ctx->GetTrickOption(RT_WATER_CHILD_DRAGON) && (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5)))))) && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))) || Here(RR_WATER_TEMPLE_DRAGON_ROOM, []{return (logic->IsAdult && (logic->CanUse(RG_FAIRY_BOW) && (((bool)ctx->GetTrickOption(RT_WATER_ADULT_DRAGON) && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))) || (bool)ctx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE))));})))), -}, { - Entrance(RR_WATER_TEMPLE_WEST_LOWER, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER] = Region("Water Temple Central Pillar Lower", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->SmallKeys(RR_WATER_TEMPLE, 5);}), - Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT, []{return (logic->CanWaterTempleMiddle && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 40)));}), -}); -areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER] = Region("Water Temple Central Pillar Upper", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->CanWaterTempleMiddle, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}, { - LOCATION(RC_WATER_TEMPLE_GS_CENTRAL_PILLAR, (logic->CanUse(RG_LONGSHOT) || ((((bool)ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && (logic->CanUse(RG_FARORES_WIND) && (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_DINS_FIRE) || logic->SmallKeys(RR_WATER_TEMPLE, 5))))) || ((bool)ctx->GetTrickOption(RT_WATER_IRONS_CENTRAL_GS) && (logic->CanUse(RG_IRON_BOOTS) && ((logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_FAIRY_BOW)) || logic->CanUse(RG_DINS_FIRE))))) && (logic->CanWaterTempleHigh && logic->HookshotOrBoomerang())))), -}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}), - Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT] = Region("Water Temple Central Pillar Basement", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST, (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 40)))), -}, { - Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, []{return (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16));}), -}); -areaTable[RR_WATER_TEMPLE_EAST_MIDDLE] = Region("Water Temple East Middle", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_COMPASS_CHEST, logic->CanUseProjectile()), - LOCATION(RC_WATER_TEMPLE_NEAR_COMPASS_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_NEAR_COMPASS_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_IRON_BOOTS);}), -}); -areaTable[RR_WATER_TEMPLE_WEST_MIDDLE] = Region("Water Temple West Middle", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}), - Entrance(RR_WATER_TEMPLE_HIGH_WATER, []{return logic->CanUseProjectile();}), -}); -areaTable[RR_WATER_TEMPLE_HIGH_WATER] = Region("Water Temple High Water", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->CanWaterTempleHigh, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}, {}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_BLOCK_CORRIDOR] = Region("Water Temple Block Corridor", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle))), - LOCATION(RC_WATER_TEMPLE_CENTRAL_BOW_POT_1, (logic->CanBreakPots() && (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle)))), - LOCATION(RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, (logic->CanBreakPots() && (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle)))), -}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_HOOKSHOT);}), -}); -areaTable[RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM] = Region("Water Temple Falling Platform Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, (logic->CanUse(RG_LONGSHOT) || (((bool)ctx->GetTrickOption(RT_WATER_RANG_FALLING_PLATFORM_GS) && (logic->IsChild && logic->CanUse(RG_BOOMERANG))) || ((bool)ctx->GetTrickOption(RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS) && (logic->IsAdult && logic->CanUse(RG_HOOKSHOT)))))), -}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return (logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_WATER_TEMPLE, 4));}), - Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, []{return (logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_WATER_TEMPLE, 5));}), -}); -areaTable[RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM] = Region("Water Temple Dragon Pillars Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_LIKE_LIKE_POT_1, logic->CanUse(RG_HOOKSHOT)), - LOCATION(RC_WATER_TEMPLE_LIKE_LIKE_POT_2, logic->CanUse(RG_HOOKSHOT)), -}, { - Entrance(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, []{return logic->CanUseProjectile();}), - Entrance(RR_WATER_TEMPLE_DARK_LINK_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}), -}); -areaTable[RR_WATER_TEMPLE_DARK_LINK_ROOM] = Region("Water Temple Dark Link Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, []{return logic->CanKillEnemy(RE_DARK_LINK);}), - Entrance(RR_WATER_TEMPLE_LONGSHOT_ROOM, []{return logic->CanKillEnemy(RE_DARK_LINK);}), -}); -areaTable[RR_WATER_TEMPLE_LONGSHOT_ROOM] = Region("Water Temple Longshot Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_LONGSHOT_CHEST, true), -}, { - Entrance(RR_WATER_TEMPLE_DARK_LINK_ROOM, []{return true;}), - Entrance(RR_WATER_TEMPLE_RIVER, []{return (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME));}), -}); -areaTable[RR_WATER_TEMPLE_RIVER] = Region("Water Temple River", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_RIVER_CHEST, ((logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->IsAdult || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))))), - LOCATION(RC_WATER_TEMPLE_GS_RIVER, ((logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)) || ((bool)ctx->GetTrickOption(RT_WATER_RIVER_GS) && logic->CanUse(RG_LONGSHOT)))), - LOCATION(RC_WATER_TEMPLE_RIVER_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_RIVER_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_RIVER_HEART_1, ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)) || logic->HasItem(RG_BRONZE_SCALE))), - LOCATION(RC_WATER_TEMPLE_RIVER_HEART_2, ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)) || logic->HasItem(RG_BRONZE_SCALE))), - LOCATION(RC_WATER_TEMPLE_RIVER_HEART_3, ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)) || logic->HasItem(RG_BRONZE_SCALE))), - LOCATION(RC_WATER_TEMPLE_RIVER_HEART_4, ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 24)) || logic->HasItem(RG_BRONZE_SCALE))), -}, { - Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, []{return ((logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->IsAdult || (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))));}), -}); -areaTable[RR_WATER_TEMPLE_PRE_BOSS_ROOM] = Region("Water Temple Pre Boss Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}), - Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE] = Region("Water Temple MQ 3F South Ledge", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_ENTRYWAY, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}), - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_WATER_TEMPLE_MQ_2F_CENTRAL, []{return logic->MQWaterLevel(WL_LOW_OR_MID);}), -}); -areaTable[RR_WATER_TEMPLE_MQ_MAIN] = Region("Water Temple MQ Main", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE, []{return (logic->HasItem(RG_BRONZE_SCALE) && logic->MQWaterLevel(WL_HIGH));}), - Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER, []{return (((logic->WaterTimer() >= 24) && logic->CanUse(RG_IRON_BOOTS)) || ((logic->MQWaterLevel(WL_MID) && (logic->HasItem(RG_GOLDEN_SCALE) && (logic->WaterTimer() >= 16))) || logic->MQWaterLevel(WL_LOW)));}), - Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return (logic->MQWaterLevel(WL_HIGH) && logic->HasItem(RG_BRONZE_SCALE));}), - Entrance(RR_WATER_TEMPLE_MQ_2F_CENTRAL, []{return (((logic->MQWaterLevel(WL_LOW) || (logic->CanUse(RG_IRON_BOOTS) && (logic->MQWaterLevel(WL_MID) || (logic->WaterTimer() >= 16)))) && logic->CanUse(RG_LONGSHOT)) || ((logic->MQWaterLevel(WL_MID) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)))) && logic->HasItem(RG_BRONZE_SCALE)));}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F, []{return logic->MQWaterLevel(WL_LOW);}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return (logic->MQWaterLevel(WL_HIGH) && (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT)))));}), - Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, []{return ((logic->MQWaterLevel(WL_MID) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)))) && logic->HasItem(RG_BRONZE_SCALE));}), - Entrance(RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH, []{return (logic->MQWaterB1Switch && (logic->MQWaterLevel(WL_LOW) || ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 24)) && logic->HasItem(RG_BRONZE_SCALE))));}), - Entrance(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM, []{return (logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_SILVER_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))))));}), - Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return (logic->MQWaterB1Switch && (((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanUse(RG_HOOKSHOT)))) && (logic->CanUse(RG_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_WATER_BK_REGION) && logic->CanUse(RG_HOVER_BOOTS)))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_3F_CENTRAL] = Region("Water Temple MQ 3F Central", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE, []{return (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_WATER_TEMPLE_MQ_2F_CENTRAL, []{return ((logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16))) && logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return (logic->MQWaterLevel(WL_HIGH) && (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanUse(RG_HOOKSHOT))));}), - Entrance(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, []{return ((logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_LONGSHOT)) || ((bool)ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ((bool)ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && (logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS)))));}), - Entrance(RR_WATER_TEMPLE_MQ_HIGH_EMBLEM, []{return (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}), - Entrance(RR_WATER_TEMPLE_MQ_WATERFALL, []{return (logic->SmallKeys(RR_WATER_TEMPLE, 1) && (logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_LONGSHOT)));}), - Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, []{return ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16)) || logic->MQWaterLevel(WL_LOW_OR_MID));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_2F_CENTRAL] = Region("Water Temple MQ 2F Central", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, []{return logic->MQWaterLevel(WL_LOW_OR_MID);}), - Entrance(RR_WATER_TEMPLE_MQ_STORAGE_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F, []{return (logic->MQWaterLevel(WL_LOW_OR_MID) && ((logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, []{return (logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_HOVER_BOOTS));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_2F_CENTRAL_HIGH] = Region("Invalid Region", SCENE_ID_MAX, false, {}, {}, {}, {}); -areaTable[RR_WATER_TEMPLE_MQ_HIGH_EMBLEM] = Region("Water Temple MQ High Emblem", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->ReachedWaterHighEmblem, []{return true;}), - EventAccess(&logic->CanWaterTempleHigh, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE] = Region("Water Temple MQ 3F North Ledge", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage());}), - Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR, []{return (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_ICE_ARROWS) || logic->CanUse(RG_NAYRUS_LOVE)));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR] = Region("Water Temple MQ Main", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, []{return (logic->CanUse(RG_ICE_ARROWS) || logic->TakeDamage());}), - Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_MQ_EAST_TOWER] = Region("Water Temple MQ East Tower", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->CouldWaterTempleLow, []{return true;}), - EventAccess(&logic->CanWaterTempleLowFromHigh, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}, { - LOCATION(RC_WATER_TEMPLE_MQ_MAP_CHEST, (logic->MQWaterLevel(WL_HIGH) && (logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, ((logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_HOOKSHOT)) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && logic->CanOpenUnderwaterChest()))), - LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, ((logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_HOOKSHOT) && (logic->WaterTimer() >= 16))))), - LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, ((logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_HOOKSHOT) && (logic->WaterTimer() >= 16))))), -}, { - Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM, []{return (logic->MQWaterLevel(WL_LOW) && (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_STICKS))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM] = Region("Water Temple MQ East Tower 1F Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, (logic->CanKillEnemy(RE_LIZALFOS) && logic->CanKillEnemy(RE_SPIKE))), -}, { - Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F] = Region("Water Temple MQ Central Pillar 1F", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->MQWaterB1Switch, []{return ((bool)ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS));}), -}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return (logic->MQWaterLevel(WL_HIGH) && ((bool)ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && (logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE))));}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, []{return (logic->CanUse(RG_HOOKSHOT) || (logic->MQWaterLevel(WL_MID) && ((bool)ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && (logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE)))));}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return (logic->MQWaterOpenedPillarB1 && (logic->MQWaterLevel(WL_HIGH_OR_MID) && ((bool)ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && (logic->CanUse(RG_FARORES_WIND) && (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC))))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F] = Region("Water Temple MQ Central Pillar 2F", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->CouldWaterTempleMiddle, []{return true;}), - EventAccess(&logic->CanWaterTempleMiddle, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), - EventAccess(&logic->MQWaterOpenedPillarB1, []{return ((bool)ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS));}), -}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return (logic->MQWaterLevel(WL_HIGH) && (logic->CanUse(RG_FARORES_WIND) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))));}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return (logic->MQWaterOpenedPillarB1 && (logic->MQWaterLevel(WL_MID) && (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH] = Region("Water Temple MQ Central Pillar High", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->MQWaterOpenedPillarB1, []{return (((logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_DINS_FIRE)) || ((bool)ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS))) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_LONGSHOT) && logic->CanJumpslash()))));}), -}, { - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return (logic->MQWaterB1Switch && (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC)));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1] = Region("Water Temple MQ Central Pillar B1", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return (logic->MQWaterOpenedPillarB1 && (logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE)));}), - Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL, []{return ((logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || (logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_BRONZE_SCALE)));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL] = Region("Water Temple MQ Central Pillar B1 Final", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT)), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, logic->CanBreakCrates()), -}, {}); -areaTable[RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F] = Region("Water Temple MQ Behind Blue Switch 2F", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F, []{return logic->CanUse(RG_LONGSHOT);}), -}); -areaTable[RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F] = Region("Water Temple MQ Behind Blue Switch 2F", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), -}, { - Entrance(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_HIGH_EMBLEM, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_MQ_STORAGE_ROOM] = Region("Water Temple MQ Storage Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return (logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY] = Region("Water Temple MQ Lizalfos Hallway", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE, []{return (logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_DINS_FIRE));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE] = Region("Water Temple MQ Lizalfos Cage", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, logic->CanKillEnemy(RE_GOLD_SKULLTULA)), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, logic->CanBreakCrates()), -}, {}); -areaTable[RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE] = Region("Invalid Region", SCENE_ID_MAX, false, {}, {}, {}, {}); -areaTable[RR_WATER_TEMPLE_MQ_WATERFALL] = Region("Water Temple Waterfall", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return (logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->CanUse(RG_LONGSHOT));}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return ((logic->MQWaterStalfosPit && (logic->IsAdult && logic->CanUse(RG_HOOKSHOT))) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return (logic->MQWaterStalfosPit && logic->CanUse(RG_LONGSHOT));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_STALFOS_PIT] = Region("Water Temple MQ Stalfos Pit", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->MQWaterStalfosPit, []{return ((logic->IsAdult && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3, false, true)) || (logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_HOOKSHOT) && logic->CanKillEnemy(RE_STALFOS, ED_BOMB_THROW, true, 3, false, true))));}), -}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_WATERFALL, []{return (logic->MQWaterStalfosPit && (logic->CanUse(RG_HOOKSHOT) && (logic->IsAdult || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)))));}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return ((logic->IsAdult && logic->CanUse(RG_HOOKSHOT)) || (logic->CanUse(RG_HOOKSHOT) && ((logic->IsAdult || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->MQWaterStalfosPit))));}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return (logic->MQWaterStalfosPit && ((logic->IsAdult || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8))) && logic->CanUse(RG_HOOKSHOT)));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS] = Region("Water Temple MQ Stalfos Pit Pots", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), - EventAccess(&logic->NutPot, []{return true;}), -}, { - LOCATION(RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_WATER_TEMPLE_MQ_WATERFALL, []{return (logic->MQWaterStalfosPit && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT)));}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return (logic->MQWaterStalfosPit && logic->CanUse(RG_HOOKSHOT));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER] = Region("Water Temple MQ Stalfos Pit Upper", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return (logic->IsAdult || logic->TakeDamage());}), - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return (logic->IsAdult || logic->TakeDamage());}), - Entrance(RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK, []{return logic->CanKillEnemy(RE_DARK_LINK);}), -}); -areaTable[RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK] = Region("Water Temple MQ After Dark Link", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->CanKillEnemy(RE_DARK_LINK);}), - Entrance(RR_WATER_TEMPLE_MQ_RIVER_SKULL, []{return (logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || ((logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8)) || logic->CanUse(RG_LONGSHOT))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_RIVER_SKULL] = Region("Water Temple MQ River Skull", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_GS_RIVER, (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)))), -}, { - Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_RIVER_POTS] = Region("Water Temple MQ River Pots", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_WATER_TEMPLE_MQ_RIVER_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_RIVER_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_RIVER_SKULL, []{return (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 8) && logic->CanUse(RG_HOOKSHOT))));}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16));}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return (logic->HasItem(RG_SILVER_SCALE) || (logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) && (bool)ctx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE))));}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash())));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR] = Region("Water Temple MQ Dragon Room Door", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE);}), - Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->MQWaterDragonTorches;}), -}); -areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL] = Region("Water Temple MQ Dragon Room Tunnel", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE] = Region("Water Temple MQ Dragon Room Alcove", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->MQWaterDragonTorches, []{return logic->HasFireSource();}), -}, { - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16));}), - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return logic->HasItem(RG_SILVER_SCALE);}), -}); -areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH] = Region("Water Temple MQ Boss Key Room Switch", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, []{return (logic->CanHitSwitch() && Here(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanUse(RG_DINS_FIRE);}));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT] = Region("Water Temple MQ Boss Key Room Pit", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanHitSwitch(ED_BOOMERANG);}), -}); -areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST] = Region("Water Temple MQ Boss Key Room Chest", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST, true), -}, { - Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return (logic->CanHitSwitch(ED_BOMB_THROW) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT, []{return true;}), - Entrance(RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH, []{return (logic->HasItem(RG_SILVER_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->HasItem(RG_BRONZE_SCALE) || ((logic->WaterTimer() >= 24) && logic->CanUse(RG_LONGSHOT)))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH] = Region("Water Temple MQ B1 Gate Switch", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, { - EventAccess(&logic->MQWaterB1Switch, []{return logic->CanUse(RG_IRON_BOOTS);}), -}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return (logic->MQWaterB1Switch && (logic->MQWaterLevel(WL_LOW) || (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 16))));}), - Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, []{return (logic->CanUse(RG_IRON_BOOTS) && (logic->HasItem(RG_BRONZE_SCALE) && (logic->MQWaterLevel(WL_LOW) || (logic->WaterTimer() >= 24))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM] = Region("Water Temple MQ Triangle Torch Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), -}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return (logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_GOLDEN_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 40) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))))));}), - Entrance(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return (logic->CanUse(RG_FIRE_ARROWS) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || (logic->CanUse(RG_LONGSHOT) && Here(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM, []{return logic->ScarecrowsSong();}))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE] = Region("Water Temple MQ Triangle Torch Cage", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, logic->CanBreakCrates()), -}, {}); -areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM] = Region("Water Temple MQ Crates Whirlpools Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 16) && logic->CanBreakCrates()))), -}, { - Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return (logic->MQWaterB1Switch && (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 24) && (logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE)))));}), - Entrance(RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM, []{return (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 8) && ((logic->IsAdult && ((logic->CanUse(RG_HOVER_BOOTS) || (bool)ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP)) && (logic->CanUse(RG_HOOKSHOT) || logic->HasItem(RG_BRONZE_SCALE)))) || (Here(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->ScarecrowsSong();}) && logic->CanUse(RG_HOOKSHOT))));}), - Entrance(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, []{return (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ((bool)ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP) || (Here(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->ScarecrowsSong();}) && logic->CanUse(RG_HOOKSHOT)))));}), - Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE, []{return ((bool)ctx->GetTrickOption(RT_WATER_MQ_LOCKED_GS) && (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM] = Region("Water Temple MQ Single Stalfos Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return (logic->HasItem(RG_SILVER_SCALE) || ((logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 8) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT))))));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_4_TORCH_ROOM] = Region("Water Temple MQ 4 Torch Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return ((logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())) || (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 8) && logic->CanUse(RG_HOOKSHOT)))));}), - Entrance(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return (logic->CanHitSwitch() && logic->HasFireSource());}), -}); -areaTable[RR_WATER_TEMPLE_MQ_DODONGO_ROOM] = Region("Water Temple MQ Dodongo Room", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, []{return ((logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);}));}), - Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE, []{return ((logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);}));}), -}); -areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE] = Region("Water Temple MQ Basement Gated Areas", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { - LOCATION(RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) && logic->CanBreakCrates())), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, logic->CanBreakCrates()), -}, { - Entrance(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return true;}), -}); -areaTable[RR_WATER_TEMPLE_BOSS_ENTRYWAY] = Region("Water Temple Boss Entryway", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, {}, { - Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, []{return (ctx->GetDungeon(Rando::WATER_TEMPLE)->IsVanilla() && false);}), - Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR, []{return (ctx->GetDungeon(Rando::WATER_TEMPLE)->IsMQ() && false);}), - Entrance(RR_WATER_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY);}), -}); -areaTable[RR_WATER_TEMPLE_BOSS_ROOM] = Region("Water Temple Boss Room", SCENE_WATER_TEMPLE_BOSS, false, {}, { - EventAccess(&logic->WaterTempleClear, []{return logic->CanKillEnemy(RE_MORPHA);}), -}, { - LOCATION(RC_WATER_TEMPLE_MORPHA_HEART, logic->WaterTempleClear), - LOCATION(RC_MORPHA, logic->WaterTempleClear), -}, { - Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, false), -}); -areaTable[RR_SPIRIT_TEMPLE_LOBBY] = Region("Spirit Temple Lobby", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_LOBBY_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_LOBBY_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_CHILD, []{return logic->IsChild;}), - Entrance(RR_SPIRIT_TEMPLE_EARLY_ADULT, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}), -}); -areaTable[RR_SPIRIT_TEMPLE_CHILD] = Region("Child Spirit Temple", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->NutCrate, []{return true;}), -}, { - LOCATION(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, ((logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))))), - LOCATION(RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, ((logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))) && ((logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))))), - LOCATION(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, ((logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, ((logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, ((logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, ((logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, ((logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && (bool)ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))))), - LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), -}); -areaTable[RR_SPIRIT_TEMPLE_CHILD_CLIMB] = Region("Child Spirit Temple Climb", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, (logic->HasProjectile(HasProjectileAge::Both) || ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->HasProjectile(HasProjectileAge::Adult))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (logic->IsChild && logic->HasProjectile(HasProjectileAge::Child)))))), - LOCATION(RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, (logic->HasProjectile(HasProjectileAge::Both) || ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->HasProjectile(HasProjectileAge::Adult))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (logic->IsChild && logic->HasProjectile(HasProjectileAge::Child)))))), - LOCATION(RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM, (logic->HasProjectile(HasProjectileAge::Both) || (logic->CanUse(RG_DINS_FIRE) || ((logic->TakeDamage() && (logic->CanJumpslashExceptHammer() || logic->HasProjectile(HasProjectileAge::Child))) || ((logic->IsChild && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasProjectile(HasProjectileAge::Child))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && (logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->HasProjectile(HasProjectileAge::Adult) || (logic->TakeDamage() && logic->CanJumpslashExceptHammer()))))))))), - LOCATION(RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, logic->CanBreakPots()), -}, { - Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return (logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)));}), -}); -areaTable[RR_SPIRIT_TEMPLE_EARLY_ADULT] = Region("Early Adult Spirit Temple", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_COMPASS_CHEST, (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_ZELDAS_LULLABY))), - LOCATION(RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, ((logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->IsAdult && (bool)ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)))))))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslashExceptHammer()))), - LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)), - LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)), - LOCATION(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, (logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (bool)ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))))))), - LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, (logic->CanUse(RG_SUNS_SONG) && ((logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->IsAdult && (bool)ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)))))))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())))), -}, { - Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), -}); -areaTable[RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER] = Region("Spirit Temple Central Chamber", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MAP_CHEST, (((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 2)) && (logic->CanUse(RG_DINS_FIRE) || ((logic->CanUse(RG_FIRE_ARROWS) || (bool)ctx->GetTrickOption(RT_SPIRIT_MAP_CHEST)) && (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS))))) || ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (logic->HasExplosives() && logic->CanUse(RG_STICKS))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && ((logic->CanUse(RG_FIRE_ARROWS) || ((bool)ctx->GetTrickOption(RT_SPIRIT_MAP_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS)))))), - LOCATION(RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, (((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 2)) && (logic->CanUse(RG_DINS_FIRE) || ((logic->CanUse(RG_FIRE_ARROWS) || (bool)ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST)) && (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS))))) || ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (logic->HasExplosives() && logic->CanUse(RG_STICKS))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && ((logic->CanUse(RG_FIRE_ARROWS) || ((bool)ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS)))))), - LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_ZELDAS_LULLABY)))), - LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_HOVER_BOOTS) || (bool)ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP))))))), - LOCATION(RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, ((logic->HasExplosives() && (logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_HOOKSHOT))) || ((logic->CanUse(RG_BOOMERANG) && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives())) || (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2)))))), - LOCATION(RC_SPIRIT_TEMPLE_GS_LOBBY, (((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 2)) && ((bool)ctx->GetTrickOption(RT_SPIRIT_LOBBY_GS) && (logic->CanUse(RG_BOOMERANG) && (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_HOVER_BOOTS) || (bool)ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP)))))) || (((bool)ctx->GetTrickOption(RT_SPIRIT_LOBBY_GS) && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (logic->HasExplosives() && logic->CanUse(RG_BOOMERANG)))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_HOVER_BOOTS) || (bool)ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP)))))))), - LOCATION(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), - LOCATION(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), - LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), - LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), - LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), - LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), - LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), - LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, (logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2))), -}, { - Entrance(RR_SPIRIT_TEMPLE_OUTDOOR_HANDS, []{return (logic->CanJumpslashExceptHammer() || logic->HasExplosives());}), - Entrance(RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR, []{return (logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && logic->CanUse(RG_SILVER_GAUNTLETS));}), - Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return ((bool)ctx->GetTrickOption(RT_SPIRIT_PLATFORM_HOOKSHOT) && logic->CanUse(RG_HOOKSHOT));}), -}); -areaTable[RR_SPIRIT_TEMPLE_OUTDOOR_HANDS] = Region("Spirit Temple Outdoor Hands", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_LONGSHOT) && logic->HasExplosives())) || logic->SmallKeys(RR_SPIRIT_TEMPLE, 5))), - LOCATION(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, (logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->HasExplosives()))), -}, { - Entrance(RR_DESERT_COLOSSUS, []{return ((logic->IsChild && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)) || (logic->CanUse(RG_SILVER_GAUNTLETS) && ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->HasExplosives()) || logic->SmallKeys(RR_SPIRIT_TEMPLE, 5))));}), -}); -areaTable[RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Central Locked Door", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, ((logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))) && logic->HasExplosives())), - LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, (((bool)ctx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->HasExplosives())), - LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, (((bool)ctx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->HasExplosives())), - LOCATION(RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, (logic->HasExplosives() && logic->CanUse(RG_SUNS_SONG))), -}, { - Entrance(RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, []{return (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && ((bool)ctx->GetTrickOption(RT_SPIRIT_WALL) || (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_BOMBCHU_5) || ((logic->CanUse(RG_BOMB_BAG) || (logic->CanUse(RG_NUTS) || logic->CanUse(RG_DINS_FIRE))) && (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_MEGATON_HAMMER))))))));}), -}); -areaTable[RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Final Locked Door", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, (logic->CanUse(RG_ZELDAS_LULLABY) && ((logic->TakeDamage() && (bool)ctx->GetTrickOption(RT_FLAMING_CHESTS)) || (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_HOOKSHOT))))), - LOCATION(RC_SPIRIT_TEMPLE_TOPMOST_CHEST, ((logic->CanUse(RG_MIRROR_SHIELD) && logic->CanAttack()) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), - LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, logic->CanUse(RG_HOOKSHOT)), - LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, logic->CanUse(RG_HOOKSHOT)), -}, { - Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return (logic->CanUse(RG_MIRROR_SHIELD) && (logic->HasExplosives() && logic->CanUse(RG_HOOKSHOT)));}), -}); -areaTable[RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD] = Region("Spirit Temple Inside Statue Head", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_LOBBY] = Region("Spirit Temple MQ Lobby", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, true), - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, (Here(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets())), - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST, logic->CanHitSwitch(ED_BOOMERANG)), - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST, logic->Spirit1FSilverRupees), - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->IsChild;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH, []{return (logic->CanUse(RG_LONGSHOT) && logic->CanUse(RG_BOMBCHU_5));}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_1F_WEST] = Region("Spirit Temple MQ 1F West", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->MQSpiritCrawlBoulder, []{return (logic->CanUse(RG_BOMBCHU_5) || ((bool)ctx->GetTrickOption(RT_RUSTED_SWITCHES) && logic->CanUse(RG_MEGATON_HAMMER)));}), -}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, logic->MQSpiritTimeTravelChest), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, logic->CanHitEyeTargets()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, logic->CanHitEyeTargets()), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->CanKillEnemy(RE_TORCH_SLUG);});}), - Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->CanKillEnemy(RE_TORCH_SLUG);});}), - Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH, []{return (logic->IsChild && logic->MQSpiritCrawlBoulder);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH] = Region("Spirit Temple MQ Gibdo Room North", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, logic->CanBreakPots()), -}, {}); -areaTable[RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH] = Region("Spirit Temple MQ 1F Gibdo Room South", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, []{return (logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets());}), - Entrance(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return (logic->CanUse(RG_BOMBCHU_5) && (logic->CanHitEyeTargets() && logic->CanKillEnemy(RE_GIBDO)));}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM] = Region("Spirit Temple Turntable Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->FairyPot, []{return Here(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}), -}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, (logic->CanUse(RG_BOOMERANG) || logic->CanKillEnemy(RE_STALFOS))), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, (logic->CanUse(RG_BOOMERANG) || logic->CanKillEnemy(RE_STALFOS))), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, (logic->CanUse(RG_BOOMERANG) || logic->CanKillEnemy(RE_STALFOS))), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, (logic->CanUse(RG_BOOMERANG) || logic->CanKillEnemy(RE_STALFOS))), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH] = Region("Spirit Temple MQ Map Room North", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->MQSpiritMapRoomEnemies, []{return (logic->CanKillEnemy(RE_ANUBIS) && logic->CanKillEnemy(RE_KEESE));}), -}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST, logic->MQSpiritMapRoomEnemies), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH] = Region("Spirit Temple MQ Map Room South", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->MQSpiritMapRoomEnemies, []{return (logic->CanKillEnemy(RE_ANUBIS) && logic->CanKillEnemy(RE_KEESE, ED_BOOMERANG));}), -}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_MAP_CHEST, true), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH] = Region("Spirit Temple MQ West 1F Rusted Switch", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->MQSpiritTimeTravelChest, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - EventAccess(&logic->MQSpiritCrawlBoulder, []{return (logic->CanUse(RG_BOMBCHU_5) || ((bool)ctx->GetTrickOption(RT_RUSTED_SWITCHES) && logic->CanUse(RG_MEGATON_HAMMER)));}), -}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return (logic->IsChild && logic->MQSpiritCrawlBoulder);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE] = Region("Spirit Temple MQ Under Like Like", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, MQSpiritSharedBrokenWallRoom(RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, []{return logic->CanBreakPots();})), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->CanHitSwitch();}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM] = Region("Spirit Temple MQ Broken Wall Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, MQSpiritSharedBrokenWallRoom(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->CanKillEnemy(RE_BEAMOS);})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, (logic->IsAdult && ((logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))) && logic->CanUse(RG_HOOKSHOT)))), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, []{return logic->CanHitSwitch();}), - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 2);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM] = Region("Spirit Temple MQ Statue Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanHitEyeTargets();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return (((logic->IsAdult || logic->CanJumpslash()) && logic->CanUse(RG_BOOMERANG)) || ((logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_SONG_OF_TIME) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP)))) && logic->CanBreakPots()));})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_SONG_OF_TIME) || ((logic->IsAdult && (bool)ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP)) && logic->CanBreakPots())));})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakCrates();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakCrates();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakSmallCrates();})), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return (logic->HasFireSource() || ((bool)ctx->GetTrickOption(RT_SPIRIT_MQ_FROZEN_EYE) && (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_SONG_OF_TIME))));});}), - Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return (logic->IsAdult || ((bool)ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_SOT) || logic->CanUse(RG_SONG_OF_TIME)));}), - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return (logic->IsAdult && logic->CanUse(RG_HOOKSHOT));}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM] = Region("Spirit Temple MQ Sun Block Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST, true), - LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return (logic->CanUse(RG_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_GS) && logic->CanUse(RG_BOOMERANG)));})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanBreakPots();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanBreakPots();})), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND] = Region("Spirit Temple MQ Silver Gauntlets Hand", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, true), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return true;}), - Entrance(RR_DESERT_COLOSSUS, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH] = Region("Spirit Temple MQ Block Room South", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, []{return (logic->IsChild ? logic->CanUse(RG_SILVER_GAUNTLETS) : Here(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}));}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH] = Region("Spirit Temple MQ Block Room North", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST, (logic->IsChild && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 7) && logic->CanHitEyeTargets()))), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST] = Region("Spirit Temple MQ Statue Room East", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))))), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, (((bool)ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)))), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return (logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && (logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && (logic->CanUse(RG_SONG_OF_TIME) && (logic->CanJumpslash() && (((bool)ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanKillEnemy(RE_IRON_KNUCKLE) && logic->CanUse(RG_LONGSHOT)))))));}), - Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, []{return (logic->CanUse(RG_FIRE_ARROWS) || ((bool)ctx->GetTrickOption(RT_SPIRIT_MQ_LOWER_ADULT) && logic->CanUse(RG_DINS_FIRE)));}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F] = Region("Spirit Temple MQ Three Suns Room 2F", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->MQSpirit3SunsEnemies, []{return ((logic->CanUse(RG_MIRROR_SHIELD) && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)));}), -}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F, []{return logic->MQSpirit3SunsEnemies;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F] = Region("Spirit Temple MQ Three Suns Room 1F", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, []{return logic->MQSpirit3SunsEnemies;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_1F_EAST] = Region("Spirit Temple MQ 1F East", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, { - EventAccess(&logic->Spirit1FSilverRupees, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM] = Region("Spirit Temple MQ Leever Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, (logic->CanKillEnemy(RE_PURPLE_LEEVER) && logic->CanUse(RG_HOOKSHOT))), - LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM] = Region("Spirit Temple MQ Symphony Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM, []{return (logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_EPONAS_SONG) && (logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_SONG_OF_STORMS) && logic->CanUse(RG_ZELDAS_LULLABY))))));}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM] = Region("Spirit Temple MQ After Symphony Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA)), - LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM] = Region("Spirit Temple MQ Four Beamos Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, logic->CanKillEnemy(RE_BEAMOS)), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, (logic->CanKillEnemy(RE_BEAMOS) && (logic->CanUse(RG_SONG_OF_TIME) && logic->CanBreakSmallCrates()))), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return (logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && (logic->CanUse(RG_SONG_OF_TIME) && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT))));}), - Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return (logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME));}), - Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_WALL, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 6);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM] = Region("Spirit Temple MQ SoT Sun Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, true), - LOCATION(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanJumpslash();}), - Entrance(RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM, []{return Here(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return ((logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanUse(RG_MIRROR_SHIELD));});}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND] = Region("Spirit Temple MQ East Stairs to Hand", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, []{return (((bool)ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && Here(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanKillEnemy(RE_FLOORMASTER);}));}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, []{return Here(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND] = Region("Spirit Temple MQ Mirror Shield Hand", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, true), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, []{return true;}), - Entrance(RR_DESERT_COLOSSUS, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM] = Region("Spirit Temple MQ 3F Gibdo Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, true), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_WALL] = Region("Spirit Temple MQ Big Wall", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return logic->CanKillEnemy(RE_KEESE);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL] = Region("Spirit Temple MQ 4F Central", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_WALL, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM] = Region("Spirit Temple MQ Nine Chairs Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM] = Region("Spirit Temple MQ Big Mirror Room", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, logic->CanBreakCrates()), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);});}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE] = Region("Spirit Temple MQ Big Mirror Cave", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { - LOCATION(RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, ((bool)ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))), -}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, []{return (Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);}) && logic->CanUse(RG_HOOKSHOT));}), - Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);});}), -}); -areaTable[RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD] = Region("Spirit Temple MQ Inside Statue Head", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return true;}), - Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY] = Region("Spirit Temple Boss Entryway", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, {}, { - Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla() && false);}), - Entrance(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, []{return (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ() && false);}), - Entrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_SPIRIT_TEMPLE_BOSS_KEY);}), -}); -areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Region("Spirit Temple Boss Room", SCENE_SPIRIT_TEMPLE_BOSS, false, {}, { - EventAccess(&logic->SpiritTempleClear, []{return logic->CanKillEnemy(RE_TWINROVA);}), -}, { - LOCATION(RC_SPIRIT_TEMPLE_TWINROVA_HEART, logic->SpiritTempleClear), - LOCATION(RC_TWINROVA, logic->SpiritTempleClear), -}, { - Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false), -}); -areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Region("Shadow Temple Beginning", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, { - EventAccess(&logic->NutPot, []{return true;}), -}, { - LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST, logic->CanJumpslashExceptHammer()), - LOCATION(RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)), - LOCATION(RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return logic->CanUse(RG_HOVER_BOOTS);}), -}); -areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Region("Shadow Temple First Beamos", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_COMPASS_CHEST, logic->CanJumpslashExceptHammer()), - LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))), - LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, false), - LOCATION(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), -}, { - Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, []{return (logic->HasExplosives() && (logic->IsAdult && logic->SmallKeys(RR_SHADOW_TEMPLE, 1, 2)));}), - Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return false;}), -}); -areaTable[RR_SHADOW_TEMPLE_HUGE_PIT] = Region("Shadow Temple Huge Pit", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, logic->CanJumpslashExceptHammer()), - LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, logic->CanJumpslashExceptHammer()), - LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, true), - LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, (((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET))), - LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, (((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET))), - LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, (logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && (((bool)ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && (bool)ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)))), - LOCATION(RC_SHADOW_TEMPLE_FREESTANDING_KEY, (logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((((bool)ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && (bool)ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_BOMB_BAG) || (logic->HasItem(RG_GORONS_BRACELET) || ((bool)ctx->GetTrickOption(RT_SHADOW_FREESTANDING_KEY) && logic->CanUse(RG_BOMBCHU_5)))))))), - LOCATION(RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, logic->CanJumpslashExceptHammer()), - LOCATION(RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, (logic->CanUse(RG_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && logic->CanUse(RG_HOVER_BOOTS)))), - LOCATION(RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, (logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((((bool)ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && (bool)ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT)))), - LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, ((logic->CanBreakPots() && ((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS))) || logic->HasItem(RG_GORONS_BRACELET))), - LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, ((logic->CanBreakPots() && ((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS))) || logic->HasItem(RG_GORONS_BRACELET))), - LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, ((logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, ((logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), -}, { - Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, []{return ((((bool)ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && (bool)ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3, 4)));}), -}); -areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL] = Region("Shadow Temple Wind Tunnel", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_WIND_HINT_CHEST, true), - LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, logic->CanKillEnemy(RE_GIBDO, ED_CLOSE, true, 2)), - LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, logic->HasExplosives()), - LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, (logic->CanUse(RG_LONGSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5))), - LOCATION(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), - LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, (logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5))), - LOCATION(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, (logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5))), -}, { - Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return (logic->CanJumpslashExceptHammer() && (logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)));}), -}); -areaTable[RR_SHADOW_TEMPLE_BEYOND_BOAT] = Region("Shadow Temple Beyond Boat", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, logic->CanUse(RG_DINS_FIRE)), - LOCATION(RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, logic->CanUse(RG_DINS_FIRE)), - LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, logic->CanKillEnemy(RE_FLOORMASTER)), - LOCATION(RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, (logic->IsAdult && logic->CanAttack())), - LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, (logic->CanBreakPots() && (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_DISTANT_SCARECROW) || ((bool)ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))))), - LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, (logic->CanBreakPots() && (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_DISTANT_SCARECROW) || ((bool)ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))))), - LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)), - LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)), - LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, (((logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_DISTANT_SCARECROW) || ((bool)ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))) && logic->CanUse(RG_SONG_OF_TIME)) || (logic->CanUse(RG_DISTANT_SCARECROW) && logic->CanUse(RG_HOVER_BOOTS)))), -}, { - Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return ((logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_DISTANT_SCARECROW) || ((bool)ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))) && (logic->SmallKeys(RR_SHADOW_TEMPLE, 5) && logic->CanUse(RG_HOVER_BOOTS)));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_ENTRYWAY] = Region("Invalid Region", SCENE_ID_MAX, false, {}, {}, {}, {}); -areaTable[RR_SHADOW_TEMPLE_MQ_BEGINNING] = Region("Shadow Temple MQ Beginning", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, {}, { - Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM] = Region("Shadow Temple MQ Spinner Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, logic->CanBreakSmallCrates()), - LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, logic->CanBreakSmallCrates()), -}, { - Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}), - Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return (Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return (logic->CanUse(RG_HOVER_BOOTS) || ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)));}) && (logic->CanUse(RG_HOVER_BOOTS) || (Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS);}) || ((bool)ctx->GetTrickOption(RT_SHADOW_MQ_GAP) && (logic->CanUse(RG_LONGSHOT) && logic->CanJumpslashExceptHammer())))));}), - Entrance(RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, []{return (Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->HasExplosives();}) && (logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA] = Region("Shadow Temple MQ Dead Hand Region", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_REDEAD)), - LOCATION(RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, (logic->CanKillEnemy(RE_DEAD_HAND) && ((logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanHitEyeTargets()))), - LOCATION(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return true;}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS] = Region("Shadow Temple MQ First Beamos", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, (logic->CanKillEnemy(RE_GIBDO) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)))), - LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return (logic->HasExplosives() && logic->SmallKeys(RR_SHADOW_TEMPLE, 2));}), - Entrance(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM] = Region("Shadow Temple MQ B2 Spinning Blade Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, (logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))))), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return (logic->CanKillEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))));});}), - Entrance(RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH] = Region("Shadow Temple MQ Shortcut Path", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}), - Entrance(RR_SHADOW_TEMPLE_MQ_DOCK, []{return logic->ShadowShortcutBlock;}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR] = Region("Shadow Temple MQ B2 to B3 Corridor", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, {}, { - Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}), - Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return true;}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT] = Region("Shadow Temple MQ Upper Huge Pit", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return ((logic->HasFireSource() && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))) || (bool)ctx->GetTrickOption(RT_SHADOW_MQ_HUGE_PIT));}), - Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM, []{return ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM] = Region("Shadow Temple MQ Invisible Blades Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, ((logic->CanUse(RG_SONG_OF_TIME) || ((bool)ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && (logic->EffectiveHealth() > 1))) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES) || (logic->IsChild || (logic->CanUse(RG_NAYRUS_LOVE) || logic->CanUse(RG_LENS_OF_TRUTH)))))), - LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, ((logic->CanUse(RG_SONG_OF_TIME) || ((bool)ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && (logic->EffectiveHealth() > 1))) && (((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES) || (logic->IsChild || logic->CanUse(RG_NAYRUS_LOVE)))) || logic->CanUse(RG_LENS_OF_TRUTH)))), - LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, ((logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (((bool)ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && (logic->EffectiveHealth() > 1)) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, ((logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (((bool)ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && (logic->EffectiveHealth() > 1)) || logic->CanUse(RG_BOOMERANG)))), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return true;}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Region("Shadow Temple MQ Lower Huge Pit", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, logic->CanUse(RG_LONGSHOT)), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return Here(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return (logic->CanJumpslash() || logic->HasExplosives());});}), - Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return (logic->CanUse(RG_HOVER_BOOTS) && (((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ_PLATFORM) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3)));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM] = Region("Shadow Temple MQ Stone Umbrella Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, true), - LOCATION(RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM, (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) || ((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && ((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && (logic->CanUse(RG_HOVER_BOOTS) && (logic->CanStandingShield() && logic->CanUse(RG_MASTER_SWORD))))))), - LOCATION(RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, logic->CanUse(RG_BOOMERANG)), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return Here(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return ((bool)ctx->GetTrickOption(RT_VISIBLE_COLLISION) || logic->CanHitSwitch());});}), - Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA, []{return (logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || ((bool)ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && (logic->CanUse(RG_HOVER_BOOTS) && (logic->CanStandingShield() && logic->CanUse(RG_MASTER_SWORD))))));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA] = Region("Shadow Temple MQ Upper Stone Umbrella", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST, true), - LOCATION(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST, true), - LOCATION(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, logic->CanBreakPots()), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return true;}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM] = Region("Shadow Temple MQ Floor Spikes Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, { - EventAccess(&logic->MQShadowFloorSpikeRupees, []{return (((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && ((logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) && (logic->CanJumpslash() || (logic->CanUse(RG_HOVER_BOOTS) && Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);})))))) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS))));}), -}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, (logic->CanKillEnemy(RE_REDEAD) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || (logic->TakeDamage() || logic->CanUse(RG_LENS_OF_TRUTH))))), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}), - Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return (logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && ((logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) && (logic->MQShadowFloorSpikeRupees || Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);}))))) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM] = Region("Shadow Temple MQ Stalfos Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return Here(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL] = Region("Shadow Temple MQ Wind Tunnel", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, {}, { - Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return (logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && (logic->CanPassEnemy(RE_BIG_SKULLTULA) && logic->CanUse(RG_HOOKSHOT)));}), - Entrance(RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM, []{return (logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)));}), - Entrance(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, []{return (logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM] = Region("Shadow Temple MQ Wind Hint Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST, (((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanPassEnemy(RE_REDEAD))), - LOCATION(RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return true;}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM] = Region("Shadow Temple MQ B4 Gibdo Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, { - EventAccess(&logic->NutPot, []{return true;}), -}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST, logic->CanKillEnemy(RE_GIBDO)), - LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST, (logic->HasExplosives() && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)))), - LOCATION(RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND, logic->HasExplosives()), - LOCATION(RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return ((bool)ctx->GetTrickOption(RT_SHADOW_MQ_WINDY_WALKWAY) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_SHADOW_TEMPLE_MQ_DOCK, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 5);}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_DOCK] = Region("Shadow Temple MQ Dock", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, { - EventAccess(&logic->ShadowShortcutBlock, []{return logic->HasItem(RG_GORONS_BRACELET);}), -}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW)), - LOCATION(RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW)), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH, []{return logic->ShadowShortcutBlock;}), - Entrance(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 5);}), - Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return ((logic->IsAdult || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT] = Region("Shadow Temple MQ Beyond Boat", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, logic->CanBreakPots()), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return Here(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return (logic->CanUse(RG_FAIRY_BOW) || ((bool)ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)));});}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM] = Region("Shadow Temple MQ Across Chasm", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && (logic->CanHitEyeTargets() && logic->CanUse(RG_LONGSHOT)))), - LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && (logic->CanHitEyeTargets() && logic->CanUse(RG_LONGSHOT)))), - LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, logic->IsAdult), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return (Here(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return logic->CanDetonateUprightBombFlower();}) && logic->IsAdult);}), - Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, []{return Here(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return (logic->CanHitEyeTargets() && (logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_LONGSHOT)));});}), - Entrance(RR_SHADOW_TEMPLE_MQ_BOSS_DOOR, []{return (logic->CanUse(RG_HOVER_BOOTS) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)));}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_BOSS_DOOR] = Region("Shadow Temple MQ Boss Door", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, ((logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW) || logic->CanUse(RG_MEGATON_HAMMER)) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)))), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return (logic->CanUse(RG_HOVER_BOOTS) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)));}), - Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return true;}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE] = Region("Shadow Temple MQ Invisible Maze", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, ((logic->CanUse(RG_LENS_OF_TRUTH) || (bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ_DEADHAND)) && (logic->CanKillEnemy(RE_DEAD_HAND) && (logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET))))), - LOCATION(RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, true), - LOCATION(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, logic->CanBreakPots()), - LOCATION(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return true;}), - Entrance(RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 6);}), -}); -areaTable[RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM] = Region("Shadow Temple MQ Spike Walls Room", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, { - LOCATION(RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, logic->CanUse(RG_DINS_FIRE)), - LOCATION(RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, logic->CanUse(RG_DINS_FIRE)), - LOCATION(RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, logic->CanBreakPots()), -}, { - Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, []{return (logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && ((bool)ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)));}), -}); -areaTable[RR_SHADOW_TEMPLE_BOSS_ENTRYWAY] = Region("Shadow Temple Boss Entryway", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, {}, {}, { - Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsVanilla() && false);}), - Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsMQ() && false);}), - Entrance(RR_SHADOW_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_SHADOW_TEMPLE_BOSS_KEY);}), -}); -areaTable[RR_SHADOW_TEMPLE_BOSS_ROOM] = Region("Shadow Temple Boss Room", SCENE_SHADOW_TEMPLE_BOSS, false, {}, { - EventAccess(&logic->ShadowTempleClear, []{return logic->CanKillEnemy(RE_BONGO_BONGO);}), -}, { - LOCATION(RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, logic->ShadowTempleClear), - LOCATION(RC_BONGO_BONGO, logic->ShadowTempleClear), -}, { - Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_PERIMETER] = Region("Bottom of the Well Perimeter", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, { - EventAccess(&logic->StickPot, []{return true;}), - EventAccess(&logic->NutPot, []{return true;}), - EventAccess(&logic->LoweredWaterInsideBotw, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), -}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, logic->HasExplosives()), - LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, (logic->LoweredWaterInsideBotw || logic->CanOpenUnderwaterChest())), - LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, (logic->LoweredWaterInsideBotw || logic->CanOpenUnderwaterChest())), - LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, ((logic->CanBreakPots() && logic->LoweredWaterInsideBotw) || logic->CanUse(RG_BOOMERANG))), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return (logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA));}), - Entrance(RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS, []{return ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}), - Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}), - Entrance(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, []{return (logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3));}), - Entrance(RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE));}), - Entrance(RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM, []{return (logic->LoweredWaterInsideBotw && logic->IsChild);}), - Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS] = Region("Bottom of the Well Behind Fake Walls", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->TakeDamage())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, logic->HasExplosives()), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}), - Entrance(RR_BOTTOM_OF_THE_WELL_INNER_ROOMS, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}), - Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}), - Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM, []{return ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM] = Region("Bottom of the Well Southwest Room", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, logic->CanBreakPots()), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM] = Region("Bottom of the Well Keese-Beamos Room", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH))), - LOCATION(RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, (logic->CanBreakPots() && ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)))), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return (logic->IsChild && (logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3) && ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH))));}), - Entrance(RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE, []{return ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}), - Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS, []{return ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE] = Region("Bottom of the Well Like-Like Cage", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_INNER_ROOMS] = Region("Bottom of the Well Inner Rooms", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, { - EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), - EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), -}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM] = Region("Bottom of the Well Coffin Room", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW))), - LOCATION(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW))), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM] = Region("Bottom of the Well Dead Hand Room", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)), - LOCATION(RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, ((bool)ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH))), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return (logic->IsChild && logic->CanKillEnemy(RE_DEAD_HAND));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT] = Region("Bottom of the Well Basement", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->BlastOrSmash()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, (logic->CanCutShrubs() && logic->BlastOrSmash())), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, (logic->CanCutShrubs() && logic->BlastOrSmash())), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return (logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA));}), - Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS, []{return Here(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return (logic->BlastOrSmash() || (logic->CanUse(RG_DINS_FIRE) || (logic->CanUse(RG_STICKS) && (bool)ctx->GetTrickOption(RT_BOTW_BASEMENT))));});}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS] = Region("Bottom of the Well Basement Useful Bomb Flowers", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->HasItem(RG_GORONS_BRACELET)), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return logic->CanDetonateUprightBombFlower();}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM] = Region("Bottom of the Well Basement Platform", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, true), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER] = Region("Bottom of the Well MQ Perimeter", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, { - EventAccess(&logic->FairyPot, []{return (Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets());}), - EventAccess(&logic->LoweredWaterInsideBotw, []{return (logic->CanJumpslash() || logic->CanUseProjectile());}), -}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, (Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets())), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, logic->HasExplosives()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, logic->HasExplosives()), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild;}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH, []{return (Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanPassEnemy(RE_BIG_SKULLTULA));}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM, []{return ((logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2));}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE, []{return (logic->IsChild && (logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2) && logic->CanUseProjectile()));}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM, []{return (logic->IsChild && logic->LoweredWaterInsideBotw);}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH] = Region("Bottom of the Well MQ West Room Switch", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, { - EventAccess(&logic->OpenedWestRoomMQBotw, []{return true;}), -}, {}, { - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return (logic->BlastOrSmash() && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || (bool)ctx->GetTrickOption(RT_BOTW_MQ_PITS)));}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return (bool)ctx->GetTrickOption(RT_BOTW_MQ_PITS);}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM] = Region("Bottom of the Well MQ Coffin Room", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW))), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW))), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return ((logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE] = Region("Bottom of the Well MQ Locked Cage", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, { - EventAccess(&logic->OpenedMiddleHoleMQBotw, []{return logic->HasExplosives();}), -}, {}, { - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return (logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM] = Region("Bottom of the Well MQ Dead Hand Room", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, (logic->HasExplosives() || ((bool)ctx->GetTrickOption(RT_BOTW_MQ_DEADHAND_KEY) && logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, logic->CanCutShrubs()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, logic->CanCutShrubs()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, logic->CanCutShrubs()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, logic->CanCutShrubs()), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return (logic->IsChild && logic->CanKillEnemy(RE_DEAD_HAND));}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE] = Region("Bottom of the Well MQ Middle", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, (logic->OpenedWestRoomMQBotw && ((logic->TakeDamage() || logic->CanUse(RG_NUTS)) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)))), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM, []{return logic->OpenedMiddleHoleMQBotw;}), - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT] = Region("Bottom of the Well MQ Basement", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, true), - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return true;}), -}); -areaTable[RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM] = Region("Bottom of the Well MQ Basement Switch Platform", SCENE_BOTTOM_OF_THE_WELL, false, {RA_BOTTOM_OF_THE_WELL}, {}, { - LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, true), -}, { - Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}), -}); -areaTable[RR_ICE_CAVERN_BEGINNING] = Region("Ice Cavern Beginning", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, {}, { - LOCATION(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), -}, { - Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}), - Entrance(RR_ICE_CAVERN_MAIN, []{return Here(RR_ICE_CAVERN_BEGINNING, []{return logic->CanKillEnemy(RE_FREEZARD, ED_CLOSE, true, 4);});}), -}); -areaTable[RR_ICE_CAVERN_MAIN] = Region("Ice Cavern", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, { - EventAccess(&logic->BlueFireAccess, []{return logic->IsAdult;}), -}, { - LOCATION(RC_ICE_CAVERN_MAP_CHEST, (logic->BlueFire() && logic->IsAdult)), - LOCATION(RC_ICE_CAVERN_COMPASS_CHEST, logic->BlueFire()), - LOCATION(RC_ICE_CAVERN_IRON_BOOTS_CHEST, (logic->BlueFire() && logic->CanKillEnemy(RE_WOLFOS))), - LOCATION(RC_SHEIK_IN_ICE_CAVERN, (logic->BlueFire() && (logic->CanKillEnemy(RE_WOLFOS) && logic->IsAdult))), - LOCATION(RC_ICE_CAVERN_FREESTANDING_POH, logic->BlueFire()), - LOCATION(RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, logic->HookshotOrBoomerang()), - LOCATION(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, (logic->BlueFire() && logic->HookshotOrBoomerang())), - LOCATION(RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM, (logic->BlueFire() && (logic->HookshotOrBoomerang() || ((bool)ctx->GetTrickOption(RT_ICE_BLOCK_GS) && (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))))), - LOCATION(RC_ICE_CAVERN_HALL_POT_1, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_HALL_POT_2, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_SPINNING_BLADE_POT_1, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_SPINNING_BLADE_POT_2, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_SPINNING_BLADE_POT_3, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_NEAR_END_POT_1, (logic->CanBreakPots() && logic->BlueFire())), - LOCATION(RC_ICE_CAVERN_NEAR_END_POT_2, (logic->CanBreakPots() && logic->BlueFire())), - LOCATION(RC_ICE_CAVERN_FROZEN_POT_1, (logic->CanBreakPots() && (logic->BlueFire() && logic->IsAdult))), - LOCATION(RC_ICE_CAVERN_LOBBY_RUPEE, logic->BlueFire()), - LOCATION(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, logic->IsAdult), - LOCATION(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, logic->IsAdult), - LOCATION(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, logic->IsAdult), - LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, (logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, (logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)))), - LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, (logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)))), -}, {}); -areaTable[RR_ICE_CAVERN_MQ_BEGINNING] = Region("Ice Cavern MQ Beginning", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, {}, { - LOCATION(RC_ICE_CAVERN_MQ_ENTRANCE_POT, logic->CanBreakPots()), -}, { - Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}), - Entrance(RR_ICE_CAVERN_MQ_HUB, []{return true;}), -}); -areaTable[RR_ICE_CAVERN_MQ_HUB] = Region("Ice Cavern MQ Hub", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, { - EventAccess(&logic->FairyPot, []{return true;}), -}, { - LOCATION(RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, logic->CanBreakPots()), -}, { - Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return logic->BlueFire();}), - Entrance(RR_ICE_CAVERN_MQ_MAP_ROOM, []{return Here(RR_ICE_CAVERN_MQ_HUB, []{return (logic->CanKillEnemy(RE_WHITE_WOLFOS) && logic->CanKillEnemy(RE_FREEZARD));});}), - Entrance(RR_ICE_CAVERN_MQ_COMPASS_ROOM, []{return (logic->IsAdult && logic->BlueFire());}), - Entrance(RR_ICE_CAVERN_MQ_SCARECROW_ROOM, []{return logic->BlueFire();}), -}); -areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Region("Ice Cavern MQ Map Room", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, { - EventAccess(&logic->BlueFireAccess, []{return (logic->IsChild || (logic->CanJumpslash() || logic->HasExplosives()));}), -}, { - LOCATION(RC_ICE_CAVERN_MQ_MAP_CHEST, (logic->BlueFire() && Here(RR_ICE_CAVERN_MQ_MAP_ROOM, []{return logic->CanHitSwitch();}))), -}, {}); -areaTable[RR_ICE_CAVERN_MQ_SCARECROW_ROOM] = Region("Ice Cavern MQ Scarecrow Room", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, {}, { - LOCATION(RC_ICE_CAVERN_MQ_GS_ICE_BLOCK, ((logic->BlueFire() && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)) || (logic->IsAdult && logic->CanHitSwitch(ED_LONG_JUMPSLASH)))), - LOCATION(RC_ICE_CAVERN_MQ_GS_SCARECROW, (logic->CanUse(RG_SCARECROW) || (logic->IsAdult && (logic->CanUse(RG_LONGSHOT) || (bool)ctx->GetTrickOption(RT_ICE_MQ_SCARECROW))))), -}, { - Entrance(RR_ICE_CAVERN_MQ_HUB, []{return logic->BlueFire();}), - Entrance(RR_ICE_CAVERN_MQ_WEST_CORRIDOR, []{return (logic->IsAdult && logic->BlueFire());}), -}); -areaTable[RR_ICE_CAVERN_MQ_STALFOS_ROOM] = Region("Ice Cavern MQ Stalfos Room", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, {}, { - LOCATION(RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST, logic->CanKillEnemy(RE_STALFOS)), - LOCATION(RC_SHEIK_IN_ICE_CAVERN, logic->CanKillEnemy(RE_STALFOS)), -}, { - Entrance(RR_ICE_CAVERN_MQ_WEST_CORRIDOR, []{return Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}), - Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return (logic->CanUse(RG_IRON_BOOTS) && Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);}));}), -}); -areaTable[RR_ICE_CAVERN_MQ_WEST_CORRIDOR] = Region("Ice Cavern MQ West Corridor", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, {}, { - LOCATION(RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_ICE_CAVERN_MQ_SCARECROW_ROOM, []{return logic->BlueFire();}), - Entrance(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return true;}), -}); -areaTable[RR_ICE_CAVERN_MQ_COMPASS_ROOM] = Region("Ice Cavern MQ Compass Room", SCENE_ICE_CAVERN, false, {RA_ICE_CAVERN}, { - EventAccess(&logic->BlueFireAccess, []{return true;}), -}, { - LOCATION(RC_ICE_CAVERN_MQ_COMPASS_CHEST, true), - LOCATION(RC_ICE_CAVERN_MQ_FREESTANDING_POH, logic->HasExplosives()), - LOCATION(RC_ICE_CAVERN_MQ_GS_RED_ICE, ((ctx->GetOption(RSK_BLUE_FIRE_ARROWS) && logic->CanUse(RG_ICE_ARROWS)) || (logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE) && ((logic->CanUse(RG_SONG_OF_TIME) || (logic->IsAdult && (bool)ctx->GetTrickOption(RT_ICE_MQ_RED_ICE_GS))) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA))))), - LOCATION(RC_ICE_CAVERN_MQ_COMPASS_POT_1, logic->CanBreakPots()), - LOCATION(RC_ICE_CAVERN_MQ_COMPASS_POT_2, logic->CanBreakPots()), -}, {}); -areaTable[RR_GERUDO_TRAINING_GROUND_LOBBY] = Region("Gerudo Training Ground Lobby", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, logic->CanHitEyeTargets()), - LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, logic->CanHitEyeTargets()), - LOCATION(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)), - LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, (logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true))), - LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}), - Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return (logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || (bool)ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT)));}), - Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return (logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true));});}), - Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE] = Region("Gerudo Training Ground Central Maze", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, (logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3) && ((bool)ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)))), - LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 4)), - LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 6)), - LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 7)), - LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9);}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT] = Region("Gerudo Training Ground Central Maze Right", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, true), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}), - Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM] = Region("Gerudo Training Ground Lava Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_IRON_BOOTS) && (logic->WaterTimer() >= 24))))), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return (logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild);}), - Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_HOOKSHOT)));}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM] = Region("Gerudo Training Ground Hammer Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, logic->CanAttack()), - LOCATION(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, (logic->CanUse(RG_MEGATON_HAMMER) || (logic->TakeDamage() && (bool)ctx->GetTrickOption(RT_FLAMING_CHESTS)))), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, []{return (logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_FAIRY_BOW));}), - Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER] = Region("Gerudo Training Ground Eye Statue Lower", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, logic->CanUse(RG_FAIRY_BOW)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER] = Region("Gerudo Training Ground Eye Statue Upper", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, logic->CanUse(RG_FAIRY_BOW)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM] = Region("Gerudo Training Ground Heavy Block Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_WOLFOS, ED_CLOSE, true, 4, true)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, []{return (((bool)ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS))));}), - Entrance(RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM, []{return (((bool)ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && ((logic->CanUse(RG_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanUse(RG_SILVER_GAUNTLETS)));}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM] = Region("Gerudo Training Ground Like Like Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, logic->CanJumpslashExceptHammer()), - LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, logic->CanJumpslashExceptHammer()), - LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, logic->CanJumpslashExceptHammer()), - LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, logic->CanJumpslashExceptHammer()), -}, {}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LOBBY] = Region("Gerudo Training Ground MQ Lobby", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, logic->CanBreakPots()), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, logic->CanBreakPots()), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, logic->CanBreakPots()), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM, []{return ((bool)ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1);}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->HasFireSource();});}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return ((logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT)));});}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM] = Region("Gerudo Training Ground MQ Maze Hidden Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, true), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK] = Region("Gerudo Training Ground MQ Maze First Lock", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, true), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1);}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3);}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER] = Region("Gerudo Training Ground MQ Center", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, { - EventAccess(&logic->MQGTGMazeSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}), -}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, logic->CanBreakCrates()), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3);}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM] = Region("Gerudo Training Ground MQ Sand Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, logic->CanKillEnemy(RE_IRON_KNUCKLE)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return true;}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return (logic->CanUse(RG_LONGSHOT) || ((bool)ctx->GetTrickOption(RT_GTG_MQ_WITHOUT_HOOKSHOT) || ((bool)ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && (logic->IsAdult && (logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT))))));});}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM] = Region("Gerudo Training Ground MQ Stalfos Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, { - EventAccess(&logic->BlueFireAccess, []{return true;}), -}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, []{return (Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && logic->CanUse(RG_SILVER_GAUNTLETS));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return (logic->IsAdult && (Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && (((bool)ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || ((bool)ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)))))));}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK] = Region("Gerudo Training Ground MQ Behind Block", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_FREEZARD)), -}, {}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE] = Region("Gerudo Training Ground MQ Statue Room Ledge", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return true;}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_MASTER_SWORD) || (logic->CanUse(RG_BIGGORON_SWORD) || (logic->CanUse(RG_STICKS) || (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG)))))));});}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM] = Region("Gerudo Training Ground MQ Magenta Fire Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, logic->MQGTGMazeSwitch), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM] = Region("Gerudo Training Ground MQ Statue ROom", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, logic->CanUse(RG_FAIRY_BOW)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM] = Region("Gerudo Training Ground MQ Torch Slug Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, logic->CanKillEnemy(RE_IRON_KNUCKLE)), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, logic->CanHitSwitch(ED_BOMB_THROW)), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE] = Region("Gerudo Training Ground MQ Switch Ledge", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, { - EventAccess(&logic->MQGTGRightSideSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - EventAccess(&logic->GTGPlatformSilverRupees, []{return (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_HOVER_BOOTS));}), -}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS);}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return (logic->CanUse(RG_LONGSHOT) || ((logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOOKSHOT)) || ((logic->CanUse(RG_FIRE_ARROWS) && logic->GTGPlatformSilverRupees) && logic->CanUse(RG_HOVER_BOOTS))));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return (logic->MQGTGRightSideSwitch && logic->CanUse(RG_LONGSHOT));}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS] = Region("Gerudo Training Ground MQ Ledge Side Platforms", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, []{return logic->CanUse(RG_HOVER_BOOTS);}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_HOVER_BOOTS);}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS] = Region("Gerudo Training Ground Torch Side Platforms", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, { - EventAccess(&logic->GTGPlatformSilverRupees, []{return (((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS));}), -}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return (((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT)));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return (logic->MQGTGRightSideSwitch && ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT))));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH] = Region("Gerudo Training Ground MQ Platforms Unlit Torch", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, { - EventAccess(&logic->GTGPlatformSilverRupees, []{return (logic->HasFireSource() && logic->CanUse(RG_HOVER_BOOTS));}), -}, {}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER, []{return logic->GTGPlatformSilverRupees;}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return (logic->HasFireSource() && logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, []{return (logic->HasFireSource() || logic->CanUse(RG_LONGSHOT));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return (logic->MQGTGRightSideSwitch && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->HasFireSource())));}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM] = Region("Gerudo Training Ground MQ Dinolfos Room", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, (logic->CanUse(RG_MASTER_SWORD) || (logic->CanUse(RG_BIGGORON_SWORD) || (logic->CanUse(RG_MEGATON_HAMMER) || (logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG))) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))))))), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return (logic->CanUse(RG_MASTER_SWORD) || (logic->CanUse(RG_BIGGORON_SWORD) || (logic->CanUse(RG_MEGATON_HAMMER) || (logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG))) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))))));});}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER] = Region("Gerudo Training Ground MQ Underwater", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, {}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, (logic->HasFireSource() && (logic->CanUse(RG_IRON_BOOTS) && ((logic->WaterTimer() >= 24) && (logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage()))))), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}), -}); -areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT] = Region("Gerudo Training Ground MQ Maze Right", SCENE_GERUDO_TRAINING_GROUND, false, {RA_GERUDO_TRAINING_GROUND}, { - EventAccess(&logic->GTGPlatformSilverRupees, []{return (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_HOVER_BOOTS));}), -}, { - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, true), - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, true), -}, { - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) || (logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOVER_BOOTS))));}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS);}), - Entrance(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, []{return logic->CanUse(RG_FIRE_ARROWS);}), -}); -areaTable[RR_GANONS_CASTLE_LOBBY] = Region("Ganon's Castle Lobby", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_SHEIK_HINT_GC, true), -}, { - Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return true;}), - Entrance(RR_GANONS_CASTLE_FOREST_TRIAL, []{return true;}), - Entrance(RR_GANONS_CASTLE_FIRE_TRIAL, []{return true;}), - Entrance(RR_GANONS_CASTLE_WATER_TRIAL, []{return true;}), - Entrance(RR_GANONS_CASTLE_SHADOW_TRIAL, []{return true;}), - Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL, []{return true;}), - Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS);}), - Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return true;}), - Entrance(RR_GANONS_CASTLE_DEKU_SCRUBS, []{return ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_GANONS_CASTLE_MAIN] = Region("Invalid Region", SCENE_ID_MAX, false, {}, {}, {}, {}); -areaTable[RR_GANONS_CASTLE_DEKU_SCRUBS] = Region("Ganon's Castle Deku Scrubs", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->FreeFairies, []{return true;}), -}, { - LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, true), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, true), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, true), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, true), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, true), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, true), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, true), - LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, true), -}, {}); -areaTable[RR_GANONS_CASTLE_FOREST_TRIAL] = Region("Ganon's Castle Forest Trial", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->ForestTrialClear, []{return (logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE)));}), -}, { - LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, logic->CanKillEnemy(RE_WOLFOS)), - LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, (logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)))))), - LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, (logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)))))), -}, {}); -areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Region("Ganon's Castle Fire Trial", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->FireTrialClear, []{return (logic->CanUse(RG_GORON_TUNIC) && (logic->CanUse(RG_GOLDEN_GAUNTLETS) && (logic->CanUse(RG_LIGHT_ARROWS) && logic->CanUse(RG_LONGSHOT))));}), -}, { - LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, (logic->CanBreakPots() && (logic->CanUse(RG_GORON_TUNIC) && (logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT))))), - LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, (logic->CanBreakPots() && (logic->CanUse(RG_GORON_TUNIC) && (logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT))))), - LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, logic->CanUse(RG_GORON_TUNIC)), -}, {}); -areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Region("Ganon's Castle Water Trial", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->BlueFireAccess, []{return true;}), - EventAccess(&logic->FairyPot, []{return (logic->BlueFire() && logic->CanKillEnemy(RE_FREEZARD));}), - EventAccess(&logic->WaterTrialClear, []{return (logic->BlueFire() && (logic->IsAdult && (logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_LIGHT_ARROWS))));}), -}, { - LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_1, (logic->CanBreakPots() && (logic->BlueFire() && (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))))), - LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_2, (logic->CanBreakPots() && (logic->BlueFire() && (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))))), - LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_3, (logic->CanBreakPots() && (logic->BlueFire() && logic->CanKillEnemy(RE_FREEZARD)))), -}, {}); -areaTable[RR_GANONS_CASTLE_SHADOW_TRIAL] = Region("Ganon's Castle Shadow Trial", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->ShadowTrialClear, []{return (logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_MEGATON_HAMMER) && ((logic->CanUse(RG_FIRE_ARROWS) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_DINS_FIRE) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))))));}), -}, { - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_HOOKSHOT) || (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild))))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE))))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, (logic->CanBreakPots() && (logic->CanUse(RG_MEGATON_HAMMER) && ((logic->CanUse(RG_FIRE_ARROWS) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_DINS_FIRE) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))))))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, (logic->CanBreakPots() && (logic->CanUse(RG_MEGATON_HAMMER) && ((logic->CanUse(RG_FIRE_ARROWS) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_DINS_FIRE) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))))))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, ((logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || (logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, ((logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || (logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))))), - LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, ((logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || (logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))))), -}, {}); -areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Region("Ganon's Castle Spirit Trial", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->NutPot, []{return ((((bool)ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) && (logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))))));}), - EventAccess(&logic->SpiritTrialClear, []{return (logic->CanUse(RG_LIGHT_ARROWS) && ((logic->CanUse(RG_MIRROR_SHIELD) || ctx->GetOption(RSK_SUNLIGHT_ARROWS)) && (logic->CanUse(RG_BOMBCHU_5) && (((bool)ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)))));}), -}, { - LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, (((bool)ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanJumpslashExceptHammer() || logic->CanUse(RG_BOMBCHU_5)))), - LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, (((bool)ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))), - LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, ((((bool)ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) && (logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))))))), - LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, ((((bool)ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) && (logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))))))), - LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), - LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true), -}, {}); -areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Region("Ganon's Castle Light Trial", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->LightTrialClear, []{return (logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_HOOKSHOT) && (logic->SmallKeys(RR_GANONS_CASTLE, 2) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)))));}), -}, { - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, true), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, (logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_GANONS_CASTLE, 1))), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, (logic->CanBreakPots() && logic->SmallKeys(RR_GANONS_CASTLE, 2))), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, (logic->CanBreakPots() && (logic->CanUse(RG_HOOKSHOT) && (logic->SmallKeys(RR_GANONS_CASTLE, 2) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)))))), - LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, (logic->CanBreakPots() && (logic->CanUse(RG_HOOKSHOT) && (logic->SmallKeys(RR_GANONS_CASTLE, 2) && ((bool)ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)))))), -}, {}); -areaTable[RR_GANONS_CASTLE_MQ_LOBBY] = Region("Ganon's Castle MQ Lobby", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return (logic->CanPassEnemy(RE_GREEN_BUBBLE) || Here(RR_GANONS_CASTLE_MQ_LOBBY, []{return (logic->CanKillEnemy(RE_IRON_KNUCKLE) && logic->CanKillEnemy(RE_ARMOS));}));}), - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return Here(RR_GANONS_CASTLE_MQ_LOBBY, []{return (logic->CanKillEnemy(RE_IRON_KNUCKLE) && logic->CanKillEnemy(RE_ARMOS));});}), -}); -areaTable[RR_GANONS_CASTLE_MQ_MAIN] = Region("Ganon's Castle MQ Main", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_SHEIK_HINT_MQ_GC, true), -}, { - Entrance(RR_GANONS_CASTLE_MQ_LOBBY, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_MAIN, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS);});}), - Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_DEKU_SCRUBS, []{return ((bool)ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_DEKU_SCRUBS] = Region("Ganon's Castle MQ Deku Scrubs", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->FreeFairies, []{return true;}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, logic->CanStunDeku()), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, true), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, true), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, true), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, true), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, true), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, true), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, true), - LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, true), -}, { - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM] = Region("Ganon's Castle MQ Forest Trial Stalfos Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, logic->HookshotOrBoomerang()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM] = Region("Ganon's Castle MQ Forest Trial Beamos Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST, logic->CanHitEyeTargets()), - LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST, logic->HasFireSource()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, []{return (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Forest Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->ForestTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM, []{return (Here(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM, []{return (logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS));}) && (logic->CanUse(RG_GORON_TUNIC) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_GOLDEN_GAUNTLETS) && (logic->CanUse(RG_HOVER_BOOTS) || ((bool)ctx->GetTrickOption(RT_GANON_MQ_FIRE_TRIAL) && (logic->IsAdult && logic->CanUse(RG_HOOKSHOT))))))));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Fire Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->FireTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, logic->CanBreakPots()), -}, {}); -areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM] = Region("Ganon's Castle MQ Water Trial Geyser Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->BlueFireAccess, []{return (logic->CanJumpslash() || logic->HasExplosives());}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, logic->BlueFire()), - LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, logic->BlueFire()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, []{return (logic->SmallKeys(RR_GANONS_CASTLE, 3) && Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->BlueFire();}));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3);}), - Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, []{return (logic->IsAdult && logic->BlueFire());}), -}); -areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Water Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->WaterTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, []{return logic->BlueFire();});}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE] = Region("Ganon's Castle MQ Shadow Trial Starting Ledge", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->ShadowTrialFirstChest, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM, []{return ((logic->ShadowTrialFirstChest && logic->CanUse(RG_HOOKSHOT)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM] = Region("Ganon's Castle MQ Shadow Trial Chest Platform", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->ShadowTrialFirstChest, []{return logic->CanUse(RG_FAIRY_BOW);}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST, logic->ShadowTrialFirstChest), -}, { - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, []{return (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}), - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM, []{return (((bool)ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM] = Region("Ganon's Castle MQ Shadow Trial Moving Platform", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->ShadowTrialFirstChest, []{return logic->CanDetonateUprightBombFlower();}), -}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM, []{return (logic->IsAdult || (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)));}), - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH] = Region("Ganon's Castle MQ Shadow Trial Beamos Torch", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM, []{return ((bool)ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, []{return (logic->HasFireSource() || (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && ((bool)ctx->GetTrickOption(RT_GANON_MQ_SHADOW_TRIAL) && logic->CanUse(RG_FAIRY_BOW)))));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE] = Region("Ganon's Castle MQ Shadow Trial Far Side", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, logic->CanHitEyeTargets()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, []{return (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOVER_BOOTS));}), - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM, []{return ((bool)ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Shadow Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->ShadowTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, []{return ((bool)ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM] = Region("Ganon's Castle MQ Spirit Trial Chairs Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, []{return ((logic->CanHitEyeTargets() || (bool)ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER));});}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH] = Region("Ganon's Castle MQ Spirit Trial Before Switch", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, logic->CanPassEnemy(RE_GREEN_BUBBLE)), -}, { - Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, []{return logic->CanUse(RG_BOMBCHU_5);});}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH] = Region("Ganon's Castle MQ Spirit Trial After Switch", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, ((bool)ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))), - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), -}, { - Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return logic->CanUse(RG_BOMBCHU_5);});}), - Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM, []{return (Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD));}) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Spirit Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}), - EventAccess(&logic->NutPot, []{return true;}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, logic->CanBreakPots()), -}, { - Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM] = Region("Ganon's Castle MQ Light Trial Dinolfos Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, []{return (logic->CanKillEnemy(RE_DINOLFOS) && logic->CanKillEnemy(RE_TORCH_SLUG));});}), -}); -areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM] = Region("Ganon's Castle MQ Light Trial Triforce Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY)), -}, { - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, []{return true;}), - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, []{return logic->SmallKeys(RR_GANONS_CASTLE, 2);}), -}); -areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT] = Region("Ganon's Castle MQ Light Trial Boulder Room Front", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 2);}), - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK, []{return (logic->CanUse(RG_HOOKSHOT) || (bool)ctx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK] = Region("Ganon's Castle MQ Light Trial Boulder Room Back", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, { - LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, true), - LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, true), -}, { - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, []{return (logic->CanUse(RG_HOOKSHOT) || (bool)ctx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL));}), - Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM, []{return (logic->SmallKeys(RR_GANONS_CASTLE, 3) && (((bool)ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanJumpslash() || (logic->HasExplosives() || (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_BOOMERANG)))))));}), -}); -areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Light Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, { - EventAccess(&logic->LightTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}), -}, { - LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, logic->CanBreakPots()), -}, {}); -areaTable[RR_GANONS_TOWER_ENTRYWAY] = Region("Ganon's Tower Entryway", SCENE_INSIDE_GANONS_CASTLE, false, {RA_GANONS_CASTLE}, {}, {}, { - Entrance(RR_GANONS_CASTLE_LOBBY, []{return ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla();}), - Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ();}), - Entrance(RR_GANONS_TOWER_FLOOR_1, []{return ((logic->ForestTrialClear || ctx->GetTrial(TK_FOREST_TRIAL)->IsSkipped()) && ((logic->FireTrialClear || ctx->GetTrial(TK_FIRE_TRIAL)->IsSkipped()) && ((logic->WaterTrialClear || ctx->GetTrial(TK_WATER_TRIAL)->IsSkipped()) && ((logic->ShadowTrialClear || ctx->GetTrial(TK_SHADOW_TRIAL)->IsSkipped()) && ((logic->SpiritTrialClear || ctx->GetTrial(TK_SPIRIT_TRIAL)->IsSkipped()) && (logic->LightTrialClear || ctx->GetTrial(TK_LIGHT_TRIAL)->IsSkipped()))))));}), -}); -areaTable[RR_GANONS_TOWER_FLOOR_1] = Region("Ganon's Tower Floor 1", SCENE_GANONS_TOWER, false, {}, {}, {}, { - Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}), - Entrance(RR_GANONS_TOWER_FLOOR_2, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_GANONS_TOWER_FLOOR_2] = Region("Ganon's Tower Floor 2", SCENE_GANONS_TOWER, false, {}, {}, { - LOCATION(RC_GANONS_TOWER_BOSS_KEY_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)), -}, { - Entrance(RR_GANONS_TOWER_FLOOR_1, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}), - Entrance(RR_GANONS_TOWER_FLOOR_3, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_GANONS_TOWER_FLOOR_3] = Region("Ganon's Tower Floor 3", SCENE_GANONS_TOWER, false, {}, {}, {}, { - Entrance(RR_GANONS_TOWER_FLOOR_2, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}), - Entrance(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}), -}); -areaTable[RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR] = Region("Ganon's Tower Before Ganondorf's Lair", SCENE_GANONS_TOWER, false, {}, {}, { - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_1, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_2, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_3, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_4, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_5, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_6, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_7, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_8, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_9, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_10, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_11, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_12, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_13, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_14, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_15, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_16, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_17, logic->CanBreakPots()), - LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_18, logic->CanBreakPots()), -}, { - Entrance(RR_GANONS_TOWER_FLOOR_3, []{return Here(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return true;});}), - Entrance(RR_GANONS_TOWER_GANONDORF_LAIR, []{return Here(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return logic->HasItem(RG_GANONS_CASTLE_BOSS_KEY);});}), -}); -areaTable[RR_GANONS_TOWER_GANONDORF_LAIR] = Region("Ganondorf's Lair", SCENE_GANONDORF_BOSS, false, {}, {}, { - LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)), -}, { - Entrance(RR_GANONS_CASTLE_ESCAPE, []{return logic->CanKillEnemy(RE_GANONDORF);}), -}); -areaTable[RR_GANONS_CASTLE_ESCAPE] = Region("Ganon's Castle Escape", SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, false, {}, {}, {}, { - Entrance(RR_GANONS_CASTLE_GANON_ARENA, []{return true;}), -}); -areaTable[RR_GANONS_CASTLE_GANON_ARENA] = Region("Ganon's Arena", SCENE_GANON_BOSS, false, {}, {}, { - LOCATION(RC_GANON, logic->CanKillEnemy(RE_GANON)), -}, {}); - // clang-format on -} diff --git a/soh/soh/Enhancements/randomizer/logic.s b/soh/soh/Enhancements/randomizer/logic.s deleted file mode 100644 index be8fb9f1a..000000000 --- a/soh/soh/Enhancements/randomizer/logic.s +++ /dev/null @@ -1,6722 +0,0 @@ -:: -#include "soh/Enhancements/randomizer/location_access.h" -#include "soh/Enhancements/randomizer/entrance.h" -#include "soh/Enhancements/randomizer/dungeon.h" - -using namespace Rando; -extern "C" SaveContext gSaveContext; - -void RegionTable_Init_Generated() { - // clang-format off -:: - -def RR_ROOT SCENE_ID_MAX false RA_LINKS_POCKET -Root -KakarikoVillageGateOpen (== RSK_KAK_GATE RO_KAK_GATE_OPEN) -THCouldFree1TorchCarpenter (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) -THCouldFreeDoubleCellCarpenter (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FAST)) -TH_CouldFreeDeadEndCarpenter (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FAST)) -THCouldRescueSlopeCarpenter (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FAST)) -THRescuedAllCarpenters (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) -RC_LINKS_POCKET true -RC_TRIFORCE_COMPLETED (>= TriforcePiecesCollected (add RSK_TRIFORCE_HUNT_PIECES_REQUIRED 1)) -RC_SARIA_SONG_HINT (CanUse RG_SARIAS_SONG) -RR_ROOT_EXITS true - -def RR_ROOT_EXITS SCENE_ID_MAX false RA_LINKS_POCKET -Root Exits -RR_CHILD_SPAWN IsChild -RR_ADULT_SPAWN IsAdult -RR_MINUET_OF_FOREST_WARP (CanUse RG_MINUET_OF_FOREST) -RR_BOLERO_OF_FIRE_WARP (CanUse RG_BOLERO_OF_FIRE) -RR_SERENADE_OF_WATER_WARP (CanUse RG_SERENADE_OF_WATER) -RR_NOCTURNE_OF_SHADOW_WARP (CanUse RG_NOCTURNE_OF_SHADOW) -RR_REQUIEM_OF_SPIRIT_WARP (CanUse RG_REQUIEM_OF_SPIRIT) -RR_PRELUDE_OF_LIGHT_WARP (CanUse RG_PRELUDE_OF_LIGHT) - -def RR_CHILD_SPAWN SCENE_ID_MAX false RA_LINKS_POCKET -Child Spawn -RR_KF_LINKS_HOUSE true - -def RR_ADULT_SPAWN SCENE_ID_MAX false RA_LINKS_POCKET -Adult Spawn -RR_TEMPLE_OF_TIME true - -def RR_MINUET_OF_FOREST_WARP SCENE_ID_MAX false RA_LINKS_POCKET -Minuet of Forest Warp -RR_SACRED_FOREST_MEADOW true - -def RR_BOLERO_OF_FIRE_WARP SCENE_ID_MAX false RA_LINKS_POCKET -Bolero of Fire Warp -RR_DMC_CENTRAL_LOCAL true - -def RR_SERENADE_OF_WATER_WARP SCENE_ID_MAX false RA_LINKS_POCKET -Serenade of Water Warp -RR_LAKE_HYLIA true - -def RR_REQUIEM_OF_SPIRIT_WARP SCENE_ID_MAX false RA_LINKS_POCKET -Requiem of Spirit Warp -RR_DESERT_COLOSSUS true - -def RR_NOCTURNE_OF_SHADOW_WARP SCENE_ID_MAX false RA_LINKS_POCKET -Nocturne of Shadow Warp -RR_GRAVEYARD_WARP_PAD_REGION true - -def RR_PRELUDE_OF_LIGHT_WARP SCENE_ID_MAX false RA_LINKS_POCKET -Prelude of Light Warp -RR_TEMPLE_OF_TIME true - -def RR_KOKIRI_FOREST SCENE_KOKIRI_FOREST false RA_KOKIRI_FOREST -Kokiri Forest -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -GossipStoneFairy CallGossipFairyExceptSuns -ShowedMidoSwordAndShield (and IsChild (and (CanUse RG_KOKIRI_SWORD) (CanUse RG_DEKU_SHIELD))) -RC_KF_KOKIRI_SWORD_CHEST IsChild -RC_KF_GS_KNOW_IT_ALL_HOUSE (and IsChild (and CanAttack CanGetNightTimeGS)) -RC_KF_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) -RC_KF_GS_HOUSE_OF_TWINS (and IsAdult (and (or HookshotOrBoomerang (and RT_KF_ADULT_GS (CanUse RG_HOVER_BOOTS))) CanGetNightTimeGS)) -RC_KF_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_KF_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_KF_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_KF_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_KF_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_KF_BRIDGE_RUPEE IsChild -RC_KF_BEHIND_MIDOS_RUPEE IsChild -RC_KF_SOUTH_GRASS_WEST_RUPEE IsChild -RC_KF_SOUTH_GRASS_EAST_RUPEE IsChild -RC_KF_NORTH_GRASS_WEST_RUPEE IsChild -RC_KF_NORTH_GRASS_EAST_RUPEE IsChild -RC_KF_BOULDER_RUPEE_1 IsChild -RC_KF_BOULDER_RUPEE_2 IsChild -RC_KF_BEAN_RUPEE_1 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) -RC_KF_BEAN_RUPEE_2 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) -RC_KF_BEAN_RUPEE_3 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) -RC_KF_BEAN_RUPEE_4 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) -RC_KF_BEAN_RUPEE_5 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) -RC_KF_BEAN_RUPEE_6 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) -RC_KF_BEAN_RED_RUPEE (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) -RC_KF_SARIAS_ROOF_WEST_HEART IsChild -RC_KF_SARIAS_ROOF_EAST_HEART IsChild -RC_KF_SARIAS_ROOF_NORTH_HEART IsChild -RC_KF_GOSSIP_STONE true -RC_KF_CHILD_GRASS_1 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_2 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_3 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_4 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_5 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_6 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_7 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_8 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_9 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_10 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_11 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_12 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_MAZE_1 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_MAZE_2 (and IsChild CanCutShrubs) -RC_KF_CHILD_GRASS_MAZE_3 (and IsChild CanCutShrubs) -RC_KF_ADULT_GRASS_1 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_2 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_3 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_4 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_5 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_6 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_7 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_8 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_9 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_10 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_11 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_12 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_13 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_14 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_15 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_16 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_17 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_18 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_19 (and IsAdult CanCutShrubs) -RC_KF_ADULT_GRASS_20 (and IsAdult CanCutShrubs) -RR_KF_LINKS_HOUSE true -RR_KF_MIDOS_HOUSE true -RR_KF_SARIAS_HOUSE true -RR_KF_HOUSE_OF_TWINS true -RR_KF_KNOW_IT_ALL_HOUSE true -RR_KF_KOKIRI_SHOP true -RR_KF_OUTSIDE_DEKU_TREE (or (and IsAdult (or (CanPassEnemy RE_BIG_SKULLTULA) ForestTempleClear)) (or (== RSK_FOREST RO_CLOSED_FOREST_OFF) ShowedMidoSwordAndShield)) -RR_THE_LOST_WOODS true -RR_LW_BRIDGE_FROM_FOREST (or IsAdult (or (!= RSK_FOREST RO_CLOSED_FOREST_ON) DekuTreeClear)) -RR_KF_STORMS_GROTTO CanOpenStormsGrotto - -def RR_KF_LINKS_HOUSE SCENE_LINKS_HOUSE false -KF Link's House -RC_KF_LINKS_HOUSE_COW (and IsAdult (and (CanUse RG_EPONAS_SONG) LinksCow)) -RC_KF_LINKS_HOUSE_POT CanBreakPots -RR_KOKIRI_FOREST true - -def RR_KF_MIDOS_HOUSE SCENE_MIDOS_HOUSE false -KF Mido's House -RC_KF_MIDOS_TOP_LEFT_CHEST true -RC_KF_MIDOS_TOP_RIGHT_CHEST true -RC_KF_MIDOS_BOTTOM_LEFT_CHEST true -RC_KF_MIDOS_BOTTOM_RIGHT_CHEST true -RR_KOKIRI_FOREST true - -def RR_KF_SARIAS_HOUSE SCENE_SARIAS_HOUSE false -KF Saria's House -RC_KF_SARIAS_TOP_LEFT_HEART true -RC_KF_SARIAS_TOP_RIGHT_HEART true -RC_KF_SARIAS_BOTTOM_LEFT_HEART true -RC_KF_SARIAS_BOTTOM_RIGHT_HEART true -RR_KOKIRI_FOREST true - -def RR_KF_HOUSE_OF_TWINS SCENE_TWINS_HOUSE false -KF House of Twins -RC_KF_TWINS_HOUSE_POT_1 CanBreakPots -RC_KF_TWINS_HOUSE_POT_2 CanBreakPots -RR_KOKIRI_FOREST true - -def RR_KF_KNOW_IT_ALL_HOUSE SCENE_KNOW_IT_ALL_BROS_HOUSE false -KF Know It All House -RC_KF_BROTHERS_HOUSE_POT_1 CanBreakPots -RC_KF_BROTHERS_HOUSE_POT_2 CanBreakPots -RR_KOKIRI_FOREST true - -def RR_KF_KOKIRI_SHOP SCENE_KOKIRI_SHOP false -KF Kokiri Shop -RC_KF_SHOP_ITEM_1 true -RC_KF_SHOP_ITEM_2 true -RC_KF_SHOP_ITEM_3 true -RC_KF_SHOP_ITEM_4 true -RC_KF_SHOP_ITEM_5 true -RC_KF_SHOP_ITEM_6 true -RC_KF_SHOP_ITEM_7 true -RC_KF_SHOP_ITEM_8 true -RR_KOKIRI_FOREST true - -def RR_KF_OUTSIDE_DEKU_TREE SCENE_KOKIRI_FOREST false RA_KOKIRI_FOREST -KF Outside Deku Tree -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -ShowedMidoSwordAndShield (and IsChild (and (CanUse RG_KOKIRI_SWORD) (CanUse RG_DEKU_SHIELD))) -RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE true -RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE true -RR_DEKU_TREE_ENTRYWAY (or IsChild (and (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) (or (== RSK_FOREST RO_CLOSED_FOREST_OFF) ShowedMidoSwordAndShield))) -RR_KOKIRI_FOREST (or (and IsAdult (or (CanPassEnemy RE_BIG_SKULLTULA) ForestTempleClear)) (or (== RSK_FOREST RO_CLOSED_FOREST_OFF) ShowedMidoSwordAndShield)) - -def RR_KF_STORMS_GROTTO SCENE_GROTTOS false -KF Storms Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_KF_STORMS_GROTTO_CHEST true -RC_KF_STORMS_GROTTO_FISH HasBottle -RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_KF_STORMS_GROTTO_GOSSIP_STONE true -RC_KF_STORMS_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_KF_STORMS_GROTTO_GRASS_1 CanCutShrubs -RC_KF_STORMS_GROTTO_GRASS_2 CanCutShrubs -RC_KF_STORMS_GROTTO_GRASS_3 CanCutShrubs -RC_KF_STORMS_GROTTO_GRASS_4 CanCutShrubs -RR_KOKIRI_FOREST true - -def RR_THE_LOST_WOODS SCENE_LOST_WOODS false RA_THE_LOST_WOODS -Lost Woods -GossipStoneFairy CallGossipFairyExceptSuns -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -BugShrub (and IsChild CanCutShrubs) -BorrowSpookyMask (and IsChild (and BorrowSkullMask (and (CanUse RG_SARIAS_SONG) (HasItem RG_CHILD_WALLET)))) -RC_LW_SKULL_KID (and IsChild (CanUse RG_SARIAS_SONG)) -RC_LW_TRADE_COJIRO (and IsAdult (CanUse RG_COJIRO)) -//I cannot think of a case where you can use Odd pot but not Cojiro to reset the quadrant should you have both. If one exists, add it to logic -RC_LW_TRADE_ODD_POTION (and IsAdult (CanUse RG_ODD_POTION)) -//all 5 buttons are logically required for memory game -//because the chances of being able to beat it -//every time you attempt it are as follows: -//0 or 1 button(s) => 0% -//2 buttons => 0.15625% -//3 buttons => 3.75% -//4 buttons => 25.3125% -//5 buttons => 100% -RC_LW_OCARINA_MEMORY_GAME (and IsChild (and (HasItem RG_FAIRY_OCARINA) (>= OcarinaButtons 5))) -RC_LW_TARGET_IN_WOODS (and IsChild (CanUse RG_FAIRY_SLINGSHOT)) -RC_LW_DEKU_SCRUB_NEAR_BRIDGE (and IsChild CanStunDeku) -RC_LW_GS_BEAN_PATCH_NEAR_BRIDGE (and CanSpawnSoilSkull CanAttack) -//RANDOTODO handle collecting some of these as you leave the shortcut from the other side -RC_LW_SHORTCUT_RUPEE_1 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_SHORTCUT_RUPEE_2 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_SHORTCUT_RUPEE_3 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_SHORTCUT_RUPEE_4 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_SHORTCUT_RUPEE_5 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_SHORTCUT_RUPEE_6 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_SHORTCUT_RUPEE_7 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_SHORTCUT_RUPEE_8 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LW_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_LW_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_LW_SHORTCUT_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) -RC_LW_GOSSIP_STONE true -RC_LW_GRASS_1 CanCutShrubs -RC_LW_GRASS_2 CanCutShrubs -RC_LW_GRASS_3 CanCutShrubs -RR_LW_FOREST_EXIT true -RR_GC_WOODS_WARP true -RR_LW_BRIDGE (or (and IsAdult (or (CanPlantBean RR_THE_LOST_WOODS) RT_LW_BRIDGE)) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_LONGSHOT))) -RR_ZR_FROM_SHORTCUT (or (HasItem RG_SILVER_SCALE) (or (CanUse RG_IRON_BOOTS) (and RT_LOST_WOOD_NAVI_DIVE (and IsChild (and (HasItem RG_BRONZE_SCALE) CanJumpslash))))) -RR_LW_BEYOND_MIDO (or IsChild (or (CanUse RG_SARIAS_SONG) RT_LW_MIDO_BACKFLIP)) -RR_LW_NEAR_SHORTCUTS_GROTTO (Here BlastOrSmash) - -def RR_LW_BRIDGE_FROM_FOREST SCENE_LOST_WOODS false RA_THE_LOST_WOODS -LW Bridge From Forest -RC_LW_GIFT_FROM_SARIA true -RR_LW_BRIDGE true - -def RR_LW_BRIDGE SCENE_LOST_WOODS false RA_THE_LOST_WOODS -LW Bridge -RR_KOKIRI_FOREST true -RR_HYRULE_FIELD true -RR_THE_LOST_WOODS (CanUse RG_LONGSHOT) - -def RR_LW_FOREST_EXIT SCENE_LOST_WOODS false RA_THE_LOST_WOODS -LW Forest Exit -RR_KOKIRI_FOREST true - -def RR_LW_BEYOND_MIDO SCENE_LOST_WOODS false RA_THE_LOST_WOODS -LW Beyond Mido -ButterflyFairy (CanUse RG_STICKS) -RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT (and IsChild CanStunDeku) -RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT (and IsChild CanStunDeku) -RC_LW_GS_ABOVE_THEATER (and IsAdult (and (or (and (CanPlantBean RR_LW_BEYOND_MIDO) CanAttack) (and RT_LW_GS_BEAN (and (CanUse RG_HOOKSHOT) (or (CanUse RG_LONGSHOT) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOMBCHU_5) (CanUse RG_DINS_FIRE)))))))) CanGetNightTimeGS)) -RC_LW_GS_BEAN_PATCH_NEAR_THEATER (and CanSpawnSoilSkull (or CanAttack (and (== RSK_SHUFFLE_SCRUBS RO_SCRUBS_OFF) CanReflectNuts))) -RC_LW_BOULDER_RUPEE BlastOrSmash -RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1 (and IsChild (and (HasItem RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2 (and IsChild (and (HasItem RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3 (and IsChild (and (HasItem RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LW_GRASS_4 CanCutShrubs -RC_LW_GRASS_5 CanCutShrubs -RC_LW_GRASS_6 CanCutShrubs -RC_LW_GRASS_7 CanCutShrubs -RC_LW_GRASS_8 CanCutShrubs -RC_LW_GRASS_9 CanCutShrubs -RR_LW_FOREST_EXIT true -RR_THE_LOST_WOODS (or IsChild (CanUse RG_SARIAS_SONG)) -RR_SFM_ENTRYWAY true -RR_DEKU_THEATER true -RR_LW_SCRUBS_GROTTO (Here BlastOrSmash) - -def RR_LW_NEAR_SHORTCUTS_GROTTO SCENE_GROTTOS false -LW Near Shortcuts Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST true -RC_LW_NEAR_SHORTCUTS_GROTTO_FISH HasBottle -RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE true -RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1 CanCutShrubs -RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2 CanCutShrubs -RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3 CanCutShrubs -RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4 CanCutShrubs -RR_THE_LOST_WOODS true - -def RR_DEKU_THEATER SCENE_GROTTOS false -Deku Theater -RC_DEKU_THEATER_SKULL_MASK (and IsChild BorrowSkullMask) -RC_DEKU_THEATER_MASK_OF_TRUTH (and IsChild BorrowRightMasks) -RR_LW_BEYOND_MIDO true - -def RR_LW_SCRUBS_GROTTO SCENE_GROTTOS false -LW Scrubs Grotto -RC_LW_DEKU_SCRUB_GROTTO_REAR CanStunDeku -RC_LW_DEKU_SCRUB_GROTTO_FRONT CanStunDeku -RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE CanBreakUpperBeehives -RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_LW_BEYOND_MIDO true - -def RR_SFM_ENTRYWAY SCENE_SACRED_FOREST_MEADOW false RA_SACRED_FOREST_MEADOW -SFM Entryway -RR_LW_BEYOND_MIDO true -RR_SACRED_FOREST_MEADOW (or IsAdult (CanKillEnemy RE_WOLFOS)) -RR_SFM_WOLFOS_GROTTO CanOpenBombGrotto - -def RR_SACRED_FOREST_MEADOW SCENE_SACRED_FOREST_MEADOW false RA_SACRED_FOREST_MEADOW -Sacred Forest Meadow -GossipStoneFairy CallGossipFairyExceptSuns -RC_SONG_FROM_SARIA (and IsChild (HasItem RG_ZELDAS_LETTER)) -RC_SHEIK_IN_FOREST IsAdult -RC_SFM_GS (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_SFM_SARIA_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_SFM_MAZE_LOWER_GOSSIP_STONE true -RC_SFM_MAZE_UPPER_GOSSIP_STONE true -RC_SFM_SARIA_GOSSIP_STONE true -RR_SFM_ENTRYWAY true -RR_FOREST_TEMPLE_ENTRYWAY (CanUse RG_HOOKSHOT) -RR_SFM_FAIRY_GROTTO true -RR_SFM_STORMS_GROTTO CanOpenStormsGrotto - -def RR_SFM_WOLFOS_GROTTO SCENE_GROTTOS false -SFM Wolfos Grotto -RC_SFM_WOLFOS_GROTTO_CHEST (CanKillEnemy RE_WOLFOS ED_CLOSE true 2) -RR_SFM_ENTRYWAY true - -def RR_SFM_FAIRY_GROTTO SCENE_GROTTOS false -SFM Fairy Grotto -FreeFairies true -RC_SFM_FAIRY_GROTTO_FAIRY_1 true -RC_SFM_FAIRY_GROTTO_FAIRY_2 true -RC_SFM_FAIRY_GROTTO_FAIRY_3 true -RC_SFM_FAIRY_GROTTO_FAIRY_4 true -RC_SFM_FAIRY_GROTTO_FAIRY_5 true -RC_SFM_FAIRY_GROTTO_FAIRY_6 true -RC_SFM_FAIRY_GROTTO_FAIRY_7 true -RC_SFM_FAIRY_GROTTO_FAIRY_8 true -RR_SACRED_FOREST_MEADOW true - -def RR_SFM_STORMS_GROTTO SCENE_GROTTOS false -SFM Storms Grotto -RC_SFM_DEKU_SCRUB_GROTTO_REAR CanStunDeku -RC_SFM_DEKU_SCRUB_GROTTO_FRONT CanStunDeku -RC_SFM_STORMS_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_SACRED_FOREST_MEADOW true - -def RR_HYRULE_FIELD SCENE_HYRULE_FIELD true RA_HYRULE_FIELD -Hyrule Field -BigPoeKill (and HasBottle (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_EPONA) RT_HF_BIG_POE_WITHOUT_EPONA))) -BorrowRightMasks (and IsChild (and BorrowBunnyHood (and (HasItem RG_KOKIRI_EMERALD) (and (HasItem RG_GORON_RUBY) (and (HasItem RG_ZORA_SAPPHIRE) (HasItem RG_CHILD_WALLET)))))) -RC_HF_OCARINA_OF_TIME_ITEM (and IsChild (and (== StoneCount 3) (HasItem RG_BRONZE_SCALE))) -RC_SONG_FROM_OCARINA_OF_TIME (and IsChild (and (== StoneCount 3) (HasItem RG_BRONZE_SCALE))) -RC_HF_POND_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) -RC_HF_CENTRAL_GRASS_1 CanCutShrubs -RC_HF_CENTRAL_GRASS_2 CanCutShrubs -RC_HF_CENTRAL_GRASS_3 CanCutShrubs -RC_HF_CENTRAL_GRASS_4 CanCutShrubs -RC_HF_CENTRAL_GRASS_5 CanCutShrubs -RC_HF_CENTRAL_GRASS_6 CanCutShrubs -RC_HF_CENTRAL_GRASS_7 CanCutShrubs -RC_HF_CENTRAL_GRASS_8 CanCutShrubs -RC_HF_CENTRAL_GRASS_9 CanCutShrubs -RC_HF_CENTRAL_GRASS_10 CanCutShrubs -RC_HF_CENTRAL_GRASS_11 CanCutShrubs -RC_HF_CENTRAL_GRASS_12 CanCutShrubs -RC_HF_SOUTH_GRASS_1 CanCutShrubs -RC_HF_SOUTH_GRASS_2 CanCutShrubs -RC_HF_SOUTH_GRASS_3 CanCutShrubs -RC_HF_SOUTH_GRASS_4 CanCutShrubs -RC_HF_SOUTH_GRASS_5 CanCutShrubs -RC_HF_SOUTH_GRASS_6 CanCutShrubs -RC_HF_SOUTH_GRASS_7 CanCutShrubs -RC_HF_SOUTH_GRASS_8 CanCutShrubs -RC_HF_SOUTH_GRASS_9 CanCutShrubs -RC_HF_SOUTH_GRASS_10 CanCutShrubs -RC_HF_SOUTH_GRASS_11 CanCutShrubs -RC_HF_SOUTH_GRASS_12 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_1 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_2 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_3 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_4 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_5 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_6 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_7 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_8 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_9 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_10 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_11 CanCutShrubs -RC_HF_NEAR_MARKET_GRASS_12 CanCutShrubs -RC_HF_NEAR_KF_GRASS_1 CanCutShrubs -RC_HF_NEAR_KF_GRASS_2 CanCutShrubs -RC_HF_NEAR_KF_GRASS_3 CanCutShrubs -RC_HF_NEAR_KF_GRASS_4 CanCutShrubs -RC_HF_NEAR_KF_GRASS_5 CanCutShrubs -RC_HF_NEAR_KF_GRASS_6 CanCutShrubs -RC_HF_NEAR_KF_GRASS_7 CanCutShrubs -RC_HF_NEAR_KF_GRASS_8 CanCutShrubs -RC_HF_NEAR_KF_GRASS_9 CanCutShrubs -RC_HF_NEAR_KF_GRASS_10 CanCutShrubs -RC_HF_NEAR_KF_GRASS_11 CanCutShrubs -RC_HF_NEAR_KF_GRASS_12 CanCutShrubs -RR_LW_BRIDGE true -RR_LAKE_HYLIA true -RR_GERUDO_VALLEY true -RR_MARKET_ENTRANCE true -RR_KAKARIKO_VILLAGE true -RR_ZR_FRONT true -RR_LON_LON_RANCH true -RR_HF_SOUTHEAST_GROTTO (Here BlastOrSmash) -RR_HF_OPEN_GROTTO true -RR_HF_INSIDE_FENCE_GROTTO CanOpenBombGrotto -RR_HF_COW_GROTTO (and (or (CanUse RG_MEGATON_HAMMER) IsChild) CanOpenBombGrotto) -RR_HF_NEAR_MARKET_GROTTO (Here BlastOrSmash) -RR_HF_FAIRY_GROTTO (Here BlastOrSmash) -RR_HF_NEAR_KAK_GROTTO CanOpenBombGrotto -RR_HF_TEKTITE_GROTTO CanOpenBombGrotto - -def RR_HF_SOUTHEAST_GROTTO SCENE_GROTTOS false -HF Southeast Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_HF_SOUTHEAST_GROTTO_CHEST true -RC_HF_SOUTHEAST_GROTTO_FISH HasBottle -RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE true -RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_HF_SOUTHEAST_GROTTO_GRASS_1 CanCutShrubs -RC_HF_SOUTHEAST_GROTTO_GRASS_2 CanCutShrubs -RC_HF_SOUTHEAST_GROTTO_GRASS_3 CanCutShrubs -RC_HF_SOUTHEAST_GROTTO_GRASS_4 CanCutShrubs -RR_HYRULE_FIELD true - -def RR_HF_OPEN_GROTTO SCENE_GROTTOS false -HF Open Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_HF_OPEN_GROTTO_CHEST true -RC_HF_OPEN_GROTTO_FISH HasBottle -RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_HF_OPEN_GROTTO_GOSSIP_STONE true -RC_HF_OPEN_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_HF_OPEN_GROTTO_GRASS_1 CanCutShrubs -RC_HF_OPEN_GROTTO_GRASS_2 CanCutShrubs -RC_HF_OPEN_GROTTO_GRASS_3 CanCutShrubs -RC_HF_OPEN_GROTTO_GRASS_4 CanCutShrubs -RR_HYRULE_FIELD true - -def RR_HF_INSIDE_FENCE_GROTTO SCENE_GROTTOS false -HF Inside Fence Grotto -RC_HF_DEKU_SCRUB_GROTTO CanStunDeku -RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE CanBreakLowerBeehives -RC_HF_FENCE_GROTTO_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) -RR_HYRULE_FIELD true - -def RR_HF_COW_GROTTO SCENE_GROTTOS false -HF Cow Grotto -RR_HYRULE_FIELD true -RR_HF_COW_GROTTO_BEHIND_WEBS HasFireSource - -def RR_HF_COW_GROTTO_BEHIND_WEBS SCENE_GROTTOS false -HF Cow Grotto Behind Webs -BugShrub CanCutShrubs -GossipStoneFairy CallGossipFairy -RC_HF_GS_COW_GROTTO (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_HF_COW_GROTTO_COW (CanUse RG_EPONAS_SONG) -RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_HF_COW_GROTTO_GOSSIP_STONE true -RC_HF_COW_GROTTO_POT_1 CanBreakPots -RC_HF_COW_GROTTO_POT_2 CanBreakPots -RC_HF_COW_GROTTO_GRASS_1 CanCutShrubs -RC_HF_COW_GROTTO_GRASS_2 CanCutShrubs -RR_HF_COW_GROTTO true - -def RR_HF_NEAR_MARKET_GROTTO SCENE_GROTTOS false -HF Near Market Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_HF_NEAR_MARKET_GROTTO_CHEST true -RC_HF_NEAR_MARKET_GROTTO_FISH HasBottle -RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE true -RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_HF_NEAR_MARKET_GROTTO_GRASS_1 CanCutShrubs -RC_HF_NEAR_MARKET_GROTTO_GRASS_2 CanCutShrubs -RC_HF_NEAR_MARKET_GROTTO_GRASS_3 CanCutShrubs -RC_HF_NEAR_MARKET_GROTTO_GRASS_4 CanCutShrubs -RR_HYRULE_FIELD true - -def RR_HF_FAIRY_GROTTO SCENE_GROTTOS false -HF Fairy Grotto -FreeFairies true -RC_HF_FAIRY_GROTTO_FAIRY_1 true -RC_HF_FAIRY_GROTTO_FAIRY_2 true -RC_HF_FAIRY_GROTTO_FAIRY_3 true -RC_HF_FAIRY_GROTTO_FAIRY_4 true -RC_HF_FAIRY_GROTTO_FAIRY_5 true -RC_HF_FAIRY_GROTTO_FAIRY_6 true -RC_HF_FAIRY_GROTTO_FAIRY_7 true -RC_HF_FAIRY_GROTTO_FAIRY_8 true -RR_HYRULE_FIELD true - -def RR_HF_NEAR_KAK_GROTTO SCENE_GROTTOS false -HF Near Kak Grotto -RC_HF_GS_NEAR_KAK_GROTTO HookshotOrBoomerang -RR_HYRULE_FIELD true - -def RR_HF_TEKTITE_GROTTO SCENE_GROTTOS false -HF Tektite Grotto -RC_HF_TEKTITE_GROTTO_FREESTANDING_POH (or (HasItem RG_GOLDEN_SCALE) (CanUse RG_IRON_BOOTS)) -RR_HYRULE_FIELD true - -def RR_LAKE_HYLIA SCENE_LAKE_HYLIA true RA_LAKE_HYLIA -Lake Hylia -GossipStoneFairy CallGossipFairy -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -ButterflyFairy (CanUse RG_STICKS) -BugShrub (and IsChild CanCutShrubs) -ChildScarecrow (and IsChild (and (HasItem RG_FAIRY_OCARINA) (>= OcarinaButtons 2))) -AdultScarecrow (and IsAdult (and (HasItem RG_FAIRY_OCARINA) (>= OcarinaButtons 2))) -RC_LH_UNDERWATER_ITEM (and IsChild (HasItem RG_SILVER_SCALE)) -RC_LH_SUN (and IsAdult (and (or (and WaterTempleClear (HasItem RG_BRONZE_SCALE)) (CanUse RG_DISTANT_SCARECROW)) (CanUse RG_FAIRY_BOW))) -RC_LH_FREESTANDING_POH (and IsAdult (or (CanUse RG_SCARECROW) (CanPlantBean RR_LAKE_HYLIA))) -RC_LH_GS_BEAN_PATCH (and CanSpawnSoilSkull (CanGetEnemyDrop RE_GOLD_SKULLTULA)) -RC_LH_GS_LAB_WALL (and IsChild (and (or (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and RT_LH_LAB_WALL_GS CanJumpslashExceptHammer)) CanGetNightTimeGS)) -RC_LH_GS_SMALL_ISLAND (and IsChild (and (CanGetEnemyDrop RE_GOLD_SKULLTULA) (and CanGetNightTimeGS (HasItem RG_BRONZE_SCALE)))) -RC_LH_GS_TREE (and IsAdult (and (CanUse RG_LONGSHOT) CanGetNightTimeGS)) -RC_LH_FRONT_RUPEE (and IsChild (HasItem RG_BRONZE_SCALE)) -RC_LH_MIDDLE_RUPEE (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LH_BACK_RUPEE (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RC_LH_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LH_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LH_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_LH_LAB_GOSSIP_STONE_FAIRY CallGossipFairy -RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -//You can walk along the edge of the lake to get these without swimming, the fairy is created going backwards, which is convenient here -RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY CallGossipFairy -RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY CallGossipFairy -RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_LH_ISLAND_SUN_FAIRY (and (CanUse RG_SUNS_SONG) (or (and (HasItem RG_BRONZE_SCALE) (or IsChild WaterTempleClear)) (CanUse RG_DISTANT_SCARECROW))) -RC_LH_LAB_GOSSIP_STONE true -RC_LH_SOUTHEAST_GOSSIP_STONE true -RC_LH_SOUTHWEST_GOSSIP_STONE true -RC_LH_GRASS_1 CanCutShrubs -RC_LH_GRASS_2 CanCutShrubs -RC_LH_GRASS_3 CanCutShrubs -RC_LH_GRASS_4 CanCutShrubs -RC_LH_GRASS_5 CanCutShrubs -RC_LH_GRASS_6 CanCutShrubs -RC_LH_GRASS_7 CanCutShrubs -RC_LH_GRASS_8 CanCutShrubs -RC_LH_GRASS_9 CanCutShrubs -RC_LH_GRASS_10 CanCutShrubs -RC_LH_GRASS_11 CanCutShrubs -RC_LH_GRASS_12 CanCutShrubs -RC_LH_GRASS_13 CanCutShrubs -RC_LH_GRASS_14 CanCutShrubs -RC_LH_GRASS_15 CanCutShrubs -RC_LH_GRASS_16 CanCutShrubs -RC_LH_GRASS_17 CanCutShrubs -RC_LH_GRASS_18 CanCutShrubs -RC_LH_GRASS_19 CanCutShrubs -RC_LH_GRASS_20 CanCutShrubs -RC_LH_GRASS_21 CanCutShrubs -RC_LH_GRASS_22 CanCutShrubs -RC_LH_GRASS_23 CanCutShrubs -RC_LH_GRASS_24 CanCutShrubs -RC_LH_GRASS_25 CanCutShrubs -RC_LH_GRASS_26 CanCutShrubs -RC_LH_GRASS_27 CanCutShrubs -RC_LH_GRASS_28 CanCutShrubs -RC_LH_GRASS_29 CanCutShrubs -RC_LH_GRASS_30 CanCutShrubs -RC_LH_GRASS_31 CanCutShrubs -RC_LH_GRASS_32 CanCutShrubs -RC_LH_GRASS_33 CanCutShrubs -RC_LH_GRASS_34 CanCutShrubs -RC_LH_GRASS_35 CanCutShrubs -RC_LH_GRASS_36 CanCutShrubs -RC_LH_CHILD_GRASS_1 (and IsChild CanCutShrubs) -RC_LH_CHILD_GRASS_2 (and IsChild CanCutShrubs) -RC_LH_CHILD_GRASS_3 (and IsChild CanCutShrubs) -RC_LH_CHILD_GRASS_4 (and IsChild CanCutShrubs) -RC_LH_WARP_PAD_GRASS_1 CanCutShrubs -RC_LH_WARP_PAD_GRASS_2 CanCutShrubs -RR_HYRULE_FIELD true -RR_LH_FROM_SHORTCUT true -RR_LH_OWL_FLIGHT @deprioritize IsChild -RR_LH_FISHING_ISLAND (or (and (or IsChild WaterTempleClear) (HasItem RG_BRONZE_SCALE)) (and IsAdult (or (CanUse RG_SCARECROW) (CanPlantBean RR_LAKE_HYLIA)))) -RR_LH_LAB (CanOpenOverworldDoor RG_HYLIA_LAB_KEY) -RR_LH_FROM_WATER_TEMPLE true -RR_LH_GROTTO true - -def RR_LH_FROM_SHORTCUT SCENE_LAKE_HYLIA false RA_LAKE_HYLIA -LH From Shortcut -RR_LAKE_HYLIA (or (> Hearts 1) (or (HasItem RG_BOTTLE_WITH_FAIRY) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)))) -RR_ZORAS_DOMAIN (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) - -def RR_LH_FROM_WATER_TEMPLE SCENE_LAKE_HYLIA false RA_LAKE_HYLIA -LH From Water Temple -RR_LAKE_HYLIA (or (HasItem RG_BRONZE_SCALE) (or (HasItem RG_BOTTLE_WITH_FAIRY) (CanUse RG_IRON_BOOTS))) -RR_WATER_TEMPLE_ENTRYWAY (and (CanUse RG_HOOKSHOT) (or (or (CanUse RG_IRON_BOOTS) (and RT_LH_WATER_HOOKSHOT (HasItem RG_GOLDEN_SCALE))) (and IsAdult (and (CanUse RG_LONGSHOT) (HasItem RG_GOLDEN_SCALE))))) - -def RR_LH_FISHING_ISLAND SCENE_LAKE_HYLIA true RA_LAKE_HYLIA -LH Fishing Island -RR_LAKE_HYLIA (HasItem RG_BRONZE_SCALE) -RR_LH_FISHING_POND (CanOpenOverworldDoor RG_FISHING_HOLE_KEY) - -def RR_LH_OWL_FLIGHT SCENE_LAKE_HYLIA true RA_LAKE_HYLIA -LH Owl Flight -RR_HYRULE_FIELD @deprioritize true - -def RR_LH_LAB SCENE_LAKESIDE_LABORATORY false -LH Lab -RC_LH_LAB_DIVE (or (HasItem RG_GOLDEN_SCALE) (and RT_LH_LAB_DIVING (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (HasItem RG_BRONZE_SCALE))))) -RC_LH_TRADE_FROG (and IsAdult (CanUse RG_EYEBALL_FROG)) -RC_LH_GS_LAB_CRATE (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) CanBreakCrates)) -RC_LH_LAB_FRONT_RUPEE (or (CanUse RG_IRON_BOOTS) (HasItem RG_GOLDEN_SCALE)) -RC_LH_LAB_LEFT_RUPEE (or (CanUse RG_IRON_BOOTS) (HasItem RG_GOLDEN_SCALE)) -RC_LH_LAB_RIGHT_RUPEE (or (CanUse RG_IRON_BOOTS) (HasItem RG_GOLDEN_SCALE)) -RC_LH_LAB_CRATE (and (CanUse RG_IRON_BOOTS) CanBreakCrates) -RR_LAKE_HYLIA true - -def RR_LH_FISHING_POND SCENE_FISHING_POND false -LH Fishing Hole -RC_LH_CHILD_FISHING (and (CanUse RG_FISHING_POLE) IsChild) -RC_LH_CHILD_FISH_1 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_2 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_3 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_4 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_5 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_6 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_7 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_8 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_9 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_10 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_11 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_12 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_13 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_14 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_FISH_15 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_LOACH_1 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_CHILD_LOACH_2 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) -RC_LH_ADULT_FISHING (and (CanUse RG_FISHING_POLE) IsAdult) -RC_LH_ADULT_FISH_1 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_2 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_3 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_4 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_5 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_6 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_7 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_8 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_9 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_10 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_11 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_12 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_13 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_14 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_FISH_15 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_ADULT_LOACH (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) -RC_LH_HYRULE_LOACH (CanUse RG_FISHING_POLE) -RC_FISHING_POLE_HINT true -RR_LH_FISHING_ISLAND true - -def RR_LH_GROTTO SCENE_GROTTOS false -LH Grotto -RC_LH_DEKU_SCRUB_GROTTO_LEFT CanStunDeku -RC_LH_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku -RC_LH_DEKU_SCRUB_GROTTO_CENTER CanStunDeku -RC_LH_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_LAKE_HYLIA true - -def RR_GERUDO_VALLEY SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY -Gerudo Valley -BugRock IsChild -RC_GV_GS_SMALL_BRIDGE (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) -RR_HYRULE_FIELD true -RR_GV_UPPER_STREAM (or IsChild (or (HasItem RG_BRONZE_SCALE) TakeDamage)) -RR_GV_CRATE_LEDGE (or IsChild (CanUse RG_LONGSHOT)) -RR_GV_GROTTO_LEDGE true -RR_GV_FORTRESS_SIDE (or (and IsAdult (or (CanUse RG_EPONA) (or (CanUse RG_LONGSHOT) (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) THRescuedAllCarpenters)))) (and IsChild (CanUse RG_HOOKSHOT))) -//can use cucco as child -RR_GV_LOWER_STREAM IsChild - -def RR_GV_UPPER_STREAM SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY -GV Upper Stream -GossipStoneFairy CallGossipFairy -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -//can use cucco as child -RC_GV_WATERFALL_FREESTANDING_POH (or IsChild (HasItem RG_BRONZE_SCALE)) -RC_GV_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) -RC_GV_COW (and IsChild (CanUse RG_EPONAS_SONG)) -RC_GV_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_GV_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_GV_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_GV_GOSSIP_STONE_FAIRY CallGossipFairy -RC_GV_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_GV_GOSSIP_STONE true -RC_GV_NEAR_COW_CRATE (and IsChild CanBreakCrates) -RR_GV_LOWER_STREAM (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) - -def RR_GV_LOWER_STREAM SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY -GV Lower Stream -RR_LAKE_HYLIA true - -def RR_GV_GROTTO_LEDGE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY -GV Grotto Ledge -RR_GV_UPPER_STREAM (and RT_DAMAGE_BOOST_SIMPLE HasExplosives) -RR_GV_LOWER_STREAM (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) -RR_GV_OCTOROK_GROTTO (CanUse RG_SILVER_GAUNTLETS) -RR_GV_CRATE_LEDGE (CanUse RG_LONGSHOT) - -def RR_GV_CRATE_LEDGE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY -GV Crate Ledge -RC_GV_CRATE_FREESTANDING_POH CanBreakCrates -RC_GV_FREESTANDING_POH_CRATE CanBreakCrates -RR_GV_UPPER_STREAM (and RT_DAMAGE_BOOST_SIMPLE HasExplosives) -RR_GV_LOWER_STREAM (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) - -def RR_GV_OCTOROK_GROTTO SCENE_GROTTOS false -GV Octorok Grotto -RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_GV_OCTOROK_GROTTO_RED_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RR_GV_GROTTO_LEDGE true - -def RR_GV_FORTRESS_SIDE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY -GV Fortress Side -RC_GV_CHEST (and IsAdult (CanUse RG_MEGATON_HAMMER)) -RC_GV_TRADE_SAW (and IsAdult (CanUse RG_POACHERS_SAW)) -RC_GV_GS_BEHIND_TENT (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_GV_GS_PILLAR (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_GV_CRATE_BRIDGE_1 (and IsChild CanBreakCrates) -RC_GV_CRATE_BRIDGE_2 (and IsChild CanBreakCrates) -RC_GV_CRATE_BRIDGE_3 (and IsChild CanBreakCrates) -RC_GV_CRATE_BRIDGE_4 (and IsChild CanBreakCrates) -RR_GF_OUTSKIRTS true -RR_GV_UPPER_STREAM true -RR_GERUDO_VALLEY (or IsChild (or (CanUse RG_EPONA) (or (CanUse RG_LONGSHOT) (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) THRescuedAllCarpenters)))) -RR_GV_CARPENTER_TENT IsAdult -RR_GV_STORMS_GROTTO (and IsAdult CanOpenStormsGrotto) -RR_GV_CRATE_LEDGE (and RT_DAMAGE_BOOST_SIMPLE HasExplosives) - -def RR_GV_CARPENTER_TENT SCENE_CARPENTERS_TENT false -GV Carpenter Tent -RR_GV_FORTRESS_SIDE true - -def RR_GV_STORMS_GROTTO SCENE_GROTTOS false -GV Storms Grotto -RC_GV_DEKU_SCRUB_GROTTO_REAR CanStunDeku -RC_GV_DEKU_SCRUB_GROTTO_FRONT CanStunDeku -RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_GV_FORTRESS_SIDE true - -def RR_GF_OUTSKIRTS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -Gerudo Fortress Outskirts -GF_GateOpen (and IsAdult (HasItem RG_GERUDO_MEMBERSHIP_CARD)) -RC_GF_OUTSKIRTS_NE_CRATE (and (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) CanBreakCrates) -RC_GF_OUTSKIRTS_NW_CRATE (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) -RR_GV_FORTRESS_SIDE true -RR_TH_1_TORCH_CELL true -RR_GF_OUTSIDE_GATE GF_GateOpen -RR_GF_NEAR_GROTTO (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) -RR_GF_OUTSIDE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) -//You can talk to the guards to get yourself thrown in jail, so long as you have a hookshot to actually end up there -RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) - -def RR_GF_NEAR_GROTTO SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Near Grotto -RC_GF_SOUTHMOST_CENTER_CRATE CanBreakCrates -RC_GF_MID_SOUTH_CENTER_CRATE CanBreakCrates -RC_GF_MID_NORTH_CENTER_CRATE CanBreakCrates -RC_GF_NORTHMOST_CENTER_CRATE CanBreakCrates -RR_TH_1_TORCH_CELL true -RR_TH_STEEP_SLOPE_CELL true -RR_TH_KITCHEN_CORRIDOR true -RR_GF_OUTSKIRTS true -RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) -RR_GF_OUTSIDE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) -RR_GF_TOP_OF_UPPER_VINES (CanUse RG_LONGSHOT) -RR_GF_STORMS_GROTTO (and IsAdult CanOpenStormsGrotto) - -def RR_GF_OUTSIDE_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Outside GTG -GtG_GateOpen (and IsAdult (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (HasItem RG_CHILD_WALLET))) -RR_GF_TO_GTG (and GtG_GateOpen (or IsAdult RSK_SHUFFLE_DUNGEON_ENTRANCES)) -RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) -RR_GF_OUTSKIRTS true -RR_GF_NEAR_GROTTO (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) -RR_GF_ABOVE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) -RR_GF_TOP_OF_UPPER_VINES (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (CanUse RG_LONGSHOT)) -RR_GF_HBA_RANGE (or IsChild (HasItem RG_GERUDO_MEMBERSHIP_CARD)) - -def RR_GF_TO_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF to GTG -RR_GERUDO_TRAINING_GROUND_ENTRYWAY true - -def RR_GF_EXITING_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Exiting GTG -RR_GF_OUTSIDE_GTG (or IsChild (HasItem RG_GERUDO_MEMBERSHIP_CARD)) -RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) -RR_GF_OUTSKIRTS true - -def RR_GF_ABOVE_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Above GTG -RR_TH_DOUBLE_CELL true -RR_TH_KITCHEN_CORRIDOR true -RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) -RR_GF_OUTSKIRTS true -RR_GF_NEAR_GROTTO true -RR_GF_OUTSIDE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) -RR_GF_BOTTOM_OF_LOWER_VINES (!= RT_GF_JUMP 0) - -def RR_GF_BOTTOM_OF_LOWER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Bottom of Lower Vines -RR_TH_STEEP_SLOPE_CELL true -RR_GF_NEAR_GROTTO true -RR_GF_TOP_OF_LOWER_VINES true -RR_GF_ABOVE_GTG true - -def RR_GF_TOP_OF_LOWER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Top of Lower Vines -RR_TH_KITCHEN_TOP true -RR_TH_DOUBLE_CELL true -RR_GF_ABOVE_GTG true -RR_GF_BOTTOM_OF_LOWER_VINES true -RR_GF_BOTTOM_OF_UPPER_VINES (and IsAdult RT_GF_JUMP) - -def RR_GF_NEAR_GS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Near GS -//if RR_GF_SLOPED_ROOF > RR_GF_TOP_OF_UPPER_VINES is ever made part of RT_GF_JUMP, climb is needed to get back up -RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOMB_THROW) CanGetNightTimeGS)) -RR_TH_KITCHEN_TOP true -RR_GF_BOTTOM_OF_LOWER_VINES true -RR_GF_TOP_OF_LOWER_VINES true -RR_GF_SLOPED_ROOF IsAdult -RR_GF_LONG_ROOF (or (CanUse RG_HOVER_BOOTS) (and IsAdult RT_GF_JUMP)) -RR_GF_NEAR_CHEST (CanUse RG_LONGSHOT) -RR_GF_BELOW_GS true - -def RR_GF_SLOPED_ROOF SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Sloped Roof -RR_GF_TOP_OF_LOWER_VINES true -RR_GF_NEAR_GS true -RR_GF_BOTTOM_OF_UPPER_VINES true -RR_GF_TOP_OF_UPPER_VINES (and IsAdult RT_GF_JUMP) - -def RR_GF_BOTTOM_OF_UPPER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Bottom of Upper Vines -RR_GF_OUTSIDE_GTG true -RR_GF_TOP_OF_LOWER_VINES true -RR_GF_SLOPED_ROOF (and IsAdult (CanUse RG_HOVER_BOOTS)) -RR_GF_TOP_OF_UPPER_VINES true -RR_GF_TO_GTG (and IsAdult RT_GF_LEDGE_CLIP_INTO_GTG) - -def RR_GF_TOP_OF_UPPER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Top of Upper Vines -RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH) CanGetNightTimeGS)) -RR_GF_TOP_OF_LOWER_VINES true -RR_GF_SLOPED_ROOF true -RR_GF_BOTTOM_OF_UPPER_VINES true -RR_GF_NEAR_CHEST (or (CanUse RG_HOVER_BOOTS) (or (and IsAdult (and (CanUse RG_SCARECROW) (CanUse RG_HOOKSHOT))) (CanUse RG_LONGSHOT))) - -def RR_GF_NEAR_CHEST SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Near Chest -RC_GF_CHEST true -RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) CanGetNightTimeGS)) -RR_GF_NEAR_GS true -RR_GF_LONG_ROOF true - -def RR_GF_LONG_ROOF SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Long Roof -RR_GF_BOTTOM_OF_LOWER_VINES true -//hookshot to cross using the rafters is implied in logic->CanPassEnemy(RE_GERUDO_GUARD) -RR_GF_NEAR_GS (or (and IsAdult RT_GF_JUMP) (CanUse RG_HOVER_BOOTS)) -RR_GF_BELOW_GS true -RR_GF_NEAR_CHEST (CanUse RG_LONGSHOT) -RR_GF_BELOW_CHEST true - -def RR_GF_BELOW_GS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Below GS -RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_LONGSHOT) CanGetNightTimeGS)) -RR_TH_DEAD_END_CELL true -RR_GF_BOTTOM_OF_LOWER_VINES true - -def RR_GF_BELOW_CHEST SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Below Chest -RR_TH_BREAK_ROOM true -RR_GF_OUTSKIRTS true - -def RR_GF_HBA_RANGE SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF HBA Range -RC_GF_HBA_1000_POINTS (and IsAdult (and (HasItem RG_CHILD_WALLET) (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (and (CanUse RG_EPONA) (and (CanUse RG_FAIRY_BOW) AtDay))))) -RC_GF_HBA_1500_POINTS (and IsAdult (and (HasItem RG_CHILD_WALLET) (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (and (CanUse RG_EPONA) (and (CanUse RG_FAIRY_BOW) AtDay))))) -RC_GF_HBA_RANGE_GS (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) CanGetNightTimeGS)) -RC_GF_HBA_RANGE_CRATE_1 CanBreakCrates -RC_GF_HBA_RANGE_CRATE_2 CanBreakCrates -RC_GF_HBA_RANGE_CRATE_3 CanBreakCrates -RC_GF_HBA_RANGE_CRATE_4 CanBreakCrates -RC_GF_HBA_RANGE_CRATE_5 CanBreakCrates -RC_GF_HBA_RANGE_CRATE_6 CanBreakCrates -RC_GF_HBA_RANGE_CRATE_7 CanBreakCrates -RC_GF_HBA_CANOPY_EAST_CRATE CanBreakCrates -RC_GF_HBA_CANOPY_WEST_CRATE CanBreakCrates -RC_GF_NORTH_TARGET_EAST_CRATE CanBreakCrates -RC_GF_NORTH_TARGET_WEST_CRATE (or IsAdult (or BlastOrSmash (or HookshotOrBoomerang (CanUse RG_HOVER_BOOTS)))) -//implies CanBreakCrates -RC_GF_NORTH_TARGET_CHILD_CRATE (and IsChild BlastOrSmash) -RC_GF_SOUTH_TARGET_EAST_CRATE CanBreakCrates -RC_GF_SOUTH_TARGET_WEST_CRATE CanBreakCrates -RR_GF_OUTSIDE_GTG (or IsChild (HasItem RG_GERUDO_MEMBERSHIP_CARD)) - -def RR_GF_ABOVE_JAIL SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Above Jail -RC_GF_ABOVE_JAIL_CRATE true -//you don't take fall damage if you land on the rock with the flag on for some reason -//there's a trick to reach RR_GF_LONG_ROOF but that's too intricate for GF_JUMP -RR_GF_OUTSKIRTS (!= RT_GF_JUMP 0) -RR_GF_NEAR_CHEST (CanUse RG_LONGSHOT) -RR_GF_BELOW_CHEST TakeDamage -RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) - -def RR_GF_JAIL_WINDOW SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Jail Window -//There's a trick where hovers backwalk into backflip gives access to RR_GF_LONG_ROOF from here -RR_GF_OUTSKIRTS true -RR_GF_BELOW_CHEST true - -def RR_GF_OUTSIDE_GATE SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS -GF Outside Gate -GF_GateOpen (and IsAdult (HasItem RG_GERUDO_MEMBERSHIP_CARD)) -RR_GF_OUTSKIRTS GF_GateOpen -RR_WASTELAND_NEAR_FORTRESS true - -def RR_GF_STORMS_GROTTO SCENE_GROTTOS false -GF Storms Grotto -FreeFairies true -RC_GF_FAIRY_GROTTO_FAIRY_1 true -RC_GF_FAIRY_GROTTO_FAIRY_2 true -RC_GF_FAIRY_GROTTO_FAIRY_3 true -RC_GF_FAIRY_GROTTO_FAIRY_4 true -RC_GF_FAIRY_GROTTO_FAIRY_5 true -RC_GF_FAIRY_GROTTO_FAIRY_6 true -RC_GF_FAIRY_GROTTO_FAIRY_7 true -RC_GF_FAIRY_GROTTO_FAIRY_8 true -RR_GF_NEAR_GROTTO true - -def RR_TH_1_TORCH_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout 1 Torch Cell -THCouldFree1TorchCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) -THRescuedAllCarpenters (and (SmallKeys RR_GF_OUTSKIRTS (if (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) 4 1)) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter)))) -RC_TH_1_TORCH_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) -RC_TH_1_TORCH_CELL_RIGHT_POT CanBreakPots -RC_TH_1_TORCH_CELL_MID_POT CanBreakPots -RC_TH_1_TORCH_CELL_LEFT_POT CanBreakPots -RC_TH_1_TORCH_CELL_CRATE CanBreakCrates -RC_TH_FREED_CARPENTERS THRescuedAllCarpenters -RR_GF_OUTSKIRTS true -RR_GF_NEAR_GROTTO true - -def RR_TH_DOUBLE_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Double Cell -THCouldFreeDoubleCellCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) -THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys RR_GF_OUTSKIRTS 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) -RC_TH_DOUBLE_CELL_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) -RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT CanBreakPots -RC_TH_NEAR_DOUBLE_CELL_MID_POT CanBreakPots -RC_TH_NEAR_DOUBLE_CELL_LEFT_POT CanBreakPots -RC_TH_RIGHTMOST_JAILED_POT CanBreakPots -RC_TH_RIGHT_MIDDLE_JAILED_POT CanBreakPots -RC_TH_LEFT_MIDDLE_JAILED_POT CanBreakPots -RC_TH_LEFTMOST_JAILED_POT CanBreakPots -RC_TH_DOUBLE_CELL_LEFT_CRATE CanBreakCrates -RC_TH_DOUBLE_CELL_RIGHT_CRATE CanBreakCrates -RC_TH_FREED_CARPENTERS THRescuedAllCarpenters -RR_GF_OUTSKIRTS true -RR_GF_NEAR_GROTTO true - -def RR_TH_DEAD_END_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Dead End Cell -TH_CouldFreeDeadEndCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) -THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys RR_GF_OUTSKIRTS 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) -RC_TH_DEAD_END_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) -RC_TH_DEAD_END_CELL_CRATE CanBreakCrates -RC_TH_FREED_CARPENTERS THRescuedAllCarpenters -RR_GF_BELOW_GS true - -def RR_TH_STEEP_SLOPE_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Steep Slope Cell -THCouldRescueSlopeCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) -THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys RR_GF_OUTSKIRTS 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) -RC_TH_STEEP_SLOPE_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) -RC_TH_STEEP_SLOPE_RIGHT_POT CanBreakPots -RC_TH_STEEP_SLOPE_LEFT_POT CanBreakPots -RC_TH_FREED_CARPENTERS THRescuedAllCarpenters -RR_GF_ABOVE_GTG true -RR_GF_TOP_OF_LOWER_VINES true - -def RR_TH_KITCHEN_CORRIDOR SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Kitchen Corridor -RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE CanBreakCrates -RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE CanBreakCrates -RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE CanBreakCrates -RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE CanBreakCrates -RR_GF_NEAR_GROTTO true -RR_GF_ABOVE_GTG true -RR_TH_KITCHEN_MAIN (CanPassEnemy RE_GERUDO_GUARD) - -def RR_TH_KITCHEN_MAIN SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Kitchen Bottom -RC_TH_KITCHEN_POT_1 (and CanBreakPots (CanPassEnemy RE_GERUDO_GUARD)) -RC_TH_KITCHEN_POT_2 (and CanBreakPots (CanPassEnemy RE_GERUDO_GUARD)) -RC_TH_KITCHEN_CRATE (and CanBreakCrates (CanPassEnemy RE_GERUDO_GUARD)) -RC_TH_KITCHEN_SUN_FAIRY (and (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_SUNS_SONG)) -RR_TH_KITCHEN_CORRIDOR (CanPassEnemy RE_GERUDO_GUARD) -RR_TH_KITCHEN_TOP (CanPassEnemy RE_GERUDO_GUARD) - -def RR_TH_KITCHEN_TOP SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Kitchen Top -RC_TH_KITCHEN_POT_1 (CanUse RG_BOOMERANG) -RC_TH_KITCHEN_POT_2 (CanUse RG_BOOMERANG) -RR_TH_KITCHEN_MAIN true -RR_GF_NEAR_GS (or (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_HOVER_BOOTS)) -RR_GF_TOP_OF_LOWER_VINES (or (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_HOVER_BOOTS)) - -def RR_TH_BREAK_ROOM SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Break Room -RC_TH_BREAK_ROOM_FRONT_POT (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakPots) (and (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_BOOMERANG))) -RC_TH_BREAK_ROOM_BACK_POT (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakPots) (and (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_BOOMERANG))) -RC_TH_BREAK_HALLWAY_OUTER_CRATE CanBreakCrates -RC_TH_BREAK_HALLWAY_INNER_CRATE CanBreakCrates -RC_TH_BREAK_ROOM_RIGHT_CRATE (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakCrates) (and (CanPassEnemy RE_GERUDO_GUARD) (and HasExplosives (CanUse RG_BOOMERANG)))) -RC_TH_BREAK_ROOM_LEFT_CRATE (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakCrates) (and (CanPassEnemy RE_GERUDO_GUARD) (and HasExplosives (CanUse RG_BOOMERANG)))) -RR_GF_BELOW_CHEST (CanPassEnemy RE_GERUDO_GUARD) -//Implies logic->CanPassEnemy(RE_GERUDO_GUARD) -RR_TH_BREAK_ROOM_CORRIDOR (CanUse RG_HOOKSHOT) - -def RR_TH_BREAK_ROOM_CORRIDOR SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS -Thieves Hideout Break Room -RR_TH_BREAK_ROOM (CanUse RG_HOOKSHOT) -RR_GF_ABOVE_JAIL true - -def RR_WASTELAND_NEAR_FORTRESS SCENE_HAUNTED_WASTELAND false RA_HAUNTED_WASTELAND -Wasteland Near Fortress -RC_HW_BEFORE_QUICKSAND_CRATE CanBreakCrates -RR_GF_OUTSIDE_GATE true -RR_HAUNTED_WASTELAND (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_LONGSHOT) RT_HW_CROSSING)) - -def RR_HAUNTED_WASTELAND SCENE_HAUNTED_WASTELAND false RA_HAUNTED_WASTELAND -Haunted Wasteland -FairyPot true -NutPot true -CarpetMerchant (and (HasItem RG_ADULT_WALLET) (and (CanBuyAnother RC_WASTELAND_BOMBCHU_SALESMAN) (or CanJumpslash (CanUse RG_HOVER_BOOTS)))) -RC_WASTELAND_CHEST HasFireSource -RC_WASTELAND_BOMBCHU_SALESMAN (or CanJumpslash (CanUse RG_HOVER_BOOTS)) -RC_WASTELAND_GS HookshotOrBoomerang -RC_WASTELAND_NEAR_GS_POT_1 CanBreakPots -RC_WASTELAND_NEAR_GS_POT_2 CanBreakPots -RC_WASTELAND_NEAR_GS_POT_3 CanBreakPots -RC_WASTELAND_NEAR_GS_POT_4 CanBreakPots -RC_HW_AFTER_QUICKSAND_CRATE_1 CanBreakCrates -RC_HW_AFTER_QUICKSAND_CRATE_2 CanBreakCrates -RC_HW_AFTER_QUICKSAND_CRATE_3 CanBreakCrates -RR_WASTELAND_NEAR_COLOSSUS (or RT_LENS_HW (CanUse RG_LENS_OF_TRUTH)) -RR_WASTELAND_NEAR_FORTRESS (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_LONGSHOT) RT_HW_CROSSING)) - -def RR_WASTELAND_NEAR_COLOSSUS SCENE_HAUNTED_WASTELAND false RA_HAUNTED_WASTELAND -Wasteland Near Colossus -RC_HW_NEAR_COLOSSUS_CRATE CanBreakCrates -RR_DESERT_COLOSSUS true -RR_HAUNTED_WASTELAND (or RT_HW_REVERSE false) - -def RR_DESERT_COLOSSUS SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS -Desert Colossus -FairyPond (CanUse RG_SONG_OF_STORMS) -BugRock true -RC_COLOSSUS_FREESTANDING_POH (and IsAdult (CanPlantBean RR_DESERT_COLOSSUS)) -RC_COLOSSUS_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) -RC_COLOSSUS_GS_TREE (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_COLOSSUS_GS_HILL (and IsAdult (and (or (and (CanPlantBean RR_DESERT_COLOSSUS) CanAttack) (or (CanUse RG_LONGSHOT) (and RT_COLOSSUS_GS (CanUse RG_HOOKSHOT)))) CanGetNightTimeGS)) -RC_COLOSSUS_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_COLOSSUS_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_COLOSSUS_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_COLOSSUS_GOSSIP_STONE_FAIRY CallGossipFairy -RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_COLOSSUS_GOSSIP_STONE true -//You can kinda get the fairies without entering the water, but it relies on them cooperating and leevers are jerks. should be a trick -RR_DESERT_COLOSSUS_OASIS (and (CanUse RG_SONG_OF_STORMS) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS))) -RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN HasExplosives -RR_SPIRIT_TEMPLE_ENTRYWAY true -RR_WASTELAND_NEAR_COLOSSUS true -RR_COLOSSUS_GROTTO (CanUse RG_SILVER_GAUNTLETS) - -//specifically the full oasis, after the fairies have spawned -def RR_DESERT_COLOSSUS_OASIS SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS -Desert Colossus Oasis -FairyPond true -RC_COLOSSUS_OASIS_FAIRY_1 true -RC_COLOSSUS_OASIS_FAIRY_2 true -RC_COLOSSUS_OASIS_FAIRY_3 true -RC_COLOSSUS_OASIS_FAIRY_4 true -RC_COLOSSUS_OASIS_FAIRY_5 true -RC_COLOSSUS_OASIS_FAIRY_6 true -RC_COLOSSUS_OASIS_FAIRY_7 true -RC_COLOSSUS_OASIS_FAIRY_8 true -RR_DESERT_COLOSSUS true - -def RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS -Desert Colossus From Spirit Entryway -RC_SHEIK_AT_COLOSSUS true -RR_DESERT_COLOSSUS true - -def RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false -Colossus Great Fairy Fountain -RC_COLOSSUS_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) -RR_DESERT_COLOSSUS true - -def RR_COLOSSUS_GROTTO SCENE_GROTTOS false -Colossus Grotto -RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR CanStunDeku -RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT CanStunDeku -RC_COLOSSUS_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_DESERT_COLOSSUS true - -def RR_MARKET_ENTRANCE SCENE_MARKET_ENTRANCE_DAY false RA_THE_MARKET -Market Entrance -RR_HYRULE_FIELD (or IsAdult AtDay) -RR_THE_MARKET true -RR_MARKET_GUARD_HOUSE (CanOpenOverworldDoor RG_GUARD_HOUSE_KEY) - -def RR_THE_MARKET SCENE_MARKET_DAY false RA_THE_MARKET -Market -//RANDOTODO add item avalibility to regions to remove need to hardcode logic in limited item use situations -RC_MARKET_GRASS_1 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MARKET_GRASS_2 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MARKET_GRASS_3 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MARKET_GRASS_4 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MARKET_GRASS_5 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MARKET_GRASS_6 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MARKET_GRASS_7 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MARKET_GRASS_8 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) -RC_MK_NEAR_BAZAAR_CRATE_1 IsChild -RC_MK_NEAR_BAZAAR_CRATE_2 IsChild -RC_MK_SHOOTING_GALLERY_CRATE_1 IsChild -RC_MK_SHOOTING_GALLERY_CRATE_2 IsChild -RR_MARKET_ENTRANCE true -RR_TOT_ENTRANCE true -RR_CASTLE_GROUNDS true -RR_MARKET_BAZAAR (and IsChild (and AtDay (CanOpenOverworldDoor RG_MARKET_BAZAAR_KEY))) -RR_MARKET_MASK_SHOP (and IsChild (and AtDay (CanOpenOverworldDoor RG_MASK_SHOP_KEY))) -RR_MARKET_SHOOTING_GALLERY (and IsChild (and AtDay (CanOpenOverworldDoor RG_MARKET_SHOOTING_GALLERY_KEY))) -RR_MARKET_BOMBCHU_BOWLING (and IsChild (CanOpenOverworldDoor RG_BOMBCHU_BOWLING_KEY)) -RR_MARKET_TREASURE_CHEST_GAME (and IsChild (and AtNight (CanOpenOverworldDoor RG_TREASURE_CHEST_GAME_BUILDING_KEY))) -RR_MARKET_POTION_SHOP (and IsChild (and AtDay (CanOpenOverworldDoor RG_MARKET_POTION_SHOP_KEY))) -RR_MARKET_BACK_ALLEY IsChild - -def RR_MARKET_GUARD_HOUSE SCENE_MARKET_GUARD_HOUSE false -Market Guard House -CanEmptyBigPoes IsAdult -RC_MARKET_10_BIG_POES (and IsAdult (or BigPoeKill (>= BigPoes RSK_BIG_POE_COUNT))) -RC_MARKET_GS_GUARD_HOUSE IsChild -RC_MK_GUARD_HOUSE_CHILD_POT_1 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_2 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_3 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_4 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_5 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_6 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_7 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_8 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_9 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_10 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_11 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_12 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_13 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_14 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_15 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_16 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_17 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_18 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_19 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_20 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_21 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_22 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_23 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_24 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_25 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_26 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_27 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_28 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_29 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_30 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_31 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_32 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_33 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_34 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_35 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_36 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_37 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_38 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_39 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_40 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_41 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_42 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_43 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_CHILD_POT_44 (and IsChild CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_1 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_2 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_3 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_4 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_5 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_6 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_7 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_8 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_9 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_10 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_ADULT_POT_11 (and IsAdult CanBreakPots) -RC_MK_GUARD_HOUSE_CRATE_1 (and IsChild CanBreakCrates) -RC_MK_GUARD_HOUSE_CRATE_2 (and IsChild CanBreakCrates) -RC_MK_GUARD_HOUSE_CRATE_3 (and IsChild CanBreakCrates) -RC_MK_GUARD_HOUSE_CRATE_4 (and IsChild CanBreakCrates) -RC_MK_GUARD_HOUSE_CRATE_5 (and IsChild CanBreakCrates) -RR_MARKET_ENTRANCE true - -def RR_MARKET_BAZAAR SCENE_BAZAAR false -Market Bazaar -RC_MARKET_BAZAAR_ITEM_1 true -RC_MARKET_BAZAAR_ITEM_2 true -RC_MARKET_BAZAAR_ITEM_3 true -RC_MARKET_BAZAAR_ITEM_4 true -RC_MARKET_BAZAAR_ITEM_5 true -RC_MARKET_BAZAAR_ITEM_6 true -RC_MARKET_BAZAAR_ITEM_7 true -RC_MARKET_BAZAAR_ITEM_8 true -RR_THE_MARKET true - -def RR_MARKET_MASK_SHOP SCENE_HAPPY_MASK_SHOP false -Market Mask Shop -//Currently, mask swap in menu doesn't need access to the mask shop -//If it is forced on/a setting, a copy of these events should be added to root -//it also doesn't need you to open kak gate, but that might be best treated as a bug -CanBorrowMasks (and (HasItem RG_ZELDAS_LETTER) KakarikoVillageGateOpen) -BorrowSkullMask (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) -BorrowSpookyMask (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) -BorrowBunnyHood (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) -BorrowRightMasks (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) -RC_MASK_SHOP_HINT true -RR_THE_MARKET true - -def RR_MARKET_SHOOTING_GALLERY SCENE_SHOOTING_GALLERY false -Market Shooting Gallery -RC_MARKET_SHOOTING_GALLERY_REWARD (and IsChild (HasItem RG_CHILD_WALLET)) -RR_THE_MARKET true - -def RR_MARKET_BOMBCHU_BOWLING SCENE_BOMBCHU_BOWLING_ALLEY false -Market Bombchu Bowling -CouldPlayBowling (HasItem RG_CHILD_WALLET) -RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE (and CouldPlayBowling BombchusEnabled) -RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE (and CouldPlayBowling BombchusEnabled) -RR_THE_MARKET true - -def RR_MARKET_TREASURE_CHEST_GAME SCENE_TREASURE_BOX_SHOP false -Market Treasure Chest Game -RC_GREG_HINT (HasItem RG_CHILD_WALLET) -RC_MARKET_TREASURE_CHEST_GAME_REWARD (and (HasItem RG_CHILD_WALLET) (or (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 6)) (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1))))) -RC_MARKET_TREASURE_CHEST_GAME_KEY_1 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_ITEM_1 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_KEY_2 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 2)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_ITEM_2 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 2)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_KEY_3 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 3)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_ITEM_3 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 3)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_KEY_4 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 4)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_ITEM_4 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 4)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_KEY_5 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 5)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RC_MARKET_TREASURE_CHEST_GAME_ITEM_5 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 5)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) -RR_THE_MARKET true - -def RR_MARKET_POTION_SHOP SCENE_POTION_SHOP_MARKET false -Market Potion Shop -RC_MARKET_POTION_SHOP_ITEM_1 true -RC_MARKET_POTION_SHOP_ITEM_2 true -RC_MARKET_POTION_SHOP_ITEM_3 true -RC_MARKET_POTION_SHOP_ITEM_4 true -RC_MARKET_POTION_SHOP_ITEM_5 true -RC_MARKET_POTION_SHOP_ITEM_6 true -RC_MARKET_POTION_SHOP_ITEM_7 true -RC_MARKET_POTION_SHOP_ITEM_8 true -RR_THE_MARKET true - -def RR_MARKET_BACK_ALLEY SCENE_BACK_ALLEY_DAY false RA_THE_MARKET -Market Back Alley -RR_THE_MARKET true -RR_MARKET_BOMBCHU_SHOP (and AtNight (CanOpenOverworldDoor RG_BOMBCHU_SHOP_KEY)) -RR_MARKET_DOG_LADY_HOUSE (CanOpenOverworldDoor RG_RICHARDS_HOUSE_KEY) -RR_MARKET_MAN_IN_GREEN_HOUSE (and AtNight (CanOpenOverworldDoor RG_ALLEY_HOUSE_KEY)) - -def RR_MARKET_BOMBCHU_SHOP SCENE_BOMBCHU_SHOP false -Market Bombchu Shop -RC_MARKET_BOMBCHU_SHOP_ITEM_1 true -RC_MARKET_BOMBCHU_SHOP_ITEM_2 true -RC_MARKET_BOMBCHU_SHOP_ITEM_3 true -RC_MARKET_BOMBCHU_SHOP_ITEM_4 true -RC_MARKET_BOMBCHU_SHOP_ITEM_5 true -RC_MARKET_BOMBCHU_SHOP_ITEM_6 true -RC_MARKET_BOMBCHU_SHOP_ITEM_7 true -RC_MARKET_BOMBCHU_SHOP_ITEM_8 true -RR_MARKET_BACK_ALLEY true - -def RR_MARKET_DOG_LADY_HOUSE SCENE_DOG_LADY_HOUSE false -Market Dog Lady House -RC_MARKET_LOST_DOG (and IsChild AtNight) -RC_MK_LOST_DOG_HOUSE_CRATE CanBreakCrates -RR_MARKET_BACK_ALLEY true - -def RR_MARKET_MAN_IN_GREEN_HOUSE SCENE_BACK_ALLEY_HOUSE false -Market Man in Green House -RC_MK_BACK_ALLEY_HOUSE_POT_1 CanBreakPots -RC_MK_BACK_ALLEY_HOUSE_POT_2 CanBreakPots -RC_MK_BACK_ALLEY_HOUSE_POT_3 CanBreakPots -RR_MARKET_BACK_ALLEY true - -def RR_TOT_ENTRANCE SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY false RA_THE_MARKET -ToT Entrance -GossipStoneFairy CallGossipFairyExceptSuns -RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) -RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) -RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) -RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) -RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_TOT_LEFTMOST_GOSSIP_STONE true -RC_TOT_LEFT_CENTER_GOSSIP_STONE true -RC_TOT_RIGHT_CENTER_GOSSIP_STONE true -RC_TOT_RIGHTMOST_GOSSIP_STONE true -RR_THE_MARKET true -RR_TEMPLE_OF_TIME true - -def RR_TEMPLE_OF_TIME SCENE_TEMPLE_OF_TIME false RA_TEMPLE_OF_TIME -Temple of Time -RC_TOT_LIGHT_ARROWS_CUTSCENE (and IsAdult CanTriggerLACS) -RC_ALTAR_HINT_CHILD IsChild -RC_ALTAR_HINT_ADULT IsAdult -RC_TOT_SHEIK_HINT IsAdult -RR_TOT_ENTRANCE true -RR_TOT_BEYOND_DOOR_OF_TIME (or (== RSK_DOOR_OF_TIME RO_DOOROFTIME_OPEN) (and (CanUse RG_SONG_OF_TIME) (or (== RSK_DOOR_OF_TIME RO_DOOROFTIME_SONGONLY) (and (== StoneCount 3) (HasItem RG_OCARINA_OF_TIME))))) - -def RR_TOT_BEYOND_DOOR_OF_TIME SCENE_TEMPLE_OF_TIME false RA_TEMPLE_OF_TIME -Beyond Door of Time -RC_TOT_MASTER_SWORD IsAdult -RC_GIFT_FROM_RAURU IsAdult -RC_SHEIK_AT_TEMPLE (and (HasItem RG_FOREST_MEDALLION) IsAdult) -RR_TEMPLE_OF_TIME true - -//With multi-area support {RA_CASTLE_GROUNDS} is not strictly required anymore, as any interior here could inherit both -//{RA_HYRULE_CASTLE} and {RA_OUTSIDE_GANONS_CASTLE}, but a setting to merge the latter 2 into the former may be preferred -//Temporarily uses SCENE_OUTSIDE_GANONS_CASTLE to avoid self connection between ages -def RR_CASTLE_GROUNDS SCENE_OUTSIDE_GANONS_CASTLE false RA_CASTLE_GROUNDS -Castle Grounds -RR_THE_MARKET true -RR_HYRULE_CASTLE_GROUNDS IsChild -RR_GANONS_CASTLE_GROUNDS IsAdult - -def RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE -Castle Grounds From Ganon's Castle -RR_HYRULE_CASTLE_GROUNDS IsChild -RR_GANONS_CASTLE_LEDGE IsAdult - -def RR_HYRULE_CASTLE_GROUNDS SCENE_HYRULE_CASTLE true RA_HYRULE_CASTLE -Hyrule Castle Grounds -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugRock true -RC_HC_MALON_EGG true -RC_HC_GS_TREE (and IsChild (CanKillEnemy RE_GOLD_SKULLTULA ED_CLOSE)) -RC_HC_MALON_GOSSIP_STONE_FAIRY CallGossipFairy -RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY CallGossipFairy -RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_HC_MALON_GOSSIP_STONE true -RC_HC_ROCK_WALL_GOSSIP_STONE true -RC_HC_GRASS_1 CanCutShrubs -RC_HC_GRASS_2 CanCutShrubs -RR_CASTLE_GROUNDS true -RR_HC_GARDEN (or (CanUse RG_WEIRD_EGG) (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives CanJumpslash))) -RR_HC_GREAT_FAIRY_FOUNTAIN BlastOrSmash -RR_HC_STORMS_GROTTO CanOpenStormsGrotto - -def RR_HC_GARDEN SCENE_CASTLE_COURTYARD_ZELDA false -HC Garden -RC_HC_ZELDAS_LETTER true -RC_SONG_FROM_IMPA true -RR_HYRULE_CASTLE_GROUNDS true - -def RR_HC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false -HC Great Fairy Fountain -RC_HC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) -RR_CASTLE_GROUNDS true - -def RR_HC_STORMS_GROTTO SCENE_GROTTOS false -HC Storms Grotto -RC_HC_GS_STORMS_GROTTO (and (CanUse RG_BOOMERANG) RT_HC_STORMS_GS) -RR_CASTLE_GROUNDS true -RR_HC_STORMS_GROTTO_BEHIND_WALLS CanBreakMudWalls - -def RR_HC_STORMS_GROTTO_BEHIND_WALLS SCENE_GROTTOS false -HC Storms Grotto Behind Walls -NutPot true -GossipStoneFairy CallGossipFairy -WanderingBugs true -RC_HC_GS_STORMS_GROTTO HookshotOrBoomerang -RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_HC_STORMS_GROTTO_GOSSIP_STONE true -RC_HC_STORMS_GROTTO_POT_1 CanBreakPots -RC_HC_STORMS_GROTTO_POT_2 CanBreakPots -RC_HC_STORMS_GROTTO_POT_3 CanBreakPots -RC_HC_STORMS_GROTTO_POT_4 CanBreakPots -RR_HC_STORMS_GROTTO true - -def RR_GANONS_CASTLE_GROUNDS SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE -Ganon's Castle Grounds -BuiltRainbowBridge CanBuildRainbowBridge -RC_OGC_GS (or CanJumpslashExceptHammer (or CanUseProjectile (or (and CanShield (CanUse RG_MEGATON_HAMMER)) (CanUse RG_DINS_FIRE)))) -RR_CASTLE_GROUNDS AtNight -RR_OGC_GREAT_FAIRY_FOUNTAIN (and (CanUse RG_GOLDEN_GAUNTLETS) AtNight) -RR_GANONS_CASTLE_LEDGE BuiltRainbowBridge - -def RR_OGC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false -OGC Great Fairy Fountain -RC_OGC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) -RR_CASTLE_GROUNDS true - -def RR_GANONS_CASTLE_LEDGE SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE -Ganon's Castle Ledge -RR_GANONS_CASTLE_GROUNDS BuiltRainbowBridge -RR_GANONS_CASTLE_ENTRYWAY IsAdult - -def RR_KAKARIKO_VILLAGE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kakariko Village -BugRock true -//Open Gate setting is applied in RR_ROOT -KakarikoVillageGateOpen (and IsChild (HasItem RG_ZELDAS_LETTER)) -//Needs wallet to be able to get another mask after selling Keaton -BorrowSkullMask (and IsChild (and CanBorrowMasks (HasItem RG_CHILD_WALLET))) -RC_SHEIK_IN_KAKARIKO (and IsAdult (and (HasItem RG_FOREST_MEDALLION) (and (HasItem RG_FIRE_MEDALLION) (HasItem RG_WATER_MEDALLION)))) -RC_KAK_ANJU_AS_CHILD (and IsChild AtDay) -RC_KAK_ANJU_AS_ADULT (and IsAdult AtDay) -RC_KAK_TRADE_POCKET_CUCCO (and IsAdult (and AtDay (and (CanUse RG_POCKET_EGG) WakeUpAdultTalon))) -//Can kill lower kak skulls with pots -RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION (and IsChild CanGetNightTimeGS) -RC_KAK_GS_SKULLTULA_HOUSE (and IsChild CanGetNightTimeGS) -RC_KAK_GS_GUARDS_HOUSE (and IsChild CanGetNightTimeGS) -RC_KAK_GS_TREE (and IsChild CanGetNightTimeGS) -RC_KAK_GS_WATCHTOWER (and IsChild (and (or (CanKillEnemy RE_GOLD_SKULLTULA ED_LONGSHOT) (and RT_KAK_TOWER_GS CanJumpslashExceptHammer)) CanGetNightTimeGS)) -RC_KAK_NEAR_POTION_SHOP_POT_1 (and IsChild CanBreakPots) -RC_KAK_NEAR_POTION_SHOP_POT_2 (and IsChild CanBreakPots) -RC_KAK_NEAR_POTION_SHOP_POT_3 (and IsChild CanBreakPots) -RC_KAK_NEAR_IMPAS_HOUSE_POT_1 (and IsChild CanBreakPots) -RC_KAK_NEAR_IMPAS_HOUSE_POT_2 (and IsChild CanBreakPots) -RC_KAK_NEAR_IMPAS_HOUSE_POT_3 (and IsChild CanBreakPots) -RC_KAK_NEAR_GUARDS_HOUSE_POT_1 (and IsChild CanBreakPots) -RC_KAK_NEAR_GUARDS_HOUSE_POT_2 (and IsChild CanBreakPots) -RC_KAK_NEAR_GUARDS_HOUSE_POT_3 (and IsChild CanBreakPots) -RC_KAK_GRASS_1 CanCutShrubs -RC_KAK_GRASS_2 CanCutShrubs -RC_KAK_GRASS_3 CanCutShrubs -RC_KAK_GRASS_4 CanCutShrubs -RC_KAK_GRASS_5 CanCutShrubs -RC_KAK_GRASS_6 CanCutShrubs -RC_KAK_GRASS_7 CanCutShrubs -RC_KAK_GRASS_8 CanCutShrubs -RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE (and IsAdult CanBreakCrates) -RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE (and IsAdult CanBreakCrates) -RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1 (and IsAdult CanBreakCrates) -RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2 (and IsAdult CanBreakCrates) -RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE (and IsAdult CanBreakCrates) -RC_KAK_NEAR_GY_CHILD_CRATE (and IsChild CanBreakCrates) -RC_KAK_NEAR_WINDMILL_CHILD_CRATE (and IsChild CanBreakCrates) -RC_KAK_NEAR_FENCE_CHILD_CRATE (and IsChild CanBreakCrates) -RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE (and IsChild CanBreakCrates) -RC_KAK_NEAR_BAZAAR_CHILD_CRATE (and IsChild CanBreakCrates) -RR_HYRULE_FIELD true -RR_KAK_CARPENTER_BOSS_HOUSE (CanOpenOverworldDoor RG_BOSS_HOUSE_KEY) -RR_KAK_HOUSE_OF_SKULLTULA (CanOpenOverworldDoor RG_SKULLTULA_HOUSE_KEY) -RR_KAK_IMPAS_HOUSE (CanOpenOverworldDoor RG_IMPAS_HOUSE_KEY) -RR_KAK_WINDMILL (CanOpenOverworldDoor RG_WINDMILL_KEY) -RR_KAK_BAZAAR (and IsAdult (and AtDay (CanOpenOverworldDoor RG_KAK_BAZAAR_KEY))) -RR_KAK_SHOOTING_GALLERY (and IsAdult (and AtDay (CanOpenOverworldDoor RG_KAK_SHOOTING_GALLERY_KEY))) -RR_KAK_WELL (or IsAdult (or DrainWell (or (CanUse RG_IRON_BOOTS) (and RT_BOTTOM_OF_THE_WELL_NAVI_DIVE (and IsChild (and (HasItem RG_BRONZE_SCALE) CanJumpslash)))))) -RR_KAK_POTION_SHOP_FRONT (and (or AtDay IsChild) (CanOpenOverworldDoor RG_KAK_POTION_SHOP_KEY)) -RR_KAK_REDEAD_GROTTO CanOpenBombGrotto -RR_KAK_IMPAS_LEDGE (or (and IsChild AtDay) (and IsAdult RT_VISIBLE_COLLISION)) -RR_KAK_WATCHTOWER (or IsAdult (or AtDay (or (CanKillEnemy RE_GOLD_SKULLTULA ED_LONGSHOT) (and RT_KAK_TOWER_GS CanJumpslashExceptHammer)))) -RR_KAK_ROOFTOP (or (CanUse RG_HOOKSHOT) (and RT_KAK_MAN_ON_ROOF IsAdult)) -RR_KAK_IMPAS_ROOFTOP (or (CanUse RG_HOOKSHOT) (and RT_KAK_ROOFTOP_GS (CanUse RG_HOVER_BOOTS))) -RR_THE_GRAVEYARD true -RR_KAK_BEHIND_GATE (or IsAdult KakarikoVillageGateOpen) -//adult can jump from the fence near the windmill to ledgegrab the fence near granny's shop. is in logic on N64 -RR_KAK_BACKYARD (or IsAdult AtDay) - -def RR_KAK_CARPENTER_BOSS_HOUSE SCENE_KAKARIKO_CENTER_GUEST_HOUSE false -Kak Carpenter Boss House -WakeUpAdultTalon (and IsAdult (CanUse RG_POCKET_EGG)) -RR_KAKARIKO_VILLAGE true - -def RR_KAK_HOUSE_OF_SKULLTULA SCENE_HOUSE_OF_SKULLTULA false -Kak House of Skulltula -RC_KAK_10_GOLD_SKULLTULA_REWARD (>= GetGSCount 10) -RC_KAK_20_GOLD_SKULLTULA_REWARD (>= GetGSCount 20) -RC_KAK_30_GOLD_SKULLTULA_REWARD (>= GetGSCount 30) -RC_KAK_40_GOLD_SKULLTULA_REWARD (>= GetGSCount 40) -RC_KAK_50_GOLD_SKULLTULA_REWARD (>= GetGSCount 50) -RC_KAK_100_GOLD_SKULLTULA_REWARD (>= GetGSCount 100) -RR_KAKARIKO_VILLAGE true - -def RR_KAK_IMPAS_HOUSE SCENE_IMPAS_HOUSE false -Kak Impas House -RC_KAK_IMPAS_HOUSE_COW (CanUse RG_EPONAS_SONG) -RR_KAKARIKO_VILLAGE true - -def RR_KAK_IMPAS_LEDGE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kak Impas Ledge -RR_KAK_IMPAS_HOUSE_BACK true -RR_KAKARIKO_VILLAGE true - -def RR_KAK_IMPAS_HOUSE_BACK SCENE_IMPAS_HOUSE false -Kak Impas House Back -RC_KAK_IMPAS_HOUSE_FREESTANDING_POH true -RC_KAK_IMPAS_HOUSE_COW (CanUse RG_EPONAS_SONG) -RR_KAK_IMPAS_LEDGE true - -def RR_KAK_WINDMILL SCENE_WINDMILL_AND_DAMPES_GRAVE false -Kak Windmill -DrainWell (and IsChild (CanUse RG_SONG_OF_STORMS)) -RC_KAK_WINDMILL_FREESTANDING_POH (or (CanUse RG_BOOMERANG) (or DampesWindmillAccess (or (and IsAdult RT_KAK_ADULT_WINDMILL_POH) (and IsChild (and CanJumpslashExceptHammer RT_KAK_CHILD_WINDMILL_POH))))) -RC_SONG_FROM_WINDMILL (and IsAdult (HasItem RG_FAIRY_OCARINA)) -RR_KAKARIKO_VILLAGE true - -def RR_KAK_BAZAAR SCENE_BAZAAR false -Kak Bazaar -RC_KAK_BAZAAR_ITEM_1 true -RC_KAK_BAZAAR_ITEM_2 true -RC_KAK_BAZAAR_ITEM_3 true -RC_KAK_BAZAAR_ITEM_4 true -RC_KAK_BAZAAR_ITEM_5 true -RC_KAK_BAZAAR_ITEM_6 true -RC_KAK_BAZAAR_ITEM_7 true -RC_KAK_BAZAAR_ITEM_8 true -RR_KAKARIKO_VILLAGE true - -def RR_KAK_SHOOTING_GALLERY SCENE_SHOOTING_GALLERY false -Kak Shooting Gallery -RC_KAK_SHOOTING_GALLERY_REWARD (and (HasItem RG_CHILD_WALLET) (and IsAdult (CanUse RG_FAIRY_BOW))) -RR_KAKARIKO_VILLAGE true - -def RR_KAK_POTION_SHOP_FRONT SCENE_POTION_SHOP_KAKARIKO false -Kak Potion Shop Front -RC_KAK_POTION_SHOP_ITEM_1 IsAdult -RC_KAK_POTION_SHOP_ITEM_2 IsAdult -RC_KAK_POTION_SHOP_ITEM_3 IsAdult -RC_KAK_POTION_SHOP_ITEM_4 IsAdult -RC_KAK_POTION_SHOP_ITEM_5 IsAdult -RC_KAK_POTION_SHOP_ITEM_6 IsAdult -RC_KAK_POTION_SHOP_ITEM_7 IsAdult -RC_KAK_POTION_SHOP_ITEM_8 IsAdult -RR_KAKARIKO_VILLAGE true -RR_KAK_POTION_SHOP_BACK IsAdult - -def RR_KAK_POTION_SHOP_BACK SCENE_POTION_SHOP_KAKARIKO false -Kak Potion Shop Back -RR_KAK_BACKYARD IsAdult -RR_KAK_POTION_SHOP_FRONT true - -def RR_KAK_WATCHTOWER SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kak Watchtower -//exists for when age change is in logic. -RC_KAK_GS_WATCHTOWER (and IsChild (and (CanUse RG_DINS_FIRE) CanGetNightTimeGS)) -RR_KAKARIKO_VILLAGE true -RR_KAK_ROOFTOP (and RT_KAK_MAN_ON_ROOF IsChild) - -def RR_KAK_ROOFTOP SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kak Rooftop -RC_KAK_MAN_ON_ROOF true -RR_KAK_BACKYARD true -RR_KAKARIKO_VILLAGE true - -def RR_KAK_IMPAS_ROOFTOP SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kak Impas Rooftop -RC_KAK_GS_ABOVE_IMPAS_HOUSE (and IsAdult (and CanGetNightTimeGS (CanKillEnemy RE_GOLD_SKULLTULA))) -RR_KAK_IMPAS_LEDGE true -RR_KAKARIKO_VILLAGE true - -def RR_KAK_BEHIND_GATE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kak Behind Gate -RR_KAKARIKO_VILLAGE (or IsAdult (or RT_VISIBLE_COLLISION KakarikoVillageGateOpen)) -RR_DEATH_MOUNTAIN_TRAIL true - -def RR_KAK_BACKYARD SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kak Backyard -//There's probably a trick to get these with rang from the main region -RC_KAK_NEAR_MEDICINE_SHOP_POT_1 (and IsChild CanBreakPots) -RC_KAK_NEAR_MEDICINE_SHOP_POT_2 (and IsChild CanBreakPots) -RR_KAKARIKO_VILLAGE true -RR_KAK_OPEN_GROTTO true -RR_KAK_ODD_POTION_BUILDING (and IsAdult (CanOpenOverworldDoor RG_GRANNYS_POTION_SHOP_KEY)) -RR_KAK_POTION_SHOP_BACK (and IsAdult (and AtDay (CanOpenOverworldDoor RG_KAK_POTION_SHOP_KEY))) - -def RR_KAK_WELL SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE -Kak Well -RR_KAKARIKO_VILLAGE (or IsAdult (or (HasItem RG_BRONZE_SCALE) DrainWell)) -RR_BOTTOM_OF_THE_WELL_ENTRYWAY (or IsChild (and DrainWell (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) - -def RR_KAK_ODD_POTION_BUILDING SCENE_POTION_SHOP_GRANNY false -Kak Granny's Potion Shop -RC_KAK_TRADE_ODD_MUSHROOM (and IsAdult (CanUse RG_ODD_MUSHROOM)) -RC_KAK_GRANNYS_SHOP (and IsAdult (or (CanUse RG_ODD_MUSHROOM) (TradeQuestStep RG_ODD_MUSHROOM))) -RR_KAK_BACKYARD true - -def RR_KAK_REDEAD_GROTTO SCENE_GROTTOS false -Kak Redead Grotto -RC_KAK_REDEAD_GROTTO_CHEST (CanKillEnemy RE_REDEAD ED_CLOSE true 2) -RR_KAKARIKO_VILLAGE true - -def RR_KAK_OPEN_GROTTO SCENE_GROTTOS false -Kak Open Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_KAK_OPEN_GROTTO_CHEST true -RC_KAK_OPEN_GROTTO_FISH HasBottle -RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_KAK_OPEN_GROTTO_GOSSIP_STONE true -RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_KAK_OPEN_GROTTO_GRASS_1 CanCutShrubs -RC_KAK_OPEN_GROTTO_GRASS_2 CanCutShrubs -RC_KAK_OPEN_GROTTO_GRASS_3 CanCutShrubs -RC_KAK_OPEN_GROTTO_GRASS_4 CanCutShrubs -RR_KAK_BACKYARD true - -def RR_THE_GRAVEYARD SCENE_GRAVEYARD false RA_THE_GRAVEYARD -The Graveyard -ButterflyFairy (and (CanUse RG_STICKS) AtDay) -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -BugRock true -BorrowBunnyHood (and IsChild (and AtDay (and BorrowSpookyMask (HasItem RG_CHILD_WALLET)))) -RC_GRAVEYARD_FREESTANDING_POH (or (and (or (and IsAdult (CanPlantBean RR_THE_GRAVEYARD)) (CanUse RG_LONGSHOT)) CanBreakCrates) (and RT_GY_POH (CanUse RG_BOOMERANG))) -//TODO: This needs to change -RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR (and (HasItem RG_CHILD_WALLET) (and IsChild AtNight)) -RC_GRAVEYARD_GS_WALL (and IsChild (and HookshotOrBoomerang (and AtNight CanGetNightTimeGS))) -RC_GRAVEYARD_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) -RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_GY_GRASS_1 CanCutShrubs -RC_GY_GRASS_2 CanCutShrubs -RC_GY_GRASS_3 CanCutShrubs -RC_GY_GRASS_4 CanCutShrubs -RC_GY_GRASS_5 CanCutShrubs -RC_GY_GRASS_6 CanCutShrubs -RC_GY_GRASS_7 CanCutShrubs -RC_GY_GRASS_8 CanCutShrubs -RC_GY_GRASS_9 CanCutShrubs -RC_GY_GRASS_10 CanCutShrubs -RC_GY_GRASS_11 CanCutShrubs -RC_GY_GRASS_12 CanCutShrubs -RC_GRAVEYARD_CRATE (and (or (and IsAdult (CanPlantBean RR_THE_GRAVEYARD)) (CanUse RG_LONGSHOT)) CanBreakCrates) -RR_GRAVEYARD_SHIELD_GRAVE (or IsAdult AtNight) -RR_GRAVEYARD_COMPOSERS_GRAVE (CanUse RG_ZELDAS_LULLABY) -RR_GRAVEYARD_HEART_PIECE_GRAVE (or IsAdult AtNight) -RR_GRAVEYARD_DAMPES_GRAVE IsAdult -//TODO: This needs to be handled in ToD rework -RR_GRAVEYARD_DAMPES_HOUSE (and IsAdult (CanOpenOverworldDoor RG_DAMPES_HUT_KEY)) -RR_KAKARIKO_VILLAGE true -RR_GRAVEYARD_WARP_PAD_REGION false - -def RR_GRAVEYARD_DAMPES_GRAVE SCENE_WINDMILL_AND_DAMPES_GRAVE false -Graveyard Dampes Grave -NutPot true -DampesWindmillAccess (and IsAdult (CanUse RG_SONG_OF_TIME)) -RC_GRAVEYARD_HOOKSHOT_CHEST true -RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH (or IsAdult RT_GY_CHILD_DAMPE_RACE_POH) -RC_GY_DAMPES_GRAVE_POT_1 CanBreakPots -RC_GY_DAMPES_GRAVE_POT_2 CanBreakPots -RC_GY_DAMPES_GRAVE_POT_3 CanBreakPots -RC_GY_DAMPES_GRAVE_POT_4 CanBreakPots -RC_GY_DAMPES_GRAVE_POT_5 CanBreakPots -RC_GY_DAMPES_GRAVE_POT_6 CanBreakPots -RC_GRAVEYARD_DAMPE_RACE_RUPEE_1 true -RC_GRAVEYARD_DAMPE_RACE_RUPEE_2 true -RC_GRAVEYARD_DAMPE_RACE_RUPEE_3 true -RC_GRAVEYARD_DAMPE_RACE_RUPEE_4 true -RC_GRAVEYARD_DAMPE_RACE_RUPEE_5 true -RC_GRAVEYARD_DAMPE_RACE_RUPEE_6 true -RC_GRAVEYARD_DAMPE_RACE_RUPEE_7 true -RC_GRAVEYARD_DAMPE_RACE_RUPEE_8 true -RR_THE_GRAVEYARD true -RR_KAK_WINDMILL @deprioritize (and IsAdult (CanUse RG_SONG_OF_TIME)) - -def RR_GRAVEYARD_DAMPES_HOUSE SCENE_GRAVEKEEPERS_HUT false -Graveyard Dampes House -RC_DAMPE_HINT IsAdult -RR_THE_GRAVEYARD true - -def RR_GRAVEYARD_SHIELD_GRAVE SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN false -Graveyard Shield Grave -RC_GRAVEYARD_SHIELD_GRAVE_CHEST true -RR_THE_GRAVEYARD true -RR_GRAVEYARD_SHIELD_GRAVE_BACK (Here CanBreakMudWalls) - -def RR_GRAVEYARD_SHIELD_GRAVE_BACK SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN false -Graveyard Shield Grave Back -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1 true -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2 true -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3 true -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4 true -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5 true -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6 true -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7 true -RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8 true -RR_GRAVEYARD_SHIELD_GRAVE true - -def RR_GRAVEYARD_COMPOSERS_GRAVE SCENE_ROYAL_FAMILYS_TOMB false -Graveyard Composers Grave -RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST HasFireSource -RC_SONG_FROM_ROYAL_FAMILYS_TOMB (or CanUseProjectile CanJumpslash) -RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_THE_GRAVEYARD true - -def RR_GRAVEYARD_HEART_PIECE_GRAVE SCENE_REDEAD_GRAVE false -Graveyard Heart Piece Grave -RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST (CanUse RG_SUNS_SONG) -RR_THE_GRAVEYARD true - -def RR_GRAVEYARD_WARP_PAD_REGION SCENE_GRAVEYARD false RA_THE_GRAVEYARD -Graveyard Warp Pad Region -GossipStoneFairy CallGossipFairyExceptSuns -RC_GRAVEYARD_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_GRAVEYARD_GOSSIP_STONE true -RR_THE_GRAVEYARD true -RR_SHADOW_TEMPLE_ENTRYWAY (or (CanUse RG_DINS_FIRE) (and RT_GY_SHADOW_FIRE_ARROWS (and IsAdult (CanUse RG_FIRE_ARROWS)))) - -def RR_DEATH_MOUNTAIN_TRAIL SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL -Death Mountain -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) -RC_DMT_CHEST (or BlastOrSmash (and RT_DMT_BOMBABLE (and IsChild (HasItem RG_GORONS_BRACELET)))) -RC_DMT_FREESTANDING_POH (or TakeDamage (or (CanUse RG_HOVER_BOOTS) (and IsAdult (and (CanPlantBean RR_DEATH_MOUNTAIN_TRAIL) (or HasExplosives (HasItem RG_GORONS_BRACELET)))))) -RC_DMT_GS_BEAN_PATCH (and CanSpawnSoilSkull (or HasExplosives (or (HasItem RG_GORONS_BRACELET) (and RT_DMT_SOIL_GS (and (or TakeDamage (CanUse RG_HOVER_BOOTS)) (CanUse RG_BOOMERANG)))))) -RC_DMT_GS_NEAR_KAK BlastOrSmash -RC_DMT_GS_ABOVE_DODONGOS_CAVERN (and IsAdult (and AtNight (and (or (CanUse RG_MEGATON_HAMMER) (or (and RT_DMT_HOOKSHOT_LOWER_GS (CanUse RG_HOOKSHOT)) (or (and RT_DMT_BEAN_LOWER_GS (CanPlantBean RR_DEATH_MOUNTAIN_TRAIL)) (or (and RT_DMT_HOVERS_LOWER_GS (CanUse RG_HOVER_BOOTS)) RT_DMT_JS_LOWER_GS)))) CanGetNightTimeGS))) -RC_DMT_BLUE_RUPEE (and IsChild BlastOrSmash) -RC_DMT_RED_RUPEE (and IsChild BlastOrSmash) -RC_DMT_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) -RC_DMT_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) -RC_DMT_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) -RC_DMT_FLAG_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_KAK_BEHIND_GATE true -RR_GORON_CITY true -RR_DEATH_MOUNTAIN_SUMMIT (or (Here BlastOrSmash) (and IsAdult (or (and (CanPlantBean RR_DEATH_MOUNTAIN_TRAIL) (HasItem RG_GORONS_BRACELET)) (and (CanUse RG_HOVER_BOOTS) RT_DMT_CLIMB_HOVERS)))) -RR_DODONGOS_CAVERN_ENTRYWAY (or HasExplosives (or (HasItem RG_GORONS_BRACELET) IsAdult)) -RR_DMT_STORMS_GROTTO CanOpenStormsGrotto - -def RR_DEATH_MOUNTAIN_SUMMIT SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL -Death Mountain Summit -GossipStoneFairy CallGossipFairy -BugRock IsChild -RC_DMT_TRADE_BROKEN_SWORD (and IsAdult (CanUse RG_BROKEN_SWORD)) -RC_DMT_TRADE_EYEDROPS (and IsAdult (CanUse RG_EYEDROPS)) -RC_DMT_TRADE_CLAIM_CHECK (and IsAdult (CanUse RG_CLAIM_CHECK)) -RC_DMT_GS_FALLING_ROCKS_PATH (and IsAdult (and AtNight (and (or (CanUse RG_MEGATON_HAMMER) RT_DMT_UPPER_GS) CanGetNightTimeGS))) -RC_DMT_GOSSIP_STONE_FAIRY CallGossipFairy -RC_DMT_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_DMT_GOSSIP_STONE true -RR_DEATH_MOUNTAIN_TRAIL true -RR_DMC_UPPER_LOCAL true -RR_DMT_OWL_FLIGHT IsChild -RR_DMT_COW_GROTTO (Here BlastOrSmash) -RR_DMT_GREAT_FAIRY_FOUNTAIN (Here BlastOrSmash) - -def RR_DMT_OWL_FLIGHT SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL -DMT Owl Flight -RR_KAK_IMPAS_ROOFTOP true - -def RR_DMT_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false -DMT Great Fairy Fountain -RC_DMT_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) -RR_DEATH_MOUNTAIN_SUMMIT true - -def RR_DMT_COW_GROTTO SCENE_GROTTOS false -DMT Cow Grotto -RC_DMT_COW_GROTTO_COW (CanUse RG_EPONAS_SONG) -RC_DMT_COW_GROTTO_BEEHIVE CanBreakLowerBeehives -RC_DMT_COW_GROTTO_LEFT_HEART true -RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART true -RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART true -RC_DMT_COW_GROTTO_RIGHT_HEART true -RC_DMT_COW_GROTTO_RUPEE_1 true -RC_DMT_COW_GROTTO_RUPEE_2 true -RC_DMT_COW_GROTTO_RUPEE_3 true -RC_DMT_COW_GROTTO_RUPEE_4 true -RC_DMT_COW_GROTTO_RUPEE_5 true -RC_DMT_COW_GROTTO_RUPEE_6 true -RC_DMT_COW_GROTTO_RED_RUPEE true -RC_DMT_COW_GROTTO_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) -RC_DMT_COW_GROTTO_GRASS_1 CanCutShrubs -RC_DMT_COW_GROTTO_GRASS_2 CanCutShrubs -RR_DEATH_MOUNTAIN_SUMMIT true - -def RR_DMT_STORMS_GROTTO SCENE_GROTTOS false -DMT Storms Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_DMT_STORMS_GROTTO_CHEST true -RC_DMT_STORMS_GROTTO_FISH HasBottle -RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_DMT_STORMS_GROTTO_GOSSIP_STONE true -RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_DMT_STORMS_GROTTO_GRASS_1 CanCutShrubs -RC_DMT_STORMS_GROTTO_GRASS_2 CanCutShrubs -RC_DMT_STORMS_GROTTO_GRASS_3 CanCutShrubs -RC_DMT_STORMS_GROTTO_GRASS_4 CanCutShrubs -RR_DEATH_MOUNTAIN_TRAIL true - -def RR_GORON_CITY SCENE_GORON_CITY false RA_GORON_CITY -Goron City -GossipStoneFairy CallGossipFairyExceptSuns -StickPot IsChild -BugRock (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) -GoronCityChildFire (and IsChild (CanUse RG_DINS_FIRE)) -GCWoodsWarpOpen (or CanDetonateUprightBombFlower (or (CanUse RG_MEGATON_HAMMER) GoronCityChildFire)) -GCDaruniasDoorOpenChild (and IsChild (CanUse RG_ZELDAS_LULLABY)) -StopGCRollingGoronAsAdult (and IsAdult (or (HasItem RG_GORONS_BRACELET) (or HasExplosives (or (CanUse RG_FAIRY_BOW) (and RT_GC_LINK_GORON_DINS (or (CanUse RG_DINS_FIRE) (and RT_BLUE_FIRE_MUD_WALLS (CanUse RG_BOTTLE_WITH_BLUE_FIRE)))))))) -RC_GC_MAZE_LEFT_CHEST (or (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_SILVER_GAUNTLETS) (and RT_GC_LEFTMOST (and HasExplosives (CanUse RG_HOVER_BOOTS))))) -RC_GC_MAZE_CENTER_CHEST (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) -RC_GC_MAZE_RIGHT_CHEST (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) -RC_GC_POT_FREESTANDING_POH (and IsChild (and GoronCityChildFire (or (CanUse RG_BOMB_BAG) (or (and (HasItem RG_GORONS_BRACELET) RT_GC_POT_STRENGTH) (and (CanUse RG_BOMBCHU_5) RT_GC_POT))))) -RC_GC_ROLLING_GORON_AS_CHILD (and IsChild (or HasExplosives (and (HasItem RG_GORONS_BRACELET) RT_GC_ROLLING_STRENGTH))) -RC_GC_ROLLING_GORON_AS_ADULT StopGCRollingGoronAsAdult -RC_GC_GS_BOULDER_MAZE (and IsChild BlastOrSmash) -RC_GC_GS_CENTER_PLATFORM (and IsAdult CanAttack) -RC_GC_MEDIGORON (and IsAdult (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) -RC_GC_MAZE_GOSSIP_STONE_FAIRY (and (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) CallGossipFairyExceptSuns) -RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG (and (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) (CanUse RG_SONG_OF_STORMS)) -RC_GC_MAZE_GOSSIP_STONE (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) -RC_GC_LOWER_STAIRCASE_POT_1 CanBreakPots -RC_GC_LOWER_STAIRCASE_POT_2 CanBreakPots -RC_GC_UPPER_STAIRCASE_POT_1 CanBreakPots -RC_GC_UPPER_STAIRCASE_POT_2 CanBreakPots -RC_GC_UPPER_STAIRCASE_POT_3 CanBreakPots -RC_GC_MAZE_CRATE (or BlastOrSmash (and (CanUse RG_SILVER_GAUNTLETS) CanBreakCrates)) -RR_DEATH_MOUNTAIN_TRAIL true -RR_GC_MEDIGORON (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET)) -RR_GC_WOODS_WARP GCWoodsWarpOpen -RR_GC_SHOP (or (and IsAdult StopGCRollingGoronAsAdult) (and IsChild (or BlastOrSmash (or (HasItem RG_GORONS_BRACELET) (or GoronCityChildFire (CanUse RG_FAIRY_BOW)))))) -RR_GC_DARUNIAS_CHAMBER (or (and IsAdult StopGCRollingGoronAsAdult) (and IsChild GCDaruniasDoorOpenChild)) -RR_GC_GROTTO_PLATFORM (and IsAdult (or (and (CanUse RG_SONG_OF_TIME) (or (> EffectiveHealth 2) (or (CanUse RG_GORON_TUNIC) (or (CanUse RG_LONGSHOT) (CanUse RG_NAYRUS_LOVE))))) (or (and (> EffectiveHealth 1) (and (CanUse RG_GORON_TUNIC) (CanUse RG_HOOKSHOT))) (or (and (CanUse RG_NAYRUS_LOVE) (CanUse RG_HOOKSHOT)) (and (> EffectiveHealth 2) (and (CanUse RG_HOOKSHOT) RT_GC_GROTTO)))))) - -def RR_GC_MEDIGORON SCENE_GORON_CITY false RA_GORON_CITY -GC Medigoron -RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_GC_MEDIGORON_GOSSIP_STONE true -RC_GC_MEDIGORON_POT_1 CanBreakPots -RR_GORON_CITY true - -def RR_GC_WOODS_WARP SCENE_GORON_CITY false RA_GORON_CITY -GC Woods Warp -GCWoodsWarpOpen (or BlastOrSmash (CanUse RG_DINS_FIRE)) -RR_GORON_CITY GCWoodsWarpOpen -RR_THE_LOST_WOODS true - -def RR_GC_DARUNIAS_CHAMBER SCENE_GORON_CITY false RA_GORON_CITY -GC Darunias Chamber -GoronCityChildFire (and IsChild (CanUse RG_STICKS)) -RC_GC_DARUNIAS_JOY (and IsChild (CanUse RG_SARIAS_SONG)) -RC_GC_DARUNIA_POT_1 CanBreakPots -RC_GC_DARUNIA_POT_2 CanBreakPots -RC_GC_DARUNIA_POT_3 CanBreakPots -RR_GORON_CITY true -RR_DMC_LOWER_LOCAL IsAdult - -def RR_GC_GROTTO_PLATFORM SCENE_GORON_CITY false RA_GORON_CITY -GC Grotto Platform -RR_GC_GROTTO true -RR_GORON_CITY (or (> EffectiveHealth 2) (or (CanUse RG_GORON_TUNIC) (or (CanUse RG_NAYRUS_LOVE) (and (or IsChild (CanUse RG_SONG_OF_TIME)) (CanUse RG_LONGSHOT))))) - -def RR_GC_SHOP SCENE_GORON_SHOP false -GC Shop -RC_GC_SHOP_ITEM_1 true -RC_GC_SHOP_ITEM_2 true -RC_GC_SHOP_ITEM_3 true -RC_GC_SHOP_ITEM_4 true -RC_GC_SHOP_ITEM_5 true -RC_GC_SHOP_ITEM_6 true -RC_GC_SHOP_ITEM_7 true -RC_GC_SHOP_ITEM_8 true -RR_GORON_CITY true - -def RR_GC_GROTTO SCENE_GROTTOS false -GC Grotto -RC_GC_DEKU_SCRUB_GROTTO_LEFT CanStunDeku -RC_GC_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku -RC_GC_DEKU_SCRUB_GROTTO_CENTER CanStunDeku -RC_GC_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_GC_GROTTO_PLATFORM true - -def RR_DMC_UPPER_LOCAL SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Upper Local -GossipStoneFairy (and HasExplosives (and CallGossipFairyExceptSuns (or (>= FireTimer 16) (>= Hearts 3)))) -RC_DMC_WALL_FREESTANDING_POH (or (>= FireTimer 16) (>= Hearts 3)) -RC_DMC_GS_CRATE (and (or (>= FireTimer 8) (>= Hearts 3)) (and IsChild (and CanAttack CanBreakCrates))) -RC_DMC_GOSSIP_STONE_FAIRY (and CallGossipFairyExceptSuns (and HasExplosives (or (>= FireTimer 16) (>= Hearts 3)))) -RC_DMC_GOSSIP_STONE_FAIRY_BIG (and (CanUse RG_SONG_OF_STORMS) (and HasExplosives (or (>= FireTimer 16) (>= Hearts 3)))) -RC_DMC_GOSSIP_STONE (and HasExplosives (or (>= FireTimer 16) (>= Hearts 3))) -RC_DMC_CRATE (and (or (>= FireTimer 8) (>= Hearts 3)) (and IsChild CanBreakCrates)) -RR_DMC_UPPER_NEARBY true -RR_DMC_LADDER_AREA_NEARBY (or (>= FireTimer 16) (>= Hearts 3)) -RR_DMC_CENTRAL_NEARBY (and IsAdult (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_DISTANT_SCARECROW) (or (> EffectiveHealth 2) (or (and (CanUse RG_BOTTLE_WITH_FAIRY) (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) (CanUse RG_NAYRUS_LOVE)))))) -RR_DMC_LOWER_NEARBY false -RR_DMC_DISTANT_PLATFORM (or (and (>= FireTimer 48) (>= Hearts 2)) (>= Hearts 3)) - -def RR_DMC_CENTRAL_LOCAL SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Central Local -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) -RC_DMC_GS_BEAN_PATCH (and (or (>= FireTimer 8) (>= Hearts 3)) (and CanSpawnSoilSkull CanAttack)) -RC_DMC_NEAR_PLATFORM_RED_RUPEE IsChild -RC_DMC_MIDDLE_PLATFORM_RED_RUPEE (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) -RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) -RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) -RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) -RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) -RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) -RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) -RC_DMC_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) -RC_DMC_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) -RC_DMC_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) -RR_DMC_CENTRAL_NEARBY true -RR_DMC_LOWER_NEARBY (or (and IsAdult (CanPlantBean RR_DMC_CENTRAL_LOCAL)) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) -RR_DMC_UPPER_NEARBY (and IsAdult (CanPlantBean RR_DMC_CENTRAL_LOCAL)) -RR_FIRE_TEMPLE_ENTRYWAY (or (and IsChild (and (>= Hearts 3) (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) (and IsAdult (>= FireTimer 24))) -RR_DMC_DISTANT_PLATFORM (and (>= FireTimer 48) (CanUse RG_DISTANT_SCARECROW)) - -def RR_DMC_LOWER_LOCAL SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Lower Local -RR_DMC_LOWER_NEARBY true -RR_DMC_LADDER_AREA_NEARBY (or (>= FireTimer 8) (>= Hearts 3)) -RR_DMC_CENTRAL_NEARBY (and (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) (or (>= FireTimer 8) (>= Hearts 3))) -RR_DMC_CENTRAL_LOCAL (and (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_HOOKSHOT) (and IsAdult (and CanShield RT_DMC_BOLERO_JUMP)))) (>= FireTimer 24)) - -def RR_DMC_LOWER_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Lower Nearby -RC_DMC_NEAR_GC_POT_1 CanBreakPots -RC_DMC_NEAR_GC_POT_2 CanBreakPots -RC_DMC_NEAR_GC_POT_3 CanBreakPots -RC_DMC_NEAR_GC_POT_4 CanBreakPots -RR_DMC_LOWER_LOCAL (>= FireTimer 48) -RR_GC_DARUNIAS_CHAMBER true -RR_DMC_GREAT_FAIRY_FOUNTAIN (CanUse RG_MEGATON_HAMMER) -RR_DMC_HAMMER_GROTTO (and IsAdult (CanUse RG_MEGATON_HAMMER)) - -def RR_DMC_UPPER_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Upper Nearby -RR_DMC_UPPER_LOCAL (>= FireTimer 48) -RR_DEATH_MOUNTAIN_SUMMIT true -RR_DMC_UPPER_GROTTO (Here (and BlastOrSmash (or (>= FireTimer 8) (>= Hearts 3)))) - -def RR_DMC_CENTRAL_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Central Nearby -RC_DMC_VOLCANO_FREESTANDING_POH (and IsAdult (and (>= Hearts 3) (or (CanPlantBean RR_DMC_CENTRAL_LOCAL) (and RT_DMC_HOVER_BEAN_POH (CanUse RG_HOVER_BOOTS))))) -RC_SHEIK_IN_CRATER (and IsAdult (or (>= FireTimer 8) (>= Hearts 3))) -RR_DMC_CENTRAL_LOCAL (>= FireTimer 48) - -def RR_DMC_LADDER_AREA_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Ladder Region Nearby -RC_DMC_DEKU_SCRUB (and IsChild CanStunDeku) -RR_DMC_UPPER_NEARBY (>= Hearts 3) -RR_DMC_LOWER_NEARBY (and (>= Hearts 3) (or (CanUse RG_HOVER_BOOTS) (or (and RT_DMC_BOULDER_JS (and IsAdult (CanUse RG_MEGATON_HAMMER))) (and RT_DMC_BOULDER_SKIP IsAdult)))) - -def RR_DMC_UPPER_GROTTO SCENE_GROTTOS false -DMC Upper Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_DMC_UPPER_GROTTO_CHEST true -RC_DMC_UPPER_GROTTO_FISH HasBottle -RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_DMC_UPPER_GROTTO_GOSSIP_STONE true -RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_DMC_UPPER_GROTTO_GRASS_1 CanCutShrubs -RC_DMC_UPPER_GROTTO_GRASS_2 CanCutShrubs -RC_DMC_UPPER_GROTTO_GRASS_3 CanCutShrubs -RC_DMC_UPPER_GROTTO_GRASS_4 CanCutShrubs -RR_DMC_UPPER_LOCAL true - -def RR_DMC_HAMMER_GROTTO SCENE_GROTTOS false -DMC Hammer Grotto -RC_DMC_DEKU_SCRUB_GROTTO_LEFT CanStunDeku -RC_DMC_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku -RC_DMC_DEKU_SCRUB_GROTTO_CENTER CanStunDeku -RC_DMC_HAMMER_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_DMC_LOWER_LOCAL true - -def RR_DMC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false -DMC Great Fairy Fountain -RC_DMC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) -RR_DMC_LOWER_LOCAL true - -def RR_DMC_DISTANT_PLATFORM SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER -DMC Distant Platform -RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1 IsAdult -RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2 IsAdult -RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3 IsAdult -RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4 IsAdult -RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5 IsAdult -RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6 IsAdult -RC_DMC_DISTANT_PLATFORM_RED_RUPEE IsAdult -RR_DMC_CENTRAL_LOCAL (and (>= FireTimer 48) (CanUse RG_DISTANT_SCARECROW)) - -def RR_ZR_FRONT SCENE_ZORAS_RIVER true RA_ZORAS_RIVER -ZR Front -RC_ZR_GS_TREE (and IsChild (CanKillEnemy RE_GOLD_SKULLTULA ED_CLOSE)) -RC_ZR_GRASS_1 CanCutShrubs -RC_ZR_GRASS_2 CanCutShrubs -RC_ZR_GRASS_3 CanCutShrubs -RC_ZR_GRASS_4 CanCutShrubs -RC_ZR_GRASS_5 CanCutShrubs -RC_ZR_GRASS_6 CanCutShrubs -RC_ZR_GRASS_7 CanCutShrubs -RC_ZR_GRASS_8 CanCutShrubs -RC_ZR_GRASS_9 CanCutShrubs -RC_ZR_GRASS_10 CanCutShrubs -RC_ZR_GRASS_11 CanCutShrubs -RC_ZR_GRASS_12 CanCutShrubs -RR_ZORAS_RIVER (or IsAdult BlastOrSmash) -RR_HYRULE_FIELD true - -def RR_ZORAS_RIVER SCENE_ZORAS_RIVER true RA_ZORAS_RIVER -Zora River -GossipStoneFairy CallGossipFairy -BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -RC_ZR_MAGIC_BEAN_SALESMAN (and (HasItem RG_CHILD_WALLET) IsChild) -RC_ZR_FROGS_OCARINA_GAME (and IsChild (and (CanUse RG_ZELDAS_LULLABY) (and (CanUse RG_SARIAS_SONG) (and (CanUse RG_SUNS_SONG) (and (CanUse RG_EPONAS_SONG) (and (CanUse RG_SONG_OF_TIME) (CanUse RG_SONG_OF_STORMS))))))) -RC_ZR_FROGS_IN_THE_RAIN (and IsChild (CanUse RG_SONG_OF_STORMS)) -RC_ZR_FROGS_ZELDAS_LULLABY (and IsChild (CanUse RG_ZELDAS_LULLABY)) -RC_ZR_FROGS_EPONAS_SONG (and IsChild (CanUse RG_EPONAS_SONG)) -RC_ZR_FROGS_SARIAS_SONG (and IsChild (CanUse RG_SARIAS_SONG)) -RC_ZR_FROGS_SUNS_SONG (and IsChild (CanUse RG_SUNS_SONG)) -RC_ZR_FROGS_SONG_OF_TIME (and IsChild (CanUse RG_SONG_OF_TIME)) -RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH (or IsChild (or (CanUse RG_HOVER_BOOTS) (and IsAdult RT_ZR_LOWER))) -RC_ZR_NEAR_DOMAIN_FREESTANDING_POH (or IsChild (or (CanUse RG_HOVER_BOOTS) (and IsAdult RT_ZR_UPPER))) -RC_ZR_GS_LADDER (and IsChild (and CanAttack CanGetNightTimeGS)) -RC_ZR_GS_NEAR_RAISED_GROTTOS (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_ZR_GS_ABOVE_BRIDGE (and IsAdult (and (CanUse RG_HOOKSHOT) CanGetNightTimeGS)) -RC_ZR_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_ZR_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_ZR_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) -RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY CallGossipFairy -RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY CallGossipFairy -RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) -RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) -RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) -RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) -RC_ZR_NEAR_GROTTOS_GOSSIP_STONE true -RC_ZR_NEAR_DOMAIN_GOSSIP_STONE true -RC_ZR_NEAR_FREESTANDING_POH_GRASS CanCutShrubs -RR_ZR_FRONT true -RR_ZR_OPEN_GROTTO true -RR_ZR_FAIRY_GROTTO (Here BlastOrSmash) -RR_THE_LOST_WOODS (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS)) -RR_ZR_STORMS_GROTTO CanOpenStormsGrotto -RR_ZR_BEHIND_WATERFALL (or (== RSK_SLEEPING_WATERFALL RO_WATERFALL_OPEN) (or (Here (CanUse RG_ZELDAS_LULLABY)) (or (and IsChild RT_ZR_CUCCO) (and IsAdult (and (CanUse RG_HOVER_BOOTS) RT_ZR_HOVERS))))) - -def RR_ZR_FROM_SHORTCUT SCENE_ZORAS_RIVER false RA_ZORAS_RIVER -ZR From Shortcut -RR_ZORAS_RIVER (or (> Hearts 1) (or (HasItem RG_BOTTLE_WITH_FAIRY) (HasItem RG_BRONZE_SCALE))) -RR_THE_LOST_WOODS (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS)) - -def RR_ZR_BEHIND_WATERFALL SCENE_ZORAS_RIVER true RA_ZORAS_RIVER -ZR Behind Waterfall -RR_ZORAS_RIVER true -RR_ZORAS_DOMAIN true - -def RR_ZR_OPEN_GROTTO SCENE_GROTTOS false -ZR Open Grotto -GossipStoneFairy CallGossipFairy -ButterflyFairy (CanUse RG_STICKS) -BugShrub CanCutShrubs -LoneFish true -RC_ZR_OPEN_GROTTO_CHEST true -RC_ZR_OPEN_GROTTO_FISH HasBottle -RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy -RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_ZR_OPEN_GROTTO_GOSSIP_STONE true -RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives -RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives -RC_ZR_OPEN_GROTTO_GRASS_1 CanCutShrubs -RC_ZR_OPEN_GROTTO_GRASS_2 CanCutShrubs -RC_ZR_OPEN_GROTTO_GRASS_3 CanCutShrubs -RC_ZR_OPEN_GROTTO_GRASS_4 CanCutShrubs -RR_ZORAS_RIVER true - -def RR_ZR_FAIRY_GROTTO SCENE_GROTTOS false -ZR Fairy Grotto -FreeFairies true -RC_ZR_FAIRY_GROTTO_FAIRY_1 true -RC_ZR_FAIRY_GROTTO_FAIRY_2 true -RC_ZR_FAIRY_GROTTO_FAIRY_3 true -RC_ZR_FAIRY_GROTTO_FAIRY_4 true -RC_ZR_FAIRY_GROTTO_FAIRY_5 true -RC_ZR_FAIRY_GROTTO_FAIRY_6 true -RC_ZR_FAIRY_GROTTO_FAIRY_7 true -RC_ZR_FAIRY_GROTTO_FAIRY_8 true -RR_ZORAS_RIVER true - -def RR_ZR_STORMS_GROTTO SCENE_GROTTOS false -ZR Storms Grotto -RC_ZR_DEKU_SCRUB_GROTTO_REAR CanStunDeku -RC_ZR_DEKU_SCRUB_GROTTO_FRONT CanStunDeku -RC_ZR_STORMS_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_ZORAS_RIVER true - -def RR_ZORAS_DOMAIN SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN -Zoras Domain -GossipStoneFairy CallGossipFairyExceptSuns -NutPot true -StickPot IsChild -FishGroup IsChild -KingZoraThawed (and IsAdult BlueFire) -DeliverLetter (and (CanUse RG_RUTOS_LETTER) (and IsChild (!= RSK_ZORAS_FOUNTAIN RO_ZF_OPEN))) -RC_ZD_DIVING_MINIGAME (and (HasItem RG_BRONZE_SCALE) (and (HasItem RG_CHILD_WALLET) IsChild)) -RC_ZD_CHEST (and IsChild (CanUse RG_STICKS)) -RC_ZD_KING_ZORA_THAWED (and IsAdult KingZoraThawed) -RC_ZD_TRADE_PRESCRIPTION (and IsAdult (and KingZoraThawed (CanUse RG_PRESCRIPTION))) -RC_ZD_GS_FROZEN_WATERFALL (and IsAdult (and (or HookshotOrBoomerang (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_FAIRY_BOW) (or (and (CanUse RG_MAGIC_SINGLE) (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_BIGGORON_SWORD)))) (and RT_ZD_GS CanJumpslashExceptHammer))))) CanGetNightTimeGS)) -RC_ZD_FISH_1 (and IsChild HasBottle) -RC_ZD_FISH_2 (and IsChild HasBottle) -RC_ZD_FISH_3 (and IsChild HasBottle) -RC_ZD_FISH_4 (and IsChild HasBottle) -RC_ZD_FISH_5 (and IsChild HasBottle) -RC_ZD_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_ZD_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_ZD_GOSSIP_STONE true -RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT (and IsChild CanBreakUpperBeehives) -RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT (and IsChild CanBreakUpperBeehives) -RC_ZD_NEAR_SHOP_POT_1 CanBreakPots -RC_ZD_NEAR_SHOP_POT_2 CanBreakPots -RC_ZD_NEAR_SHOP_POT_3 CanBreakPots -RC_ZD_NEAR_SHOP_POT_4 CanBreakPots -RC_ZD_NEAR_SHOP_POT_5 CanBreakPots -RR_ZR_BEHIND_WATERFALL true -RR_LH_FROM_SHORTCUT (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) -RR_ZD_BEHIND_KING_ZORA (or DeliverLetter (or (== RSK_ZORAS_FOUNTAIN RO_ZF_OPEN) (or (and (== RSK_ZORAS_FOUNTAIN RO_ZF_CLOSED_CHILD) IsAdult) (and RT_ZD_KING_ZORA_SKIP IsAdult)))) -RR_ZD_SHOP (or IsChild BlueFire) -RR_ZORAS_DOMAIN_ISLAND true - -def RR_ZORAS_DOMAIN_ISLAND SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN -Zoras Domain Island -RR_ZORAS_DOMAIN (or IsAdult (HasItem RG_BRONZE_SCALE)) -RR_ZD_STORMS_GROTTO CanOpenStormsGrotto - -def RR_ZD_BEHIND_KING_ZORA SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN -ZD Behind King Zora -KingZoraThawed (and IsAdult BlueFire) -RC_ZD_BEHIND_KING_ZORA_BEEHIVE (and IsChild CanBreakUpperBeehives) -RR_ZORAS_DOMAIN (or DeliverLetter (or (== RSK_ZORAS_FOUNTAIN RO_ZF_OPEN) (and (== RSK_ZORAS_FOUNTAIN RO_ZF_CLOSED_CHILD) IsAdult))) -RR_ZORAS_FOUNTAIN true - -def RR_ZD_SHOP SCENE_ZORA_SHOP false -ZD Shop -RC_ZD_SHOP_ITEM_1 true -RC_ZD_SHOP_ITEM_2 true -RC_ZD_SHOP_ITEM_3 true -RC_ZD_SHOP_ITEM_4 true -RC_ZD_SHOP_ITEM_5 true -RC_ZD_SHOP_ITEM_6 true -RC_ZD_SHOP_ITEM_7 true -RC_ZD_SHOP_ITEM_8 true -RR_ZORAS_DOMAIN true - -def RR_ZD_STORMS_GROTTO SCENE_GROTTOS false -ZD Storms Grotto -FreeFairies true -RC_ZD_FAIRY_GROTTO_FAIRY_1 true -RC_ZD_FAIRY_GROTTO_FAIRY_2 true -RC_ZD_FAIRY_GROTTO_FAIRY_3 true -RC_ZD_FAIRY_GROTTO_FAIRY_4 true -RC_ZD_FAIRY_GROTTO_FAIRY_5 true -RC_ZD_FAIRY_GROTTO_FAIRY_6 true -RC_ZD_FAIRY_GROTTO_FAIRY_7 true -RC_ZD_FAIRY_GROTTO_FAIRY_8 true -RR_ZORAS_DOMAIN_ISLAND true - -def RR_ZORAS_FOUNTAIN SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN -Zoras Fountain -GossipStoneFairy CallGossipFairyExceptSuns -ButterflyFairy (and (CanUse RG_STICKS) AtDay) -RC_ZF_GS_TREE IsChild -RC_ZF_GS_ABOVE_THE_LOG (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_ZF_FAIRY_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_ZF_JABU_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns -RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RC_ZF_FAIRY_GOSSIP_STONE true -RC_ZF_JABU_GOSSIP_STONE true -RC_ZF_NEAR_JABU_POT_1 (and IsChild CanBreakPots) -RC_ZF_NEAR_JABU_POT_2 (and IsChild CanBreakPots) -RC_ZF_NEAR_JABU_POT_3 (and IsChild CanBreakPots) -RC_ZF_NEAR_JABU_POT_4 (and IsChild CanBreakPots) -RR_ZD_BEHIND_KING_ZORA true -RR_ZF_ICEBERGS IsAdult -RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) -//child can break the brown rock without lifting the silver rock and it stays gone for adult, but it's not intuitive and there's no reasonable case where it matters. -RR_ZF_HIDDEN_CAVE (and (CanUse RG_SILVER_GAUNTLETS) BlastOrSmash) -RR_ZF_ROCK (and IsAdult (CanUse RG_SCARECROW)) -RR_JABU_JABUS_BELLY_ENTRYWAY (and IsChild (or (== RSK_JABU_OPEN RO_JABU_OPEN) (CanUse RG_BOTTLE_WITH_FISH))) -RR_ZF_GREAT_FAIRY_FOUNTAIN (or HasExplosives (and RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_SILVER_GAUNTLETS)))) - -def RR_ZF_ICEBERGS SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN -ZF Icebergs -RC_ZF_ICEBERG_FREESTANDING_POH IsAdult -RR_ZORAS_FOUNTAIN (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOVER_BOOTS)) -RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) -RR_ZF_LEDGE true - -def RR_ZF_LAKEBED SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN -ZF Lakebed -RC_ZF_BOTTOM_FREESTANDING_POH (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTH_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTH_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTH_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) -RR_ZORAS_FOUNTAIN (HasItem RG_BRONZE_SCALE) - -def RR_ZF_LEDGE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN -ZF Ledge -RR_ZORAS_FOUNTAIN (HasItem RG_BRONZE_SCALE) -RR_ZF_ICEBERGS IsAdult -RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) -RR_ICE_CAVERN_ENTRYWAY true - -def RR_ZF_HIDDEN_CAVE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN -ZF Hidden Cave -RC_ZF_HIDDEN_CAVE_POT_1 (and IsAdult CanBreakPots) -RC_ZF_HIDDEN_CAVE_POT_2 (and IsAdult CanBreakPots) -RC_ZF_HIDDEN_CAVE_POT_3 (and IsAdult CanBreakPots) -//There are invisible big skultullas here as adult but they do not block the path and can be "seen" with Z-target -//Lens is not currently needed for this either, implying they are not considered blocking, but it's open for discussion long-term -RR_ZF_HIDDEN_LEDGE true - -def RR_ZF_HIDDEN_LEDGE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN -ZF Hidden Ledge -RC_ZF_GS_HIDDEN_CAVE (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOMB_THROW) CanGetNightTimeGS)) -//It is possible to avoid fall damage by jumping towards the right and landing in deeper water, but this is basically never relevent -RR_ZORAS_FOUNTAIN (or (HasItem RG_BRONZE_SCALE) TakeDamage) -RR_ZF_HIDDEN_CAVE true - -def RR_ZF_ROCK SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN -ZF Rock -//Has a wonder item -RR_ZORAS_FOUNTAIN true - -def RR_ZF_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false -ZF Great Fairy Fountain -RC_ZF_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) -RR_ZORAS_FOUNTAIN true - -def RR_LON_LON_RANCH SCENE_LON_LON_RANCH true RA_LON_LON_RANCH -Lon Lon Ranch -FreedEpona (and (or (HasItem RG_CHILD_WALLET) RSK_SKIP_EPONA_RACE) (and (CanUse RG_EPONAS_SONG) (and IsAdult AtDay))) -LinksCow (and (HasItem RG_CHILD_WALLET) (and (CanUse RG_EPONAS_SONG) (and IsAdult AtDay))) -RC_SONG_FROM_MALON (and IsChild (and (HasItem RG_ZELDAS_LETTER) (and (HasItem RG_FAIRY_OCARINA) AtDay))) -RC_LLR_GS_TREE IsChild -RC_LLR_GS_RAIN_SHED (and IsChild CanGetNightTimeGS) -RC_LLR_GS_HOUSE_WINDOW (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_LLR_GS_BACK_WALL (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) -RC_LLR_FRONT_POT_1 (and IsChild CanBreakPots) -RC_LLR_FRONT_POT_2 (and IsChild CanBreakPots) -RC_LLR_FRONT_POT_3 (and IsChild CanBreakPots) -RC_LLR_FRONT_POT_4 (and IsChild CanBreakPots) -RC_LLR_RAIN_SHED_POT_1 (and IsChild CanBreakPots) -RC_LLR_RAIN_SHED_POT_2 (and IsChild CanBreakPots) -RC_LLR_RAIN_SHED_POT_3 (and IsChild CanBreakPots) -RC_LLR_NEAR_TREE_CRATE (and IsChild CanBreakCrates) -RR_HYRULE_FIELD true -RR_LLR_TALONS_HOUSE (CanOpenOverworldDoor RG_TALONS_HOUSE_KEY) -RR_LLR_STABLES (CanOpenOverworldDoor RG_STABLES_KEY) -RR_LLR_TOWER (CanOpenOverworldDoor RG_BACK_TOWER_KEY) -RR_LLR_GROTTO IsChild - -def RR_LLR_TALONS_HOUSE SCENE_LON_LON_BUILDINGS false -LLR Talons House -RC_LLR_TALONS_CHICKENS (and (HasItem RG_CHILD_WALLET) (and IsChild (and AtDay (HasItem RG_ZELDAS_LETTER)))) -RC_LLR_TALONS_HOUSE_POT_1 CanBreakPots -RC_LLR_TALONS_HOUSE_POT_2 CanBreakPots -RC_LLR_TALONS_HOUSE_POT_3 CanBreakPots -RR_LON_LON_RANCH true - -def RR_LLR_STABLES SCENE_STABLE false -LLR Stables -RC_LLR_STABLES_LEFT_COW (CanUse RG_EPONAS_SONG) -RC_LLR_STABLES_RIGHT_COW (CanUse RG_EPONAS_SONG) -RR_LON_LON_RANCH true - -def RR_LLR_TOWER SCENE_LON_LON_BUILDINGS false -LLR Tower -RC_LLR_FREESTANDING_POH IsChild -RC_LLR_TOWER_LEFT_COW (CanUse RG_EPONAS_SONG) -RC_LLR_TOWER_RIGHT_COW (CanUse RG_EPONAS_SONG) -RR_LON_LON_RANCH true - -def RR_LLR_GROTTO SCENE_GROTTOS false -LLR Grotto -RC_LLR_DEKU_SCRUB_GROTTO_LEFT CanStunDeku -RC_LLR_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku -RC_LLR_DEKU_SCRUB_GROTTO_CENTER CanStunDeku -RC_LLR_GROTTO_BEEHIVE CanBreakUpperBeehives -RR_LON_LON_RANCH true - -def RR_DEKU_TREE_ENTRYWAY SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Entryway -RR_DEKU_TREE_LOBBY (IsDungeonVanilla DEKU_TREE) -RR_DEKU_TREE_MQ_1F (IsDungeonMQ DEKU_TREE) -RR_KF_OUTSIDE_DEKU_TREE true - -def RR_DODONGOS_CAVERN_ENTRYWAY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Entryway -RR_DODONGOS_CAVERN_BEGINNING (IsDungeonVanilla DODONGOS_CAVERN) -RR_DODONGOS_CAVERN_MQ_BEGINNING (IsDungeonMQ DODONGOS_CAVERN) -RR_DEATH_MOUNTAIN_TRAIL true - -def RR_JABU_JABUS_BELLY_ENTRYWAY SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Entryway -RR_JABU_JABUS_BELLY_BEGINNING (IsDungeonVanilla JABU_JABUS_BELLY) -RR_JABU_JABUS_BELLY_MQ_BEGINNING (IsDungeonMQ JABU_JABUS_BELLY) -RR_ZORAS_FOUNTAIN true - -def RR_FOREST_TEMPLE_ENTRYWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Entryway -RR_FOREST_TEMPLE_FIRST_ROOM (IsDungeonVanilla FOREST_TEMPLE) -RR_FOREST_TEMPLE_MQ_LOBBY (IsDungeonMQ FOREST_TEMPLE) -RR_SACRED_FOREST_MEADOW true - -def RR_FIRE_TEMPLE_ENTRYWAY SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Entryway -RR_FIRE_TEMPLE_FIRST_ROOM (IsDungeonVanilla FIRE_TEMPLE) -RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER (IsDungeonMQ FIRE_TEMPLE) -RR_DMC_CENTRAL_LOCAL true - -def RR_WATER_TEMPLE_ENTRYWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Entryway -RR_WATER_TEMPLE_LOBBY (and (HasItem RG_BRONZE_SCALE) (IsDungeonVanilla WATER_TEMPLE)) -RR_WATER_TEMPLE_MQ_3F_CENTRAL (and (HasItem RG_BRONZE_SCALE) (IsDungeonMQ WATER_TEMPLE)) -RR_LH_FROM_WATER_TEMPLE true - -def RR_SPIRIT_TEMPLE_ENTRYWAY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Entryway -RR_SPIRIT_TEMPLE_LOBBY (IsDungeonVanilla SPIRIT_TEMPLE) -RR_SPIRIT_TEMPLE_MQ_LOBBY (IsDungeonMQ SPIRIT_TEMPLE) -RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE true - -def RR_SHADOW_TEMPLE_ENTRYWAY SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple Entryway -RR_SHADOW_TEMPLE_BEGINNING (and (IsDungeonVanilla SHADOW_TEMPLE) (and (or RT_LENS_SHADOW (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)))) -RR_SHADOW_TEMPLE_MQ_BEGINNING (IsDungeonMQ SHADOW_TEMPLE) -RR_GRAVEYARD_WARP_PAD_REGION true - -def RR_BOTTOM_OF_THE_WELL_ENTRYWAY SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Entryway -RR_BOTTOM_OF_THE_WELL_PERIMETER (and (IsDungeonVanilla BOTTOM_OF_THE_WELL) (and IsChild (CanPassEnemy RE_BIG_SKULLTULA))) -RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and (IsDungeonMQ BOTTOM_OF_THE_WELL) IsChild) -RR_KAK_WELL true - -def RR_ICE_CAVERN_ENTRYWAY SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern Entryway -RR_ICE_CAVERN_BEGINNING (IsDungeonVanilla ICE_CAVERN) -RR_ICE_CAVERN_MQ_BEGINNING (and (IsDungeonMQ ICE_CAVERN) CanUseProjectile) -RR_ZF_LEDGE true - -def RR_GERUDO_TRAINING_GROUND_ENTRYWAY SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Entryway -RR_GERUDO_TRAINING_GROUND_LOBBY (IsDungeonVanilla GERUDO_TRAINING_GROUND) -RR_GERUDO_TRAINING_GROUND_MQ_LOBBY (IsDungeonMQ GERUDO_TRAINING_GROUND) -RR_GF_EXITING_GTG true - -def RR_GANONS_CASTLE_ENTRYWAY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Entryway -RR_GANONS_CASTLE_LOBBY (IsDungeonVanilla GANONS_CASTLE) -RR_GANONS_CASTLE_MQ_LOBBY (IsDungeonMQ GANONS_CASTLE) -RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE true - -def RR_DEKU_TREE_LOBBY SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Lobby -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_DEKU_TREE_MAP_CHEST true -RC_DEKU_TREE_LOBBY_LOWER_HEART true -RC_DEKU_TREE_LOBBY_UPPER_HEART (CanPassEnemy RE_BIG_SKULLTULA) -RC_DEKU_TREE_LOBBY_GRASS_1 CanCutShrubs -RC_DEKU_TREE_LOBBY_GRASS_2 CanCutShrubs -RC_DEKU_TREE_LOBBY_GRASS_3 CanCutShrubs -RC_DEKU_TREE_LOBBY_GRASS_4 CanCutShrubs -RC_DEKU_TREE_LOBBY_GRASS_5 CanCutShrubs -RR_DEKU_TREE_ENTRYWAY true -RR_DEKU_TREE_2F_MIDDLE_ROOM true -RR_DEKU_TREE_COMPASS_ROOM true -RR_DEKU_TREE_BASEMENT_LOWER (Here (or CanAttack (CanUse RG_NUTS))) -RR_DEKU_TREE_OUTSIDE_BOSS_ROOM false -RR_DEKU_TREE_BOSS_ENTRYWAY false - -def RR_DEKU_TREE_2F_MIDDLE_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree 2F Middle Room -RR_DEKU_TREE_LOBBY (Here (or CanReflectNuts (CanUse RG_MEGATON_HAMMER))) -RR_DEKU_TREE_SLINGSHOT_ROOM (Here (or CanReflectNuts (CanUse RG_MEGATON_HAMMER))) - -def RR_DEKU_TREE_SLINGSHOT_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Slingshot Room -RC_DEKU_TREE_SLINGSHOT_CHEST true -RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST true -RC_DEKU_TREE_SLINGSHOT_GRASS_1 (and CanCutShrubs CanReflectNuts) -RC_DEKU_TREE_SLINGSHOT_GRASS_2 (and CanCutShrubs CanReflectNuts) -RC_DEKU_TREE_SLINGSHOT_GRASS_3 (and CanCutShrubs CanReflectNuts) -RC_DEKU_TREE_SLINGSHOT_GRASS_4 (and CanCutShrubs CanReflectNuts) -RR_DEKU_TREE_2F_MIDDLE_ROOM (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_HOVER_BOOTS)) - -def RR_DEKU_TREE_COMPASS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Compass Room -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_DEKU_TREE_COMPASS_CHEST true -RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST true -RC_DEKU_TREE_GS_COMPASS_ROOM CanAttack -RC_DEKU_TREE_COMPASS_GRASS_1 CanCutShrubs -RC_DEKU_TREE_COMPASS_GRASS_2 CanCutShrubs -RR_DEKU_TREE_LOBBY (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) -RR_DEKU_TREE_BOSS_ENTRYWAY false - -def RR_DEKU_TREE_BASEMENT_LOWER SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Lower -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_DEKU_TREE_BASEMENT_CHEST true -RC_DEKU_TREE_GS_BASEMENT_GATE (CanKillEnemy RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH) -RC_DEKU_TREE_GS_BASEMENT_VINES (CanKillEnemy RE_GOLD_SKULLTULA (if RT_DEKU_MQ_COMPASS_GS ED_SHORT_JUMPSLASH ED_BOMB_THROW)) -RC_DEKU_TREE_BASEMENT_GRASS_1 CanCutShrubs -RC_DEKU_TREE_BASEMENT_GRASS_2 CanCutShrubs -RR_DEKU_TREE_LOBBY true -RR_DEKU_TREE_BASEMENT_SCRUB_ROOM (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) -//Only adult can get the token without assistance -RR_DEKU_TREE_BASEMENT_UPPER (or IsAdult (or RT_DEKU_B1_SKIP (HasAccessTo RR_DEKU_TREE_BASEMENT_UPPER))) -//You can get the LOWER skull token from here as adult with hovers backwalk and a backflip, but it's trickworthy and not relevant unless you can beat tentacles without rang -RR_DEKU_TREE_OUTSIDE_BOSS_ROOM false - -def RR_DEKU_TREE_BASEMENT_SCRUB_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Scrub Room -RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1 CanCutShrubs -RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2 CanCutShrubs -RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3 CanCutShrubs -RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4 CanCutShrubs -RR_DEKU_TREE_BASEMENT_LOWER true -RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT (Here CanHitEyeTargets) - -def RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Water Room Front -RR_DEKU_TREE_BASEMENT_SCRUB_ROOM true -RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK (or (HasItem RG_BRONZE_SCALE) RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG) - -def RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Water Room Back -RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1 CanCutShrubs -RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2 CanCutShrubs -RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT (or (HasItem RG_BRONZE_SCALE) RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG) -RR_DEKU_TREE_BASEMENT_TORCH_ROOM true - -def RR_DEKU_TREE_BASEMENT_TORCH_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Torch Room -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1 CanCutShrubs -RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2 CanCutShrubs -RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK true -RR_DEKU_TREE_BASEMENT_BACK_LOBBY (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) - -def RR_DEKU_TREE_BASEMENT_BACK_LOBBY SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Back Lobby -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1 CanCutShrubs -RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2 CanCutShrubs -RR_DEKU_TREE_BASEMENT_TORCH_ROOM true -RR_DEKU_TREE_BASEMENT_BACK_ROOM (and (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) (Here BlastOrSmash)) -RR_DEKU_TREE_BASEMENT_UPPER (and (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) IsChild) - -def RR_DEKU_TREE_BASEMENT_BACK_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Back Room -RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM HookshotOrBoomerang -RR_DEKU_TREE_BASEMENT_BACK_LOBBY true - -def RR_DEKU_TREE_BASEMENT_UPPER SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Basement Upper -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RR_DEKU_TREE_BASEMENT_LOWER true -RR_DEKU_TREE_BASEMENT_BACK_LOBBY IsChild -RR_DEKU_TREE_OUTSIDE_BOSS_ROOM (Here (or HasFireSourceWithTorch (and RT_DEKU_B1_BOW_WEBS (and IsAdult (CanUse RG_FAIRY_BOW))))) - -def RR_DEKU_TREE_OUTSIDE_BOSS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Outside Boss Room -RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_DEKU_TREE_BEFORE_BOSS_GRASS_1 (and CanCutShrubs HasFireSourceWithTorch) -RC_DEKU_TREE_BEFORE_BOSS_GRASS_2 (and CanCutShrubs HasFireSourceWithTorch) -RC_DEKU_TREE_BEFORE_BOSS_GRASS_3 (and CanCutShrubs HasFireSourceWithTorch) -RR_DEKU_TREE_BASEMENT_UPPER true -RR_DEKU_TREE_BOSS_ENTRYWAY (and (or (HasItem RG_BRONZE_SCALE) (Here (CanUse RG_IRON_BOOTS))) (Here CanReflectNuts)) - -def RR_DEKU_TREE_MQ_1F SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ 1F -DekuBabaSticks (CanKillEnemy RE_WITHERED_DEKU_BABA) -BrokeDeku1FWeb HasFireSource -RC_DEKU_TREE_MQ_LOBBY_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_LOBBY_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_LOBBY_GRASS_3 CanCutShrubs -RC_DEKU_TREE_MQ_LOBBY_GRASS_4 CanCutShrubs -RC_DEKU_TREE_MQ_LOBBY_GRASS_5 CanCutShrubs -RR_DEKU_TREE_ENTRYWAY true -//may need canAvoid logic with enemy shuffle -RR_DEKU_TREE_MQ_2F true -//Swim is not required because you can jump with enough momentum to hit land. -//You even avoid fall damage if you hit the shallow water, though it's obscure knowledge so may be a trick -//if it is, then we need a landing room with (IsAdult || HasItem(RG_BRONZE_SCALE) || TakeDamage() || that trick) to reach basement -RR_DEKU_TREE_MQ_BASEMENT BrokeDeku1FWeb -//is it possible to recoil from here to the ledge with a trick? - -def RR_DEKU_TREE_MQ_2F SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ 2F -RC_DEKU_TREE_MQ_MAP_CHEST true -RC_DEKU_TREE_MQ_GS_LOBBY (CanGetEnemyDrop RE_GOLD_SKULLTULA) -RC_DEKU_TREE_MQ_LOBBY_HEART true -RC_DEKU_TREE_MQ_LOBBY_GRASS_6 CanCutShrubs -RC_DEKU_TREE_MQ_LOBBY_GRASS_7 CanCutShrubs -RC_DEKU_TREE_MQ_LOBBY_CRATE CanBreakCrates -RR_DEKU_TREE_MQ_1F true -//Will need canAvoid logic with enemy shuffle -RR_DEKU_TREE_MQ_3F true -RR_DEKU_TREE_MQ_EYE_TARGET_ROOM (Here HasFireSource) - -def RR_DEKU_TREE_MQ_3F SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ 3F -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -BrokeDeku1FWeb true -//Implies CanKillEnemy(RE_GOHMA_LARVA) -RC_DEKU_TREE_MQ_SLINGSHOT_CHEST (CanKillEnemy RE_DEKU_BABA) -RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST (or HasFireSourceWithTorch (and IsAdult (CanUse RG_FAIRY_BOW))) -RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART true -RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3 CanCutShrubs -RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4 CanCutShrubs -RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1 CanBreakCrates -RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2 CanBreakCrates -//Assumes RR_DEKU_TREE_MQ_2F access -RR_DEKU_TREE_MQ_2F true -RR_DEKU_TREE_MQ_EYE_TARGET_ROOM (Here (or (CanUse RG_STICKS) (CanUse RG_FAIRY_BOW))) -RR_DEKU_TREE_MQ_BASEMENT true - -def RR_DEKU_TREE_MQ_EYE_TARGET_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Eye Target Room -RC_DEKU_TREE_MQ_DEKU_BABA_HEART true -RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7 CanCutShrubs -RR_DEKU_TREE_MQ_COMPASS_ROOM (Here CanHitEyeTargets) -RR_DEKU_TREE_MQ_2F true - -def RR_DEKU_TREE_MQ_COMPASS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Compass Room -RC_DEKU_TREE_MQ_COMPASS_CHEST true -RC_DEKU_TREE_MQ_COMPASS_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_COMPASS_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_COMPASS_GRASS_3 CanCutShrubs -RC_DEKU_TREE_MQ_COMPASS_GRASS_4 CanCutShrubs -RR_DEKU_TREE_MQ_EYE_TARGET_ROOM (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_HOVER_BOOTS)) -RR_DEKU_TREE_MQ_PAST_BOULDER_VINES (Here (or (CanUse RG_BOMBCHU_5) (or (and (CanUse RG_BOMB_BAG) (or (CanUse RG_SONG_OF_TIME) (or IsAdult (CanUse RG_HOVER_BOOTS)))) (and (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_SONG_OF_TIME) RT_DEKU_MQ_COMPASS_GS))))) - -def RR_DEKU_TREE_MQ_PAST_BOULDER_VINES SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Past Boulder Vines -RC_DEKU_TREE_MQ_GS_PAST_BOULDER_VINES (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART true -RR_DEKU_TREE_MQ_COMPASS_ROOM BlastOrSmash - -def RR_DEKU_TREE_MQ_BASEMENT SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Basement -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_DEKU_TREE_MQ_BASEMENT_CHEST (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) -RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4 CanCutShrubs -RR_DEKU_TREE_MQ_1F true -RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM (Here CanHitEyeTargets) -//includes RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM Access, other fire sources clear directly from there -RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT (and (Here CanHitEyeTargets) (and ClearedMQDekuSERoom (Here (CanUse RG_STICKS)))) -RR_DEKU_TREE_MQ_BASEMENT_LEDGE (or RT_DEKU_B1_SKIP (or PushedDekuBasementBlock (or IsAdult (CanUse RG_HOVER_BOOTS)))) - -def RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Southeast Room -//Implies CanKillEnemy(RE_GOHMA_LARVA) -ClearedMQDekuSERoom (CanKillEnemy RE_MAD_SCRUB) -RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4 CanCutShrubs -RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT HasFireSource -RR_DEKU_TREE_MQ_BASEMENT ClearedMQDekuSERoom - -def RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Basement Water Room Front -//It's possible to get this with bow if you have move while in first person and one-point skips on, noticeably harder and jankier as child, but that's a trick -MQDekuWaterRoomTorches (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_STICKS) (or RT_DEKU_MQ_LOG (and IsChild CanShield)))) -RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST true -RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3 CanCutShrubs -RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK (or RT_DEKU_MQ_LOG (or (and IsChild CanShield) (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS))))) -RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM true - -def RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Basement Water Room Back -DekuBabaSticks (CanKillEnemy RE_WITHERED_DEKU_BABA) -MQDekuWaterRoomTorches HasFireSource -//it blocks the chest while stunned unless you stun it from afar while it's slightly off the ground -RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST (and (CanUse RG_SONG_OF_TIME) (CanPassEnemy RE_BIG_SKULLTULA)) -RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2 CanCutShrubs -RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM (and MQDekuWaterRoomTorches (CanPassEnemy RE_BIG_SKULLTULA (if (CanUse RG_SONG_OF_TIME) ED_CLOSE ED_SHORT_JUMPSLASH))) -RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT (or RT_DEKU_MQ_LOG (or (and IsChild CanShield) (or (CanUse RG_LONGSHOT) (or (HasItem RG_BRONZE_SCALE) (and (CanUse RG_IRON_BOOTS) (or IsAdult (CanUse RG_HOOKSHOT))))))) - -def RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Basement Southwest Room -RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2 CanCutShrubs -//both imply CanKillEnemy(RE_GOHMA_LARVA) -RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM (Here (and (CanKillEnemy RE_MAD_SCRUB) (CanKillEnemy RE_KEESE))) -RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK (Here (and (CanKillEnemy RE_MAD_SCRUB) (CanKillEnemy RE_KEESE))) - -def RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Basement Grave Room -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM (or (CanUse RG_LONGSHOT) (and (CanUse RG_SONG_OF_TIME) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG))) -RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5 CanCutShrubs -RR_DEKU_TREE_MQ_BASEMENT_LEDGE (and IsChild (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)))) -RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM true -//Using a bow to get past here as adult is a bit precise on standing position but simple, doing as as child requires a side-hop with the bow out to shoot through the torch and may be trick worthy -RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) - -def RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Basement Back Room -RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3 CanCutShrubs -RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM true - -def RR_DEKU_TREE_MQ_BASEMENT_LEDGE SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Basement Ledge -PushedDekuBasementBlock true -RC_DEKU_TREE_MQ_DEKU_SCRUB CanStunDeku -RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3 CanCutShrubs -RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM IsChild -RR_DEKU_TREE_MQ_BASEMENT true -//If strength 0 is shuffled, add hovers or block push to the stick check -//recoiling to skip swim is possible, but would be a trick -RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM (and (Here (or HasFireSource (CanUse RG_STICKS))) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS))) - -def RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree MQ Outside Boss Room -RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) -RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2 CanCutShrubs -RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3 CanCutShrubs -RR_DEKU_TREE_MQ_BASEMENT_LEDGE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOOKSHOT)) -RR_DEKU_TREE_BOSS_ENTRYWAY (Here CanReflectNuts) - -def RR_DEKU_TREE_BOSS_ENTRYWAY SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Boss Entryway -RR_DEKU_TREE_BOSS_ROOM true - -def RR_DEKU_TREE_BOSS_EXIT SCENE_DEKU_TREE false RA_DEKU_TREE -Deku Tree Boss Exit -RR_DEKU_TREE_OUTSIDE_BOSS_ROOM (IsDungeonVanilla DEKU_TREE) -RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM (IsDungeonMQ DEKU_TREE) - -def RR_DEKU_TREE_BOSS_ROOM SCENE_DEKU_TREE_BOSS false -Deku Tree Boss Room -DekuTreeClear (CanKillEnemy RE_GOHMA) -RC_QUEEN_GOHMA DekuTreeClear -RC_DEKU_TREE_QUEEN_GOHMA_HEART DekuTreeClear -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1 CanCutShrubs -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2 CanCutShrubs -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3 CanCutShrubs -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4 CanCutShrubs -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5 CanCutShrubs -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6 CanCutShrubs -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7 CanCutShrubs -RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8 CanCutShrubs -RR_DEKU_TREE_BOSS_EXIT true -RR_KF_OUTSIDE_DEKU_TREE @deprioritize DekuTreeClear - -def RR_DODONGOS_CAVERN_BEGINNING SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Beginning -RR_DODONGOS_CAVERN_ENTRYWAY true -RR_DODONGOS_CAVERN_LOBBY (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) - -def RR_DODONGOS_CAVERN_LOBBY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Lobby -GossipStoneFairy (and (or (Here CanBreakMudWalls) (HasItem RG_GORONS_BRACELET)) CallGossipFairy) -RC_DODONGOS_CAVERN_MAP_CHEST (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) -RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY (or CanStunDeku (HasItem RG_GORONS_BRACELET)) -RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY (and (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) CallGossipFairy) -RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG (and (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) (CanUse RG_SONG_OF_STORMS)) -RC_DODONGOS_CAVERN_GOSSIP_STONE (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) -RR_DODONGOS_CAVERN_BEGINNING true -RR_DODONGOS_CAVERN_LOBBY_SWITCH IsAdult -RR_DODONGOS_CAVERN_SE_CORRIDOR (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) -RR_DODONGOS_CAVERN_STAIRS_LOWER (HasAccessTo RR_DODONGOS_CAVERN_LOBBY_SWITCH) -RR_DODONGOS_CAVERN_FAR_BRIDGE (HasAccessTo RR_DODONGOS_CAVERN_FAR_BRIDGE) -RR_DODONGOS_CAVERN_BOSS_AREA (Here HasExplosives) -RR_DODONGOS_CAVERN_BOSS_ENTRYWAY false - -def RR_DODONGOS_CAVERN_LOBBY_SWITCH SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Lobby Switch -RR_DODONGOS_CAVERN_LOBBY true -RR_DODONGOS_CAVERN_DODONGO_ROOM true - -def RR_DODONGOS_CAVERN_SE_CORRIDOR SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern SE Corridor -RC_DODONGOS_CAVERN_GS_SCARECROW (or (CanUse RG_SCARECROW) (or (and IsAdult (CanUse RG_LONGSHOT)) (and RT_DC_SCARECROW_GS CanAttack))) -RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4 CanBreakPots -RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5 CanBreakPots -RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6 CanBreakPots -RR_DODONGOS_CAVERN_LOBBY true -RR_DODONGOS_CAVERN_SE_ROOM (Here (or CanBreakMudWalls (or CanAttack (and TakeDamage CanShield)))) -RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS true - -//Shield seems to be in logic to drop a pot on their head as they hit you to blow up the wall -def RR_DODONGOS_CAVERN_SE_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern SE Room -RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS CanAttack -RR_DODONGOS_CAVERN_SE_CORRIDOR true - -def RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Near Lower Lizalfos -RR_DODONGOS_CAVERN_SE_CORRIDOR true -RR_DODONGOS_CAVERN_LOWER_LIZALFOS true - -def RR_DODONGOS_CAVERN_LOWER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Lower Lizalfos -RC_DODONGOS_CAVERN_LIZALFOS_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_LIZALFOS_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_LIZALFOS_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_LIZALFOS_POT_4 CanBreakPots -RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART true -RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) -RR_DODONGOS_CAVERN_DODONGO_ROOM (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) - -def RR_DODONGOS_CAVERN_DODONGO_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Dodongo Room -RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4 CanBreakPots -RR_DODONGOS_CAVERN_LOBBY_SWITCH HasFireSourceWithTorch -RR_DODONGOS_CAVERN_LOWER_LIZALFOS true -RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) - -def RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Near Dodongo Room -RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS CanStunDeku -RR_DODONGOS_CAVERN_DODONGO_ROOM true - -def RR_DODONGOS_CAVERN_STAIRS_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Stairs Lower -RR_DODONGOS_CAVERN_LOBBY true -RR_DODONGOS_CAVERN_STAIRS_UPPER (or HasExplosives (or (HasItem RG_GORONS_BRACELET) (or (CanUse RG_DINS_FIRE) (and RT_DC_STAIRS_WITH_BOW (CanUse RG_FAIRY_BOW))))) -RR_DODONGOS_CAVERN_COMPASS_ROOM (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) - -def RR_DODONGOS_CAVERN_STAIRS_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Stairs Upper -RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS (or (Here HookshotOrBoomerang) (CanUse RG_LONGSHOT)) -RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS (or IsAdult (or CanAttack (and (HasAccessTo RR_DODONGOS_CAVERN_STAIRS_LOWER) (and (CanUse RG_LONGSHOT) RT_DC_VINES_GS)))) -RC_DODONGOS_CAVERN_STAIRCASE_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_STAIRCASE_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_STAIRCASE_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_STAIRCASE_POT_4 CanBreakPots -RR_DODONGOS_CAVERN_STAIRS_LOWER true -RR_DODONGOS_CAVERN_ARMOS_ROOM true - -def RR_DODONGOS_CAVERN_COMPASS_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Compass Room -RC_DODONGOS_CAVERN_COMPASS_CHEST true -RR_DODONGOS_CAVERN_STAIRS_LOWER (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MEGATON_HAMMER) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) - -def RR_DODONGOS_CAVERN_ARMOS_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Armos Room -RR_DODONGOS_CAVERN_STAIRS_UPPER true -RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true - -def RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Bomb Room Lower -RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST true -RC_DODONGOS_CAVERN_BLADE_ROOM_HEART true -RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS CanCutShrubs -RC_DODONGOS_CAVERN_BLADE_GRASS CanCutShrubs -RR_DODONGOS_CAVERN_ARMOS_ROOM true -RR_DODONGOS_CAVERN_2F_SIDE_ROOM (Here (or CanBreakMudWalls (and RT_DC_SCRUB_ROOM (HasItem RG_GORONS_BRACELET)))) -RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) -RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER (or (and IsAdult RT_DC_JUMP) (or (CanUse RG_HOVER_BOOTS) (or (and IsAdult (CanUse RG_LONGSHOT)) (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives CanJumpslash))))) - -def RR_DODONGOS_CAVERN_2F_SIDE_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern 2F Side Room -RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT CanStunDeku -RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT CanStunDeku -RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true - -def RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern First Slingshot Room -RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS CanCutShrubs -RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true -RR_DODONGOS_CAVERN_UPPER_LIZALFOS (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_FAIRY_BOW) RT_DC_SLINGSHOT_SKIP)) - -def RR_DODONGOS_CAVERN_UPPER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Upper Lizalfos -RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART true -RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART true -RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART true -RR_DODONGOS_CAVERN_LOWER_LIZALFOS true -RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) -RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) - -def RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Second Slingshot Room -RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2 CanBreakPots -RR_DODONGOS_CAVERN_UPPER_LIZALFOS true -RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_FAIRY_BOW) RT_DC_SLINGSHOT_SKIP)) - -def RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Bomb Room Upper -RC_DODONGOS_CAVERN_BOMB_BAG_CHEST true -RC_DODONGOS_CAVERN_BLADE_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_BLADE_POT_2 CanBreakPots -RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true -RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM true -RR_DODONGOS_CAVERN_FAR_BRIDGE true - -def RR_DODONGOS_CAVERN_FAR_BRIDGE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Far Bridge -RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST (Here CanBreakMudWalls) -RR_DODONGOS_CAVERN_LOBBY true -RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER true - -def RR_DODONGOS_CAVERN_BOSS_AREA SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Boss Region -FairyPot true -RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS CanCutShrubs -RR_DODONGOS_CAVERN_LOBBY true -RR_DODONGOS_CAVERN_BACK_ROOM (Here CanBreakMudWalls) -RR_DODONGOS_CAVERN_BOSS_ENTRYWAY true - -def RR_DODONGOS_CAVERN_BACK_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Back Room -RC_DODONGOS_CAVERN_GS_BACK_ROOM CanAttack -RC_DODONGOS_CAVERN_BACK_ROOM_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_BACK_ROOM_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_BACK_ROOM_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_BACK_ROOM_POT_4 CanBreakPots -RR_DODONGOS_CAVERN_BOSS_AREA true - -def RR_DODONGOS_CAVERN_MQ_BEGINNING SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Beginning -RR_DODONGOS_CAVERN_ENTRYWAY true -RR_DODONGOS_CAVERN_MQ_LOBBY (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) - -def RR_DODONGOS_CAVERN_MQ_LOBBY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Lobby -RC_DODONGOS_CAVERN_MQ_MAP_CHEST (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET)) -RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR CanStunDeku -RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT CanStunDeku -RR_DODONGOS_CAVERN_MQ_BEGINNING true -RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) -RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE (Here (or BlastOrSmash (HasItem RG_GORONS_BRACELET))) -RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER (Here (or BlastOrSmash (HasItem RG_GORONS_BRACELET))) -//strength 1 and bunny speed works too -RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE (or (Here CanBreakMudWalls) (Here (and (HasItem RG_GORONS_BRACELET) TakeDamage))) -RR_DODONGOS_CAVERN_MQ_POES_ROOM IsAdult -RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH (Here (or HasExplosives (and ClearMQDCUpperLobbyRocks (and (HasItem RG_GORONS_BRACELET) (or (and IsAdult RT_DC_MQ_ADULT_EYES) (and IsChild RT_DC_MQ_CHILD_EYES)))))) - -def RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Gossip Stone -GossipStoneFairy CallGossipFairy -RC_DODONGOS_CAVERN_GOSSIP_STONE true -RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY CallGossipFairy -RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) -RR_DODONGOS_CAVERN_MQ_LOBBY true - -def RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Mouth Side Bridge -ClearMQDCUpperLobbyRocks (or BlastOrSmash (CanUse RG_DINS_FIRE)) -RR_DODONGOS_CAVERN_MQ_LOBBY true -RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER ClearMQDCUpperLobbyRocks -//Bunny hood jump + jumpslash can also make it directly from the raising platform -//RANDOTODO is this possible with equip swapped hammer? -//it is possible to use bunny hood speed, hovers and a jumpslash to go between here and the other bridge (included with TORCH_ROOM_LOWER), but this would be a trick -RR_DODONGOS_CAVERN_MQ_POES_ROOM (or (CanUse RG_HOVER_BOOTS) (and RT_DC_MQ_CHILD_BOMBS (and CanJumpslashExceptHammer TakeDamage))) - -def RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Stairs Past Mud Wall -DekuBabaSticks CanGetDekuBabaSticks -RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM (and (CanUse RG_SONG_OF_TIME) (CanGetEnemyDrop RE_GOLD_SKULLTULA)) -RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER (or HasExplosives (or (and (HasItem RG_GORONS_BRACELET) (or (CanUse RG_STICKS) RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH)) (or (CanUse RG_DINS_FIRE) (and RT_DC_STAIRS_WITH_BOW (CanUse RG_FAIRY_BOW))))) -RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER true - -def RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Stairs Lower -RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4 CanBreakPots -RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2 CanBreakCrates -RR_DODONGOS_CAVERN_MQ_LOBBY true -//This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick -RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER (Here (or HasExplosives (or (CanUse RG_DINS_FIRE) (and RT_DC_STAIRS_WITH_BOW (CanUse RG_FAIRY_BOW))))) -RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL (Here CanBreakMudWalls) - -def RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Stairs Upper -RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE CanStunDeku -RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4 CanBreakCrates -RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER true -RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS (or (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOVER_BOOTS)) - -def RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Past Big Skulltulas -RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER (or (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOVER_BOOTS)) -RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER TakeDamage -//If some case comes up where you can directly (void?)warp here without going through Dodongo room or climbing up from below, -//the commented out logic is to handle going down and reclimbing to get silver rupees. A new eventVar will need decalring to handle this. -//(and CanClimbDCStairs (or (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOVER_BOOTS))) -RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM true - -def RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Dodongo Room -RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST (or (CanKillEnemy RE_DODONGO) (HasItem RG_GORONS_BRACELET)) -RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1 CanCutShrubs -RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2 CanCutShrubs -RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3 CanCutShrubs -RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4 CanCutShrubs -RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS true -RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER (Here (or (CanKillEnemy RE_DODONGO) (HasItem RG_GORONS_BRACELET))) - -def RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Torch Puzzle Lower -ClearMQDCUpperLobbyRocks (and (or (and IsAdult RT_DC_JUMP) (CanUse RG_HOVER_BOOTS)) (CanUse RG_STICKS)) -RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT (CanUse RG_BOOMERANG) -RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART true -RR_DODONGOS_CAVERN_MQ_LOBBY TakeDamage -RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM true -//torch checks here need strength 0 with sticks when that is implemented -RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM HasFireSourceWithTorch -//Includes an implied CanPass(RE_BIG_SKULLTULA) -RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM (Here HasFireSourceWithTorch) -RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER (or (and IsAdult RT_DC_JUMP) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) -//Implies access to RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM from here -RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS (and (CanUse RG_STICKS) (HasItem RG_GORONS_BRACELET)) - -def RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Torch Puzzle Lower -RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2 CanBreakPots -RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER (CanPassEnemy RE_BIG_SKULLTULA) -//Requires stregnth 0, If you can somehow warp into this room, add logic->CanPassEnemy(RE_BIG_SKULLTULA) -RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS (or (and HasFireSource (HasItem RG_GORONS_BRACELET)) CanBreakMudWalls) - -def RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Larvae Room -//implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts -RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST true -//implied logic->CanKillEnemy(RE_GOLD_SKULTULLA) based on entry reqs. Add crate logic when BONKO is added -RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM CanBreakCrates -RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6 CanBreakCrates -//implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts -RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER true - -def RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Before Upper Lizalfos -//Implied CanGetEnemyDrop(RE_GOLD_SKULLTULA) -RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM BlastOrSmash -RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4 CanBreakPots -RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART BlastOrSmash -//Falling down gets you stuck with nothing there, not a useful exit for logic -RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM (Here (CanKillEnemy RE_LIZALFOS)) -RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM (Here (CanKillEnemy RE_LIZALFOS)) - -def RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Before Upper Lizalfos -RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2 CanBreakCrates -RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS true -RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER (or IsAdult (Here (or BlastOrSmash (and CanAttack (HasItem RG_GORONS_BRACELET))))) - -def RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Torch Puzzle Upper -ClearMQDCUpperLobbyRocks (or CanDetonateUprightBombFlower (CanUse RG_MEGATON_HAMMER)) -RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST true -RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT CanBreakPots -RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT CanBreakPots -RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE ClearMQDCUpperLobbyRocks -RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER true -RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM true - -def RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Lower Right Side -RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS (and (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET)) CanStunDeku) -RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4 CanBreakPots -RR_DODONGOS_CAVERN_MQ_LOBBY true -RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS (and (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) CanHitEyeTargets) - -def RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Lower Lizalfos -RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART true -RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE (Here (CanKillEnemy RE_LIZALFOS)) -RR_DODONGOS_CAVERN_MQ_POES_ROOM (Here (CanKillEnemy RE_LIZALFOS)) - -def RR_DODONGOS_CAVERN_MQ_POES_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Poes Room -//If you can get to the locked part of POES_ROOM without a way to open it or passing the chest, this will need it's own room -RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST true -RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM (and (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG true)) -RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3 CanBreakPots -RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4 CanBreakPots -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7 CanBreakCrates -RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8 CanBreakCrates -RR_DODONGOS_CAVERN_MQ_LOBBY (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) -RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS true -RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) - -def RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Mad Scrub Room -//Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add -//&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) -RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG true) -//Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add -//&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) -RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1 CanCutShrubs -RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2 CanCutShrubs -RR_DODONGOS_CAVERN_MQ_POES_ROOM (Here (and (CanKillEnemy RE_FIRE_KEESE) (CanKillEnemy RE_MAD_SCRUB))) - -def RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Behind Mouth -RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT CanBreakPots -RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT CanBreakPots -RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT CanBreakPots -RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT CanBreakPots -RR_DODONGOS_CAVERN_MQ_LOBBY true -//using pots to get past the fire is in default logic. if stregnth 0 gets added, this will need to be: -//stregnth 0 || explosives, or projectiles if str0 isn't needed to pull graves (it's a narrow shot though, may be trick worthy) -RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE true -RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE IsAdult - -def RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ Back Behind Fire -//pulling the grave isn't required, as you can open the chest through it -RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST true -RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1 CanBreakPots -RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2 CanBreakPots -RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS CanCutShrubs -RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH CanAttack -//There's a trick N64 rolls into the child eyes trick for using armos blow up the bomb flowers when dying, which would be killing an armos -RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE (or (Here CanDetonateBombFlowers) (Here CanAttack)) - -def RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern MQ BossArea -FairyPot true -//even if you somehow warp to BACK_BEHIND_FIRE, if you can kill the skull at range, you can get to BEHIND_MOUTH -RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA (or (CanGetEnemyDrop RE_GOLD_SKULLTULA) (or (HasItem RG_GORONS_BRACELET) (Here (or (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and IsAdult (CanUse RG_HOVER_BOOTS)))))) -RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT CanBreakPots -RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT CanBreakPots -RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS CanCutShrubs -RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE true -//if strength 0 prevents grave pulls, add it here -RR_DODONGOS_CAVERN_BOSS_ENTRYWAY true - -def RR_DODONGOS_CAVERN_BOSS_ENTRYWAY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Boss Entryway -RR_DODONGOS_CAVERN_BOSS_ROOM true - -def RR_DODONGOS_CAVERN_BOSS_EXIT SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN -Dodongos Cavern Boss Exit -RR_DODONGOS_CAVERN_BOSS_AREA (IsDungeonVanilla DODONGOS_CAVERN) -RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH (IsDungeonMQ DODONGOS_CAVERN) - -def RR_DODONGOS_CAVERN_BOSS_ROOM SCENE_DODONGOS_CAVERN_BOSS false -Dodongos Cavern Boss Room -DodongosCavernClear (and (Here (or HasExplosives (if RT_DC_HAMMER_FLOOR (or (CanUse RG_MEGATON_HAMMER) (and RT_BLUE_FIRE_MUD_WALLS BlueFire)) (and RT_BLUE_FIRE_MUD_WALLS (CanUse RG_BOTTLE_WITH_BLUE_FIRE))))) (CanKillEnemy RE_KING_DODONGO)) -RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST true -RC_DODONGOS_CAVERN_KING_DODONGO_HEART DodongosCavernClear -RC_KING_DODONGO DodongosCavernClear -RR_DODONGOS_CAVERN_BOSS_EXIT true -RR_DEATH_MOUNTAIN_TRAIL @deprioritize DodongosCavernClear - -def RR_JABU_JABUS_BELLY_BEGINNING SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Beginning -RR_JABU_JABUS_BELLY_ENTRYWAY true -RR_JABU_JABUS_BELLY_MAIN CanUseProjectile - -//Combines Lift room middle and lower, 1F holes room, the forked corridor, and it's side rooms -def RR_JABU_JABUS_BELLY_MAIN SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Main -JabuWestTentacle (and JabuRutoIn1F (CanKillEnemy RE_TENTACLE ED_BOOMERANG)) -RC_JABU_JABUS_BELLY_DEKU_SCRUB (and (HasItem RG_BRONZE_SCALE) (and (or IsChild (or (HasItem RG_SILVER_SCALE) (or RT_JABU_ALCOVE_JUMP_DIVE (CanUse RG_IRON_BOOTS)))) CanStunDeku)) -//We can kill the Stingers with ruto -RC_JABU_JABUS_BELLY_BOOMERANG_CHEST JabuRutoIn1F -RC_JABU_JABUS_BELLY_MAP_CHEST JabuWestTentacle -RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1 CanBreakSmallCrates -RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2 CanBreakSmallCrates -RR_JABU_JABUS_BELLY_BEGINNING true -//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room -RR_JABU_JABUS_BELLY_B1_NORTH true -RR_JABU_JABUS_BELLY_COMPASS_ROOM JabuWestTentacle -RR_JABU_JABUS_BELLY_BLUE_TENTACLE JabuWestTentacle -RR_JABU_JABUS_BELLY_GREEN_TENTACLE JabuEastTentacle -RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE JabuNorthTentacle -RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM (or LoweredJabuPath (and RT_JABU_BOSS_HOVER (CanUse RG_HOVER_BOOTS))) - -def RR_JABU_JABUS_BELLY_B1_NORTH SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly B1 North -JabuRutoIn1F (or IsAdult (HasItem RG_BRONZE_SCALE)) -FairyPot (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK))) -RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER HookshotOrBoomerang -RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER HookshotOrBoomerang -RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM HookshotOrBoomerang -RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) -RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) -RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) -RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) -RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) -RR_JABU_JABUS_BELLY_MAIN true -//there's tricks for getting here with bunny-jumps or just side-hops -RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOVER_BOOTS)) -RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH (or IsAdult (HasItem RG_BRONZE_SCALE)) - -def RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Water Switch Room South -RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM HookshotOrBoomerang -RR_JABU_JABUS_BELLY_B1_NORTH (or IsAdult (HasItem RG_BRONZE_SCALE)) -RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOVER_BOOTS)) -RR_JABU_JABUS_BELLY_MAIN CanUseProjectile - -def RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Water Switch Room Ledge -FairyPot true -//this is the logic for climbing back and forth to use the pots to kill the skull... or killing the skull before climbing to grab the token -RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM (or (HasItem RG_BRONZE_SCALE) (or (and IsAdult (CanUse RG_HOVER_BOOTS)) (CanKillEnemy RE_GOLD_SKULLTULA ED_BOMB_THROW))) -RC_JABU_JABUS_BELLY_BASEMENT_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_BASEMENT_POT_2 CanBreakPots -RC_JABU_JABUS_BELLY_BASEMENT_POT_3 CanBreakPots -RR_JABU_JABUS_BELLY_B1_NORTH true -RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH true - -def RR_JABU_JABUS_BELLY_COMPASS_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Compass Room -//ruto could theoretically clear this room, but it's hard because of the timer and she doesn't appear with you when you respawn after failing, which would force a savewarp -RC_JABU_JABUS_BELLY_COMPASS_CHEST (CanKillEnemy RE_SHABOM) -RR_JABU_JABUS_BELLY_MAIN (Here (CanKillEnemy RE_SHABOM)) - -def RR_JABU_JABUS_BELLY_BLUE_TENTACLE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Blue Tentacle -JabuEastTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) -RR_JABU_JABUS_BELLY_MAIN JabuEastTentacle - -def RR_JABU_JABUS_BELLY_GREEN_TENTACLE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Green Tentacle -JabuNorthTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) -//implied logic->CanKillEnemy(RE_BARI) -RR_JABU_JABUS_BELLY_MAIN JabuNorthTentacle - -def RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Bigocto Room -RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER (and IsAdult (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH)) -RR_JABU_JABUS_BELLY_B1_NORTH true -RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO (and JabuRutoIn1F (Here (CanKillEnemy RE_BIG_OCTO))) - -def RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Above Bigocto -FairyPot true -NutPot true -RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2 CanBreakPots -RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3 CanBreakPots -RR_JABU_JABUS_BELLY_LIFT_UPPER (CanUse RG_BOOMERANG) - -def RR_JABU_JABUS_BELLY_LIFT_UPPER SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Lift Upper -LoweredJabuPath true -RR_JABU_JABUS_BELLY_MAIN true - -def RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Near Boss Room -RC_JABU_JABUS_BELLY_GS_NEAR_BOSS (CanKillEnemy RE_GOLD_SKULLTULA ED_BOMB_THROW) -RR_JABU_JABUS_BELLY_MAIN true -RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY (or (CanUse RG_BOOMERANG) (or (and RT_JABU_NEAR_BOSS_RANGED (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT)))) (and RT_JABU_NEAR_BOSS_EXPLOSIVES (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_HOVER_BOOTS) (CanUse RG_BOMB_BAG)))))) - -def RR_JABU_JABUS_BELLY_MQ_BEGINNING SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Beginning -NutPot true -RC_JABU_JABUS_BELLY_MQ_MAP_CHEST BlastOrSmash -RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST (CanUse RG_FAIRY_SLINGSHOT) -RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1 CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2 CanCutShrubs -RR_JABU_JABUS_BELLY_ENTRYWAY true -RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM (Here (CanUse RG_FAIRY_SLINGSHOT)) - -def RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Lift Room -MQJabuLiftRoomCow (CanUse RG_FAIRY_SLINGSHOT) -RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST true -RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1 true -RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2 true -RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1 (CanUse RG_IRON_BOOTS) -RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2 (CanUse RG_IRON_BOOTS) -RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3 (CanUse RG_IRON_BOOTS) -RR_JABU_JABUS_BELLY_MQ_BEGINNING true -RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE (or (HasItem RG_SILVER_SCALE) (and (HasItem RG_BRONZE_SCALE) (or IsChild (or (CanUse RG_IRON_BOOTS) RT_JABU_ALCOVE_JUMP_DIVE)))) -RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM MQJabuHolesRoomDoor -RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE (or LoweredJabuPath (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_HOOKSHOT) MQJabuLiftRoomCow))) -//If opening RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM by lowering the geyser as 1 age is to let the other through is relevant, it needs an eventAccess - -def RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Lift Room East Ledge -RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST MQJabuLiftRoomCow -RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM true -RR_JABU_JABUS_BELLY_MQ_EAST_ROOM JabuNorthTentacle - -def RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Underwater Alcove -MQJabuHolesRoomDoor true -RC_JABU_JABUS_BELLY_MQ_COMPASS_CHEST (or (CanHitSwitch ED_HOOKSHOT true) (and RT_JABU_MQ_RANG_JUMP (and (CanUse RG_BOOMERANG) (HasItem RG_BRONZE_SCALE)))) -RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2 CanBreakPots -//Getting the ones closest to the ledge with rang may be a trick due to the awkward angle without blind shooting through the flesh -RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1 (or (HasItem RG_GOLDEN_SCALE) (CanUse RG_BOOMERANG)) -RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2 (or (HasItem RG_SILVER_SCALE) (CanUse RG_BOOMERANG)) -RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3 (or (HasItem RG_BRONZE_SCALE) (CanUse RG_BOOMERANG)) -RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM (HasItem RG_BRONZE_SCALE) - -def RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Holes Room -RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST (CanUse RG_FAIRY_SLINGSHOT) -RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST (CanUse RG_FAIRY_SLINGSHOT) -RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1 (and CanCutShrubs HasExplosives) -RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2 (and CanCutShrubs HasExplosives) -RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1 CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2 CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3 CanCutShrubs -RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM true -RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM true -RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR (and (CanUse RG_BOOMERANG) (and HasExplosives (Here (CanUse RG_FAIRY_SLINGSHOT)))) -RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM JabuNorthTentacle -RR_JABU_JABUS_BELLY_MQ_PAST_OCTO (and JabuWestTentacle (and (Here (CanKillEnemy RE_BIG_OCTO)) (CanUse RG_FAIRY_SLINGSHOT))) - -def RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Water Switch Room -RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST true -//Implies logic->CanKillEnemy(RE_LIKE_LIKE) && logic->CanKillEnemy(RE_STINGER). Without swim, jump from the song of time block to the vines. -RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST (CanKillEnemy RE_LIZALFOS) -RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM (or (and (CanUse RG_SONG_OF_TIME) (CanGetEnemyDrop RE_GOLD_SKULLTULA)) (and RT_JABU_MQ_SOT_GS (CanUse RG_BOOMERANG))) -RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS CanCutShrubs -//without swim, jump from rang chest to the other side -RR_JABU_JABUS_BELLY_MQ_BEGINNING (Here (CanKillEnemy RE_LIZALFOS)) -RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (and (or IsAdult (HasItem RG_BRONZE_SCALE)) (Here (CanKillEnemy RE_LIZALFOS))) - -//Includes Like Like room -def RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Forked Corridor -JabuNorthTentacle (and (Here BlastOrSmash) (CanUse RG_BOOMERANG)) -//Implies CanKillEnemy(RE_LIKE_LIKE) -RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST (CanUse RG_FAIRY_SLINGSHOT) -RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1 CanBreakSmallCrates -RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2 CanBreakSmallCrates -RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (CanUse RG_BOOMERANG) -//If some mode lets an age use sticks and not sling, and other use sling and not sticks, this needs changing -RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS (and (Here (CanUse RG_BOOMERANG)) (or (Here (and (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_STICKS))) (Here HasFireSource))) - -def RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ West Forked Rooms -JabuWestTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) -RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM (and (Here HasExplosives) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG)) -RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR true - -def RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Invisible Keese Room -RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM (or - //firstly, we can just use FAs to clear the web and then longshot the skull - (and (CanUse RG_FIRE_ARROWS) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_LONGSHOT)) - //Otherwise, we we have to cross the gap and kill the skull. - //We can cheese the gap with hovers - //Otherwise we have to kill the enemies to raise the platform. This persists so we can do it as the other age. - (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and - //we can hit the keese farthest from the water with irons and hookshot, but we won't be able to see it while doing so - (or (CanUse RG_HOVER_BOOTS) (Here (and (or RT_LENS_JABU_MQ (CanUse RG_LENS_OF_TRUTH)) (and (CanKillEnemy RE_STINGER ED_BOOMERANG false 2 false true) (or (CanKillEnemy RE_KEESE ED_LONGSHOT false) (and RT_LENS_JABU_MQ (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)))))))) - //If we kill the enemies, we then need to cross the water using the platform. Note that adult cannot do so while swimming because MQ jank. - (or (and IsChild (HasItem RG_BRONZE_SCALE)) (and IsAdult (CanUse RG_IRON_BOOTS)))) - ) -) -RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (and (or JabuNorthTentacle TakeDamage) (HasItem RG_BRONZE_SCALE)) - -def RR_JABU_JABUS_BELLY_MQ_PAST_OCTO SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Past Octo -//if a hover up to the path is added, this will want it's own room -LoweredJabuPath (and (CanUse RG_BOOMERANG) (CanUse RG_FAIRY_SLINGSHOT)) -RC_JABU_JABUS_BELLY_MQ_COW (and (CanUse RG_EPONAS_SONG) (CanUse RG_FAIRY_SLINGSHOT)) -RC_JABU_JABUS_BELLY_MQ_JIGGLIES_GRASS CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1 CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2 CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_1 (and (CanUse RG_FAIRY_SLINGSHOT) CanBreakSmallCrates) -RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_2 (and (CanUse RG_FAIRY_SLINGSHOT) CanBreakSmallCrates) -RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM (and (CanUse RG_BOOMERANG) (CanUse RG_FAIRY_SLINGSHOT)) -//you take both fall damage and tentacle damage, unless the tentacle is down. need better damage logic -RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (and TakeDamage (Here (CanKillEnemy RE_BIG_OCTO))) - -def RR_JABU_JABUS_BELLY_MQ_EAST_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly MQ Boss Region -FairyPot true -RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST (CanUse RG_FAIRY_SLINGSHOT) -RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS (or (CanUse RG_BOOMERANG) (and RT_JABU_NEAR_BOSS_RANGED (CanUse RG_HOOKSHOT))) -RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1 CanCutShrubs -RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2 CanCutShrubs -RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE true -RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY (Here (CanUse RG_FAIRY_SLINGSHOT)) - -def RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Boss Entryway -RR_JABU_JABUS_BELLY_BOSS_ROOM true - -def RR_JABU_JABUS_BELLY_BOSS_EXIT SCENE_JABU_JABU false RA_JABU_JABUS_BELLY -Jabu Jabus Belly Boss Exit -RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM (IsDungeonVanilla JABU_JABUS_BELLY) -RR_JABU_JABUS_BELLY_MQ_EAST_ROOM (IsDungeonMQ JABU_JABUS_BELLY) - -def RR_JABU_JABUS_BELLY_BOSS_ROOM SCENE_JABU_JABU_BOSS false -Jabu Jabus Belly Boss Room -//todo: add pot kill trick -JabuJabusBellyClear (CanKillEnemy RE_BARINADE) -RC_JABU_JABUS_BELLY_BARINADE_POT_1 CanBreakPots -RC_JABU_JABUS_BELLY_BARINADE_POT_2 CanBreakPots -RC_JABU_JABUS_BELLY_BARINADE_POT_3 CanBreakPots -RC_JABU_JABUS_BELLY_BARINADE_POT_4 CanBreakPots -RC_JABU_JABUS_BELLY_BARINADE_POT_5 CanBreakPots -RC_JABU_JABUS_BELLY_BARINADE_POT_6 CanBreakPots -RC_JABU_JABUS_BELLY_BARINADE_HEART JabuJabusBellyClear -RC_BARINADE JabuJabusBellyClear -RR_JABU_JABUS_BELLY_BOSS_EXIT false -RR_ZORAS_FOUNTAIN @deprioritize JabuJabusBellyClear - -def RR_FOREST_TEMPLE_FIRST_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple First Room -RC_FOREST_TEMPLE_FIRST_ROOM_CHEST true -RC_FOREST_TEMPLE_GS_FIRST_ROOM (or (and IsAdult (CanUse RG_BOMB_BAG)) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOMBCHU_5) (or (CanUse RG_DINS_FIRE) (and RT_FOREST_FIRST_GS (or CanJumpslashExceptHammer (and IsChild (CanUse RG_BOMB_BAG))))))))))) -RR_FOREST_TEMPLE_ENTRYWAY true -RR_FOREST_TEMPLE_SOUTH_CORRIDOR true - -def RR_FOREST_TEMPLE_SOUTH_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple South Corridor -RR_FOREST_TEMPLE_FIRST_ROOM true -RR_FOREST_TEMPLE_LOBBY (CanPassEnemy RE_BIG_SKULLTULA) - -def RR_FOREST_TEMPLE_LOBBY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Lobby -ForestTempleMeg (and ForestTempleJoelle (and ForestTempleBeth (and ForestTempleAmy (CanUse RG_FAIRY_BOW)))) -RC_FOREST_TEMPLE_GS_LOBBY HookshotOrBoomerang -RC_FOREST_TEMPLE_LOBBY_POT_1 CanBreakPots -RC_FOREST_TEMPLE_LOBBY_POT_2 CanBreakPots -RC_FOREST_TEMPLE_LOBBY_POT_3 CanBreakPots -RC_FOREST_TEMPLE_LOBBY_POT_4 CanBreakPots -RC_FOREST_TEMPLE_LOBBY_POT_5 CanBreakPots -RC_FOREST_TEMPLE_LOBBY_POT_6 CanBreakPots -RR_FOREST_TEMPLE_SOUTH_CORRIDOR true -RR_FOREST_TEMPLE_NORTH_CORRIDOR true -RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER (or (CanUse RG_SONG_OF_TIME) IsChild) -RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT)) -RR_FOREST_TEMPLE_WEST_CORRIDOR (SmallKeys RR_FOREST_TEMPLE 1 5) -RR_FOREST_TEMPLE_EAST_CORRIDOR false -RR_FOREST_TEMPLE_BOSS_REGION ForestTempleMeg -RR_FOREST_TEMPLE_BOSS_ENTRYWAY false - -def RR_FOREST_TEMPLE_NORTH_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple North Corridor -RR_FOREST_TEMPLE_LOBBY true -RR_FOREST_TEMPLE_LOWER_STALFOS true - -def RR_FOREST_TEMPLE_LOWER_STALFOS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Lower Stalfos -FairyPot true -RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) -RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1 CanBreakPots -RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2 CanBreakPots -RR_FOREST_TEMPLE_NORTH_CORRIDOR true - -def RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NW Outdoors Lower -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD (or (CanUse RG_LONGSHOT) (Here HookshotOrBoomerang)) -RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) -RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) -RR_FOREST_TEMPLE_LOBBY (CanUse RG_SONG_OF_TIME) -RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER (and RT_HOVER_BOOST_SIMPLE (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives (CanUse RG_HOVER_BOOTS)))) -RR_FOREST_TEMPLE_MAP_ROOM true -RR_FOREST_TEMPLE_SEWER (or (HasItem RG_GOLDEN_SCALE) (or (CanUse RG_IRON_BOOTS) (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER))) -RR_FOREST_TEMPLE_BOSS_ENTRYWAY false - -def RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NW Outdoors Upper -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART true -RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART true -RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER true -RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST true -RR_FOREST_TEMPLE_FLOORMASTER_ROOM true -RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM true - -def RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NE Outdoors Lower -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST (or (CanUse RG_HOOKSHOT) (or (HasAccessTo RR_FOREST_TEMPLE_FALLING_ROOM) (and (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and IsAdult (and RT_FOREST_OUTDOORS_LEDGE (CanUse RG_HOVER_BOOTS)))))) -RC_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD (or (CanUse RG_HOOKSHOT) (or (and RT_FOREST_OUTDOORS_EAST_GS (CanUse RG_BOOMERANG)) (Here (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_DINS_FIRE) HasExplosives)))))) -RR_FOREST_TEMPLE_LOBBY true -RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER (or (CanUse RG_LONGSHOT) (and RT_FOREST_VINES (CanUse RG_HOOKSHOT))) -RR_FOREST_TEMPLE_SEWER (or (HasItem RG_GOLDEN_SCALE) (or (CanUse RG_IRON_BOOTS) (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER))) -RR_FOREST_TEMPLE_FALLING_ROOM false - -def RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NE Outdoors Upper -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER true -RR_FOREST_TEMPLE_MAP_ROOM true -RR_FOREST_TEMPLE_FALLING_ROOM (and RT_FOREST_DOORFRAME (and CanJumpslashExceptHammer (and (CanUse RG_HOVER_BOOTS) (CanUse RG_SCARECROW)))) - -def RR_FOREST_TEMPLE_MAP_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Map Room -RC_FOREST_TEMPLE_MAP_CHEST (CanKillEnemy RE_BLUE_BUBBLE) -RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER (Here (CanKillEnemy RE_BLUE_BUBBLE)) -RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER (Here (CanKillEnemy RE_BLUE_BUBBLE)) - -def RR_FOREST_TEMPLE_SEWER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Sewer -RC_FOREST_TEMPLE_WELL_CHEST (or (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and CanOpenUnderwaterChest (>= WaterTimer 8))) -RC_FOREST_TEMPLE_WELL_WEST_HEART (or (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) -RC_FOREST_TEMPLE_WELL_EAST_HEART (or (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) -RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER true -RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER true - -def RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Below Boss Key Chest -RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER (Here (CanKillEnemy RE_BLUE_BUBBLE)) - -def RR_FOREST_TEMPLE_FLOORMASTER_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Floormaster Room -RC_FOREST_TEMPLE_FLOORMASTER_CHEST CanDamage -RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER true - -def RR_FOREST_TEMPLE_WEST_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple West Corridor -RR_FOREST_TEMPLE_LOBBY (SmallKeys RR_FOREST_TEMPLE 1 5) -RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (or CanAttack (CanUse RG_NUTS)) - -def RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Block Push Room -RC_FOREST_TEMPLE_EYE_SWITCH_CHEST (and (HasItem RG_GORONS_BRACELET) (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT))) -RR_FOREST_TEMPLE_WEST_CORRIDOR true -RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER (or (CanUse RG_HOVER_BOOTS) (and RT_FOREST_OUTSIDE_BACKDOOR (and CanJumpslashExceptHammer (HasItem RG_GORONS_BRACELET)))) -RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED (and IsAdult (and (HasItem RG_GORONS_BRACELET) (SmallKeys RR_FOREST_TEMPLE 2))) -RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED (and IsAdult (and (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT)) (and (HasItem RG_GORONS_BRACELET) (SmallKeys RR_FOREST_TEMPLE 2)))) - -def RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NW Corridor Twisted -RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (SmallKeys RR_FOREST_TEMPLE 2) -RR_FOREST_TEMPLE_RED_POE_ROOM (SmallKeys RR_FOREST_TEMPLE 3) - -def RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NW Corridor Straightened -RC_FOREST_TEMPLE_BOSS_KEY_CHEST true -RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST true -RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (SmallKeys RR_FOREST_TEMPLE 2) - -def RR_FOREST_TEMPLE_RED_POE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Red Poe Room -ForestTempleJoelle (CanUse RG_FAIRY_BOW) -RC_FOREST_TEMPLE_RED_POE_CHEST ForestTempleJoelle -RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED (SmallKeys RR_FOREST_TEMPLE 3) -RR_FOREST_TEMPLE_UPPER_STALFOS true - -def RR_FOREST_TEMPLE_UPPER_STALFOS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Upper Stalfos -RC_FOREST_TEMPLE_BOW_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 3) -RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1 CanBreakPots -RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2 CanBreakPots -RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3 CanBreakPots -RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4 CanBreakPots -RR_FOREST_TEMPLE_RED_POE_ROOM (CanKillEnemy RE_STALFOS ED_CLOSE true 3) -RR_FOREST_TEMPLE_BLUE_POE_ROOM (CanKillEnemy RE_STALFOS ED_CLOSE true 3) - -def RR_FOREST_TEMPLE_BLUE_POE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Blue Poe Room -ForestTempleBeth (CanUse RG_FAIRY_BOW) -RC_FOREST_TEMPLE_BLUE_POE_CHEST ForestTempleBeth -RC_FOREST_TEMPLE_BLUE_POE_POT_1 CanBreakPots -RC_FOREST_TEMPLE_BLUE_POE_POT_2 CanBreakPots -RC_FOREST_TEMPLE_BLUE_POE_POT_3 CanBreakPots -RR_FOREST_TEMPLE_UPPER_STALFOS true -RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED (SmallKeys RR_FOREST_TEMPLE 4) - -def RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NE Corridor Straightened -RR_FOREST_TEMPLE_BLUE_POE_ROOM (SmallKeys RR_FOREST_TEMPLE 4) -RR_FOREST_TEMPLE_FROZEN_EYE_ROOM (SmallKeys RR_FOREST_TEMPLE 5) - -def RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple NE Corridor Twisted -RR_FOREST_TEMPLE_FROZEN_EYE_ROOM (SmallKeys RR_FOREST_TEMPLE 5) -RR_FOREST_TEMPLE_FALLING_ROOM true - -def RR_FOREST_TEMPLE_FROZEN_EYE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Frozen Eye Room -RC_FOREST_TEMPLE_FROZEN_EYE_POT_1 CanBreakPots -RC_FOREST_TEMPLE_FROZEN_EYE_POT_2 CanBreakPots -RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED (SmallKeys RR_FOREST_TEMPLE 5) -RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED (and (SmallKeys RR_FOREST_TEMPLE 5) (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE))) - -def RR_FOREST_TEMPLE_FALLING_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Falling Room -RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST true -RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER true -RR_FOREST_TEMPLE_GREEN_POE_ROOM true - -def RR_FOREST_TEMPLE_GREEN_POE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Green Poe Room -ForestTempleAmy (CanUse RG_FAIRY_BOW) -RC_FOREST_TEMPLE_GREEN_POE_POT_1 CanBreakPots -RC_FOREST_TEMPLE_GREEN_POE_POT_2 CanBreakPots -RR_FOREST_TEMPLE_FALLING_ROOM true -RR_FOREST_TEMPLE_EAST_CORRIDOR ForestTempleAmy - -def RR_FOREST_TEMPLE_EAST_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple East Corridor -RR_FOREST_TEMPLE_LOBBY (or CanAttack (CanUse RG_NUTS)) -RR_FOREST_TEMPLE_GREEN_POE_ROOM (or CanAttack (CanUse RG_NUTS)) - -def RR_FOREST_TEMPLE_BOSS_REGION SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Boss Region -RC_FOREST_TEMPLE_BASEMENT_CHEST true -RC_FOREST_TEMPLE_GS_BASEMENT HookshotOrBoomerang -RR_FOREST_TEMPLE_LOBBY true -RR_FOREST_TEMPLE_BOSS_ENTRYWAY true - -def RR_FOREST_TEMPLE_MQ_LOBBY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Lobby -RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST (or (CanPassEnemy RE_BIG_SKULLTULA ED_SHORT_JUMPSLASH false) (CanUse RG_HOVER_BOOTS)) -//Implies CanPassEnemy(RE_BIG_SKULLTULA) -RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY HookshotOrBoomerang -RR_FOREST_TEMPLE_ENTRYWAY true -RR_FOREST_TEMPLE_MQ_CENTRAL_AREA (and (SmallKeys RR_FOREST_TEMPLE 1) (CanPassEnemy RE_BIG_SKULLTULA)) - -def RR_FOREST_TEMPLE_MQ_CENTRAL_AREA SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Central Region -ForestTempleMeg (and ForestTempleJoelle (and ForestTempleBeth (and ForestTempleAmy (CanKillEnemy RE_MEG)))) -RC_FOREST_TEMPLE_MQ_LOBBY_POT_1 CanBreakPots -RC_FOREST_TEMPLE_MQ_LOBBY_POT_2 CanBreakPots -RC_FOREST_TEMPLE_MQ_LOBBY_POT_3 CanBreakPots -RC_FOREST_TEMPLE_MQ_LOBBY_POT_4 CanBreakPots -RC_FOREST_TEMPLE_MQ_LOBBY_POT_5 CanBreakPots -RC_FOREST_TEMPLE_MQ_LOBBY_POT_6 CanBreakPots -RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM (or IsChild (CanUse RG_SONG_OF_TIME)) -RR_FOREST_TEMPLE_MQ_NW_OUTDOORS CanHitEyeTargets -RR_FOREST_TEMPLE_MQ_NE_OUTDOORS CanHitEyeTargets -RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE (Here (CanKillEnemy RE_STALFOS)) -//implies the other 3 poes -RR_FOREST_TEMPLE_MQ_BASEMENT ForestTempleMeg - -def RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Wolfos Room -FairyPot true -ForestClearBelowBowChest (CanKillEnemy RE_WOLFOS) -RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST ForestClearBelowBowChest -RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1 CanBreakPots -RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2 CanBreakPots -RR_FOREST_TEMPLE_MQ_CENTRAL_AREA (and ForestClearBelowBowChest (or IsChild (CanUse RG_SONG_OF_TIME))) - -def RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Lower Block Puzzle -//longshot is capable of hitting the switch, but some invisible collision makes the shot harder than you would think, so it may be trickworthy -MQForestBlockRoomTargets (and RT_FOREST_MQ_BLOCK_PUZZLE (CanUse RG_BOMBCHU_5)) -//It is barely possible to get this as child with master + hovers, but it's tight without bunny speed -ForestCanTwistHallway (or (or (and RT_FOREST_MQ_JS_HALLWAY_SWITCH (and (CanUse RG_HOVER_BOOTS) (and IsAdult CanJumpslash))) (or (CanUse RG_STICKS) (or (CanUse RG_BIGGORON_SWORD) (and MQForestBlockRoomTargets (CanUse RG_MASTER_SWORD))))) (or (and RT_FOREST_MQ_RANG_HALLWAY_SWITCH (CanUse RG_BOOMERANG)) (and RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH (CanUse RG_HOOKSHOT)))) -RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA) -RR_FOREST_TEMPLE_MQ_CENTRAL_AREA (Here (CanKillEnemy RE_STALFOS)) -RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE (or (HasItem RG_GORONS_BRACELET) (and MQForestBlockRoomTargets (CanUse RG_HOOKSHOT))) -//Assumes RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE access -RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE (or (and IsAdult (HasItem RG_GORONS_BRACELET)) (and MQForestBlockRoomTargets (CanUse RG_HOOKSHOT))) -RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (and ForestCanTwistHallway (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) - -def RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Middle Block Puzzle -//longshot is capable of hitting the switch, but some invisible collision makes the shot more annoying than you would think, so it may be trickworthy -MQForestBlockRoomTargets (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_LONGSHOT))) -ForestCanTwistHallway (or (and RT_FOREST_MQ_JS_HALLWAY_SWITCH (and IsAdult CanJumpslash)) (and (CanUse RG_HOVER_BOOTS) (or (CanUse RG_STICKS) (or (CanUse RG_BIGGORON_SWORD) (CanUse RG_MASTER_SWORD))))) -RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE true -RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE (or (and IsAdult (HasItem RG_GORONS_BRACELET)) (and MQForestBlockRoomTargets (CanUse RG_HOOKSHOT))) -//Hammer cannot recoil from here, but can make the jump forwards with a hammer jumpslash as adult -RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (or (and ForestCanTwistHallway (CanUse RG_HOVER_BOOTS)) (and RT_FOREST_OUTSIDE_BACKDOOR (or CanJumpslashExceptHammer (and IsAdult (CanUse RG_MEGATON_HAMMER))))) - -def RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ After Block Puzzle -RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST (SmallKeys RR_FOREST_TEMPLE 3) -RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY (SmallKeys RR_FOREST_TEMPLE 3) -RR_FOREST_TEMPLE_MQ_JOELLE_ROOM (and ForestCanTwistHallway (SmallKeys RR_FOREST_TEMPLE 4)) -//!QUANTUM LOGIC! -//As there is no way in default logic to reach the other possible key use without going through RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, this is logically safe for now -//Breaks if there's any other way to RR_FOREST_TEMPLE_MQ_FALLING_ROOM than going through the eye targets in RR_FOREST_TEMPLE_MQ_CENTRAL_AREA -//Requires a bow/sling ammo source once ammo logic is done, to avoid edge cases. -RR_FOREST_TEMPLE_MQ_NW_OUTDOORS (and (SmallKeys RR_FOREST_TEMPLE 2) (Here (CanKillEnemy RE_FLOORMASTER))) - -def RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Straight Hallway -RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST (SmallKeys RR_FOREST_TEMPLE 3) -RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM true - -def RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Floormaster Room -RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (Here (CanKillEnemy RE_FLOORMASTER)) - -def RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Outdoor Ledge -ForestCanTwistHallway CanHitSwitch -RC_FOREST_TEMPLE_MQ_REDEAD_CHEST (CanKillEnemy RE_REDEAD) -RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART true -RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART true -RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART true -RR_FOREST_TEMPLE_MQ_NW_OUTDOORS true - -def RR_FOREST_TEMPLE_MQ_NW_OUTDOORS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ NW Outdoors -RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD (CanGetEnemyDrop RE_GOLD_SKULLTULA) -//the well checks are considered from both areas instead of being a region because the draining is a temp flag and the skull (as well as the chest with hook glitch) has different breath timers from each side -RC_FOREST_TEMPLE_MQ_GS_WELL (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (CanUse RG_HOOKSHOT))) -RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) -RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) -RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) -RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) -RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) -RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) -RR_FOREST_TEMPLE_MQ_NE_OUTDOORS (and (or (and (or (CanUse RG_IRON_BOOTS) (or (CanUse RG_LONGSHOT) (and RT_FOREST_MQ_WELL_SWIM (CanUse RG_HOOKSHOT)))) (HasItem RG_BRONZE_SCALE)) (HasItem RG_GOLDEN_SCALE)) (>= WaterTimer 16)) -RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES (CanUse RG_FIRE_ARROWS) - -//The well only coniders the eye target here because the eye target is a temp flag, making it unwieldy to use as an EventAccess to make it it's own room -def RR_FOREST_TEMPLE_MQ_NE_OUTDOORS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ NE Outdoors -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_FOREST_TEMPLE_MQ_WELL_CHEST (or CanHitEyeTargets (and CanOpenUnderwaterChest (>= WaterTimer 8))) -RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD (CanGetEnemyDrop RE_GOLD_SKULLTULA) -//implies logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) -RC_FOREST_TEMPLE_MQ_GS_WELL (or CanHitEyeTargets (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))) -RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) CanHitEyeTargets) -RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) CanHitEyeTargets) -RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) CanHitEyeTargets) -RR_FOREST_TEMPLE_MQ_NW_OUTDOORS (and (or (and (or (CanUse RG_IRON_BOOTS) (CanUse RG_LONGSHOT)) (HasItem RG_BRONZE_SCALE)) (HasItem RG_GOLDEN_SCALE)) (>= WaterTimer 16)) -RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) (or (and IsAdult (CanUse RG_HOVER_BOOTS)) (CanUse RG_SONG_OF_TIME)))) -RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE (CanUse RG_LONGSHOT) - -def RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Outdoors Top Ledges -RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST true -//Actually killing the skull from the doorframe with melee is annoying. Hammer swing hits low enough unaided, other swords need to crouch stab but the spot is precise based on range. kokiri sword doesn't reach at all for adult. -RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD (and (or (and IsAdult (CanUse RG_SONG_OF_TIME)) (and (CanUse RG_HOVER_BOOTS) RT_FOREST_DOORFRAME)) (and CanJumpslash (or (CanUse RG_FAIRY_SLINGSHOT) (or BlastOrSmash (or (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (or HookshotOrBoomerang (and CanStandingShield (or (CanUse RG_STICKS) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MASTER_SWORD) (and IsChild (CanUse RG_KOKIRI_SWORD))))))))))))) -RR_FOREST_TEMPLE_MQ_NW_OUTDOORS HasFireSourceWithTorch -RR_FOREST_TEMPLE_MQ_NE_OUTDOORS true -//N64 logic doesn't check damage but I always take some so I'm adding it -RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE (and RT_FOREST_OUTDOORS_LEDGE (and (CanUse RG_HOVER_BOOTS) (and CanJumpslash TakeDamage))) - -def RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ NE Outdoors Ledge -RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST true -RR_FOREST_TEMPLE_MQ_NE_OUTDOORS true -RR_FOREST_TEMPLE_MQ_FALLING_ROOM (CanUse RG_SONG_OF_TIME) - -def RR_FOREST_TEMPLE_MQ_JOELLE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Joelle room -ForestTempleJoelle (CanUse RG_FAIRY_BOW) -RC_FOREST_TEMPLE_MQ_MAP_CHEST ForestTempleJoelle -RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE (SmallKeys RR_FOREST_TEMPLE 4) -RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM true - -def RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ 3 Stalfos Room -//technically happens in RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, but the way this room blocks the hole means it cannot be logical to do anything else there. -ForestClearBelowBowChest (CanKillEnemy RE_WOLFOS) -RC_FOREST_TEMPLE_MQ_BOW_CHEST (and ForestClearBelowBowChest (CanKillEnemy RE_STALFOS ED_CLOSE true 3)) -RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1 CanBreakPots -RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2 CanBreakPots -RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3 CanBreakPots -RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4 CanBreakPots -RR_FOREST_TEMPLE_MQ_JOELLE_ROOM (and ForestClearBelowBowChest (CanKillEnemy RE_STALFOS ED_CLOSE true 3)) -RR_FOREST_TEMPLE_MQ_BETH_ROOM (and ForestClearBelowBowChest (CanKillEnemy RE_STALFOS ED_CLOSE true 3)) - -def RR_FOREST_TEMPLE_MQ_BETH_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Beth Room -ForestTempleBeth (CanUse RG_FAIRY_BOW) -RC_FOREST_TEMPLE_MQ_COMPASS_CHEST ForestTempleBeth -RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1 CanBreakPots -RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2 CanBreakPots -RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3 CanBreakPots -//!QUANTUM LOGIC! -//This key logic assumes that you can get to falling room either by spending the 5th key here, or by wasting a key in falling room itself. -//While being the 5th key makes this simpler in theory, if a different age can waste the key compared to reaching this room it breaks -RR_FOREST_TEMPLE_MQ_FALLING_ROOM (and (SmallKeys RR_FOREST_TEMPLE 5) (Here (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE)))) -RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM (SmallKeys RR_FOREST_TEMPLE 6) -RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM true - -//This room exists to show the actual map layout, and for when the crates get added to logic -def RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Torch Shot Room -RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1 CanBreakSmallCrates -RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2 CanBreakSmallCrates -RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3 CanBreakSmallCrates -RR_FOREST_TEMPLE_MQ_FALLING_ROOM (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE)) -RR_FOREST_TEMPLE_MQ_BETH_ROOM (SmallKeys RR_FOREST_TEMPLE 6) - -def RR_FOREST_TEMPLE_MQ_FALLING_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Falling Room -RC_FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST true -//Skipping swim here is non-trival, needs a roll-jump. If a swim lock is added it's probably wise to copy deku baba events here -RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE true -RR_FOREST_TEMPLE_MQ_AMY_ROOM (SmallKeys RR_FOREST_TEMPLE 6) - -def RR_FOREST_TEMPLE_MQ_AMY_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Amy Room -ForestTempleAmy (CanUse RG_FAIRY_BOW) -RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1 CanBreakPots -RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2 CanBreakPots -RR_FOREST_TEMPLE_MQ_CENTRAL_AREA ForestTempleAmy -RR_FOREST_TEMPLE_MQ_FALLING_ROOM true - -def RR_FOREST_TEMPLE_MQ_BASEMENT SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Basement -//Implies CanHitSwitch() -ForestOpenBossCorridor CanHitEyeTargets -RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST true -RR_FOREST_TEMPLE_MQ_CENTRAL_AREA ForestTempleMeg -RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM (or (CanPassEnemy RE_BIG_SKULLTULA) TakeDamage) -RR_FOREST_TEMPLE_MQ_BOSS_REGION ForestOpenBossCorridor - -def RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Basement Pot Room -RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1 CanBreakPots -RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2 CanBreakPots -RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3 CanBreakPots -RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4 CanBreakPots -RR_FOREST_TEMPLE_MQ_BASEMENT (CanPassEnemy RE_BIG_SKULLTULA) - -def RR_FOREST_TEMPLE_MQ_BOSS_REGION SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple MQ Boss Region -RR_FOREST_TEMPLE_MQ_BASEMENT ForestOpenBossCorridor -RR_FOREST_TEMPLE_BOSS_ENTRYWAY true - -def RR_FOREST_TEMPLE_BOSS_ENTRYWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE -Forest Temple Boss Entryway -RR_FOREST_TEMPLE_BOSS_REGION (and (IsDungeonVanilla FOREST_TEMPLE) false) -RR_FOREST_TEMPLE_MQ_BOSS_REGION (and (IsDungeonMQ FOREST_TEMPLE) false) -RR_FOREST_TEMPLE_BOSS_ROOM (HasItem RG_FOREST_TEMPLE_BOSS_KEY) - -def RR_FOREST_TEMPLE_BOSS_ROOM SCENE_FOREST_TEMPLE_BOSS false -Forest Temple Boss Room -ForestTempleClear (CanKillEnemy RE_PHANTOM_GANON) -RC_FOREST_TEMPLE_PHANTOM_GANON_HEART ForestTempleClear -RC_PHANTOM_GANON ForestTempleClear -RR_FOREST_TEMPLE_BOSS_ENTRYWAY false -RR_SACRED_FOREST_MEADOW @deprioritize ForestTempleClear - -def RR_FIRE_TEMPLE_FIRST_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple First Room -RR_FIRE_TEMPLE_ENTRYWAY true -RR_FIRE_TEMPLE_NEAR_BOSS_ROOM (>= FireTimer 24) -RR_FIRE_TEMPLE_LOOP_ENEMIES (and (Here (CanUse RG_MEGATON_HAMMER)) (or (SmallKeys RR_FIRE_TEMPLE 8) (not IsFireLoopLocked))) -RR_FIRE_TEMPLE_LOOP_EXIT true -RR_FIRE_TEMPLE_BIG_LAVA_ROOM (and (SmallKeys RR_FIRE_TEMPLE 2) (>= FireTimer 24)) - -def RR_FIRE_TEMPLE_NEAR_BOSS_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Near Boss Room -FairyPot (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) -RC_FIRE_TEMPLE_NEAR_BOSS_CHEST true -RC_FIRE_TEMPLE_NEAR_BOSS_POT_1 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) -RC_FIRE_TEMPLE_NEAR_BOSS_POT_2 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) -RC_FIRE_TEMPLE_NEAR_BOSS_POT_3 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) -RC_FIRE_TEMPLE_NEAR_BOSS_POT_4 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) -RR_FIRE_TEMPLE_FIRST_ROOM true -RR_FIRE_TEMPLE_BOSS_ENTRYWAY (and IsAdult (or RT_FIRE_BOSS_DOOR_JUMP (or (Here (CanUse RG_MEGATON_HAMMER)) (CanUse RG_HOVER_BOOTS)))) - -def RR_FIRE_TEMPLE_LOOP_ENEMIES SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Loop Enemies -RR_FIRE_TEMPLE_FIRST_ROOM (or (SmallKeys RR_FIRE_TEMPLE 8) (not IsFireLoopLocked)) -RR_FIRE_TEMPLE_LOOP_TILES (Here (and (CanKillEnemy RE_TORCH_SLUG) (CanKillEnemy RE_FIRE_KEESE))) - -def RR_FIRE_TEMPLE_LOOP_TILES SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Loop Tiles -RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP CanAttack -RR_FIRE_TEMPLE_LOOP_ENEMIES true -RR_FIRE_TEMPLE_LOOP_FLARE_DANCER true - -def RR_FIRE_TEMPLE_LOOP_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Loop Flare Dancer -RC_FIRE_TEMPLE_FLARE_DANCER_CHEST (and (or HasExplosives (CanUse RG_MEGATON_HAMMER)) IsAdult) -RR_FIRE_TEMPLE_LOOP_TILES true -RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH (Here (CanKillEnemy RE_FLARE_DANCER)) - -def RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Loop Hammer Switch -FireLoopSwitch (CanUse RG_MEGATON_HAMMER) -RR_FIRE_TEMPLE_LOOP_FLARE_DANCER true -RR_FIRE_TEMPLE_LOOP_GORON_ROOM FireLoopSwitch - -def RR_FIRE_TEMPLE_LOOP_GORON_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Loop Goron Room -RC_FIRE_TEMPLE_BOSS_KEY_CHEST true -RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH FireLoopSwitch -RR_FIRE_TEMPLE_LOOP_EXIT FireLoopSwitch - -def RR_FIRE_TEMPLE_LOOP_EXIT SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Loop Exit -RR_FIRE_TEMPLE_FIRST_ROOM true -RR_FIRE_TEMPLE_LOOP_GORON_ROOM FireLoopSwitch - -def RR_FIRE_TEMPLE_BIG_LAVA_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Big Lava Room -RC_FIRE_TEMPLE_BIG_LAVA_POT_1 CanBreakPots -RC_FIRE_TEMPLE_BIG_LAVA_POT_2 CanBreakPots -RC_FIRE_TEMPLE_BIG_LAVA_POT_3 CanBreakPots -RR_FIRE_TEMPLE_FIRST_ROOM (SmallKeys RR_FIRE_TEMPLE 2) -RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON true -RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES (and IsAdult (or (CanUse RG_SONG_OF_TIME) RT_FIRE_SOT)) -RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON (and IsAdult HasExplosives) -RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM (SmallKeys RR_FIRE_TEMPLE 3) - -def RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Big Lava Room North Goron -RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST true -RR_FIRE_TEMPLE_BIG_LAVA_ROOM true - -def RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Big Lava Room North Tiles -//RANDOTODO check if child can reach -RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM (or (and IsAdult CanAttack) HookshotOrBoomerang) -RR_FIRE_TEMPLE_BIG_LAVA_ROOM true - -def RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Big Lava Room South Goron -RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST true -RR_FIRE_TEMPLE_BIG_LAVA_ROOM true - -def RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Fire Pillar Room -RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART (>= FireTimer 56) -RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART (>= FireTimer 56) -RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART (>= FireTimer 56) -RR_FIRE_TEMPLE_BIG_LAVA_ROOM (SmallKeys RR_FIRE_TEMPLE 3) -RR_FIRE_TEMPLE_SHORTCUT_ROOM (and (>= FireTimer 56) (SmallKeys RR_FIRE_TEMPLE 4)) - -def RR_FIRE_TEMPLE_SHORTCUT_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Shortcut Room -RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST (Here true) -RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM (SmallKeys RR_FIRE_TEMPLE 4) -RR_FIRE_TEMPLE_SHORTCUT_CLIMB (Here true) -RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER (and IsAdult (and (or (HasItem RG_GORONS_BRACELET) RT_FIRE_STRENGTH) (or HasExplosives (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (CanUse RG_FAIRY_SLINGSHOT)))))) - -def RR_FIRE_TEMPLE_SHORTCUT_CLIMB SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Shortcut Climb -RR_FIRE_TEMPLE_SHORTCUT_ROOM true -RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER true - -def RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Boulder Maze Lower -RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST true -RC_FIRE_TEMPLE_GS_BOULDER_MAZE (and HasExplosives (or IsAdult HookshotOrBoomerang)) -RR_FIRE_TEMPLE_SHORTCUT_ROOM true -RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM true -RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM (SmallKeys RR_FIRE_TEMPLE 5 7) -RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER false - -def RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Boulder Maze Lower Side Room -RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST true -RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER true - -def RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple East Central Room -RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART true -RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART true -RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART true -RR_FIRE_TEMPLE_BIG_LAVA_ROOM TakeDamage -RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER (SmallKeys RR_FIRE_TEMPLE 5 8) -RR_FIRE_TEMPLE_FIRE_WALL_CHASE (SmallKeys RR_FIRE_TEMPLE 6 8) -RR_FIRE_TEMPLE_MAP_AREA (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) - -def RR_FIRE_TEMPLE_FIRE_WALL_CHASE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Fire Wall Chase -RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART (and (>= FireTimer 24) (or IsAdult (CanUse RG_BOOMERANG))) -RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART (and (>= FireTimer 24) (or IsAdult (CanUse RG_BOOMERANG))) -RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART (>= FireTimer 24) -RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM (and (>= FireTimer 24) (SmallKeys RR_FIRE_TEMPLE 6 8)) -RR_FIRE_TEMPLE_MAP_AREA IsAdult -RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER (and (>= FireTimer 24) IsAdult) -RR_FIRE_TEMPLE_CORRIDOR (and (>= FireTimer 24) (and IsAdult (SmallKeys RR_FIRE_TEMPLE 7))) - -def RR_FIRE_TEMPLE_MAP_AREA SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Map Region -RC_FIRE_TEMPLE_MAP_CHEST true -RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM true - -def RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Boulder Maze Upper -RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST true -RR_FIRE_TEMPLE_SHORTCUT_CLIMB HasExplosives -RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER true -RR_FIRE_TEMPLE_FIRE_WALL_CHASE true -RR_FIRE_TEMPLE_SCARECROW_ROOM (or (CanUse RG_SCARECROW) (and RT_FIRE_SCARECROW (and IsAdult (CanUse RG_LONGSHOT)))) - -def RR_FIRE_TEMPLE_SCARECROW_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Scarecrow Room -RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB (or CanJumpslashExceptHammer (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (or HasExplosives (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (CanUse RG_DINS_FIRE))))))) -RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER true -RR_FIRE_TEMPLE_EAST_PEAK true - -def RR_FIRE_TEMPLE_EAST_PEAK SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple East Peak -RC_FIRE_TEMPLE_SCARECROW_CHEST true -RC_FIRE_TEMPLE_GS_SCARECROW_TOP CanUseProjectile -RR_FIRE_TEMPLE_SCARECROW_ROOM true -RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM TakeDamage - -def RR_FIRE_TEMPLE_CORRIDOR SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Corridor -RR_FIRE_TEMPLE_FIRE_WALL_CHASE (SmallKeys RR_FIRE_TEMPLE 7) -RR_FIRE_TEMPLE_FIRE_MAZE_ROOM true - -def RR_FIRE_TEMPLE_FIRE_MAZE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Fire Maze Room -RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1 CanBreakPots -RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2 CanBreakPots -RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3 CanBreakPots -RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4 CanBreakPots -RR_FIRE_TEMPLE_CORRIDOR true -RR_FIRE_TEMPLE_FIRE_MAZE_UPPER (CanUse RG_HOVER_BOOTS) -RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM true -RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER (SmallKeys RR_FIRE_TEMPLE 8) -RR_FIRE_TEMPLE_LATE_FIRE_MAZE (or RT_FIRE_FLAME_MAZE false) - -def RR_FIRE_TEMPLE_FIRE_MAZE_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Fire Maze Upper -RR_FIRE_TEMPLE_NEAR_BOSS_ROOM (CanUse RG_MEGATON_HAMMER) -RR_FIRE_TEMPLE_FIRE_MAZE_ROOM true -RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER (CanUse RG_MEGATON_HAMMER) - -def RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Fire Maze Side Room -RC_FIRE_TEMPLE_COMPASS_CHEST true -RR_FIRE_TEMPLE_FIRE_MAZE_ROOM true - -def RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple West Central Lower -RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST (Here (and (or (CanUse RG_SONG_OF_TIME) RT_RUSTED_SWITCHES) (CanUse RG_MEGATON_HAMMER))) -RR_FIRE_TEMPLE_FIRE_MAZE_ROOM (SmallKeys RR_FIRE_TEMPLE 8) -RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER (and IsAdult (CanUse RG_SONG_OF_TIME)) -RR_FIRE_TEMPLE_LATE_FIRE_MAZE true - -def RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple West Central Upper -RR_FIRE_TEMPLE_BOSS_ENTRYWAY false -RR_FIRE_TEMPLE_FIRE_MAZE_UPPER true -RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER true - -def RR_FIRE_TEMPLE_LATE_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Late Fire Maze -RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1 CanBreakPots -RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2 CanBreakPots -RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3 CanBreakPots -RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4 CanBreakPots -RR_FIRE_TEMPLE_FIRE_MAZE_ROOM false -RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER true -RR_FIRE_TEMPLE_UPPER_FLARE_DANCER HasExplosives - -def RR_FIRE_TEMPLE_UPPER_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Upper Flare Dancer -RR_FIRE_TEMPLE_LATE_FIRE_MAZE (Here (CanKillEnemy RE_FLARE_DANCER)) -RR_FIRE_TEMPLE_WEST_CLIMB (Here (CanKillEnemy RE_FLARE_DANCER)) - -def RR_FIRE_TEMPLE_WEST_CLIMB SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple West Climb -RR_FIRE_TEMPLE_UPPER_FLARE_DANCER true -RR_FIRE_TEMPLE_WEST_PEAK CanUseProjectile - -def RR_FIRE_TEMPLE_WEST_PEAK SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple West Peak -RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST true -RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER TakeDamage -RR_FIRE_TEMPLE_WEST_CLIMB true -RR_FIRE_TEMPLE_HAMMER_RETURN_PATH (CanUse RG_MEGATON_HAMMER) - -def RR_FIRE_TEMPLE_HAMMER_RETURN_PATH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Hammer Return Path -RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1 CanBreakSmallCrates -RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2 CanBreakSmallCrates -RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE (CanUse RG_MEGATON_HAMMER) - -def RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Above Fire Maze -RR_FIRE_TEMPLE_HAMMER_RETURN_PATH true -RR_FIRE_TEMPLE_FIRE_MAZE_UPPER (CanUse RG_MEGATON_HAMMER) - -//potentially dangerous temp flag on the first room's torches, should be made permanent if possible -def RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ First Room Lower -RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1 CanBreakPots -RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2 CanBreakPots -RR_FIRE_TEMPLE_ENTRYWAY true -RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH true -RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER (or IsAdult (CanUse RG_HOOKSHOT)) -RR_FIRE_TEMPLE_MQ_STALFOS_ROOM (SmallKeys RR_FIRE_TEMPLE 5) - -def RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ First Room Upper -RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER true -RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM HasFireSource -RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM (Here (CanUse RG_MEGATON_HAMMER)) - -def RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Map Room South -RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST (CanKillEnemy RE_LIKE_LIKE) -RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER (Here (CanKillEnemy RE_LIKE_LIKE)) -RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE OpenedLowestGoronCage - -def RR_FIRE_TEMPLE_MQ_STALFOS_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Stalfos Room -RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER true -RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) - -def RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Iron Knuckle Room -FairyPot true -RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY (CanUse RG_SUNS_SONG) -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1 CanBreakPots -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2 CanBreakPots -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3 CanBreakPots -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4 CanBreakPots -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5 CanBreakPots -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6 CanBreakPots -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7 CanBreakPots -RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8 CanBreakPots -RR_FIRE_TEMPLE_MQ_STALFOS_ROOM true -RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER (Here (CanKillEnemy RE_IRON_KNUCKLE)) - -def RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Lower Flare Dancer -RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST (and (or IsAdult (CanUse RG_HOOKSHOT)) (Here (CanKillEnemy RE_FLARE_DANCER))) -RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM true -RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH (Here (CanKillEnemy RE_FLARE_DANCER)) - -def RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Map Room North -OpenedLowestGoronCage (CanUse RG_MEGATON_HAMMER) -RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER true -RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE OpenedLowestGoronCage - -def RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Map Room Cage -RC_FIRE_TEMPLE_MQ_MAP_CHEST true -RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH OpenedLowestGoronCage -RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH OpenedLowestGoronCage - -def RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Near Boss Room -//If we're using the south torch as the initial torch, or using FAs, we either have to cross to the north to remove the crate, or use a trick to ignore it -RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST (and (> FireTimer 25) (and RT_FIRE_MQ_NEAR_BOSS (or (CanUse RG_FIRE_ARROWS) (and IsAdult (and (CanUse RG_DINS_FIRE) (CanUse RG_FAIRY_BOW)))))) -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1 (and (> FireTimer 25) CanBreakCrates) -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2 (and (> FireTimer 25) CanBreakCrates) -RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER true -//Child cannot make it to the north side torches without a hook without specifically bunny hood speed + hover boots -RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH (and (> FireTimer 32) (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) -RR_FIRE_TEMPLE_BOSS_ENTRYWAY (and (>= FireTimer 15) (or (and IsAdult (or RT_FIRE_BOSS_DOOR_JUMP (CanUse RG_HOVER_BOOTS))) (or (and IsAdult HitFireTemplePlatform) (and HitFireTemplePlatform (CanUse RG_HOVER_BOOTS))))) - -//This room assumes tunic logic is handled on entry. -//Covers the upper section too, as all methods to reach this can climb up somehow -def RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Near Boss Room North -//If we have FAs, we can just remove the crate and use those to light the torches. -//otherwise, with Dins, we first light them with dins and then either use a bow shot or to cross back over to light the other torch -//Valid ways across are adult+hovers, bunny+hovers, longshot or running through the lava and then climbing back up as adult (child can't reach the ledge). -//The Damage logic here is for jumping down and running across the lava to get in dins range of the south torch -//Fairies cannot be used for this as it is time sensetive, and NL is only useful with sticks as it disables other magic while in use, so it's tunic or raw damage taking ability. -//testing tells me you take 3 ticks of lava damage, which is 12 internal damage or 3/4 of a heart at x1 damage multiplier, performing this run -//logic->EffectiveHealth() works in half hearts for whatever reason, meaning this needs a deeper refactor to be perfect, but it should be good enough for now -RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_LONGSHOT) (and IsAdult (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_GORON_TUNIC) (or (>= EffectiveHealth 2) (and (CanUse RG_NAYRUS_LOVE) (CanUse RG_STICKS)))))))))) -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1 CanBreakPots -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2 CanBreakPots -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1 (and (> FireTimer 25) CanBreakCrates) -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2 (and (> FireTimer 25) CanBreakCrates) -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3 CanBreakCrates -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4 CanBreakCrates -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5 CanBreakCrates -RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6 CanBreakCrates -RR_FIRE_TEMPLE_NEAR_BOSS_ROOM true - -def RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Big Lava Room -//I'm currently assuming the oversight version of RT_FIRE_MQ_BK_CHEST for the fire timer logic -RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST (and (>= FireTimer 40) (and HasFireSource (and HasExplosives (or (CanUse RG_HOOKSHOT) (and IsAdult RT_FIRE_MQ_BLOCKED_CHEST))))) -//implies CanGetEnemyDrop(RE_GOLD_SKULLTULA) -RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR (and (>= FireTimer 20) (CanUse RG_MEGATON_HAMMER)) -RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT CanBreakPots -RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT CanBreakPots -RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT (and (>= FireTimer 40) (or (CanUse RG_HOOKSHOT) (and RT_FIRE_MQ_BLOCKED_CHEST (or (and IsAdult CanBreakPots) (CanUse RG_BOOMERANG))))) -RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER (>= FireTimer 20) -//This room assumes Goron Tunic until looser tunic requirements tricks are made -RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM (and (CanUse RG_GORON_TUNIC) (SmallKeys RR_FIRE_TEMPLE 2)) -RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM (and HasFireSource (and (or (and (CanUse RG_FAIRY_BOW) (>= FireTimer 25)) (and RT_FIRE_MQ_BK_CHEST (>= FireTimer 50))) (or (CanUse RG_HOOKSHOT) (and IsAdult RT_FIRE_SOT)))) - -def RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Torch Firewall Room -FairyPot (CanUse RG_HOOKSHOT) -RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST (CanUse RG_HOOKSHOT) -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1 HookshotOrBoomerang -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2 HookshotOrBoomerang -RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM true - -def RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Elevator Room -RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART true -RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART true -RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART true -RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM true -RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM true - -def RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Big Torch Room -RR_FIRE_TEMPLE_MQ_LOWER_MAZE (or (and HasFireSource (CanUse RG_HOOKSHOT)) (and RT_FIRE_MQ_CLIMB (CanUse RG_HOVER_BOOTS))) -RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM (CanUse RG_GORON_TUNIC) -RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE OpenedUpperFireShortcut - -def RR_FIRE_TEMPLE_MQ_LOWER_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Lower Maze -//Check handled on both floors -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST (and HasExplosives RT_FIRE_MQ_MAZE_SIDE_ROOM) -RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM true -//Explosives can also reach this room. Chus is relatively simple, they need to detonate on the first horizontal bar up from the floor while horizontally near the switch, but bombs are much harder -RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE (Here CanJumpslash) -//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks -RR_FIRE_TEMPLE_MQ_UPPER_MAZE (and HasExplosives (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_HOOKSHOT))) - -def RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Lower Maze Crate Cage -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST true -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3 CanBreakCrates -RR_FIRE_TEMPLE_MQ_LOWER_MAZE true -//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks -RR_FIRE_TEMPLE_MQ_UPPER_MAZE (and IsAdult (or (and RT_FIRE_MQ_MAZE_HOVERS (CanUse RG_HOVER_BOOTS)) RT_FIRE_MQ_MAZE_JUMP)) - -def RR_FIRE_TEMPLE_MQ_UPPER_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Upper Maze -RR_FIRE_TEMPLE_MQ_LOWER_MAZE true -//this cage is much more lenient than the lower cage as the switch is close to the front. sling, rang and bow all hit the switch easily, though might be too unintuitive for default logic -//This shouldn't come up in most cases anyway as most methods to get here need either a melee weapon or explosives -RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE (Here (or CanJumpslash HasExplosives)) -RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT HasExplosives -//Implies RR_FIRE_TEMPLE_MQ_LOWER_MAZE access -RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB (and HasExplosives (and (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) (CanUse RG_SONG_OF_TIME))))) -RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM (and (SmallKeys RR_FIRE_TEMPLE 3) (CanUse RG_GORON_TUNIC)) - -def RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Upper Maze Box Cage -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST true -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1 CanBreakSmallCrates -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2 CanBreakSmallCrates -//Assumes maze access -RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST HasExplosives -RR_FIRE_TEMPLE_MQ_UPPER_MAZE true - -def RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Maze Shortcut -OpenedUpperFireShortcut (CanUse RG_MEGATON_HAMMER) -RR_FIRE_TEMPLE_MQ_UPPER_MAZE true -RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE OpenedUpperFireShortcut - -def RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Maze Shortcut Cage -RC_FIRE_TEMPLE_MQ_COMPASS_CHEST OpenedUpperFireShortcut -RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1 (and OpenedUpperFireShortcut CanBreakCrates) -RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2 (and OpenedUpperFireShortcut CanBreakCrates) -RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3 (and OpenedUpperFireShortcut CanBreakCrates) -RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4 (and OpenedUpperFireShortcut CanBreakCrates) -RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5 (and OpenedUpperFireShortcut CanBreakCrates) -RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6 (and OpenedUpperFireShortcut CanBreakCrates) -RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT OpenedUpperFireShortcut -RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM OpenedUpperFireShortcut - -def RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Burning Block Climb -//WallFairy (CanUse RG_HOOKSHOT) -//There's definitely ways to do this hammerless, but with one points on it's a trick -RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE (and (CanUse RG_HOOKSHOT) (CanUse RG_MEGATON_HAMMER)) -RR_FIRE_TEMPLE_MQ_UPPER_MAZE true -RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM TakeDamage - -def RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Narrow Path Room -FairyPot true -RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1 CanBreakPots -RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2 CanBreakPots -RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3 CanBreakPots -RR_FIRE_TEMPLE_MQ_LOWER_MAZE true -RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM TakeDamage - -def RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ High Torch Room -RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1 CanBreakPots -RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2 CanBreakPots -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5 CanBreakCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1 CanBreakSmallCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2 CanBreakSmallCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3 CanBreakSmallCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4 CanBreakSmallCrates -RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5 CanBreakSmallCrates -RR_FIRE_TEMPLE_MQ_UPPER_MAZE (SmallKeys RR_FIRE_TEMPLE 3) -RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM true -//Child has issues navigating the higher points of this room without an equip swapped hookshot -RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE (and (Here (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT)))) (or IsAdult (CanUse RG_HOOKSHOT))) - -def RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ South Fire Maze -RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER HasExplosives -RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT CanBreakPots -RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT CanBreakPots -RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM HitFireTemplePlatform -RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM true -RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS (or IsAdult (or (CanUse RG_SONG_OF_TIME) (CanUse RG_HOVER_BOOTS))) -//Hover boots get there via the platforms -RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE RT_FIRE_MQ_FLAME_MAZE -RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE OpenedFireMQFireMazeDoor - -def RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Fire Maze Platforms -HitFireTemplePlatform (CanUse RG_MEGATON_HAMMER) -OpenedFireMQFireMazeDoor (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_HOOKSHOT)) -RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE true -RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE (or (CanUse RG_SONG_OF_TIME) (CanUse RG_HOVER_BOOTS)) -//trick to get to RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE with hovers + taking damage is plausible - -def RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ North Fire Maze -RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA) -RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT (CanUse RG_BOOMERANG) -RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT CanBreakPots -RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT CanBreakPots -RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE (or IsAdult RT_FIRE_MQ_FLAME_MAZE) -RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE RT_FIRE_MQ_FLAME_MAZE - -def RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ West Fire Maze -RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL true -RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE RT_FIRE_MQ_FLAME_MAZE - -//this area exists for the pots in case we void warp to the top of fire somehow, because there's no way to get back the way we came -def RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Fire Maze Past Wall -RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT CanBreakPots -RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT CanBreakPots -RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT (CanUse RG_BOOMERANG) -RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER true - -def RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ North Fire Maze -RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY (CanKillEnemy RE_FLARE_DANCER) -RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL (CanKillEnemy RE_FLARE_DANCER) -RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM (and (CanKillEnemy RE_FLARE_DANCER) (SmallKeys RR_FIRE_TEMPLE 4)) - -def RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Scarecrow Room -//This requires nothing in N64 logic, but is tight enough to need rollspam with the one-point on which is stricter than I would normally consider in logic -//Child basically needs the scarecrow or a bunny hood though due to a worse ledge grab. -RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE (or IsAdult (CanUse RG_SCARECROW)) -//The dropdown here is unusual in that it hits 1 of 3 locations: RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS and the section of RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS with the hammer switch -//Using this dropdown is in N64 logic elsewhere, but not here, probably because it requires good foreknowlege to determine where to land -//This would be a logical method to reach the hammer switch without hookshot, but it practically requires access to the area that switch unlocks already. It could also be first child access to PLATFORMS if tricks ever enable that -//If a practical use for this drop is found, it should be made a trick -RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER (SmallKeys RR_FIRE_TEMPLE 4) -RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS (and (Here (CanUse RG_MEGATON_HAMMER)) (SmallKeys RR_FIRE_TEMPLE 5)) - -//The peg knocked down from here could have logical implications for child in the fire maze if tricks to gain height like bomb jumps exist -def RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple MQ Collapsed Stairs -//If someone manages to make a trick to get here from fire maze, this needs to be in a separate room as the door back is barred -RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE (CanUse RG_HOOKSHOT) -RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS (and (CanUse RG_HOOKSHOT) (Here (CanUse RG_MEGATON_HAMMER))) -RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM (and IsAdult (CanUse RG_HOOKSHOT)) - -def RR_FIRE_TEMPLE_BOSS_ENTRYWAY SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE -Fire Temple Boss Entryway -RR_FIRE_TEMPLE_NEAR_BOSS_ROOM (and (IsDungeonVanilla FIRE_TEMPLE) false) -RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM (and (IsDungeonMQ FIRE_TEMPLE) false) -RR_FIRE_TEMPLE_BOSS_ROOM (HasItem RG_FIRE_TEMPLE_BOSS_KEY) - -def RR_FIRE_TEMPLE_BOSS_ROOM SCENE_FIRE_TEMPLE_BOSS false -Fire Temple Boss Room -FireTempleClear (and (>= FireTimer 64) (CanKillEnemy RE_VOLVAGIA)) -RC_FIRE_TEMPLE_VOLVAGIA_HEART FireTempleClear -RC_VOLVAGIA FireTempleClear -RR_FIRE_TEMPLE_BOSS_ENTRYWAY false -RR_DMC_CENTRAL_LOCAL @deprioritize FireTempleClear - -//Water Temple logic currently assumes that the locked door leading to the upper water raising location is unlocked from the start -def RR_WATER_TEMPLE_LOBBY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Lobby -RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1 (and CanBreakPots (or CanWaterTempleLowFromHigh (or CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))))) -RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2 (and CanBreakPots (or CanWaterTempleLowFromHigh (or CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))))) -RR_WATER_TEMPLE_ENTRYWAY true -RR_WATER_TEMPLE_EAST_LOWER (or CanWaterTempleLowFromHigh (and (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC)) (or (CanUse RG_IRON_BOOTS) (and (CanUse RG_LONGSHOT) RT_WATER_LONGSHOT_TORCH)))) -RR_WATER_TEMPLE_NORTH_LOWER (or CanWaterTempleLowFromHigh (and (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC)) (CanUse RG_IRON_BOOTS))) -RR_WATER_TEMPLE_SOUTH_LOWER (and CanWaterTempleLowFromHigh (and HasExplosives (and (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS)) (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC))))) -RR_WATER_TEMPLE_WEST_LOWER (and CanWaterTempleLowFromHigh (and (HasItem RG_GORONS_BRACELET) (and (or IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC))))) -RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER (and CanWaterTempleLowFromHigh (SmallKeys RR_WATER_TEMPLE 5)) -RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER (and (or CanWaterTempleLowFromHigh CanWaterTempleMiddle) (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) -RR_WATER_TEMPLE_EAST_MIDDLE (and (or CanWaterTempleLowFromHigh (or CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)))) (CanUse RG_HOOKSHOT)) -RR_WATER_TEMPLE_WEST_MIDDLE CanWaterTempleMiddle -RR_WATER_TEMPLE_HIGH_WATER (and IsAdult (or (CanUse RG_HOVER_BOOTS) (and RT_DAMAGE_BOOST (and (CanUse RG_BOMB_BAG) TakeDamage)))) -RR_WATER_TEMPLE_BLOCK_CORRIDOR (and (or CanWaterTempleLowFromHigh CanWaterTempleMiddle) (and (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) (or (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and RT_WATER_CENTRAL_BOW (or IsAdult CanWaterTempleMiddle)))))) -RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM (and CanWaterTempleHigh (SmallKeys RR_WATER_TEMPLE 4)) -RR_WATER_TEMPLE_PRE_BOSS_ROOM (or (and CanWaterTempleHigh (CanUse RG_LONGSHOT)) (and RT_HOVER_BOOST_SIMPLE (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives (CanUse RG_HOVER_BOOTS))))) - -def RR_WATER_TEMPLE_EAST_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple East Lower -CanWaterTempleLowFromHigh (CanUse RG_ZELDAS_LULLABY) -RC_WATER_TEMPLE_TORCH_POT_1 (and CanBreakPots (or CanWaterTempleLowFromHigh (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)))) -RC_WATER_TEMPLE_TORCH_POT_2 (and CanBreakPots (or CanWaterTempleLowFromHigh (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)))) -RR_WATER_TEMPLE_LOBBY (or CanWaterTempleLowFromHigh (and (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC)) (CanUse RG_IRON_BOOTS))) -RR_WATER_TEMPLE_MAP_ROOM CanWaterTempleHigh -RR_WATER_TEMPLE_CRACKED_WALL (or CanWaterTempleMiddle (and CanWaterTempleHigh (and CanWaterTempleLowFromHigh (or (and (CanUse RG_HOVER_BOOTS) RT_WATER_CRACKED_WALL_HOVERS) RT_WATER_CRACKED_WALL)))) -RR_WATER_TEMPLE_TORCH_ROOM (and CanWaterTempleLowFromHigh (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) - -def RR_WATER_TEMPLE_MAP_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Map Room -RC_WATER_TEMPLE_MAP_CHEST (CanKillEnemy RE_SPIKE ED_CLOSE true 3) -RR_WATER_TEMPLE_EAST_LOWER (CanKillEnemy RE_SPIKE ED_CLOSE true 3) - -def RR_WATER_TEMPLE_CRACKED_WALL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Cracked Wall -RC_WATER_TEMPLE_CRACKED_WALL_CHEST HasExplosives -RR_WATER_TEMPLE_EAST_LOWER true - -def RR_WATER_TEMPLE_TORCH_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Torch Room -RC_WATER_TEMPLE_TORCHES_CHEST (CanKillEnemy RE_SHELL_BLADE ED_CLOSE true 3) -RR_WATER_TEMPLE_EAST_LOWER (CanKillEnemy RE_SHELL_BLADE ED_CLOSE true 3) - -def RR_WATER_TEMPLE_NORTH_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple North Lower -RR_WATER_TEMPLE_LOBBY true -RR_WATER_TEMPLE_BOULDERS_LOWER (and (or (CanUse RG_LONGSHOT) (and RT_WATER_BK_REGION (CanUse RG_HOVER_BOOTS))) (SmallKeys RR_WATER_TEMPLE 4)) - -def RR_WATER_TEMPLE_BOULDERS_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Boulders Lower -RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST (or (CanUse RG_LONGSHOT) (Here (or (and IsAdult HookshotOrBoomerang) (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))))) -RR_WATER_TEMPLE_NORTH_LOWER (SmallKeys RR_WATER_TEMPLE 4) -RR_WATER_TEMPLE_BLOCK_ROOM true -RR_WATER_TEMPLE_BOULDERS_UPPER (or (and IsAdult (or (CanUse RG_HOVER_BOOTS) RT_WATER_NORTH_BASEMENT_LEDGE_JUMP)) (and (CanUse RG_HOVER_BOOTS) (CanUse RG_IRON_BOOTS))) - -def RR_WATER_TEMPLE_BLOCK_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Block Room -RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1 CanBreakPots -RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2 CanBreakPots -RR_WATER_TEMPLE_BOULDERS_LOWER (or (and (HasItem RG_GORONS_BRACELET) HasExplosives) (CanUse RG_HOOKSHOT)) -RR_WATER_TEMPLE_JETS_ROOM (or (and (HasItem RG_GORONS_BRACELET) HasExplosives) (and (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) - -def RR_WATER_TEMPLE_JETS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Jets Room -RR_WATER_TEMPLE_BLOCK_ROOM (CanUse RG_HOOKSHOT) -RR_WATER_TEMPLE_BOULDERS_UPPER true - -def RR_WATER_TEMPLE_BOULDERS_UPPER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Boulders Upper -RR_WATER_TEMPLE_BOULDERS_LOWER true -RR_WATER_TEMPLE_JETS_ROOM IsAdult -RR_WATER_TEMPLE_BOSS_KEY_ROOM (and (or (CanUse RG_IRON_BOOTS) (and IsAdult RT_WATER_BK_JUMP_DIVE)) (SmallKeys RR_WATER_TEMPLE 5)) - -def RR_WATER_TEMPLE_BOSS_KEY_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Boss Key Room -FairyPot true -RC_WATER_TEMPLE_BOSS_KEY_CHEST true -RC_WATER_TEMPLE_BOSS_KEY_POT_1 CanBreakPots -RC_WATER_TEMPLE_BOSS_KEY_POT_2 CanBreakPots -RR_WATER_TEMPLE_BOULDERS_UPPER (and (or (CanUse RG_IRON_BOOTS) (or (and IsAdult RT_WATER_BK_JUMP_DIVE) (or IsChild (HasItem RG_SILVER_SCALE)))) (SmallKeys RR_WATER_TEMPLE 5)) - -def RR_WATER_TEMPLE_SOUTH_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple South Lower -RC_WATER_TEMPLE_GS_BEHIND_GATE (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) -RC_WATER_TEMPLE_BEHIND_GATE_POT_1 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) -RC_WATER_TEMPLE_BEHIND_GATE_POT_2 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) -RC_WATER_TEMPLE_BEHIND_GATE_POT_3 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) -RC_WATER_TEMPLE_BEHIND_GATE_POT_4 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) -RR_WATER_TEMPLE_LOBBY (CanUse RG_IRON_BOOTS) - -def RR_WATER_TEMPLE_WEST_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple West Lower -RR_WATER_TEMPLE_LOBBY (and (CanUse RG_HOOKSHOT) (and (CanUse RG_IRON_BOOTS) (HasItem RG_GORONS_BRACELET))) -RR_WATER_TEMPLE_DRAGON_ROOM (or CanJumpslashExceptHammer CanUseProjectile) - -def RR_WATER_TEMPLE_DRAGON_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Dragon Room -RC_WATER_TEMPLE_DRAGON_CHEST (or (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)) (or (and (or (and IsAdult (and RT_WATER_ADULT_DRAGON (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_BOW) (CanUse RG_BOMBCHU_5))))) (and IsChild (and RT_WATER_CHILD_DRAGON (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (CanUse RG_BOMBCHU_5)))))) (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) (Here (and IsAdult (and (CanUse RG_FAIRY_BOW) (or (and RT_WATER_ADULT_DRAGON (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) RT_WATER_DRAGON_JUMP_DIVE)))))) -RR_WATER_TEMPLE_WEST_LOWER true - -def RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Central Pillar Lower -RR_WATER_TEMPLE_LOBBY (SmallKeys RR_WATER_TEMPLE 5) -RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER (CanUse RG_HOOKSHOT) -RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT (and CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 40))) - -def RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Central Pillar Upper -CanWaterTempleMiddle (CanUse RG_ZELDAS_LULLABY) -RC_WATER_TEMPLE_GS_CENTRAL_PILLAR (or (CanUse RG_LONGSHOT) (and (or (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DINS_FIRE) (SmallKeys RR_WATER_TEMPLE 5))))) (and RT_WATER_IRONS_CENTRAL_GS (and (CanUse RG_IRON_BOOTS) (or (and (CanUse RG_HOOKSHOT) (CanUse RG_FAIRY_BOW)) (CanUse RG_DINS_FIRE))))) (and CanWaterTempleHigh HookshotOrBoomerang))) -RR_WATER_TEMPLE_LOBBY true -RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER true - -def RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Central Pillar Basement -RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST (and (CanUse RG_HOOKSHOT) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 40))) -RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) - -def RR_WATER_TEMPLE_EAST_MIDDLE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple East Middle -RC_WATER_TEMPLE_COMPASS_CHEST CanUseProjectile -RC_WATER_TEMPLE_NEAR_COMPASS_POT_1 CanBreakPots -RC_WATER_TEMPLE_NEAR_COMPASS_POT_2 CanBreakPots -RC_WATER_TEMPLE_NEAR_COMPASS_POT_3 CanBreakPots -RR_WATER_TEMPLE_LOBBY (CanUse RG_IRON_BOOTS) - -def RR_WATER_TEMPLE_WEST_MIDDLE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple West Middle -RR_WATER_TEMPLE_LOBBY true -RR_WATER_TEMPLE_HIGH_WATER CanUseProjectile - -def RR_WATER_TEMPLE_HIGH_WATER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple High Water -CanWaterTempleHigh (CanUse RG_ZELDAS_LULLABY) -RR_WATER_TEMPLE_LOBBY true - -def RR_WATER_TEMPLE_BLOCK_CORRIDOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Block Corridor -RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST (and (HasItem RG_GORONS_BRACELET) (or CanWaterTempleLowFromHigh CanWaterTempleMiddle)) -RC_WATER_TEMPLE_CENTRAL_BOW_POT_1 (and CanBreakPots (and (HasItem RG_GORONS_BRACELET) (or CanWaterTempleLowFromHigh CanWaterTempleMiddle))) -RC_WATER_TEMPLE_CENTRAL_BOW_POT_2 (and CanBreakPots (and (HasItem RG_GORONS_BRACELET) (or CanWaterTempleLowFromHigh CanWaterTempleMiddle))) -RR_WATER_TEMPLE_LOBBY (CanUse RG_HOOKSHOT) - -def RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Falling Platform Room -RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM (or (CanUse RG_LONGSHOT) (or (and RT_WATER_RANG_FALLING_PLATFORM_GS (and IsChild (CanUse RG_BOOMERANG))) (and RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS (and IsAdult (CanUse RG_HOOKSHOT))))) -RR_WATER_TEMPLE_LOBBY (and (CanUse RG_HOOKSHOT) (SmallKeys RR_WATER_TEMPLE 4)) -RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM (and (CanUse RG_HOOKSHOT) (SmallKeys RR_WATER_TEMPLE 5)) - -def RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Dragon Pillars Room -RC_WATER_TEMPLE_LIKE_LIKE_POT_1 (CanUse RG_HOOKSHOT) -RC_WATER_TEMPLE_LIKE_LIKE_POT_2 (CanUse RG_HOOKSHOT) -RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM CanUseProjectile -RR_WATER_TEMPLE_DARK_LINK_ROOM (CanUse RG_HOOKSHOT) - -def RR_WATER_TEMPLE_DARK_LINK_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Dark Link Room -RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM (CanKillEnemy RE_DARK_LINK) -RR_WATER_TEMPLE_LONGSHOT_ROOM (CanKillEnemy RE_DARK_LINK) - -def RR_WATER_TEMPLE_LONGSHOT_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Longshot Room -RC_WATER_TEMPLE_LONGSHOT_CHEST true -RR_WATER_TEMPLE_DARK_LINK_ROOM true -RR_WATER_TEMPLE_RIVER (or IsChild (CanUse RG_SONG_OF_TIME)) - -def RR_WATER_TEMPLE_RIVER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple River -RC_WATER_TEMPLE_RIVER_CHEST (and (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) (or IsAdult (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)))) -RC_WATER_TEMPLE_GS_RIVER (or (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT)) (and RT_WATER_RIVER_GS (CanUse RG_LONGSHOT))) -RC_WATER_TEMPLE_RIVER_POT_1 CanBreakPots -RC_WATER_TEMPLE_RIVER_POT_2 CanBreakPots -RC_WATER_TEMPLE_RIVER_HEART_1 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (HasItem RG_BRONZE_SCALE)) -RC_WATER_TEMPLE_RIVER_HEART_2 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (HasItem RG_BRONZE_SCALE)) -RC_WATER_TEMPLE_RIVER_HEART_3 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (HasItem RG_BRONZE_SCALE)) -RC_WATER_TEMPLE_RIVER_HEART_4 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 24)) (HasItem RG_BRONZE_SCALE)) -RR_WATER_TEMPLE_DRAGON_ROOM (and (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) (or IsAdult (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)))) - -def RR_WATER_TEMPLE_PRE_BOSS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Pre Boss Room -FairyPot true -RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1 CanBreakPots -RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2 CanBreakPots -RR_WATER_TEMPLE_LOBBY true -RR_WATER_TEMPLE_BOSS_ENTRYWAY true - -def RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ 3F South Ledge -RR_WATER_TEMPLE_ENTRYWAY (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) -RR_WATER_TEMPLE_MQ_MAIN true -//If we are not on WL_HIGH, we reach RR_WATER_TEMPLE_MQ_3F_MAIN with hookshot via 2F, otherwise we can reach the platform -RR_WATER_TEMPLE_MQ_3F_CENTRAL (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS)) -RR_WATER_TEMPLE_MQ_2F_CENTRAL (MQWaterLevel WL_LOW_OR_MID) - -//This region covers simply existing in the area around the central pillar without being on a specific platform, either swimming or walking on the lakebed -//Entry should only include being in the correct area, taking any possible fall damage, and floating up to the surface of WL_HIGH if coming from below -//This area then leads to others based on level and worst-case water timers for follow-up exits from the water's surface -//remember that any solution that works for any level doesn't need to be given a level, even if that solution is overkill for a lower level -def RR_WATER_TEMPLE_MQ_MAIN SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Main -RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE (and (HasItem RG_BRONZE_SCALE) (MQWaterLevel WL_HIGH)) -//Jumping across is possible but a trick due to the janky ledge -RR_WATER_TEMPLE_MQ_EAST_TOWER (or (and (>= WaterTimer 24) (CanUse RG_IRON_BOOTS)) (or (and (MQWaterLevel WL_MID) (and (HasItem RG_GOLDEN_SCALE) (>= WaterTimer 16))) (MQWaterLevel WL_LOW))) -RR_WATER_TEMPLE_MQ_3F_CENTRAL (and (MQWaterLevel WL_HIGH) (HasItem RG_BRONZE_SCALE)) -//First water timer uses the hook to go from the top of center to storage room/central pillar as coming from the bottom -//Second water timer is simply diving down and entering the door as fast as possible from the surface -RR_WATER_TEMPLE_MQ_2F_CENTRAL (or (and (or (MQWaterLevel WL_LOW) (and (CanUse RG_IRON_BOOTS) (or (MQWaterLevel WL_MID) (>= WaterTimer 16)))) (CanUse RG_LONGSHOT)) (and (or (MQWaterLevel WL_MID) (and (MQWaterLevel WL_HIGH_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)))) (HasItem RG_BRONZE_SCALE))) -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F (MQWaterLevel WL_LOW) -//A special entry as we can't set it to high after entering at a lower height -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT))))) -RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY (and (or (MQWaterLevel WL_MID) (and (MQWaterLevel WL_HIGH_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)))) (HasItem RG_BRONZE_SCALE)) -RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH (and MQWaterB1Switch (or (MQWaterLevel WL_LOW) (and (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 24)) (HasItem RG_BRONZE_SCALE)))) -RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM (and MQWaterB1Switch (or (and (MQWaterLevel WL_LOW) (HasItem RG_SILVER_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)))))) -//Adult needs to jump in instead of dive for swim access, but you just hold forward. RT_WATER_BK_REGION isn't relevant unless the Dark Link loop can be done without longshot with other tricks -RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM (and MQWaterB1Switch (and (or (and (MQWaterLevel WL_LOW) (HasItem RG_BRONZE_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (CanUse RG_HOOKSHOT)))) (or (CanUse RG_LONGSHOT) (and RT_WATER_BK_REGION (CanUse RG_HOVER_BOOTS))))) - -//This region specifically covers the topmost platform around central pillar -def RR_WATER_TEMPLE_MQ_3F_CENTRAL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ 3F Central -RR_WATER_TEMPLE_MQ_MAIN true -RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE (or (CanUse RG_LONGSHOT) (CanUse RG_HOVER_BOOTS)) -RR_WATER_TEMPLE_MQ_2F_CENTRAL (and (or (MQWaterLevel WL_LOW_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) (CanUse RG_HOOKSHOT)) -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (CanUse RG_HOOKSHOT)))) -RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE (or (and (MQWaterLevel WL_HIGH) (CanUse RG_LONGSHOT)) (and RT_HOVER_BOOST_SIMPLE (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives (CanUse RG_HOVER_BOOTS))))) -//Jumping across is possible but a trick due to the janky ledge -RR_WATER_TEMPLE_MQ_HIGH_EMBLEM (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS))) -//room access is (logic->IsAdult || (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))) -RR_WATER_TEMPLE_MQ_WATERFALL (and (SmallKeys RR_WATER_TEMPLE 1) (and (MQWaterLevel WL_HIGH) (CanUse RG_LONGSHOT))) -//this swimless jump with irons may be a trick as you have to put irons on quite late. -RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (MQWaterLevel WL_LOW_OR_MID)) - -//This region specifically covers walking on the lower platform around central pillar. This is underwater when WL_HIGH -//RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH should be accessed directly to use the central pillar door while at WL_HIGH -def RR_WATER_TEMPLE_MQ_2F_CENTRAL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ 2F Central -RR_WATER_TEMPLE_MQ_MAIN true -RR_WATER_TEMPLE_MQ_3F_CENTRAL (CanUse RG_HOOKSHOT) -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F (MQWaterLevel WL_LOW_OR_MID) -RR_WATER_TEMPLE_MQ_STORAGE_ROOM (CanUse RG_HOOKSHOT) -RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F (and (MQWaterLevel WL_LOW_OR_MID) (and (or IsAdult (CanUse RG_HOVER_BOOTS)) (CanUse RG_HOOKSHOT))) -RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY (and (MQWaterLevel WL_LOW_OR_MID) (CanUse RG_HOVER_BOOTS)) - -def RR_WATER_TEMPLE_MQ_2F_CENTRAL_HIGH SCENE_ID_MAX false -Invalid Region - -def RR_WATER_TEMPLE_MQ_HIGH_EMBLEM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ High Emblem -ReachedWaterHighEmblem true -CanWaterTempleHigh (CanUse RG_ZELDAS_LULLABY) -RR_WATER_TEMPLE_MQ_3F_CENTRAL true -RR_WATER_TEMPLE_MQ_MAIN true - -def RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ 3F North Ledge -//what we need if WL_LOW, we can't guarantee repeated access otherwise. -RR_WATER_TEMPLE_MQ_MAIN (or (HasItem RG_BRONZE_SCALE) TakeDamage) -RR_WATER_TEMPLE_MQ_3F_CENTRAL (CanUse RG_LONGSHOT) -RR_WATER_TEMPLE_MQ_BOSS_DOOR (or (CanUse RG_LONGSHOT) (or (CanUse RG_ICE_ARROWS) (CanUse RG_NAYRUS_LOVE))) - -def RR_WATER_TEMPLE_MQ_BOSS_DOOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Main -RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE (or (CanUse RG_ICE_ARROWS) TakeDamage) -RR_WATER_TEMPLE_BOSS_ENTRYWAY true - -def RR_WATER_TEMPLE_MQ_EAST_TOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ East Tower -//if we can't reach these, we can't move the water at all, so no need to specify level or account for WL_LOW access here -//review is some way to play ocarina underwater exists -CouldWaterTempleLow true -CanWaterTempleLowFromHigh (CanUse RG_ZELDAS_LULLABY) -RC_WATER_TEMPLE_MQ_MAP_CHEST (and (MQWaterLevel WL_HIGH) (and HasFireSource (CanUse RG_HOOKSHOT))) -RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST (or (and (MQWaterLevel WL_MID) (CanUse RG_HOOKSHOT)) (and (MQWaterLevel WL_HIGH_OR_MID) CanOpenUnderwaterChest)) -RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1 (or (and (MQWaterLevel WL_LOW) CanBreakPots) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (>= WaterTimer 16)))) -RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2 (or (and (MQWaterLevel WL_LOW) CanBreakPots) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (>= WaterTimer 16)))) -RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM (and (MQWaterLevel WL_LOW) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DINS_FIRE) (CanUse RG_STICKS)))) - -//Raising the targets by clearing this room achieves nothing logically because it requires WL_LOW to do and hookshot to use, which implies access to WL_MID and WL_HIGH already -def RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ East Tower 1F Room -RC_WATER_TEMPLE_MQ_COMPASS_CHEST (and (CanKillEnemy RE_LIZALFOS) (CanKillEnemy RE_SPIKE)) -RR_WATER_TEMPLE_MQ_EAST_TOWER true - -//This area assumes we entered through the lower door, so water is low and cannot be changed without leaving. -def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Central Pillar 1F -//This is harder than the other possibilities as you have to move between shots on top of the extra range, but there's basically no universe this should matter. -MQWaterB1Switch (and RT_WATER_MQ_CENTRAL_PILLAR (CanUse RG_FIRE_ARROWS)) -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (HasItem RG_BRONZE_SCALE)))) -//I don't know if this FW trick can ever matter but maybe it's needed to get child to CENTRAL_2F or something -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F (or (CanUse RG_HOOKSHOT) (and (MQWaterLevel WL_MID) (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (HasItem RG_BRONZE_SCALE))))) -//if the gate is open, you sink straight in, so you can't climb up this way in logic without swimming -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 (and MQWaterOpenedPillarB1 (and (MQWaterLevel WL_HIGH_OR_MID) (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (and (CanUse RG_IRON_BOOTS) (CanUse RG_ZORA_TUNIC)))))) - -//If we enter here in WL_HIGH, go to RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH instead, Assumes WL_MID_OR_LOW -def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Central Pillar 2F -CouldWaterTempleMiddle true -CanWaterTempleMiddle (CanUse RG_ZELDAS_LULLABY) -//It's possible to do this even on low water, but more awkward. I'm not sure if it's even possible for it to be relevant though. -MQWaterOpenedPillarB1 (and RT_WATER_MQ_CENTRAL_PILLAR (CanUse RG_FIRE_ARROWS)) -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and (CanUse RG_FARORES_WIND) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)))) -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 (and MQWaterOpenedPillarB1 (and (MQWaterLevel WL_MID) (and (CanUse RG_IRON_BOOTS) (CanUse RG_ZORA_TUNIC)))) - -def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Central Pillar High -MQWaterOpenedPillarB1 (and (or (and (CanUse RG_SONG_OF_TIME) (CanUse RG_DINS_FIRE)) (and RT_WATER_MQ_CENTRAL_PILLAR (CanUse RG_FIRE_ARROWS))) (or (HasItem RG_BRONZE_SCALE) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_LONGSHOT) CanJumpslash)))) -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2 CanBreakCrates -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 (and MQWaterB1Switch (and (CanUse RG_IRON_BOOTS) (CanUse RG_ZORA_TUNIC))) - -//Assuming tunic and irons was checked on entry -def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Central Pillar B1 -//Can't know water level, so we'll just assume any possibility and skip to MAIN -RR_WATER_TEMPLE_MQ_MAIN (and MQWaterOpenedPillarB1 (and (CanUse RG_IRON_BOOTS) (HasItem RG_BRONZE_SCALE))) -//Child needs to release irons for height to push down the larger "peg", however they can push the lower one down by climbing and then hit the switch through the larger peg, but it's a trick -RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL (or (and IsAdult (CanUse RG_LONGSHOT)) (and (CanUse RG_HOOKSHOT) (HasItem RG_BRONZE_SCALE))) - -def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Central Pillar B1 Final -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST (CanUse RG_HOOKSHOT) -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13 CanBreakCrates -RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14 CanBreakCrates - -def RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Behind Blue Switch 2F -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2 CanBreakPots -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3 CanBreakPots -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE CanBreakSmallCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE CanBreakSmallCrates -RR_WATER_TEMPLE_MQ_MAIN true -RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F (CanUse RG_LONGSHOT) - -def RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Behind Blue Switch 2F -RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH (CanGetEnemyDrop RE_GOLD_SKULLTULA) -RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F true -RR_WATER_TEMPLE_MQ_HIGH_EMBLEM true - -def RR_WATER_TEMPLE_MQ_STORAGE_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Storage Room -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2 CanBreakPots -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3 CanBreakPots -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1 CanBreakSmallCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2 CanBreakSmallCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3 CanBreakSmallCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4 CanBreakSmallCrates -RR_WATER_TEMPLE_MQ_MAIN (or (MQWaterLevel WL_LOW_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) - -def RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Lizalfos Hallway -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT CanBreakPots -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT CanBreakPots -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT CanBreakPots -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5 CanBreakCrates -RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE (and (MQWaterLevel WL_LOW_OR_MID) (CanUse RG_DINS_FIRE)) -//this technically exists, but only complicates things, uncomment if some edge case/glitch can use RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY to reach RR_WATER_TEMPLE_MQ_3F_CENTRAL, or if a void warp goes here -//RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE (or (and (CanUse RG_HOOKSHOT) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS))) (and (MQWaterLevel WL_LOW_OR_MID) (CanUse RG_HOOKSHOT)) (and (MQWaterLevel WL_HIGH) (HasItem RG_BRONZE_SCALE))) - -def RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Lizalfos Cage -RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY (CanKillEnemy RE_GOLD_SKULLTULA) -RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT CanBreakPots -RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT CanBreakPots -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2 CanBreakCrates - -def RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE SCENE_ID_MAX false -Invalid Region - -//This room exists to hold the wonderitems that drop from the emblems here. Specifically this assumes you are standing on the final ledge -def RR_WATER_TEMPLE_MQ_WATERFALL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Waterfall -RR_WATER_TEMPLE_MQ_3F_CENTRAL (and (SmallKeys RR_WATER_TEMPLE 1) (CanUse RG_LONGSHOT)) -RR_WATER_TEMPLE_MQ_STALFOS_PIT true -RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS (or (and MQWaterStalfosPit (and IsAdult (CanUse RG_HOOKSHOT))) (CanUse RG_HOVER_BOOTS)) -RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (and MQWaterStalfosPit (CanUse RG_LONGSHOT)) - -def RR_WATER_TEMPLE_MQ_STALFOS_PIT SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Stalfos Pit -MQWaterStalfosPit (or (and IsAdult (CanKillEnemy RE_STALFOS ED_CLOSE true 3 false true)) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (CanKillEnemy RE_STALFOS ED_BOMB_THROW true 3 false true)))) -RR_WATER_TEMPLE_MQ_WATERFALL (and MQWaterStalfosPit (and (CanUse RG_HOOKSHOT) (or IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))))) -RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS (or (and IsAdult (CanUse RG_HOOKSHOT)) (and (CanUse RG_HOOKSHOT) (and (or IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) (or (CanUse RG_HOVER_BOOTS) MQWaterStalfosPit)))) -RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (and MQWaterStalfosPit (and (or IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) (CanUse RG_HOOKSHOT))) - -//also includes the suns fairy in the middle -def RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Stalfos Pit Pots -FairyPot true -NutPot true -RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT CanBreakPots -RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT CanBreakPots -RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT CanBreakPots -RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_WATER_TEMPLE_MQ_WATERFALL (and MQWaterStalfosPit (or (CanUse RG_HOVER_BOOTS) (CanUse RG_LONGSHOT))) -RR_WATER_TEMPLE_MQ_STALFOS_PIT true -RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (and MQWaterStalfosPit (CanUse RG_HOOKSHOT)) - -//specifically the area past the spikes -def RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Stalfos Pit Upper -RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2 CanBreakPots -RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) -RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_WATER_TEMPLE_MQ_STALFOS_PIT (or IsAdult TakeDamage) -RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS (or IsAdult TakeDamage) -RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK (CanKillEnemy RE_DARK_LINK) - -def RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ After Dark Link -FairyPot true -RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2 CanBreakPots -RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (CanKillEnemy RE_DARK_LINK) -RR_WATER_TEMPLE_MQ_RIVER_SKULL (and (CanUse RG_HOOKSHOT) (or (HasItem RG_BRONZE_SCALE) (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) (CanUse RG_LONGSHOT)))) - -//if we can use hookshot, we are standing on the targets, otherwise assume we're in the water -def RR_WATER_TEMPLE_MQ_RIVER_SKULL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ River Skull -RC_WATER_TEMPLE_MQ_GS_RIVER (or (CanUse RG_LONGSHOT) (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))) -RR_WATER_TEMPLE_MQ_RIVER_POTS (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)) - -def RR_WATER_TEMPLE_MQ_RIVER_POTS SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ River Pots -FairyPot true -RC_WATER_TEMPLE_MQ_RIVER_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_RIVER_POT_2 CanBreakPots -RR_WATER_TEMPLE_MQ_RIVER_SKULL (or (CanUse RG_LONGSHOT) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (CanUse RG_HOOKSHOT)))) -//You don't need to swim for this if you put irons on in midair and hold forward while aiming for the tunnel with a tight angle, but if you miss you have to void unless you have a hook. It's only relevant with glitches anyway -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE (or (HasItem RG_SILVER_SCALE) (and IsAdult (and (HasItem RG_BRONZE_SCALE) RT_WATER_DRAGON_JUMP_DIVE))) -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOVER_BOOTS) CanJumpslash))) - -def RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Dragon Room Door -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2 CanBreakCrates -RR_WATER_TEMPLE_MQ_RIVER_POTS (CanUse RG_LONGSHOT) -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (CanUse RG_HOOKSHOT))) -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE (HasItem RG_SILVER_SCALE) -RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH MQWaterDragonTorches - -//This region assumes Iron boots to access -def RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Dragon Room Tunnel -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4 CanBreakCrates -RR_WATER_TEMPLE_MQ_RIVER_POTS (CanUse RG_LONGSHOT) -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOOKSHOT)) -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)) - -def RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Dragon Room Alcove -MQWaterDragonTorches HasFireSource -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1 CanBreakSmallCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2 CanBreakSmallCrates -RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3 CanBreakSmallCrates -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR (HasItem RG_SILVER_SCALE) - -def RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Boss Key Room Switch -RC_WATER_TEMPLE_MQ_BOSS_KEY_POT CanBreakPots -RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE CanBreakCrates -RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR true -RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT true -RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST (and CanHitSwitch (Here (CanUse RG_DINS_FIRE))) - -//this exists for the crates in preparation for clips through the grate -def RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Boss Key Room Pit -RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4 CanBreakCrates -RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH (CanHitSwitch ED_BOOMERANG) - -def RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Boss Key Room Chest -RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST true -RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH (or (CanHitSwitch ED_BOMB_THROW) (CanUse RG_HOVER_BOOTS)) -RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT true -RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH (or (HasItem RG_SILVER_SCALE) (and (CanUse RG_IRON_BOOTS) (or (HasItem RG_BRONZE_SCALE) (and (>= WaterTimer 24) (CanUse RG_LONGSHOT))))) - -def RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ B1 Gate Switch -//If the water is low, the switch is underwater and needs irons to press, otherwise, the water is too low to climb up and you need irons to hookshot a target -//If a glitch clips through the gate on low, have it logically press the switch and let entrance logic enter -MQWaterB1Switch (CanUse RG_IRON_BOOTS) -RR_WATER_TEMPLE_MQ_MAIN (and MQWaterB1Switch (or (MQWaterLevel WL_LOW) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)))) -RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST (and (CanUse RG_IRON_BOOTS) (and (HasItem RG_BRONZE_SCALE) (or (MQWaterLevel WL_LOW) (>= WaterTimer 24)))) - -def RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Triangle Torch Room -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -//we can backflip over the spikes, but land in water. -RR_WATER_TEMPLE_MQ_MAIN (and MQWaterB1Switch (or (and (MQWaterLevel WL_LOW) (HasItem RG_GOLDEN_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 40) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)))))) -RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE (and (CanUse RG_FIRE_ARROWS) (or (and IsAdult (CanUse RG_HOVER_BOOTS)) (and (CanUse RG_LONGSHOT) (Here ScarecrowsSong)))) - -def RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Triangle Torch Cage -RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2 CanBreakPots -RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3 CanBreakPots -RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4 CanBreakPots -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2 CanBreakCrates - -def RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Crates Whirlpools Room -RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) -RR_WATER_TEMPLE_MQ_MAIN (and MQWaterB1Switch (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 24) (or (CanUse RG_LONGSHOT) (HasItem RG_BRONZE_SCALE))))) -//Child can use crate to get height to make it with hovers, but it's annoyingly tight so would be a trick -RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8) - //putting requirement to get out of the water here as scarecrow method in includes hook which satisfies it - (or (and IsAdult (and (or (CanUse RG_HOVER_BOOTS) RT_WATER_NORTH_BASEMENT_LEDGE_JUMP) (or (CanUse RG_HOOKSHOT) (HasItem RG_BRONZE_SCALE)))) (and (Here ScarecrowsSong) (CanUse RG_HOOKSHOT))) -) -RR_WATER_TEMPLE_MQ_4_TORCH_ROOM (and IsAdult (or (CanUse RG_HOVER_BOOTS) (or RT_WATER_NORTH_BASEMENT_LEDGE_JUMP (and (Here ScarecrowsSong) (CanUse RG_HOOKSHOT))))) -RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE (and RT_WATER_MQ_LOCKED_GS (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))) - -def RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Single Stalfos Room -RC_WATER_TEMPLE_MQ_FREESTANDING_KEY CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2 CanBreakPots -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4 CanBreakCrates -RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5 CanBreakCrates -RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM (or (HasItem RG_SILVER_SCALE) (or (and IsChild (HasItem RG_BRONZE_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOOKSHOT)))))) - -def RR_WATER_TEMPLE_MQ_4_TORCH_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ 4 Torch Room -RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM (or (and IsAdult (or (CanUse RG_HOVER_BOOTS) CanJumpslash)) (or (HasItem RG_BRONZE_SCALE) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (CanUse RG_HOOKSHOT))))) -RR_WATER_TEMPLE_MQ_DODONGO_ROOM (and CanHitSwitch HasFireSource) - -def RR_WATER_TEMPLE_MQ_DODONGO_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Dodongo Room -RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1 CanBreakPots -RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2 CanBreakPots -RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE CanBreakCrates -RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE CanBreakCrates -RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3 CanBreakCrates -RR_WATER_TEMPLE_MQ_4_TORCH_ROOM (and (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS)) (Here (CanKillEnemy RE_DODONGO ED_CLOSE true 5))) -RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE (and (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS)) (Here (CanKillEnemy RE_DODONGO ED_CLOSE true 5))) - -def RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple MQ Basement Gated Areas -RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA (and (CanGetEnemyDrop RE_GOLD_SKULLTULA) CanBreakCrates) -RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1 CanBreakCrates -RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2 CanBreakCrates -RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3 CanBreakCrates -RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4 CanBreakCrates -RR_WATER_TEMPLE_MQ_DODONGO_ROOM true - -def RR_WATER_TEMPLE_BOSS_ENTRYWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE -Water Temple Boss Entryway -RR_WATER_TEMPLE_PRE_BOSS_ROOM (and (IsDungeonVanilla WATER_TEMPLE) false) -RR_WATER_TEMPLE_MQ_BOSS_DOOR (and (IsDungeonMQ WATER_TEMPLE) false) -RR_WATER_TEMPLE_BOSS_ROOM (HasItem RG_WATER_TEMPLE_BOSS_KEY) - -def RR_WATER_TEMPLE_BOSS_ROOM SCENE_WATER_TEMPLE_BOSS false -Water Temple Boss Room -WaterTempleClear (CanKillEnemy RE_MORPHA) -RC_WATER_TEMPLE_MORPHA_HEART WaterTempleClear -RC_MORPHA WaterTempleClear -RR_WATER_TEMPLE_BOSS_ENTRYWAY false -RR_LAKE_HYLIA @deprioritize WaterTempleClear - -def RR_SPIRIT_TEMPLE_LOBBY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Lobby -RC_SPIRIT_TEMPLE_LOBBY_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_LOBBY_POT_2 CanBreakPots -RR_SPIRIT_TEMPLE_ENTRYWAY true -RR_SPIRIT_TEMPLE_CHILD IsChild -RR_SPIRIT_TEMPLE_EARLY_ADULT (CanUse RG_SILVER_GAUNTLETS) - -def RR_SPIRIT_TEMPLE_CHILD SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Child Spirit Temple -NutCrate true -RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) -RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (and (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT))))) (or (CanUse RG_STICKS) (CanUse RG_DINS_FIRE)))) -RC_SPIRIT_TEMPLE_GS_METAL_FENCE (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) -RC_SPIRIT_TEMPLE_ANUBIS_POT_1 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) -RC_SPIRIT_TEMPLE_ANUBIS_POT_2 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) -RC_SPIRIT_TEMPLE_ANUBIS_POT_3 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) -RC_SPIRIT_TEMPLE_ANUBIS_POT_4 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) -RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1 CanBreakSmallCrates -RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2 CanBreakSmallCrates -RR_SPIRIT_TEMPLE_CHILD_CLIMB (SmallKeys RR_SPIRIT_TEMPLE 1) - -def RR_SPIRIT_TEMPLE_CHILD_CLIMB SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Child Spirit Temple Climb -RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST (or (HasProjectile HasProjectileAge::Both) (or (and (SmallKeys RR_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (HasProjectile HasProjectileAge::Adult))) (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and IsChild (HasProjectile HasProjectileAge::Child))))) -RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST (or (HasProjectile HasProjectileAge::Both) (or (and (SmallKeys RR_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (HasProjectile HasProjectileAge::Adult))) (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and IsChild (HasProjectile HasProjectileAge::Child))))) -RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM (or (HasProjectile HasProjectileAge::Both) (or (CanUse RG_DINS_FIRE) (or (and TakeDamage (or CanJumpslashExceptHammer (HasProjectile HasProjectileAge::Child))) (or (and IsChild (and (SmallKeys RR_SPIRIT_TEMPLE 5) (HasProjectile HasProjectileAge::Child))) (and (SmallKeys RR_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (or (HasProjectile HasProjectileAge::Adult) (and TakeDamage CanJumpslashExceptHammer)))))))) -RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1 CanBreakPots -RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER (or HasExplosives (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) - -def RR_SPIRIT_TEMPLE_EARLY_ADULT SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Early Adult Spirit Temple -RC_SPIRIT_TEMPLE_COMPASS_CHEST (and (CanUse RG_HOOKSHOT) (CanUse RG_ZELDAS_LULLABY)) -RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_BOMB_BAG) (and IsAdult RT_SPIRIT_LOWER_ADULT_SWITCH))))))) (or (CanUse RG_HOVER_BOOTS) CanJumpslashExceptHammer)) -RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST (SmallKeys RR_SPIRIT_TEMPLE 3) -RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST (SmallKeys RR_SPIRIT_TEMPLE 3) -RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM (and (CanUse RG_SONG_OF_TIME) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_BOMB_BAG) RT_SPIRIT_LOWER_ADULT_SWITCH))))) -RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY (and (CanUse RG_SUNS_SONG) (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_BOMB_BAG) (and IsAdult RT_SPIRIT_LOWER_ADULT_SWITCH))))))) (or (CanUse RG_HOVER_BOOTS) CanJumpslash))) -RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER (SmallKeys RR_SPIRIT_TEMPLE 1) - -def RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Central Chamber -RC_SPIRIT_TEMPLE_MAP_CHEST (or (and (or HasExplosives (SmallKeys RR_SPIRIT_TEMPLE 2)) (or (CanUse RG_DINS_FIRE) (and (or (CanUse RG_FIRE_ARROWS) RT_SPIRIT_MAP_CHEST) (and (CanUse RG_FAIRY_BOW) (CanUse RG_STICKS))))) (or (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_STICKS))) (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (or (CanUse RG_FIRE_ARROWS) (and RT_SPIRIT_MAP_CHEST (CanUse RG_FAIRY_BOW))) (CanUse RG_SILVER_GAUNTLETS))))) -RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST (or (and (or HasExplosives (SmallKeys RR_SPIRIT_TEMPLE 2)) (or (CanUse RG_DINS_FIRE) (and (or (CanUse RG_FIRE_ARROWS) RT_SPIRIT_SUN_CHEST) (and (CanUse RG_FAIRY_BOW) (CanUse RG_STICKS))))) (or (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_STICKS))) (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (or (CanUse RG_FIRE_ARROWS) (and RT_SPIRIT_SUN_CHEST (CanUse RG_FAIRY_BOW))) (CanUse RG_SILVER_GAUNTLETS))))) -RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_SILVER_GAUNTLETS) (CanUse RG_ZELDAS_LULLABY))) -RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_SILVER_GAUNTLETS) (and (CanUse RG_ZELDAS_LULLABY) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) RT_SPIRIT_LOBBY_JUMP))))) -RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM (or (and HasExplosives (and (CanUse RG_BOOMERANG) (CanUse RG_HOOKSHOT))) (or (and (CanUse RG_BOOMERANG) (and (SmallKeys RR_SPIRIT_TEMPLE 5) HasExplosives)) (and (CanUse RG_HOOKSHOT) (and (CanUse RG_SILVER_GAUNTLETS) (SmallKeys RR_SPIRIT_TEMPLE 2))))) -RC_SPIRIT_TEMPLE_GS_LOBBY (or (and (or HasExplosives (SmallKeys RR_SPIRIT_TEMPLE 2)) (and RT_SPIRIT_LOBBY_GS (and (CanUse RG_BOOMERANG) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) RT_SPIRIT_LOBBY_JUMP))))) (or (and RT_SPIRIT_LOBBY_GS (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_BOOMERANG)))) (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_SILVER_GAUNTLETS) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) RT_SPIRIT_LOBBY_JUMP)))))) -RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) -RR_SPIRIT_TEMPLE_OUTDOOR_HANDS (or CanJumpslashExceptHammer HasExplosives) -RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR (and (SmallKeys RR_SPIRIT_TEMPLE 4) (CanUse RG_SILVER_GAUNTLETS)) -RR_SPIRIT_TEMPLE_CHILD_CLIMB true -RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD (and RT_SPIRIT_PLATFORM_HOOKSHOT (CanUse RG_HOOKSHOT)) - -def RR_SPIRIT_TEMPLE_OUTDOOR_HANDS SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Outdoor Hands -RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST (or (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_LONGSHOT) HasExplosives)) (SmallKeys RR_SPIRIT_TEMPLE 5)) -RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST (and (SmallKeys RR_SPIRIT_TEMPLE 4) (and (CanUse RG_SILVER_GAUNTLETS) HasExplosives)) -RR_DESERT_COLOSSUS (or (and IsChild (SmallKeys RR_SPIRIT_TEMPLE 5)) (and (CanUse RG_SILVER_GAUNTLETS) (or (and (SmallKeys RR_SPIRIT_TEMPLE 3) HasExplosives) (SmallKeys RR_SPIRIT_TEMPLE 5)))) - -def RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Beyond Central Locked Door -RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST (and (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) HasExplosives) -RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST (and (or RT_LENS_SPIRIT (CanUse RG_LENS_OF_TRUTH)) HasExplosives) -RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST (and (or RT_LENS_SPIRIT (CanUse RG_LENS_OF_TRUTH)) HasExplosives) -RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY (and HasExplosives (CanUse RG_SUNS_SONG)) -RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR (and (SmallKeys RR_SPIRIT_TEMPLE 5) (or RT_SPIRIT_WALL (or (CanUse RG_LONGSHOT) (or (CanUse RG_BOMBCHU_5) (and (or (CanUse RG_BOMB_BAG) (or (CanUse RG_NUTS) (CanUse RG_DINS_FIRE))) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (CanUse RG_MEGATON_HAMMER)))))))) - -def RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Beyond Final Locked Door -RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST (and (CanUse RG_ZELDAS_LULLABY) (or (and TakeDamage RT_FLAMING_CHESTS) (and (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT)))) -RC_SPIRIT_TEMPLE_TOPMOST_CHEST (or (and (CanUse RG_MIRROR_SHIELD) CanAttack) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) -RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART (CanUse RG_HOOKSHOT) -RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART (CanUse RG_HOOKSHOT) -RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD (and (CanUse RG_MIRROR_SHIELD) (and HasExplosives (CanUse RG_HOOKSHOT))) - -def RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Inside Statue Head -RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER true -RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY true - -def RR_SPIRIT_TEMPLE_MQ_LOBBY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Lobby -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST true -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST (and (Here BlastOrSmash) CanHitEyeTargets) -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST (CanHitSwitch ED_BOOMERANG) -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST Spirit1FSilverRupees -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4 CanBreakPots -RR_SPIRIT_TEMPLE_ENTRYWAY true -RR_SPIRIT_TEMPLE_MQ_1F_WEST IsChild -RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH (and (CanUse RG_LONGSHOT) (CanUse RG_BOMBCHU_5)) - -def RR_SPIRIT_TEMPLE_MQ_1F_WEST SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ 1F West -//not technically a rusted switch, but a boulder through a wall, but is part of the same trick on N64 -MQSpiritCrawlBoulder (or (CanUse RG_BOMBCHU_5) (and RT_RUSTED_SWITCHES (CanUse RG_MEGATON_HAMMER))) -RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST MQSpiritTimeTravelChest -RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT CanBreakPots -RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART CanHitEyeTargets -RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART CanHitEyeTargets -RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH (Here (CanKillEnemy RE_TORCH_SLUG)) -RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH (Here (CanKillEnemy RE_TORCH_SLUG)) -RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH (and IsChild MQSpiritCrawlBoulder) - -def RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Gibdo Room North -RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2 CanBreakPots - -def RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ 1F Gibdo Room South -RR_SPIRIT_TEMPLE_MQ_1F_WEST true -RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH (and (CanUse RG_BOMBCHU_5) CanHitEyeTargets) -RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM (and (CanUse RG_BOMBCHU_5) (and CanHitEyeTargets (CanKillEnemy RE_GIBDO))) - -def RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Turntable Room -//For non-fairy pot items, you can also get them with rang without killing the stalfos -FairyPot (Here (CanKillEnemy RE_STALFOS)) -//implies logic->CanBreakPots() -RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) -RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) -RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) -RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) -RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH true -RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH (Here (CanKillEnemy RE_STALFOS)) - -def RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Map Room North -MQSpiritMapRoomEnemies (and (CanKillEnemy RE_ANUBIS) (CanKillEnemy RE_KEESE)) -RC_SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST MQSpiritMapRoomEnemies -//Stalfos room blocks you in with fire until you kill the stalfos, which won't spawn from behind the fire -RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH true - -def RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Map Room South -MQSpiritMapRoomEnemies (and (CanKillEnemy RE_ANUBIS) (CanKillEnemy RE_KEESE ED_BOOMERANG)) -RC_SPIRIT_TEMPLE_MQ_MAP_CHEST true -//The bridge is a temp flag, so not a way to cross south to north in logic -RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH (CanUse RG_HOOKSHOT) -RR_SPIRIT_TEMPLE_MQ_1F_WEST true - -def RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ West 1F Rusted Switch -MQSpiritTimeTravelChest (CanUse RG_MEGATON_HAMMER) -MQSpiritCrawlBoulder (or (CanUse RG_BOMBCHU_5) (and RT_RUSTED_SWITCHES (CanUse RG_MEGATON_HAMMER))) -RR_SPIRIT_TEMPLE_MQ_1F_WEST (and IsChild MQSpiritCrawlBoulder) -//This tracks possible child access, if adult has not entered STATUE_ROOM. Certain Child Access is checked for separately as 7 Keys -RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE (SmallKeys RR_SPIRIT_TEMPLE 1) - -def RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Under Like Like -RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT (MQSpiritSharedBrokenWallRoom RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE CanBreakPots) -//This covers adult access only, as child arrives here from the other side of this door -RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH (SmallKeys RR_SPIRIT_TEMPLE 7) -RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM CanHitSwitch - -def RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Broken Wall Room -//Implies CanKillEnemy(RE_LIKE_LIKE) -RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST (MQSpiritSharedBrokenWallRoom RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM (CanKillEnemy RE_BEAMOS)) -//Sunlights only temp spawn this chest, which is unintuitive/a bug. -//chest is only reachable as adult glitchlessly, so we can skip the shared in favour of IsAdult as adult access is always Certain -RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST (and IsAdult (and (or HasExplosives (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) (CanUse RG_HOOKSHOT))) -RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE CanHitSwitch -//This exit only governs child possible access, adult access starts on the other side so never checks this -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (SmallKeys RR_SPIRIT_TEMPLE 2) - -def RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Statue Room -RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanHitEyeTargets) -RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (or (and (or IsAdult CanJumpslash) (CanUse RG_BOOMERANG)) (and (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_SONG_OF_TIME) (and IsAdult RT_SPIRIT_LOBBY_JUMP))) CanBreakPots))) -RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_SONG_OF_TIME) (and (and IsAdult RT_SPIRIT_LOBBY_JUMP) CanBreakPots)))) -RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakPots) -RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakPots) -RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakPots) -RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakCrates) -RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakCrates) -RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakSmallCrates) -//we check possible adult access directly in MQSpiritSharedBrokenWallRoom, so this exit only covers Certain Access -RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) -//We can use Here instead of Shared here because adult will never need to rely on child access to reach this room, and adult access is Certain -RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH (Here (or HasFireSource (and RT_SPIRIT_MQ_FROZEN_EYE (and (CanUse RG_FAIRY_BOW) (CanUse RG_SONG_OF_TIME))))) -RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM (or IsAdult (or RT_SPIRIT_MQ_SUN_BLOCK_SOT (CanUse RG_SONG_OF_TIME))) -//explicit adult check here is a precaution against possible child logic leaking, child with a hookshot can do this -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST (and IsAdult (CanUse RG_HOOKSHOT)) - -def RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Sun Block Room -//We don't need Shared here because if we are checking as child, universe 2 adult access needs nothing so it always passes, and if we are checking as adult, it is Certain Access -RC_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST true -RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM (or (CanUse RG_HOOKSHOT) (and RT_SPIRIT_MQ_SUN_BLOCK_GS (CanUse RG_BOOMERANG)))) -RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM CanBreakPots) -RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM CanBreakPots) -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM true -//This door causes the universes to merge as it requires 7 keys for both ages -RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE (SmallKeys RR_SPIRIT_TEMPLE 7) - -def RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ East Iron Knuckle -RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) -RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND (CanKillEnemy RE_IRON_KNUCKLE) - -def RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Silver Gauntlets Hand -RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST true -//If it is ever relevent for 1 age to spawn the mirror shield chest for the other can longshot across, it needs an eventAccess -RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE true -RR_DESERT_COLOSSUS true - -def RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Block Room South -RR_SPIRIT_TEMPLE_MQ_LOBBY true -//The block here is unusual in that it is a permanent flag, but reset anyway as child. This is because there's a check that would be blocked off by pushing them otherwise -//It may be worth considering making this always temp in future so adult doesn't have the same issue -RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH (if IsChild (CanUse RG_SILVER_GAUNTLETS) (Here (CanUse RG_SILVER_GAUNTLETS))) - -def RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Block Room North -//Does not need to be shared as it's hard child locked, because adult pushing the block is a permanent flag that blocks the eye target and cannot be undone -RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST (and IsChild (and (SmallKeys RR_SPIRIT_TEMPLE 7) CanHitEyeTargets)) -//if going to RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH from here is ever relevant, there needs to be an event to handle the block -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM true - -def RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Statue Room East -RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST (and (CanUse RG_HOOKSHOT) (and (CanUse RG_ZELDAS_LULLABY) (or CanJumpslash (CanUse RG_HOVER_BOOTS)))) -RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST (and (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM true -//!QUANTUM LOGIC! -//We only need 4 keys, access to Shield hand and longshot to reach Gauntlets hand, as if we waste the 5th key we have given ourselves Gauntlets hand access through child climb -//This exit handles that possibility as cleanly as possible without quantum logic, but will not survive glitch logic -//logic->CanKillEnemy(RE_FLOORMASTER) is implied -RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND (and (SmallKeys RR_SPIRIT_TEMPLE 4) (and (CanAvoidEnemy RE_BEAMOS true 4) (and (CanUse RG_SONG_OF_TIME) (and CanJumpslash (and (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) (and (CanKillEnemy RE_IRON_KNUCKLE) (CanUse RG_LONGSHOT))))))) -RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM (and (SmallKeys RR_SPIRIT_TEMPLE 5) (CanUse RG_HOOKSHOT)) -RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F (or (CanUse RG_FIRE_ARROWS) (and RT_SPIRIT_MQ_LOWER_ADULT (CanUse RG_DINS_FIRE))) - -def RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Three Suns Room 2F -//implies logic->CanKillEnemy(RE_WALLMASTER). If we have lights, we can kill stalfos and wallmasters with bow -MQSpirit3SunsEnemies (or (and (CanUse RG_MIRROR_SHIELD) (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST true -RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F MQSpirit3SunsEnemies - -def RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Three Suns Room 1F -RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F MQSpirit3SunsEnemies -RR_SPIRIT_TEMPLE_MQ_1F_EAST true - -def RR_SPIRIT_TEMPLE_MQ_1F_EAST SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ 1F East -//Assumes RR_SPIRIT_TEMPLE_MQ_LOBBY access -Spirit1FSilverRupees (CanUse RG_MEGATON_HAMMER) -RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2 CanBreakPots -RR_SPIRIT_TEMPLE_MQ_LOBBY (CanUse RG_MEGATON_HAMMER) -RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F true -RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM true -RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) - -def RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Leever Room -RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST (and (CanKillEnemy RE_PURPLE_LEEVER) (CanUse RG_HOOKSHOT)) -RC_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RR_SPIRIT_TEMPLE_MQ_1F_EAST (CanUse RG_ZELDAS_LULLABY) - -def RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Symphony Room -RR_SPIRIT_TEMPLE_MQ_1F_EAST (SmallKeys RR_SPIRIT_TEMPLE 7) -//Implies CanPassEnemy(RE_MOBLIN_CHIEF) -RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM (and (CanUse RG_MEGATON_HAMMER) (and (CanUse RG_SONG_OF_TIME) (and (CanUse RG_EPONAS_SONG) (and (CanUse RG_SUNS_SONG) (and (CanUse RG_SONG_OF_STORMS) (CanUse RG_ZELDAS_LULLABY)))))) - -def RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ After Symphony Room -RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST (CanPassEnemy RE_BIG_SKULLTULA) -RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM true - -def RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Four Beamos Room -RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST (CanKillEnemy RE_BEAMOS) -RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE (and (CanKillEnemy RE_BEAMOS) (and (CanUse RG_SONG_OF_TIME) CanBreakSmallCrates)) -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST (and (CanAvoidEnemy RE_BEAMOS true 4) (and (CanUse RG_SONG_OF_TIME) (and (SmallKeys RR_SPIRIT_TEMPLE 5) (CanUse RG_HOOKSHOT)))) -RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM (and (CanAvoidEnemy RE_BEAMOS true 4) (CanUse RG_SONG_OF_TIME)) -RR_SPIRIT_TEMPLE_MQ_BIG_WALL (SmallKeys RR_SPIRIT_TEMPLE 6) - -def RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ SoT Sun Room -RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST true -RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM true -RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND CanJumpslash -RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM (Here (and (or IsAdult (CanUse RG_SONG_OF_TIME)) (CanUse RG_MIRROR_SHIELD))) - -def RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ East Stairs to Hand -RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM true -RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE (and (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) (Here (CanKillEnemy RE_FLOORMASTER))) - -def RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ East Iron Knuckle -RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND true -RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND (Here (CanKillEnemy RE_IRON_KNUCKLE)) - -def RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Mirror Shield Hand -RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST true -RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND (CanUse RG_LONGSHOT) -RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE true -RR_DESERT_COLOSSUS true - -def RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ 3F Gibdo Room -RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST true -RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM true - -def RR_SPIRIT_TEMPLE_MQ_BIG_WALL SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Big Wall -RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2 CanBreakPots -RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM true -//technically we only need to avoid them, but the sheer height and the moving walls makes getting to the top after only stunning them very difficult/impossible -//The silver rupees are irrelevant without silver shuffle -RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL (CanKillEnemy RE_KEESE) - -def RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ 4F Central -RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2 CanBreakPots -RR_SPIRIT_TEMPLE_MQ_BIG_WALL true -RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) -RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM (CanUse RG_ZELDAS_LULLABY) - -def RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Nine Chairs Room -//These skulls rely on the iron knuckle existing without a trick to shoot through the chairs -RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH (CanGetEnemyDrop RE_GOLD_SKULLTULA) -RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL true - -def RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Big Mirror Room -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4 CanBreakPots -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1 CanBreakCrates -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4 CanBreakCrates -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2 CanBreakCrates -RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3 CanBreakCrates -RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL true -RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE (Here (CanUse RG_MEGATON_HAMMER)) - -def RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Big Mirror Cave -RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) -//If it's ever relevant to longshot into head from lobby, this needs to be an event access -RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD (and (Here (CanUse RG_MIRROR_SHIELD)) (CanUse RG_HOOKSHOT)) -RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (Here (CanUse RG_MIRROR_SHIELD)) - -def RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple MQ Inside Statue Head -RR_SPIRIT_TEMPLE_MQ_LOBBY true -RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY true - -def RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE -Spirit Temple Boss Entryway -RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD (and (IsDungeonVanilla SPIRIT_TEMPLE) false) -RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD (and (IsDungeonMQ SPIRIT_TEMPLE) false) -RR_SPIRIT_TEMPLE_BOSS_ROOM (HasItem RG_SPIRIT_TEMPLE_BOSS_KEY) - -def RR_SPIRIT_TEMPLE_BOSS_ROOM SCENE_SPIRIT_TEMPLE_BOSS false -Spirit Temple Boss Room -SpiritTempleClear (CanKillEnemy RE_TWINROVA) -RC_SPIRIT_TEMPLE_TWINROVA_HEART SpiritTempleClear -RC_TWINROVA SpiritTempleClear -RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY false -RR_DESERT_COLOSSUS @deprioritize SpiritTempleClear - -def RR_SHADOW_TEMPLE_BEGINNING SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple Beginning -NutPot true -RC_SHADOW_TEMPLE_MAP_CHEST CanJumpslashExceptHammer -RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST (CanKillEnemy RE_DEAD_HAND) -RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2 CanBreakPots -RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3 CanBreakPots -RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4 CanBreakPots -RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5 CanBreakPots -RC_SHADOW_TEMPLE_MAP_CHEST_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_MAP_CHEST_POT_2 CanBreakPots -RR_SHADOW_TEMPLE_ENTRYWAY true -RR_SHADOW_TEMPLE_FIRST_BEAMOS (CanUse RG_HOVER_BOOTS) - -def RR_SHADOW_TEMPLE_FIRST_BEAMOS SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple First Beamos -RC_SHADOW_TEMPLE_COMPASS_CHEST CanJumpslashExceptHammer -RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) -RC_SHADOW_TEMPLE_GS_NEAR_SHIP false -RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) -RR_SHADOW_TEMPLE_HUGE_PIT (and HasExplosives (and IsAdult (SmallKeys RR_SHADOW_TEMPLE 1 2))) -RR_SHADOW_TEMPLE_BEYOND_BOAT false - -def RR_SHADOW_TEMPLE_HUGE_PIT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple Huge Pit -RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST CanJumpslashExceptHammer -RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST CanJumpslashExceptHammer -RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST true -RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST (or (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS)) (HasItem RG_GORONS_BRACELET)) -RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST (or (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS)) (HasItem RG_GORONS_BRACELET)) -RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST (and (SmallKeys RR_SHADOW_TEMPLE 2 3) (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH))) -RC_SHADOW_TEMPLE_FREESTANDING_KEY (and (SmallKeys RR_SHADOW_TEMPLE 2 3) (and (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH)) (and (CanUse RG_HOOKSHOT) (or (CanUse RG_BOMB_BAG) (or (HasItem RG_GORONS_BRACELET) (and RT_SHADOW_FREESTANDING_KEY (CanUse RG_BOMBCHU_5))))))) -RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM CanJumpslashExceptHammer -RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM (or (CanUse RG_HOOKSHOT) (and RT_SHADOW_UMBRELLA_GS (CanUse RG_HOVER_BOOTS))) -RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT (and (SmallKeys RR_SHADOW_TEMPLE 2 3) (and (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH)) (CanUse RG_HOOKSHOT))) -RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2 CanBreakPots -RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3 (or (and CanBreakPots (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS))) (HasItem RG_GORONS_BRACELET)) -RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4 (or (and CanBreakPots (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS))) (HasItem RG_GORONS_BRACELET)) -//We cannot repeat the MQ invisible blades trick for these hearts as the like-like does not respawn if the room is cleared -RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (CanUse RG_BOOMERANG)) -RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (CanUse RG_BOOMERANG)) -RC_SHADOW_TEMPLE_PIT_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) -RR_SHADOW_TEMPLE_WIND_TUNNEL (and (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH)) (and (CanUse RG_HOOKSHOT) (SmallKeys RR_SHADOW_TEMPLE 3 4))) - -def RR_SHADOW_TEMPLE_WIND_TUNNEL SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple Wind Tunnel -RC_SHADOW_TEMPLE_WIND_HINT_CHEST true -RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST (CanKillEnemy RE_GIBDO ED_CLOSE true 2) -RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST HasExplosives -RC_SHADOW_TEMPLE_GS_NEAR_SHIP (and (CanUse RG_LONGSHOT) (SmallKeys RR_SHADOW_TEMPLE 4 5)) -RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY (CanUse RG_SUNS_SONG) -RC_SHADOW_TEMPLE_AFTER_WIND_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_AFTER_WIND_POT_2 CanBreakPots -RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART (and (CanUse RG_DISTANT_SCARECROW) (SmallKeys RR_SHADOW_TEMPLE 4 5)) -RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART (and (CanUse RG_DISTANT_SCARECROW) (SmallKeys RR_SHADOW_TEMPLE 4 5)) -RR_SHADOW_TEMPLE_BEYOND_BOAT (and CanJumpslashExceptHammer (and (CanUse RG_ZELDAS_LULLABY) (SmallKeys RR_SHADOW_TEMPLE 4 5))) - -def RR_SHADOW_TEMPLE_BEYOND_BOAT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple Beyond Boat -RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST (CanUse RG_DINS_FIRE) -RC_SHADOW_TEMPLE_BOSS_KEY_CHEST (CanUse RG_DINS_FIRE) -RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST (CanKillEnemy RE_FLOORMASTER) -//RANDOTODO check if child can reach the token -RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT (and IsAdult CanAttack) -RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2 CanBreakPots -RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3 (and CanBreakPots (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5))))) -RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4 (and CanBreakPots (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5))))) -RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_FLOORMASTER_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_FLOORMASTER_POT_2 CanBreakPots -RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART (CanUse RG_DISTANT_SCARECROW) -RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART (CanUse RG_DISTANT_SCARECROW) -RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART (or (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5)))) (CanUse RG_SONG_OF_TIME)) (and (CanUse RG_DISTANT_SCARECROW) (CanUse RG_HOVER_BOOTS))) -RR_SHADOW_TEMPLE_BOSS_ENTRYWAY (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5)))) (and (SmallKeys RR_SHADOW_TEMPLE 5) (CanUse RG_HOVER_BOOTS))) - -def RR_SHADOW_TEMPLE_MQ_ENTRYWAY SCENE_ID_MAX false -Invalid Region - -//RANDOTODO doublecheck CanAttack when rewriting, as I assumed it only checked adult due to the entrance -def RR_SHADOW_TEMPLE_MQ_BEGINNING SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Beginning -RR_SHADOW_TEMPLE_ENTRYWAY true -RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) - -def RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Spinner Room -RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1 CanBreakSmallCrates -RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2 CanBreakSmallCrates -RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3 CanBreakSmallCrates -RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4 CanBreakSmallCrates -RR_SHADOW_TEMPLE_ENTRYWAY true -RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS (and (Here (or (CanUse RG_HOVER_BOOTS) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)))) (or (CanUse RG_HOVER_BOOTS) (or (Here (CanUse RG_FIRE_ARROWS)) (and RT_SHADOW_MQ_GAP (and (CanUse RG_LONGSHOT) CanJumpslashExceptHammer))))) -RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA (and (Here HasExplosives) (and (SmallKeys RR_SHADOW_TEMPLE 6) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)))) - -//Assumes we're in the "main" area and needed lens to enter. logic will need changes if a void warp puts us somewhere weird -def RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Dead Hand Region -RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST (CanKillEnemy RE_REDEAD) -//There's a shared flag tied to some glass here. eye target here and killing an enemy group later in the dungeon toggles. I'm building the logic as "intended", assuming the switch needs flipping -RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST (and (CanKillEnemy RE_DEAD_HAND) (and (or IsChild (CanUse RG_SONG_OF_TIME)) CanHitEyeTargets)) -RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2 CanBreakPots -RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2 CanBreakPots -RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM true - -//also includes the B2 gibdo room -def RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ First Beamos -//Doing this sets the shared flag for the glass in RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, but doesn't seem to affect the chest -RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST (and (CanKillEnemy RE_GIBDO) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) -RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) -RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT (and HasExplosives (SmallKeys RR_SHADOW_TEMPLE 2)) -RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) - -def RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ B2 Spinning Blade Room -RC_SHADOW_TEMPLE_MQ_MAP_CHEST (and (CanPassEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) -RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS (Here (and (CanKillEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS))))) -RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH (CanPassEnemy RE_BIG_SKULLTULA) - -def RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Shortcut Path -RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) -RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM (CanPassEnemy RE_BIG_SKULLTULA) -RR_SHADOW_TEMPLE_MQ_DOCK ShadowShortcutBlock -//WARNING if there's any way past here to ship without already reaching the other side the key logic in this dungeon becomes Quantum - -//Room exists for if it's ever possible to go backwards or void warp into the middle of shadow -def RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ B2 to B3 Corridor -RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS (SmallKeys RR_SHADOW_TEMPLE 2) -RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT true -//bunnyhovers + lens lets you go from the very top of upper pit to the stationary invisible platform below quite easily - -def RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Upper Huge Pit -RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) -RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT (or (and HasFireSource (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) RT_SHADOW_MQ_HUGE_PIT) -RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) - -def RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Invisible Blades Room - //RT_SHADOW_MQ_INVISIBLE_BLADES does not work with NL as like-likes will not swallow you, likewise like-likes will not spit you with a fairy revive -//you take half a heart base from a spit out, double check EffectiveHealth when damage logic gets reworked -//Child is too small to get hit by the blades doesn't need the trick or lens for dodging them -RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST (and (or (CanUse RG_SONG_OF_TIME) (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1))) (or RT_LENS_SHADOW_MQ_INVISIBLE_BLADES (or IsChild (or (CanUse RG_NAYRUS_LOVE) (CanUse RG_LENS_OF_TRUTH))))) -RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST (and (or (CanUse RG_SONG_OF_TIME) (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1))) (or (and RT_LENS_SHADOW_MQ (or RT_LENS_SHADOW_MQ_INVISIBLE_BLADES (or IsChild (CanUse RG_NAYRUS_LOVE)))) (CanUse RG_LENS_OF_TRUTH))) -RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (or (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1)) (CanUse RG_BOOMERANG))) -RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (or (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1)) (CanUse RG_BOOMERANG))) -RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT true - -def RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Lower Huge Pit -RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST (CanUse RG_LONGSHOT) -RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM (Here (or CanJumpslash HasExplosives)) -RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM (and (CanUse RG_HOVER_BOOTS) (and (or RT_LENS_SHADOW_MQ_PLATFORM (CanUse RG_LENS_OF_TRUTH)) (SmallKeys RR_SHADOW_TEMPLE 3))) - -def RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Stone Umbrella Room -RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST true -//Assuming the known setup for RT_SHADOW_UMBRELLA and RT_SHADOW_UMBRELLA_GS, probably possible without sword + shield. -//Handling the trick here instead of upper as using the block to climb is not a valid method for getting this skull without other tricks to use the block before it is intended -RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM (or (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and RT_SHADOW_UMBRELLA_GS (and RT_SHADOW_UMBRELLA (and (CanUse RG_HOVER_BOOTS) (and CanStandingShield (CanUse RG_MASTER_SWORD)))))) -RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT CanBreakPots -RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT CanBreakPots -RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT (CanUse RG_BOOMERANG) -RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT (Here (or RT_VISIBLE_COLLISION CanHitSwitch)) -//Assuming the known setup for RT_SHADOW_UMBRELLA, probably possible without sword + shield -RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA (and IsAdult (or (HasItem RG_GORONS_BRACELET) (and RT_SHADOW_UMBRELLA (and (CanUse RG_HOVER_BOOTS) (and CanStandingShield (CanUse RG_MASTER_SWORD)))))) - -def RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Upper Stone Umbrella -RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST true -RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST true -RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT CanBreakPots -RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT CanBreakPots -RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM true - -//while the spikes here are annoying, they don't really stop you doing anything, so I'll assume either lens trick, lens to see them, or taking damage from them. Not hovers though as a new player won't see the threat without lens to react properly -def RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Floor Spikes Room -//lens or trick is always required for hookshot targets. We handle it here to not complicate the RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_UPPER_DOOR logic -MQShadowFloorSpikeRupees (and (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) - //Upper door side high rupee needs (hookshot and redead kill(as either age) for chest and adult) or longshot. hovers can cross from the left side with a backflip but that would be a trick - //East midair rupee needs (hookshot and(hover boots or jumpslash from the upper door platform)) or longshot. - //Combined these are longshot or (IsAdult && hookshot && (CanJumpslash || (Hover Boots && Here(CanKillRedeads)))) - (and (or (CanUse RG_LONGSHOT) (and IsAdult (and (CanUse RG_HOOKSHOT) (or CanJumpslash (and (CanUse RG_HOVER_BOOTS) (Here (CanKillEnemy RE_REDEAD))))))) - //1 rupee is in spikes, needs hovers or damage - (or TakeDamage (CanUse RG_HOVER_BOOTS)))) -RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST (and (CanKillEnemy RE_REDEAD) (or RT_LENS_SHADOW_MQ (or TakeDamage (CanUse RG_LENS_OF_TRUTH)))) -RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM MQShadowFloorSpikeRupees -//We need to assume we can get here with or without the glass platforms -RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL (and (SmallKeys RR_SHADOW_TEMPLE 4) (and (or (CanUse RG_LONGSHOT) (and IsAdult (and (CanUse RG_HOOKSHOT) (or MQShadowFloorSpikeRupees (Here (CanKillEnemy RE_REDEAD)))))) (or CanJumpslash (CanUse RG_HOVER_BOOTS)))) - -def RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Stalfos Room -RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) -RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) - -def RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Wind Tunnel -RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM (and (SmallKeys RR_SHADOW_TEMPLE 4) (and (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOOKSHOT))) -RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM (and (CanPassEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) -RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM (and (CanPassEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) - -def RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Wind Hint Room -RC_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST (and (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) (CanPassEnemy RE_REDEAD)) -RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL true - -def RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ B4 Gibdo Room -NutPot true -RC_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST (CanKillEnemy RE_GIBDO) -RC_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST (and HasExplosives (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) -RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND HasExplosives -RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2 CanBreakPots -//child can make it using the wind strat -RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL (or RT_SHADOW_MQ_WINDY_WALKWAY (CanUse RG_HOVER_BOOTS)) -RR_SHADOW_TEMPLE_MQ_DOCK (SmallKeys RR_SHADOW_TEMPLE 5) - -def RR_SHADOW_TEMPLE_MQ_DOCK SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Dock -ShadowShortcutBlock (HasItem RG_GORONS_BRACELET) -RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART (CanUse RG_DISTANT_SCARECROW) -RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART (CanUse RG_DISTANT_SCARECROW) -RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH ShadowShortcutBlock -RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM (SmallKeys RR_SHADOW_TEMPLE 5) -//funnily enough, the wheel jump seems to be in logic as there's no strength requirement in N64 -RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT (and (or IsAdult (CanUse RG_HOOKSHOT)) (CanUse RG_ZELDAS_LULLABY)) - -def RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Beyond Boat -//It's a trick on N64 to kill this and drop down to collect this with normal weapons, as doing so without the statue being dropped voids you to before the boat -//hilariously, you can also hit this with a pot before you bring down the statue, but there's no great way to reset it without crossing. the statues collision is very inconvenient afterwards -RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT CanBreakPots -RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT CanBreakPots -RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM (Here (or (CanUse RG_FAIRY_BOW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5)))) - -def RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Across Chasm -RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT CanBreakPots -RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT CanBreakPots -RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART (and (CanUse RG_SONG_OF_TIME) (and CanHitEyeTargets (CanUse RG_LONGSHOT))) -RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART (and (CanUse RG_SONG_OF_TIME) (and CanHitEyeTargets (CanUse RG_LONGSHOT))) -//There's invisible floor collision that makes aiming for the heart with rang harder than it should be, so it's a trick. -RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART IsAdult -RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT (and (Here CanDetonateUprightBombFlower) IsAdult) -//assumes RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT by previous access. If backwards shadow ever exists remember that child cannot jump onto the statue from this side and make an event for the switch -//Lens isn't needed to reach it but is needed to navigate the next room -RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE (Here (and CanHitEyeTargets (and (CanUse RG_SONG_OF_TIME) (CanUse RG_LONGSHOT)))) -RR_SHADOW_TEMPLE_MQ_BOSS_DOOR (and (CanUse RG_HOVER_BOOTS) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) - -def RR_SHADOW_TEMPLE_MQ_BOSS_DOOR SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Boss Door -//you can drop onto this and the respawn is reasonable -RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS (and (or (CanKillEnemy RE_GOLD_SKULLTULA ED_BOMB_THROW) (CanUse RG_MEGATON_HAMMER)) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) -RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM (and (CanUse RG_HOVER_BOOTS) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) -RR_SHADOW_TEMPLE_BOSS_ENTRYWAY true - -//Assumes lens is checked on entry -def RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Invisible Maze -//don't use CanDetonateUprightBombFlower as blue fire logic would need to account for player having multiple bottles & taking damage multiple times -RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST (and (or (CanUse RG_LENS_OF_TRUTH) RT_LENS_SHADOW_MQ_DEADHAND) (and (CanKillEnemy RE_DEAD_HAND) (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET)))) -RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY true -RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1 CanBreakPots -RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2 CanBreakPots -RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT true -RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM (SmallKeys RR_SHADOW_TEMPLE 6) - -def RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple MQ Spike Walls Room -RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST (CanUse RG_DINS_FIRE) -RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST (CanUse RG_DINS_FIRE) -RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT CanBreakPots -RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE (and (SmallKeys RR_SHADOW_TEMPLE 6) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) - -def RR_SHADOW_TEMPLE_BOSS_ENTRYWAY SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE -Shadow Temple Boss Entryway -RR_SHADOW_TEMPLE_BEYOND_BOAT (and (IsDungeonVanilla SHADOW_TEMPLE) false) -RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT (and (IsDungeonMQ SHADOW_TEMPLE) false) -RR_SHADOW_TEMPLE_BOSS_ROOM (HasItem RG_SHADOW_TEMPLE_BOSS_KEY) - -def RR_SHADOW_TEMPLE_BOSS_ROOM SCENE_SHADOW_TEMPLE_BOSS false -Shadow Temple Boss Room -ShadowTempleClear (CanKillEnemy RE_BONGO_BONGO) -RC_SHADOW_TEMPLE_BONGO_BONGO_HEART ShadowTempleClear -RC_BONGO_BONGO ShadowTempleClear -RR_SHADOW_TEMPLE_BOSS_ENTRYWAY false -RR_GRAVEYARD_WARP_PAD_REGION ShadowTempleClear - -//Technically involves an fake wall, but passing it lensless is intended in vanilla and it is well telegraphed -def RR_BOTTOM_OF_THE_WELL_PERIMETER SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Perimeter -StickPot true -NutPot true -LoweredWaterInsideBotw (CanUse RG_ZELDAS_LULLABY) -RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST HasExplosives -RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST (or LoweredWaterInsideBotw CanOpenUnderwaterChest) -RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST (or LoweredWaterInsideBotw CanOpenUnderwaterChest) -RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1 CanBreakPots -RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2 CanBreakPots -RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT (or (and CanBreakPots LoweredWaterInsideBotw) (CanUse RG_BOOMERANG)) -RR_BOTTOM_OF_THE_WELL_ENTRYWAY (and IsChild (CanPassEnemy RE_BIG_SKULLTULA)) -RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) -RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) -RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM (and IsChild (SmallKeys RR_BOTTOM_OF_THE_WELL 3)) -RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) -RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM (and LoweredWaterInsideBotw IsChild) -//Falling down into basement requires nothing, but falling down somewhere specific requires lens or lens trick -//kinda questionable given several drops are blocked by rocks, but that's how it was handled before and on N64 -RR_BOTTOM_OF_THE_WELL_BASEMENT true - -//This region combines the Middle with the perimeter's hidden areas. If a warp puts link into the middle without crossing the perimeter or using lens, it will need it's own region -def RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Behind Fake Walls -RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST true -RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST true -RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST true -//You can just barely pass the spider on the right side without damage or items, but it's probably tight enough to count as as a trick -RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST (or (CanPassEnemy RE_BIG_SKULLTULA) TakeDamage) -//Not technically behind a wall, but still logically needs lens due to pits -RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST HasExplosives -RR_BOTTOM_OF_THE_WELL_PERIMETER (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) -RR_BOTTOM_OF_THE_WELL_INNER_ROOMS (SmallKeys RR_BOTTOM_OF_THE_WELL 3) -RR_BOTTOM_OF_THE_WELL_BASEMENT true -RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) - -//This area can be reached without lens in logic from basement, but that could require silver rupees if they are shuffled. -def RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Southwest Room -RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1 CanBreakPots -RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2 CanBreakPots -RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3 CanBreakPots -RR_BOTTOM_OF_THE_WELL_PERIMETER (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) - -//Passing through this area needs lens, but entering doesn't, so that the fire keese can be killed without crossing the pits if enemy drops are ever shuffled -def RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Keese-Beamos Room -RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) -RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1 (and CanBreakPots (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH))) -RR_BOTTOM_OF_THE_WELL_PERIMETER (and IsChild (and (SmallKeys RR_BOTTOM_OF_THE_WELL 3) (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)))) -RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) -//not sure if this lens check is needed, these holes are a bit too easy to find, but it matches existing logic -RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) - -def RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Like-Like Cage -RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST true -RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM true - -//If the player can voidwarp into one of these rooms they will need splitting up, and Fake walls will need specifying into middle and the rest moved to perimeter -def RR_BOTTOM_OF_THE_WELL_INNER_ROOMS SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Inner Rooms -DekuBabaSticks CanGetDekuBabaSticks -DekuBabaNuts CanGetDekuBabaNuts -RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) -RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS (SmallKeys RR_BOTTOM_OF_THE_WELL 3) - -def RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Coffin Room -RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) -RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART true -RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) -RR_BOTTOM_OF_THE_WELL_PERIMETER (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) - -def RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Dead Hand Room -RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST (CanKillEnemy RE_DEAD_HAND) -RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) -//This assumes we spawned in dead hand's room, if whatever trick made this relevant instead puts us in the previous room, remove the kill Dead Hand check. -RR_BOTTOM_OF_THE_WELL_PERIMETER (and IsChild (CanKillEnemy RE_DEAD_HAND)) - -def RR_BOTTOM_OF_THE_WELL_BASEMENT SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Basement -RC_BOTTOM_OF_THE_WELL_MAP_CHEST BlastOrSmash -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12 CanBreakPots -RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY (CanUse RG_SUNS_SONG) -RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1 CanCutShrubs -RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2 CanCutShrubs -RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3 CanCutShrubs -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8 (and CanCutShrubs BlastOrSmash) -RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9 (and CanCutShrubs BlastOrSmash) -RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM (and IsChild (CanPassEnemy RE_BIG_SKULLTULA)) -//It's possible to abuse boulder's limited range of collision detection to detonate the flowers through the boulder with bow, but this is a glitch -//the exact range is just past the furthest away plank in the green goo section -RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS (Here (or BlastOrSmash (or (CanUse RG_DINS_FIRE) (and (CanUse RG_STICKS) RT_BOTW_BASEMENT)))) - -def RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Basement Useful Bomb Flowers -//Assumes RR_BOTTOM_OF_THE_WELL_BASEMENT access -RC_BOTTOM_OF_THE_WELL_MAP_CHEST (HasItem RG_GORONS_BRACELET) -RR_BOTTOM_OF_THE_WELL_BASEMENT CanDetonateUprightBombFlower - -def RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well Basement Platform -RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE true -RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE true -RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE true -RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE true -RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE true -RR_BOTTOM_OF_THE_WELL_BASEMENT true - -def RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ Perimeter -//technically obsolete due to a wonder item fairy which only needs a projectile, but we don't have an event var for it yet -FairyPot (and (Here BlastOrSmash) CanHitEyeTargets) -//It is possible to hit the water switch with a pot from RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, however the hitbox for making it activate is very unintuitive -//You have to throw the pot from further back to hit the switch from the front instead of the top, trying to hit the "fingers" directly -//This unintuitiveness means it should be a trick. ZL is needed to get a clear path to carry the pot -LoweredWaterInsideBotw (or CanJumpslash CanUseProjectile) -//Implies CanBreakPots() -RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT (and (Here BlastOrSmash) CanHitEyeTargets) -RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART HasExplosives -RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART HasExplosives -RR_BOTTOM_OF_THE_WELL_ENTRYWAY IsChild -RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH (and (Here BlastOrSmash) (CanPassEnemy RE_BIG_SKULLTULA)) -RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM (and (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) (SmallKeys RR_BOTTOM_OF_THE_WELL 2)) -RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE (and IsChild (and (SmallKeys RR_BOTTOM_OF_THE_WELL 2) CanUseProjectile)) -RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM (and IsChild LoweredWaterInsideBotw) -RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE (CanUse RG_ZELDAS_LULLABY) -RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true - -def RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ West Room Switch -OpenedWestRoomMQBotw true -RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and BlastOrSmash (or (CanPassEnemy RE_BIG_SKULLTULA) RT_BOTW_MQ_PITS)) -RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE RT_BOTW_MQ_PITS -RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true - -def RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ Coffin Room -RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA) -RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) -RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) -RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) (SmallKeys RR_BOTTOM_OF_THE_WELL 2)) - -def RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ Locked Cage -OpenedMiddleHoleMQBotw HasExplosives -RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and IsChild (SmallKeys RR_BOTTOM_OF_THE_WELL 2)) - -def RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ Dead Hand Room -RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST (CanKillEnemy RE_DEAD_HAND) -RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY (or HasExplosives (and RT_BOTW_MQ_DEADHAND_KEY (CanUse RG_BOOMERANG))) -RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1 CanCutShrubs -RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2 CanCutShrubs -RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3 CanCutShrubs -RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4 CanCutShrubs -//This assumes we spawned in dead hand's room, if whatever trick made this relevant instead puts us in the previous room, remove the kill Dead Hand check. -RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and IsChild (CanKillEnemy RE_DEAD_HAND)) - -def RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ Middle -RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST true -//This location technically involves an invisible platform, but it's intended to do lensless in vanilla and is clearly signposted by pots. -RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY true -//The enemies in this room are invisible and crowd around the player, being awkward to deal with blind unless you already know how. -//the right wall is safe, and can be followed to get behind the grave which you can then pull easily assuming you can tank invisible keese -//Using a deku nut however stuns everything easily. and if you have a melee weapon you can kill the skull through the grave then grab the drop -//though it can be hard to tell where the safe direct path to the grave is without lens. -//Also you get cheap shotted on entry sometimes. -//An MQ lens trick is recommended here, and a review of this room for OHKO logic what that is added is advised. -//In the meantime I assume damage taken or the easy answer (nuts) -RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM (and OpenedWestRoomMQBotw (and (or TakeDamage (CanUse RG_NUTS)) (CanGetEnemyDrop RE_GOLD_SKULLTULA))) -RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1 CanBreakPots -RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2 CanBreakPots -RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3 CanBreakPots -RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1 CanBreakPots -RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2 CanBreakPots -RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3 CanBreakPots -RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY (CanUse RG_SUNS_SONG) -//If a relevant trick causes you to be able to warp into here without going through PERIMETER, a new eventAccess will be needed for lowering the gates with ZL -RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM OpenedMiddleHoleMQBotw -RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true - -def RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ Basement -//behind invisible big skulltulas, but with navi spotting it's easy to avoid them, or at worst, tank your way through as they do not block the path -RC_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT (CanGetEnemyDrop RE_GOLD_SKULLTULA) -RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART true -RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART true -RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART true -RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY (CanUse RG_SUNS_SONG) -RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER true - -def RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL -Bottom of the Well MQ Basement Switch Platform -//Assumes RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT access -//it is technically possible to get the chest before you get screamed at without rolling, but hard enough to be a trick if that is the requirement for something to be logical -//With some kind of movement tech it's much easier, easy enough to be default logic, as the redeads don't lock on immediately in addition to the extra speed -//leaving with no requirements for now but up for discussion. -RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST true -RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true - -def RR_ICE_CAVERN_BEGINNING SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern Beginning -RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) -RR_ICE_CAVERN_ENTRYWAY true -RR_ICE_CAVERN_MAIN (Here (CanKillEnemy RE_FREEZARD ED_CLOSE true 4)) - -def RR_ICE_CAVERN_MAIN SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern -BlueFireAccess IsAdult -RC_ICE_CAVERN_MAP_CHEST (and BlueFire IsAdult) -RC_ICE_CAVERN_COMPASS_CHEST BlueFire -RC_ICE_CAVERN_IRON_BOOTS_CHEST (and BlueFire (CanKillEnemy RE_WOLFOS)) -RC_SHEIK_IN_ICE_CAVERN (and BlueFire (and (CanKillEnemy RE_WOLFOS) IsAdult)) -RC_ICE_CAVERN_FREESTANDING_POH BlueFire -RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM HookshotOrBoomerang -RC_ICE_CAVERN_GS_HEART_PIECE_ROOM (and BlueFire HookshotOrBoomerang) -RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM (and BlueFire (or HookshotOrBoomerang (and RT_ICE_BLOCK_GS (and IsAdult (CanUse RG_HOVER_BOOTS))))) -RC_ICE_CAVERN_HALL_POT_1 CanBreakPots -RC_ICE_CAVERN_HALL_POT_2 CanBreakPots -RC_ICE_CAVERN_SPINNING_BLADE_POT_1 CanBreakPots -RC_ICE_CAVERN_SPINNING_BLADE_POT_2 CanBreakPots -RC_ICE_CAVERN_SPINNING_BLADE_POT_3 CanBreakPots -RC_ICE_CAVERN_NEAR_END_POT_1 (and CanBreakPots BlueFire) -RC_ICE_CAVERN_NEAR_END_POT_2 (and CanBreakPots BlueFire) -RC_ICE_CAVERN_FROZEN_POT_1 (and CanBreakPots (and BlueFire IsAdult)) -RC_ICE_CAVERN_LOBBY_RUPEE BlueFire -RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART IsAdult -RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART IsAdult -RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART IsAdult -RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1 (and BlueFire (or (CanUse RG_SONG_OF_TIME) (CanUse RG_BOOMERANG))) -RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2 (and BlueFire (or (CanUse RG_SONG_OF_TIME) (CanUse RG_BOOMERANG))) -RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3 (and BlueFire (or (CanUse RG_SONG_OF_TIME) (CanUse RG_BOOMERANG))) - -def RR_ICE_CAVERN_MQ_BEGINNING SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern MQ Beginning -RC_ICE_CAVERN_MQ_ENTRANCE_POT CanBreakPots -RR_ICE_CAVERN_ENTRYWAY true -//It is in logic to use a pot to hit the toggle switch here. -RR_ICE_CAVERN_MQ_HUB true - -def RR_ICE_CAVERN_MQ_HUB SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern MQ Hub -FairyPot true -RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1 CanBreakPots -RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2 CanBreakPots -RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1 CanBreakPots -RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2 CanBreakPots -RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3 CanBreakPots -RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4 CanBreakPots -//the switch for the glass blocking the entrance is linked to the switch that controls the glass around the skulltulla in RR_ICE_CAVERN_MQ_SCARECROW_ROOM -//if you clear the ice, you can hit it with a pot from here. -RR_ICE_CAVERN_MQ_BEGINNING BlueFire -RR_ICE_CAVERN_MQ_MAP_ROOM (Here (and (CanKillEnemy RE_WHITE_WOLFOS) (CanKillEnemy RE_FREEZARD))) -RR_ICE_CAVERN_MQ_COMPASS_ROOM (and IsAdult BlueFire) -RR_ICE_CAVERN_MQ_SCARECROW_ROOM BlueFire - -def RR_ICE_CAVERN_MQ_MAP_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern MQ Map Room -//Child can fit between the stalagmites on the left hand side -BlueFireAccess (or IsChild (or CanJumpslash HasExplosives)) -RC_ICE_CAVERN_MQ_MAP_CHEST (and BlueFire (Here CanHitSwitch)) - -def RR_ICE_CAVERN_MQ_SCARECROW_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern MQ Scarecrow Room -RC_ICE_CAVERN_MQ_GS_ICE_BLOCK (or (and BlueFire (CanGetEnemyDrop RE_GOLD_SKULLTULA)) (and IsAdult (CanHitSwitch ED_LONG_JUMPSLASH))) -RC_ICE_CAVERN_MQ_GS_SCARECROW (or (CanUse RG_SCARECROW) (and IsAdult (or (CanUse RG_LONGSHOT) RT_ICE_MQ_SCARECROW))) -RR_ICE_CAVERN_MQ_HUB BlueFire -//Assumes RR_ICE_CAVERN_MQ_HUB access for a pot if using blue fire -RR_ICE_CAVERN_MQ_WEST_CORRIDOR (and IsAdult BlueFire) - -def RR_ICE_CAVERN_MQ_STALFOS_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern MQ Stalfos Room -RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST (CanKillEnemy RE_STALFOS) -RC_SHEIK_IN_ICE_CAVERN (CanKillEnemy RE_STALFOS) -RR_ICE_CAVERN_MQ_WEST_CORRIDOR (Here (CanKillEnemy RE_STALFOS)) -RR_ICE_CAVERN_MQ_BEGINNING (and (CanUse RG_IRON_BOOTS) (Here (CanKillEnemy RE_STALFOS))) - -def RR_ICE_CAVERN_MQ_WEST_CORRIDOR SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern MQ West Corridor -RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1 CanBreakPots -RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2 CanBreakPots -RR_ICE_CAVERN_MQ_SCARECROW_ROOM BlueFire -RR_ICE_CAVERN_MQ_STALFOS_ROOM true - -def RR_ICE_CAVERN_MQ_COMPASS_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN -Ice Cavern MQ Compass Room -BlueFireAccess true -RC_ICE_CAVERN_MQ_COMPASS_CHEST true -//It is possible for child with master, BGS or sticks, or adult with BGS, to hit this switch through the ice with a crouchstab, but it's precise and unintuitive for a trick -RC_ICE_CAVERN_MQ_FREESTANDING_POH HasExplosives -//doing RT_ICE_MQ_RED_ICE_GS as child is untested, as I could not perform the trick reliably even as adult -RC_ICE_CAVERN_MQ_GS_RED_ICE (or (and RSK_BLUE_FIRE_ARROWS (CanUse RG_ICE_ARROWS)) (and (CanUse RG_BOTTLE_WITH_BLUE_FIRE) (and (or (CanUse RG_SONG_OF_TIME) (and IsAdult RT_ICE_MQ_RED_ICE_GS)) (CanGetEnemyDrop RE_GOLD_SKULLTULA)))) -RC_ICE_CAVERN_MQ_COMPASS_POT_1 CanBreakPots -RC_ICE_CAVERN_MQ_COMPASS_POT_2 CanBreakPots - -def RR_GERUDO_TRAINING_GROUND_LOBBY SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Lobby -RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST CanHitEyeTargets -RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST CanHitEyeTargets -RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) -RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST (and (CanKillEnemy RE_BEAMOS) (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2 true)) -RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) -RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART true -RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART true -RR_GERUDO_TRAINING_GROUND_ENTRYWAY true -RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM (and (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) (or (CanUse RG_HOOKSHOT) RT_GTG_WITHOUT_HOOKSHOT)) -RR_GERUDO_TRAINING_GROUND_LAVA_ROOM (Here (and (CanKillEnemy RE_BEAMOS) (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2 true))) -RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE true - -def RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Central Maze -RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST (and (SmallKeys RR_GERUDO_TRAINING_GROUND 3) (or RT_LENS_GTG (CanUse RG_LENS_OF_TRUTH))) -RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 4) -RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 6) -RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 7) -RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 9) -RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT (SmallKeys RR_GERUDO_TRAINING_GROUND 9) - -def RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Central Maze Right -RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST true -RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST true -RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY true -RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM (CanUse RG_HOOKSHOT) -RR_GERUDO_TRAINING_GROUND_LAVA_ROOM true - -def RR_GERUDO_TRAINING_GROUND_LAVA_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Lava Room -RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST (and (CanUse RG_HOOKSHOT) (and (CanUse RG_SONG_OF_TIME) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 24)))) -RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT (or (CanUse RG_SONG_OF_TIME) IsChild) -RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) - -def RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Hammer Room -RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST CanAttack -RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST (or (CanUse RG_MEGATON_HAMMER) (and TakeDamage RT_FLAMING_CHESTS)) -RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_FAIRY_BOW)) -RR_GERUDO_TRAINING_GROUND_LAVA_ROOM true - -def RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Eye Statue Lower -RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST (CanUse RG_FAIRY_BOW) -RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM true - -def RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Eye Statue Upper -RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST (CanUse RG_FAIRY_BOW) -RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER true - -def RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Heavy Block Room -RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST (CanKillEnemy RE_WOLFOS ED_CLOSE true 4 true) -RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER (and (or RT_LENS_GTG (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_HOOKSHOT) (and RT_GTG_FAKE_WALL (CanUse RG_HOVER_BOOTS)))) -RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM (and (or RT_LENS_GTG (CanUse RG_LENS_OF_TRUTH)) (and (or (CanUse RG_HOOKSHOT) (and RT_GTG_FAKE_WALL (CanUse RG_HOVER_BOOTS))) (CanUse RG_SILVER_GAUNTLETS))) - -def RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Like Like Room -RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST CanJumpslashExceptHammer -RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST CanJumpslashExceptHammer -RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST CanJumpslashExceptHammer -RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST CanJumpslashExceptHammer - -def RR_GERUDO_TRAINING_GROUND_MQ_LOBBY SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Lobby -RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST true -RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST true -RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST true -RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST true -RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1 CanBreakPots -RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2 CanBreakPots -RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1 CanBreakPots -RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2 CanBreakPots -RR_GERUDO_TRAINING_GROUND_ENTRYWAY true -RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM (or RT_LENS_GTG_MQ (CanUse RG_LENS_OF_TRUTH)) -RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK (SmallKeys RR_GERUDO_TRAINING_GROUND 1) -//It's possible to use the torch in RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM with flame storage to light these -RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM (Here HasFireSource) -RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM (Here (or (and IsAdult (CanUse RG_FAIRY_BOW)) (and IsChild (CanUse RG_FAIRY_SLINGSHOT)))) - -def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Maze Hidden Room -RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST true -RR_GERUDO_TRAINING_GROUND_MQ_LOBBY true - -def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Maze First Lock -RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST true -RR_GERUDO_TRAINING_GROUND_MQ_LOBBY (SmallKeys RR_GERUDO_TRAINING_GROUND 1) -RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER (SmallKeys RR_GERUDO_TRAINING_GROUND 3) - -def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Center -MQGTGMazeSwitch (CanUse RG_MEGATON_HAMMER) -RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE CanBreakCrates -RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK (SmallKeys RR_GERUDO_TRAINING_GROUND 3) - -def RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Sand Room -RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST (CanKillEnemy RE_IRON_KNUCKLE) -RR_GERUDO_TRAINING_GROUND_MQ_LOBBY true -RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE (Here (CanKillEnemy RE_IRON_KNUCKLE)) - -def RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Left Side -RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM true -RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM (Here (or (CanUse RG_LONGSHOT) (or RT_GTG_MQ_WITHOUT_HOOKSHOT (and RT_GTG_MQ_WITH_HOOKSHOT (and IsAdult (and CanJumpslash (CanUse RG_HOOKSHOT))))))) - -def RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Stalfos Room -BlueFireAccess true -//implies logic->CanKillEnemy(RE_BIG_SKULLTULA) -RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) -RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK (and (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true)) (CanUse RG_SILVER_GAUNTLETS)) -RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE (and IsAdult (and (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true)) (and (or RT_LENS_GTG_MQ (CanUse RG_LENS_OF_TRUTH)) (and BlueFire (or (CanUse RG_SONG_OF_TIME) (and RT_GTG_FAKE_WALL (CanUse RG_HOVER_BOOTS))))))) - -def RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Behind Block -//implies logic->CanKillEnemy(RE_SPIKE) -RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST (CanKillEnemy RE_FREEZARD) - -def RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Statue Room Ledge -RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM true -//implies dropping down to hit the switch. Using swords, especially master, is a bit awkward, may be trick worthy, but is only relevant with other tricks -RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM (Here (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_STICKS) (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_BOOMERANG)))))))) -RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM true - -def RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Magenta Fire Room -RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST MQGTGMazeSwitch -RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE true - -def RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Statue ROom -RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST (CanUse RG_FAIRY_BOW) -RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE (CanUse RG_LONGSHOT) -RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM true - -def RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Torch Slug Room -//implies logic->CanKillEnemy(RE_TORCH_SLUG) -RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST (CanKillEnemy RE_IRON_KNUCKLE) -RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST (CanHitSwitch ED_BOMB_THROW) -RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM (Here (CanKillEnemy RE_IRON_KNUCKLE)) -RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE (Here (CanKillEnemy RE_IRON_KNUCKLE)) - -def RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Switch Ledge -MQGTGRightSideSwitch (CanUse RG_MEGATON_HAMMER) -GTGPlatformSilverRupees (and (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) -RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (CanUse RG_FIRE_ARROWS) -//the fire bubble here is a jerk if you are aiming for the nearest hook platform, you have to aim to the right hand side with hook to dodge it -RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH (or (CanUse RG_LONGSHOT) (or (and GTGPlatformSilverRupees (CanUse RG_HOOKSHOT)) (and (and (CanUse RG_FIRE_ARROWS) GTGPlatformSilverRupees) (CanUse RG_HOVER_BOOTS)))) -RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT (and MQGTGRightSideSwitch (CanUse RG_LONGSHOT)) - -//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area -//This covers the 2 platforms that can be jumped to directly from RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE -//the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees -def RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Ledge Side Platforms -//This is merely to extend this region's logic if you have hovers -RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM (CanUse RG_HOVER_BOOTS) - -//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area -//This covers the platform that needs hover boots or the spawned targets to reach from any starting point other than RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT -//the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees -def RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Furthest Platform -//This is merely to extend this region's logic if you have hovers -RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (CanUse RG_HOVER_BOOTS) - -def RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground Torch Side Platforms -//this torch shot is possible as child but tight and obtuse enough to be a trick -GTGPlatformSilverRupees (and (or (and (CanUse RG_FAIRY_BOW) IsAdult) (CanUse RG_FIRE_ARROWS)) (CanUse RG_HOVER_BOOTS)) -RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (and (or (and (CanUse RG_FAIRY_BOW) IsAdult) (CanUse RG_FIRE_ARROWS)) (CanUse RG_HOVER_BOOTS)) -RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH (or (and (CanUse RG_FAIRY_BOW) IsAdult) (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT))) -RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT (and MQGTGRightSideSwitch (or (and (CanUse RG_FAIRY_BOW) IsAdult) (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)))) -RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM true - -def RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Platforms Unlit Torch -GTGPlatformSilverRupees (and HasFireSource (CanUse RG_HOVER_BOOTS)) -RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER GTGPlatformSilverRupees -RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (and HasFireSource (CanUse RG_HOVER_BOOTS)) -RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS (or HasFireSource (CanUse RG_LONGSHOT)) -RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT (and MQGTGRightSideSwitch (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) HasFireSource))) - -def RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Dinolfos Room -//WallFairy (and IsAdult (CanUse RG_FAIRY_BOW)) -//implies logic->CanKillEnemy(RE_LIZALFOS and logic->CanKillEnemy(RE_DODONGO) -//is logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true) && logic->CanKillEnemy(RE_ARMOS, ED_CLOSE, true, 1, true) broken down to exclude sticks, as it take too many to clear the room -//Proper enemy kill room ammo logic is needed to handle this room -//some combinations may be impossible without taking damage, keep an eye out for issues here -RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_FAIRY_BOW) (and (or (CanUse RG_NUTS) (or (CanUse RG_HOOKSHOT) (CanUse RG_BOOMERANG))) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT))))))) -RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS (Here (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_FAIRY_BOW) (and (or (CanUse RG_NUTS) (or (CanUse RG_HOOKSHOT) (CanUse RG_BOOMERANG))) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))))) - -def RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Underwater -//it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy -RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST (and HasFireSource (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 24) (and (HasItem RG_BRONZE_SCALE) TakeDamage)))) -RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH true - -def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND -Gerudo Training Ground MQ Maze Right -GTGPlatformSilverRupees (and (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) -RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST true -RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST true -RR_GERUDO_TRAINING_GROUND_MQ_LOBBY true -RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)) -RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH (or (CanUse RG_FIRE_ARROWS) (or (CanUse RG_LONGSHOT) (and GTGPlatformSilverRupees (CanUse RG_HOVER_BOOTS)))) -RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (CanUse RG_FIRE_ARROWS) -RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM (CanUse RG_FIRE_ARROWS) - -def RR_GANONS_CASTLE_LOBBY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Lobby -RC_SHEIK_HINT_GC true -RR_GANONS_CASTLE_ENTRYWAY true -RR_GANONS_CASTLE_FOREST_TRIAL true -RR_GANONS_CASTLE_FIRE_TRIAL true -RR_GANONS_CASTLE_WATER_TRIAL true -RR_GANONS_CASTLE_SHADOW_TRIAL true -RR_GANONS_CASTLE_SPIRIT_TRIAL true -RR_GANONS_CASTLE_LIGHT_TRIAL (CanUse RG_GOLDEN_GAUNTLETS) -RR_GANONS_TOWER_ENTRYWAY true -RR_GANONS_CASTLE_DEKU_SCRUBS (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)) - -def RR_GANONS_CASTLE_MAIN SCENE_ID_MAX false -Invalid Region - -def RR_GANONS_CASTLE_DEKU_SCRUBS SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Deku Scrubs -FreeFairies true -RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT CanStunDeku -RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT CanStunDeku -RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT CanStunDeku -RC_GANONS_CASTLE_DEKU_SCRUB_LEFT CanStunDeku -RC_GANONS_CASTLE_SCRUBS_FAIRY_1 true -RC_GANONS_CASTLE_SCRUBS_FAIRY_2 true -RC_GANONS_CASTLE_SCRUBS_FAIRY_3 true -RC_GANONS_CASTLE_SCRUBS_FAIRY_4 true -RC_GANONS_CASTLE_SCRUBS_FAIRY_5 true -RC_GANONS_CASTLE_SCRUBS_FAIRY_6 true -RC_GANONS_CASTLE_SCRUBS_FAIRY_7 true -RC_GANONS_CASTLE_SCRUBS_FAIRY_8 true - -def RR_GANONS_CASTLE_FOREST_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Forest Trial -ForestTrialClear (and (CanUse RG_LIGHT_ARROWS) (or (CanUse RG_FIRE_ARROWS) (CanUse RG_DINS_FIRE))) -RC_GANONS_CASTLE_FOREST_TRIAL_CHEST (CanKillEnemy RE_WOLFOS) -RC_GANONS_CASTLE_FOREST_TRIAL_POT_1 (and CanBreakPots (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT))))) -RC_GANONS_CASTLE_FOREST_TRIAL_POT_2 (and CanBreakPots (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT))))) - -def RR_GANONS_CASTLE_FIRE_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Fire Trial -FireTrialClear (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_GOLDEN_GAUNTLETS) (and (CanUse RG_LIGHT_ARROWS) (CanUse RG_LONGSHOT)))) -RC_GANONS_CASTLE_FIRE_TRIAL_POT_1 (and CanBreakPots (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_GOLDEN_GAUNTLETS) (CanUse RG_LONGSHOT)))) -RC_GANONS_CASTLE_FIRE_TRIAL_POT_2 (and CanBreakPots (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_GOLDEN_GAUNTLETS) (CanUse RG_LONGSHOT)))) -RC_GANONS_CASTLE_FIRE_TRIAL_HEART (CanUse RG_GORON_TUNIC) - -def RR_GANONS_CASTLE_WATER_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Water Trial -BlueFireAccess true -FairyPot (and BlueFire (CanKillEnemy RE_FREEZARD)) -WaterTrialClear (and BlueFire (and IsAdult (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_LIGHT_ARROWS)))) -RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST true -RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST true -RC_GANONS_CASTLE_WATER_TRIAL_POT_1 (and CanBreakPots (and BlueFire (and IsAdult (CanUse RG_MEGATON_HAMMER)))) -RC_GANONS_CASTLE_WATER_TRIAL_POT_2 (and CanBreakPots (and BlueFire (and IsAdult (CanUse RG_MEGATON_HAMMER)))) -RC_GANONS_CASTLE_WATER_TRIAL_POT_3 (and CanBreakPots (and BlueFire (CanKillEnemy RE_FREEZARD))) - -def RR_GANONS_CASTLE_SHADOW_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Shadow Trial -ShadowTrialClear (and (CanUse RG_LIGHT_ARROWS) (and (CanUse RG_MEGATON_HAMMER) (or (and (CanUse RG_FIRE_ARROWS) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_DINS_FIRE) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))))))) -RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST (or (CanUse RG_FIRE_ARROWS) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_SONG_OF_TIME) IsChild)))) -RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) -RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1 (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)) -RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2 (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)) -RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3 (and CanBreakPots (and (CanUse RG_MEGATON_HAMMER) (or (and (CanUse RG_FIRE_ARROWS) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_DINS_FIRE) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))))))) -RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4 (and CanBreakPots (and (CanUse RG_MEGATON_HAMMER) (or (and (CanUse RG_FIRE_ARROWS) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_DINS_FIRE) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))))))) -RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1 (and (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) (or RT_LENS_GANON (or (CanUse RG_LENS_OF_TRUTH) (CanUse RG_BOOMERANG)))) -RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2 (and (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) (or RT_LENS_GANON (or (CanUse RG_LENS_OF_TRUTH) (CanUse RG_BOOMERANG)))) -RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3 (and (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) (or RT_LENS_GANON (or (CanUse RG_LENS_OF_TRUTH) (CanUse RG_BOOMERANG)))) - -def RR_GANONS_CASTLE_SPIRIT_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Spirit Trial -NutPot (and (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS)))))) -SpiritTrialClear (and (CanUse RG_LIGHT_ARROWS) (and (or (CanUse RG_MIRROR_SHIELD) RSK_SUNLIGHT_ARROWS) (and (CanUse RG_BOMBCHU_5) (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT))))) -RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST (and (or RT_GANON_SPIRIT_TRIAL_HOOKSHOT (CanUse RG_HOOKSHOT)) (or CanJumpslashExceptHammer (CanUse RG_BOMBCHU_5))) -RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST (and (or RT_GANON_SPIRIT_TRIAL_HOOKSHOT (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))) -RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1 (and (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS)))))) -RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2 (and (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS)))))) -RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY (CanUse RG_SUNS_SONG) -RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART true - -def RR_GANONS_CASTLE_LIGHT_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle Light Trial -LightTrialClear (and (CanUse RG_LIGHT_ARROWS) (and (CanUse RG_HOOKSHOT) (and (SmallKeys RR_GANONS_CASTLE 2) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))))) -RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST true -RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST true -RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST true -RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST true -RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST true -RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST true -RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)) -RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST (and (CanUse RG_ZELDAS_LULLABY) (SmallKeys RR_GANONS_CASTLE 1)) -RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1 (and CanBreakPots (SmallKeys RR_GANONS_CASTLE 2)) -RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1 (and CanBreakPots (and (CanUse RG_HOOKSHOT) (and (SmallKeys RR_GANONS_CASTLE 2) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))))) -RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2 (and CanBreakPots (and (CanUse RG_HOOKSHOT) (and (SmallKeys RR_GANONS_CASTLE 2) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))))) - -def RR_GANONS_CASTLE_MQ_LOBBY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Lobby -RR_GANONS_CASTLE_ENTRYWAY (or (CanPassEnemy RE_GREEN_BUBBLE) (Here (and (CanKillEnemy RE_IRON_KNUCKLE) (CanKillEnemy RE_ARMOS)))) -//Implies CanKillEnemy(RE_GREEN_BUBBLE) -RR_GANONS_CASTLE_MQ_MAIN (Here (and (CanKillEnemy RE_IRON_KNUCKLE) (CanKillEnemy RE_ARMOS))) - -def RR_GANONS_CASTLE_MQ_MAIN SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Main -RC_SHEIK_HINT_MQ_GC true -RR_GANONS_CASTLE_MQ_LOBBY true -RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM true -RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM true -RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM true -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE true -RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM true -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM (Here (CanUse RG_GOLDEN_GAUNTLETS)) -RR_GANONS_TOWER_ENTRYWAY true -RR_GANONS_CASTLE_MQ_DEKU_SCRUBS (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) - -def RR_GANONS_CASTLE_MQ_DEKU_SCRUBS SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Deku Scrubs -FreeFairies true -RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT CanStunDeku -RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER CanStunDeku -RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT CanStunDeku -RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT CanStunDeku -RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT CanStunDeku -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1 true -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2 true -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3 true -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4 true -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5 true -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6 true -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7 true -RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8 true -RR_GANONS_CASTLE_MQ_MAIN true - -def RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Forest Trial Stalfos Room -RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY HookshotOrBoomerang -RR_GANONS_CASTLE_MQ_MAIN true -RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) - -//If it is ever possible to warp into the RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, this needs splitting up as the requirements to reach things from the other side are more complex -def RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Forest Trial Beamos Room -RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST CanHitEyeTargets -RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST HasFireSource -RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM true -RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM (and IsAdult (CanUse RG_SONG_OF_TIME)) - -def RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Forest Trial Final Room -ForestTrialClear (CanUse RG_LIGHT_ARROWS) -RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1 CanBreakPots -RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2 CanBreakPots -RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM true - -def RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Fire Trial Main Room -RR_GANONS_CASTLE_MQ_MAIN true -//2 checks, 1 for the rupees, 1 for actually making it, as the rupees are permanent but throwing a pillar is not -RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM (and (Here (and (CanUse RG_GORON_TUNIC) (CanUse RG_GOLDEN_GAUNTLETS))) (and (CanUse RG_GORON_TUNIC) (or (CanUse RG_LONGSHOT) (and (CanUse RG_GOLDEN_GAUNTLETS) (or (CanUse RG_HOVER_BOOTS) (and RT_GANON_MQ_FIRE_TRIAL (and IsAdult (CanUse RG_HOOKSHOT)))))))) - -def RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Fire Trial Final Room -FireTrialClear (CanUse RG_LIGHT_ARROWS) -RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1 CanBreakPots -RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2 CanBreakPots -//There's no way back across the lava without glitches - -def RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Water Trial Geyser Room -BlueFireAccess (or CanJumpslash HasExplosives) -RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST BlueFire -RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART BlueFire -RR_GANONS_CASTLE_MQ_MAIN true -RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM (and (SmallKeys RR_GANONS_CASTLE 3) (Here BlueFire)) - -def RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Water Trial Block Room -RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM (SmallKeys RR_GANONS_CASTLE 3) -//This assumes there's no way for child to have blue fire and not adult. -RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM (and IsAdult BlueFire) - -def RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Water Trial Final Room -WaterTrialClear (CanUse RG_LIGHT_ARROWS) -RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1 CanBreakPots -RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2 CanBreakPots -RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM (Here BlueFire) - -def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Shadow Trial Starting Ledge -ShadowTrialFirstChest (CanUse RG_FAIRY_BOW) -RR_GANONS_CASTLE_MQ_MAIN true -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM (or (and ShadowTrialFirstChest (CanUse RG_HOOKSHOT)) (and IsAdult (CanUse RG_HOVER_BOOTS))) - -def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Shadow Trial Chest Platform -ShadowTrialFirstChest (CanUse RG_FAIRY_BOW) -RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST ShadowTrialFirstChest -//Hookshot here is possible but very tight, but it's basically never relevant -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE (or (CanUse RG_LONGSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS))) -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM (and (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) (or IsAdult (CanUse RG_HOVER_BOOTS))) - -def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Shadow Trial Moving Platform -//A torch run from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE is possible but tight, so would be a trick -ShadowTrialFirstChest CanDetonateUprightBombFlower -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM (or IsAdult (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH true - -def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Shadow Trial Beamos Torch -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) -//A torch run from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE is possible but very tight, so would be a trick -//The bow trick assumes RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE access, if you can somehow void warp directly here it will need handling properly -//Hovers is possible as child but a bit tight, requires good rolls -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE (or HasFireSource (or (CanUse RG_HOVER_BOOTS) (and IsAdult (and RT_GANON_MQ_SHADOW_TRIAL (CanUse RG_FAIRY_BOW))))) - -def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Shadow Trial Far Side -RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST CanHitEyeTargets -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH (or (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) -//Modelling the silver rupees properly will require a way to check temp flags in different regions. -//It may be tempting to use a Here-like command for this but it could cause sphere skipping in playthroughs -//So a system like event access which sets based on TimeAge would be preferable, as the application of these can be tracked and accounted for, unlike Here-like commands -//For Now I am assuming the player has made it all the way from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, which logically means every rupee is available -//with no extra requirements except the lens logic needed to reach the door, which also enables the beamos-platform rupee -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) - -def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Shadow Trial Final Room -ShadowTrialClear (CanUse RG_LIGHT_ARROWS) -RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1 CanBreakPots -RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2 CanBreakPots -RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) - -def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Spirit Trial Chairs Room -RR_GANONS_CASTLE_MQ_MAIN true -RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH (Here (and (or CanHitEyeTargets RT_RUSTED_SWITCHES) (CanUse RG_MEGATON_HAMMER))) - -def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Spirit Trial Before Switch -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST (CanPassEnemy RE_GREEN_BUBBLE) -RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM true -RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH (Here (CanUse RG_BOMBCHU_5)) - -def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Spirit Trial After Switch -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) -//better names for these would be nice. -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) -RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH (Here (CanUse RG_BOMBCHU_5)) -//Sunlight arrows are bugged, should set a perm flag like mirror shield -RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM (or (Here (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD))) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) - -def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Spirit Trial Final Room -SpiritTrialClear (CanUse RG_LIGHT_ARROWS) -NutPot true -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1 CanBreakPots -RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2 CanBreakPots -RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH true - -def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Light Trial Dinolfos Room -RR_GANONS_CASTLE_MQ_MAIN true -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM (Here (and (CanKillEnemy RE_DINOLFOS) (CanKillEnemy RE_TORCH_SLUG))) - -def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Light Trial Triforce Room -RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST (CanUse RG_ZELDAS_LULLABY) -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM true -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT (SmallKeys RR_GANONS_CASTLE 2) - -def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Light Trial Boulder Room Front -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM (SmallKeys RR_GANONS_CASTLE 2) -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK (or (CanUse RG_HOOKSHOT) RT_GANON_MQ_LIGHT_TRIAL) - -def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Light Trial Boulder Room Back -RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART true -RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART true -//I got the trick going backwards, but only while taking damage. this isn't relevant anyway though -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT (or (CanUse RG_HOOKSHOT) RT_GANON_MQ_LIGHT_TRIAL) -RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM (and (SmallKeys RR_GANONS_CASTLE 3) (and (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_FAIRY_SLINGSHOT) (or CanJumpslash (or HasExplosives (or (CanUse RG_FAIRY_BOW) (CanUse RG_BOOMERANG))))))) - -def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Castle MQ Light Trial Final Room -LightTrialClear (CanUse RG_LIGHT_ARROWS) -RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1 CanBreakPots -RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2 CanBreakPots - -def RR_GANONS_TOWER_ENTRYWAY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE -Ganon's Tower Entryway -RR_GANONS_CASTLE_LOBBY (IsDungeonVanilla GANONS_CASTLE) -RR_GANONS_CASTLE_MQ_MAIN (IsDungeonMQ GANONS_CASTLE) -//RANDOTODO could we just set these events automatically based on the setting? -RR_GANONS_TOWER_FLOOR_1 (and (or ForestTrialClear (IsTrialSkipped TK_FOREST_TRIAL)) (and (or FireTrialClear (IsTrialSkipped TK_FIRE_TRIAL)) (and (or WaterTrialClear (IsTrialSkipped TK_WATER_TRIAL)) (and (or ShadowTrialClear (IsTrialSkipped TK_SHADOW_TRIAL)) (and (or SpiritTrialClear (IsTrialSkipped TK_SPIRIT_TRIAL)) (or LightTrialClear (IsTrialSkipped TK_LIGHT_TRIAL))))))) - -def RR_GANONS_TOWER_FLOOR_1 SCENE_GANONS_TOWER false -Ganon's Tower Floor 1 -RR_GANONS_TOWER_ENTRYWAY (Here (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2)) -RR_GANONS_TOWER_FLOOR_2 (Here (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2)) - -def RR_GANONS_TOWER_FLOOR_2 SCENE_GANONS_TOWER false -Ganon's Tower Floor 2 -RC_GANONS_TOWER_BOSS_KEY_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) -RR_GANONS_TOWER_FLOOR_1 (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) -RR_GANONS_TOWER_FLOOR_3 (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) - -def RR_GANONS_TOWER_FLOOR_3 SCENE_GANONS_TOWER false -Ganon's Tower Floor 3 -RR_GANONS_TOWER_FLOOR_2 (Here (CanKillEnemy RE_IRON_KNUCKLE ED_CLOSE true 2)) -RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR (Here (CanKillEnemy RE_IRON_KNUCKLE ED_CLOSE true 2)) - -def RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR SCENE_GANONS_TOWER false -Ganon's Tower Before Ganondorf's Lair -RC_GANONS_CASTLE_GANONS_TOWER_POT_1 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_2 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_3 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_4 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_5 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_6 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_7 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_8 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_9 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_10 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_11 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_12 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_13 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_14 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_15 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_16 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_17 CanBreakPots -RC_GANONS_CASTLE_GANONS_TOWER_POT_18 CanBreakPots -RR_GANONS_TOWER_FLOOR_3 (Here true) -RR_GANONS_TOWER_GANONDORF_LAIR (Here (HasItem RG_GANONS_CASTLE_BOSS_KEY)) - -def RR_GANONS_TOWER_GANONDORF_LAIR SCENE_GANONDORF_BOSS false -Ganondorf's Lair -RC_GANONDORF_HINT (HasBossSoul RG_GANON_SOUL) -RR_GANONS_CASTLE_ESCAPE (CanKillEnemy RE_GANONDORF) - -def RR_GANONS_CASTLE_ESCAPE SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR false -Ganon's Castle Escape -//10 pots -//RANDOTODO hook potsanity pots up to escape. -RR_GANONS_CASTLE_GANON_ARENA true -//real logic once we figure out how to deal with castle escape skip -//RR_GANONS_CASTLE_GANON_ARENA (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) - -def RR_GANONS_CASTLE_GANON_ARENA SCENE_GANON_BOSS false -Ganon's Arena -RC_GANON (CanKillEnemy RE_GANON) - -:: - // clang-format on -} -:: diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/bottom_of_the_well.s b/soh/soh/Enhancements/randomizer/logic/dungeons/bottom_of_the_well.s new file mode 100644 index 000000000..2e2959ae1 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/bottom_of_the_well.s @@ -0,0 +1,230 @@ +def RR_BOTTOM_OF_THE_WELL_ENTRYWAY SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Entryway +RR_BOTTOM_OF_THE_WELL_PERIMETER (and (IsDungeonVanilla BOTTOM_OF_THE_WELL) (and IsChild (CanPassEnemy RE_BIG_SKULLTULA))) +RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and (IsDungeonMQ BOTTOM_OF_THE_WELL) IsChild) +RR_KAK_WELL true + +//Technically involves an fake wall, but passing it lensless is intended in vanilla and it is well telegraphed +def RR_BOTTOM_OF_THE_WELL_PERIMETER SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Perimeter +StickPot true +NutPot true +LoweredWaterInsideBotw (CanUse RG_ZELDAS_LULLABY) +RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST HasExplosives +RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST (or LoweredWaterInsideBotw CanOpenUnderwaterChest) +RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST (or LoweredWaterInsideBotw CanOpenUnderwaterChest) +RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1 CanBreakPots +RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2 CanBreakPots +RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT (or (and CanBreakPots LoweredWaterInsideBotw) (CanUse RG_BOOMERANG)) +RR_BOTTOM_OF_THE_WELL_ENTRYWAY (and IsChild (CanPassEnemy RE_BIG_SKULLTULA)) +RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) +RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) +RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM (and IsChild (SmallKeys RR_BOTTOM_OF_THE_WELL 3)) +RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) +RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM (and LoweredWaterInsideBotw IsChild) +//Falling down into basement requires nothing, but falling down somewhere specific requires lens or lens trick +//kinda questionable given several drops are blocked by rocks, but that's how it was handled before and on N64 +RR_BOTTOM_OF_THE_WELL_BASEMENT true + +//This region combines the Middle with the perimeter's hidden areas. If a warp puts link into the middle without crossing the perimeter or using lens, it will need it's own region +def RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Behind Fake Walls +RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST true +RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST true +RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST true +//You can just barely pass the spider on the right side without damage or items, but it's probably tight enough to count as as a trick +RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST (or (CanPassEnemy RE_BIG_SKULLTULA) TakeDamage) +//Not technically behind a wall, but still logically needs lens due to pits +RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST HasExplosives +RR_BOTTOM_OF_THE_WELL_PERIMETER (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) +RR_BOTTOM_OF_THE_WELL_INNER_ROOMS (SmallKeys RR_BOTTOM_OF_THE_WELL 3) +RR_BOTTOM_OF_THE_WELL_BASEMENT true +RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) + +//This area can be reached without lens in logic from basement, but that could require silver rupees if they are shuffled. +def RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Southwest Room +RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1 CanBreakPots +RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2 CanBreakPots +RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3 CanBreakPots +RR_BOTTOM_OF_THE_WELL_PERIMETER (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) + +//Passing through this area needs lens, but entering doesn't, so that the fire keese can be killed without crossing the pits if enemy drops are ever shuffled +def RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Keese-Beamos Room +RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) +RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1 (and CanBreakPots (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH))) +RR_BOTTOM_OF_THE_WELL_PERIMETER (and IsChild (and (SmallKeys RR_BOTTOM_OF_THE_WELL 3) (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)))) +RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) +//not sure if this lens check is needed, these holes are a bit too easy to find, but it matches existing logic +RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) + +def RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Like-Like Cage +RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST true +RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM true + +//If the player can voidwarp into one of these rooms they will need splitting up, and Fake walls will need specifying into middle and the rest moved to perimeter +def RR_BOTTOM_OF_THE_WELL_INNER_ROOMS SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Inner Rooms +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS (SmallKeys RR_BOTTOM_OF_THE_WELL 3) + +def RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Coffin Room +RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) +RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART true +RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) +RR_BOTTOM_OF_THE_WELL_PERIMETER (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) + +def RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Dead Hand Room +RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST (CanKillEnemy RE_DEAD_HAND) +RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) +//This assumes we spawned in dead hand's room, if whatever trick made this relevant instead puts us in the previous room, remove the kill Dead Hand check. +RR_BOTTOM_OF_THE_WELL_PERIMETER (and IsChild (CanKillEnemy RE_DEAD_HAND)) + +def RR_BOTTOM_OF_THE_WELL_BASEMENT SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Basement +RC_BOTTOM_OF_THE_WELL_MAP_CHEST BlastOrSmash +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12 CanBreakPots +RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY (CanUse RG_SUNS_SONG) +RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1 CanCutShrubs +RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2 CanCutShrubs +RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3 CanCutShrubs +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8 (and CanCutShrubs BlastOrSmash) +RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9 (and CanCutShrubs BlastOrSmash) +RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM (and IsChild (CanPassEnemy RE_BIG_SKULLTULA)) +//It's possible to abuse boulder's limited range of collision detection to detonate the flowers through the boulder with bow, but this is a glitch +//the exact range is just past the furthest away plank in the green goo section +RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS (Here (or BlastOrSmash (or (CanUse RG_DINS_FIRE) (and (CanUse RG_STICKS) RT_BOTW_BASEMENT)))) + +def RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Basement Useful Bomb Flowers +//Assumes RR_BOTTOM_OF_THE_WELL_BASEMENT access +RC_BOTTOM_OF_THE_WELL_MAP_CHEST (HasItem RG_GORONS_BRACELET) +RR_BOTTOM_OF_THE_WELL_BASEMENT CanDetonateUprightBombFlower + +def RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well Basement Platform +RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE true +RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE true +RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE true +RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE true +RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE true +RR_BOTTOM_OF_THE_WELL_BASEMENT true + +def RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ Perimeter +//technically obsolete due to a wonder item fairy which only needs a projectile, but we don't have an event var for it yet +FairyPot (and (Here BlastOrSmash) CanHitEyeTargets) +//It is possible to hit the water switch with a pot from RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, however the hitbox for making it activate is very unintuitive +//You have to throw the pot from further back to hit the switch from the front instead of the top, trying to hit the "fingers" directly +//This unintuitiveness means it should be a trick. ZL is needed to get a clear path to carry the pot +LoweredWaterInsideBotw (or CanJumpslash CanUseProjectile) +//Implies CanBreakPots() +RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT (and (Here BlastOrSmash) CanHitEyeTargets) +RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART HasExplosives +RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART HasExplosives +RR_BOTTOM_OF_THE_WELL_ENTRYWAY IsChild +RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH (and (Here BlastOrSmash) (CanPassEnemy RE_BIG_SKULLTULA)) +RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM (and (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) (SmallKeys RR_BOTTOM_OF_THE_WELL 2)) +RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE (and IsChild (and (SmallKeys RR_BOTTOM_OF_THE_WELL 2) CanUseProjectile)) +RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM (and IsChild LoweredWaterInsideBotw) +RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE (CanUse RG_ZELDAS_LULLABY) +RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true + +def RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ West Room Switch +OpenedWestRoomMQBotw true +RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and BlastOrSmash (or (CanPassEnemy RE_BIG_SKULLTULA) RT_BOTW_MQ_PITS)) +RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE RT_BOTW_MQ_PITS +RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true + +def RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ Coffin Room +RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA) +RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) +RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) +RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) (SmallKeys RR_BOTTOM_OF_THE_WELL 2)) + +def RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ Locked Cage +OpenedMiddleHoleMQBotw HasExplosives +RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and IsChild (SmallKeys RR_BOTTOM_OF_THE_WELL 2)) + +def RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ Dead Hand Room +RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST (CanKillEnemy RE_DEAD_HAND) +RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY (or HasExplosives (and RT_BOTW_MQ_DEADHAND_KEY (CanUse RG_BOOMERANG))) +RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1 CanCutShrubs +RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2 CanCutShrubs +RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3 CanCutShrubs +RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4 CanCutShrubs +//This assumes we spawned in dead hand's room, if whatever trick made this relevant instead puts us in the previous room, remove the kill Dead Hand check. +RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and IsChild (CanKillEnemy RE_DEAD_HAND)) + +def RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ Middle +RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST true +//This location technically involves an invisible platform, but it's intended to do lensless in vanilla and is clearly signposted by pots. +RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY true +//The enemies in this room are invisible and crowd around the player, being awkward to deal with blind unless you already know how. +//the right wall is safe, and can be followed to get behind the grave which you can then pull easily assuming you can tank invisible keese +//Using a deku nut however stuns everything easily. and if you have a melee weapon you can kill the skull through the grave then grab the drop +//though it can be hard to tell where the safe direct path to the grave is without lens. +//Also you get cheap shotted on entry sometimes. +//An MQ lens trick is recommended here, and a review of this room for OHKO logic what that is added is advised. +//In the meantime I assume damage taken or the easy answer (nuts) +RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM (and OpenedWestRoomMQBotw (and (or TakeDamage (CanUse RG_NUTS)) (CanGetEnemyDrop RE_GOLD_SKULLTULA))) +RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1 CanBreakPots +RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2 CanBreakPots +RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3 CanBreakPots +RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1 CanBreakPots +RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2 CanBreakPots +RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3 CanBreakPots +RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY (CanUse RG_SUNS_SONG) +//If a relevant trick causes you to be able to warp into here without going through PERIMETER, a new eventAccess will be needed for lowering the gates with ZL +RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM OpenedMiddleHoleMQBotw +RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true + +def RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ Basement +//behind invisible big skulltulas, but with navi spotting it's easy to avoid them, or at worst, tank your way through as they do not block the path +RC_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT (CanGetEnemyDrop RE_GOLD_SKULLTULA) +RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART true +RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART true +RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART true +RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER true + +def RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL +Bottom of the Well MQ Basement Switch Platform +//Assumes RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT access +//it is technically possible to get the chest before you get screamed at without rolling, but hard enough to be a trick if that is the requirement for something to be logical +//With some kind of movement tech it's much easier, easy enough to be default logic, as the redeads don't lock on immediately in addition to the extra speed +//leaving with no requirements for now but up for discussion. +RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST true +RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT true diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/deku_tree.s b/soh/soh/Enhancements/randomizer/logic/dungeons/deku_tree.s new file mode 100644 index 000000000..df6db93b1 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/deku_tree.s @@ -0,0 +1,339 @@ +def RR_DEKU_TREE_ENTRYWAY SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Entryway +RR_DEKU_TREE_LOBBY (IsDungeonVanilla DEKU_TREE) +RR_DEKU_TREE_MQ_1F (IsDungeonMQ DEKU_TREE) +RR_KF_OUTSIDE_DEKU_TREE true + +def RR_DEKU_TREE_LOBBY SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Lobby +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_DEKU_TREE_MAP_CHEST true +RC_DEKU_TREE_LOBBY_LOWER_HEART true +RC_DEKU_TREE_LOBBY_UPPER_HEART (CanPassEnemy RE_BIG_SKULLTULA) +RC_DEKU_TREE_LOBBY_GRASS_1 CanCutShrubs +RC_DEKU_TREE_LOBBY_GRASS_2 CanCutShrubs +RC_DEKU_TREE_LOBBY_GRASS_3 CanCutShrubs +RC_DEKU_TREE_LOBBY_GRASS_4 CanCutShrubs +RC_DEKU_TREE_LOBBY_GRASS_5 CanCutShrubs +RR_DEKU_TREE_ENTRYWAY true +RR_DEKU_TREE_2F_MIDDLE_ROOM true +RR_DEKU_TREE_COMPASS_ROOM true +RR_DEKU_TREE_BASEMENT_LOWER (Here (or CanAttack (CanUse RG_NUTS))) +RR_DEKU_TREE_OUTSIDE_BOSS_ROOM false +RR_DEKU_TREE_BOSS_ENTRYWAY false + +def RR_DEKU_TREE_2F_MIDDLE_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree 2F Middle Room +RR_DEKU_TREE_LOBBY (Here (or CanReflectNuts (CanUse RG_MEGATON_HAMMER))) +RR_DEKU_TREE_SLINGSHOT_ROOM (Here (or CanReflectNuts (CanUse RG_MEGATON_HAMMER))) + +def RR_DEKU_TREE_SLINGSHOT_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Slingshot Room +RC_DEKU_TREE_SLINGSHOT_CHEST true +RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST true +RC_DEKU_TREE_SLINGSHOT_GRASS_1 (and CanCutShrubs CanReflectNuts) +RC_DEKU_TREE_SLINGSHOT_GRASS_2 (and CanCutShrubs CanReflectNuts) +RC_DEKU_TREE_SLINGSHOT_GRASS_3 (and CanCutShrubs CanReflectNuts) +RC_DEKU_TREE_SLINGSHOT_GRASS_4 (and CanCutShrubs CanReflectNuts) +RR_DEKU_TREE_2F_MIDDLE_ROOM (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_HOVER_BOOTS)) + +def RR_DEKU_TREE_COMPASS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Compass Room +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_DEKU_TREE_COMPASS_CHEST true +RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST true +RC_DEKU_TREE_GS_COMPASS_ROOM CanAttack +RC_DEKU_TREE_COMPASS_GRASS_1 CanCutShrubs +RC_DEKU_TREE_COMPASS_GRASS_2 CanCutShrubs +RR_DEKU_TREE_LOBBY (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) +RR_DEKU_TREE_BOSS_ENTRYWAY false + +def RR_DEKU_TREE_BASEMENT_LOWER SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Lower +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_DEKU_TREE_BASEMENT_CHEST true +RC_DEKU_TREE_GS_BASEMENT_GATE (CanKillEnemy RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH) +RC_DEKU_TREE_GS_BASEMENT_VINES (CanKillEnemy RE_GOLD_SKULLTULA (if RT_DEKU_MQ_COMPASS_GS ED_SHORT_JUMPSLASH ED_BOMB_THROW)) +RC_DEKU_TREE_BASEMENT_GRASS_1 CanCutShrubs +RC_DEKU_TREE_BASEMENT_GRASS_2 CanCutShrubs +RR_DEKU_TREE_LOBBY true +RR_DEKU_TREE_BASEMENT_SCRUB_ROOM (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) +//Only adult can get the token without assistance +RR_DEKU_TREE_BASEMENT_UPPER (or IsAdult (or RT_DEKU_B1_SKIP (HasAccessTo RR_DEKU_TREE_BASEMENT_UPPER))) +//You can get the LOWER skull token from here as adult with hovers backwalk and a backflip, but it's trickworthy and not relevant unless you can beat tentacles without rang +RR_DEKU_TREE_OUTSIDE_BOSS_ROOM false + +def RR_DEKU_TREE_BASEMENT_SCRUB_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Scrub Room +RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1 CanCutShrubs +RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2 CanCutShrubs +RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3 CanCutShrubs +RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4 CanCutShrubs +RR_DEKU_TREE_BASEMENT_LOWER true +RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT (Here CanHitEyeTargets) + +def RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Water Room Front +RR_DEKU_TREE_BASEMENT_SCRUB_ROOM true +RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK (or (HasItem RG_BRONZE_SCALE) RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG) + +def RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Water Room Back +RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1 CanCutShrubs +RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2 CanCutShrubs +RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT (or (HasItem RG_BRONZE_SCALE) RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG) +RR_DEKU_TREE_BASEMENT_TORCH_ROOM true + +def RR_DEKU_TREE_BASEMENT_TORCH_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Torch Room +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1 CanCutShrubs +RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2 CanCutShrubs +RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK true +RR_DEKU_TREE_BASEMENT_BACK_LOBBY (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) + +def RR_DEKU_TREE_BASEMENT_BACK_LOBBY SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Back Lobby +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1 CanCutShrubs +RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2 CanCutShrubs +RR_DEKU_TREE_BASEMENT_TORCH_ROOM true +RR_DEKU_TREE_BASEMENT_BACK_ROOM (and (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) (Here BlastOrSmash)) +RR_DEKU_TREE_BASEMENT_UPPER (and (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) IsChild) + +def RR_DEKU_TREE_BASEMENT_BACK_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Back Room +RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM HookshotOrBoomerang +RR_DEKU_TREE_BASEMENT_BACK_LOBBY true + +def RR_DEKU_TREE_BASEMENT_UPPER SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Basement Upper +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RR_DEKU_TREE_BASEMENT_LOWER true +RR_DEKU_TREE_BASEMENT_BACK_LOBBY IsChild +RR_DEKU_TREE_OUTSIDE_BOSS_ROOM (Here (or HasFireSourceWithTorch (and RT_DEKU_B1_BOW_WEBS (and IsAdult (CanUse RG_FAIRY_BOW))))) + +def RR_DEKU_TREE_OUTSIDE_BOSS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Outside Boss Room +RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_DEKU_TREE_BEFORE_BOSS_GRASS_1 (and CanCutShrubs HasFireSourceWithTorch) +RC_DEKU_TREE_BEFORE_BOSS_GRASS_2 (and CanCutShrubs HasFireSourceWithTorch) +RC_DEKU_TREE_BEFORE_BOSS_GRASS_3 (and CanCutShrubs HasFireSourceWithTorch) +RR_DEKU_TREE_BASEMENT_UPPER true +RR_DEKU_TREE_BOSS_ENTRYWAY (and (or (HasItem RG_BRONZE_SCALE) (Here (CanUse RG_IRON_BOOTS))) (Here CanReflectNuts)) + +def RR_DEKU_TREE_MQ_1F SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ 1F +DekuBabaSticks (CanKillEnemy RE_WITHERED_DEKU_BABA) +BrokeDeku1FWeb HasFireSource +RC_DEKU_TREE_MQ_LOBBY_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_LOBBY_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_LOBBY_GRASS_3 CanCutShrubs +RC_DEKU_TREE_MQ_LOBBY_GRASS_4 CanCutShrubs +RC_DEKU_TREE_MQ_LOBBY_GRASS_5 CanCutShrubs +RR_DEKU_TREE_ENTRYWAY true +//may need canAvoid logic with enemy shuffle +RR_DEKU_TREE_MQ_2F true +//Swim is not required because you can jump with enough momentum to hit land. +//You even avoid fall damage if you hit the shallow water, though it's obscure knowledge so may be a trick +//if it is, then we need a landing room with (IsAdult || HasItem(RG_BRONZE_SCALE) || TakeDamage() || that trick) to reach basement +RR_DEKU_TREE_MQ_BASEMENT BrokeDeku1FWeb +//is it possible to recoil from here to the ledge with a trick? + +def RR_DEKU_TREE_MQ_2F SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ 2F +RC_DEKU_TREE_MQ_MAP_CHEST true +RC_DEKU_TREE_MQ_GS_LOBBY (CanGetEnemyDrop RE_GOLD_SKULLTULA) +RC_DEKU_TREE_MQ_LOBBY_HEART true +RC_DEKU_TREE_MQ_LOBBY_GRASS_6 CanCutShrubs +RC_DEKU_TREE_MQ_LOBBY_GRASS_7 CanCutShrubs +RC_DEKU_TREE_MQ_LOBBY_CRATE CanBreakCrates +RR_DEKU_TREE_MQ_1F true +//Will need canAvoid logic with enemy shuffle +RR_DEKU_TREE_MQ_3F true +RR_DEKU_TREE_MQ_EYE_TARGET_ROOM (Here HasFireSource) + +def RR_DEKU_TREE_MQ_3F SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ 3F +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +BrokeDeku1FWeb true +//Implies CanKillEnemy(RE_GOHMA_LARVA) +RC_DEKU_TREE_MQ_SLINGSHOT_CHEST (CanKillEnemy RE_DEKU_BABA) +RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST (or HasFireSourceWithTorch (and IsAdult (CanUse RG_FAIRY_BOW))) +RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART true +RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3 CanCutShrubs +RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4 CanCutShrubs +RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1 CanBreakCrates +RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2 CanBreakCrates +//Assumes RR_DEKU_TREE_MQ_2F access +RR_DEKU_TREE_MQ_2F true +RR_DEKU_TREE_MQ_EYE_TARGET_ROOM (Here (or (CanUse RG_STICKS) (CanUse RG_FAIRY_BOW))) +RR_DEKU_TREE_MQ_BASEMENT true + +def RR_DEKU_TREE_MQ_EYE_TARGET_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Eye Target Room +RC_DEKU_TREE_MQ_DEKU_BABA_HEART true +RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7 CanCutShrubs +RR_DEKU_TREE_MQ_COMPASS_ROOM (Here CanHitEyeTargets) +RR_DEKU_TREE_MQ_2F true + +def RR_DEKU_TREE_MQ_COMPASS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Compass Room +RC_DEKU_TREE_MQ_COMPASS_CHEST true +RC_DEKU_TREE_MQ_COMPASS_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_COMPASS_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_COMPASS_GRASS_3 CanCutShrubs +RC_DEKU_TREE_MQ_COMPASS_GRASS_4 CanCutShrubs +RR_DEKU_TREE_MQ_EYE_TARGET_ROOM (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_HOVER_BOOTS)) +RR_DEKU_TREE_MQ_PAST_BOULDER_VINES (Here (or (CanUse RG_BOMBCHU_5) (or (and (CanUse RG_BOMB_BAG) (or (CanUse RG_SONG_OF_TIME) (or IsAdult (CanUse RG_HOVER_BOOTS)))) (and (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_SONG_OF_TIME) RT_DEKU_MQ_COMPASS_GS))))) + +def RR_DEKU_TREE_MQ_PAST_BOULDER_VINES SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Past Boulder Vines +RC_DEKU_TREE_MQ_GS_PAST_BOULDER_VINES (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART true +RR_DEKU_TREE_MQ_COMPASS_ROOM BlastOrSmash + +def RR_DEKU_TREE_MQ_BASEMENT SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Basement +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_DEKU_TREE_MQ_BASEMENT_CHEST (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)) +RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4 CanCutShrubs +RR_DEKU_TREE_MQ_1F true +RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM (Here CanHitEyeTargets) +//includes RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM Access, other fire sources clear directly from there +RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT (and (Here CanHitEyeTargets) (and ClearedMQDekuSERoom (Here (CanUse RG_STICKS)))) +RR_DEKU_TREE_MQ_BASEMENT_LEDGE (or RT_DEKU_B1_SKIP (or PushedDekuBasementBlock (or IsAdult (CanUse RG_HOVER_BOOTS)))) + +def RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Southeast Room +//Implies CanKillEnemy(RE_GOHMA_LARVA) +ClearedMQDekuSERoom (CanKillEnemy RE_MAD_SCRUB) +RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4 CanCutShrubs +RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT HasFireSource +RR_DEKU_TREE_MQ_BASEMENT ClearedMQDekuSERoom + +def RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Basement Water Room Front +//It's possible to get this with bow if you have move while in first person and one-point skips on, noticeably harder and jankier as child, but that's a trick +MQDekuWaterRoomTorches (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_STICKS) (or RT_DEKU_MQ_LOG (and IsChild CanShield)))) +RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST true +RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3 CanCutShrubs +RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK (or RT_DEKU_MQ_LOG (or (and IsChild CanShield) (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS))))) +RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM true + +def RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Basement Water Room Back +DekuBabaSticks (CanKillEnemy RE_WITHERED_DEKU_BABA) +MQDekuWaterRoomTorches HasFireSource +//it blocks the chest while stunned unless you stun it from afar while it's slightly off the ground +RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST (and (CanUse RG_SONG_OF_TIME) (CanPassEnemy RE_BIG_SKULLTULA)) +RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2 CanCutShrubs +RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM (and MQDekuWaterRoomTorches (CanPassEnemy RE_BIG_SKULLTULA (if (CanUse RG_SONG_OF_TIME) ED_CLOSE ED_SHORT_JUMPSLASH))) +RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT (or RT_DEKU_MQ_LOG (or (and IsChild CanShield) (or (CanUse RG_LONGSHOT) (or (HasItem RG_BRONZE_SCALE) (and (CanUse RG_IRON_BOOTS) (or IsAdult (CanUse RG_HOOKSHOT))))))) + +def RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Basement Southwest Room +RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2 CanCutShrubs +//both imply CanKillEnemy(RE_GOHMA_LARVA) +RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM (Here (and (CanKillEnemy RE_MAD_SCRUB) (CanKillEnemy RE_KEESE))) +RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK (Here (and (CanKillEnemy RE_MAD_SCRUB) (CanKillEnemy RE_KEESE))) + +def RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Basement Grave Room +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM (or (CanUse RG_LONGSHOT) (and (CanUse RG_SONG_OF_TIME) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG))) +RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5 CanCutShrubs +RR_DEKU_TREE_MQ_BASEMENT_LEDGE (and IsChild (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW)))) +RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM true +//Using a bow to get past here as adult is a bit precise on standing position but simple, doing as as child requires a side-hop with the bow out to shoot through the torch and may be trick worthy +RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM (Here (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) + +def RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Basement Back Room +RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3 CanCutShrubs +RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM true + +def RR_DEKU_TREE_MQ_BASEMENT_LEDGE SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Basement Ledge +PushedDekuBasementBlock true +RC_DEKU_TREE_MQ_DEKU_SCRUB CanStunDeku +RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3 CanCutShrubs +RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM IsChild +RR_DEKU_TREE_MQ_BASEMENT true +//If strength 0 is shuffled, add hovers or block push to the stick check +//recoiling to skip swim is possible, but would be a trick +RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM (and (Here (or HasFireSource (CanUse RG_STICKS))) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS))) + +def RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree MQ Outside Boss Room +RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2 CanCutShrubs +RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3 CanCutShrubs +RR_DEKU_TREE_MQ_BASEMENT_LEDGE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOOKSHOT)) +RR_DEKU_TREE_BOSS_ENTRYWAY (Here CanReflectNuts) + +def RR_DEKU_TREE_BOSS_ENTRYWAY SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Boss Entryway +RR_DEKU_TREE_BOSS_ROOM true + +def RR_DEKU_TREE_BOSS_EXIT SCENE_DEKU_TREE false RA_DEKU_TREE +Deku Tree Boss Exit +RR_DEKU_TREE_OUTSIDE_BOSS_ROOM (IsDungeonVanilla DEKU_TREE) +RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM (IsDungeonMQ DEKU_TREE) + +def RR_DEKU_TREE_BOSS_ROOM SCENE_DEKU_TREE_BOSS false +Deku Tree Boss Room +DekuTreeClear (CanKillEnemy RE_GOHMA) +RC_QUEEN_GOHMA DekuTreeClear +RC_DEKU_TREE_QUEEN_GOHMA_HEART DekuTreeClear +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1 CanCutShrubs +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2 CanCutShrubs +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3 CanCutShrubs +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4 CanCutShrubs +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5 CanCutShrubs +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6 CanCutShrubs +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7 CanCutShrubs +RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8 CanCutShrubs +RR_DEKU_TREE_BOSS_EXIT true +RR_KF_OUTSIDE_DEKU_TREE @deprioritize DekuTreeClear diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/dodongos_cavern.s b/soh/soh/Enhancements/randomizer/logic/dungeons/dodongos_cavern.s new file mode 100644 index 000000000..0929dddb1 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/dodongos_cavern.s @@ -0,0 +1,437 @@ +def RR_DODONGOS_CAVERN_ENTRYWAY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Entryway +RR_DODONGOS_CAVERN_BEGINNING (IsDungeonVanilla DODONGOS_CAVERN) +RR_DODONGOS_CAVERN_MQ_BEGINNING (IsDungeonMQ DODONGOS_CAVERN) +RR_DEATH_MOUNTAIN_TRAIL true + +def RR_DODONGOS_CAVERN_BEGINNING SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Beginning +RR_DODONGOS_CAVERN_ENTRYWAY true +RR_DODONGOS_CAVERN_LOBBY (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) + +def RR_DODONGOS_CAVERN_LOBBY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Lobby +GossipStoneFairy (and (or (Here CanBreakMudWalls) (HasItem RG_GORONS_BRACELET)) CallGossipFairy) +RC_DODONGOS_CAVERN_MAP_CHEST (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) +RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY (or CanStunDeku (HasItem RG_GORONS_BRACELET)) +RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY (and (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) CallGossipFairy) +RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG (and (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) (CanUse RG_SONG_OF_STORMS)) +RC_DODONGOS_CAVERN_GOSSIP_STONE (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) +RR_DODONGOS_CAVERN_BEGINNING true +RR_DODONGOS_CAVERN_LOBBY_SWITCH IsAdult +RR_DODONGOS_CAVERN_SE_CORRIDOR (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) +RR_DODONGOS_CAVERN_STAIRS_LOWER (HasAccessTo RR_DODONGOS_CAVERN_LOBBY_SWITCH) +RR_DODONGOS_CAVERN_FAR_BRIDGE (HasAccessTo RR_DODONGOS_CAVERN_FAR_BRIDGE) +RR_DODONGOS_CAVERN_BOSS_AREA (Here HasExplosives) +RR_DODONGOS_CAVERN_BOSS_ENTRYWAY false + +def RR_DODONGOS_CAVERN_LOBBY_SWITCH SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Lobby Switch +RR_DODONGOS_CAVERN_LOBBY true +RR_DODONGOS_CAVERN_DODONGO_ROOM true + +def RR_DODONGOS_CAVERN_SE_CORRIDOR SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern SE Corridor +RC_DODONGOS_CAVERN_GS_SCARECROW (or (CanUse RG_SCARECROW) (or (and IsAdult (CanUse RG_LONGSHOT)) (and RT_DC_SCARECROW_GS CanAttack))) +RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4 CanBreakPots +RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5 CanBreakPots +RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6 CanBreakPots +RR_DODONGOS_CAVERN_LOBBY true +RR_DODONGOS_CAVERN_SE_ROOM (Here (or CanBreakMudWalls (or CanAttack (and TakeDamage CanShield)))) +RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS true + +//Shield seems to be in logic to drop a pot on their head as they hit you to blow up the wall +def RR_DODONGOS_CAVERN_SE_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern SE Room +RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS CanAttack +RR_DODONGOS_CAVERN_SE_CORRIDOR true + +def RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Near Lower Lizalfos +RR_DODONGOS_CAVERN_SE_CORRIDOR true +RR_DODONGOS_CAVERN_LOWER_LIZALFOS true + +def RR_DODONGOS_CAVERN_LOWER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Lower Lizalfos +RC_DODONGOS_CAVERN_LIZALFOS_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_LIZALFOS_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_LIZALFOS_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_LIZALFOS_POT_4 CanBreakPots +RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART true +RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) +RR_DODONGOS_CAVERN_DODONGO_ROOM (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) + +def RR_DODONGOS_CAVERN_DODONGO_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Dodongo Room +RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4 CanBreakPots +RR_DODONGOS_CAVERN_LOBBY_SWITCH HasFireSourceWithTorch +RR_DODONGOS_CAVERN_LOWER_LIZALFOS true +RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) + +def RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Near Dodongo Room +RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS CanStunDeku +RR_DODONGOS_CAVERN_DODONGO_ROOM true + +def RR_DODONGOS_CAVERN_STAIRS_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Stairs Lower +RR_DODONGOS_CAVERN_LOBBY true +RR_DODONGOS_CAVERN_STAIRS_UPPER (or HasExplosives (or (HasItem RG_GORONS_BRACELET) (or (CanUse RG_DINS_FIRE) (and RT_DC_STAIRS_WITH_BOW (CanUse RG_FAIRY_BOW))))) +RR_DODONGOS_CAVERN_COMPASS_ROOM (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) + +def RR_DODONGOS_CAVERN_STAIRS_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Stairs Upper +RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS (or (Here HookshotOrBoomerang) (CanUse RG_LONGSHOT)) +RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS (or IsAdult (or CanAttack (and (HasAccessTo RR_DODONGOS_CAVERN_STAIRS_LOWER) (and (CanUse RG_LONGSHOT) RT_DC_VINES_GS)))) +RC_DODONGOS_CAVERN_STAIRCASE_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_STAIRCASE_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_STAIRCASE_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_STAIRCASE_POT_4 CanBreakPots +RR_DODONGOS_CAVERN_STAIRS_LOWER true +RR_DODONGOS_CAVERN_ARMOS_ROOM true + +def RR_DODONGOS_CAVERN_COMPASS_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Compass Room +RC_DODONGOS_CAVERN_COMPASS_CHEST true +RR_DODONGOS_CAVERN_STAIRS_LOWER (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MEGATON_HAMMER) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) + +def RR_DODONGOS_CAVERN_ARMOS_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Armos Room +RR_DODONGOS_CAVERN_STAIRS_UPPER true +RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true + +def RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Bomb Room Lower +RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST true +RC_DODONGOS_CAVERN_BLADE_ROOM_HEART true +RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS CanCutShrubs +RC_DODONGOS_CAVERN_BLADE_GRASS CanCutShrubs +RR_DODONGOS_CAVERN_ARMOS_ROOM true +RR_DODONGOS_CAVERN_2F_SIDE_ROOM (Here (or CanBreakMudWalls (and RT_DC_SCRUB_ROOM (HasItem RG_GORONS_BRACELET)))) +RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) +RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER (or (and IsAdult RT_DC_JUMP) (or (CanUse RG_HOVER_BOOTS) (or (and IsAdult (CanUse RG_LONGSHOT)) (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives CanJumpslash))))) + +def RR_DODONGOS_CAVERN_2F_SIDE_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern 2F Side Room +RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT CanStunDeku +RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT CanStunDeku +RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true + +def RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern First Slingshot Room +RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS CanCutShrubs +RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true +RR_DODONGOS_CAVERN_UPPER_LIZALFOS (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_FAIRY_BOW) RT_DC_SLINGSHOT_SKIP)) + +def RR_DODONGOS_CAVERN_UPPER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Upper Lizalfos +RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART true +RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART true +RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART true +RR_DODONGOS_CAVERN_LOWER_LIZALFOS true +RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) +RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM (Here (CanKillEnemy RE_LIZALFOS ED_CLOSE true 2)) + +def RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Second Slingshot Room +RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2 CanBreakPots +RR_DODONGOS_CAVERN_UPPER_LIZALFOS true +RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_FAIRY_BOW) RT_DC_SLINGSHOT_SKIP)) + +def RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Bomb Room Upper +RC_DODONGOS_CAVERN_BOMB_BAG_CHEST true +RC_DODONGOS_CAVERN_BLADE_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_BLADE_POT_2 CanBreakPots +RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER true +RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM true +RR_DODONGOS_CAVERN_FAR_BRIDGE true + +def RR_DODONGOS_CAVERN_FAR_BRIDGE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Far Bridge +RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST (Here CanBreakMudWalls) +RR_DODONGOS_CAVERN_LOBBY true +RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER true + +def RR_DODONGOS_CAVERN_BOSS_AREA SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Boss Region +FairyPot true +RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS CanCutShrubs +RR_DODONGOS_CAVERN_LOBBY true +RR_DODONGOS_CAVERN_BACK_ROOM (Here CanBreakMudWalls) +RR_DODONGOS_CAVERN_BOSS_ENTRYWAY true + +def RR_DODONGOS_CAVERN_BACK_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Back Room +RC_DODONGOS_CAVERN_GS_BACK_ROOM CanAttack +RC_DODONGOS_CAVERN_BACK_ROOM_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_BACK_ROOM_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_BACK_ROOM_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_BACK_ROOM_POT_4 CanBreakPots +RR_DODONGOS_CAVERN_BOSS_AREA true + +def RR_DODONGOS_CAVERN_MQ_BEGINNING SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Beginning +RR_DODONGOS_CAVERN_ENTRYWAY true +RR_DODONGOS_CAVERN_MQ_LOBBY (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) + +def RR_DODONGOS_CAVERN_MQ_LOBBY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Lobby +RC_DODONGOS_CAVERN_MQ_MAP_CHEST (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET)) +RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR CanStunDeku +RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT CanStunDeku +RR_DODONGOS_CAVERN_MQ_BEGINNING true +RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) +RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE (Here (or BlastOrSmash (HasItem RG_GORONS_BRACELET))) +RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER (Here (or BlastOrSmash (HasItem RG_GORONS_BRACELET))) +//strength 1 and bunny speed works too +RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE (or (Here CanBreakMudWalls) (Here (and (HasItem RG_GORONS_BRACELET) TakeDamage))) +RR_DODONGOS_CAVERN_MQ_POES_ROOM IsAdult +RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH (Here (or HasExplosives (and ClearMQDCUpperLobbyRocks (and (HasItem RG_GORONS_BRACELET) (or (and IsAdult RT_DC_MQ_ADULT_EYES) (and IsChild RT_DC_MQ_CHILD_EYES)))))) + +def RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Gossip Stone +GossipStoneFairy CallGossipFairy +RC_DODONGOS_CAVERN_GOSSIP_STONE true +RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY CallGossipFairy +RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RR_DODONGOS_CAVERN_MQ_LOBBY true + +def RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Mouth Side Bridge +ClearMQDCUpperLobbyRocks (or BlastOrSmash (CanUse RG_DINS_FIRE)) +RR_DODONGOS_CAVERN_MQ_LOBBY true +RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER ClearMQDCUpperLobbyRocks +//Bunny hood jump + jumpslash can also make it directly from the raising platform +//RANDOTODO is this possible with equip swapped hammer? +//it is possible to use bunny hood speed, hovers and a jumpslash to go between here and the other bridge (included with TORCH_ROOM_LOWER), but this would be a trick +RR_DODONGOS_CAVERN_MQ_POES_ROOM (or (CanUse RG_HOVER_BOOTS) (and RT_DC_MQ_CHILD_BOMBS (and CanJumpslashExceptHammer TakeDamage))) + +def RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Stairs Past Mud Wall +DekuBabaSticks CanGetDekuBabaSticks +RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM (and (CanUse RG_SONG_OF_TIME) (CanGetEnemyDrop RE_GOLD_SKULLTULA)) +RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER (or HasExplosives (or (and (HasItem RG_GORONS_BRACELET) (or (CanUse RG_STICKS) RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH)) (or (CanUse RG_DINS_FIRE) (and RT_DC_STAIRS_WITH_BOW (CanUse RG_FAIRY_BOW))))) +RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER true + +def RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Stairs Lower +RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4 CanBreakPots +RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2 CanBreakCrates +RR_DODONGOS_CAVERN_MQ_LOBBY true +//This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick +RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER (Here (or HasExplosives (or (CanUse RG_DINS_FIRE) (and RT_DC_STAIRS_WITH_BOW (CanUse RG_FAIRY_BOW))))) +RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL (Here CanBreakMudWalls) + +def RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Stairs Upper +RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE CanStunDeku +RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4 CanBreakCrates +RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER true +RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS (or (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOVER_BOOTS)) + +def RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Past Big Skulltulas +RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER (or (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOVER_BOOTS)) +RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER TakeDamage +//If some case comes up where you can directly (void?)warp here without going through Dodongo room or climbing up from below, +//the commented out logic is to handle going down and reclimbing to get silver rupees. A new eventVar will need decalring to handle this. +//(and CanClimbDCStairs (or (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOVER_BOOTS))) +RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM true + +def RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Dodongo Room +RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST (or (CanKillEnemy RE_DODONGO) (HasItem RG_GORONS_BRACELET)) +RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1 CanCutShrubs +RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2 CanCutShrubs +RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3 CanCutShrubs +RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4 CanCutShrubs +RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS true +RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER (Here (or (CanKillEnemy RE_DODONGO) (HasItem RG_GORONS_BRACELET))) + +def RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Torch Puzzle Lower +ClearMQDCUpperLobbyRocks (and (or (and IsAdult RT_DC_JUMP) (CanUse RG_HOVER_BOOTS)) (CanUse RG_STICKS)) +RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT (CanUse RG_BOOMERANG) +RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART true +RR_DODONGOS_CAVERN_MQ_LOBBY TakeDamage +RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM true +//torch checks here need strength 0 with sticks when that is implemented +RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM HasFireSourceWithTorch +//Includes an implied CanPass(RE_BIG_SKULLTULA) +RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM (Here HasFireSourceWithTorch) +RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER (or (and IsAdult RT_DC_JUMP) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) +//Implies access to RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM from here +RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS (and (CanUse RG_STICKS) (HasItem RG_GORONS_BRACELET)) + +def RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Torch Puzzle Lower +RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2 CanBreakPots +RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER (CanPassEnemy RE_BIG_SKULLTULA) +//Requires stregnth 0, If you can somehow warp into this room, add logic->CanPassEnemy(RE_BIG_SKULLTULA) +RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS (or (and HasFireSource (HasItem RG_GORONS_BRACELET)) CanBreakMudWalls) + +def RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Larvae Room +//implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts +RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST true +//implied logic->CanKillEnemy(RE_GOLD_SKULTULLA) based on entry reqs. Add crate logic when BONKO is added +RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM CanBreakCrates +RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6 CanBreakCrates +//implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts +RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER true + +def RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Before Upper Lizalfos +//Implied CanGetEnemyDrop(RE_GOLD_SKULLTULA) +RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM BlastOrSmash +RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4 CanBreakPots +RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART BlastOrSmash +//Falling down gets you stuck with nothing there, not a useful exit for logic +RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM (Here (CanKillEnemy RE_LIZALFOS)) +RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM (Here (CanKillEnemy RE_LIZALFOS)) + +def RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Before Upper Lizalfos +RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2 CanBreakCrates +RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS true +RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER (or IsAdult (Here (or BlastOrSmash (and CanAttack (HasItem RG_GORONS_BRACELET))))) + +def RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Torch Puzzle Upper +ClearMQDCUpperLobbyRocks (or CanDetonateUprightBombFlower (CanUse RG_MEGATON_HAMMER)) +RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST true +RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT CanBreakPots +RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT CanBreakPots +RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE ClearMQDCUpperLobbyRocks +RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER true +RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM true + +def RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Lower Right Side +RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS (and (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET)) CanStunDeku) +RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4 CanBreakPots +RR_DODONGOS_CAVERN_MQ_LOBBY true +RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS (and (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) CanHitEyeTargets) + +def RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Lower Lizalfos +RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART true +RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE (Here (CanKillEnemy RE_LIZALFOS)) +RR_DODONGOS_CAVERN_MQ_POES_ROOM (Here (CanKillEnemy RE_LIZALFOS)) + +def RR_DODONGOS_CAVERN_MQ_POES_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Poes Room +//If you can get to the locked part of POES_ROOM without a way to open it or passing the chest, this will need it's own room +RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST true +RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM (and (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG true)) +RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3 CanBreakPots +RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4 CanBreakPots +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7 CanBreakCrates +RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8 CanBreakCrates +RR_DODONGOS_CAVERN_MQ_LOBBY (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) +RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS true +RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM (Here (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET))) + +def RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Mad Scrub Room +//Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add +//&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) +RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG true) +//Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add +//&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) +RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1 CanCutShrubs +RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2 CanCutShrubs +RR_DODONGOS_CAVERN_MQ_POES_ROOM (Here (and (CanKillEnemy RE_FIRE_KEESE) (CanKillEnemy RE_MAD_SCRUB))) + +def RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Behind Mouth +RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT CanBreakPots +RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT CanBreakPots +RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT CanBreakPots +RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT CanBreakPots +RR_DODONGOS_CAVERN_MQ_LOBBY true +//using pots to get past the fire is in default logic. if stregnth 0 gets added, this will need to be: +//stregnth 0 || explosives, or projectiles if str0 isn't needed to pull graves (it's a narrow shot though, may be trick worthy) +RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE true +RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE IsAdult + +def RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ Back Behind Fire +//pulling the grave isn't required, as you can open the chest through it +RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST true +RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1 CanBreakPots +RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2 CanBreakPots +RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS CanCutShrubs +RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH CanAttack +//There's a trick N64 rolls into the child eyes trick for using armos blow up the bomb flowers when dying, which would be killing an armos +RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE (or (Here CanDetonateBombFlowers) (Here CanAttack)) + +def RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern MQ BossArea +FairyPot true +//even if you somehow warp to BACK_BEHIND_FIRE, if you can kill the skull at range, you can get to BEHIND_MOUTH +RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA (or (CanGetEnemyDrop RE_GOLD_SKULLTULA) (or (HasItem RG_GORONS_BRACELET) (Here (or (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and IsAdult (CanUse RG_HOVER_BOOTS)))))) +RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT CanBreakPots +RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT CanBreakPots +RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS CanCutShrubs +RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE true +//if strength 0 prevents grave pulls, add it here +RR_DODONGOS_CAVERN_BOSS_ENTRYWAY true + +def RR_DODONGOS_CAVERN_BOSS_ENTRYWAY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Boss Entryway +RR_DODONGOS_CAVERN_BOSS_ROOM true + +def RR_DODONGOS_CAVERN_BOSS_EXIT SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN +Dodongos Cavern Boss Exit +RR_DODONGOS_CAVERN_BOSS_AREA (IsDungeonVanilla DODONGOS_CAVERN) +RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH (IsDungeonMQ DODONGOS_CAVERN) + +def RR_DODONGOS_CAVERN_BOSS_ROOM SCENE_DODONGOS_CAVERN_BOSS false +Dodongos Cavern Boss Room +DodongosCavernClear (and (Here (or HasExplosives (if RT_DC_HAMMER_FLOOR (or (CanUse RG_MEGATON_HAMMER) (and RT_BLUE_FIRE_MUD_WALLS BlueFire)) (and RT_BLUE_FIRE_MUD_WALLS (CanUse RG_BOTTLE_WITH_BLUE_FIRE))))) (CanKillEnemy RE_KING_DODONGO)) +RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST true +RC_DODONGOS_CAVERN_KING_DODONGO_HEART DodongosCavernClear +RC_KING_DODONGO DodongosCavernClear +RR_DODONGOS_CAVERN_BOSS_EXIT true +RR_DEATH_MOUNTAIN_TRAIL @deprioritize DodongosCavernClear diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/fire_temple.s b/soh/soh/Enhancements/randomizer/logic/dungeons/fire_temple.s new file mode 100644 index 000000000..f3e3da099 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/fire_temple.s @@ -0,0 +1,553 @@ +def RR_FIRE_TEMPLE_ENTRYWAY SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Entryway +RR_FIRE_TEMPLE_FIRST_ROOM (IsDungeonVanilla FIRE_TEMPLE) +RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER (IsDungeonMQ FIRE_TEMPLE) +RR_DMC_CENTRAL_LOCAL true + +def RR_FIRE_TEMPLE_FIRST_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple First Room +RR_FIRE_TEMPLE_ENTRYWAY true +RR_FIRE_TEMPLE_NEAR_BOSS_ROOM (>= FireTimer 24) +RR_FIRE_TEMPLE_LOOP_ENEMIES (and (Here (CanUse RG_MEGATON_HAMMER)) (or (SmallKeys RR_FIRE_TEMPLE 8) (not IsFireLoopLocked))) +RR_FIRE_TEMPLE_LOOP_EXIT true +RR_FIRE_TEMPLE_BIG_LAVA_ROOM (and (SmallKeys RR_FIRE_TEMPLE 2) (>= FireTimer 24)) + +def RR_FIRE_TEMPLE_NEAR_BOSS_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Near Boss Room +FairyPot (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) +RC_FIRE_TEMPLE_NEAR_BOSS_CHEST true +RC_FIRE_TEMPLE_NEAR_BOSS_POT_1 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) +RC_FIRE_TEMPLE_NEAR_BOSS_POT_2 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) +RC_FIRE_TEMPLE_NEAR_BOSS_POT_3 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) +RC_FIRE_TEMPLE_NEAR_BOSS_POT_4 (and CanBreakPots (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) +RR_FIRE_TEMPLE_FIRST_ROOM true +RR_FIRE_TEMPLE_BOSS_ENTRYWAY (and IsAdult (or RT_FIRE_BOSS_DOOR_JUMP (or (Here (CanUse RG_MEGATON_HAMMER)) (CanUse RG_HOVER_BOOTS)))) + +def RR_FIRE_TEMPLE_LOOP_ENEMIES SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Loop Enemies +RR_FIRE_TEMPLE_FIRST_ROOM (or (SmallKeys RR_FIRE_TEMPLE 8) (not IsFireLoopLocked)) +RR_FIRE_TEMPLE_LOOP_TILES (Here (and (CanKillEnemy RE_TORCH_SLUG) (CanKillEnemy RE_FIRE_KEESE))) + +def RR_FIRE_TEMPLE_LOOP_TILES SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Loop Tiles +RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP CanAttack +RR_FIRE_TEMPLE_LOOP_ENEMIES true +RR_FIRE_TEMPLE_LOOP_FLARE_DANCER true + +def RR_FIRE_TEMPLE_LOOP_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Loop Flare Dancer +RC_FIRE_TEMPLE_FLARE_DANCER_CHEST (and (or HasExplosives (CanUse RG_MEGATON_HAMMER)) IsAdult) +RR_FIRE_TEMPLE_LOOP_TILES true +RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH (Here (CanKillEnemy RE_FLARE_DANCER)) + +def RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Loop Hammer Switch +FireLoopSwitch (CanUse RG_MEGATON_HAMMER) +RR_FIRE_TEMPLE_LOOP_FLARE_DANCER true +RR_FIRE_TEMPLE_LOOP_GORON_ROOM FireLoopSwitch + +def RR_FIRE_TEMPLE_LOOP_GORON_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Loop Goron Room +RC_FIRE_TEMPLE_BOSS_KEY_CHEST true +RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH FireLoopSwitch +RR_FIRE_TEMPLE_LOOP_EXIT FireLoopSwitch + +def RR_FIRE_TEMPLE_LOOP_EXIT SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Loop Exit +RR_FIRE_TEMPLE_FIRST_ROOM true +RR_FIRE_TEMPLE_LOOP_GORON_ROOM FireLoopSwitch + +def RR_FIRE_TEMPLE_BIG_LAVA_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Big Lava Room +RC_FIRE_TEMPLE_BIG_LAVA_POT_1 CanBreakPots +RC_FIRE_TEMPLE_BIG_LAVA_POT_2 CanBreakPots +RC_FIRE_TEMPLE_BIG_LAVA_POT_3 CanBreakPots +RR_FIRE_TEMPLE_FIRST_ROOM (SmallKeys RR_FIRE_TEMPLE 2) +RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON true +RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES (and IsAdult (or (CanUse RG_SONG_OF_TIME) RT_FIRE_SOT)) +RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON (and IsAdult HasExplosives) +RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM (SmallKeys RR_FIRE_TEMPLE 3) + +def RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Big Lava Room North Goron +RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST true +RR_FIRE_TEMPLE_BIG_LAVA_ROOM true + +def RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Big Lava Room North Tiles +//RANDOTODO check if child can reach +RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM (or (and IsAdult CanAttack) HookshotOrBoomerang) +RR_FIRE_TEMPLE_BIG_LAVA_ROOM true + +def RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Big Lava Room South Goron +RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST true +RR_FIRE_TEMPLE_BIG_LAVA_ROOM true + +def RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Fire Pillar Room +RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART (>= FireTimer 56) +RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART (>= FireTimer 56) +RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART (>= FireTimer 56) +RR_FIRE_TEMPLE_BIG_LAVA_ROOM (SmallKeys RR_FIRE_TEMPLE 3) +RR_FIRE_TEMPLE_SHORTCUT_ROOM (and (>= FireTimer 56) (SmallKeys RR_FIRE_TEMPLE 4)) + +def RR_FIRE_TEMPLE_SHORTCUT_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Shortcut Room +RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST (Here true) +RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM (SmallKeys RR_FIRE_TEMPLE 4) +RR_FIRE_TEMPLE_SHORTCUT_CLIMB (Here true) +RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER (and IsAdult (and (or (HasItem RG_GORONS_BRACELET) RT_FIRE_STRENGTH) (or HasExplosives (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (CanUse RG_FAIRY_SLINGSHOT)))))) + +def RR_FIRE_TEMPLE_SHORTCUT_CLIMB SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Shortcut Climb +RR_FIRE_TEMPLE_SHORTCUT_ROOM true +RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER true + +def RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Boulder Maze Lower +RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST true +RC_FIRE_TEMPLE_GS_BOULDER_MAZE (and HasExplosives (or IsAdult HookshotOrBoomerang)) +RR_FIRE_TEMPLE_SHORTCUT_ROOM true +RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM true +RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM (SmallKeys RR_FIRE_TEMPLE 5 7) +RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER false + +def RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Boulder Maze Lower Side Room +RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST true +RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER true + +def RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple East Central Room +RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART true +RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART true +RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART true +RR_FIRE_TEMPLE_BIG_LAVA_ROOM TakeDamage +RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER (SmallKeys RR_FIRE_TEMPLE 5 8) +RR_FIRE_TEMPLE_FIRE_WALL_CHASE (SmallKeys RR_FIRE_TEMPLE 6 8) +RR_FIRE_TEMPLE_MAP_AREA (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) + +def RR_FIRE_TEMPLE_FIRE_WALL_CHASE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Fire Wall Chase +RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART (and (>= FireTimer 24) (or IsAdult (CanUse RG_BOOMERANG))) +RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART (and (>= FireTimer 24) (or IsAdult (CanUse RG_BOOMERANG))) +RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART (>= FireTimer 24) +RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM (and (>= FireTimer 24) (SmallKeys RR_FIRE_TEMPLE 6 8)) +RR_FIRE_TEMPLE_MAP_AREA IsAdult +RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER (and (>= FireTimer 24) IsAdult) +RR_FIRE_TEMPLE_CORRIDOR (and (>= FireTimer 24) (and IsAdult (SmallKeys RR_FIRE_TEMPLE 7))) + +def RR_FIRE_TEMPLE_MAP_AREA SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Map Region +RC_FIRE_TEMPLE_MAP_CHEST true +RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM true + +def RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Boulder Maze Upper +RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST true +RR_FIRE_TEMPLE_SHORTCUT_CLIMB HasExplosives +RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER true +RR_FIRE_TEMPLE_FIRE_WALL_CHASE true +RR_FIRE_TEMPLE_SCARECROW_ROOM (or (CanUse RG_SCARECROW) (and RT_FIRE_SCARECROW (and IsAdult (CanUse RG_LONGSHOT)))) + +def RR_FIRE_TEMPLE_SCARECROW_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Scarecrow Room +RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB (or CanJumpslashExceptHammer (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (or HasExplosives (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (CanUse RG_DINS_FIRE))))))) +RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER true +RR_FIRE_TEMPLE_EAST_PEAK true + +def RR_FIRE_TEMPLE_EAST_PEAK SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple East Peak +RC_FIRE_TEMPLE_SCARECROW_CHEST true +RC_FIRE_TEMPLE_GS_SCARECROW_TOP CanUseProjectile +RR_FIRE_TEMPLE_SCARECROW_ROOM true +RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM TakeDamage + +def RR_FIRE_TEMPLE_CORRIDOR SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Corridor +RR_FIRE_TEMPLE_FIRE_WALL_CHASE (SmallKeys RR_FIRE_TEMPLE 7) +RR_FIRE_TEMPLE_FIRE_MAZE_ROOM true + +def RR_FIRE_TEMPLE_FIRE_MAZE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Fire Maze Room +RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1 CanBreakPots +RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2 CanBreakPots +RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3 CanBreakPots +RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4 CanBreakPots +RR_FIRE_TEMPLE_CORRIDOR true +RR_FIRE_TEMPLE_FIRE_MAZE_UPPER (CanUse RG_HOVER_BOOTS) +RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM true +RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER (SmallKeys RR_FIRE_TEMPLE 8) +RR_FIRE_TEMPLE_LATE_FIRE_MAZE (or RT_FIRE_FLAME_MAZE false) + +def RR_FIRE_TEMPLE_FIRE_MAZE_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Fire Maze Upper +RR_FIRE_TEMPLE_NEAR_BOSS_ROOM (CanUse RG_MEGATON_HAMMER) +RR_FIRE_TEMPLE_FIRE_MAZE_ROOM true +RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER (CanUse RG_MEGATON_HAMMER) + +def RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Fire Maze Side Room +RC_FIRE_TEMPLE_COMPASS_CHEST true +RR_FIRE_TEMPLE_FIRE_MAZE_ROOM true + +def RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple West Central Lower +RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST (Here (and (or (CanUse RG_SONG_OF_TIME) RT_RUSTED_SWITCHES) (CanUse RG_MEGATON_HAMMER))) +RR_FIRE_TEMPLE_FIRE_MAZE_ROOM (SmallKeys RR_FIRE_TEMPLE 8) +RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER (and IsAdult (CanUse RG_SONG_OF_TIME)) +RR_FIRE_TEMPLE_LATE_FIRE_MAZE true + +def RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple West Central Upper +RR_FIRE_TEMPLE_BOSS_ENTRYWAY false +RR_FIRE_TEMPLE_FIRE_MAZE_UPPER true +RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER true + +def RR_FIRE_TEMPLE_LATE_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Late Fire Maze +RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1 CanBreakPots +RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2 CanBreakPots +RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3 CanBreakPots +RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4 CanBreakPots +RR_FIRE_TEMPLE_FIRE_MAZE_ROOM false +RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER true +RR_FIRE_TEMPLE_UPPER_FLARE_DANCER HasExplosives + +def RR_FIRE_TEMPLE_UPPER_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Upper Flare Dancer +RR_FIRE_TEMPLE_LATE_FIRE_MAZE (Here (CanKillEnemy RE_FLARE_DANCER)) +RR_FIRE_TEMPLE_WEST_CLIMB (Here (CanKillEnemy RE_FLARE_DANCER)) + +def RR_FIRE_TEMPLE_WEST_CLIMB SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple West Climb +RR_FIRE_TEMPLE_UPPER_FLARE_DANCER true +RR_FIRE_TEMPLE_WEST_PEAK CanUseProjectile + +def RR_FIRE_TEMPLE_WEST_PEAK SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple West Peak +RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST true +RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER TakeDamage +RR_FIRE_TEMPLE_WEST_CLIMB true +RR_FIRE_TEMPLE_HAMMER_RETURN_PATH (CanUse RG_MEGATON_HAMMER) + +def RR_FIRE_TEMPLE_HAMMER_RETURN_PATH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Hammer Return Path +RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1 CanBreakSmallCrates +RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2 CanBreakSmallCrates +RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE (CanUse RG_MEGATON_HAMMER) + +def RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Above Fire Maze +RR_FIRE_TEMPLE_HAMMER_RETURN_PATH true +RR_FIRE_TEMPLE_FIRE_MAZE_UPPER (CanUse RG_MEGATON_HAMMER) + +//potentially dangerous temp flag on the first room's torches, should be made permanent if possible +def RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ First Room Lower +RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1 CanBreakPots +RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2 CanBreakPots +RR_FIRE_TEMPLE_ENTRYWAY true +RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH true +RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER (or IsAdult (CanUse RG_HOOKSHOT)) +RR_FIRE_TEMPLE_MQ_STALFOS_ROOM (SmallKeys RR_FIRE_TEMPLE 5) + +def RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ First Room Upper +RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER true +RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM HasFireSource +RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM (Here (CanUse RG_MEGATON_HAMMER)) + +def RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Map Room South +RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST (CanKillEnemy RE_LIKE_LIKE) +RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER (Here (CanKillEnemy RE_LIKE_LIKE)) +RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE OpenedLowestGoronCage + +def RR_FIRE_TEMPLE_MQ_STALFOS_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Stalfos Room +RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER true +RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) + +def RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Iron Knuckle Room +FairyPot true +RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY (CanUse RG_SUNS_SONG) +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1 CanBreakPots +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2 CanBreakPots +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3 CanBreakPots +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4 CanBreakPots +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5 CanBreakPots +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6 CanBreakPots +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7 CanBreakPots +RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8 CanBreakPots +RR_FIRE_TEMPLE_MQ_STALFOS_ROOM true +RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER (Here (CanKillEnemy RE_IRON_KNUCKLE)) + +def RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Lower Flare Dancer +RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST (and (or IsAdult (CanUse RG_HOOKSHOT)) (Here (CanKillEnemy RE_FLARE_DANCER))) +RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM true +RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH (Here (CanKillEnemy RE_FLARE_DANCER)) + +def RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Map Room North +OpenedLowestGoronCage (CanUse RG_MEGATON_HAMMER) +RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER true +RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE OpenedLowestGoronCage + +def RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Map Room Cage +RC_FIRE_TEMPLE_MQ_MAP_CHEST true +RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH OpenedLowestGoronCage +RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH OpenedLowestGoronCage + +def RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Near Boss Room +//If we're using the south torch as the initial torch, or using FAs, we either have to cross to the north to remove the crate, or use a trick to ignore it +RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST (and (> FireTimer 25) (and RT_FIRE_MQ_NEAR_BOSS (or (CanUse RG_FIRE_ARROWS) (and IsAdult (and (CanUse RG_DINS_FIRE) (CanUse RG_FAIRY_BOW)))))) +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1 (and (> FireTimer 25) CanBreakCrates) +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2 (and (> FireTimer 25) CanBreakCrates) +RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER true +//Child cannot make it to the north side torches without a hook without specifically bunny hood speed + hover boots +RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH (and (> FireTimer 32) (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +RR_FIRE_TEMPLE_BOSS_ENTRYWAY (and (>= FireTimer 15) (or (and IsAdult (or RT_FIRE_BOSS_DOOR_JUMP (CanUse RG_HOVER_BOOTS))) (or (and IsAdult HitFireTemplePlatform) (and HitFireTemplePlatform (CanUse RG_HOVER_BOOTS))))) + +//This room assumes tunic logic is handled on entry. +//Covers the upper section too, as all methods to reach this can climb up somehow +def RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Near Boss Room North +//If we have FAs, we can just remove the crate and use those to light the torches. +//otherwise, with Dins, we first light them with dins and then either use a bow shot or to cross back over to light the other torch +//Valid ways across are adult+hovers, bunny+hovers, longshot or running through the lava and then climbing back up as adult (child can't reach the ledge). +//The Damage logic here is for jumping down and running across the lava to get in dins range of the south torch +//Fairies cannot be used for this as it is time sensetive, and NL is only useful with sticks as it disables other magic while in use, so it's tunic or raw damage taking ability. +//testing tells me you take 3 ticks of lava damage, which is 12 internal damage or 3/4 of a heart at x1 damage multiplier, performing this run +//logic->EffectiveHealth() works in half hearts for whatever reason, meaning this needs a deeper refactor to be perfect, but it should be good enough for now +RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_LONGSHOT) (and IsAdult (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_GORON_TUNIC) (or (>= EffectiveHealth 2) (and (CanUse RG_NAYRUS_LOVE) (CanUse RG_STICKS)))))))))) +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1 CanBreakPots +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2 CanBreakPots +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1 (and (> FireTimer 25) CanBreakCrates) +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2 (and (> FireTimer 25) CanBreakCrates) +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3 CanBreakCrates +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4 CanBreakCrates +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5 CanBreakCrates +RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6 CanBreakCrates +RR_FIRE_TEMPLE_NEAR_BOSS_ROOM true + +def RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Big Lava Room +//I'm currently assuming the oversight version of RT_FIRE_MQ_BK_CHEST for the fire timer logic +RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST (and (>= FireTimer 40) (and HasFireSource (and HasExplosives (or (CanUse RG_HOOKSHOT) (and IsAdult RT_FIRE_MQ_BLOCKED_CHEST))))) +//implies CanGetEnemyDrop(RE_GOLD_SKULLTULA) +RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR (and (>= FireTimer 20) (CanUse RG_MEGATON_HAMMER)) +RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT CanBreakPots +RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT CanBreakPots +RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT (and (>= FireTimer 40) (or (CanUse RG_HOOKSHOT) (and RT_FIRE_MQ_BLOCKED_CHEST (or (and IsAdult CanBreakPots) (CanUse RG_BOOMERANG))))) +RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER (>= FireTimer 20) +//This room assumes Goron Tunic until looser tunic requirements tricks are made +RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM (and (CanUse RG_GORON_TUNIC) (SmallKeys RR_FIRE_TEMPLE 2)) +RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM (and HasFireSource (and (or (and (CanUse RG_FAIRY_BOW) (>= FireTimer 25)) (and RT_FIRE_MQ_BK_CHEST (>= FireTimer 50))) (or (CanUse RG_HOOKSHOT) (and IsAdult RT_FIRE_SOT)))) + +def RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Torch Firewall Room +FairyPot (CanUse RG_HOOKSHOT) +RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST (CanUse RG_HOOKSHOT) +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1 HookshotOrBoomerang +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2 HookshotOrBoomerang +RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM true + +def RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Elevator Room +RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART true +RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART true +RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART true +RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM true +RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM true + +def RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Big Torch Room +RR_FIRE_TEMPLE_MQ_LOWER_MAZE (or (and HasFireSource (CanUse RG_HOOKSHOT)) (and RT_FIRE_MQ_CLIMB (CanUse RG_HOVER_BOOTS))) +RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM (CanUse RG_GORON_TUNIC) +RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE OpenedUpperFireShortcut + +def RR_FIRE_TEMPLE_MQ_LOWER_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Lower Maze +//Check handled on both floors +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST (and HasExplosives RT_FIRE_MQ_MAZE_SIDE_ROOM) +RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM true +//Explosives can also reach this room. Chus is relatively simple, they need to detonate on the first horizontal bar up from the floor while horizontally near the switch, but bombs are much harder +RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE (Here CanJumpslash) +//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks +RR_FIRE_TEMPLE_MQ_UPPER_MAZE (and HasExplosives (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_HOOKSHOT))) + +def RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Lower Maze Crate Cage +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST true +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3 CanBreakCrates +RR_FIRE_TEMPLE_MQ_LOWER_MAZE true +//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks +RR_FIRE_TEMPLE_MQ_UPPER_MAZE (and IsAdult (or (and RT_FIRE_MQ_MAZE_HOVERS (CanUse RG_HOVER_BOOTS)) RT_FIRE_MQ_MAZE_JUMP)) + +def RR_FIRE_TEMPLE_MQ_UPPER_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Upper Maze +RR_FIRE_TEMPLE_MQ_LOWER_MAZE true +//this cage is much more lenient than the lower cage as the switch is close to the front. sling, rang and bow all hit the switch easily, though might be too unintuitive for default logic +//This shouldn't come up in most cases anyway as most methods to get here need either a melee weapon or explosives +RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE (Here (or CanJumpslash HasExplosives)) +RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT HasExplosives +//Implies RR_FIRE_TEMPLE_MQ_LOWER_MAZE access +RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB (and HasExplosives (and (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) (CanUse RG_SONG_OF_TIME))))) +RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM (and (SmallKeys RR_FIRE_TEMPLE 3) (CanUse RG_GORON_TUNIC)) + +def RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Upper Maze Box Cage +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST true +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1 CanBreakSmallCrates +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2 CanBreakSmallCrates +//Assumes maze access +RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST HasExplosives +RR_FIRE_TEMPLE_MQ_UPPER_MAZE true + +def RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Maze Shortcut +OpenedUpperFireShortcut (CanUse RG_MEGATON_HAMMER) +RR_FIRE_TEMPLE_MQ_UPPER_MAZE true +RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE OpenedUpperFireShortcut + +def RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Maze Shortcut Cage +RC_FIRE_TEMPLE_MQ_COMPASS_CHEST OpenedUpperFireShortcut +RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1 (and OpenedUpperFireShortcut CanBreakCrates) +RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2 (and OpenedUpperFireShortcut CanBreakCrates) +RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3 (and OpenedUpperFireShortcut CanBreakCrates) +RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4 (and OpenedUpperFireShortcut CanBreakCrates) +RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5 (and OpenedUpperFireShortcut CanBreakCrates) +RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6 (and OpenedUpperFireShortcut CanBreakCrates) +RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT OpenedUpperFireShortcut +RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM OpenedUpperFireShortcut + +def RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Burning Block Climb +//WallFairy (CanUse RG_HOOKSHOT) +//There's definitely ways to do this hammerless, but with one points on it's a trick +RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE (and (CanUse RG_HOOKSHOT) (CanUse RG_MEGATON_HAMMER)) +RR_FIRE_TEMPLE_MQ_UPPER_MAZE true +RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM TakeDamage + +def RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Narrow Path Room +FairyPot true +RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1 CanBreakPots +RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2 CanBreakPots +RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3 CanBreakPots +RR_FIRE_TEMPLE_MQ_LOWER_MAZE true +RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM TakeDamage + +def RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ High Torch Room +RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1 CanBreakPots +RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2 CanBreakPots +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5 CanBreakCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1 CanBreakSmallCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2 CanBreakSmallCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3 CanBreakSmallCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4 CanBreakSmallCrates +RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5 CanBreakSmallCrates +RR_FIRE_TEMPLE_MQ_UPPER_MAZE (SmallKeys RR_FIRE_TEMPLE 3) +RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM true +//Child has issues navigating the higher points of this room without an equip swapped hookshot +RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE (and (Here (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT)))) (or IsAdult (CanUse RG_HOOKSHOT))) + +def RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ South Fire Maze +RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER HasExplosives +RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT CanBreakPots +RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT CanBreakPots +RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM HitFireTemplePlatform +RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM true +RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS (or IsAdult (or (CanUse RG_SONG_OF_TIME) (CanUse RG_HOVER_BOOTS))) +//Hover boots get there via the platforms +RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE RT_FIRE_MQ_FLAME_MAZE +RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE OpenedFireMQFireMazeDoor + +def RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Fire Maze Platforms +HitFireTemplePlatform (CanUse RG_MEGATON_HAMMER) +OpenedFireMQFireMazeDoor (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_HOOKSHOT)) +RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE true +RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE (or (CanUse RG_SONG_OF_TIME) (CanUse RG_HOVER_BOOTS)) +//trick to get to RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE with hovers + taking damage is plausible + +def RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ North Fire Maze +RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA) +RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT (CanUse RG_BOOMERANG) +RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT CanBreakPots +RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT CanBreakPots +RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE (or IsAdult RT_FIRE_MQ_FLAME_MAZE) +RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE RT_FIRE_MQ_FLAME_MAZE + +def RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ West Fire Maze +RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL true +RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE RT_FIRE_MQ_FLAME_MAZE + +//this area exists for the pots in case we void warp to the top of fire somehow, because there's no way to get back the way we came +def RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Fire Maze Past Wall +RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT CanBreakPots +RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT CanBreakPots +RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT (CanUse RG_BOOMERANG) +RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER true + +def RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ North Fire Maze +RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY (CanKillEnemy RE_FLARE_DANCER) +RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL (CanKillEnemy RE_FLARE_DANCER) +RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM (and (CanKillEnemy RE_FLARE_DANCER) (SmallKeys RR_FIRE_TEMPLE 4)) + +def RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Scarecrow Room +//This requires nothing in N64 logic, but is tight enough to need rollspam with the one-point on which is stricter than I would normally consider in logic +//Child basically needs the scarecrow or a bunny hood though due to a worse ledge grab. +RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE (or IsAdult (CanUse RG_SCARECROW)) +//The dropdown here is unusual in that it hits 1 of 3 locations: RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS and the section of RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS with the hammer switch +//Using this dropdown is in N64 logic elsewhere, but not here, probably because it requires good foreknowlege to determine where to land +//This would be a logical method to reach the hammer switch without hookshot, but it practically requires access to the area that switch unlocks already. It could also be first child access to PLATFORMS if tricks ever enable that +//If a practical use for this drop is found, it should be made a trick +RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER (SmallKeys RR_FIRE_TEMPLE 4) +RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS (and (Here (CanUse RG_MEGATON_HAMMER)) (SmallKeys RR_FIRE_TEMPLE 5)) + +//The peg knocked down from here could have logical implications for child in the fire maze if tricks to gain height like bomb jumps exist +def RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple MQ Collapsed Stairs +//If someone manages to make a trick to get here from fire maze, this needs to be in a separate room as the door back is barred +RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE (CanUse RG_HOOKSHOT) +RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS (and (CanUse RG_HOOKSHOT) (Here (CanUse RG_MEGATON_HAMMER))) +RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM (and IsAdult (CanUse RG_HOOKSHOT)) + +def RR_FIRE_TEMPLE_BOSS_ENTRYWAY SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE +Fire Temple Boss Entryway +RR_FIRE_TEMPLE_NEAR_BOSS_ROOM (and (IsDungeonVanilla FIRE_TEMPLE) false) +RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM (and (IsDungeonMQ FIRE_TEMPLE) false) +RR_FIRE_TEMPLE_BOSS_ROOM (HasItem RG_FIRE_TEMPLE_BOSS_KEY) + +def RR_FIRE_TEMPLE_BOSS_ROOM SCENE_FIRE_TEMPLE_BOSS false +Fire Temple Boss Room +FireTempleClear (and (>= FireTimer 64) (CanKillEnemy RE_VOLVAGIA)) +RC_FIRE_TEMPLE_VOLVAGIA_HEART FireTempleClear +RC_VOLVAGIA FireTempleClear +RR_FIRE_TEMPLE_BOSS_ENTRYWAY false +RR_DMC_CENTRAL_LOCAL @deprioritize FireTempleClear diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/forest_temple.s b/soh/soh/Enhancements/randomizer/logic/dungeons/forest_temple.s new file mode 100644 index 000000000..173437903 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/forest_temple.s @@ -0,0 +1,433 @@ +def RR_FOREST_TEMPLE_ENTRYWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Entryway +RR_FOREST_TEMPLE_FIRST_ROOM (IsDungeonVanilla FOREST_TEMPLE) +RR_FOREST_TEMPLE_MQ_LOBBY (IsDungeonMQ FOREST_TEMPLE) +RR_SACRED_FOREST_MEADOW true + +def RR_FOREST_TEMPLE_FIRST_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple First Room +RC_FOREST_TEMPLE_FIRST_ROOM_CHEST true +RC_FOREST_TEMPLE_GS_FIRST_ROOM (or (and IsAdult (CanUse RG_BOMB_BAG)) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOMBCHU_5) (or (CanUse RG_DINS_FIRE) (and RT_FOREST_FIRST_GS (or CanJumpslashExceptHammer (and IsChild (CanUse RG_BOMB_BAG))))))))))) +RR_FOREST_TEMPLE_ENTRYWAY true +RR_FOREST_TEMPLE_SOUTH_CORRIDOR true + +def RR_FOREST_TEMPLE_SOUTH_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple South Corridor +RR_FOREST_TEMPLE_FIRST_ROOM true +RR_FOREST_TEMPLE_LOBBY (CanPassEnemy RE_BIG_SKULLTULA) + +def RR_FOREST_TEMPLE_LOBBY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Lobby +ForestTempleMeg (and ForestTempleJoelle (and ForestTempleBeth (and ForestTempleAmy (CanUse RG_FAIRY_BOW)))) +RC_FOREST_TEMPLE_GS_LOBBY HookshotOrBoomerang +RC_FOREST_TEMPLE_LOBBY_POT_1 CanBreakPots +RC_FOREST_TEMPLE_LOBBY_POT_2 CanBreakPots +RC_FOREST_TEMPLE_LOBBY_POT_3 CanBreakPots +RC_FOREST_TEMPLE_LOBBY_POT_4 CanBreakPots +RC_FOREST_TEMPLE_LOBBY_POT_5 CanBreakPots +RC_FOREST_TEMPLE_LOBBY_POT_6 CanBreakPots +RR_FOREST_TEMPLE_SOUTH_CORRIDOR true +RR_FOREST_TEMPLE_NORTH_CORRIDOR true +RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER (or (CanUse RG_SONG_OF_TIME) IsChild) +RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT)) +RR_FOREST_TEMPLE_WEST_CORRIDOR (SmallKeys RR_FOREST_TEMPLE 1 5) +RR_FOREST_TEMPLE_EAST_CORRIDOR false +RR_FOREST_TEMPLE_BOSS_REGION ForestTempleMeg +RR_FOREST_TEMPLE_BOSS_ENTRYWAY false + +def RR_FOREST_TEMPLE_NORTH_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple North Corridor +RR_FOREST_TEMPLE_LOBBY true +RR_FOREST_TEMPLE_LOWER_STALFOS true + +def RR_FOREST_TEMPLE_LOWER_STALFOS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Lower Stalfos +FairyPot true +RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) +RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1 CanBreakPots +RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2 CanBreakPots +RR_FOREST_TEMPLE_NORTH_CORRIDOR true + +def RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NW Outdoors Lower +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD (or (CanUse RG_LONGSHOT) (Here HookshotOrBoomerang)) +RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) +RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) +RR_FOREST_TEMPLE_LOBBY (CanUse RG_SONG_OF_TIME) +RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER (and RT_HOVER_BOOST_SIMPLE (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives (CanUse RG_HOVER_BOOTS)))) +RR_FOREST_TEMPLE_MAP_ROOM true +RR_FOREST_TEMPLE_SEWER (or (HasItem RG_GOLDEN_SCALE) (or (CanUse RG_IRON_BOOTS) (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER))) +RR_FOREST_TEMPLE_BOSS_ENTRYWAY false + +def RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NW Outdoors Upper +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART true +RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART true +RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER true +RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST true +RR_FOREST_TEMPLE_FLOORMASTER_ROOM true +RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM true + +def RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NE Outdoors Lower +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST (or (CanUse RG_HOOKSHOT) (or (HasAccessTo RR_FOREST_TEMPLE_FALLING_ROOM) (and (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and IsAdult (and RT_FOREST_OUTDOORS_LEDGE (CanUse RG_HOVER_BOOTS)))))) +RC_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD (or (CanUse RG_HOOKSHOT) (or (and RT_FOREST_OUTDOORS_EAST_GS (CanUse RG_BOOMERANG)) (Here (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_DINS_FIRE) HasExplosives)))))) +RR_FOREST_TEMPLE_LOBBY true +RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER (or (CanUse RG_LONGSHOT) (and RT_FOREST_VINES (CanUse RG_HOOKSHOT))) +RR_FOREST_TEMPLE_SEWER (or (HasItem RG_GOLDEN_SCALE) (or (CanUse RG_IRON_BOOTS) (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER))) +RR_FOREST_TEMPLE_FALLING_ROOM false + +def RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NE Outdoors Upper +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER true +RR_FOREST_TEMPLE_MAP_ROOM true +RR_FOREST_TEMPLE_FALLING_ROOM (and RT_FOREST_DOORFRAME (and CanJumpslashExceptHammer (and (CanUse RG_HOVER_BOOTS) (CanUse RG_SCARECROW)))) + +def RR_FOREST_TEMPLE_MAP_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Map Room +RC_FOREST_TEMPLE_MAP_CHEST (CanKillEnemy RE_BLUE_BUBBLE) +RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER (Here (CanKillEnemy RE_BLUE_BUBBLE)) +RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER (Here (CanKillEnemy RE_BLUE_BUBBLE)) + +def RR_FOREST_TEMPLE_SEWER SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Sewer +RC_FOREST_TEMPLE_WELL_CHEST (or (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and CanOpenUnderwaterChest (>= WaterTimer 8))) +RC_FOREST_TEMPLE_WELL_WEST_HEART (or (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) +RC_FOREST_TEMPLE_WELL_EAST_HEART (or (HasAccessTo RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) +RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER true +RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER true + +def RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Below Boss Key Chest +RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER (Here (CanKillEnemy RE_BLUE_BUBBLE)) + +def RR_FOREST_TEMPLE_FLOORMASTER_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Floormaster Room +RC_FOREST_TEMPLE_FLOORMASTER_CHEST CanDamage +RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER true + +def RR_FOREST_TEMPLE_WEST_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple West Corridor +RR_FOREST_TEMPLE_LOBBY (SmallKeys RR_FOREST_TEMPLE 1 5) +RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (or CanAttack (CanUse RG_NUTS)) + +def RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Block Push Room +RC_FOREST_TEMPLE_EYE_SWITCH_CHEST (and (HasItem RG_GORONS_BRACELET) (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT))) +RR_FOREST_TEMPLE_WEST_CORRIDOR true +RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER (or (CanUse RG_HOVER_BOOTS) (and RT_FOREST_OUTSIDE_BACKDOOR (and CanJumpslashExceptHammer (HasItem RG_GORONS_BRACELET)))) +RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED (and IsAdult (and (HasItem RG_GORONS_BRACELET) (SmallKeys RR_FOREST_TEMPLE 2))) +RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED (and IsAdult (and (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT)) (and (HasItem RG_GORONS_BRACELET) (SmallKeys RR_FOREST_TEMPLE 2)))) + +def RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NW Corridor Twisted +RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (SmallKeys RR_FOREST_TEMPLE 2) +RR_FOREST_TEMPLE_RED_POE_ROOM (SmallKeys RR_FOREST_TEMPLE 3) + +def RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NW Corridor Straightened +RC_FOREST_TEMPLE_BOSS_KEY_CHEST true +RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST true +RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (SmallKeys RR_FOREST_TEMPLE 2) + +def RR_FOREST_TEMPLE_RED_POE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Red Poe Room +ForestTempleJoelle (CanUse RG_FAIRY_BOW) +RC_FOREST_TEMPLE_RED_POE_CHEST ForestTempleJoelle +RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED (SmallKeys RR_FOREST_TEMPLE 3) +RR_FOREST_TEMPLE_UPPER_STALFOS true + +def RR_FOREST_TEMPLE_UPPER_STALFOS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Upper Stalfos +RC_FOREST_TEMPLE_BOW_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 3) +RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1 CanBreakPots +RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2 CanBreakPots +RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3 CanBreakPots +RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4 CanBreakPots +RR_FOREST_TEMPLE_RED_POE_ROOM (CanKillEnemy RE_STALFOS ED_CLOSE true 3) +RR_FOREST_TEMPLE_BLUE_POE_ROOM (CanKillEnemy RE_STALFOS ED_CLOSE true 3) + +def RR_FOREST_TEMPLE_BLUE_POE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Blue Poe Room +ForestTempleBeth (CanUse RG_FAIRY_BOW) +RC_FOREST_TEMPLE_BLUE_POE_CHEST ForestTempleBeth +RC_FOREST_TEMPLE_BLUE_POE_POT_1 CanBreakPots +RC_FOREST_TEMPLE_BLUE_POE_POT_2 CanBreakPots +RC_FOREST_TEMPLE_BLUE_POE_POT_3 CanBreakPots +RR_FOREST_TEMPLE_UPPER_STALFOS true +RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED (SmallKeys RR_FOREST_TEMPLE 4) + +def RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NE Corridor Straightened +RR_FOREST_TEMPLE_BLUE_POE_ROOM (SmallKeys RR_FOREST_TEMPLE 4) +RR_FOREST_TEMPLE_FROZEN_EYE_ROOM (SmallKeys RR_FOREST_TEMPLE 5) + +def RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple NE Corridor Twisted +RR_FOREST_TEMPLE_FROZEN_EYE_ROOM (SmallKeys RR_FOREST_TEMPLE 5) +RR_FOREST_TEMPLE_FALLING_ROOM true + +def RR_FOREST_TEMPLE_FROZEN_EYE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Frozen Eye Room +RC_FOREST_TEMPLE_FROZEN_EYE_POT_1 CanBreakPots +RC_FOREST_TEMPLE_FROZEN_EYE_POT_2 CanBreakPots +RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED (SmallKeys RR_FOREST_TEMPLE 5) +RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED (and (SmallKeys RR_FOREST_TEMPLE 5) (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE))) + +def RR_FOREST_TEMPLE_FALLING_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Falling Room +RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST true +RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER true +RR_FOREST_TEMPLE_GREEN_POE_ROOM true + +def RR_FOREST_TEMPLE_GREEN_POE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Green Poe Room +ForestTempleAmy (CanUse RG_FAIRY_BOW) +RC_FOREST_TEMPLE_GREEN_POE_POT_1 CanBreakPots +RC_FOREST_TEMPLE_GREEN_POE_POT_2 CanBreakPots +RR_FOREST_TEMPLE_FALLING_ROOM true +RR_FOREST_TEMPLE_EAST_CORRIDOR ForestTempleAmy + +def RR_FOREST_TEMPLE_EAST_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple East Corridor +RR_FOREST_TEMPLE_LOBBY (or CanAttack (CanUse RG_NUTS)) +RR_FOREST_TEMPLE_GREEN_POE_ROOM (or CanAttack (CanUse RG_NUTS)) + +def RR_FOREST_TEMPLE_BOSS_REGION SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Boss Region +RC_FOREST_TEMPLE_BASEMENT_CHEST true +RC_FOREST_TEMPLE_GS_BASEMENT HookshotOrBoomerang +RR_FOREST_TEMPLE_LOBBY true +RR_FOREST_TEMPLE_BOSS_ENTRYWAY true + +def RR_FOREST_TEMPLE_MQ_LOBBY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Lobby +RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST (or (CanPassEnemy RE_BIG_SKULLTULA ED_SHORT_JUMPSLASH false) (CanUse RG_HOVER_BOOTS)) +//Implies CanPassEnemy(RE_BIG_SKULLTULA) +RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY HookshotOrBoomerang +RR_FOREST_TEMPLE_ENTRYWAY true +RR_FOREST_TEMPLE_MQ_CENTRAL_AREA (and (SmallKeys RR_FOREST_TEMPLE 1) (CanPassEnemy RE_BIG_SKULLTULA)) + +def RR_FOREST_TEMPLE_MQ_CENTRAL_AREA SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Central Region +ForestTempleMeg (and ForestTempleJoelle (and ForestTempleBeth (and ForestTempleAmy (CanKillEnemy RE_MEG)))) +RC_FOREST_TEMPLE_MQ_LOBBY_POT_1 CanBreakPots +RC_FOREST_TEMPLE_MQ_LOBBY_POT_2 CanBreakPots +RC_FOREST_TEMPLE_MQ_LOBBY_POT_3 CanBreakPots +RC_FOREST_TEMPLE_MQ_LOBBY_POT_4 CanBreakPots +RC_FOREST_TEMPLE_MQ_LOBBY_POT_5 CanBreakPots +RC_FOREST_TEMPLE_MQ_LOBBY_POT_6 CanBreakPots +RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM (or IsChild (CanUse RG_SONG_OF_TIME)) +RR_FOREST_TEMPLE_MQ_NW_OUTDOORS CanHitEyeTargets +RR_FOREST_TEMPLE_MQ_NE_OUTDOORS CanHitEyeTargets +RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE (Here (CanKillEnemy RE_STALFOS)) +//implies the other 3 poes +RR_FOREST_TEMPLE_MQ_BASEMENT ForestTempleMeg + +def RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Wolfos Room +FairyPot true +ForestClearBelowBowChest (CanKillEnemy RE_WOLFOS) +RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST ForestClearBelowBowChest +RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1 CanBreakPots +RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2 CanBreakPots +RR_FOREST_TEMPLE_MQ_CENTRAL_AREA (and ForestClearBelowBowChest (or IsChild (CanUse RG_SONG_OF_TIME))) + +def RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Lower Block Puzzle +//longshot is capable of hitting the switch, but some invisible collision makes the shot harder than you would think, so it may be trickworthy +MQForestBlockRoomTargets (and RT_FOREST_MQ_BLOCK_PUZZLE (CanUse RG_BOMBCHU_5)) +//It is barely possible to get this as child with master + hovers, but it's tight without bunny speed +ForestCanTwistHallway (or (or (and RT_FOREST_MQ_JS_HALLWAY_SWITCH (and (CanUse RG_HOVER_BOOTS) (and IsAdult CanJumpslash))) (or (CanUse RG_STICKS) (or (CanUse RG_BIGGORON_SWORD) (and MQForestBlockRoomTargets (CanUse RG_MASTER_SWORD))))) (or (and RT_FOREST_MQ_RANG_HALLWAY_SWITCH (CanUse RG_BOOMERANG)) (and RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH (CanUse RG_HOOKSHOT)))) +RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA) +RR_FOREST_TEMPLE_MQ_CENTRAL_AREA (Here (CanKillEnemy RE_STALFOS)) +RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE (or (HasItem RG_GORONS_BRACELET) (and MQForestBlockRoomTargets (CanUse RG_HOOKSHOT))) +//Assumes RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE access +RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE (or (and IsAdult (HasItem RG_GORONS_BRACELET)) (and MQForestBlockRoomTargets (CanUse RG_HOOKSHOT))) +RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (and ForestCanTwistHallway (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) + +def RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Middle Block Puzzle +//longshot is capable of hitting the switch, but some invisible collision makes the shot more annoying than you would think, so it may be trickworthy +MQForestBlockRoomTargets (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_LONGSHOT))) +ForestCanTwistHallway (or (and RT_FOREST_MQ_JS_HALLWAY_SWITCH (and IsAdult CanJumpslash)) (and (CanUse RG_HOVER_BOOTS) (or (CanUse RG_STICKS) (or (CanUse RG_BIGGORON_SWORD) (CanUse RG_MASTER_SWORD))))) +RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE true +RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE (or (and IsAdult (HasItem RG_GORONS_BRACELET)) (and MQForestBlockRoomTargets (CanUse RG_HOOKSHOT))) +//Hammer cannot recoil from here, but can make the jump forwards with a hammer jumpslash as adult +RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (or (and ForestCanTwistHallway (CanUse RG_HOVER_BOOTS)) (and RT_FOREST_OUTSIDE_BACKDOOR (or CanJumpslashExceptHammer (and IsAdult (CanUse RG_MEGATON_HAMMER))))) + +def RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ After Block Puzzle +RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST (SmallKeys RR_FOREST_TEMPLE 3) +RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY (SmallKeys RR_FOREST_TEMPLE 3) +RR_FOREST_TEMPLE_MQ_JOELLE_ROOM (and ForestCanTwistHallway (SmallKeys RR_FOREST_TEMPLE 4)) +//!QUANTUM LOGIC! +//As there is no way in default logic to reach the other possible key use without going through RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, this is logically safe for now +//Breaks if there's any other way to RR_FOREST_TEMPLE_MQ_FALLING_ROOM than going through the eye targets in RR_FOREST_TEMPLE_MQ_CENTRAL_AREA +//Requires a bow/sling ammo source once ammo logic is done, to avoid edge cases. +RR_FOREST_TEMPLE_MQ_NW_OUTDOORS (and (SmallKeys RR_FOREST_TEMPLE 2) (Here (CanKillEnemy RE_FLOORMASTER))) + +def RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Straight Hallway +RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST (SmallKeys RR_FOREST_TEMPLE 3) +RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM true + +def RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Floormaster Room +RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (Here (CanKillEnemy RE_FLOORMASTER)) + +def RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Outdoor Ledge +ForestCanTwistHallway CanHitSwitch +RC_FOREST_TEMPLE_MQ_REDEAD_CHEST (CanKillEnemy RE_REDEAD) +RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART true +RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART true +RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART true +RR_FOREST_TEMPLE_MQ_NW_OUTDOORS true + +def RR_FOREST_TEMPLE_MQ_NW_OUTDOORS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ NW Outdoors +RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD (CanGetEnemyDrop RE_GOLD_SKULLTULA) +//the well checks are considered from both areas instead of being a region because the draining is a temp flag and the skull (as well as the chest with hook glitch) has different breath timers from each side +RC_FOREST_TEMPLE_MQ_GS_WELL (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (CanUse RG_HOOKSHOT))) +RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) +RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) +RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OUTDOORS_HEARTS_BOOMERANG) +RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) +RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) +RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) +RR_FOREST_TEMPLE_MQ_NE_OUTDOORS (and (or (and (or (CanUse RG_IRON_BOOTS) (or (CanUse RG_LONGSHOT) (and RT_FOREST_MQ_WELL_SWIM (CanUse RG_HOOKSHOT)))) (HasItem RG_BRONZE_SCALE)) (HasItem RG_GOLDEN_SCALE)) (>= WaterTimer 16)) +RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES (CanUse RG_FIRE_ARROWS) + +//The well only coniders the eye target here because the eye target is a temp flag, making it unwieldy to use as an EventAccess to make it it's own room +def RR_FOREST_TEMPLE_MQ_NE_OUTDOORS SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ NE Outdoors +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +RC_FOREST_TEMPLE_MQ_WELL_CHEST (or CanHitEyeTargets (and CanOpenUnderwaterChest (>= WaterTimer 8))) +RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD (CanGetEnemyDrop RE_GOLD_SKULLTULA) +//implies logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) +RC_FOREST_TEMPLE_MQ_GS_WELL (or CanHitEyeTargets (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))) +RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) CanHitEyeTargets) +RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) CanHitEyeTargets) +RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) CanHitEyeTargets) +RR_FOREST_TEMPLE_MQ_NW_OUTDOORS (and (or (and (or (CanUse RG_IRON_BOOTS) (CanUse RG_LONGSHOT)) (HasItem RG_BRONZE_SCALE)) (HasItem RG_GOLDEN_SCALE)) (>= WaterTimer 16)) +RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) (or (and IsAdult (CanUse RG_HOVER_BOOTS)) (CanUse RG_SONG_OF_TIME)))) +RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE (CanUse RG_LONGSHOT) + +def RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Outdoors Top Ledges +RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST true +//Actually killing the skull from the doorframe with melee is annoying. Hammer swing hits low enough unaided, other swords need to crouch stab but the spot is precise based on range. kokiri sword doesn't reach at all for adult. +RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD (and (or (and IsAdult (CanUse RG_SONG_OF_TIME)) (and (CanUse RG_HOVER_BOOTS) RT_FOREST_DOORFRAME)) (and CanJumpslash (or (CanUse RG_FAIRY_SLINGSHOT) (or BlastOrSmash (or (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (or HookshotOrBoomerang (and CanStandingShield (or (CanUse RG_STICKS) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MASTER_SWORD) (and IsChild (CanUse RG_KOKIRI_SWORD))))))))))))) +RR_FOREST_TEMPLE_MQ_NW_OUTDOORS HasFireSourceWithTorch +RR_FOREST_TEMPLE_MQ_NE_OUTDOORS true +//N64 logic doesn't check damage but I always take some so I'm adding it +RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE (and RT_FOREST_OUTDOORS_LEDGE (and (CanUse RG_HOVER_BOOTS) (and CanJumpslash TakeDamage))) + +def RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ NE Outdoors Ledge +RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST true +RR_FOREST_TEMPLE_MQ_NE_OUTDOORS true +RR_FOREST_TEMPLE_MQ_FALLING_ROOM (CanUse RG_SONG_OF_TIME) + +def RR_FOREST_TEMPLE_MQ_JOELLE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Joelle room +ForestTempleJoelle (CanUse RG_FAIRY_BOW) +RC_FOREST_TEMPLE_MQ_MAP_CHEST ForestTempleJoelle +RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE (SmallKeys RR_FOREST_TEMPLE 4) +RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM true + +def RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ 3 Stalfos Room +//technically happens in RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, but the way this room blocks the hole means it cannot be logical to do anything else there. +ForestClearBelowBowChest (CanKillEnemy RE_WOLFOS) +RC_FOREST_TEMPLE_MQ_BOW_CHEST (and ForestClearBelowBowChest (CanKillEnemy RE_STALFOS ED_CLOSE true 3)) +RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1 CanBreakPots +RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2 CanBreakPots +RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3 CanBreakPots +RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4 CanBreakPots +RR_FOREST_TEMPLE_MQ_JOELLE_ROOM (and ForestClearBelowBowChest (CanKillEnemy RE_STALFOS ED_CLOSE true 3)) +RR_FOREST_TEMPLE_MQ_BETH_ROOM (and ForestClearBelowBowChest (CanKillEnemy RE_STALFOS ED_CLOSE true 3)) + +def RR_FOREST_TEMPLE_MQ_BETH_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Beth Room +ForestTempleBeth (CanUse RG_FAIRY_BOW) +RC_FOREST_TEMPLE_MQ_COMPASS_CHEST ForestTempleBeth +RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1 CanBreakPots +RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2 CanBreakPots +RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3 CanBreakPots +//!QUANTUM LOGIC! +//This key logic assumes that you can get to falling room either by spending the 5th key here, or by wasting a key in falling room itself. +//While being the 5th key makes this simpler in theory, if a different age can waste the key compared to reaching this room it breaks +RR_FOREST_TEMPLE_MQ_FALLING_ROOM (and (SmallKeys RR_FOREST_TEMPLE 5) (Here (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE)))) +RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM (SmallKeys RR_FOREST_TEMPLE 6) +RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM true + +//This room exists to show the actual map layout, and for when the crates get added to logic +def RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Torch Shot Room +RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1 CanBreakSmallCrates +RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2 CanBreakSmallCrates +RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3 CanBreakSmallCrates +RR_FOREST_TEMPLE_MQ_FALLING_ROOM (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE)) +RR_FOREST_TEMPLE_MQ_BETH_ROOM (SmallKeys RR_FOREST_TEMPLE 6) + +def RR_FOREST_TEMPLE_MQ_FALLING_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Falling Room +RC_FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST true +//Skipping swim here is non-trival, needs a roll-jump. If a swim lock is added it's probably wise to copy deku baba events here +RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE true +RR_FOREST_TEMPLE_MQ_AMY_ROOM (SmallKeys RR_FOREST_TEMPLE 6) + +def RR_FOREST_TEMPLE_MQ_AMY_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Amy Room +ForestTempleAmy (CanUse RG_FAIRY_BOW) +RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1 CanBreakPots +RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2 CanBreakPots +RR_FOREST_TEMPLE_MQ_CENTRAL_AREA ForestTempleAmy +RR_FOREST_TEMPLE_MQ_FALLING_ROOM true + +def RR_FOREST_TEMPLE_MQ_BASEMENT SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Basement +//Implies CanHitSwitch() +ForestOpenBossCorridor CanHitEyeTargets +RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST true +RR_FOREST_TEMPLE_MQ_CENTRAL_AREA ForestTempleMeg +RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM (or (CanPassEnemy RE_BIG_SKULLTULA) TakeDamage) +RR_FOREST_TEMPLE_MQ_BOSS_REGION ForestOpenBossCorridor + +def RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Basement Pot Room +RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1 CanBreakPots +RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2 CanBreakPots +RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3 CanBreakPots +RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4 CanBreakPots +RR_FOREST_TEMPLE_MQ_BASEMENT (CanPassEnemy RE_BIG_SKULLTULA) + +def RR_FOREST_TEMPLE_MQ_BOSS_REGION SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple MQ Boss Region +RR_FOREST_TEMPLE_MQ_BASEMENT ForestOpenBossCorridor +RR_FOREST_TEMPLE_BOSS_ENTRYWAY true + +def RR_FOREST_TEMPLE_BOSS_ENTRYWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE +Forest Temple Boss Entryway +RR_FOREST_TEMPLE_BOSS_REGION (and (IsDungeonVanilla FOREST_TEMPLE) false) +RR_FOREST_TEMPLE_MQ_BOSS_REGION (and (IsDungeonMQ FOREST_TEMPLE) false) +RR_FOREST_TEMPLE_BOSS_ROOM (HasItem RG_FOREST_TEMPLE_BOSS_KEY) + +def RR_FOREST_TEMPLE_BOSS_ROOM SCENE_FOREST_TEMPLE_BOSS false +Forest Temple Boss Room +ForestTempleClear (CanKillEnemy RE_PHANTOM_GANON) +RC_FOREST_TEMPLE_PHANTOM_GANON_HEART ForestTempleClear +RC_PHANTOM_GANON ForestTempleClear +RR_FOREST_TEMPLE_BOSS_ENTRYWAY false +RR_SACRED_FOREST_MEADOW @deprioritize ForestTempleClear diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/ganons_castle.s b/soh/soh/Enhancements/randomizer/logic/dungeons/ganons_castle.s new file mode 100644 index 000000000..8b0e63657 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/ganons_castle.s @@ -0,0 +1,364 @@ +def RR_GANONS_CASTLE_ENTRYWAY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Entryway +RR_GANONS_CASTLE_LOBBY (IsDungeonVanilla GANONS_CASTLE) +RR_GANONS_CASTLE_MQ_LOBBY (IsDungeonMQ GANONS_CASTLE) +RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE true + +def RR_GANONS_CASTLE_LOBBY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Lobby +RC_SHEIK_HINT_GC true +RR_GANONS_CASTLE_ENTRYWAY true +RR_GANONS_CASTLE_FOREST_TRIAL true +RR_GANONS_CASTLE_FIRE_TRIAL true +RR_GANONS_CASTLE_WATER_TRIAL true +RR_GANONS_CASTLE_SHADOW_TRIAL true +RR_GANONS_CASTLE_SPIRIT_TRIAL true +RR_GANONS_CASTLE_LIGHT_TRIAL (CanUse RG_GOLDEN_GAUNTLETS) +RR_GANONS_TOWER_ENTRYWAY true +RR_GANONS_CASTLE_DEKU_SCRUBS (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)) + +def RR_GANONS_CASTLE_MAIN SCENE_ID_MAX false +Invalid Region + +def RR_GANONS_CASTLE_DEKU_SCRUBS SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Deku Scrubs +FreeFairies true +RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT CanStunDeku +RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT CanStunDeku +RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT CanStunDeku +RC_GANONS_CASTLE_DEKU_SCRUB_LEFT CanStunDeku +RC_GANONS_CASTLE_SCRUBS_FAIRY_1 true +RC_GANONS_CASTLE_SCRUBS_FAIRY_2 true +RC_GANONS_CASTLE_SCRUBS_FAIRY_3 true +RC_GANONS_CASTLE_SCRUBS_FAIRY_4 true +RC_GANONS_CASTLE_SCRUBS_FAIRY_5 true +RC_GANONS_CASTLE_SCRUBS_FAIRY_6 true +RC_GANONS_CASTLE_SCRUBS_FAIRY_7 true +RC_GANONS_CASTLE_SCRUBS_FAIRY_8 true + +def RR_GANONS_CASTLE_FOREST_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Forest Trial +ForestTrialClear (and (CanUse RG_LIGHT_ARROWS) (or (CanUse RG_FIRE_ARROWS) (CanUse RG_DINS_FIRE))) +RC_GANONS_CASTLE_FOREST_TRIAL_CHEST (CanKillEnemy RE_WOLFOS) +RC_GANONS_CASTLE_FOREST_TRIAL_POT_1 (and CanBreakPots (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT))))) +RC_GANONS_CASTLE_FOREST_TRIAL_POT_2 (and CanBreakPots (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_DINS_FIRE) (or (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT))))) + +def RR_GANONS_CASTLE_FIRE_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Fire Trial +FireTrialClear (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_GOLDEN_GAUNTLETS) (and (CanUse RG_LIGHT_ARROWS) (CanUse RG_LONGSHOT)))) +RC_GANONS_CASTLE_FIRE_TRIAL_POT_1 (and CanBreakPots (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_GOLDEN_GAUNTLETS) (CanUse RG_LONGSHOT)))) +RC_GANONS_CASTLE_FIRE_TRIAL_POT_2 (and CanBreakPots (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_GOLDEN_GAUNTLETS) (CanUse RG_LONGSHOT)))) +RC_GANONS_CASTLE_FIRE_TRIAL_HEART (CanUse RG_GORON_TUNIC) + +def RR_GANONS_CASTLE_WATER_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Water Trial +BlueFireAccess true +FairyPot (and BlueFire (CanKillEnemy RE_FREEZARD)) +WaterTrialClear (and BlueFire (and IsAdult (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_LIGHT_ARROWS)))) +RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST true +RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST true +RC_GANONS_CASTLE_WATER_TRIAL_POT_1 (and CanBreakPots (and BlueFire (and IsAdult (CanUse RG_MEGATON_HAMMER)))) +RC_GANONS_CASTLE_WATER_TRIAL_POT_2 (and CanBreakPots (and BlueFire (and IsAdult (CanUse RG_MEGATON_HAMMER)))) +RC_GANONS_CASTLE_WATER_TRIAL_POT_3 (and CanBreakPots (and BlueFire (CanKillEnemy RE_FREEZARD))) + +def RR_GANONS_CASTLE_SHADOW_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Shadow Trial +ShadowTrialClear (and (CanUse RG_LIGHT_ARROWS) (and (CanUse RG_MEGATON_HAMMER) (or (and (CanUse RG_FIRE_ARROWS) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_DINS_FIRE) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))))))) +RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST (or (CanUse RG_FIRE_ARROWS) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_SONG_OF_TIME) IsChild)))) +RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) +RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1 (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)) +RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2 (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)) +RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3 (and CanBreakPots (and (CanUse RG_MEGATON_HAMMER) (or (and (CanUse RG_FIRE_ARROWS) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_DINS_FIRE) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))))))) +RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4 (and CanBreakPots (and (CanUse RG_MEGATON_HAMMER) (or (and (CanUse RG_FIRE_ARROWS) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_DINS_FIRE) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))))))) +RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1 (and (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) (or RT_LENS_GANON (or (CanUse RG_LENS_OF_TRUTH) (CanUse RG_BOOMERANG)))) +RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2 (and (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) (or RT_LENS_GANON (or (CanUse RG_LENS_OF_TRUTH) (CanUse RG_BOOMERANG)))) +RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3 (and (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_DINS_FIRE)))) (or RT_LENS_GANON (or (CanUse RG_LENS_OF_TRUTH) (CanUse RG_BOOMERANG)))) + +def RR_GANONS_CASTLE_SPIRIT_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Spirit Trial +NutPot (and (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS)))))) +SpiritTrialClear (and (CanUse RG_LIGHT_ARROWS) (and (or (CanUse RG_MIRROR_SHIELD) RSK_SUNLIGHT_ARROWS) (and (CanUse RG_BOMBCHU_5) (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT))))) +RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST (and (or RT_GANON_SPIRIT_TRIAL_HOOKSHOT (CanUse RG_HOOKSHOT)) (or CanJumpslashExceptHammer (CanUse RG_BOMBCHU_5))) +RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST (and (or RT_GANON_SPIRIT_TRIAL_HOOKSHOT (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)))) +RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1 (and (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS)))))) +RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2 (and (or (and RT_GANON_SPIRIT_TRIAL_HOOKSHOT CanJumpslashExceptHammer) (CanUse RG_HOOKSHOT)) (and (CanUse RG_BOMBCHU_5) (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS)))))) +RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY (CanUse RG_SUNS_SONG) +RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART true + +def RR_GANONS_CASTLE_LIGHT_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle Light Trial +LightTrialClear (and (CanUse RG_LIGHT_ARROWS) (and (CanUse RG_HOOKSHOT) (and (SmallKeys RR_GANONS_CASTLE 2) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))))) +RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST true +RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST true +RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST true +RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST true +RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST true +RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST true +RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH)) +RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST (and (CanUse RG_ZELDAS_LULLABY) (SmallKeys RR_GANONS_CASTLE 1)) +RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1 (and CanBreakPots (SmallKeys RR_GANONS_CASTLE 2)) +RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1 (and CanBreakPots (and (CanUse RG_HOOKSHOT) (and (SmallKeys RR_GANONS_CASTLE 2) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))))) +RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2 (and CanBreakPots (and (CanUse RG_HOOKSHOT) (and (SmallKeys RR_GANONS_CASTLE 2) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))))) + +def RR_GANONS_CASTLE_MQ_LOBBY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Lobby +RR_GANONS_CASTLE_ENTRYWAY (or (CanPassEnemy RE_GREEN_BUBBLE) (Here (and (CanKillEnemy RE_IRON_KNUCKLE) (CanKillEnemy RE_ARMOS)))) +//Implies CanKillEnemy(RE_GREEN_BUBBLE) +RR_GANONS_CASTLE_MQ_MAIN (Here (and (CanKillEnemy RE_IRON_KNUCKLE) (CanKillEnemy RE_ARMOS))) + +def RR_GANONS_CASTLE_MQ_MAIN SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Main +RC_SHEIK_HINT_MQ_GC true +RR_GANONS_CASTLE_MQ_LOBBY true +RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM true +RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM true +RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM true +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE true +RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM true +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM (Here (CanUse RG_GOLDEN_GAUNTLETS)) +RR_GANONS_TOWER_ENTRYWAY true +RR_GANONS_CASTLE_MQ_DEKU_SCRUBS (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) + +def RR_GANONS_CASTLE_MQ_DEKU_SCRUBS SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Deku Scrubs +FreeFairies true +RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT CanStunDeku +RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER CanStunDeku +RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT CanStunDeku +RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT CanStunDeku +RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT CanStunDeku +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1 true +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2 true +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3 true +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4 true +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5 true +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6 true +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7 true +RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8 true +RR_GANONS_CASTLE_MQ_MAIN true + +def RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Forest Trial Stalfos Room +RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY HookshotOrBoomerang +RR_GANONS_CASTLE_MQ_MAIN true +RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) + +//If it is ever possible to warp into the RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, this needs splitting up as the requirements to reach things from the other side are more complex +def RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Forest Trial Beamos Room +RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST CanHitEyeTargets +RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST HasFireSource +RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM true +RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM (and IsAdult (CanUse RG_SONG_OF_TIME)) + +def RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Forest Trial Final Room +ForestTrialClear (CanUse RG_LIGHT_ARROWS) +RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1 CanBreakPots +RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2 CanBreakPots +RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM true + +def RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Fire Trial Main Room +RR_GANONS_CASTLE_MQ_MAIN true +//2 checks, 1 for the rupees, 1 for actually making it, as the rupees are permanent but throwing a pillar is not +RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM (and (Here (and (CanUse RG_GORON_TUNIC) (CanUse RG_GOLDEN_GAUNTLETS))) (and (CanUse RG_GORON_TUNIC) (or (CanUse RG_LONGSHOT) (and (CanUse RG_GOLDEN_GAUNTLETS) (or (CanUse RG_HOVER_BOOTS) (and RT_GANON_MQ_FIRE_TRIAL (and IsAdult (CanUse RG_HOOKSHOT)))))))) + +def RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Fire Trial Final Room +FireTrialClear (CanUse RG_LIGHT_ARROWS) +RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1 CanBreakPots +RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2 CanBreakPots +//There's no way back across the lava without glitches + +def RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Water Trial Geyser Room +BlueFireAccess (or CanJumpslash HasExplosives) +RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST BlueFire +RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART BlueFire +RR_GANONS_CASTLE_MQ_MAIN true +RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM (and (SmallKeys RR_GANONS_CASTLE 3) (Here BlueFire)) + +def RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Water Trial Block Room +RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM (SmallKeys RR_GANONS_CASTLE 3) +//This assumes there's no way for child to have blue fire and not adult. +RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM (and IsAdult BlueFire) + +def RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Water Trial Final Room +WaterTrialClear (CanUse RG_LIGHT_ARROWS) +RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1 CanBreakPots +RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2 CanBreakPots +RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM (Here BlueFire) + +def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Shadow Trial Starting Ledge +ShadowTrialFirstChest (CanUse RG_FAIRY_BOW) +RR_GANONS_CASTLE_MQ_MAIN true +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM (or (and ShadowTrialFirstChest (CanUse RG_HOOKSHOT)) (and IsAdult (CanUse RG_HOVER_BOOTS))) + +def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Shadow Trial Chest Platform +ShadowTrialFirstChest (CanUse RG_FAIRY_BOW) +RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST ShadowTrialFirstChest +//Hookshot here is possible but very tight, but it's basically never relevant +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE (or (CanUse RG_LONGSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS))) +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM (and (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) (or IsAdult (CanUse RG_HOVER_BOOTS))) + +def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Shadow Trial Moving Platform +//A torch run from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE is possible but tight, so would be a trick +ShadowTrialFirstChest CanDetonateUprightBombFlower +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM (or IsAdult (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH true + +def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Shadow Trial Beamos Torch +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) +//A torch run from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE is possible but very tight, so would be a trick +//The bow trick assumes RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE access, if you can somehow void warp directly here it will need handling properly +//Hovers is possible as child but a bit tight, requires good rolls +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE (or HasFireSource (or (CanUse RG_HOVER_BOOTS) (and IsAdult (and RT_GANON_MQ_SHADOW_TRIAL (CanUse RG_FAIRY_BOW))))) + +def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Shadow Trial Far Side +RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST CanHitEyeTargets +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH (or (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) +//Modelling the silver rupees properly will require a way to check temp flags in different regions. +//It may be tempting to use a Here-like command for this but it could cause sphere skipping in playthroughs +//So a system like event access which sets based on TimeAge would be preferable, as the application of these can be tracked and accounted for, unlike Here-like commands +//For Now I am assuming the player has made it all the way from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, which logically means every rupee is available +//with no extra requirements except the lens logic needed to reach the door, which also enables the beamos-platform rupee +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) + +def RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Shadow Trial Final Room +ShadowTrialClear (CanUse RG_LIGHT_ARROWS) +RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1 CanBreakPots +RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2 CanBreakPots +RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) + +def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Spirit Trial Chairs Room +RR_GANONS_CASTLE_MQ_MAIN true +RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH (Here (and (or CanHitEyeTargets RT_RUSTED_SWITCHES) (CanUse RG_MEGATON_HAMMER))) + +def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Spirit Trial Before Switch +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST (CanPassEnemy RE_GREEN_BUBBLE) +RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM true +RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH (Here (CanUse RG_BOMBCHU_5)) + +def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Spirit Trial After Switch +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) +//better names for these would be nice. +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST (or (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) +RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH (Here (CanUse RG_BOMBCHU_5)) +//Sunlight arrows are bugged, should set a perm flag like mirror shield +RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM (or (Here (and (CanUse RG_FIRE_ARROWS) (CanUse RG_MIRROR_SHIELD))) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) + +def RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Spirit Trial Final Room +SpiritTrialClear (CanUse RG_LIGHT_ARROWS) +NutPot true +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1 CanBreakPots +RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2 CanBreakPots +RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH true + +def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Light Trial Dinolfos Room +RR_GANONS_CASTLE_MQ_MAIN true +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM (Here (and (CanKillEnemy RE_DINOLFOS) (CanKillEnemy RE_TORCH_SLUG))) + +def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Light Trial Triforce Room +RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST (CanUse RG_ZELDAS_LULLABY) +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM true +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT (SmallKeys RR_GANONS_CASTLE 2) + +def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Light Trial Boulder Room Front +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM (SmallKeys RR_GANONS_CASTLE 2) +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK (or (CanUse RG_HOOKSHOT) RT_GANON_MQ_LIGHT_TRIAL) + +def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Light Trial Boulder Room Back +RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART true +RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART true +//I got the trick going backwards, but only while taking damage. this isn't relevant anyway though +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT (or (CanUse RG_HOOKSHOT) RT_GANON_MQ_LIGHT_TRIAL) +RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM (and (SmallKeys RR_GANONS_CASTLE 3) (and (or RT_LENS_GANON_MQ (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_FAIRY_SLINGSHOT) (or CanJumpslash (or HasExplosives (or (CanUse RG_FAIRY_BOW) (CanUse RG_BOOMERANG))))))) + +def RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Castle MQ Light Trial Final Room +LightTrialClear (CanUse RG_LIGHT_ARROWS) +RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1 CanBreakPots +RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2 CanBreakPots + +def RR_GANONS_TOWER_ENTRYWAY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE +Ganon's Tower Entryway +RR_GANONS_CASTLE_LOBBY (IsDungeonVanilla GANONS_CASTLE) +RR_GANONS_CASTLE_MQ_MAIN (IsDungeonMQ GANONS_CASTLE) +//RANDOTODO could we just set these events automatically based on the setting? +RR_GANONS_TOWER_FLOOR_1 (and (or ForestTrialClear (IsTrialSkipped TK_FOREST_TRIAL)) (and (or FireTrialClear (IsTrialSkipped TK_FIRE_TRIAL)) (and (or WaterTrialClear (IsTrialSkipped TK_WATER_TRIAL)) (and (or ShadowTrialClear (IsTrialSkipped TK_SHADOW_TRIAL)) (and (or SpiritTrialClear (IsTrialSkipped TK_SPIRIT_TRIAL)) (or LightTrialClear (IsTrialSkipped TK_LIGHT_TRIAL))))))) + +def RR_GANONS_TOWER_FLOOR_1 SCENE_GANONS_TOWER false +Ganon's Tower Floor 1 +RR_GANONS_TOWER_ENTRYWAY (Here (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2)) +RR_GANONS_TOWER_FLOOR_2 (Here (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2)) + +def RR_GANONS_TOWER_FLOOR_2 SCENE_GANONS_TOWER false +Ganon's Tower Floor 2 +RC_GANONS_TOWER_BOSS_KEY_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) +RR_GANONS_TOWER_FLOOR_1 (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) +RR_GANONS_TOWER_FLOOR_3 (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) + +def RR_GANONS_TOWER_FLOOR_3 SCENE_GANONS_TOWER false +Ganon's Tower Floor 3 +RR_GANONS_TOWER_FLOOR_2 (Here (CanKillEnemy RE_IRON_KNUCKLE ED_CLOSE true 2)) +RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR (Here (CanKillEnemy RE_IRON_KNUCKLE ED_CLOSE true 2)) + +def RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR SCENE_GANONS_TOWER false +Ganon's Tower Before Ganondorf's Lair +RC_GANONS_CASTLE_GANONS_TOWER_POT_1 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_2 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_3 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_4 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_5 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_6 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_7 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_8 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_9 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_10 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_11 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_12 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_13 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_14 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_15 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_16 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_17 CanBreakPots +RC_GANONS_CASTLE_GANONS_TOWER_POT_18 CanBreakPots +RR_GANONS_TOWER_FLOOR_3 (Here true) +RR_GANONS_TOWER_GANONDORF_LAIR (Here (HasItem RG_GANONS_CASTLE_BOSS_KEY)) + +def RR_GANONS_TOWER_GANONDORF_LAIR SCENE_GANONDORF_BOSS false +Ganondorf's Lair +RC_GANONDORF_HINT (HasBossSoul RG_GANON_SOUL) +RR_GANONS_CASTLE_ESCAPE (CanKillEnemy RE_GANONDORF) + +def RR_GANONS_CASTLE_ESCAPE SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR false +Ganon's Castle Escape +//10 pots +//RANDOTODO hook potsanity pots up to escape. +RR_GANONS_CASTLE_GANON_ARENA true +//real logic once we figure out how to deal with castle escape skip +//RR_GANONS_CASTLE_GANON_ARENA (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) + +def RR_GANONS_CASTLE_GANON_ARENA SCENE_GANON_BOSS false +Ganon's Arena +RC_GANON (CanKillEnemy RE_GANON) diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/gerudo_training_ground.s b/soh/soh/Enhancements/randomizer/logic/dungeons/gerudo_training_ground.s new file mode 100644 index 000000000..6199970f4 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/gerudo_training_ground.s @@ -0,0 +1,225 @@ +def RR_GERUDO_TRAINING_GROUND_ENTRYWAY SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Entryway +RR_GERUDO_TRAINING_GROUND_LOBBY (IsDungeonVanilla GERUDO_TRAINING_GROUND) +RR_GERUDO_TRAINING_GROUND_MQ_LOBBY (IsDungeonMQ GERUDO_TRAINING_GROUND) +RR_GF_EXITING_GTG true + +def RR_GERUDO_TRAINING_GROUND_LOBBY SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Lobby +RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST CanHitEyeTargets +RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST CanHitEyeTargets +RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) +RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST (and (CanKillEnemy RE_BEAMOS) (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2 true)) +RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART true +RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART true +RR_GERUDO_TRAINING_GROUND_ENTRYWAY true +RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM (and (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) (or (CanUse RG_HOOKSHOT) RT_GTG_WITHOUT_HOOKSHOT)) +RR_GERUDO_TRAINING_GROUND_LAVA_ROOM (Here (and (CanKillEnemy RE_BEAMOS) (CanKillEnemy RE_DINOLFOS ED_CLOSE true 2 true))) +RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE true + +def RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Central Maze +RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST (and (SmallKeys RR_GERUDO_TRAINING_GROUND 3) (or RT_LENS_GTG (CanUse RG_LENS_OF_TRUTH))) +RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 4) +RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 6) +RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 7) +RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST (SmallKeys RR_GERUDO_TRAINING_GROUND 9) +RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT (SmallKeys RR_GERUDO_TRAINING_GROUND 9) + +def RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Central Maze Right +RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST true +RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST true +RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY true +RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM (CanUse RG_HOOKSHOT) +RR_GERUDO_TRAINING_GROUND_LAVA_ROOM true + +def RR_GERUDO_TRAINING_GROUND_LAVA_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Lava Room +RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST (and (CanUse RG_HOOKSHOT) (and (CanUse RG_SONG_OF_TIME) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 24)))) +RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT (or (CanUse RG_SONG_OF_TIME) IsChild) +RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) + +def RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Hammer Room +RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST CanAttack +RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST (or (CanUse RG_MEGATON_HAMMER) (and TakeDamage RT_FLAMING_CHESTS)) +RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_FAIRY_BOW)) +RR_GERUDO_TRAINING_GROUND_LAVA_ROOM true + +def RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Eye Statue Lower +RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST (CanUse RG_FAIRY_BOW) +RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM true + +def RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Eye Statue Upper +RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST (CanUse RG_FAIRY_BOW) +RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER true + +def RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Heavy Block Room +RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST (CanKillEnemy RE_WOLFOS ED_CLOSE true 4 true) +RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER (and (or RT_LENS_GTG (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_HOOKSHOT) (and RT_GTG_FAKE_WALL (CanUse RG_HOVER_BOOTS)))) +RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM (and (or RT_LENS_GTG (CanUse RG_LENS_OF_TRUTH)) (and (or (CanUse RG_HOOKSHOT) (and RT_GTG_FAKE_WALL (CanUse RG_HOVER_BOOTS))) (CanUse RG_SILVER_GAUNTLETS))) + +def RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Like Like Room +RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST CanJumpslashExceptHammer +RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST CanJumpslashExceptHammer +RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST CanJumpslashExceptHammer +RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST CanJumpslashExceptHammer + +def RR_GERUDO_TRAINING_GROUND_MQ_LOBBY SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Lobby +RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST true +RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST true +RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST true +RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST true +RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1 CanBreakPots +RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2 CanBreakPots +RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1 CanBreakPots +RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2 CanBreakPots +RR_GERUDO_TRAINING_GROUND_ENTRYWAY true +RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM (or RT_LENS_GTG_MQ (CanUse RG_LENS_OF_TRUTH)) +RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK (SmallKeys RR_GERUDO_TRAINING_GROUND 1) +//It's possible to use the torch in RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM with flame storage to light these +RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM (Here HasFireSource) +RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM (Here (or (and IsAdult (CanUse RG_FAIRY_BOW)) (and IsChild (CanUse RG_FAIRY_SLINGSHOT)))) + +def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Maze Hidden Room +RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST true +RR_GERUDO_TRAINING_GROUND_MQ_LOBBY true + +def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Maze First Lock +RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST true +RR_GERUDO_TRAINING_GROUND_MQ_LOBBY (SmallKeys RR_GERUDO_TRAINING_GROUND 1) +RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER (SmallKeys RR_GERUDO_TRAINING_GROUND 3) + +def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Center +MQGTGMazeSwitch (CanUse RG_MEGATON_HAMMER) +RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE CanBreakCrates +RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK (SmallKeys RR_GERUDO_TRAINING_GROUND 3) + +def RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Sand Room +RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST (CanKillEnemy RE_IRON_KNUCKLE) +RR_GERUDO_TRAINING_GROUND_MQ_LOBBY true +RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE (Here (CanKillEnemy RE_IRON_KNUCKLE)) + +def RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Left Side +RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM true +RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM (Here (or (CanUse RG_LONGSHOT) (or RT_GTG_MQ_WITHOUT_HOOKSHOT (and RT_GTG_MQ_WITH_HOOKSHOT (and IsAdult (and CanJumpslash (CanUse RG_HOOKSHOT))))))) + +def RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Stalfos Room +BlueFireAccess true +//implies logic->CanKillEnemy(RE_BIG_SKULLTULA) +RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) +RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK (and (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true)) (CanUse RG_SILVER_GAUNTLETS)) +RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE (and IsAdult (and (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true)) (and (or RT_LENS_GTG_MQ (CanUse RG_LENS_OF_TRUTH)) (and BlueFire (or (CanUse RG_SONG_OF_TIME) (and RT_GTG_FAKE_WALL (CanUse RG_HOVER_BOOTS))))))) + +def RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Behind Block +//implies logic->CanKillEnemy(RE_SPIKE) +RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST (CanKillEnemy RE_FREEZARD) + +def RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Statue Room Ledge +RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM true +//implies dropping down to hit the switch. Using swords, especially master, is a bit awkward, may be trick worthy, but is only relevant with other tricks +RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM (Here (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_STICKS) (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_BOOMERANG)))))))) +RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM true + +def RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Magenta Fire Room +RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST MQGTGMazeSwitch +RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE true + +def RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Statue ROom +RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST (CanUse RG_FAIRY_BOW) +RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE (CanUse RG_LONGSHOT) +RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM true + +def RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Torch Slug Room +//implies logic->CanKillEnemy(RE_TORCH_SLUG) +RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST (CanKillEnemy RE_IRON_KNUCKLE) +RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST (CanHitSwitch ED_BOMB_THROW) +RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM (Here (CanKillEnemy RE_IRON_KNUCKLE)) +RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE (Here (CanKillEnemy RE_IRON_KNUCKLE)) + +def RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Switch Ledge +MQGTGRightSideSwitch (CanUse RG_MEGATON_HAMMER) +GTGPlatformSilverRupees (and (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) +RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (CanUse RG_FIRE_ARROWS) +//the fire bubble here is a jerk if you are aiming for the nearest hook platform, you have to aim to the right hand side with hook to dodge it +RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH (or (CanUse RG_LONGSHOT) (or (and GTGPlatformSilverRupees (CanUse RG_HOOKSHOT)) (and (and (CanUse RG_FIRE_ARROWS) GTGPlatformSilverRupees) (CanUse RG_HOVER_BOOTS)))) +RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT (and MQGTGRightSideSwitch (CanUse RG_LONGSHOT)) + +//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area +//This covers the 2 platforms that can be jumped to directly from RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE +//the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees +def RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Ledge Side Platforms +//This is merely to extend this region's logic if you have hovers +RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM (CanUse RG_HOVER_BOOTS) + +//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area +//This covers the platform that needs hover boots or the spawned targets to reach from any starting point other than RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT +//the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees +def RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Furthest Platform +//This is merely to extend this region's logic if you have hovers +RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (CanUse RG_HOVER_BOOTS) + +def RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground Torch Side Platforms +//this torch shot is possible as child but tight and obtuse enough to be a trick +GTGPlatformSilverRupees (and (or (and (CanUse RG_FAIRY_BOW) IsAdult) (CanUse RG_FIRE_ARROWS)) (CanUse RG_HOVER_BOOTS)) +RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (and (or (and (CanUse RG_FAIRY_BOW) IsAdult) (CanUse RG_FIRE_ARROWS)) (CanUse RG_HOVER_BOOTS)) +RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH (or (and (CanUse RG_FAIRY_BOW) IsAdult) (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT))) +RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT (and MQGTGRightSideSwitch (or (and (CanUse RG_FAIRY_BOW) IsAdult) (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)))) +RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM true + +def RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Platforms Unlit Torch +GTGPlatformSilverRupees (and HasFireSource (CanUse RG_HOVER_BOOTS)) +RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER GTGPlatformSilverRupees +RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (and HasFireSource (CanUse RG_HOVER_BOOTS)) +RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS (or HasFireSource (CanUse RG_LONGSHOT)) +RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT (and MQGTGRightSideSwitch (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOOKSHOT) HasFireSource))) + +def RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Dinolfos Room +//WallFairy (and IsAdult (CanUse RG_FAIRY_BOW)) +//implies logic->CanKillEnemy(RE_LIZALFOS and logic->CanKillEnemy(RE_DODONGO) +//is logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true) && logic->CanKillEnemy(RE_ARMOS, ED_CLOSE, true, 1, true) broken down to exclude sticks, as it take too many to clear the room +//Proper enemy kill room ammo logic is needed to handle this room +//some combinations may be impossible without taking damage, keep an eye out for issues here +RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_FAIRY_BOW) (and (or (CanUse RG_NUTS) (or (CanUse RG_HOOKSHOT) (CanUse RG_BOOMERANG))) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT))))))) +RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS (Here (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_BIGGORON_SWORD) (or (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_FAIRY_BOW) (and (or (CanUse RG_NUTS) (or (CanUse RG_HOOKSHOT) (CanUse RG_BOOMERANG))) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))))) + +def RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Underwater +//it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy +RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST (and HasFireSource (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 24) (and (HasItem RG_BRONZE_SCALE) TakeDamage)))) +RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH true + +def RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND +Gerudo Training Ground MQ Maze Right +GTGPlatformSilverRupees (and (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) +RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST true +RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST true +RR_GERUDO_TRAINING_GROUND_MQ_LOBBY true +RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (or (CanUse RG_FIRE_ARROWS) (CanUse RG_LONGSHOT)) +RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH (or (CanUse RG_FIRE_ARROWS) (or (CanUse RG_LONGSHOT) (and GTGPlatformSilverRupees (CanUse RG_HOVER_BOOTS)))) +RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS (CanUse RG_FIRE_ARROWS) +RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM (CanUse RG_FIRE_ARROWS) diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s b/soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s new file mode 100644 index 000000000..999814260 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s @@ -0,0 +1,100 @@ +def RR_ICE_CAVERN_ENTRYWAY SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern Entryway +RR_ICE_CAVERN_BEGINNING (IsDungeonVanilla ICE_CAVERN) +RR_ICE_CAVERN_MQ_BEGINNING (and (IsDungeonMQ ICE_CAVERN) CanUseProjectile) +RR_ZF_LEDGE true + +def RR_ICE_CAVERN_BEGINNING SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern Beginning +RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +RR_ICE_CAVERN_ENTRYWAY true +RR_ICE_CAVERN_MAIN (Here (CanKillEnemy RE_FREEZARD ED_CLOSE true 4)) + +def RR_ICE_CAVERN_MAIN SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern +BlueFireAccess IsAdult +RC_ICE_CAVERN_MAP_CHEST (and BlueFire IsAdult) +RC_ICE_CAVERN_COMPASS_CHEST BlueFire +RC_ICE_CAVERN_IRON_BOOTS_CHEST (and BlueFire (CanKillEnemy RE_WOLFOS)) +RC_SHEIK_IN_ICE_CAVERN (and BlueFire (and (CanKillEnemy RE_WOLFOS) IsAdult)) +RC_ICE_CAVERN_FREESTANDING_POH BlueFire +RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM HookshotOrBoomerang +RC_ICE_CAVERN_GS_HEART_PIECE_ROOM (and BlueFire HookshotOrBoomerang) +RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM (and BlueFire (or HookshotOrBoomerang (and RT_ICE_BLOCK_GS (and IsAdult (CanUse RG_HOVER_BOOTS))))) +RC_ICE_CAVERN_HALL_POT_1 CanBreakPots +RC_ICE_CAVERN_HALL_POT_2 CanBreakPots +RC_ICE_CAVERN_SPINNING_BLADE_POT_1 CanBreakPots +RC_ICE_CAVERN_SPINNING_BLADE_POT_2 CanBreakPots +RC_ICE_CAVERN_SPINNING_BLADE_POT_3 CanBreakPots +RC_ICE_CAVERN_NEAR_END_POT_1 (and CanBreakPots BlueFire) +RC_ICE_CAVERN_NEAR_END_POT_2 (and CanBreakPots BlueFire) +RC_ICE_CAVERN_FROZEN_POT_1 (and CanBreakPots (and BlueFire IsAdult)) +RC_ICE_CAVERN_LOBBY_RUPEE BlueFire +RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART IsAdult +RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART IsAdult +RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART IsAdult +RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1 (and BlueFire (or (CanUse RG_SONG_OF_TIME) (CanUse RG_BOOMERANG))) +RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2 (and BlueFire (or (CanUse RG_SONG_OF_TIME) (CanUse RG_BOOMERANG))) +RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3 (and BlueFire (or (CanUse RG_SONG_OF_TIME) (CanUse RG_BOOMERANG))) + +def RR_ICE_CAVERN_MQ_BEGINNING SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern MQ Beginning +RC_ICE_CAVERN_MQ_ENTRANCE_POT CanBreakPots +RR_ICE_CAVERN_ENTRYWAY true +//It is in logic to use a pot to hit the toggle switch here. +RR_ICE_CAVERN_MQ_HUB true + +def RR_ICE_CAVERN_MQ_HUB SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern MQ Hub +FairyPot true +RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1 CanBreakPots +RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2 CanBreakPots +RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1 CanBreakPots +RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2 CanBreakPots +RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3 CanBreakPots +RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4 CanBreakPots +//the switch for the glass blocking the entrance is linked to the switch that controls the glass around the skulltulla in RR_ICE_CAVERN_MQ_SCARECROW_ROOM +//if you clear the ice, you can hit it with a pot from here. +RR_ICE_CAVERN_MQ_BEGINNING BlueFire +RR_ICE_CAVERN_MQ_MAP_ROOM (Here (and (CanKillEnemy RE_WHITE_WOLFOS) (CanKillEnemy RE_FREEZARD))) +RR_ICE_CAVERN_MQ_COMPASS_ROOM (and IsAdult BlueFire) +RR_ICE_CAVERN_MQ_SCARECROW_ROOM BlueFire + +def RR_ICE_CAVERN_MQ_MAP_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern MQ Map Room +//Child can fit between the stalagmites on the left hand side +BlueFireAccess (or IsChild (or CanJumpslash HasExplosives)) +RC_ICE_CAVERN_MQ_MAP_CHEST (and BlueFire (Here CanHitSwitch)) + +def RR_ICE_CAVERN_MQ_SCARECROW_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern MQ Scarecrow Room +RC_ICE_CAVERN_MQ_GS_ICE_BLOCK (or (and BlueFire (CanGetEnemyDrop RE_GOLD_SKULLTULA)) (and IsAdult (CanHitSwitch ED_LONG_JUMPSLASH))) +RC_ICE_CAVERN_MQ_GS_SCARECROW (or (CanUse RG_SCARECROW) (and IsAdult (or (CanUse RG_LONGSHOT) RT_ICE_MQ_SCARECROW))) +RR_ICE_CAVERN_MQ_HUB BlueFire +//Assumes RR_ICE_CAVERN_MQ_HUB access for a pot if using blue fire +RR_ICE_CAVERN_MQ_WEST_CORRIDOR (and IsAdult BlueFire) + +def RR_ICE_CAVERN_MQ_STALFOS_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern MQ Stalfos Room +RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST (CanKillEnemy RE_STALFOS) +RC_SHEIK_IN_ICE_CAVERN (CanKillEnemy RE_STALFOS) +RR_ICE_CAVERN_MQ_WEST_CORRIDOR (Here (CanKillEnemy RE_STALFOS)) +RR_ICE_CAVERN_MQ_BEGINNING (and (CanUse RG_IRON_BOOTS) (Here (CanKillEnemy RE_STALFOS))) + +def RR_ICE_CAVERN_MQ_WEST_CORRIDOR SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern MQ West Corridor +RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1 CanBreakPots +RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2 CanBreakPots +RR_ICE_CAVERN_MQ_SCARECROW_ROOM BlueFire +RR_ICE_CAVERN_MQ_STALFOS_ROOM true + +def RR_ICE_CAVERN_MQ_COMPASS_ROOM SCENE_ICE_CAVERN false RA_ICE_CAVERN +Ice Cavern MQ Compass Room +BlueFireAccess true +RC_ICE_CAVERN_MQ_COMPASS_CHEST true +//It is possible for child with master, BGS or sticks, or adult with BGS, to hit this switch through the ice with a crouchstab, but it's precise and unintuitive for a trick +RC_ICE_CAVERN_MQ_FREESTANDING_POH HasExplosives +//doing RT_ICE_MQ_RED_ICE_GS as child is untested, as I could not perform the trick reliably even as adult +RC_ICE_CAVERN_MQ_GS_RED_ICE (or (and RSK_BLUE_FIRE_ARROWS (CanUse RG_ICE_ARROWS)) (and (CanUse RG_BOTTLE_WITH_BLUE_FIRE) (and (or (CanUse RG_SONG_OF_TIME) (and IsAdult RT_ICE_MQ_RED_ICE_GS)) (CanGetEnemyDrop RE_GOLD_SKULLTULA)))) +RC_ICE_CAVERN_MQ_COMPASS_POT_1 CanBreakPots +RC_ICE_CAVERN_MQ_COMPASS_POT_2 CanBreakPots diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s b/soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s new file mode 100644 index 000000000..331c300bf --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s @@ -0,0 +1,267 @@ +def RR_JABU_JABUS_BELLY_ENTRYWAY SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Entryway +RR_JABU_JABUS_BELLY_BEGINNING (IsDungeonVanilla JABU_JABUS_BELLY) +RR_JABU_JABUS_BELLY_MQ_BEGINNING (IsDungeonMQ JABU_JABUS_BELLY) +RR_ZORAS_FOUNTAIN true + +def RR_JABU_JABUS_BELLY_BEGINNING SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Beginning +RR_JABU_JABUS_BELLY_ENTRYWAY true +RR_JABU_JABUS_BELLY_MAIN CanUseProjectile + +//Combines Lift room middle and lower, 1F holes room, the forked corridor, and it's side rooms +def RR_JABU_JABUS_BELLY_MAIN SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Main +JabuWestTentacle (and JabuRutoIn1F (CanKillEnemy RE_TENTACLE ED_BOOMERANG)) +RC_JABU_JABUS_BELLY_DEKU_SCRUB (and (HasItem RG_BRONZE_SCALE) (and (or IsChild (or (HasItem RG_SILVER_SCALE) (or RT_JABU_ALCOVE_JUMP_DIVE (CanUse RG_IRON_BOOTS)))) CanStunDeku)) +//We can kill the Stingers with ruto +RC_JABU_JABUS_BELLY_BOOMERANG_CHEST JabuRutoIn1F +RC_JABU_JABUS_BELLY_MAP_CHEST JabuWestTentacle +RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1 CanBreakSmallCrates +RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2 CanBreakSmallCrates +RR_JABU_JABUS_BELLY_BEGINNING true +//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room +RR_JABU_JABUS_BELLY_B1_NORTH true +RR_JABU_JABUS_BELLY_COMPASS_ROOM JabuWestTentacle +RR_JABU_JABUS_BELLY_BLUE_TENTACLE JabuWestTentacle +RR_JABU_JABUS_BELLY_GREEN_TENTACLE JabuEastTentacle +RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE JabuNorthTentacle +RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM (or LoweredJabuPath (and RT_JABU_BOSS_HOVER (CanUse RG_HOVER_BOOTS))) + +def RR_JABU_JABUS_BELLY_B1_NORTH SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly B1 North +JabuRutoIn1F (or IsAdult (HasItem RG_BRONZE_SCALE)) +FairyPot (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK))) +RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER HookshotOrBoomerang +RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER HookshotOrBoomerang +RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM HookshotOrBoomerang +RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) +RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) +RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) +RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) +RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5 (and CanBreakPots (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK ED_BOOMERANG false)))) +RR_JABU_JABUS_BELLY_MAIN true +//there's tricks for getting here with bunny-jumps or just side-hops +RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOVER_BOOTS)) +RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH (or IsAdult (HasItem RG_BRONZE_SCALE)) + +def RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Water Switch Room South +RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM HookshotOrBoomerang +RR_JABU_JABUS_BELLY_B1_NORTH (or IsAdult (HasItem RG_BRONZE_SCALE)) +RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOVER_BOOTS)) +RR_JABU_JABUS_BELLY_MAIN CanUseProjectile + +def RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Water Switch Room Ledge +FairyPot true +//this is the logic for climbing back and forth to use the pots to kill the skull... or killing the skull before climbing to grab the token +RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM (or (HasItem RG_BRONZE_SCALE) (or (and IsAdult (CanUse RG_HOVER_BOOTS)) (CanKillEnemy RE_GOLD_SKULLTULA ED_BOMB_THROW))) +RC_JABU_JABUS_BELLY_BASEMENT_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_BASEMENT_POT_2 CanBreakPots +RC_JABU_JABUS_BELLY_BASEMENT_POT_3 CanBreakPots +RR_JABU_JABUS_BELLY_B1_NORTH true +RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH true + +def RR_JABU_JABUS_BELLY_COMPASS_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Compass Room +//ruto could theoretically clear this room, but it's hard because of the timer and she doesn't appear with you when you respawn after failing, which would force a savewarp +RC_JABU_JABUS_BELLY_COMPASS_CHEST (CanKillEnemy RE_SHABOM) +RR_JABU_JABUS_BELLY_MAIN (Here (CanKillEnemy RE_SHABOM)) + +def RR_JABU_JABUS_BELLY_BLUE_TENTACLE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Blue Tentacle +JabuEastTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) +RR_JABU_JABUS_BELLY_MAIN JabuEastTentacle + +def RR_JABU_JABUS_BELLY_GREEN_TENTACLE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Green Tentacle +JabuNorthTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) +//implied logic->CanKillEnemy(RE_BARI) +RR_JABU_JABUS_BELLY_MAIN JabuNorthTentacle + +def RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Bigocto Room +RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER (and IsAdult (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH)) +RR_JABU_JABUS_BELLY_B1_NORTH true +RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO (and JabuRutoIn1F (Here (CanKillEnemy RE_BIG_OCTO))) + +def RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Above Bigocto +FairyPot true +NutPot true +RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2 CanBreakPots +RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3 CanBreakPots +RR_JABU_JABUS_BELLY_LIFT_UPPER (CanUse RG_BOOMERANG) + +def RR_JABU_JABUS_BELLY_LIFT_UPPER SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Lift Upper +LoweredJabuPath true +RR_JABU_JABUS_BELLY_MAIN true + +def RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Near Boss Room +RC_JABU_JABUS_BELLY_GS_NEAR_BOSS (CanKillEnemy RE_GOLD_SKULLTULA ED_BOMB_THROW) +RR_JABU_JABUS_BELLY_MAIN true +RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY (or (CanUse RG_BOOMERANG) (or (and RT_JABU_NEAR_BOSS_RANGED (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT)))) (and RT_JABU_NEAR_BOSS_EXPLOSIVES (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_HOVER_BOOTS) (CanUse RG_BOMB_BAG)))))) + +def RR_JABU_JABUS_BELLY_MQ_BEGINNING SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Beginning +NutPot true +RC_JABU_JABUS_BELLY_MQ_MAP_CHEST BlastOrSmash +RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST (CanUse RG_FAIRY_SLINGSHOT) +RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1 CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2 CanCutShrubs +RR_JABU_JABUS_BELLY_ENTRYWAY true +RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM (Here (CanUse RG_FAIRY_SLINGSHOT)) + +def RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Lift Room +MQJabuLiftRoomCow (CanUse RG_FAIRY_SLINGSHOT) +RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST true +RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1 true +RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2 true +RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1 (CanUse RG_IRON_BOOTS) +RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2 (CanUse RG_IRON_BOOTS) +RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3 (CanUse RG_IRON_BOOTS) +RR_JABU_JABUS_BELLY_MQ_BEGINNING true +RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE (or (HasItem RG_SILVER_SCALE) (and (HasItem RG_BRONZE_SCALE) (or IsChild (or (CanUse RG_IRON_BOOTS) RT_JABU_ALCOVE_JUMP_DIVE)))) +RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM MQJabuHolesRoomDoor +RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE (or LoweredJabuPath (or (CanUse RG_HOVER_BOOTS) (and (CanUse RG_HOOKSHOT) MQJabuLiftRoomCow))) +//If opening RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM by lowering the geyser as 1 age is to let the other through is relevant, it needs an eventAccess + +def RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Lift Room East Ledge +RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST MQJabuLiftRoomCow +RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM true +RR_JABU_JABUS_BELLY_MQ_EAST_ROOM JabuNorthTentacle + +def RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Underwater Alcove +MQJabuHolesRoomDoor true +RC_JABU_JABUS_BELLY_MQ_COMPASS_CHEST (or (CanHitSwitch ED_HOOKSHOT true) (and RT_JABU_MQ_RANG_JUMP (and (CanUse RG_BOOMERANG) (HasItem RG_BRONZE_SCALE)))) +RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2 CanBreakPots +//Getting the ones closest to the ledge with rang may be a trick due to the awkward angle without blind shooting through the flesh +RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1 (or (HasItem RG_GOLDEN_SCALE) (CanUse RG_BOOMERANG)) +RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2 (or (HasItem RG_SILVER_SCALE) (CanUse RG_BOOMERANG)) +RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3 (or (HasItem RG_BRONZE_SCALE) (CanUse RG_BOOMERANG)) +RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM (HasItem RG_BRONZE_SCALE) + +def RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Holes Room +RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST (CanUse RG_FAIRY_SLINGSHOT) +RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST (CanUse RG_FAIRY_SLINGSHOT) +RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1 (and CanCutShrubs HasExplosives) +RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2 (and CanCutShrubs HasExplosives) +RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1 CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2 CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3 CanCutShrubs +RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM true +RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM true +RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR (and (CanUse RG_BOOMERANG) (and HasExplosives (Here (CanUse RG_FAIRY_SLINGSHOT)))) +RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM JabuNorthTentacle +RR_JABU_JABUS_BELLY_MQ_PAST_OCTO (and JabuWestTentacle (and (Here (CanKillEnemy RE_BIG_OCTO)) (CanUse RG_FAIRY_SLINGSHOT))) + +def RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Water Switch Room +RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST true +//Implies logic->CanKillEnemy(RE_LIKE_LIKE) && logic->CanKillEnemy(RE_STINGER). Without swim, jump from the song of time block to the vines. +RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST (CanKillEnemy RE_LIZALFOS) +RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM (or (and (CanUse RG_SONG_OF_TIME) (CanGetEnemyDrop RE_GOLD_SKULLTULA)) (and RT_JABU_MQ_SOT_GS (CanUse RG_BOOMERANG))) +RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS CanCutShrubs +//without swim, jump from rang chest to the other side +RR_JABU_JABUS_BELLY_MQ_BEGINNING (Here (CanKillEnemy RE_LIZALFOS)) +RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (and (or IsAdult (HasItem RG_BRONZE_SCALE)) (Here (CanKillEnemy RE_LIZALFOS))) + +//Includes Like Like room +def RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Forked Corridor +JabuNorthTentacle (and (Here BlastOrSmash) (CanUse RG_BOOMERANG)) +//Implies CanKillEnemy(RE_LIKE_LIKE) +RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST (CanUse RG_FAIRY_SLINGSHOT) +RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1 CanBreakSmallCrates +RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2 CanBreakSmallCrates +RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (CanUse RG_BOOMERANG) +//If some mode lets an age use sticks and not sling, and other use sling and not sticks, this needs changing +RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS (and (Here (CanUse RG_BOOMERANG)) (or (Here (and (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_STICKS))) (Here HasFireSource))) + +def RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ West Forked Rooms +JabuWestTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) +RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM (and (Here HasExplosives) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG)) +RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR true + +def RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Invisible Keese Room +RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM (or + //firstly, we can just use FAs to clear the web and then longshot the skull + (and (CanUse RG_FIRE_ARROWS) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_LONGSHOT)) + //Otherwise, we we have to cross the gap and kill the skull. + //We can cheese the gap with hovers + //Otherwise we have to kill the enemies to raise the platform. This persists so we can do it as the other age. + (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and + //we can hit the keese farthest from the water with irons and hookshot, but we won't be able to see it while doing so + (or (CanUse RG_HOVER_BOOTS) (Here (and (or RT_LENS_JABU_MQ (CanUse RG_LENS_OF_TRUTH)) (and (CanKillEnemy RE_STINGER ED_BOOMERANG false 2 false true) (or (CanKillEnemy RE_KEESE ED_LONGSHOT false) (and RT_LENS_JABU_MQ (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)))))))) + //If we kill the enemies, we then need to cross the water using the platform. Note that adult cannot do so while swimming because MQ jank. + (or (and IsChild (HasItem RG_BRONZE_SCALE)) (and IsAdult (CanUse RG_IRON_BOOTS)))) + ) +) +RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (and (or JabuNorthTentacle TakeDamage) (HasItem RG_BRONZE_SCALE)) + +def RR_JABU_JABUS_BELLY_MQ_PAST_OCTO SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Past Octo +//if a hover up to the path is added, this will want it's own room +LoweredJabuPath (and (CanUse RG_BOOMERANG) (CanUse RG_FAIRY_SLINGSHOT)) +RC_JABU_JABUS_BELLY_MQ_COW (and (CanUse RG_EPONAS_SONG) (CanUse RG_FAIRY_SLINGSHOT)) +RC_JABU_JABUS_BELLY_MQ_JIGGLIES_GRASS CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1 CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2 CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_1 (and (CanUse RG_FAIRY_SLINGSHOT) CanBreakSmallCrates) +RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_2 (and (CanUse RG_FAIRY_SLINGSHOT) CanBreakSmallCrates) +RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM (and (CanUse RG_BOOMERANG) (CanUse RG_FAIRY_SLINGSHOT)) +//you take both fall damage and tentacle damage, unless the tentacle is down. need better damage logic +RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM (and TakeDamage (Here (CanKillEnemy RE_BIG_OCTO))) + +def RR_JABU_JABUS_BELLY_MQ_EAST_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly MQ Boss Region +FairyPot true +RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST (CanUse RG_FAIRY_SLINGSHOT) +RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS (or (CanUse RG_BOOMERANG) (and RT_JABU_NEAR_BOSS_RANGED (CanUse RG_HOOKSHOT))) +RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1 CanCutShrubs +RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2 CanCutShrubs +RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE true +RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY (Here (CanUse RG_FAIRY_SLINGSHOT)) + +def RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Boss Entryway +RR_JABU_JABUS_BELLY_BOSS_ROOM true + +def RR_JABU_JABUS_BELLY_BOSS_EXIT SCENE_JABU_JABU false RA_JABU_JABUS_BELLY +Jabu Jabus Belly Boss Exit +RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM (IsDungeonVanilla JABU_JABUS_BELLY) +RR_JABU_JABUS_BELLY_MQ_EAST_ROOM (IsDungeonMQ JABU_JABUS_BELLY) + +def RR_JABU_JABUS_BELLY_BOSS_ROOM SCENE_JABU_JABU_BOSS false +Jabu Jabus Belly Boss Room +//todo: add pot kill trick +JabuJabusBellyClear (CanKillEnemy RE_BARINADE) +RC_JABU_JABUS_BELLY_BARINADE_POT_1 CanBreakPots +RC_JABU_JABUS_BELLY_BARINADE_POT_2 CanBreakPots +RC_JABU_JABUS_BELLY_BARINADE_POT_3 CanBreakPots +RC_JABU_JABUS_BELLY_BARINADE_POT_4 CanBreakPots +RC_JABU_JABUS_BELLY_BARINADE_POT_5 CanBreakPots +RC_JABU_JABUS_BELLY_BARINADE_POT_6 CanBreakPots +RC_JABU_JABUS_BELLY_BARINADE_HEART JabuJabusBellyClear +RC_BARINADE JabuJabusBellyClear +RR_JABU_JABUS_BELLY_BOSS_EXIT false +RR_ZORAS_FOUNTAIN @deprioritize JabuJabusBellyClear diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/shadow_temple.s b/soh/soh/Enhancements/randomizer/logic/dungeons/shadow_temple.s new file mode 100644 index 000000000..4739f7141 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/shadow_temple.s @@ -0,0 +1,306 @@ +def RR_SHADOW_TEMPLE_ENTRYWAY SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple Entryway +RR_SHADOW_TEMPLE_BEGINNING (and (IsDungeonVanilla SHADOW_TEMPLE) (and (or RT_LENS_SHADOW (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)))) +RR_SHADOW_TEMPLE_MQ_BEGINNING (IsDungeonMQ SHADOW_TEMPLE) +RR_GRAVEYARD_WARP_PAD_REGION true + +def RR_SHADOW_TEMPLE_BEGINNING SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple Beginning +NutPot true +RC_SHADOW_TEMPLE_MAP_CHEST CanJumpslashExceptHammer +RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST (CanKillEnemy RE_DEAD_HAND) +RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2 CanBreakPots +RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3 CanBreakPots +RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4 CanBreakPots +RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5 CanBreakPots +RC_SHADOW_TEMPLE_MAP_CHEST_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_MAP_CHEST_POT_2 CanBreakPots +RR_SHADOW_TEMPLE_ENTRYWAY true +RR_SHADOW_TEMPLE_FIRST_BEAMOS (CanUse RG_HOVER_BOOTS) + +def RR_SHADOW_TEMPLE_FIRST_BEAMOS SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple First Beamos +RC_SHADOW_TEMPLE_COMPASS_CHEST CanJumpslashExceptHammer +RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) +RC_SHADOW_TEMPLE_GS_NEAR_SHIP false +RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) +RR_SHADOW_TEMPLE_HUGE_PIT (and HasExplosives (and IsAdult (SmallKeys RR_SHADOW_TEMPLE 1 2))) +RR_SHADOW_TEMPLE_BEYOND_BOAT false + +def RR_SHADOW_TEMPLE_HUGE_PIT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple Huge Pit +RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST CanJumpslashExceptHammer +RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST CanJumpslashExceptHammer +RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST true +RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST (or (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS)) (HasItem RG_GORONS_BRACELET)) +RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST (or (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS)) (HasItem RG_GORONS_BRACELET)) +RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST (and (SmallKeys RR_SHADOW_TEMPLE 2 3) (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH))) +RC_SHADOW_TEMPLE_FREESTANDING_KEY (and (SmallKeys RR_SHADOW_TEMPLE 2 3) (and (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH)) (and (CanUse RG_HOOKSHOT) (or (CanUse RG_BOMB_BAG) (or (HasItem RG_GORONS_BRACELET) (and RT_SHADOW_FREESTANDING_KEY (CanUse RG_BOMBCHU_5))))))) +RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM CanJumpslashExceptHammer +RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM (or (CanUse RG_HOOKSHOT) (and RT_SHADOW_UMBRELLA_GS (CanUse RG_HOVER_BOOTS))) +RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT (and (SmallKeys RR_SHADOW_TEMPLE 2 3) (and (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH)) (CanUse RG_HOOKSHOT))) +RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2 CanBreakPots +RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3 (or (and CanBreakPots (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS))) (HasItem RG_GORONS_BRACELET)) +RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4 (or (and CanBreakPots (and RT_SHADOW_UMBRELLA (CanUse RG_HOVER_BOOTS))) (HasItem RG_GORONS_BRACELET)) +//We cannot repeat the MQ invisible blades trick for these hearts as the like-like does not respawn if the room is cleared +RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (CanUse RG_BOOMERANG)) +RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (CanUse RG_BOOMERANG)) +RC_SHADOW_TEMPLE_PIT_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) +RR_SHADOW_TEMPLE_WIND_TUNNEL (and (or (and RT_LENS_SHADOW_PLATFORM RT_LENS_SHADOW) (CanUse RG_LENS_OF_TRUTH)) (and (CanUse RG_HOOKSHOT) (SmallKeys RR_SHADOW_TEMPLE 3 4))) + +def RR_SHADOW_TEMPLE_WIND_TUNNEL SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple Wind Tunnel +RC_SHADOW_TEMPLE_WIND_HINT_CHEST true +RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST (CanKillEnemy RE_GIBDO ED_CLOSE true 2) +RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST HasExplosives +RC_SHADOW_TEMPLE_GS_NEAR_SHIP (and (CanUse RG_LONGSHOT) (SmallKeys RR_SHADOW_TEMPLE 4 5)) +RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY (CanUse RG_SUNS_SONG) +RC_SHADOW_TEMPLE_AFTER_WIND_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_AFTER_WIND_POT_2 CanBreakPots +RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART (and (CanUse RG_DISTANT_SCARECROW) (SmallKeys RR_SHADOW_TEMPLE 4 5)) +RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART (and (CanUse RG_DISTANT_SCARECROW) (SmallKeys RR_SHADOW_TEMPLE 4 5)) +RR_SHADOW_TEMPLE_BEYOND_BOAT (and CanJumpslashExceptHammer (and (CanUse RG_ZELDAS_LULLABY) (SmallKeys RR_SHADOW_TEMPLE 4 5))) + +def RR_SHADOW_TEMPLE_BEYOND_BOAT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple Beyond Boat +RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST (CanUse RG_DINS_FIRE) +RC_SHADOW_TEMPLE_BOSS_KEY_CHEST (CanUse RG_DINS_FIRE) +RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST (CanKillEnemy RE_FLOORMASTER) +//RANDOTODO check if child can reach the token +RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT (and IsAdult CanAttack) +RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2 CanBreakPots +RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3 (and CanBreakPots (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5))))) +RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4 (and CanBreakPots (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5))))) +RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_FLOORMASTER_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_FLOORMASTER_POT_2 CanBreakPots +RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART (CanUse RG_DISTANT_SCARECROW) +RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART (CanUse RG_DISTANT_SCARECROW) +RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART (or (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5)))) (CanUse RG_SONG_OF_TIME)) (and (CanUse RG_DISTANT_SCARECROW) (CanUse RG_HOVER_BOOTS))) +RR_SHADOW_TEMPLE_BOSS_ENTRYWAY (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DISTANT_SCARECROW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5)))) (and (SmallKeys RR_SHADOW_TEMPLE 5) (CanUse RG_HOVER_BOOTS))) + +def RR_SHADOW_TEMPLE_MQ_ENTRYWAY SCENE_ID_MAX false +Invalid Region + +//RANDOTODO doublecheck CanAttack when rewriting, as I assumed it only checked adult due to the entrance +def RR_SHADOW_TEMPLE_MQ_BEGINNING SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Beginning +RR_SHADOW_TEMPLE_ENTRYWAY true +RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) + +def RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Spinner Room +RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1 CanBreakSmallCrates +RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2 CanBreakSmallCrates +RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3 CanBreakSmallCrates +RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4 CanBreakSmallCrates +RR_SHADOW_TEMPLE_ENTRYWAY true +RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS (and (Here (or (CanUse RG_HOVER_BOOTS) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)))) (or (CanUse RG_HOVER_BOOTS) (or (Here (CanUse RG_FIRE_ARROWS)) (and RT_SHADOW_MQ_GAP (and (CanUse RG_LONGSHOT) CanJumpslashExceptHammer))))) +RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA (and (Here HasExplosives) (and (SmallKeys RR_SHADOW_TEMPLE 6) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)))) + +//Assumes we're in the "main" area and needed lens to enter. logic will need changes if a void warp puts us somewhere weird +def RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Dead Hand Region +RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST (CanKillEnemy RE_REDEAD) +//There's a shared flag tied to some glass here. eye target here and killing an enemy group later in the dungeon toggles. I'm building the logic as "intended", assuming the switch needs flipping +RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST (and (CanKillEnemy RE_DEAD_HAND) (and (or IsChild (CanUse RG_SONG_OF_TIME)) CanHitEyeTargets)) +RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2 CanBreakPots +RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2 CanBreakPots +RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM true + +//also includes the B2 gibdo room +def RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ First Beamos +//Doing this sets the shared flag for the glass in RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, but doesn't seem to affect the chest +RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST (and (CanKillEnemy RE_GIBDO) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) +RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) +RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT (and HasExplosives (SmallKeys RR_SHADOW_TEMPLE 2)) +RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) + +def RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ B2 Spinning Blade Room +RC_SHADOW_TEMPLE_MQ_MAP_CHEST (and (CanPassEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS (Here (and (CanKillEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS))))) +RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH (CanPassEnemy RE_BIG_SKULLTULA) + +def RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Shortcut Path +RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) +RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM (CanPassEnemy RE_BIG_SKULLTULA) +RR_SHADOW_TEMPLE_MQ_DOCK ShadowShortcutBlock +//WARNING if there's any way past here to ship without already reaching the other side the key logic in this dungeon becomes Quantum + +//Room exists for if it's ever possible to go backwards or void warp into the middle of shadow +def RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ B2 to B3 Corridor +RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS (SmallKeys RR_SHADOW_TEMPLE 2) +RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT true +//bunnyhovers + lens lets you go from the very top of upper pit to the stationary invisible platform below quite easily + +def RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Upper Huge Pit +RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) +RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT (or (and HasFireSource (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) RT_SHADOW_MQ_HUGE_PIT) +RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) + +def RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Invisible Blades Room + //RT_SHADOW_MQ_INVISIBLE_BLADES does not work with NL as like-likes will not swallow you, likewise like-likes will not spit you with a fairy revive +//you take half a heart base from a spit out, double check EffectiveHealth when damage logic gets reworked +//Child is too small to get hit by the blades doesn't need the trick or lens for dodging them +RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST (and (or (CanUse RG_SONG_OF_TIME) (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1))) (or RT_LENS_SHADOW_MQ_INVISIBLE_BLADES (or IsChild (or (CanUse RG_NAYRUS_LOVE) (CanUse RG_LENS_OF_TRUTH))))) +RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST (and (or (CanUse RG_SONG_OF_TIME) (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1))) (or (and RT_LENS_SHADOW_MQ (or RT_LENS_SHADOW_MQ_INVISIBLE_BLADES (or IsChild (CanUse RG_NAYRUS_LOVE)))) (CanUse RG_LENS_OF_TRUTH))) +RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (or (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1)) (CanUse RG_BOOMERANG))) +RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART (or (and (CanUse RG_SONG_OF_TIME) IsAdult) (or (and RT_SHADOW_MQ_INVISIBLE_BLADES (> EffectiveHealth 1)) (CanUse RG_BOOMERANG))) +RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT true + +def RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Lower Huge Pit +RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST (CanUse RG_LONGSHOT) +RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM (Here (or CanJumpslash HasExplosives)) +RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM (and (CanUse RG_HOVER_BOOTS) (and (or RT_LENS_SHADOW_MQ_PLATFORM (CanUse RG_LENS_OF_TRUTH)) (SmallKeys RR_SHADOW_TEMPLE 3))) + +def RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Stone Umbrella Room +RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST true +//Assuming the known setup for RT_SHADOW_UMBRELLA and RT_SHADOW_UMBRELLA_GS, probably possible without sword + shield. +//Handling the trick here instead of upper as using the block to climb is not a valid method for getting this skull without other tricks to use the block before it is intended +RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM (or (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and RT_SHADOW_UMBRELLA_GS (and RT_SHADOW_UMBRELLA (and (CanUse RG_HOVER_BOOTS) (and CanStandingShield (CanUse RG_MASTER_SWORD)))))) +RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT CanBreakPots +RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT CanBreakPots +RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT (CanUse RG_BOOMERANG) +RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT (Here (or RT_VISIBLE_COLLISION CanHitSwitch)) +//Assuming the known setup for RT_SHADOW_UMBRELLA, probably possible without sword + shield +RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA (and IsAdult (or (HasItem RG_GORONS_BRACELET) (and RT_SHADOW_UMBRELLA (and (CanUse RG_HOVER_BOOTS) (and CanStandingShield (CanUse RG_MASTER_SWORD)))))) + +def RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Upper Stone Umbrella +RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST true +RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST true +RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT CanBreakPots +RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT CanBreakPots +RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM true + +//while the spikes here are annoying, they don't really stop you doing anything, so I'll assume either lens trick, lens to see them, or taking damage from them. Not hovers though as a new player won't see the threat without lens to react properly +def RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Floor Spikes Room +//lens or trick is always required for hookshot targets. We handle it here to not complicate the RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_UPPER_DOOR logic +MQShadowFloorSpikeRupees (and (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) + //Upper door side high rupee needs (hookshot and redead kill(as either age) for chest and adult) or longshot. hovers can cross from the left side with a backflip but that would be a trick + //East midair rupee needs (hookshot and(hover boots or jumpslash from the upper door platform)) or longshot. + //Combined these are longshot or (IsAdult && hookshot && (CanJumpslash || (Hover Boots && Here(CanKillRedeads)))) + (and (or (CanUse RG_LONGSHOT) (and IsAdult (and (CanUse RG_HOOKSHOT) (or CanJumpslash (and (CanUse RG_HOVER_BOOTS) (Here (CanKillEnemy RE_REDEAD))))))) + //1 rupee is in spikes, needs hovers or damage + (or TakeDamage (CanUse RG_HOVER_BOOTS)))) +RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST (and (CanKillEnemy RE_REDEAD) (or RT_LENS_SHADOW_MQ (or TakeDamage (CanUse RG_LENS_OF_TRUTH)))) +RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM MQShadowFloorSpikeRupees +//We need to assume we can get here with or without the glass platforms +RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL (and (SmallKeys RR_SHADOW_TEMPLE 4) (and (or (CanUse RG_LONGSHOT) (and IsAdult (and (CanUse RG_HOOKSHOT) (or MQShadowFloorSpikeRupees (Here (CanKillEnemy RE_REDEAD)))))) (or CanJumpslash (CanUse RG_HOVER_BOOTS)))) + +def RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Stalfos Room +RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) +RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM (Here (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) + +def RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Wind Tunnel +RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM (and (SmallKeys RR_SHADOW_TEMPLE 4) (and (CanPassEnemy RE_BIG_SKULLTULA) (CanUse RG_HOOKSHOT))) +RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM (and (CanPassEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) +RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM (and (CanPassEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) + +def RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Wind Hint Room +RC_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST (and (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) (CanPassEnemy RE_REDEAD)) +RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL true + +def RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ B4 Gibdo Room +NutPot true +RC_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST (CanKillEnemy RE_GIBDO) +RC_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST (and HasExplosives (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) +RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND HasExplosives +RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2 CanBreakPots +//child can make it using the wind strat +RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL (or RT_SHADOW_MQ_WINDY_WALKWAY (CanUse RG_HOVER_BOOTS)) +RR_SHADOW_TEMPLE_MQ_DOCK (SmallKeys RR_SHADOW_TEMPLE 5) + +def RR_SHADOW_TEMPLE_MQ_DOCK SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Dock +ShadowShortcutBlock (HasItem RG_GORONS_BRACELET) +RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART (CanUse RG_DISTANT_SCARECROW) +RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART (CanUse RG_DISTANT_SCARECROW) +RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH ShadowShortcutBlock +RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM (SmallKeys RR_SHADOW_TEMPLE 5) +//funnily enough, the wheel jump seems to be in logic as there's no strength requirement in N64 +RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT (and (or IsAdult (CanUse RG_HOOKSHOT)) (CanUse RG_ZELDAS_LULLABY)) + +def RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Beyond Boat +//It's a trick on N64 to kill this and drop down to collect this with normal weapons, as doing so without the statue being dropped voids you to before the boat +//hilariously, you can also hit this with a pot before you bring down the statue, but there's no great way to reset it without crossing. the statues collision is very inconvenient afterwards +RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT CanBreakPots +RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT CanBreakPots +RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM (Here (or (CanUse RG_FAIRY_BOW) (and RT_SHADOW_STATUE (CanUse RG_BOMBCHU_5)))) + +def RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Across Chasm +RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT CanBreakPots +RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT CanBreakPots +RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART (and (CanUse RG_SONG_OF_TIME) (and CanHitEyeTargets (CanUse RG_LONGSHOT))) +RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART (and (CanUse RG_SONG_OF_TIME) (and CanHitEyeTargets (CanUse RG_LONGSHOT))) +//There's invisible floor collision that makes aiming for the heart with rang harder than it should be, so it's a trick. +RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART IsAdult +RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT (and (Here CanDetonateUprightBombFlower) IsAdult) +//assumes RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT by previous access. If backwards shadow ever exists remember that child cannot jump onto the statue from this side and make an event for the switch +//Lens isn't needed to reach it but is needed to navigate the next room +RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE (Here (and CanHitEyeTargets (and (CanUse RG_SONG_OF_TIME) (CanUse RG_LONGSHOT)))) +RR_SHADOW_TEMPLE_MQ_BOSS_DOOR (and (CanUse RG_HOVER_BOOTS) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) + +def RR_SHADOW_TEMPLE_MQ_BOSS_DOOR SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Boss Door +//you can drop onto this and the respawn is reasonable +RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS (and (or (CanKillEnemy RE_GOLD_SKULLTULA ED_BOMB_THROW) (CanUse RG_MEGATON_HAMMER)) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) +RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM (and (CanUse RG_HOVER_BOOTS) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) +RR_SHADOW_TEMPLE_BOSS_ENTRYWAY true + +//Assumes lens is checked on entry +def RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Invisible Maze +//don't use CanDetonateUprightBombFlower as blue fire logic would need to account for player having multiple bottles & taking damage multiple times +RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST (and (or (CanUse RG_LENS_OF_TRUTH) RT_LENS_SHADOW_MQ_DEADHAND) (and (CanKillEnemy RE_DEAD_HAND) (or CanDetonateBombFlowers (HasItem RG_GORONS_BRACELET)))) +RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY true +RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1 CanBreakPots +RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2 CanBreakPots +RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT true +RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM (SmallKeys RR_SHADOW_TEMPLE 6) + +def RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple MQ Spike Walls Room +RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST (CanUse RG_DINS_FIRE) +RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST (CanUse RG_DINS_FIRE) +RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT CanBreakPots +RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE (and (SmallKeys RR_SHADOW_TEMPLE 6) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH))) + +def RR_SHADOW_TEMPLE_BOSS_ENTRYWAY SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE +Shadow Temple Boss Entryway +RR_SHADOW_TEMPLE_BEYOND_BOAT (and (IsDungeonVanilla SHADOW_TEMPLE) false) +RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT (and (IsDungeonMQ SHADOW_TEMPLE) false) +RR_SHADOW_TEMPLE_BOSS_ROOM (HasItem RG_SHADOW_TEMPLE_BOSS_KEY) + +def RR_SHADOW_TEMPLE_BOSS_ROOM SCENE_SHADOW_TEMPLE_BOSS false +Shadow Temple Boss Room +ShadowTempleClear (CanKillEnemy RE_BONGO_BONGO) +RC_SHADOW_TEMPLE_BONGO_BONGO_HEART ShadowTempleClear +RC_BONGO_BONGO ShadowTempleClear +RR_SHADOW_TEMPLE_BOSS_ENTRYWAY false +RR_GRAVEYARD_WARP_PAD_REGION ShadowTempleClear diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/spirit_temple.s b/soh/soh/Enhancements/randomizer/logic/dungeons/spirit_temple.s new file mode 100644 index 000000000..dc2e12251 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/spirit_temple.s @@ -0,0 +1,395 @@ +def RR_SPIRIT_TEMPLE_ENTRYWAY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Entryway +RR_SPIRIT_TEMPLE_LOBBY (IsDungeonVanilla SPIRIT_TEMPLE) +RR_SPIRIT_TEMPLE_MQ_LOBBY (IsDungeonMQ SPIRIT_TEMPLE) +RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE true + +def RR_SPIRIT_TEMPLE_LOBBY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Lobby +RC_SPIRIT_TEMPLE_LOBBY_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_LOBBY_POT_2 CanBreakPots +RR_SPIRIT_TEMPLE_ENTRYWAY true +RR_SPIRIT_TEMPLE_CHILD IsChild +RR_SPIRIT_TEMPLE_EARLY_ADULT (CanUse RG_SILVER_GAUNTLETS) + +def RR_SPIRIT_TEMPLE_CHILD SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Child Spirit Temple +NutCrate true +RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) +RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (and (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT))))) (or (CanUse RG_STICKS) (CanUse RG_DINS_FIRE)))) +RC_SPIRIT_TEMPLE_GS_METAL_FENCE (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) +RC_SPIRIT_TEMPLE_ANUBIS_POT_1 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) +RC_SPIRIT_TEMPLE_ANUBIS_POT_2 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) +RC_SPIRIT_TEMPLE_ANUBIS_POT_3 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) +RC_SPIRIT_TEMPLE_ANUBIS_POT_4 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIRY_SLINGSHOT) (and (CanUse RG_BOMBCHU_5) RT_SPIRIT_CHILD_CHU))) (or HasExplosives (and (or (CanUse RG_NUTS) (CanUse RG_BOOMERANG)) (or (CanUse RG_STICKS) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_FAIRY_SLINGSHOT)))))) +RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1 CanBreakSmallCrates +RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2 CanBreakSmallCrates +RR_SPIRIT_TEMPLE_CHILD_CLIMB (SmallKeys RR_SPIRIT_TEMPLE 1) + +def RR_SPIRIT_TEMPLE_CHILD_CLIMB SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Child Spirit Temple Climb +RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST (or (HasProjectile HasProjectileAge::Both) (or (and (SmallKeys RR_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (HasProjectile HasProjectileAge::Adult))) (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and IsChild (HasProjectile HasProjectileAge::Child))))) +RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST (or (HasProjectile HasProjectileAge::Both) (or (and (SmallKeys RR_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (HasProjectile HasProjectileAge::Adult))) (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and IsChild (HasProjectile HasProjectileAge::Child))))) +RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM (or (HasProjectile HasProjectileAge::Both) (or (CanUse RG_DINS_FIRE) (or (and TakeDamage (or CanJumpslashExceptHammer (HasProjectile HasProjectileAge::Child))) (or (and IsChild (and (SmallKeys RR_SPIRIT_TEMPLE 5) (HasProjectile HasProjectileAge::Child))) (and (SmallKeys RR_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (or (HasProjectile HasProjectileAge::Adult) (and TakeDamage CanJumpslashExceptHammer)))))))) +RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1 CanBreakPots +RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER (or HasExplosives (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) + +def RR_SPIRIT_TEMPLE_EARLY_ADULT SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Early Adult Spirit Temple +RC_SPIRIT_TEMPLE_COMPASS_CHEST (and (CanUse RG_HOOKSHOT) (CanUse RG_ZELDAS_LULLABY)) +RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_BOMB_BAG) (and IsAdult RT_SPIRIT_LOWER_ADULT_SWITCH))))))) (or (CanUse RG_HOVER_BOOTS) CanJumpslashExceptHammer)) +RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST (SmallKeys RR_SPIRIT_TEMPLE 3) +RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST (SmallKeys RR_SPIRIT_TEMPLE 3) +RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM (and (CanUse RG_SONG_OF_TIME) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_BOMB_BAG) RT_SPIRIT_LOWER_ADULT_SWITCH))))) +RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY (and (CanUse RG_SUNS_SONG) (and (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (or (CanUse RG_BOMBCHU_5) (and (CanUse RG_BOMB_BAG) (and IsAdult RT_SPIRIT_LOWER_ADULT_SWITCH))))))) (or (CanUse RG_HOVER_BOOTS) CanJumpslash))) +RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER (SmallKeys RR_SPIRIT_TEMPLE 1) + +def RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Central Chamber +RC_SPIRIT_TEMPLE_MAP_CHEST (or (and (or HasExplosives (SmallKeys RR_SPIRIT_TEMPLE 2)) (or (CanUse RG_DINS_FIRE) (and (or (CanUse RG_FIRE_ARROWS) RT_SPIRIT_MAP_CHEST) (and (CanUse RG_FAIRY_BOW) (CanUse RG_STICKS))))) (or (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_STICKS))) (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (or (CanUse RG_FIRE_ARROWS) (and RT_SPIRIT_MAP_CHEST (CanUse RG_FAIRY_BOW))) (CanUse RG_SILVER_GAUNTLETS))))) +RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST (or (and (or HasExplosives (SmallKeys RR_SPIRIT_TEMPLE 2)) (or (CanUse RG_DINS_FIRE) (and (or (CanUse RG_FIRE_ARROWS) RT_SPIRIT_SUN_CHEST) (and (CanUse RG_FAIRY_BOW) (CanUse RG_STICKS))))) (or (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_STICKS))) (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (or (CanUse RG_FIRE_ARROWS) (and RT_SPIRIT_SUN_CHEST (CanUse RG_FAIRY_BOW))) (CanUse RG_SILVER_GAUNTLETS))))) +RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_SILVER_GAUNTLETS) (CanUse RG_ZELDAS_LULLABY))) +RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_SILVER_GAUNTLETS) (and (CanUse RG_ZELDAS_LULLABY) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) RT_SPIRIT_LOBBY_JUMP))))) +RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM (or (and HasExplosives (and (CanUse RG_BOOMERANG) (CanUse RG_HOOKSHOT))) (or (and (CanUse RG_BOOMERANG) (and (SmallKeys RR_SPIRIT_TEMPLE 5) HasExplosives)) (and (CanUse RG_HOOKSHOT) (and (CanUse RG_SILVER_GAUNTLETS) (SmallKeys RR_SPIRIT_TEMPLE 2))))) +RC_SPIRIT_TEMPLE_GS_LOBBY (or (and (or HasExplosives (SmallKeys RR_SPIRIT_TEMPLE 2)) (and RT_SPIRIT_LOBBY_GS (and (CanUse RG_BOOMERANG) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) RT_SPIRIT_LOBBY_JUMP))))) (or (and RT_SPIRIT_LOBBY_GS (and (SmallKeys RR_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_BOOMERANG)))) (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_SILVER_GAUNTLETS) (or (CanUse RG_HOOKSHOT) (or (CanUse RG_HOVER_BOOTS) RT_SPIRIT_LOBBY_JUMP)))))) +RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6 (and CanBreakPots (SmallKeys RR_SPIRIT_TEMPLE 2)) +RR_SPIRIT_TEMPLE_OUTDOOR_HANDS (or CanJumpslashExceptHammer HasExplosives) +RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR (and (SmallKeys RR_SPIRIT_TEMPLE 4) (CanUse RG_SILVER_GAUNTLETS)) +RR_SPIRIT_TEMPLE_CHILD_CLIMB true +RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD (and RT_SPIRIT_PLATFORM_HOOKSHOT (CanUse RG_HOOKSHOT)) + +def RR_SPIRIT_TEMPLE_OUTDOOR_HANDS SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Outdoor Hands +RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST (or (and (SmallKeys RR_SPIRIT_TEMPLE 3) (and (CanUse RG_LONGSHOT) HasExplosives)) (SmallKeys RR_SPIRIT_TEMPLE 5)) +RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST (and (SmallKeys RR_SPIRIT_TEMPLE 4) (and (CanUse RG_SILVER_GAUNTLETS) HasExplosives)) +RR_DESERT_COLOSSUS (or (and IsChild (SmallKeys RR_SPIRIT_TEMPLE 5)) (and (CanUse RG_SILVER_GAUNTLETS) (or (and (SmallKeys RR_SPIRIT_TEMPLE 3) HasExplosives) (SmallKeys RR_SPIRIT_TEMPLE 5)))) + +def RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Beyond Central Locked Door +RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST (and (or (CanUse RG_MIRROR_SHIELD) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) HasExplosives) +RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST (and (or RT_LENS_SPIRIT (CanUse RG_LENS_OF_TRUTH)) HasExplosives) +RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST (and (or RT_LENS_SPIRIT (CanUse RG_LENS_OF_TRUTH)) HasExplosives) +RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY (and HasExplosives (CanUse RG_SUNS_SONG)) +RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR (and (SmallKeys RR_SPIRIT_TEMPLE 5) (or RT_SPIRIT_WALL (or (CanUse RG_LONGSHOT) (or (CanUse RG_BOMBCHU_5) (and (or (CanUse RG_BOMB_BAG) (or (CanUse RG_NUTS) (CanUse RG_DINS_FIRE))) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_HOOKSHOT) (CanUse RG_MEGATON_HAMMER)))))))) + +def RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Beyond Final Locked Door +RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST (and (CanUse RG_ZELDAS_LULLABY) (or (and TakeDamage RT_FLAMING_CHESTS) (and (CanUse RG_FAIRY_BOW) (CanUse RG_HOOKSHOT)))) +RC_SPIRIT_TEMPLE_TOPMOST_CHEST (or (and (CanUse RG_MIRROR_SHIELD) CanAttack) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) +RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART (CanUse RG_HOOKSHOT) +RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART (CanUse RG_HOOKSHOT) +RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD (and (CanUse RG_MIRROR_SHIELD) (and HasExplosives (CanUse RG_HOOKSHOT))) + +def RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Inside Statue Head +RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER true +RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY true + +def RR_SPIRIT_TEMPLE_MQ_LOBBY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Lobby +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST true +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST (and (Here BlastOrSmash) CanHitEyeTargets) +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST (CanHitSwitch ED_BOOMERANG) +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST Spirit1FSilverRupees +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4 CanBreakPots +RR_SPIRIT_TEMPLE_ENTRYWAY true +RR_SPIRIT_TEMPLE_MQ_1F_WEST IsChild +RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH (and (CanUse RG_LONGSHOT) (CanUse RG_BOMBCHU_5)) + +def RR_SPIRIT_TEMPLE_MQ_1F_WEST SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ 1F West +//not technically a rusted switch, but a boulder through a wall, but is part of the same trick on N64 +MQSpiritCrawlBoulder (or (CanUse RG_BOMBCHU_5) (and RT_RUSTED_SWITCHES (CanUse RG_MEGATON_HAMMER))) +RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST MQSpiritTimeTravelChest +RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT CanBreakPots +RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART CanHitEyeTargets +RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART CanHitEyeTargets +RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH (Here (CanKillEnemy RE_TORCH_SLUG)) +RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH (Here (CanKillEnemy RE_TORCH_SLUG)) +RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH (and IsChild MQSpiritCrawlBoulder) + +def RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Gibdo Room North +RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2 CanBreakPots + +def RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ 1F Gibdo Room South +RR_SPIRIT_TEMPLE_MQ_1F_WEST true +RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH (and (CanUse RG_BOMBCHU_5) CanHitEyeTargets) +RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM (and (CanUse RG_BOMBCHU_5) (and CanHitEyeTargets (CanKillEnemy RE_GIBDO))) + +def RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Turntable Room +//For non-fairy pot items, you can also get them with rang without killing the stalfos +FairyPot (Here (CanKillEnemy RE_STALFOS)) +//implies logic->CanBreakPots() +RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) +RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) +RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) +RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4 (or (CanUse RG_BOOMERANG) (CanKillEnemy RE_STALFOS)) +RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH true +RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH (Here (CanKillEnemy RE_STALFOS)) + +def RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Map Room North +MQSpiritMapRoomEnemies (and (CanKillEnemy RE_ANUBIS) (CanKillEnemy RE_KEESE)) +RC_SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST MQSpiritMapRoomEnemies +//Stalfos room blocks you in with fire until you kill the stalfos, which won't spawn from behind the fire +RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH true + +def RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Map Room South +MQSpiritMapRoomEnemies (and (CanKillEnemy RE_ANUBIS) (CanKillEnemy RE_KEESE ED_BOOMERANG)) +RC_SPIRIT_TEMPLE_MQ_MAP_CHEST true +//The bridge is a temp flag, so not a way to cross south to north in logic +RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH (CanUse RG_HOOKSHOT) +RR_SPIRIT_TEMPLE_MQ_1F_WEST true + +def RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ West 1F Rusted Switch +MQSpiritTimeTravelChest (CanUse RG_MEGATON_HAMMER) +MQSpiritCrawlBoulder (or (CanUse RG_BOMBCHU_5) (and RT_RUSTED_SWITCHES (CanUse RG_MEGATON_HAMMER))) +RR_SPIRIT_TEMPLE_MQ_1F_WEST (and IsChild MQSpiritCrawlBoulder) +//This tracks possible child access, if adult has not entered STATUE_ROOM. Certain Child Access is checked for separately as 7 Keys +RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE (SmallKeys RR_SPIRIT_TEMPLE 1) + +def RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Under Like Like +RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT (MQSpiritSharedBrokenWallRoom RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE CanBreakPots) +//This covers adult access only, as child arrives here from the other side of this door +RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH (SmallKeys RR_SPIRIT_TEMPLE 7) +RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM CanHitSwitch + +def RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Broken Wall Room +//Implies CanKillEnemy(RE_LIKE_LIKE) +RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST (MQSpiritSharedBrokenWallRoom RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM (CanKillEnemy RE_BEAMOS)) +//Sunlights only temp spawn this chest, which is unintuitive/a bug. +//chest is only reachable as adult glitchlessly, so we can skip the shared in favour of IsAdult as adult access is always Certain +RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST (and IsAdult (and (or HasExplosives (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) (CanUse RG_HOOKSHOT))) +RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE CanHitSwitch +//This exit only governs child possible access, adult access starts on the other side so never checks this +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (SmallKeys RR_SPIRIT_TEMPLE 2) + +def RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Statue Room +RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanHitEyeTargets) +RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (or (and (or IsAdult CanJumpslash) (CanUse RG_BOOMERANG)) (and (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_SONG_OF_TIME) (and IsAdult RT_SPIRIT_LOBBY_JUMP))) CanBreakPots))) +RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_SONG_OF_TIME) (and (and IsAdult RT_SPIRIT_LOBBY_JUMP) CanBreakPots)))) +RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakPots) +RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakPots) +RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakPots) +RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakCrates) +RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakCrates) +RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM CanBreakSmallCrates) +//we check possible adult access directly in MQSpiritSharedBrokenWallRoom, so this exit only covers Certain Access +RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) +//We can use Here instead of Shared here because adult will never need to rely on child access to reach this room, and adult access is Certain +RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH (Here (or HasFireSource (and RT_SPIRIT_MQ_FROZEN_EYE (and (CanUse RG_FAIRY_BOW) (CanUse RG_SONG_OF_TIME))))) +RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM (or IsAdult (or RT_SPIRIT_MQ_SUN_BLOCK_SOT (CanUse RG_SONG_OF_TIME))) +//explicit adult check here is a precaution against possible child logic leaking, child with a hookshot can do this +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST (and IsAdult (CanUse RG_HOOKSHOT)) + +def RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Sun Block Room +//We don't need Shared here because if we are checking as child, universe 2 adult access needs nothing so it always passes, and if we are checking as adult, it is Certain Access +RC_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST true +RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM (or (CanUse RG_HOOKSHOT) (and RT_SPIRIT_MQ_SUN_BLOCK_GS (CanUse RG_BOOMERANG)))) +RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM CanBreakPots) +RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM CanBreakPots) +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM true +//This door causes the universes to merge as it requires 7 keys for both ages +RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE (SmallKeys RR_SPIRIT_TEMPLE 7) + +def RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ East Iron Knuckle +RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) +RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND (CanKillEnemy RE_IRON_KNUCKLE) + +def RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Silver Gauntlets Hand +RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST true +//If it is ever relevent for 1 age to spawn the mirror shield chest for the other can longshot across, it needs an eventAccess +RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE true +RR_DESERT_COLOSSUS true + +def RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Block Room South +RR_SPIRIT_TEMPLE_MQ_LOBBY true +//The block here is unusual in that it is a permanent flag, but reset anyway as child. This is because there's a check that would be blocked off by pushing them otherwise +//It may be worth considering making this always temp in future so adult doesn't have the same issue +RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH (if IsChild (CanUse RG_SILVER_GAUNTLETS) (Here (CanUse RG_SILVER_GAUNTLETS))) + +def RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Block Room North +//Does not need to be shared as it's hard child locked, because adult pushing the block is a permanent flag that blocks the eye target and cannot be undone +RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST (and IsChild (and (SmallKeys RR_SPIRIT_TEMPLE 7) CanHitEyeTargets)) +//if going to RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH from here is ever relevant, there needs to be an event to handle the block +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM true + +def RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Statue Room East +RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST (and (CanUse RG_HOOKSHOT) (and (CanUse RG_ZELDAS_LULLABY) (or CanJumpslash (CanUse RG_HOVER_BOOTS)))) +RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST (and (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM true +//!QUANTUM LOGIC! +//We only need 4 keys, access to Shield hand and longshot to reach Gauntlets hand, as if we waste the 5th key we have given ourselves Gauntlets hand access through child climb +//This exit handles that possibility as cleanly as possible without quantum logic, but will not survive glitch logic +//logic->CanKillEnemy(RE_FLOORMASTER) is implied +RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND (and (SmallKeys RR_SPIRIT_TEMPLE 4) (and (CanAvoidEnemy RE_BEAMOS true 4) (and (CanUse RG_SONG_OF_TIME) (and CanJumpslash (and (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) (and (CanKillEnemy RE_IRON_KNUCKLE) (CanUse RG_LONGSHOT))))))) +RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM (and (SmallKeys RR_SPIRIT_TEMPLE 5) (CanUse RG_HOOKSHOT)) +RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F (or (CanUse RG_FIRE_ARROWS) (and RT_SPIRIT_MQ_LOWER_ADULT (CanUse RG_DINS_FIRE))) + +def RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Three Suns Room 2F +//implies logic->CanKillEnemy(RE_WALLMASTER). If we have lights, we can kill stalfos and wallmasters with bow +MQSpirit3SunsEnemies (or (and (CanUse RG_MIRROR_SHIELD) (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST true +RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F MQSpirit3SunsEnemies + +def RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Three Suns Room 1F +RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F MQSpirit3SunsEnemies +RR_SPIRIT_TEMPLE_MQ_1F_EAST true + +def RR_SPIRIT_TEMPLE_MQ_1F_EAST SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ 1F East +//Assumes RR_SPIRIT_TEMPLE_MQ_LOBBY access +Spirit1FSilverRupees (CanUse RG_MEGATON_HAMMER) +RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2 CanBreakPots +RR_SPIRIT_TEMPLE_MQ_LOBBY (CanUse RG_MEGATON_HAMMER) +RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F true +RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM true +RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) + +def RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Leever Room +RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST (and (CanKillEnemy RE_PURPLE_LEEVER) (CanUse RG_HOOKSHOT)) +RC_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RR_SPIRIT_TEMPLE_MQ_1F_EAST (CanUse RG_ZELDAS_LULLABY) + +def RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Symphony Room +RR_SPIRIT_TEMPLE_MQ_1F_EAST (SmallKeys RR_SPIRIT_TEMPLE 7) +//Implies CanPassEnemy(RE_MOBLIN_CHIEF) +RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM (and (CanUse RG_MEGATON_HAMMER) (and (CanUse RG_SONG_OF_TIME) (and (CanUse RG_EPONAS_SONG) (and (CanUse RG_SUNS_SONG) (and (CanUse RG_SONG_OF_STORMS) (CanUse RG_ZELDAS_LULLABY)))))) + +def RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ After Symphony Room +RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST (CanPassEnemy RE_BIG_SKULLTULA) +RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM true + +def RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Four Beamos Room +RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST (CanKillEnemy RE_BEAMOS) +RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE (and (CanKillEnemy RE_BEAMOS) (and (CanUse RG_SONG_OF_TIME) CanBreakSmallCrates)) +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST (and (CanAvoidEnemy RE_BEAMOS true 4) (and (CanUse RG_SONG_OF_TIME) (and (SmallKeys RR_SPIRIT_TEMPLE 5) (CanUse RG_HOOKSHOT)))) +RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM (and (CanAvoidEnemy RE_BEAMOS true 4) (CanUse RG_SONG_OF_TIME)) +RR_SPIRIT_TEMPLE_MQ_BIG_WALL (SmallKeys RR_SPIRIT_TEMPLE 6) + +def RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ SoT Sun Room +RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST true +RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM true +RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND CanJumpslash +RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM (Here (and (or IsAdult (CanUse RG_SONG_OF_TIME)) (CanUse RG_MIRROR_SHIELD))) + +def RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ East Stairs to Hand +RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM true +RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE (and (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) (Here (CanKillEnemy RE_FLOORMASTER))) + +def RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ East Iron Knuckle +RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND true +RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND (Here (CanKillEnemy RE_IRON_KNUCKLE)) + +def RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Mirror Shield Hand +RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST true +RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND (CanUse RG_LONGSHOT) +RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE true +RR_DESERT_COLOSSUS true + +def RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ 3F Gibdo Room +RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST true +RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM true + +def RR_SPIRIT_TEMPLE_MQ_BIG_WALL SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Big Wall +RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2 CanBreakPots +RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM true +//technically we only need to avoid them, but the sheer height and the moving walls makes getting to the top after only stunning them very difficult/impossible +//The silver rupees are irrelevant without silver shuffle +RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL (CanKillEnemy RE_KEESE) + +def RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ 4F Central +RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2 CanBreakPots +RR_SPIRIT_TEMPLE_MQ_BIG_WALL true +RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM (SmallKeys RR_SPIRIT_TEMPLE 7) +RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM (CanUse RG_ZELDAS_LULLABY) + +def RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Nine Chairs Room +//These skulls rely on the iron knuckle existing without a trick to shoot through the chairs +RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH (CanGetEnemyDrop RE_GOLD_SKULLTULA) +RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL true + +def RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Big Mirror Room +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4 CanBreakPots +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1 CanBreakCrates +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4 CanBreakCrates +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2 CanBreakCrates +RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3 CanBreakCrates +RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL true +RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE (Here (CanUse RG_MEGATON_HAMMER)) + +def RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Big Mirror Cave +RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST (or RT_LENS_SPIRIT_MQ (CanUse RG_LENS_OF_TRUTH)) +//If it's ever relevant to longshot into head from lobby, this needs to be an event access +RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD (and (Here (CanUse RG_MIRROR_SHIELD)) (CanUse RG_HOOKSHOT)) +RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM (Here (CanUse RG_MIRROR_SHIELD)) + +def RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple MQ Inside Statue Head +RR_SPIRIT_TEMPLE_MQ_LOBBY true +RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY true + +def RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE +Spirit Temple Boss Entryway +RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD (and (IsDungeonVanilla SPIRIT_TEMPLE) false) +RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD (and (IsDungeonMQ SPIRIT_TEMPLE) false) +RR_SPIRIT_TEMPLE_BOSS_ROOM (HasItem RG_SPIRIT_TEMPLE_BOSS_KEY) + +def RR_SPIRIT_TEMPLE_BOSS_ROOM SCENE_SPIRIT_TEMPLE_BOSS false +Spirit Temple Boss Room +SpiritTempleClear (CanKillEnemy RE_TWINROVA) +RC_SPIRIT_TEMPLE_TWINROVA_HEART SpiritTempleClear +RC_TWINROVA SpiritTempleClear +RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY false +RR_DESERT_COLOSSUS @deprioritize SpiritTempleClear diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/water_temple.s b/soh/soh/Enhancements/randomizer/logic/dungeons/water_temple.s new file mode 100644 index 000000000..0b8386b56 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/water_temple.s @@ -0,0 +1,634 @@ +def RR_WATER_TEMPLE_ENTRYWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Entryway +RR_WATER_TEMPLE_LOBBY (and (HasItem RG_BRONZE_SCALE) (IsDungeonVanilla WATER_TEMPLE)) +RR_WATER_TEMPLE_MQ_3F_CENTRAL (and (HasItem RG_BRONZE_SCALE) (IsDungeonMQ WATER_TEMPLE)) +RR_LH_FROM_WATER_TEMPLE true + +//Water Temple logic currently assumes that the locked door leading to the upper water raising location is unlocked from the start +def RR_WATER_TEMPLE_LOBBY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Lobby +RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1 (and CanBreakPots (or CanWaterTempleLowFromHigh (or CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))))) +RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2 (and CanBreakPots (or CanWaterTempleLowFromHigh (or CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))))) +RR_WATER_TEMPLE_ENTRYWAY true +RR_WATER_TEMPLE_EAST_LOWER (or CanWaterTempleLowFromHigh (and (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC)) (or (CanUse RG_IRON_BOOTS) (and (CanUse RG_LONGSHOT) RT_WATER_LONGSHOT_TORCH)))) +RR_WATER_TEMPLE_NORTH_LOWER (or CanWaterTempleLowFromHigh (and (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC)) (CanUse RG_IRON_BOOTS))) +RR_WATER_TEMPLE_SOUTH_LOWER (and CanWaterTempleLowFromHigh (and HasExplosives (and (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS)) (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC))))) +RR_WATER_TEMPLE_WEST_LOWER (and CanWaterTempleLowFromHigh (and (HasItem RG_GORONS_BRACELET) (and (or IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC))))) +RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER (and CanWaterTempleLowFromHigh (SmallKeys RR_WATER_TEMPLE 5)) +RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER (and (or CanWaterTempleLowFromHigh CanWaterTempleMiddle) (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) +RR_WATER_TEMPLE_EAST_MIDDLE (and (or CanWaterTempleLowFromHigh (or CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)))) (CanUse RG_HOOKSHOT)) +RR_WATER_TEMPLE_WEST_MIDDLE CanWaterTempleMiddle +RR_WATER_TEMPLE_HIGH_WATER (and IsAdult (or (CanUse RG_HOVER_BOOTS) (and RT_DAMAGE_BOOST (and (CanUse RG_BOMB_BAG) TakeDamage)))) +RR_WATER_TEMPLE_BLOCK_CORRIDOR (and (or CanWaterTempleLowFromHigh CanWaterTempleMiddle) (and (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) (or (CanUse RG_LONGSHOT) (or (CanUse RG_HOVER_BOOTS) (and RT_WATER_CENTRAL_BOW (or IsAdult CanWaterTempleMiddle)))))) +RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM (and CanWaterTempleHigh (SmallKeys RR_WATER_TEMPLE 4)) +RR_WATER_TEMPLE_PRE_BOSS_ROOM (or (and CanWaterTempleHigh (CanUse RG_LONGSHOT)) (and RT_HOVER_BOOST_SIMPLE (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives (CanUse RG_HOVER_BOOTS))))) + +def RR_WATER_TEMPLE_EAST_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple East Lower +CanWaterTempleLowFromHigh (CanUse RG_ZELDAS_LULLABY) +RC_WATER_TEMPLE_TORCH_POT_1 (and CanBreakPots (or CanWaterTempleLowFromHigh (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)))) +RC_WATER_TEMPLE_TORCH_POT_2 (and CanBreakPots (or CanWaterTempleLowFromHigh (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)))) +RR_WATER_TEMPLE_LOBBY (or CanWaterTempleLowFromHigh (and (or RT_FEWER_TUNIC_REQUIREMENTS (CanUse RG_ZORA_TUNIC)) (CanUse RG_IRON_BOOTS))) +RR_WATER_TEMPLE_MAP_ROOM CanWaterTempleHigh +RR_WATER_TEMPLE_CRACKED_WALL (or CanWaterTempleMiddle (and CanWaterTempleHigh (and CanWaterTempleLowFromHigh (or (and (CanUse RG_HOVER_BOOTS) RT_WATER_CRACKED_WALL_HOVERS) RT_WATER_CRACKED_WALL)))) +RR_WATER_TEMPLE_TORCH_ROOM (and CanWaterTempleLowFromHigh (or HasFireSourceWithTorch (CanUse RG_FAIRY_BOW))) + +def RR_WATER_TEMPLE_MAP_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Map Room +RC_WATER_TEMPLE_MAP_CHEST (CanKillEnemy RE_SPIKE ED_CLOSE true 3) +RR_WATER_TEMPLE_EAST_LOWER (CanKillEnemy RE_SPIKE ED_CLOSE true 3) + +def RR_WATER_TEMPLE_CRACKED_WALL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Cracked Wall +RC_WATER_TEMPLE_CRACKED_WALL_CHEST HasExplosives +RR_WATER_TEMPLE_EAST_LOWER true + +def RR_WATER_TEMPLE_TORCH_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Torch Room +RC_WATER_TEMPLE_TORCHES_CHEST (CanKillEnemy RE_SHELL_BLADE ED_CLOSE true 3) +RR_WATER_TEMPLE_EAST_LOWER (CanKillEnemy RE_SHELL_BLADE ED_CLOSE true 3) + +def RR_WATER_TEMPLE_NORTH_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple North Lower +RR_WATER_TEMPLE_LOBBY true +RR_WATER_TEMPLE_BOULDERS_LOWER (and (or (CanUse RG_LONGSHOT) (and RT_WATER_BK_REGION (CanUse RG_HOVER_BOOTS))) (SmallKeys RR_WATER_TEMPLE 4)) + +def RR_WATER_TEMPLE_BOULDERS_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Boulders Lower +RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST (or (CanUse RG_LONGSHOT) (Here (or (and IsAdult HookshotOrBoomerang) (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))))) +RR_WATER_TEMPLE_NORTH_LOWER (SmallKeys RR_WATER_TEMPLE 4) +RR_WATER_TEMPLE_BLOCK_ROOM true +RR_WATER_TEMPLE_BOULDERS_UPPER (or (and IsAdult (or (CanUse RG_HOVER_BOOTS) RT_WATER_NORTH_BASEMENT_LEDGE_JUMP)) (and (CanUse RG_HOVER_BOOTS) (CanUse RG_IRON_BOOTS))) + +def RR_WATER_TEMPLE_BLOCK_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Block Room +RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1 CanBreakPots +RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2 CanBreakPots +RR_WATER_TEMPLE_BOULDERS_LOWER (or (and (HasItem RG_GORONS_BRACELET) HasExplosives) (CanUse RG_HOOKSHOT)) +RR_WATER_TEMPLE_JETS_ROOM (or (and (HasItem RG_GORONS_BRACELET) HasExplosives) (and (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS))) + +def RR_WATER_TEMPLE_JETS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Jets Room +RR_WATER_TEMPLE_BLOCK_ROOM (CanUse RG_HOOKSHOT) +RR_WATER_TEMPLE_BOULDERS_UPPER true + +def RR_WATER_TEMPLE_BOULDERS_UPPER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Boulders Upper +RR_WATER_TEMPLE_BOULDERS_LOWER true +RR_WATER_TEMPLE_JETS_ROOM IsAdult +RR_WATER_TEMPLE_BOSS_KEY_ROOM (and (or (CanUse RG_IRON_BOOTS) (and IsAdult RT_WATER_BK_JUMP_DIVE)) (SmallKeys RR_WATER_TEMPLE 5)) + +def RR_WATER_TEMPLE_BOSS_KEY_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Boss Key Room +FairyPot true +RC_WATER_TEMPLE_BOSS_KEY_CHEST true +RC_WATER_TEMPLE_BOSS_KEY_POT_1 CanBreakPots +RC_WATER_TEMPLE_BOSS_KEY_POT_2 CanBreakPots +RR_WATER_TEMPLE_BOULDERS_UPPER (and (or (CanUse RG_IRON_BOOTS) (or (and IsAdult RT_WATER_BK_JUMP_DIVE) (or IsChild (HasItem RG_SILVER_SCALE)))) (SmallKeys RR_WATER_TEMPLE 5)) + +def RR_WATER_TEMPLE_SOUTH_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple South Lower +RC_WATER_TEMPLE_GS_BEHIND_GATE (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +RC_WATER_TEMPLE_BEHIND_GATE_POT_1 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +RC_WATER_TEMPLE_BEHIND_GATE_POT_2 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +RC_WATER_TEMPLE_BEHIND_GATE_POT_3 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +RC_WATER_TEMPLE_BEHIND_GATE_POT_4 (and CanJumpslash (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +RR_WATER_TEMPLE_LOBBY (CanUse RG_IRON_BOOTS) + +def RR_WATER_TEMPLE_WEST_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple West Lower +RR_WATER_TEMPLE_LOBBY (and (CanUse RG_HOOKSHOT) (and (CanUse RG_IRON_BOOTS) (HasItem RG_GORONS_BRACELET))) +RR_WATER_TEMPLE_DRAGON_ROOM (or CanJumpslashExceptHammer CanUseProjectile) + +def RR_WATER_TEMPLE_DRAGON_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Dragon Room +RC_WATER_TEMPLE_DRAGON_CHEST (or (and (CanUse RG_HOOKSHOT) (CanUse RG_IRON_BOOTS)) (or (and (or (and IsAdult (and RT_WATER_ADULT_DRAGON (or (CanUse RG_HOOKSHOT) (or (CanUse RG_FAIRY_BOW) (CanUse RG_BOMBCHU_5))))) (and IsChild (and RT_WATER_CHILD_DRAGON (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOOMERANG) (CanUse RG_BOMBCHU_5)))))) (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) (Here (and IsAdult (and (CanUse RG_FAIRY_BOW) (or (and RT_WATER_ADULT_DRAGON (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) RT_WATER_DRAGON_JUMP_DIVE)))))) +RR_WATER_TEMPLE_WEST_LOWER true + +def RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Central Pillar Lower +RR_WATER_TEMPLE_LOBBY (SmallKeys RR_WATER_TEMPLE 5) +RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER (CanUse RG_HOOKSHOT) +RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT (and CanWaterTempleMiddle (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 40))) + +def RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Central Pillar Upper +CanWaterTempleMiddle (CanUse RG_ZELDAS_LULLABY) +RC_WATER_TEMPLE_GS_CENTRAL_PILLAR (or (CanUse RG_LONGSHOT) (and (or (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DINS_FIRE) (SmallKeys RR_WATER_TEMPLE 5))))) (and RT_WATER_IRONS_CENTRAL_GS (and (CanUse RG_IRON_BOOTS) (or (and (CanUse RG_HOOKSHOT) (CanUse RG_FAIRY_BOW)) (CanUse RG_DINS_FIRE))))) (and CanWaterTempleHigh HookshotOrBoomerang))) +RR_WATER_TEMPLE_LOBBY true +RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER true + +def RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Central Pillar Basement +RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST (and (CanUse RG_HOOKSHOT) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 40))) +RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) + +def RR_WATER_TEMPLE_EAST_MIDDLE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple East Middle +RC_WATER_TEMPLE_COMPASS_CHEST CanUseProjectile +RC_WATER_TEMPLE_NEAR_COMPASS_POT_1 CanBreakPots +RC_WATER_TEMPLE_NEAR_COMPASS_POT_2 CanBreakPots +RC_WATER_TEMPLE_NEAR_COMPASS_POT_3 CanBreakPots +RR_WATER_TEMPLE_LOBBY (CanUse RG_IRON_BOOTS) + +def RR_WATER_TEMPLE_WEST_MIDDLE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple West Middle +RR_WATER_TEMPLE_LOBBY true +RR_WATER_TEMPLE_HIGH_WATER CanUseProjectile + +def RR_WATER_TEMPLE_HIGH_WATER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple High Water +CanWaterTempleHigh (CanUse RG_ZELDAS_LULLABY) +RR_WATER_TEMPLE_LOBBY true + +def RR_WATER_TEMPLE_BLOCK_CORRIDOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Block Corridor +RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST (and (HasItem RG_GORONS_BRACELET) (or CanWaterTempleLowFromHigh CanWaterTempleMiddle)) +RC_WATER_TEMPLE_CENTRAL_BOW_POT_1 (and CanBreakPots (and (HasItem RG_GORONS_BRACELET) (or CanWaterTempleLowFromHigh CanWaterTempleMiddle))) +RC_WATER_TEMPLE_CENTRAL_BOW_POT_2 (and CanBreakPots (and (HasItem RG_GORONS_BRACELET) (or CanWaterTempleLowFromHigh CanWaterTempleMiddle))) +RR_WATER_TEMPLE_LOBBY (CanUse RG_HOOKSHOT) + +def RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Falling Platform Room +RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM (or (CanUse RG_LONGSHOT) (or (and RT_WATER_RANG_FALLING_PLATFORM_GS (and IsChild (CanUse RG_BOOMERANG))) (and RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS (and IsAdult (CanUse RG_HOOKSHOT))))) +RR_WATER_TEMPLE_LOBBY (and (CanUse RG_HOOKSHOT) (SmallKeys RR_WATER_TEMPLE 4)) +RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM (and (CanUse RG_HOOKSHOT) (SmallKeys RR_WATER_TEMPLE 5)) + +def RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Dragon Pillars Room +RC_WATER_TEMPLE_LIKE_LIKE_POT_1 (CanUse RG_HOOKSHOT) +RC_WATER_TEMPLE_LIKE_LIKE_POT_2 (CanUse RG_HOOKSHOT) +RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM CanUseProjectile +RR_WATER_TEMPLE_DARK_LINK_ROOM (CanUse RG_HOOKSHOT) + +def RR_WATER_TEMPLE_DARK_LINK_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Dark Link Room +RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM (CanKillEnemy RE_DARK_LINK) +RR_WATER_TEMPLE_LONGSHOT_ROOM (CanKillEnemy RE_DARK_LINK) + +def RR_WATER_TEMPLE_LONGSHOT_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Longshot Room +RC_WATER_TEMPLE_LONGSHOT_CHEST true +RR_WATER_TEMPLE_DARK_LINK_ROOM true +RR_WATER_TEMPLE_RIVER (or IsChild (CanUse RG_SONG_OF_TIME)) + +def RR_WATER_TEMPLE_RIVER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple River +RC_WATER_TEMPLE_RIVER_CHEST (and (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) (or IsAdult (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)))) +RC_WATER_TEMPLE_GS_RIVER (or (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT)) (and RT_WATER_RIVER_GS (CanUse RG_LONGSHOT))) +RC_WATER_TEMPLE_RIVER_POT_1 CanBreakPots +RC_WATER_TEMPLE_RIVER_POT_2 CanBreakPots +RC_WATER_TEMPLE_RIVER_HEART_1 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (HasItem RG_BRONZE_SCALE)) +RC_WATER_TEMPLE_RIVER_HEART_2 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (HasItem RG_BRONZE_SCALE)) +RC_WATER_TEMPLE_RIVER_HEART_3 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (HasItem RG_BRONZE_SCALE)) +RC_WATER_TEMPLE_RIVER_HEART_4 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 24)) (HasItem RG_BRONZE_SCALE)) +RR_WATER_TEMPLE_DRAGON_ROOM (and (or (CanUse RG_FAIRY_SLINGSHOT) (CanUse RG_FAIRY_BOW)) (or IsAdult (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)))) + +def RR_WATER_TEMPLE_PRE_BOSS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Pre Boss Room +FairyPot true +RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1 CanBreakPots +RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2 CanBreakPots +RR_WATER_TEMPLE_LOBBY true +RR_WATER_TEMPLE_BOSS_ENTRYWAY true + +def RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ 3F South Ledge +RR_WATER_TEMPLE_ENTRYWAY (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) +RR_WATER_TEMPLE_MQ_MAIN true +//If we are not on WL_HIGH, we reach RR_WATER_TEMPLE_MQ_3F_MAIN with hookshot via 2F, otherwise we can reach the platform +RR_WATER_TEMPLE_MQ_3F_CENTRAL (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS)) +RR_WATER_TEMPLE_MQ_2F_CENTRAL (MQWaterLevel WL_LOW_OR_MID) + +//This region covers simply existing in the area around the central pillar without being on a specific platform, either swimming or walking on the lakebed +//Entry should only include being in the correct area, taking any possible fall damage, and floating up to the surface of WL_HIGH if coming from below +//This area then leads to others based on level and worst-case water timers for follow-up exits from the water's surface +//remember that any solution that works for any level doesn't need to be given a level, even if that solution is overkill for a lower level +def RR_WATER_TEMPLE_MQ_MAIN SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Main +RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE (and (HasItem RG_BRONZE_SCALE) (MQWaterLevel WL_HIGH)) +//Jumping across is possible but a trick due to the janky ledge +RR_WATER_TEMPLE_MQ_EAST_TOWER (or (and (>= WaterTimer 24) (CanUse RG_IRON_BOOTS)) (or (and (MQWaterLevel WL_MID) (and (HasItem RG_GOLDEN_SCALE) (>= WaterTimer 16))) (MQWaterLevel WL_LOW))) +RR_WATER_TEMPLE_MQ_3F_CENTRAL (and (MQWaterLevel WL_HIGH) (HasItem RG_BRONZE_SCALE)) +//First water timer uses the hook to go from the top of center to storage room/central pillar as coming from the bottom +//Second water timer is simply diving down and entering the door as fast as possible from the surface +RR_WATER_TEMPLE_MQ_2F_CENTRAL (or (and (or (MQWaterLevel WL_LOW) (and (CanUse RG_IRON_BOOTS) (or (MQWaterLevel WL_MID) (>= WaterTimer 16)))) (CanUse RG_LONGSHOT)) (and (or (MQWaterLevel WL_MID) (and (MQWaterLevel WL_HIGH_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)))) (HasItem RG_BRONZE_SCALE))) +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F (MQWaterLevel WL_LOW) +//A special entry as we can't set it to high after entering at a lower height +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT))))) +RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY (and (or (MQWaterLevel WL_MID) (and (MQWaterLevel WL_HIGH_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)))) (HasItem RG_BRONZE_SCALE)) +RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH (and MQWaterB1Switch (or (MQWaterLevel WL_LOW) (and (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 24)) (HasItem RG_BRONZE_SCALE)))) +RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM (and MQWaterB1Switch (or (and (MQWaterLevel WL_LOW) (HasItem RG_SILVER_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)))))) +//Adult needs to jump in instead of dive for swim access, but you just hold forward. RT_WATER_BK_REGION isn't relevant unless the Dark Link loop can be done without longshot with other tricks +RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM (and MQWaterB1Switch (and (or (and (MQWaterLevel WL_LOW) (HasItem RG_BRONZE_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (CanUse RG_HOOKSHOT)))) (or (CanUse RG_LONGSHOT) (and RT_WATER_BK_REGION (CanUse RG_HOVER_BOOTS))))) + +//This region specifically covers the topmost platform around central pillar +def RR_WATER_TEMPLE_MQ_3F_CENTRAL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ 3F Central +RR_WATER_TEMPLE_MQ_MAIN true +RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE (or (CanUse RG_LONGSHOT) (CanUse RG_HOVER_BOOTS)) +RR_WATER_TEMPLE_MQ_2F_CENTRAL (and (or (MQWaterLevel WL_LOW_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) (CanUse RG_HOOKSHOT)) +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (CanUse RG_HOOKSHOT)))) +RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE (or (and (MQWaterLevel WL_HIGH) (CanUse RG_LONGSHOT)) (and RT_HOVER_BOOST_SIMPLE (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives (CanUse RG_HOVER_BOOTS))))) +//Jumping across is possible but a trick due to the janky ledge +RR_WATER_TEMPLE_MQ_HIGH_EMBLEM (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS))) +//room access is (logic->IsAdult || (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))) +RR_WATER_TEMPLE_MQ_WATERFALL (and (SmallKeys RR_WATER_TEMPLE 1) (and (MQWaterLevel WL_HIGH) (CanUse RG_LONGSHOT))) +//this swimless jump with irons may be a trick as you have to put irons on quite late. +RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) (MQWaterLevel WL_LOW_OR_MID)) + +//This region specifically covers walking on the lower platform around central pillar. This is underwater when WL_HIGH +//RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH should be accessed directly to use the central pillar door while at WL_HIGH +def RR_WATER_TEMPLE_MQ_2F_CENTRAL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ 2F Central +RR_WATER_TEMPLE_MQ_MAIN true +RR_WATER_TEMPLE_MQ_3F_CENTRAL (CanUse RG_HOOKSHOT) +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F (MQWaterLevel WL_LOW_OR_MID) +RR_WATER_TEMPLE_MQ_STORAGE_ROOM (CanUse RG_HOOKSHOT) +RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F (and (MQWaterLevel WL_LOW_OR_MID) (and (or IsAdult (CanUse RG_HOVER_BOOTS)) (CanUse RG_HOOKSHOT))) +RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY (and (MQWaterLevel WL_LOW_OR_MID) (CanUse RG_HOVER_BOOTS)) + +def RR_WATER_TEMPLE_MQ_2F_CENTRAL_HIGH SCENE_ID_MAX false +Invalid Region + +def RR_WATER_TEMPLE_MQ_HIGH_EMBLEM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ High Emblem +ReachedWaterHighEmblem true +CanWaterTempleHigh (CanUse RG_ZELDAS_LULLABY) +RR_WATER_TEMPLE_MQ_3F_CENTRAL true +RR_WATER_TEMPLE_MQ_MAIN true + +def RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ 3F North Ledge +//what we need if WL_LOW, we can't guarantee repeated access otherwise. +RR_WATER_TEMPLE_MQ_MAIN (or (HasItem RG_BRONZE_SCALE) TakeDamage) +RR_WATER_TEMPLE_MQ_3F_CENTRAL (CanUse RG_LONGSHOT) +RR_WATER_TEMPLE_MQ_BOSS_DOOR (or (CanUse RG_LONGSHOT) (or (CanUse RG_ICE_ARROWS) (CanUse RG_NAYRUS_LOVE))) + +def RR_WATER_TEMPLE_MQ_BOSS_DOOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Main +RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE (or (CanUse RG_ICE_ARROWS) TakeDamage) +RR_WATER_TEMPLE_BOSS_ENTRYWAY true + +def RR_WATER_TEMPLE_MQ_EAST_TOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ East Tower +//if we can't reach these, we can't move the water at all, so no need to specify level or account for WL_LOW access here +//review is some way to play ocarina underwater exists +CouldWaterTempleLow true +CanWaterTempleLowFromHigh (CanUse RG_ZELDAS_LULLABY) +RC_WATER_TEMPLE_MQ_MAP_CHEST (and (MQWaterLevel WL_HIGH) (and HasFireSource (CanUse RG_HOOKSHOT))) +RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST (or (and (MQWaterLevel WL_MID) (CanUse RG_HOOKSHOT)) (and (MQWaterLevel WL_HIGH_OR_MID) CanOpenUnderwaterChest)) +RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1 (or (and (MQWaterLevel WL_LOW) CanBreakPots) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (>= WaterTimer 16)))) +RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2 (or (and (MQWaterLevel WL_LOW) CanBreakPots) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (>= WaterTimer 16)))) +RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM (and (MQWaterLevel WL_LOW) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_DINS_FIRE) (CanUse RG_STICKS)))) + +//Raising the targets by clearing this room achieves nothing logically because it requires WL_LOW to do and hookshot to use, which implies access to WL_MID and WL_HIGH already +def RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ East Tower 1F Room +RC_WATER_TEMPLE_MQ_COMPASS_CHEST (and (CanKillEnemy RE_LIZALFOS) (CanKillEnemy RE_SPIKE)) +RR_WATER_TEMPLE_MQ_EAST_TOWER true + +//This area assumes we entered through the lower door, so water is low and cannot be changed without leaving. +def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Central Pillar 1F +//This is harder than the other possibilities as you have to move between shots on top of the extra range, but there's basically no universe this should matter. +MQWaterB1Switch (and RT_WATER_MQ_CENTRAL_PILLAR (CanUse RG_FIRE_ARROWS)) +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (HasItem RG_BRONZE_SCALE)))) +//I don't know if this FW trick can ever matter but maybe it's needed to get child to CENTRAL_2F or something +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F (or (CanUse RG_HOOKSHOT) (and (MQWaterLevel WL_MID) (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (HasItem RG_BRONZE_SCALE))))) +//if the gate is open, you sink straight in, so you can't climb up this way in logic without swimming +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 (and MQWaterOpenedPillarB1 (and (MQWaterLevel WL_HIGH_OR_MID) (and RT_WATER_FW_CENTRAL_GS (and (CanUse RG_FARORES_WIND) (and (CanUse RG_IRON_BOOTS) (CanUse RG_ZORA_TUNIC)))))) + +//If we enter here in WL_HIGH, go to RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH instead, Assumes WL_MID_OR_LOW +def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Central Pillar 2F +CouldWaterTempleMiddle true +CanWaterTempleMiddle (CanUse RG_ZELDAS_LULLABY) +//It's possible to do this even on low water, but more awkward. I'm not sure if it's even possible for it to be relevant though. +MQWaterOpenedPillarB1 (and RT_WATER_MQ_CENTRAL_PILLAR (CanUse RG_FIRE_ARROWS)) +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH (and (MQWaterLevel WL_HIGH) (and (CanUse RG_FARORES_WIND) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)))) +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 (and MQWaterOpenedPillarB1 (and (MQWaterLevel WL_MID) (and (CanUse RG_IRON_BOOTS) (CanUse RG_ZORA_TUNIC)))) + +def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Central Pillar High +MQWaterOpenedPillarB1 (and (or (and (CanUse RG_SONG_OF_TIME) (CanUse RG_DINS_FIRE)) (and RT_WATER_MQ_CENTRAL_PILLAR (CanUse RG_FIRE_ARROWS))) (or (HasItem RG_BRONZE_SCALE) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_LONGSHOT) CanJumpslash)))) +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2 CanBreakCrates +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 (and MQWaterB1Switch (and (CanUse RG_IRON_BOOTS) (CanUse RG_ZORA_TUNIC))) + +//Assuming tunic and irons was checked on entry +def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Central Pillar B1 +//Can't know water level, so we'll just assume any possibility and skip to MAIN +RR_WATER_TEMPLE_MQ_MAIN (and MQWaterOpenedPillarB1 (and (CanUse RG_IRON_BOOTS) (HasItem RG_BRONZE_SCALE))) +//Child needs to release irons for height to push down the larger "peg", however they can push the lower one down by climbing and then hit the switch through the larger peg, but it's a trick +RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL (or (and IsAdult (CanUse RG_LONGSHOT)) (and (CanUse RG_HOOKSHOT) (HasItem RG_BRONZE_SCALE))) + +def RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Central Pillar B1 Final +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST (CanUse RG_HOOKSHOT) +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13 CanBreakCrates +RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14 CanBreakCrates + +def RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Behind Blue Switch 2F +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2 CanBreakPots +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3 CanBreakPots +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE CanBreakSmallCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE CanBreakSmallCrates +RR_WATER_TEMPLE_MQ_MAIN true +RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F (CanUse RG_LONGSHOT) + +def RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Behind Blue Switch 2F +RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH (CanGetEnemyDrop RE_GOLD_SKULLTULA) +RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F true +RR_WATER_TEMPLE_MQ_HIGH_EMBLEM true + +def RR_WATER_TEMPLE_MQ_STORAGE_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Storage Room +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2 CanBreakPots +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3 CanBreakPots +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1 CanBreakSmallCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2 CanBreakSmallCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3 CanBreakSmallCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4 CanBreakSmallCrates +RR_WATER_TEMPLE_MQ_MAIN (or (MQWaterLevel WL_LOW_OR_MID) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) + +def RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Lizalfos Hallway +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT CanBreakPots +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT CanBreakPots +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT CanBreakPots +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5 CanBreakCrates +RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE (and (MQWaterLevel WL_LOW_OR_MID) (CanUse RG_DINS_FIRE)) +//this technically exists, but only complicates things, uncomment if some edge case/glitch can use RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY to reach RR_WATER_TEMPLE_MQ_3F_CENTRAL, or if a void warp goes here +//RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE (or (and (CanUse RG_HOOKSHOT) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS))) (and (MQWaterLevel WL_LOW_OR_MID) (CanUse RG_HOOKSHOT)) (and (MQWaterLevel WL_HIGH) (HasItem RG_BRONZE_SCALE))) + +def RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Lizalfos Cage +RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY (CanKillEnemy RE_GOLD_SKULLTULA) +RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT CanBreakPots +RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT CanBreakPots +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2 CanBreakCrates + +def RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE SCENE_ID_MAX false +Invalid Region + +//This room exists to hold the wonderitems that drop from the emblems here. Specifically this assumes you are standing on the final ledge +def RR_WATER_TEMPLE_MQ_WATERFALL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Waterfall +RR_WATER_TEMPLE_MQ_3F_CENTRAL (and (SmallKeys RR_WATER_TEMPLE 1) (CanUse RG_LONGSHOT)) +RR_WATER_TEMPLE_MQ_STALFOS_PIT true +RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS (or (and MQWaterStalfosPit (and IsAdult (CanUse RG_HOOKSHOT))) (CanUse RG_HOVER_BOOTS)) +RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (and MQWaterStalfosPit (CanUse RG_LONGSHOT)) + +def RR_WATER_TEMPLE_MQ_STALFOS_PIT SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Stalfos Pit +MQWaterStalfosPit (or (and IsAdult (CanKillEnemy RE_STALFOS ED_CLOSE true 3 false true)) (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (CanKillEnemy RE_STALFOS ED_BOMB_THROW true 3 false true)))) +RR_WATER_TEMPLE_MQ_WATERFALL (and MQWaterStalfosPit (and (CanUse RG_HOOKSHOT) (or IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))))) +RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS (or (and IsAdult (CanUse RG_HOOKSHOT)) (and (CanUse RG_HOOKSHOT) (and (or IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) (or (CanUse RG_HOVER_BOOTS) MQWaterStalfosPit)))) +RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (and MQWaterStalfosPit (and (or IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8))) (CanUse RG_HOOKSHOT))) + +//also includes the suns fairy in the middle +def RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Stalfos Pit Pots +FairyPot true +NutPot true +RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT CanBreakPots +RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT CanBreakPots +RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT CanBreakPots +RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_WATER_TEMPLE_MQ_WATERFALL (and MQWaterStalfosPit (or (CanUse RG_HOVER_BOOTS) (CanUse RG_LONGSHOT))) +RR_WATER_TEMPLE_MQ_STALFOS_PIT true +RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (and MQWaterStalfosPit (CanUse RG_HOOKSHOT)) + +//specifically the area past the spikes +def RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Stalfos Pit Upper +RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2 CanBreakPots +RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) +RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_WATER_TEMPLE_MQ_STALFOS_PIT (or IsAdult TakeDamage) +RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS (or IsAdult TakeDamage) +RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK (CanKillEnemy RE_DARK_LINK) + +def RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ After Dark Link +FairyPot true +RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2 CanBreakPots +RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (CanKillEnemy RE_DARK_LINK) +RR_WATER_TEMPLE_MQ_RIVER_SKULL (and (CanUse RG_HOOKSHOT) (or (HasItem RG_BRONZE_SCALE) (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8)) (CanUse RG_LONGSHOT)))) + +//if we can use hookshot, we are standing on the targets, otherwise assume we're in the water +def RR_WATER_TEMPLE_MQ_RIVER_SKULL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ River Skull +RC_WATER_TEMPLE_MQ_GS_RIVER (or (CanUse RG_LONGSHOT) (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))) +RR_WATER_TEMPLE_MQ_RIVER_POTS (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)) + +def RR_WATER_TEMPLE_MQ_RIVER_POTS SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ River Pots +FairyPot true +RC_WATER_TEMPLE_MQ_RIVER_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_RIVER_POT_2 CanBreakPots +RR_WATER_TEMPLE_MQ_RIVER_SKULL (or (CanUse RG_LONGSHOT) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (CanUse RG_HOOKSHOT)))) +//You don't need to swim for this if you put irons on in midair and hold forward while aiming for the tunnel with a tight angle, but if you miss you have to void unless you have a hook. It's only relevant with glitches anyway +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE (or (HasItem RG_SILVER_SCALE) (and IsAdult (and (HasItem RG_BRONZE_SCALE) RT_WATER_DRAGON_JUMP_DIVE))) +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_LONGSHOT) (and (CanUse RG_HOVER_BOOTS) CanJumpslash))) + +def RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Dragon Room Door +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2 CanBreakCrates +RR_WATER_TEMPLE_MQ_RIVER_POTS (CanUse RG_LONGSHOT) +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) (CanUse RG_HOOKSHOT))) +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE (HasItem RG_SILVER_SCALE) +RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH MQWaterDragonTorches + +//This region assumes Iron boots to access +def RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Dragon Room Tunnel +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4 CanBreakCrates +RR_WATER_TEMPLE_MQ_RIVER_POTS (CanUse RG_LONGSHOT) +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOOKSHOT)) +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)) + +def RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Dragon Room Alcove +MQWaterDragonTorches HasFireSource +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1 CanBreakSmallCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2 CanBreakSmallCrates +RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3 CanBreakSmallCrates +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)) +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR (HasItem RG_SILVER_SCALE) + +def RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Boss Key Room Switch +RC_WATER_TEMPLE_MQ_BOSS_KEY_POT CanBreakPots +RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE CanBreakCrates +RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR true +RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT true +RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST (and CanHitSwitch (Here (CanUse RG_DINS_FIRE))) + +//this exists for the crates in preparation for clips through the grate +def RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Boss Key Room Pit +RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4 CanBreakCrates +RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH (CanHitSwitch ED_BOOMERANG) + +def RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Boss Key Room Chest +RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST true +RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH (or (CanHitSwitch ED_BOMB_THROW) (CanUse RG_HOVER_BOOTS)) +RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT true +RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH (or (HasItem RG_SILVER_SCALE) (and (CanUse RG_IRON_BOOTS) (or (HasItem RG_BRONZE_SCALE) (and (>= WaterTimer 24) (CanUse RG_LONGSHOT))))) + +def RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ B1 Gate Switch +//If the water is low, the switch is underwater and needs irons to press, otherwise, the water is too low to climb up and you need irons to hookshot a target +//If a glitch clips through the gate on low, have it logically press the switch and let entrance logic enter +MQWaterB1Switch (CanUse RG_IRON_BOOTS) +RR_WATER_TEMPLE_MQ_MAIN (and MQWaterB1Switch (or (MQWaterLevel WL_LOW) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16)))) +RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST (and (CanUse RG_IRON_BOOTS) (and (HasItem RG_BRONZE_SCALE) (or (MQWaterLevel WL_LOW) (>= WaterTimer 24)))) + +def RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Triangle Torch Room +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +//we can backflip over the spikes, but land in water. +RR_WATER_TEMPLE_MQ_MAIN (and MQWaterB1Switch (or (and (MQWaterLevel WL_LOW) (HasItem RG_GOLDEN_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 40) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_LONGSHOT)))))) +RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE (and (CanUse RG_FIRE_ARROWS) (or (and IsAdult (CanUse RG_HOVER_BOOTS)) (and (CanUse RG_LONGSHOT) (Here ScarecrowsSong)))) + +def RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Triangle Torch Cage +RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2 CanBreakPots +RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3 CanBreakPots +RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4 CanBreakPots +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2 CanBreakCrates + +def RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Crates Whirlpools Room +RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6 (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 16) CanBreakCrates)) +RR_WATER_TEMPLE_MQ_MAIN (and MQWaterB1Switch (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 24) (or (CanUse RG_LONGSHOT) (HasItem RG_BRONZE_SCALE))))) +//Child can use crate to get height to make it with hovers, but it's annoyingly tight so would be a trick +RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 8) + //putting requirement to get out of the water here as scarecrow method in includes hook which satisfies it + (or (and IsAdult (and (or (CanUse RG_HOVER_BOOTS) RT_WATER_NORTH_BASEMENT_LEDGE_JUMP) (or (CanUse RG_HOOKSHOT) (HasItem RG_BRONZE_SCALE)))) (and (Here ScarecrowsSong) (CanUse RG_HOOKSHOT))) +) +RR_WATER_TEMPLE_MQ_4_TORCH_ROOM (and IsAdult (or (CanUse RG_HOVER_BOOTS) (or RT_WATER_NORTH_BASEMENT_LEDGE_JUMP (and (Here ScarecrowsSong) (CanUse RG_HOOKSHOT))))) +RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE (and RT_WATER_MQ_LOCKED_GS (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))) + +def RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Single Stalfos Room +RC_WATER_TEMPLE_MQ_FREESTANDING_KEY CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2 CanBreakPots +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4 CanBreakCrates +RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5 CanBreakCrates +RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM (or (HasItem RG_SILVER_SCALE) (or (and IsChild (HasItem RG_BRONZE_SCALE)) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOOKSHOT)))))) + +def RR_WATER_TEMPLE_MQ_4_TORCH_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ 4 Torch Room +RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM (or (and IsAdult (or (CanUse RG_HOVER_BOOTS) CanJumpslash)) (or (HasItem RG_BRONZE_SCALE) (and (CanUse RG_IRON_BOOTS) (and (>= WaterTimer 8) (CanUse RG_HOOKSHOT))))) +RR_WATER_TEMPLE_MQ_DODONGO_ROOM (and CanHitSwitch HasFireSource) + +def RR_WATER_TEMPLE_MQ_DODONGO_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Dodongo Room +RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1 CanBreakPots +RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2 CanBreakPots +RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE CanBreakCrates +RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE CanBreakCrates +RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3 CanBreakCrates +RR_WATER_TEMPLE_MQ_4_TORCH_ROOM (and (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS)) (Here (CanKillEnemy RE_DODONGO ED_CLOSE true 5))) +RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE (and (or (CanUse RG_HOOKSHOT) (CanUse RG_HOVER_BOOTS)) (Here (CanKillEnemy RE_DODONGO ED_CLOSE true 5))) + +def RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple MQ Basement Gated Areas +RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA (and (CanGetEnemyDrop RE_GOLD_SKULLTULA) CanBreakCrates) +RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1 CanBreakCrates +RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2 CanBreakCrates +RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3 CanBreakCrates +RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4 CanBreakCrates +RR_WATER_TEMPLE_MQ_DODONGO_ROOM true + +def RR_WATER_TEMPLE_BOSS_ENTRYWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE +Water Temple Boss Entryway +RR_WATER_TEMPLE_PRE_BOSS_ROOM (and (IsDungeonVanilla WATER_TEMPLE) false) +RR_WATER_TEMPLE_MQ_BOSS_DOOR (and (IsDungeonMQ WATER_TEMPLE) false) +RR_WATER_TEMPLE_BOSS_ROOM (HasItem RG_WATER_TEMPLE_BOSS_KEY) + +def RR_WATER_TEMPLE_BOSS_ROOM SCENE_WATER_TEMPLE_BOSS false +Water Temple Boss Room +WaterTempleClear (CanKillEnemy RE_MORPHA) +RC_WATER_TEMPLE_MORPHA_HEART WaterTempleClear +RC_MORPHA WaterTempleClear +RR_WATER_TEMPLE_BOSS_ENTRYWAY false +RR_LAKE_HYLIA @deprioritize WaterTempleClear diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/castle_grounds.s b/soh/soh/Enhancements/randomizer/logic/overworld/castle_grounds.s new file mode 100644 index 000000000..765c1c12b --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/castle_grounds.s @@ -0,0 +1,83 @@ +//With multi-area support {RA_CASTLE_GROUNDS} is not strictly required anymore, as any interior here could inherit both +//{RA_HYRULE_CASTLE} and {RA_OUTSIDE_GANONS_CASTLE}, but a setting to merge the latter 2 into the former may be preferred +//Temporarily uses SCENE_OUTSIDE_GANONS_CASTLE to avoid self connection between ages +def RR_CASTLE_GROUNDS SCENE_OUTSIDE_GANONS_CASTLE false RA_CASTLE_GROUNDS +Castle Grounds +RR_THE_MARKET true +RR_HYRULE_CASTLE_GROUNDS IsChild +RR_GANONS_CASTLE_GROUNDS IsAdult + +def RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE +Castle Grounds From Ganon's Castle +RR_HYRULE_CASTLE_GROUNDS IsChild +RR_GANONS_CASTLE_LEDGE IsAdult + +def RR_HYRULE_CASTLE_GROUNDS SCENE_HYRULE_CASTLE true RA_HYRULE_CASTLE +Hyrule Castle Grounds +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugRock true +RC_HC_MALON_EGG true +RC_HC_GS_TREE (and IsChild (CanKillEnemy RE_GOLD_SKULLTULA ED_CLOSE)) +RC_HC_MALON_GOSSIP_STONE_FAIRY CallGossipFairy +RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY CallGossipFairy +RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_HC_MALON_GOSSIP_STONE true +RC_HC_ROCK_WALL_GOSSIP_STONE true +RC_HC_GRASS_1 CanCutShrubs +RC_HC_GRASS_2 CanCutShrubs +RR_CASTLE_GROUNDS true +RR_HC_GARDEN (or (CanUse RG_WEIRD_EGG) (and RT_DAMAGE_BOOST_SIMPLE (and HasExplosives CanJumpslash))) +RR_HC_GREAT_FAIRY_FOUNTAIN BlastOrSmash +RR_HC_STORMS_GROTTO CanOpenStormsGrotto + +def RR_HC_GARDEN SCENE_CASTLE_COURTYARD_ZELDA false +HC Garden +RC_HC_ZELDAS_LETTER true +RC_SONG_FROM_IMPA true +RR_HYRULE_CASTLE_GROUNDS true + +def RR_HC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false +HC Great Fairy Fountain +RC_HC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +RR_CASTLE_GROUNDS true + +def RR_HC_STORMS_GROTTO SCENE_GROTTOS false +HC Storms Grotto +RC_HC_GS_STORMS_GROTTO (and (CanUse RG_BOOMERANG) RT_HC_STORMS_GS) +RR_CASTLE_GROUNDS true +RR_HC_STORMS_GROTTO_BEHIND_WALLS CanBreakMudWalls + +def RR_HC_STORMS_GROTTO_BEHIND_WALLS SCENE_GROTTOS false +HC Storms Grotto Behind Walls +NutPot true +GossipStoneFairy CallGossipFairy +WanderingBugs true +RC_HC_GS_STORMS_GROTTO HookshotOrBoomerang +RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_HC_STORMS_GROTTO_GOSSIP_STONE true +RC_HC_STORMS_GROTTO_POT_1 CanBreakPots +RC_HC_STORMS_GROTTO_POT_2 CanBreakPots +RC_HC_STORMS_GROTTO_POT_3 CanBreakPots +RC_HC_STORMS_GROTTO_POT_4 CanBreakPots +RR_HC_STORMS_GROTTO true + +def RR_GANONS_CASTLE_GROUNDS SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE +Ganon's Castle Grounds +BuiltRainbowBridge CanBuildRainbowBridge +RC_OGC_GS (or CanJumpslashExceptHammer (or CanUseProjectile (or (and CanShield (CanUse RG_MEGATON_HAMMER)) (CanUse RG_DINS_FIRE)))) +RR_CASTLE_GROUNDS AtNight +RR_OGC_GREAT_FAIRY_FOUNTAIN (and (CanUse RG_GOLDEN_GAUNTLETS) AtNight) +RR_GANONS_CASTLE_LEDGE BuiltRainbowBridge + +def RR_OGC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false +OGC Great Fairy Fountain +RC_OGC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +RR_CASTLE_GROUNDS true + +def RR_GANONS_CASTLE_LEDGE SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE +Ganon's Castle Ledge +RR_GANONS_CASTLE_GROUNDS BuiltRainbowBridge +RR_GANONS_CASTLE_ENTRYWAY IsAdult diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_crater.s b/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_crater.s new file mode 100644 index 000000000..b427a12eb --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_crater.s @@ -0,0 +1,114 @@ +def RR_DMC_UPPER_LOCAL SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Upper Local +GossipStoneFairy (and HasExplosives (and CallGossipFairyExceptSuns (or (>= FireTimer 16) (>= Hearts 3)))) +RC_DMC_WALL_FREESTANDING_POH (or (>= FireTimer 16) (>= Hearts 3)) +RC_DMC_GS_CRATE (and (or (>= FireTimer 8) (>= Hearts 3)) (and IsChild (and CanAttack CanBreakCrates))) +RC_DMC_GOSSIP_STONE_FAIRY (and CallGossipFairyExceptSuns (and HasExplosives (or (>= FireTimer 16) (>= Hearts 3)))) +RC_DMC_GOSSIP_STONE_FAIRY_BIG (and (CanUse RG_SONG_OF_STORMS) (and HasExplosives (or (>= FireTimer 16) (>= Hearts 3)))) +RC_DMC_GOSSIP_STONE (and HasExplosives (or (>= FireTimer 16) (>= Hearts 3))) +RC_DMC_CRATE (and (or (>= FireTimer 8) (>= Hearts 3)) (and IsChild CanBreakCrates)) +RR_DMC_UPPER_NEARBY true +RR_DMC_LADDER_AREA_NEARBY (or (>= FireTimer 16) (>= Hearts 3)) +RR_DMC_CENTRAL_NEARBY (and IsAdult (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_DISTANT_SCARECROW) (or (> EffectiveHealth 2) (or (and (CanUse RG_BOTTLE_WITH_FAIRY) (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) (CanUse RG_NAYRUS_LOVE)))))) +RR_DMC_LOWER_NEARBY false +RR_DMC_DISTANT_PLATFORM (or (and (>= FireTimer 48) (>= Hearts 2)) (>= Hearts 3)) + +def RR_DMC_CENTRAL_LOCAL SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Central Local +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) +RC_DMC_GS_BEAN_PATCH (and (or (>= FireTimer 8) (>= Hearts 3)) (and CanSpawnSoilSkull CanAttack)) +RC_DMC_NEAR_PLATFORM_RED_RUPEE IsChild +RC_DMC_MIDDLE_PLATFORM_RED_RUPEE (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) +RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) +RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) +RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) +RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) +RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) +RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6 (and IsChild (or (>= FireTimer 8) (>= Hearts 3))) +RC_DMC_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) +RC_DMC_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) +RC_DMC_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) +RR_DMC_CENTRAL_NEARBY true +RR_DMC_LOWER_NEARBY (or (and IsAdult (CanPlantBean RR_DMC_CENTRAL_LOCAL)) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT))) +RR_DMC_UPPER_NEARBY (and IsAdult (CanPlantBean RR_DMC_CENTRAL_LOCAL)) +RR_FIRE_TEMPLE_ENTRYWAY (or (and IsChild (and (>= Hearts 3) (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) (and IsAdult (>= FireTimer 24))) +RR_DMC_DISTANT_PLATFORM (and (>= FireTimer 48) (CanUse RG_DISTANT_SCARECROW)) + +def RR_DMC_LOWER_LOCAL SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Lower Local +RR_DMC_LOWER_NEARBY true +RR_DMC_LADDER_AREA_NEARBY (or (>= FireTimer 8) (>= Hearts 3)) +RR_DMC_CENTRAL_NEARBY (and (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) (or (>= FireTimer 8) (>= Hearts 3))) +RR_DMC_CENTRAL_LOCAL (and (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_HOOKSHOT) (and IsAdult (and CanShield RT_DMC_BOLERO_JUMP)))) (>= FireTimer 24)) + +def RR_DMC_LOWER_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Lower Nearby +RC_DMC_NEAR_GC_POT_1 CanBreakPots +RC_DMC_NEAR_GC_POT_2 CanBreakPots +RC_DMC_NEAR_GC_POT_3 CanBreakPots +RC_DMC_NEAR_GC_POT_4 CanBreakPots +RR_DMC_LOWER_LOCAL (>= FireTimer 48) +RR_GC_DARUNIAS_CHAMBER true +RR_DMC_GREAT_FAIRY_FOUNTAIN (CanUse RG_MEGATON_HAMMER) +RR_DMC_HAMMER_GROTTO (and IsAdult (CanUse RG_MEGATON_HAMMER)) + +def RR_DMC_UPPER_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Upper Nearby +RR_DMC_UPPER_LOCAL (>= FireTimer 48) +RR_DEATH_MOUNTAIN_SUMMIT true +RR_DMC_UPPER_GROTTO (Here (and BlastOrSmash (or (>= FireTimer 8) (>= Hearts 3)))) + +def RR_DMC_CENTRAL_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Central Nearby +RC_DMC_VOLCANO_FREESTANDING_POH (and IsAdult (and (>= Hearts 3) (or (CanPlantBean RR_DMC_CENTRAL_LOCAL) (and RT_DMC_HOVER_BEAN_POH (CanUse RG_HOVER_BOOTS))))) +RC_SHEIK_IN_CRATER (and IsAdult (or (>= FireTimer 8) (>= Hearts 3))) +RR_DMC_CENTRAL_LOCAL (>= FireTimer 48) + +def RR_DMC_LADDER_AREA_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Ladder Region Nearby +RC_DMC_DEKU_SCRUB (and IsChild CanStunDeku) +RR_DMC_UPPER_NEARBY (>= Hearts 3) +RR_DMC_LOWER_NEARBY (and (>= Hearts 3) (or (CanUse RG_HOVER_BOOTS) (or (and RT_DMC_BOULDER_JS (and IsAdult (CanUse RG_MEGATON_HAMMER))) (and RT_DMC_BOULDER_SKIP IsAdult)))) + +def RR_DMC_UPPER_GROTTO SCENE_GROTTOS false +DMC Upper Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_DMC_UPPER_GROTTO_CHEST true +RC_DMC_UPPER_GROTTO_FISH HasBottle +RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_DMC_UPPER_GROTTO_GOSSIP_STONE true +RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_DMC_UPPER_GROTTO_GRASS_1 CanCutShrubs +RC_DMC_UPPER_GROTTO_GRASS_2 CanCutShrubs +RC_DMC_UPPER_GROTTO_GRASS_3 CanCutShrubs +RC_DMC_UPPER_GROTTO_GRASS_4 CanCutShrubs +RR_DMC_UPPER_LOCAL true + +def RR_DMC_HAMMER_GROTTO SCENE_GROTTOS false +DMC Hammer Grotto +RC_DMC_DEKU_SCRUB_GROTTO_LEFT CanStunDeku +RC_DMC_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku +RC_DMC_DEKU_SCRUB_GROTTO_CENTER CanStunDeku +RC_DMC_HAMMER_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_DMC_LOWER_LOCAL true + +def RR_DMC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false +DMC Great Fairy Fountain +RC_DMC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +RR_DMC_LOWER_LOCAL true + +def RR_DMC_DISTANT_PLATFORM SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER +DMC Distant Platform +RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1 IsAdult +RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2 IsAdult +RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3 IsAdult +RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4 IsAdult +RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5 IsAdult +RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6 IsAdult +RC_DMC_DISTANT_PLATFORM_RED_RUPEE IsAdult +RR_DMC_CENTRAL_LOCAL (and (>= FireTimer 48) (CanUse RG_DISTANT_SCARECROW)) diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_trail.s b/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_trail.s new file mode 100644 index 000000000..cef38e86d --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_trail.s @@ -0,0 +1,84 @@ +def RR_DEATH_MOUNTAIN_TRAIL SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL +Death Mountain +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) +RC_DMT_CHEST (or BlastOrSmash (and RT_DMT_BOMBABLE (and IsChild (HasItem RG_GORONS_BRACELET)))) +RC_DMT_FREESTANDING_POH (or TakeDamage (or (CanUse RG_HOVER_BOOTS) (and IsAdult (and (CanPlantBean RR_DEATH_MOUNTAIN_TRAIL) (or HasExplosives (HasItem RG_GORONS_BRACELET)))))) +RC_DMT_GS_BEAN_PATCH (and CanSpawnSoilSkull (or HasExplosives (or (HasItem RG_GORONS_BRACELET) (and RT_DMT_SOIL_GS (and (or TakeDamage (CanUse RG_HOVER_BOOTS)) (CanUse RG_BOOMERANG)))))) +RC_DMT_GS_NEAR_KAK BlastOrSmash +RC_DMT_GS_ABOVE_DODONGOS_CAVERN (and IsAdult (and AtNight (and (or (CanUse RG_MEGATON_HAMMER) (or (and RT_DMT_HOOKSHOT_LOWER_GS (CanUse RG_HOOKSHOT)) (or (and RT_DMT_BEAN_LOWER_GS (CanPlantBean RR_DEATH_MOUNTAIN_TRAIL)) (or (and RT_DMT_HOVERS_LOWER_GS (CanUse RG_HOVER_BOOTS)) RT_DMT_JS_LOWER_GS)))) CanGetNightTimeGS))) +RC_DMT_BLUE_RUPEE (and IsChild BlastOrSmash) +RC_DMT_RED_RUPEE (and IsChild BlastOrSmash) +RC_DMT_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) +RC_DMT_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) +RC_DMT_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) +RC_DMT_FLAG_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_KAK_BEHIND_GATE true +RR_GORON_CITY true +RR_DEATH_MOUNTAIN_SUMMIT (or (Here BlastOrSmash) (and IsAdult (or (and (CanPlantBean RR_DEATH_MOUNTAIN_TRAIL) (HasItem RG_GORONS_BRACELET)) (and (CanUse RG_HOVER_BOOTS) RT_DMT_CLIMB_HOVERS)))) +RR_DODONGOS_CAVERN_ENTRYWAY (or HasExplosives (or (HasItem RG_GORONS_BRACELET) IsAdult)) +RR_DMT_STORMS_GROTTO CanOpenStormsGrotto + +def RR_DEATH_MOUNTAIN_SUMMIT SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL +Death Mountain Summit +GossipStoneFairy CallGossipFairy +BugRock IsChild +RC_DMT_TRADE_BROKEN_SWORD (and IsAdult (CanUse RG_BROKEN_SWORD)) +RC_DMT_TRADE_EYEDROPS (and IsAdult (CanUse RG_EYEDROPS)) +RC_DMT_TRADE_CLAIM_CHECK (and IsAdult (CanUse RG_CLAIM_CHECK)) +RC_DMT_GS_FALLING_ROCKS_PATH (and IsAdult (and AtNight (and (or (CanUse RG_MEGATON_HAMMER) RT_DMT_UPPER_GS) CanGetNightTimeGS))) +RC_DMT_GOSSIP_STONE_FAIRY CallGossipFairy +RC_DMT_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_DMT_GOSSIP_STONE true +RR_DEATH_MOUNTAIN_TRAIL true +RR_DMC_UPPER_LOCAL true +RR_DMT_OWL_FLIGHT IsChild +RR_DMT_COW_GROTTO (Here BlastOrSmash) +RR_DMT_GREAT_FAIRY_FOUNTAIN (Here BlastOrSmash) + +def RR_DMT_OWL_FLIGHT SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL +DMT Owl Flight +RR_KAK_IMPAS_ROOFTOP true + +def RR_DMT_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false +DMT Great Fairy Fountain +RC_DMT_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +RR_DEATH_MOUNTAIN_SUMMIT true + +def RR_DMT_COW_GROTTO SCENE_GROTTOS false +DMT Cow Grotto +RC_DMT_COW_GROTTO_COW (CanUse RG_EPONAS_SONG) +RC_DMT_COW_GROTTO_BEEHIVE CanBreakLowerBeehives +RC_DMT_COW_GROTTO_LEFT_HEART true +RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART true +RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART true +RC_DMT_COW_GROTTO_RIGHT_HEART true +RC_DMT_COW_GROTTO_RUPEE_1 true +RC_DMT_COW_GROTTO_RUPEE_2 true +RC_DMT_COW_GROTTO_RUPEE_3 true +RC_DMT_COW_GROTTO_RUPEE_4 true +RC_DMT_COW_GROTTO_RUPEE_5 true +RC_DMT_COW_GROTTO_RUPEE_6 true +RC_DMT_COW_GROTTO_RED_RUPEE true +RC_DMT_COW_GROTTO_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +RC_DMT_COW_GROTTO_GRASS_1 CanCutShrubs +RC_DMT_COW_GROTTO_GRASS_2 CanCutShrubs +RR_DEATH_MOUNTAIN_SUMMIT true + +def RR_DMT_STORMS_GROTTO SCENE_GROTTOS false +DMT Storms Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_DMT_STORMS_GROTTO_CHEST true +RC_DMT_STORMS_GROTTO_FISH HasBottle +RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_DMT_STORMS_GROTTO_GOSSIP_STONE true +RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_DMT_STORMS_GROTTO_GRASS_1 CanCutShrubs +RC_DMT_STORMS_GROTTO_GRASS_2 CanCutShrubs +RC_DMT_STORMS_GROTTO_GRASS_3 CanCutShrubs +RC_DMT_STORMS_GROTTO_GRASS_4 CanCutShrubs +RR_DEATH_MOUNTAIN_TRAIL true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/desert_colossus.s b/soh/soh/Enhancements/randomizer/logic/overworld/desert_colossus.s new file mode 100644 index 000000000..4ccac1864 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/desert_colossus.s @@ -0,0 +1,51 @@ +def RR_DESERT_COLOSSUS SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS +Desert Colossus +FairyPond (CanUse RG_SONG_OF_STORMS) +BugRock true +RC_COLOSSUS_FREESTANDING_POH (and IsAdult (CanPlantBean RR_DESERT_COLOSSUS)) +RC_COLOSSUS_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) +RC_COLOSSUS_GS_TREE (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_COLOSSUS_GS_HILL (and IsAdult (and (or (and (CanPlantBean RR_DESERT_COLOSSUS) CanAttack) (or (CanUse RG_LONGSHOT) (and RT_COLOSSUS_GS (CanUse RG_HOOKSHOT)))) CanGetNightTimeGS)) +RC_COLOSSUS_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_COLOSSUS_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_COLOSSUS_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_COLOSSUS_GOSSIP_STONE_FAIRY CallGossipFairy +RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_COLOSSUS_GOSSIP_STONE true +//You can kinda get the fairies without entering the water, but it relies on them cooperating and leevers are jerks. should be a trick +RR_DESERT_COLOSSUS_OASIS (and (CanUse RG_SONG_OF_STORMS) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS))) +RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN HasExplosives +RR_SPIRIT_TEMPLE_ENTRYWAY true +RR_WASTELAND_NEAR_COLOSSUS true +RR_COLOSSUS_GROTTO (CanUse RG_SILVER_GAUNTLETS) + +//specifically the full oasis, after the fairies have spawned +def RR_DESERT_COLOSSUS_OASIS SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS +Desert Colossus Oasis +FairyPond true +RC_COLOSSUS_OASIS_FAIRY_1 true +RC_COLOSSUS_OASIS_FAIRY_2 true +RC_COLOSSUS_OASIS_FAIRY_3 true +RC_COLOSSUS_OASIS_FAIRY_4 true +RC_COLOSSUS_OASIS_FAIRY_5 true +RC_COLOSSUS_OASIS_FAIRY_6 true +RC_COLOSSUS_OASIS_FAIRY_7 true +RC_COLOSSUS_OASIS_FAIRY_8 true +RR_DESERT_COLOSSUS true + +def RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS +Desert Colossus From Spirit Entryway +RC_SHEIK_AT_COLOSSUS true +RR_DESERT_COLOSSUS true + +def RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false +Colossus Great Fairy Fountain +RC_COLOSSUS_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +RR_DESERT_COLOSSUS true + +def RR_COLOSSUS_GROTTO SCENE_GROTTOS false +Colossus Grotto +RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR CanStunDeku +RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT CanStunDeku +RC_COLOSSUS_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_DESERT_COLOSSUS true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_fortress.s b/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_fortress.s new file mode 100644 index 000000000..a854df8d5 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_fortress.s @@ -0,0 +1,192 @@ +def RR_GF_OUTSKIRTS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +Gerudo Fortress Outskirts +GF_GateOpen (and IsAdult (HasItem RG_GERUDO_MEMBERSHIP_CARD)) +RC_GF_OUTSKIRTS_NE_CRATE (and (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) CanBreakCrates) +RC_GF_OUTSKIRTS_NW_CRATE (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +RR_GV_FORTRESS_SIDE true +RR_TH_1_TORCH_CELL true +RR_GF_OUTSIDE_GATE GF_GateOpen +RR_GF_NEAR_GROTTO (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +RR_GF_OUTSIDE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +//You can talk to the guards to get yourself thrown in jail, so long as you have a hookshot to actually end up there +RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) + +def RR_GF_NEAR_GROTTO SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Near Grotto +RC_GF_SOUTHMOST_CENTER_CRATE CanBreakCrates +RC_GF_MID_SOUTH_CENTER_CRATE CanBreakCrates +RC_GF_MID_NORTH_CENTER_CRATE CanBreakCrates +RC_GF_NORTHMOST_CENTER_CRATE CanBreakCrates +RR_TH_1_TORCH_CELL true +RR_TH_STEEP_SLOPE_CELL true +RR_TH_KITCHEN_CORRIDOR true +RR_GF_OUTSKIRTS true +RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) +RR_GF_OUTSIDE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +RR_GF_TOP_OF_UPPER_VINES (CanUse RG_LONGSHOT) +RR_GF_STORMS_GROTTO (and IsAdult CanOpenStormsGrotto) + +def RR_GF_OUTSIDE_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Outside GTG +GtG_GateOpen (and IsAdult (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (HasItem RG_CHILD_WALLET))) +RR_GF_TO_GTG (and GtG_GateOpen (or IsAdult RSK_SHUFFLE_DUNGEON_ENTRANCES)) +RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) +RR_GF_OUTSKIRTS true +RR_GF_NEAR_GROTTO (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +RR_GF_ABOVE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +RR_GF_TOP_OF_UPPER_VINES (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (CanUse RG_LONGSHOT)) +RR_GF_HBA_RANGE (or IsChild (HasItem RG_GERUDO_MEMBERSHIP_CARD)) + +def RR_GF_TO_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF to GTG +RR_GERUDO_TRAINING_GROUND_ENTRYWAY true + +def RR_GF_EXITING_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Exiting GTG +RR_GF_OUTSIDE_GTG (or IsChild (HasItem RG_GERUDO_MEMBERSHIP_CARD)) +RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) +RR_GF_OUTSKIRTS true + +def RR_GF_ABOVE_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Above GTG +RR_TH_DOUBLE_CELL true +RR_TH_KITCHEN_CORRIDOR true +RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) +RR_GF_OUTSKIRTS true +RR_GF_NEAR_GROTTO true +RR_GF_OUTSIDE_GTG (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +RR_GF_BOTTOM_OF_LOWER_VINES (!= RT_GF_JUMP 0) + +def RR_GF_BOTTOM_OF_LOWER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Bottom of Lower Vines +RR_TH_STEEP_SLOPE_CELL true +RR_GF_NEAR_GROTTO true +RR_GF_TOP_OF_LOWER_VINES true +RR_GF_ABOVE_GTG true + +def RR_GF_TOP_OF_LOWER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Top of Lower Vines +RR_TH_KITCHEN_TOP true +RR_TH_DOUBLE_CELL true +RR_GF_ABOVE_GTG true +RR_GF_BOTTOM_OF_LOWER_VINES true +RR_GF_BOTTOM_OF_UPPER_VINES (and IsAdult RT_GF_JUMP) + +def RR_GF_NEAR_GS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Near GS +//if RR_GF_SLOPED_ROOF > RR_GF_TOP_OF_UPPER_VINES is ever made part of RT_GF_JUMP, climb is needed to get back up +RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOMB_THROW) CanGetNightTimeGS)) +RR_TH_KITCHEN_TOP true +RR_GF_BOTTOM_OF_LOWER_VINES true +RR_GF_TOP_OF_LOWER_VINES true +RR_GF_SLOPED_ROOF IsAdult +RR_GF_LONG_ROOF (or (CanUse RG_HOVER_BOOTS) (and IsAdult RT_GF_JUMP)) +RR_GF_NEAR_CHEST (CanUse RG_LONGSHOT) +RR_GF_BELOW_GS true + +def RR_GF_SLOPED_ROOF SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Sloped Roof +RR_GF_TOP_OF_LOWER_VINES true +RR_GF_NEAR_GS true +RR_GF_BOTTOM_OF_UPPER_VINES true +RR_GF_TOP_OF_UPPER_VINES (and IsAdult RT_GF_JUMP) + +def RR_GF_BOTTOM_OF_UPPER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Bottom of Upper Vines +RR_GF_OUTSIDE_GTG true +RR_GF_TOP_OF_LOWER_VINES true +RR_GF_SLOPED_ROOF (and IsAdult (CanUse RG_HOVER_BOOTS)) +RR_GF_TOP_OF_UPPER_VINES true +RR_GF_TO_GTG (and IsAdult RT_GF_LEDGE_CLIP_INTO_GTG) + +def RR_GF_TOP_OF_UPPER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Top of Upper Vines +RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH) CanGetNightTimeGS)) +RR_GF_TOP_OF_LOWER_VINES true +RR_GF_SLOPED_ROOF true +RR_GF_BOTTOM_OF_UPPER_VINES true +RR_GF_NEAR_CHEST (or (CanUse RG_HOVER_BOOTS) (or (and IsAdult (and (CanUse RG_SCARECROW) (CanUse RG_HOOKSHOT))) (CanUse RG_LONGSHOT))) + +def RR_GF_NEAR_CHEST SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Near Chest +RC_GF_CHEST true +RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) CanGetNightTimeGS)) +RR_GF_NEAR_GS true +RR_GF_LONG_ROOF true + +def RR_GF_LONG_ROOF SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Long Roof +RR_GF_BOTTOM_OF_LOWER_VINES true +//hookshot to cross using the rafters is implied in logic->CanPassEnemy(RE_GERUDO_GUARD) +RR_GF_NEAR_GS (or (and IsAdult RT_GF_JUMP) (CanUse RG_HOVER_BOOTS)) +RR_GF_BELOW_GS true +RR_GF_NEAR_CHEST (CanUse RG_LONGSHOT) +RR_GF_BELOW_CHEST true + +def RR_GF_BELOW_GS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Below GS +RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_LONGSHOT) CanGetNightTimeGS)) +RR_TH_DEAD_END_CELL true +RR_GF_BOTTOM_OF_LOWER_VINES true + +def RR_GF_BELOW_CHEST SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Below Chest +RR_TH_BREAK_ROOM true +RR_GF_OUTSKIRTS true + +def RR_GF_HBA_RANGE SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF HBA Range +RC_GF_HBA_1000_POINTS (and IsAdult (and (HasItem RG_CHILD_WALLET) (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (and (CanUse RG_EPONA) (and (CanUse RG_FAIRY_BOW) AtDay))))) +RC_GF_HBA_1500_POINTS (and IsAdult (and (HasItem RG_CHILD_WALLET) (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (and (CanUse RG_EPONA) (and (CanUse RG_FAIRY_BOW) AtDay))))) +RC_GF_HBA_RANGE_GS (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) CanGetNightTimeGS)) +RC_GF_HBA_RANGE_CRATE_1 CanBreakCrates +RC_GF_HBA_RANGE_CRATE_2 CanBreakCrates +RC_GF_HBA_RANGE_CRATE_3 CanBreakCrates +RC_GF_HBA_RANGE_CRATE_4 CanBreakCrates +RC_GF_HBA_RANGE_CRATE_5 CanBreakCrates +RC_GF_HBA_RANGE_CRATE_6 CanBreakCrates +RC_GF_HBA_RANGE_CRATE_7 CanBreakCrates +RC_GF_HBA_CANOPY_EAST_CRATE CanBreakCrates +RC_GF_HBA_CANOPY_WEST_CRATE CanBreakCrates +RC_GF_NORTH_TARGET_EAST_CRATE CanBreakCrates +RC_GF_NORTH_TARGET_WEST_CRATE (or IsAdult (or BlastOrSmash (or HookshotOrBoomerang (CanUse RG_HOVER_BOOTS)))) +//implies CanBreakCrates +RC_GF_NORTH_TARGET_CHILD_CRATE (and IsChild BlastOrSmash) +RC_GF_SOUTH_TARGET_EAST_CRATE CanBreakCrates +RC_GF_SOUTH_TARGET_WEST_CRATE CanBreakCrates +RR_GF_OUTSIDE_GTG (or IsChild (HasItem RG_GERUDO_MEMBERSHIP_CARD)) + +def RR_GF_ABOVE_JAIL SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Above Jail +RC_GF_ABOVE_JAIL_CRATE true +//you don't take fall damage if you land on the rock with the flag on for some reason +//there's a trick to reach RR_GF_LONG_ROOF but that's too intricate for GF_JUMP +RR_GF_OUTSKIRTS (!= RT_GF_JUMP 0) +RR_GF_NEAR_CHEST (CanUse RG_LONGSHOT) +RR_GF_BELOW_CHEST TakeDamage +RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) + +def RR_GF_JAIL_WINDOW SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Jail Window +//There's a trick where hovers backwalk into backflip gives access to RR_GF_LONG_ROOF from here +RR_GF_OUTSKIRTS true +RR_GF_BELOW_CHEST true + +def RR_GF_OUTSIDE_GATE SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS +GF Outside Gate +GF_GateOpen (and IsAdult (HasItem RG_GERUDO_MEMBERSHIP_CARD)) +RR_GF_OUTSKIRTS GF_GateOpen +RR_WASTELAND_NEAR_FORTRESS true + +def RR_GF_STORMS_GROTTO SCENE_GROTTOS false +GF Storms Grotto +FreeFairies true +RC_GF_FAIRY_GROTTO_FAIRY_1 true +RC_GF_FAIRY_GROTTO_FAIRY_2 true +RC_GF_FAIRY_GROTTO_FAIRY_3 true +RC_GF_FAIRY_GROTTO_FAIRY_4 true +RC_GF_FAIRY_GROTTO_FAIRY_5 true +RC_GF_FAIRY_GROTTO_FAIRY_6 true +RC_GF_FAIRY_GROTTO_FAIRY_7 true +RC_GF_FAIRY_GROTTO_FAIRY_8 true +RR_GF_NEAR_GROTTO true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_valley.s b/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_valley.s new file mode 100644 index 000000000..d8c314de7 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_valley.s @@ -0,0 +1,86 @@ +def RR_GERUDO_VALLEY SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY +Gerudo Valley +BugRock IsChild +RC_GV_GS_SMALL_BRIDGE (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) +RR_HYRULE_FIELD true +RR_GV_UPPER_STREAM (or IsChild (or (HasItem RG_BRONZE_SCALE) TakeDamage)) +RR_GV_CRATE_LEDGE (or IsChild (CanUse RG_LONGSHOT)) +RR_GV_GROTTO_LEDGE true +RR_GV_FORTRESS_SIDE (or (and IsAdult (or (CanUse RG_EPONA) (or (CanUse RG_LONGSHOT) (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) THRescuedAllCarpenters)))) (and IsChild (CanUse RG_HOOKSHOT))) +//can use cucco as child +RR_GV_LOWER_STREAM IsChild + +def RR_GV_UPPER_STREAM SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY +GV Upper Stream +GossipStoneFairy CallGossipFairy +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +//can use cucco as child +RC_GV_WATERFALL_FREESTANDING_POH (or IsChild (HasItem RG_BRONZE_SCALE)) +RC_GV_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) +RC_GV_COW (and IsChild (CanUse RG_EPONAS_SONG)) +RC_GV_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_GV_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_GV_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_GV_GOSSIP_STONE_FAIRY CallGossipFairy +RC_GV_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_GV_GOSSIP_STONE true +RC_GV_NEAR_COW_CRATE (and IsChild CanBreakCrates) +RR_GV_LOWER_STREAM (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) + +def RR_GV_LOWER_STREAM SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY +GV Lower Stream +RR_LAKE_HYLIA true + +def RR_GV_GROTTO_LEDGE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY +GV Grotto Ledge +RR_GV_UPPER_STREAM (and RT_DAMAGE_BOOST_SIMPLE HasExplosives) +RR_GV_LOWER_STREAM (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) +RR_GV_OCTOROK_GROTTO (CanUse RG_SILVER_GAUNTLETS) +RR_GV_CRATE_LEDGE (CanUse RG_LONGSHOT) + +def RR_GV_CRATE_LEDGE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY +GV Crate Ledge +RC_GV_CRATE_FREESTANDING_POH CanBreakCrates +RC_GV_FREESTANDING_POH_CRATE CanBreakCrates +RR_GV_UPPER_STREAM (and RT_DAMAGE_BOOST_SIMPLE HasExplosives) +RR_GV_LOWER_STREAM (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)) + +def RR_GV_OCTOROK_GROTTO SCENE_GROTTOS false +GV Octorok Grotto +RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RC_GV_OCTOROK_GROTTO_RED_RUPEE (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG))) +RR_GV_GROTTO_LEDGE true + +def RR_GV_FORTRESS_SIDE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY +GV Fortress Side +RC_GV_CHEST (and IsAdult (CanUse RG_MEGATON_HAMMER)) +RC_GV_TRADE_SAW (and IsAdult (CanUse RG_POACHERS_SAW)) +RC_GV_GS_BEHIND_TENT (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_GV_GS_PILLAR (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_GV_CRATE_BRIDGE_1 (and IsChild CanBreakCrates) +RC_GV_CRATE_BRIDGE_2 (and IsChild CanBreakCrates) +RC_GV_CRATE_BRIDGE_3 (and IsChild CanBreakCrates) +RC_GV_CRATE_BRIDGE_4 (and IsChild CanBreakCrates) +RR_GF_OUTSKIRTS true +RR_GV_UPPER_STREAM true +RR_GERUDO_VALLEY (or IsChild (or (CanUse RG_EPONA) (or (CanUse RG_LONGSHOT) (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) THRescuedAllCarpenters)))) +RR_GV_CARPENTER_TENT IsAdult +RR_GV_STORMS_GROTTO (and IsAdult CanOpenStormsGrotto) +RR_GV_CRATE_LEDGE (and RT_DAMAGE_BOOST_SIMPLE HasExplosives) + +def RR_GV_CARPENTER_TENT SCENE_CARPENTERS_TENT false +GV Carpenter Tent +RR_GV_FORTRESS_SIDE true + +def RR_GV_STORMS_GROTTO SCENE_GROTTOS false +GV Storms Grotto +RC_GV_DEKU_SCRUB_GROTTO_REAR CanStunDeku +RC_GV_DEKU_SCRUB_GROTTO_FRONT CanStunDeku +RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_GV_FORTRESS_SIDE true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/goron_city.s b/soh/soh/Enhancements/randomizer/logic/overworld/goron_city.s new file mode 100644 index 000000000..019d44a86 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/goron_city.s @@ -0,0 +1,82 @@ +def RR_GORON_CITY SCENE_GORON_CITY false RA_GORON_CITY +Goron City +GossipStoneFairy CallGossipFairyExceptSuns +StickPot IsChild +BugRock (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) +GoronCityChildFire (and IsChild (CanUse RG_DINS_FIRE)) +GCWoodsWarpOpen (or CanDetonateUprightBombFlower (or (CanUse RG_MEGATON_HAMMER) GoronCityChildFire)) +GCDaruniasDoorOpenChild (and IsChild (CanUse RG_ZELDAS_LULLABY)) +StopGCRollingGoronAsAdult (and IsAdult (or (HasItem RG_GORONS_BRACELET) (or HasExplosives (or (CanUse RG_FAIRY_BOW) (and RT_GC_LINK_GORON_DINS (or (CanUse RG_DINS_FIRE) (and RT_BLUE_FIRE_MUD_WALLS (CanUse RG_BOTTLE_WITH_BLUE_FIRE)))))))) +RC_GC_MAZE_LEFT_CHEST (or (CanUse RG_MEGATON_HAMMER) (or (CanUse RG_SILVER_GAUNTLETS) (and RT_GC_LEFTMOST (and HasExplosives (CanUse RG_HOVER_BOOTS))))) +RC_GC_MAZE_CENTER_CHEST (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) +RC_GC_MAZE_RIGHT_CHEST (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) +RC_GC_POT_FREESTANDING_POH (and IsChild (and GoronCityChildFire (or (CanUse RG_BOMB_BAG) (or (and (HasItem RG_GORONS_BRACELET) RT_GC_POT_STRENGTH) (and (CanUse RG_BOMBCHU_5) RT_GC_POT))))) +RC_GC_ROLLING_GORON_AS_CHILD (and IsChild (or HasExplosives (and (HasItem RG_GORONS_BRACELET) RT_GC_ROLLING_STRENGTH))) +RC_GC_ROLLING_GORON_AS_ADULT StopGCRollingGoronAsAdult +RC_GC_GS_BOULDER_MAZE (and IsChild BlastOrSmash) +RC_GC_GS_CENTER_PLATFORM (and IsAdult CanAttack) +RC_GC_MEDIGORON (and IsAdult (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) +RC_GC_MAZE_GOSSIP_STONE_FAIRY (and (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) CallGossipFairyExceptSuns) +RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG (and (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) (CanUse RG_SONG_OF_STORMS)) +RC_GC_MAZE_GOSSIP_STONE (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) +RC_GC_LOWER_STAIRCASE_POT_1 CanBreakPots +RC_GC_LOWER_STAIRCASE_POT_2 CanBreakPots +RC_GC_UPPER_STAIRCASE_POT_1 CanBreakPots +RC_GC_UPPER_STAIRCASE_POT_2 CanBreakPots +RC_GC_UPPER_STAIRCASE_POT_3 CanBreakPots +RC_GC_MAZE_CRATE (or BlastOrSmash (and (CanUse RG_SILVER_GAUNTLETS) CanBreakCrates)) +RR_DEATH_MOUNTAIN_TRAIL true +RR_GC_MEDIGORON (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET)) +RR_GC_WOODS_WARP GCWoodsWarpOpen +RR_GC_SHOP (or (and IsAdult StopGCRollingGoronAsAdult) (and IsChild (or BlastOrSmash (or (HasItem RG_GORONS_BRACELET) (or GoronCityChildFire (CanUse RG_FAIRY_BOW)))))) +RR_GC_DARUNIAS_CHAMBER (or (and IsAdult StopGCRollingGoronAsAdult) (and IsChild GCDaruniasDoorOpenChild)) +RR_GC_GROTTO_PLATFORM (and IsAdult (or (and (CanUse RG_SONG_OF_TIME) (or (> EffectiveHealth 2) (or (CanUse RG_GORON_TUNIC) (or (CanUse RG_LONGSHOT) (CanUse RG_NAYRUS_LOVE))))) (or (and (> EffectiveHealth 1) (and (CanUse RG_GORON_TUNIC) (CanUse RG_HOOKSHOT))) (or (and (CanUse RG_NAYRUS_LOVE) (CanUse RG_HOOKSHOT)) (and (> EffectiveHealth 2) (and (CanUse RG_HOOKSHOT) RT_GC_GROTTO)))))) + +def RR_GC_MEDIGORON SCENE_GORON_CITY false RA_GORON_CITY +GC Medigoron +RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_GC_MEDIGORON_GOSSIP_STONE true +RC_GC_MEDIGORON_POT_1 CanBreakPots +RR_GORON_CITY true + +def RR_GC_WOODS_WARP SCENE_GORON_CITY false RA_GORON_CITY +GC Woods Warp +GCWoodsWarpOpen (or BlastOrSmash (CanUse RG_DINS_FIRE)) +RR_GORON_CITY GCWoodsWarpOpen +RR_THE_LOST_WOODS true + +def RR_GC_DARUNIAS_CHAMBER SCENE_GORON_CITY false RA_GORON_CITY +GC Darunias Chamber +GoronCityChildFire (and IsChild (CanUse RG_STICKS)) +RC_GC_DARUNIAS_JOY (and IsChild (CanUse RG_SARIAS_SONG)) +RC_GC_DARUNIA_POT_1 CanBreakPots +RC_GC_DARUNIA_POT_2 CanBreakPots +RC_GC_DARUNIA_POT_3 CanBreakPots +RR_GORON_CITY true +RR_DMC_LOWER_LOCAL IsAdult + +def RR_GC_GROTTO_PLATFORM SCENE_GORON_CITY false RA_GORON_CITY +GC Grotto Platform +RR_GC_GROTTO true +RR_GORON_CITY (or (> EffectiveHealth 2) (or (CanUse RG_GORON_TUNIC) (or (CanUse RG_NAYRUS_LOVE) (and (or IsChild (CanUse RG_SONG_OF_TIME)) (CanUse RG_LONGSHOT))))) + +def RR_GC_SHOP SCENE_GORON_SHOP false +GC Shop +RC_GC_SHOP_ITEM_1 true +RC_GC_SHOP_ITEM_2 true +RC_GC_SHOP_ITEM_3 true +RC_GC_SHOP_ITEM_4 true +RC_GC_SHOP_ITEM_5 true +RC_GC_SHOP_ITEM_6 true +RC_GC_SHOP_ITEM_7 true +RC_GC_SHOP_ITEM_8 true +RR_GORON_CITY true + +def RR_GC_GROTTO SCENE_GROTTOS false +GC Grotto +RC_GC_DEKU_SCRUB_GROTTO_LEFT CanStunDeku +RC_GC_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku +RC_GC_DEKU_SCRUB_GROTTO_CENTER CanStunDeku +RC_GC_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_GC_GROTTO_PLATFORM true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/graveyard.s b/soh/soh/Enhancements/randomizer/logic/overworld/graveyard.s new file mode 100644 index 000000000..ce3a6e248 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/graveyard.s @@ -0,0 +1,103 @@ +def RR_THE_GRAVEYARD SCENE_GRAVEYARD false RA_THE_GRAVEYARD +The Graveyard +ButterflyFairy (and (CanUse RG_STICKS) AtDay) +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +BugRock true +BorrowBunnyHood (and IsChild (and AtDay (and BorrowSpookyMask (HasItem RG_CHILD_WALLET)))) +RC_GRAVEYARD_FREESTANDING_POH (or (and (or (and IsAdult (CanPlantBean RR_THE_GRAVEYARD)) (CanUse RG_LONGSHOT)) CanBreakCrates) (and RT_GY_POH (CanUse RG_BOOMERANG))) +//TODO: This needs to change +RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR (and (HasItem RG_CHILD_WALLET) (and IsChild AtNight)) +RC_GRAVEYARD_GS_WALL (and IsChild (and HookshotOrBoomerang (and AtNight CanGetNightTimeGS))) +RC_GRAVEYARD_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) +RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_GY_GRASS_1 CanCutShrubs +RC_GY_GRASS_2 CanCutShrubs +RC_GY_GRASS_3 CanCutShrubs +RC_GY_GRASS_4 CanCutShrubs +RC_GY_GRASS_5 CanCutShrubs +RC_GY_GRASS_6 CanCutShrubs +RC_GY_GRASS_7 CanCutShrubs +RC_GY_GRASS_8 CanCutShrubs +RC_GY_GRASS_9 CanCutShrubs +RC_GY_GRASS_10 CanCutShrubs +RC_GY_GRASS_11 CanCutShrubs +RC_GY_GRASS_12 CanCutShrubs +RC_GRAVEYARD_CRATE (and (or (and IsAdult (CanPlantBean RR_THE_GRAVEYARD)) (CanUse RG_LONGSHOT)) CanBreakCrates) +RR_GRAVEYARD_SHIELD_GRAVE (or IsAdult AtNight) +RR_GRAVEYARD_COMPOSERS_GRAVE (CanUse RG_ZELDAS_LULLABY) +RR_GRAVEYARD_HEART_PIECE_GRAVE (or IsAdult AtNight) +RR_GRAVEYARD_DAMPES_GRAVE IsAdult +//TODO: This needs to be handled in ToD rework +RR_GRAVEYARD_DAMPES_HOUSE (and IsAdult (CanOpenOverworldDoor RG_DAMPES_HUT_KEY)) +RR_KAKARIKO_VILLAGE true +RR_GRAVEYARD_WARP_PAD_REGION false + +def RR_GRAVEYARD_DAMPES_GRAVE SCENE_WINDMILL_AND_DAMPES_GRAVE false +Graveyard Dampes Grave +NutPot true +DampesWindmillAccess (and IsAdult (CanUse RG_SONG_OF_TIME)) +RC_GRAVEYARD_HOOKSHOT_CHEST true +RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH (or IsAdult RT_GY_CHILD_DAMPE_RACE_POH) +RC_GY_DAMPES_GRAVE_POT_1 CanBreakPots +RC_GY_DAMPES_GRAVE_POT_2 CanBreakPots +RC_GY_DAMPES_GRAVE_POT_3 CanBreakPots +RC_GY_DAMPES_GRAVE_POT_4 CanBreakPots +RC_GY_DAMPES_GRAVE_POT_5 CanBreakPots +RC_GY_DAMPES_GRAVE_POT_6 CanBreakPots +RC_GRAVEYARD_DAMPE_RACE_RUPEE_1 true +RC_GRAVEYARD_DAMPE_RACE_RUPEE_2 true +RC_GRAVEYARD_DAMPE_RACE_RUPEE_3 true +RC_GRAVEYARD_DAMPE_RACE_RUPEE_4 true +RC_GRAVEYARD_DAMPE_RACE_RUPEE_5 true +RC_GRAVEYARD_DAMPE_RACE_RUPEE_6 true +RC_GRAVEYARD_DAMPE_RACE_RUPEE_7 true +RC_GRAVEYARD_DAMPE_RACE_RUPEE_8 true +RR_THE_GRAVEYARD true +RR_KAK_WINDMILL @deprioritize (and IsAdult (CanUse RG_SONG_OF_TIME)) + +def RR_GRAVEYARD_DAMPES_HOUSE SCENE_GRAVEKEEPERS_HUT false +Graveyard Dampes House +RC_DAMPE_HINT IsAdult +RR_THE_GRAVEYARD true + +def RR_GRAVEYARD_SHIELD_GRAVE SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN false +Graveyard Shield Grave +RC_GRAVEYARD_SHIELD_GRAVE_CHEST true +RR_THE_GRAVEYARD true +RR_GRAVEYARD_SHIELD_GRAVE_BACK (Here CanBreakMudWalls) + +def RR_GRAVEYARD_SHIELD_GRAVE_BACK SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN false +Graveyard Shield Grave Back +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1 true +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2 true +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3 true +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4 true +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5 true +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6 true +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7 true +RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8 true +RR_GRAVEYARD_SHIELD_GRAVE true + +def RR_GRAVEYARD_COMPOSERS_GRAVE SCENE_ROYAL_FAMILYS_TOMB false +Graveyard Composers Grave +RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST HasFireSource +RC_SONG_FROM_ROYAL_FAMILYS_TOMB (or CanUseProjectile CanJumpslash) +RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_THE_GRAVEYARD true + +def RR_GRAVEYARD_HEART_PIECE_GRAVE SCENE_REDEAD_GRAVE false +Graveyard Heart Piece Grave +RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST (CanUse RG_SUNS_SONG) +RR_THE_GRAVEYARD true + +def RR_GRAVEYARD_WARP_PAD_REGION SCENE_GRAVEYARD false RA_THE_GRAVEYARD +Graveyard Warp Pad Region +GossipStoneFairy CallGossipFairyExceptSuns +RC_GRAVEYARD_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_GRAVEYARD_GOSSIP_STONE true +RR_THE_GRAVEYARD true +RR_SHADOW_TEMPLE_ENTRYWAY (or (CanUse RG_DINS_FIRE) (and RT_GY_SHADOW_FIRE_ARROWS (and IsAdult (CanUse RG_FIRE_ARROWS)))) + diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/haunted_wasteland.s b/soh/soh/Enhancements/randomizer/logic/overworld/haunted_wasteland.s new file mode 100644 index 000000000..6b03e5764 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/haunted_wasteland.s @@ -0,0 +1,29 @@ +def RR_WASTELAND_NEAR_FORTRESS SCENE_HAUNTED_WASTELAND false RA_HAUNTED_WASTELAND +Wasteland Near Fortress +RC_HW_BEFORE_QUICKSAND_CRATE CanBreakCrates +RR_GF_OUTSIDE_GATE true +RR_HAUNTED_WASTELAND (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_LONGSHOT) RT_HW_CROSSING)) + +def RR_HAUNTED_WASTELAND SCENE_HAUNTED_WASTELAND false RA_HAUNTED_WASTELAND +Haunted Wasteland +FairyPot true +NutPot true +CarpetMerchant (and (HasItem RG_ADULT_WALLET) (and (CanBuyAnother RC_WASTELAND_BOMBCHU_SALESMAN) (or CanJumpslash (CanUse RG_HOVER_BOOTS)))) +RC_WASTELAND_CHEST HasFireSource +RC_WASTELAND_BOMBCHU_SALESMAN (or CanJumpslash (CanUse RG_HOVER_BOOTS)) +RC_WASTELAND_GS HookshotOrBoomerang +RC_WASTELAND_NEAR_GS_POT_1 CanBreakPots +RC_WASTELAND_NEAR_GS_POT_2 CanBreakPots +RC_WASTELAND_NEAR_GS_POT_3 CanBreakPots +RC_WASTELAND_NEAR_GS_POT_4 CanBreakPots +RC_HW_AFTER_QUICKSAND_CRATE_1 CanBreakCrates +RC_HW_AFTER_QUICKSAND_CRATE_2 CanBreakCrates +RC_HW_AFTER_QUICKSAND_CRATE_3 CanBreakCrates +RR_WASTELAND_NEAR_COLOSSUS (or RT_LENS_HW (CanUse RG_LENS_OF_TRUTH)) +RR_WASTELAND_NEAR_FORTRESS (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_LONGSHOT) RT_HW_CROSSING)) + +def RR_WASTELAND_NEAR_COLOSSUS SCENE_HAUNTED_WASTELAND false RA_HAUNTED_WASTELAND +Wasteland Near Colossus +RC_HW_NEAR_COLOSSUS_CRATE CanBreakCrates +RR_DESERT_COLOSSUS true +RR_HAUNTED_WASTELAND (or RT_HW_REVERSE false) diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/hyrule_field.s b/soh/soh/Enhancements/randomizer/logic/overworld/hyrule_field.s new file mode 100644 index 000000000..784089178 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/hyrule_field.s @@ -0,0 +1,177 @@ +def RR_HYRULE_FIELD SCENE_HYRULE_FIELD true RA_HYRULE_FIELD +Hyrule Field +BigPoeKill (and HasBottle (and (CanUse RG_FAIRY_BOW) (or (CanUse RG_EPONA) RT_HF_BIG_POE_WITHOUT_EPONA))) +BorrowRightMasks (and IsChild (and BorrowBunnyHood (and (HasItem RG_KOKIRI_EMERALD) (and (HasItem RG_GORON_RUBY) (and (HasItem RG_ZORA_SAPPHIRE) (HasItem RG_CHILD_WALLET)))))) +RC_HF_OCARINA_OF_TIME_ITEM (and IsChild (and (== StoneCount 3) (HasItem RG_BRONZE_SCALE))) +RC_SONG_FROM_OCARINA_OF_TIME (and IsChild (and (== StoneCount 3) (HasItem RG_BRONZE_SCALE))) +RC_HF_POND_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +RC_HF_CENTRAL_GRASS_1 CanCutShrubs +RC_HF_CENTRAL_GRASS_2 CanCutShrubs +RC_HF_CENTRAL_GRASS_3 CanCutShrubs +RC_HF_CENTRAL_GRASS_4 CanCutShrubs +RC_HF_CENTRAL_GRASS_5 CanCutShrubs +RC_HF_CENTRAL_GRASS_6 CanCutShrubs +RC_HF_CENTRAL_GRASS_7 CanCutShrubs +RC_HF_CENTRAL_GRASS_8 CanCutShrubs +RC_HF_CENTRAL_GRASS_9 CanCutShrubs +RC_HF_CENTRAL_GRASS_10 CanCutShrubs +RC_HF_CENTRAL_GRASS_11 CanCutShrubs +RC_HF_CENTRAL_GRASS_12 CanCutShrubs +RC_HF_SOUTH_GRASS_1 CanCutShrubs +RC_HF_SOUTH_GRASS_2 CanCutShrubs +RC_HF_SOUTH_GRASS_3 CanCutShrubs +RC_HF_SOUTH_GRASS_4 CanCutShrubs +RC_HF_SOUTH_GRASS_5 CanCutShrubs +RC_HF_SOUTH_GRASS_6 CanCutShrubs +RC_HF_SOUTH_GRASS_7 CanCutShrubs +RC_HF_SOUTH_GRASS_8 CanCutShrubs +RC_HF_SOUTH_GRASS_9 CanCutShrubs +RC_HF_SOUTH_GRASS_10 CanCutShrubs +RC_HF_SOUTH_GRASS_11 CanCutShrubs +RC_HF_SOUTH_GRASS_12 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_1 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_2 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_3 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_4 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_5 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_6 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_7 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_8 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_9 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_10 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_11 CanCutShrubs +RC_HF_NEAR_MARKET_GRASS_12 CanCutShrubs +RC_HF_NEAR_KF_GRASS_1 CanCutShrubs +RC_HF_NEAR_KF_GRASS_2 CanCutShrubs +RC_HF_NEAR_KF_GRASS_3 CanCutShrubs +RC_HF_NEAR_KF_GRASS_4 CanCutShrubs +RC_HF_NEAR_KF_GRASS_5 CanCutShrubs +RC_HF_NEAR_KF_GRASS_6 CanCutShrubs +RC_HF_NEAR_KF_GRASS_7 CanCutShrubs +RC_HF_NEAR_KF_GRASS_8 CanCutShrubs +RC_HF_NEAR_KF_GRASS_9 CanCutShrubs +RC_HF_NEAR_KF_GRASS_10 CanCutShrubs +RC_HF_NEAR_KF_GRASS_11 CanCutShrubs +RC_HF_NEAR_KF_GRASS_12 CanCutShrubs +RR_LW_BRIDGE true +RR_LAKE_HYLIA true +RR_GERUDO_VALLEY true +RR_MARKET_ENTRANCE true +RR_KAKARIKO_VILLAGE true +RR_ZR_FRONT true +RR_LON_LON_RANCH true +RR_HF_SOUTHEAST_GROTTO (Here BlastOrSmash) +RR_HF_OPEN_GROTTO true +RR_HF_INSIDE_FENCE_GROTTO CanOpenBombGrotto +RR_HF_COW_GROTTO (and (or (CanUse RG_MEGATON_HAMMER) IsChild) CanOpenBombGrotto) +RR_HF_NEAR_MARKET_GROTTO (Here BlastOrSmash) +RR_HF_FAIRY_GROTTO (Here BlastOrSmash) +RR_HF_NEAR_KAK_GROTTO CanOpenBombGrotto +RR_HF_TEKTITE_GROTTO CanOpenBombGrotto + +def RR_HF_SOUTHEAST_GROTTO SCENE_GROTTOS false +HF Southeast Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_HF_SOUTHEAST_GROTTO_CHEST true +RC_HF_SOUTHEAST_GROTTO_FISH HasBottle +RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE true +RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_HF_SOUTHEAST_GROTTO_GRASS_1 CanCutShrubs +RC_HF_SOUTHEAST_GROTTO_GRASS_2 CanCutShrubs +RC_HF_SOUTHEAST_GROTTO_GRASS_3 CanCutShrubs +RC_HF_SOUTHEAST_GROTTO_GRASS_4 CanCutShrubs +RR_HYRULE_FIELD true + +def RR_HF_OPEN_GROTTO SCENE_GROTTOS false +HF Open Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_HF_OPEN_GROTTO_CHEST true +RC_HF_OPEN_GROTTO_FISH HasBottle +RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_HF_OPEN_GROTTO_GOSSIP_STONE true +RC_HF_OPEN_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_HF_OPEN_GROTTO_GRASS_1 CanCutShrubs +RC_HF_OPEN_GROTTO_GRASS_2 CanCutShrubs +RC_HF_OPEN_GROTTO_GRASS_3 CanCutShrubs +RC_HF_OPEN_GROTTO_GRASS_4 CanCutShrubs +RR_HYRULE_FIELD true + +def RR_HF_INSIDE_FENCE_GROTTO SCENE_GROTTOS false +HF Inside Fence Grotto +RC_HF_DEKU_SCRUB_GROTTO CanStunDeku +RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE CanBreakLowerBeehives +RC_HF_FENCE_GROTTO_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +RR_HYRULE_FIELD true + +def RR_HF_COW_GROTTO SCENE_GROTTOS false +HF Cow Grotto +RR_HYRULE_FIELD true +RR_HF_COW_GROTTO_BEHIND_WEBS HasFireSource + +def RR_HF_COW_GROTTO_BEHIND_WEBS SCENE_GROTTOS false +HF Cow Grotto Behind Webs +BugShrub CanCutShrubs +GossipStoneFairy CallGossipFairy +RC_HF_GS_COW_GROTTO (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +RC_HF_COW_GROTTO_COW (CanUse RG_EPONAS_SONG) +RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_HF_COW_GROTTO_GOSSIP_STONE true +RC_HF_COW_GROTTO_POT_1 CanBreakPots +RC_HF_COW_GROTTO_POT_2 CanBreakPots +RC_HF_COW_GROTTO_GRASS_1 CanCutShrubs +RC_HF_COW_GROTTO_GRASS_2 CanCutShrubs +RR_HF_COW_GROTTO true + +def RR_HF_NEAR_MARKET_GROTTO SCENE_GROTTOS false +HF Near Market Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_HF_NEAR_MARKET_GROTTO_CHEST true +RC_HF_NEAR_MARKET_GROTTO_FISH HasBottle +RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE true +RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_HF_NEAR_MARKET_GROTTO_GRASS_1 CanCutShrubs +RC_HF_NEAR_MARKET_GROTTO_GRASS_2 CanCutShrubs +RC_HF_NEAR_MARKET_GROTTO_GRASS_3 CanCutShrubs +RC_HF_NEAR_MARKET_GROTTO_GRASS_4 CanCutShrubs +RR_HYRULE_FIELD true + +def RR_HF_FAIRY_GROTTO SCENE_GROTTOS false +HF Fairy Grotto +FreeFairies true +RC_HF_FAIRY_GROTTO_FAIRY_1 true +RC_HF_FAIRY_GROTTO_FAIRY_2 true +RC_HF_FAIRY_GROTTO_FAIRY_3 true +RC_HF_FAIRY_GROTTO_FAIRY_4 true +RC_HF_FAIRY_GROTTO_FAIRY_5 true +RC_HF_FAIRY_GROTTO_FAIRY_6 true +RC_HF_FAIRY_GROTTO_FAIRY_7 true +RC_HF_FAIRY_GROTTO_FAIRY_8 true +RR_HYRULE_FIELD true + +def RR_HF_NEAR_KAK_GROTTO SCENE_GROTTOS false +HF Near Kak Grotto +RC_HF_GS_NEAR_KAK_GROTTO HookshotOrBoomerang +RR_HYRULE_FIELD true + +def RR_HF_TEKTITE_GROTTO SCENE_GROTTOS false +HF Tektite Grotto +RC_HF_TEKTITE_GROTTO_FREESTANDING_POH (or (HasItem RG_GOLDEN_SCALE) (CanUse RG_IRON_BOOTS)) +RR_HYRULE_FIELD true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s b/soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s new file mode 100644 index 000000000..a5875a2f7 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s @@ -0,0 +1,212 @@ +def RR_KAKARIKO_VILLAGE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kakariko Village +BugRock true +//Open Gate setting is applied in RR_ROOT +KakarikoVillageGateOpen (and IsChild (HasItem RG_ZELDAS_LETTER)) +//Needs wallet to be able to get another mask after selling Keaton +BorrowSkullMask (and IsChild (and CanBorrowMasks (HasItem RG_CHILD_WALLET))) +RC_SHEIK_IN_KAKARIKO (and IsAdult (and (HasItem RG_FOREST_MEDALLION) (and (HasItem RG_FIRE_MEDALLION) (HasItem RG_WATER_MEDALLION)))) +RC_KAK_ANJU_AS_CHILD (and IsChild AtDay) +RC_KAK_ANJU_AS_ADULT (and IsAdult AtDay) +RC_KAK_TRADE_POCKET_CUCCO (and IsAdult (and AtDay (and (CanUse RG_POCKET_EGG) WakeUpAdultTalon))) +//Can kill lower kak skulls with pots +RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION (and IsChild CanGetNightTimeGS) +RC_KAK_GS_SKULLTULA_HOUSE (and IsChild CanGetNightTimeGS) +RC_KAK_GS_GUARDS_HOUSE (and IsChild CanGetNightTimeGS) +RC_KAK_GS_TREE (and IsChild CanGetNightTimeGS) +RC_KAK_GS_WATCHTOWER (and IsChild (and (or (CanKillEnemy RE_GOLD_SKULLTULA ED_LONGSHOT) (and RT_KAK_TOWER_GS CanJumpslashExceptHammer)) CanGetNightTimeGS)) +RC_KAK_NEAR_POTION_SHOP_POT_1 (and IsChild CanBreakPots) +RC_KAK_NEAR_POTION_SHOP_POT_2 (and IsChild CanBreakPots) +RC_KAK_NEAR_POTION_SHOP_POT_3 (and IsChild CanBreakPots) +RC_KAK_NEAR_IMPAS_HOUSE_POT_1 (and IsChild CanBreakPots) +RC_KAK_NEAR_IMPAS_HOUSE_POT_2 (and IsChild CanBreakPots) +RC_KAK_NEAR_IMPAS_HOUSE_POT_3 (and IsChild CanBreakPots) +RC_KAK_NEAR_GUARDS_HOUSE_POT_1 (and IsChild CanBreakPots) +RC_KAK_NEAR_GUARDS_HOUSE_POT_2 (and IsChild CanBreakPots) +RC_KAK_NEAR_GUARDS_HOUSE_POT_3 (and IsChild CanBreakPots) +RC_KAK_GRASS_1 CanCutShrubs +RC_KAK_GRASS_2 CanCutShrubs +RC_KAK_GRASS_3 CanCutShrubs +RC_KAK_GRASS_4 CanCutShrubs +RC_KAK_GRASS_5 CanCutShrubs +RC_KAK_GRASS_6 CanCutShrubs +RC_KAK_GRASS_7 CanCutShrubs +RC_KAK_GRASS_8 CanCutShrubs +RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE (and IsAdult CanBreakCrates) +RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE (and IsAdult CanBreakCrates) +RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1 (and IsAdult CanBreakCrates) +RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2 (and IsAdult CanBreakCrates) +RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE (and IsAdult CanBreakCrates) +RC_KAK_NEAR_GY_CHILD_CRATE (and IsChild CanBreakCrates) +RC_KAK_NEAR_WINDMILL_CHILD_CRATE (and IsChild CanBreakCrates) +RC_KAK_NEAR_FENCE_CHILD_CRATE (and IsChild CanBreakCrates) +RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE (and IsChild CanBreakCrates) +RC_KAK_NEAR_BAZAAR_CHILD_CRATE (and IsChild CanBreakCrates) +RR_HYRULE_FIELD true +RR_KAK_CARPENTER_BOSS_HOUSE (CanOpenOverworldDoor RG_BOSS_HOUSE_KEY) +RR_KAK_HOUSE_OF_SKULLTULA (CanOpenOverworldDoor RG_SKULLTULA_HOUSE_KEY) +RR_KAK_IMPAS_HOUSE (CanOpenOverworldDoor RG_IMPAS_HOUSE_KEY) +RR_KAK_WINDMILL (CanOpenOverworldDoor RG_WINDMILL_KEY) +RR_KAK_BAZAAR (and IsAdult (and AtDay (CanOpenOverworldDoor RG_KAK_BAZAAR_KEY))) +RR_KAK_SHOOTING_GALLERY (and IsAdult (and AtDay (CanOpenOverworldDoor RG_KAK_SHOOTING_GALLERY_KEY))) +RR_KAK_WELL (or IsAdult (or DrainWell (or (CanUse RG_IRON_BOOTS) (and RT_BOTTOM_OF_THE_WELL_NAVI_DIVE (and IsChild (and (HasItem RG_BRONZE_SCALE) CanJumpslash)))))) +RR_KAK_POTION_SHOP_FRONT (and (or AtDay IsChild) (CanOpenOverworldDoor RG_KAK_POTION_SHOP_KEY)) +RR_KAK_REDEAD_GROTTO CanOpenBombGrotto +RR_KAK_IMPAS_LEDGE (or (and IsChild AtDay) (and IsAdult RT_VISIBLE_COLLISION)) +RR_KAK_WATCHTOWER (or IsAdult (or AtDay (or (CanKillEnemy RE_GOLD_SKULLTULA ED_LONGSHOT) (and RT_KAK_TOWER_GS CanJumpslashExceptHammer)))) +RR_KAK_ROOFTOP (or (CanUse RG_HOOKSHOT) (and RT_KAK_MAN_ON_ROOF IsAdult)) +RR_KAK_IMPAS_ROOFTOP (or (CanUse RG_HOOKSHOT) (and RT_KAK_ROOFTOP_GS (CanUse RG_HOVER_BOOTS))) +RR_THE_GRAVEYARD true +RR_KAK_BEHIND_GATE (or IsAdult KakarikoVillageGateOpen) +//adult can jump from the fence near the windmill to ledgegrab the fence near granny's shop. is in logic on N64 +RR_KAK_BACKYARD (or IsAdult AtDay) + +def RR_KAK_CARPENTER_BOSS_HOUSE SCENE_KAKARIKO_CENTER_GUEST_HOUSE false +Kak Carpenter Boss House +WakeUpAdultTalon (and IsAdult (CanUse RG_POCKET_EGG)) +RR_KAKARIKO_VILLAGE true + +def RR_KAK_HOUSE_OF_SKULLTULA SCENE_HOUSE_OF_SKULLTULA false +Kak House of Skulltula +RC_KAK_10_GOLD_SKULLTULA_REWARD (>= GetGSCount 10) +RC_KAK_20_GOLD_SKULLTULA_REWARD (>= GetGSCount 20) +RC_KAK_30_GOLD_SKULLTULA_REWARD (>= GetGSCount 30) +RC_KAK_40_GOLD_SKULLTULA_REWARD (>= GetGSCount 40) +RC_KAK_50_GOLD_SKULLTULA_REWARD (>= GetGSCount 50) +RC_KAK_100_GOLD_SKULLTULA_REWARD (>= GetGSCount 100) +RR_KAKARIKO_VILLAGE true + +def RR_KAK_IMPAS_HOUSE SCENE_IMPAS_HOUSE false +Kak Impas House +RC_KAK_IMPAS_HOUSE_COW (CanUse RG_EPONAS_SONG) +RR_KAKARIKO_VILLAGE true + +def RR_KAK_IMPAS_LEDGE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kak Impas Ledge +RR_KAK_IMPAS_HOUSE_BACK true +RR_KAKARIKO_VILLAGE true + +def RR_KAK_IMPAS_HOUSE_BACK SCENE_IMPAS_HOUSE false +Kak Impas House Back +RC_KAK_IMPAS_HOUSE_FREESTANDING_POH true +RC_KAK_IMPAS_HOUSE_COW (CanUse RG_EPONAS_SONG) +RR_KAK_IMPAS_LEDGE true + +def RR_KAK_WINDMILL SCENE_WINDMILL_AND_DAMPES_GRAVE false +Kak Windmill +DrainWell (and IsChild (CanUse RG_SONG_OF_STORMS)) +RC_KAK_WINDMILL_FREESTANDING_POH (or (CanUse RG_BOOMERANG) (or DampesWindmillAccess (or (and IsAdult RT_KAK_ADULT_WINDMILL_POH) (and IsChild (and CanJumpslashExceptHammer RT_KAK_CHILD_WINDMILL_POH))))) +RC_SONG_FROM_WINDMILL (and IsAdult (HasItem RG_FAIRY_OCARINA)) +RR_KAKARIKO_VILLAGE true + +def RR_KAK_BAZAAR SCENE_BAZAAR false +Kak Bazaar +RC_KAK_BAZAAR_ITEM_1 true +RC_KAK_BAZAAR_ITEM_2 true +RC_KAK_BAZAAR_ITEM_3 true +RC_KAK_BAZAAR_ITEM_4 true +RC_KAK_BAZAAR_ITEM_5 true +RC_KAK_BAZAAR_ITEM_6 true +RC_KAK_BAZAAR_ITEM_7 true +RC_KAK_BAZAAR_ITEM_8 true +RR_KAKARIKO_VILLAGE true + +def RR_KAK_SHOOTING_GALLERY SCENE_SHOOTING_GALLERY false +Kak Shooting Gallery +RC_KAK_SHOOTING_GALLERY_REWARD (and (HasItem RG_CHILD_WALLET) (and IsAdult (CanUse RG_FAIRY_BOW))) +RR_KAKARIKO_VILLAGE true + +def RR_KAK_POTION_SHOP_FRONT SCENE_POTION_SHOP_KAKARIKO false +Kak Potion Shop Front +RC_KAK_POTION_SHOP_ITEM_1 IsAdult +RC_KAK_POTION_SHOP_ITEM_2 IsAdult +RC_KAK_POTION_SHOP_ITEM_3 IsAdult +RC_KAK_POTION_SHOP_ITEM_4 IsAdult +RC_KAK_POTION_SHOP_ITEM_5 IsAdult +RC_KAK_POTION_SHOP_ITEM_6 IsAdult +RC_KAK_POTION_SHOP_ITEM_7 IsAdult +RC_KAK_POTION_SHOP_ITEM_8 IsAdult +RR_KAKARIKO_VILLAGE true +RR_KAK_POTION_SHOP_BACK IsAdult + +def RR_KAK_POTION_SHOP_BACK SCENE_POTION_SHOP_KAKARIKO false +Kak Potion Shop Back +RR_KAK_BACKYARD IsAdult +RR_KAK_POTION_SHOP_FRONT true + +def RR_KAK_WATCHTOWER SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kak Watchtower +//exists for when age change is in logic. +RC_KAK_GS_WATCHTOWER (and IsChild (and (CanUse RG_DINS_FIRE) CanGetNightTimeGS)) +RR_KAKARIKO_VILLAGE true +RR_KAK_ROOFTOP (and RT_KAK_MAN_ON_ROOF IsChild) + +def RR_KAK_ROOFTOP SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kak Rooftop +RC_KAK_MAN_ON_ROOF true +RR_KAK_BACKYARD true +RR_KAKARIKO_VILLAGE true + +def RR_KAK_IMPAS_ROOFTOP SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kak Impas Rooftop +RC_KAK_GS_ABOVE_IMPAS_HOUSE (and IsAdult (and CanGetNightTimeGS (CanKillEnemy RE_GOLD_SKULLTULA))) +RR_KAK_IMPAS_LEDGE true +RR_KAKARIKO_VILLAGE true + +def RR_KAK_BEHIND_GATE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kak Behind Gate +RR_KAKARIKO_VILLAGE (or IsAdult (or RT_VISIBLE_COLLISION KakarikoVillageGateOpen)) +RR_DEATH_MOUNTAIN_TRAIL true + +def RR_KAK_BACKYARD SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kak Backyard +//There's probably a trick to get these with rang from the main region +RC_KAK_NEAR_MEDICINE_SHOP_POT_1 (and IsChild CanBreakPots) +RC_KAK_NEAR_MEDICINE_SHOP_POT_2 (and IsChild CanBreakPots) +RR_KAKARIKO_VILLAGE true +RR_KAK_OPEN_GROTTO true +RR_KAK_ODD_POTION_BUILDING (and IsAdult (CanOpenOverworldDoor RG_GRANNYS_POTION_SHOP_KEY)) +RR_KAK_POTION_SHOP_BACK (and IsAdult (and AtDay (CanOpenOverworldDoor RG_KAK_POTION_SHOP_KEY))) + +def RR_KAK_WELL SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE +Kak Well +RR_KAKARIKO_VILLAGE (or IsAdult (or (HasItem RG_BRONZE_SCALE) DrainWell)) +RR_BOTTOM_OF_THE_WELL_ENTRYWAY (or IsChild (and DrainWell (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) + +def RR_KAK_ODD_POTION_BUILDING SCENE_POTION_SHOP_GRANNY false +Kak Granny's Potion Shop +RC_KAK_TRADE_ODD_MUSHROOM (and IsAdult (CanUse RG_ODD_MUSHROOM)) +RC_KAK_GRANNYS_SHOP (and IsAdult (or (CanUse RG_ODD_MUSHROOM) (TradeQuestStep RG_ODD_MUSHROOM))) +RR_KAK_BACKYARD true + +def RR_KAK_REDEAD_GROTTO SCENE_GROTTOS false +Kak Redead Grotto +RC_KAK_REDEAD_GROTTO_CHEST (CanKillEnemy RE_REDEAD ED_CLOSE true 2) +RR_KAKARIKO_VILLAGE true + +def RR_KAK_OPEN_GROTTO SCENE_GROTTOS false +Kak Open Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_KAK_OPEN_GROTTO_CHEST true +RC_KAK_OPEN_GROTTO_FISH HasBottle +RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_KAK_OPEN_GROTTO_GOSSIP_STONE true +RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_KAK_OPEN_GROTTO_GRASS_1 CanCutShrubs +RC_KAK_OPEN_GROTTO_GRASS_2 CanCutShrubs +RC_KAK_OPEN_GROTTO_GRASS_3 CanCutShrubs +RC_KAK_OPEN_GROTTO_GRASS_4 CanCutShrubs +RR_KAK_BACKYARD true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/kokiri_forest.s b/soh/soh/Enhancements/randomizer/logic/overworld/kokiri_forest.s new file mode 100644 index 000000000..b719ad694 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/kokiri_forest.s @@ -0,0 +1,158 @@ +def RR_KOKIRI_FOREST SCENE_KOKIRI_FOREST false RA_KOKIRI_FOREST +Kokiri Forest +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +GossipStoneFairy CallGossipFairyExceptSuns +ShowedMidoSwordAndShield (and IsChild (and (CanUse RG_KOKIRI_SWORD) (CanUse RG_DEKU_SHIELD))) +RC_KF_KOKIRI_SWORD_CHEST IsChild +RC_KF_GS_KNOW_IT_ALL_HOUSE (and IsChild (and CanAttack CanGetNightTimeGS)) +RC_KF_GS_BEAN_PATCH (and CanSpawnSoilSkull CanAttack) +RC_KF_GS_HOUSE_OF_TWINS (and IsAdult (and (or HookshotOrBoomerang (and RT_KF_ADULT_GS (CanUse RG_HOVER_BOOTS))) CanGetNightTimeGS)) +RC_KF_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_KF_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_KF_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_KF_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_KF_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_KF_BRIDGE_RUPEE IsChild +RC_KF_BEHIND_MIDOS_RUPEE IsChild +RC_KF_SOUTH_GRASS_WEST_RUPEE IsChild +RC_KF_SOUTH_GRASS_EAST_RUPEE IsChild +RC_KF_NORTH_GRASS_WEST_RUPEE IsChild +RC_KF_NORTH_GRASS_EAST_RUPEE IsChild +RC_KF_BOULDER_RUPEE_1 IsChild +RC_KF_BOULDER_RUPEE_2 IsChild +RC_KF_BEAN_RUPEE_1 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) +RC_KF_BEAN_RUPEE_2 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) +RC_KF_BEAN_RUPEE_3 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) +RC_KF_BEAN_RUPEE_4 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) +RC_KF_BEAN_RUPEE_5 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) +RC_KF_BEAN_RUPEE_6 (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) +RC_KF_BEAN_RED_RUPEE (and IsAdult (or (CanPlantBean RR_KOKIRI_FOREST) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_BOOMERANG)))) +RC_KF_SARIAS_ROOF_WEST_HEART IsChild +RC_KF_SARIAS_ROOF_EAST_HEART IsChild +RC_KF_SARIAS_ROOF_NORTH_HEART IsChild +RC_KF_GOSSIP_STONE true +RC_KF_CHILD_GRASS_1 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_2 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_3 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_4 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_5 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_6 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_7 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_8 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_9 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_10 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_11 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_12 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_MAZE_1 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_MAZE_2 (and IsChild CanCutShrubs) +RC_KF_CHILD_GRASS_MAZE_3 (and IsChild CanCutShrubs) +RC_KF_ADULT_GRASS_1 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_2 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_3 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_4 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_5 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_6 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_7 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_8 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_9 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_10 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_11 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_12 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_13 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_14 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_15 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_16 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_17 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_18 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_19 (and IsAdult CanCutShrubs) +RC_KF_ADULT_GRASS_20 (and IsAdult CanCutShrubs) +RR_KF_LINKS_HOUSE true +RR_KF_MIDOS_HOUSE true +RR_KF_SARIAS_HOUSE true +RR_KF_HOUSE_OF_TWINS true +RR_KF_KNOW_IT_ALL_HOUSE true +RR_KF_KOKIRI_SHOP true +RR_KF_OUTSIDE_DEKU_TREE (or (and IsAdult (or (CanPassEnemy RE_BIG_SKULLTULA) ForestTempleClear)) (or (== RSK_FOREST RO_CLOSED_FOREST_OFF) ShowedMidoSwordAndShield)) +RR_THE_LOST_WOODS true +RR_LW_BRIDGE_FROM_FOREST (or IsAdult (or (!= RSK_FOREST RO_CLOSED_FOREST_ON) DekuTreeClear)) +RR_KF_STORMS_GROTTO CanOpenStormsGrotto + +def RR_KF_LINKS_HOUSE SCENE_LINKS_HOUSE false +KF Link's House +RC_KF_LINKS_HOUSE_COW (and IsAdult (and (CanUse RG_EPONAS_SONG) LinksCow)) +RC_KF_LINKS_HOUSE_POT CanBreakPots +RR_KOKIRI_FOREST true + +def RR_KF_MIDOS_HOUSE SCENE_MIDOS_HOUSE false +KF Mido's House +RC_KF_MIDOS_TOP_LEFT_CHEST true +RC_KF_MIDOS_TOP_RIGHT_CHEST true +RC_KF_MIDOS_BOTTOM_LEFT_CHEST true +RC_KF_MIDOS_BOTTOM_RIGHT_CHEST true +RR_KOKIRI_FOREST true + +def RR_KF_SARIAS_HOUSE SCENE_SARIAS_HOUSE false +KF Saria's House +RC_KF_SARIAS_TOP_LEFT_HEART true +RC_KF_SARIAS_TOP_RIGHT_HEART true +RC_KF_SARIAS_BOTTOM_LEFT_HEART true +RC_KF_SARIAS_BOTTOM_RIGHT_HEART true +RR_KOKIRI_FOREST true + +def RR_KF_HOUSE_OF_TWINS SCENE_TWINS_HOUSE false +KF House of Twins +RC_KF_TWINS_HOUSE_POT_1 CanBreakPots +RC_KF_TWINS_HOUSE_POT_2 CanBreakPots +RR_KOKIRI_FOREST true + +def RR_KF_KNOW_IT_ALL_HOUSE SCENE_KNOW_IT_ALL_BROS_HOUSE false +KF Know It All House +RC_KF_BROTHERS_HOUSE_POT_1 CanBreakPots +RC_KF_BROTHERS_HOUSE_POT_2 CanBreakPots +RR_KOKIRI_FOREST true + +def RR_KF_KOKIRI_SHOP SCENE_KOKIRI_SHOP false +KF Kokiri Shop +RC_KF_SHOP_ITEM_1 true +RC_KF_SHOP_ITEM_2 true +RC_KF_SHOP_ITEM_3 true +RC_KF_SHOP_ITEM_4 true +RC_KF_SHOP_ITEM_5 true +RC_KF_SHOP_ITEM_6 true +RC_KF_SHOP_ITEM_7 true +RC_KF_SHOP_ITEM_8 true +RR_KOKIRI_FOREST true + +def RR_KF_OUTSIDE_DEKU_TREE SCENE_KOKIRI_FOREST false RA_KOKIRI_FOREST +KF Outside Deku Tree +DekuBabaSticks CanGetDekuBabaSticks +DekuBabaNuts CanGetDekuBabaNuts +ShowedMidoSwordAndShield (and IsChild (and (CanUse RG_KOKIRI_SWORD) (CanUse RG_DEKU_SHIELD))) +RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE true +RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE true +RR_DEKU_TREE_ENTRYWAY (or IsChild (and (!= RSK_SHUFFLE_DUNGEON_ENTRANCES RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) (or (== RSK_FOREST RO_CLOSED_FOREST_OFF) ShowedMidoSwordAndShield))) +RR_KOKIRI_FOREST (or (and IsAdult (or (CanPassEnemy RE_BIG_SKULLTULA) ForestTempleClear)) (or (== RSK_FOREST RO_CLOSED_FOREST_OFF) ShowedMidoSwordAndShield)) + +def RR_KF_STORMS_GROTTO SCENE_GROTTOS false +KF Storms Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_KF_STORMS_GROTTO_CHEST true +RC_KF_STORMS_GROTTO_FISH HasBottle +RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_KF_STORMS_GROTTO_GOSSIP_STONE true +RC_KF_STORMS_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_KF_STORMS_GROTTO_GRASS_1 CanCutShrubs +RC_KF_STORMS_GROTTO_GRASS_2 CanCutShrubs +RC_KF_STORMS_GROTTO_GRASS_3 CanCutShrubs +RC_KF_STORMS_GROTTO_GRASS_4 CanCutShrubs +RR_KOKIRI_FOREST true + diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/lake_hylia.s b/soh/soh/Enhancements/randomizer/logic/overworld/lake_hylia.s new file mode 100644 index 000000000..fd2e4d8f1 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/lake_hylia.s @@ -0,0 +1,160 @@ +def RR_LAKE_HYLIA SCENE_LAKE_HYLIA true RA_LAKE_HYLIA +Lake Hylia +GossipStoneFairy CallGossipFairy +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +ButterflyFairy (CanUse RG_STICKS) +BugShrub (and IsChild CanCutShrubs) +ChildScarecrow (and IsChild (and (HasItem RG_FAIRY_OCARINA) (>= OcarinaButtons 2))) +AdultScarecrow (and IsAdult (and (HasItem RG_FAIRY_OCARINA) (>= OcarinaButtons 2))) +RC_LH_UNDERWATER_ITEM (and IsChild (HasItem RG_SILVER_SCALE)) +RC_LH_SUN (and IsAdult (and (or (and WaterTempleClear (HasItem RG_BRONZE_SCALE)) (CanUse RG_DISTANT_SCARECROW)) (CanUse RG_FAIRY_BOW))) +RC_LH_FREESTANDING_POH (and IsAdult (or (CanUse RG_SCARECROW) (CanPlantBean RR_LAKE_HYLIA))) +RC_LH_GS_BEAN_PATCH (and CanSpawnSoilSkull (CanGetEnemyDrop RE_GOLD_SKULLTULA)) +RC_LH_GS_LAB_WALL (and IsChild (and (or (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) (and RT_LH_LAB_WALL_GS CanJumpslashExceptHammer)) CanGetNightTimeGS)) +RC_LH_GS_SMALL_ISLAND (and IsChild (and (CanGetEnemyDrop RE_GOLD_SKULLTULA) (and CanGetNightTimeGS (HasItem RG_BRONZE_SCALE)))) +RC_LH_GS_TREE (and IsAdult (and (CanUse RG_LONGSHOT) CanGetNightTimeGS)) +RC_LH_FRONT_RUPEE (and IsChild (HasItem RG_BRONZE_SCALE)) +RC_LH_MIDDLE_RUPEE (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LH_BACK_RUPEE (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LH_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LH_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LH_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LH_LAB_GOSSIP_STONE_FAIRY CallGossipFairy +RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +//You can walk along the edge of the lake to get these without swimming, the fairy is created going backwards, which is convenient here +RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY CallGossipFairy +RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY CallGossipFairy +RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_LH_ISLAND_SUN_FAIRY (and (CanUse RG_SUNS_SONG) (or (and (HasItem RG_BRONZE_SCALE) (or IsChild WaterTempleClear)) (CanUse RG_DISTANT_SCARECROW))) +RC_LH_LAB_GOSSIP_STONE true +RC_LH_SOUTHEAST_GOSSIP_STONE true +RC_LH_SOUTHWEST_GOSSIP_STONE true +RC_LH_GRASS_1 CanCutShrubs +RC_LH_GRASS_2 CanCutShrubs +RC_LH_GRASS_3 CanCutShrubs +RC_LH_GRASS_4 CanCutShrubs +RC_LH_GRASS_5 CanCutShrubs +RC_LH_GRASS_6 CanCutShrubs +RC_LH_GRASS_7 CanCutShrubs +RC_LH_GRASS_8 CanCutShrubs +RC_LH_GRASS_9 CanCutShrubs +RC_LH_GRASS_10 CanCutShrubs +RC_LH_GRASS_11 CanCutShrubs +RC_LH_GRASS_12 CanCutShrubs +RC_LH_GRASS_13 CanCutShrubs +RC_LH_GRASS_14 CanCutShrubs +RC_LH_GRASS_15 CanCutShrubs +RC_LH_GRASS_16 CanCutShrubs +RC_LH_GRASS_17 CanCutShrubs +RC_LH_GRASS_18 CanCutShrubs +RC_LH_GRASS_19 CanCutShrubs +RC_LH_GRASS_20 CanCutShrubs +RC_LH_GRASS_21 CanCutShrubs +RC_LH_GRASS_22 CanCutShrubs +RC_LH_GRASS_23 CanCutShrubs +RC_LH_GRASS_24 CanCutShrubs +RC_LH_GRASS_25 CanCutShrubs +RC_LH_GRASS_26 CanCutShrubs +RC_LH_GRASS_27 CanCutShrubs +RC_LH_GRASS_28 CanCutShrubs +RC_LH_GRASS_29 CanCutShrubs +RC_LH_GRASS_30 CanCutShrubs +RC_LH_GRASS_31 CanCutShrubs +RC_LH_GRASS_32 CanCutShrubs +RC_LH_GRASS_33 CanCutShrubs +RC_LH_GRASS_34 CanCutShrubs +RC_LH_GRASS_35 CanCutShrubs +RC_LH_GRASS_36 CanCutShrubs +RC_LH_CHILD_GRASS_1 (and IsChild CanCutShrubs) +RC_LH_CHILD_GRASS_2 (and IsChild CanCutShrubs) +RC_LH_CHILD_GRASS_3 (and IsChild CanCutShrubs) +RC_LH_CHILD_GRASS_4 (and IsChild CanCutShrubs) +RC_LH_WARP_PAD_GRASS_1 CanCutShrubs +RC_LH_WARP_PAD_GRASS_2 CanCutShrubs +RR_HYRULE_FIELD true +RR_LH_FROM_SHORTCUT true +RR_LH_OWL_FLIGHT @deprioritize IsChild +RR_LH_FISHING_ISLAND (or (and (or IsChild WaterTempleClear) (HasItem RG_BRONZE_SCALE)) (and IsAdult (or (CanUse RG_SCARECROW) (CanPlantBean RR_LAKE_HYLIA)))) +RR_LH_LAB (CanOpenOverworldDoor RG_HYLIA_LAB_KEY) +RR_LH_FROM_WATER_TEMPLE true +RR_LH_GROTTO true + +def RR_LH_FROM_SHORTCUT SCENE_LAKE_HYLIA false RA_LAKE_HYLIA +LH From Shortcut +RR_LAKE_HYLIA (or (> Hearts 1) (or (HasItem RG_BOTTLE_WITH_FAIRY) (or (HasItem RG_BRONZE_SCALE) (CanUse RG_IRON_BOOTS)))) +RR_ZORAS_DOMAIN (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) + +def RR_LH_FROM_WATER_TEMPLE SCENE_LAKE_HYLIA false RA_LAKE_HYLIA +LH From Water Temple +RR_LAKE_HYLIA (or (HasItem RG_BRONZE_SCALE) (or (HasItem RG_BOTTLE_WITH_FAIRY) (CanUse RG_IRON_BOOTS))) +RR_WATER_TEMPLE_ENTRYWAY (and (CanUse RG_HOOKSHOT) (or (or (CanUse RG_IRON_BOOTS) (and RT_LH_WATER_HOOKSHOT (HasItem RG_GOLDEN_SCALE))) (and IsAdult (and (CanUse RG_LONGSHOT) (HasItem RG_GOLDEN_SCALE))))) + +def RR_LH_FISHING_ISLAND SCENE_LAKE_HYLIA true RA_LAKE_HYLIA +LH Fishing Island +RR_LAKE_HYLIA (HasItem RG_BRONZE_SCALE) +RR_LH_FISHING_POND (CanOpenOverworldDoor RG_FISHING_HOLE_KEY) + +def RR_LH_OWL_FLIGHT SCENE_LAKE_HYLIA true RA_LAKE_HYLIA +LH Owl Flight +RR_HYRULE_FIELD @deprioritize true + +def RR_LH_LAB SCENE_LAKESIDE_LABORATORY false +LH Lab +RC_LH_LAB_DIVE (or (HasItem RG_GOLDEN_SCALE) (and RT_LH_LAB_DIVING (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) (HasItem RG_BRONZE_SCALE))))) +RC_LH_TRADE_FROG (and IsAdult (CanUse RG_EYEBALL_FROG)) +RC_LH_GS_LAB_CRATE (and (CanUse RG_IRON_BOOTS) (and (CanUse RG_HOOKSHOT) CanBreakCrates)) +RC_LH_LAB_FRONT_RUPEE (or (CanUse RG_IRON_BOOTS) (HasItem RG_GOLDEN_SCALE)) +RC_LH_LAB_LEFT_RUPEE (or (CanUse RG_IRON_BOOTS) (HasItem RG_GOLDEN_SCALE)) +RC_LH_LAB_RIGHT_RUPEE (or (CanUse RG_IRON_BOOTS) (HasItem RG_GOLDEN_SCALE)) +RC_LH_LAB_CRATE (and (CanUse RG_IRON_BOOTS) CanBreakCrates) +RR_LAKE_HYLIA true + +def RR_LH_FISHING_POND SCENE_FISHING_POND false +LH Fishing Hole +RC_LH_CHILD_FISHING (and (CanUse RG_FISHING_POLE) IsChild) +RC_LH_CHILD_FISH_1 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_2 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_3 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_4 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_5 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_6 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_7 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_8 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_9 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_10 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_11 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_12 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_13 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_14 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_FISH_15 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_LOACH_1 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_CHILD_LOACH_2 (and (CanUse RG_FISHING_POLE) (or IsChild (not RSK_FISHSANITY_AGE_SPLIT))) +RC_LH_ADULT_FISHING (and (CanUse RG_FISHING_POLE) IsAdult) +RC_LH_ADULT_FISH_1 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_2 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_3 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_4 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_5 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_6 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_7 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_8 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_9 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_10 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_11 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_12 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_13 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_14 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_FISH_15 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_ADULT_LOACH (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AGE_SPLIT)) +RC_LH_HYRULE_LOACH (CanUse RG_FISHING_POLE) +RC_FISHING_POLE_HINT true +RR_LH_FISHING_ISLAND true + +def RR_LH_GROTTO SCENE_GROTTOS false +LH Grotto +RC_LH_DEKU_SCRUB_GROTTO_LEFT CanStunDeku +RC_LH_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku +RC_LH_DEKU_SCRUB_GROTTO_CENTER CanStunDeku +RC_LH_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_LAKE_HYLIA true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/lon_lon_ranch.s b/soh/soh/Enhancements/randomizer/logic/overworld/lon_lon_ranch.s new file mode 100644 index 000000000..d1f791a85 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/lon_lon_ranch.s @@ -0,0 +1,51 @@ +def RR_LON_LON_RANCH SCENE_LON_LON_RANCH true RA_LON_LON_RANCH +Lon Lon Ranch +FreedEpona (and (or (HasItem RG_CHILD_WALLET) RSK_SKIP_EPONA_RACE) (and (CanUse RG_EPONAS_SONG) (and IsAdult AtDay))) +LinksCow (and (HasItem RG_CHILD_WALLET) (and (CanUse RG_EPONAS_SONG) (and IsAdult AtDay))) +RC_SONG_FROM_MALON (and IsChild (and (HasItem RG_ZELDAS_LETTER) (and (HasItem RG_FAIRY_OCARINA) AtDay))) +RC_LLR_GS_TREE IsChild +RC_LLR_GS_RAIN_SHED (and IsChild CanGetNightTimeGS) +RC_LLR_GS_HOUSE_WINDOW (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_LLR_GS_BACK_WALL (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_LLR_FRONT_POT_1 (and IsChild CanBreakPots) +RC_LLR_FRONT_POT_2 (and IsChild CanBreakPots) +RC_LLR_FRONT_POT_3 (and IsChild CanBreakPots) +RC_LLR_FRONT_POT_4 (and IsChild CanBreakPots) +RC_LLR_RAIN_SHED_POT_1 (and IsChild CanBreakPots) +RC_LLR_RAIN_SHED_POT_2 (and IsChild CanBreakPots) +RC_LLR_RAIN_SHED_POT_3 (and IsChild CanBreakPots) +RC_LLR_NEAR_TREE_CRATE (and IsChild CanBreakCrates) +RR_HYRULE_FIELD true +RR_LLR_TALONS_HOUSE (CanOpenOverworldDoor RG_TALONS_HOUSE_KEY) +RR_LLR_STABLES (CanOpenOverworldDoor RG_STABLES_KEY) +RR_LLR_TOWER (CanOpenOverworldDoor RG_BACK_TOWER_KEY) +RR_LLR_GROTTO IsChild + +def RR_LLR_TALONS_HOUSE SCENE_LON_LON_BUILDINGS false +LLR Talons House +RC_LLR_TALONS_CHICKENS (and (HasItem RG_CHILD_WALLET) (and IsChild (and AtDay (HasItem RG_ZELDAS_LETTER)))) +RC_LLR_TALONS_HOUSE_POT_1 CanBreakPots +RC_LLR_TALONS_HOUSE_POT_2 CanBreakPots +RC_LLR_TALONS_HOUSE_POT_3 CanBreakPots +RR_LON_LON_RANCH true + +def RR_LLR_STABLES SCENE_STABLE false +LLR Stables +RC_LLR_STABLES_LEFT_COW (CanUse RG_EPONAS_SONG) +RC_LLR_STABLES_RIGHT_COW (CanUse RG_EPONAS_SONG) +RR_LON_LON_RANCH true + +def RR_LLR_TOWER SCENE_LON_LON_BUILDINGS false +LLR Tower +RC_LLR_FREESTANDING_POH IsChild +RC_LLR_TOWER_LEFT_COW (CanUse RG_EPONAS_SONG) +RC_LLR_TOWER_RIGHT_COW (CanUse RG_EPONAS_SONG) +RR_LON_LON_RANCH true + +def RR_LLR_GROTTO SCENE_GROTTOS false +LLR Grotto +RC_LLR_DEKU_SCRUB_GROTTO_LEFT CanStunDeku +RC_LLR_DEKU_SCRUB_GROTTO_RIGHT CanStunDeku +RC_LLR_DEKU_SCRUB_GROTTO_CENTER CanStunDeku +RC_LLR_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_LON_LON_RANCH true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/lost_woods.s b/soh/soh/Enhancements/randomizer/logic/overworld/lost_woods.s new file mode 100644 index 000000000..9580118da --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/lost_woods.s @@ -0,0 +1,119 @@ +def RR_THE_LOST_WOODS SCENE_LOST_WOODS false RA_THE_LOST_WOODS +Lost Woods +GossipStoneFairy CallGossipFairyExceptSuns +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +BugShrub (and IsChild CanCutShrubs) +BorrowSpookyMask (and IsChild (and BorrowSkullMask (and (CanUse RG_SARIAS_SONG) (HasItem RG_CHILD_WALLET)))) +RC_LW_SKULL_KID (and IsChild (CanUse RG_SARIAS_SONG)) +RC_LW_TRADE_COJIRO (and IsAdult (CanUse RG_COJIRO)) +//I cannot think of a case where you can use Odd pot but not Cojiro to reset the quadrant should you have both. If one exists, add it to logic +RC_LW_TRADE_ODD_POTION (and IsAdult (CanUse RG_ODD_POTION)) +//all 5 buttons are logically required for memory game +//because the chances of being able to beat it +//every time you attempt it are as follows: +//0 or 1 button(s) => 0% +//2 buttons => 0.15625% +//3 buttons => 3.75% +//4 buttons => 25.3125% +//5 buttons => 100% +RC_LW_OCARINA_MEMORY_GAME (and IsChild (and (HasItem RG_FAIRY_OCARINA) (>= OcarinaButtons 5))) +RC_LW_TARGET_IN_WOODS (and IsChild (CanUse RG_FAIRY_SLINGSHOT)) +RC_LW_DEKU_SCRUB_NEAR_BRIDGE (and IsChild CanStunDeku) +RC_LW_GS_BEAN_PATCH_NEAR_BRIDGE (and CanSpawnSoilSkull CanAttack) +//RANDOTODO handle collecting some of these as you leave the shortcut from the other side +RC_LW_SHORTCUT_RUPEE_1 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_SHORTCUT_RUPEE_2 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_SHORTCUT_RUPEE_3 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_SHORTCUT_RUPEE_4 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_SHORTCUT_RUPEE_5 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_SHORTCUT_RUPEE_6 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_SHORTCUT_RUPEE_7 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_SHORTCUT_RUPEE_8 (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LW_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_LW_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_LW_SHORTCUT_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +RC_LW_GOSSIP_STONE true +RC_LW_GRASS_1 CanCutShrubs +RC_LW_GRASS_2 CanCutShrubs +RC_LW_GRASS_3 CanCutShrubs +RR_LW_FOREST_EXIT true +RR_GC_WOODS_WARP true +RR_LW_BRIDGE (or (and IsAdult (or (CanPlantBean RR_THE_LOST_WOODS) RT_LW_BRIDGE)) (or (CanUse RG_HOVER_BOOTS) (CanUse RG_LONGSHOT))) +RR_ZR_FROM_SHORTCUT (or (HasItem RG_SILVER_SCALE) (or (CanUse RG_IRON_BOOTS) (and RT_LOST_WOOD_NAVI_DIVE (and IsChild (and (HasItem RG_BRONZE_SCALE) CanJumpslash))))) +RR_LW_BEYOND_MIDO (or IsChild (or (CanUse RG_SARIAS_SONG) RT_LW_MIDO_BACKFLIP)) +RR_LW_NEAR_SHORTCUTS_GROTTO (Here BlastOrSmash) + +def RR_LW_BRIDGE_FROM_FOREST SCENE_LOST_WOODS false RA_THE_LOST_WOODS +LW Bridge From Forest +RC_LW_GIFT_FROM_SARIA true +RR_LW_BRIDGE true + +def RR_LW_BRIDGE SCENE_LOST_WOODS false RA_THE_LOST_WOODS +LW Bridge +RR_KOKIRI_FOREST true +RR_HYRULE_FIELD true +RR_THE_LOST_WOODS (CanUse RG_LONGSHOT) + +def RR_LW_FOREST_EXIT SCENE_LOST_WOODS false RA_THE_LOST_WOODS +LW Forest Exit +RR_KOKIRI_FOREST true + +def RR_LW_BEYOND_MIDO SCENE_LOST_WOODS false RA_THE_LOST_WOODS +LW Beyond Mido +ButterflyFairy (CanUse RG_STICKS) +RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT (and IsChild CanStunDeku) +RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT (and IsChild CanStunDeku) +RC_LW_GS_ABOVE_THEATER (and IsAdult (and (or (and (CanPlantBean RR_LW_BEYOND_MIDO) CanAttack) (and RT_LW_GS_BEAN (and (CanUse RG_HOOKSHOT) (or (CanUse RG_LONGSHOT) (or (CanUse RG_FAIRY_BOW) (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_BOMBCHU_5) (CanUse RG_DINS_FIRE)))))))) CanGetNightTimeGS)) +RC_LW_GS_BEAN_PATCH_NEAR_THEATER (and CanSpawnSoilSkull (or CanAttack (and (== RSK_SHUFFLE_SCRUBS RO_SCRUBS_OFF) CanReflectNuts))) +RC_LW_BOULDER_RUPEE BlastOrSmash +RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1 (and IsChild (and (HasItem RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2 (and IsChild (and (HasItem RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3 (and IsChild (and (HasItem RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_LW_GRASS_4 CanCutShrubs +RC_LW_GRASS_5 CanCutShrubs +RC_LW_GRASS_6 CanCutShrubs +RC_LW_GRASS_7 CanCutShrubs +RC_LW_GRASS_8 CanCutShrubs +RC_LW_GRASS_9 CanCutShrubs +RR_LW_FOREST_EXIT true +RR_THE_LOST_WOODS (or IsChild (CanUse RG_SARIAS_SONG)) +RR_SFM_ENTRYWAY true +RR_DEKU_THEATER true +RR_LW_SCRUBS_GROTTO (Here BlastOrSmash) + +def RR_LW_NEAR_SHORTCUTS_GROTTO SCENE_GROTTOS false +LW Near Shortcuts Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST true +RC_LW_NEAR_SHORTCUTS_GROTTO_FISH HasBottle +RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE true +RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1 CanCutShrubs +RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2 CanCutShrubs +RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3 CanCutShrubs +RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4 CanCutShrubs +RR_THE_LOST_WOODS true + +def RR_DEKU_THEATER SCENE_GROTTOS false +Deku Theater +RC_DEKU_THEATER_SKULL_MASK (and IsChild BorrowSkullMask) +RC_DEKU_THEATER_MASK_OF_TRUTH (and IsChild BorrowRightMasks) +RR_LW_BEYOND_MIDO true + +def RR_LW_SCRUBS_GROTTO SCENE_GROTTOS false +LW Scrubs Grotto +RC_LW_DEKU_SCRUB_GROTTO_REAR CanStunDeku +RC_LW_DEKU_SCRUB_GROTTO_FRONT CanStunDeku +RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE CanBreakUpperBeehives +RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY (CanUse RG_SUNS_SONG) +RR_LW_BEYOND_MIDO true + diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/market.s b/soh/soh/Enhancements/randomizer/logic/overworld/market.s new file mode 100644 index 000000000..8904e1992 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/market.s @@ -0,0 +1,229 @@ +def RR_MARKET_ENTRANCE SCENE_MARKET_ENTRANCE_DAY false RA_THE_MARKET +Market Entrance +RR_HYRULE_FIELD (or IsAdult AtDay) +RR_THE_MARKET true +RR_MARKET_GUARD_HOUSE (CanOpenOverworldDoor RG_GUARD_HOUSE_KEY) + +def RR_THE_MARKET SCENE_MARKET_DAY false RA_THE_MARKET +Market +//RANDOTODO add item avalibility to regions to remove need to hardcode logic in limited item use situations +RC_MARKET_GRASS_1 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MARKET_GRASS_2 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MARKET_GRASS_3 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MARKET_GRASS_4 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MARKET_GRASS_5 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MARKET_GRASS_6 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MARKET_GRASS_7 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MARKET_GRASS_8 (and IsChild (or CanUseSword (HasItem RG_GORONS_BRACELET))) +RC_MK_NEAR_BAZAAR_CRATE_1 IsChild +RC_MK_NEAR_BAZAAR_CRATE_2 IsChild +RC_MK_SHOOTING_GALLERY_CRATE_1 IsChild +RC_MK_SHOOTING_GALLERY_CRATE_2 IsChild +RR_MARKET_ENTRANCE true +RR_TOT_ENTRANCE true +RR_CASTLE_GROUNDS true +RR_MARKET_BAZAAR (and IsChild (and AtDay (CanOpenOverworldDoor RG_MARKET_BAZAAR_KEY))) +RR_MARKET_MASK_SHOP (and IsChild (and AtDay (CanOpenOverworldDoor RG_MASK_SHOP_KEY))) +RR_MARKET_SHOOTING_GALLERY (and IsChild (and AtDay (CanOpenOverworldDoor RG_MARKET_SHOOTING_GALLERY_KEY))) +RR_MARKET_BOMBCHU_BOWLING (and IsChild (CanOpenOverworldDoor RG_BOMBCHU_BOWLING_KEY)) +RR_MARKET_TREASURE_CHEST_GAME (and IsChild (and AtNight (CanOpenOverworldDoor RG_TREASURE_CHEST_GAME_BUILDING_KEY))) +RR_MARKET_POTION_SHOP (and IsChild (and AtDay (CanOpenOverworldDoor RG_MARKET_POTION_SHOP_KEY))) +RR_MARKET_BACK_ALLEY IsChild + +def RR_MARKET_GUARD_HOUSE SCENE_MARKET_GUARD_HOUSE false +Market Guard House +CanEmptyBigPoes IsAdult +RC_MARKET_10_BIG_POES (and IsAdult (or BigPoeKill (>= BigPoes RSK_BIG_POE_COUNT))) +RC_MARKET_GS_GUARD_HOUSE IsChild +RC_MK_GUARD_HOUSE_CHILD_POT_1 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_2 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_3 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_4 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_5 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_6 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_7 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_8 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_9 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_10 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_11 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_12 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_13 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_14 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_15 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_16 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_17 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_18 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_19 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_20 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_21 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_22 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_23 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_24 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_25 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_26 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_27 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_28 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_29 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_30 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_31 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_32 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_33 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_34 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_35 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_36 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_37 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_38 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_39 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_40 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_41 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_42 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_43 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_CHILD_POT_44 (and IsChild CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_1 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_2 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_3 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_4 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_5 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_6 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_7 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_8 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_9 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_10 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_ADULT_POT_11 (and IsAdult CanBreakPots) +RC_MK_GUARD_HOUSE_CRATE_1 (and IsChild CanBreakCrates) +RC_MK_GUARD_HOUSE_CRATE_2 (and IsChild CanBreakCrates) +RC_MK_GUARD_HOUSE_CRATE_3 (and IsChild CanBreakCrates) +RC_MK_GUARD_HOUSE_CRATE_4 (and IsChild CanBreakCrates) +RC_MK_GUARD_HOUSE_CRATE_5 (and IsChild CanBreakCrates) +RR_MARKET_ENTRANCE true + +def RR_MARKET_BAZAAR SCENE_BAZAAR false +Market Bazaar +RC_MARKET_BAZAAR_ITEM_1 true +RC_MARKET_BAZAAR_ITEM_2 true +RC_MARKET_BAZAAR_ITEM_3 true +RC_MARKET_BAZAAR_ITEM_4 true +RC_MARKET_BAZAAR_ITEM_5 true +RC_MARKET_BAZAAR_ITEM_6 true +RC_MARKET_BAZAAR_ITEM_7 true +RC_MARKET_BAZAAR_ITEM_8 true +RR_THE_MARKET true + +def RR_MARKET_MASK_SHOP SCENE_HAPPY_MASK_SHOP false +Market Mask Shop +//Currently, mask swap in menu doesn't need access to the mask shop +//If it is forced on/a setting, a copy of these events should be added to root +//it also doesn't need you to open kak gate, but that might be best treated as a bug +CanBorrowMasks (and (HasItem RG_ZELDAS_LETTER) KakarikoVillageGateOpen) +BorrowSkullMask (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) +BorrowSpookyMask (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) +BorrowBunnyHood (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) +BorrowRightMasks (and RSK_COMPLETE_MASK_QUEST CanBorrowMasks) +RC_MASK_SHOP_HINT true +RR_THE_MARKET true + +def RR_MARKET_SHOOTING_GALLERY SCENE_SHOOTING_GALLERY false +Market Shooting Gallery +RC_MARKET_SHOOTING_GALLERY_REWARD (and IsChild (HasItem RG_CHILD_WALLET)) +RR_THE_MARKET true + +def RR_MARKET_BOMBCHU_BOWLING SCENE_BOMBCHU_BOWLING_ALLEY false +Market Bombchu Bowling +CouldPlayBowling (HasItem RG_CHILD_WALLET) +RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE (and CouldPlayBowling BombchusEnabled) +RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE (and CouldPlayBowling BombchusEnabled) +RR_THE_MARKET true + +def RR_MARKET_TREASURE_CHEST_GAME SCENE_TREASURE_BOX_SHOP false +Market Treasure Chest Game +RC_GREG_HINT (HasItem RG_CHILD_WALLET) +RC_MARKET_TREASURE_CHEST_GAME_REWARD (and (HasItem RG_CHILD_WALLET) (or (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 6)) (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1))))) +RC_MARKET_TREASURE_CHEST_GAME_KEY_1 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_ITEM_1 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_KEY_2 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 2)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_ITEM_2 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 2)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_KEY_3 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 3)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_ITEM_3 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 3)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_KEY_4 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 4)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_ITEM_4 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 4)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_KEY_5 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 5)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RC_MARKET_TREASURE_CHEST_GAME_ITEM_5 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 5)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys RR_MARKET_TREASURE_CHEST_GAME 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +RR_THE_MARKET true + +def RR_MARKET_POTION_SHOP SCENE_POTION_SHOP_MARKET false +Market Potion Shop +RC_MARKET_POTION_SHOP_ITEM_1 true +RC_MARKET_POTION_SHOP_ITEM_2 true +RC_MARKET_POTION_SHOP_ITEM_3 true +RC_MARKET_POTION_SHOP_ITEM_4 true +RC_MARKET_POTION_SHOP_ITEM_5 true +RC_MARKET_POTION_SHOP_ITEM_6 true +RC_MARKET_POTION_SHOP_ITEM_7 true +RC_MARKET_POTION_SHOP_ITEM_8 true +RR_THE_MARKET true + +def RR_MARKET_BACK_ALLEY SCENE_BACK_ALLEY_DAY false RA_THE_MARKET +Market Back Alley +RR_THE_MARKET true +RR_MARKET_BOMBCHU_SHOP (and AtNight (CanOpenOverworldDoor RG_BOMBCHU_SHOP_KEY)) +RR_MARKET_DOG_LADY_HOUSE (CanOpenOverworldDoor RG_RICHARDS_HOUSE_KEY) +RR_MARKET_MAN_IN_GREEN_HOUSE (and AtNight (CanOpenOverworldDoor RG_ALLEY_HOUSE_KEY)) + +def RR_MARKET_BOMBCHU_SHOP SCENE_BOMBCHU_SHOP false +Market Bombchu Shop +RC_MARKET_BOMBCHU_SHOP_ITEM_1 true +RC_MARKET_BOMBCHU_SHOP_ITEM_2 true +RC_MARKET_BOMBCHU_SHOP_ITEM_3 true +RC_MARKET_BOMBCHU_SHOP_ITEM_4 true +RC_MARKET_BOMBCHU_SHOP_ITEM_5 true +RC_MARKET_BOMBCHU_SHOP_ITEM_6 true +RC_MARKET_BOMBCHU_SHOP_ITEM_7 true +RC_MARKET_BOMBCHU_SHOP_ITEM_8 true +RR_MARKET_BACK_ALLEY true + +def RR_MARKET_DOG_LADY_HOUSE SCENE_DOG_LADY_HOUSE false +Market Dog Lady House +RC_MARKET_LOST_DOG (and IsChild AtNight) +RC_MK_LOST_DOG_HOUSE_CRATE CanBreakCrates +RR_MARKET_BACK_ALLEY true + +def RR_MARKET_MAN_IN_GREEN_HOUSE SCENE_BACK_ALLEY_HOUSE false +Market Man in Green House +RC_MK_BACK_ALLEY_HOUSE_POT_1 CanBreakPots +RC_MK_BACK_ALLEY_HOUSE_POT_2 CanBreakPots +RC_MK_BACK_ALLEY_HOUSE_POT_3 CanBreakPots +RR_MARKET_BACK_ALLEY true + +def RR_TOT_ENTRANCE SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY false RA_THE_MARKET +ToT Entrance +GossipStoneFairy CallGossipFairyExceptSuns +RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) +RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) +RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) +RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY (or CallGossipFairyExceptSuns (and (CanUse RG_SUNS_SONG) IsAdult)) +RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_TOT_LEFTMOST_GOSSIP_STONE true +RC_TOT_LEFT_CENTER_GOSSIP_STONE true +RC_TOT_RIGHT_CENTER_GOSSIP_STONE true +RC_TOT_RIGHTMOST_GOSSIP_STONE true +RR_THE_MARKET true +RR_TEMPLE_OF_TIME true + +def RR_TEMPLE_OF_TIME SCENE_TEMPLE_OF_TIME false RA_TEMPLE_OF_TIME +Temple of Time +RC_TOT_LIGHT_ARROWS_CUTSCENE (and IsAdult CanTriggerLACS) +RC_ALTAR_HINT_CHILD IsChild +RC_ALTAR_HINT_ADULT IsAdult +RC_TOT_SHEIK_HINT IsAdult +RR_TOT_ENTRANCE true +RR_TOT_BEYOND_DOOR_OF_TIME (or (== RSK_DOOR_OF_TIME RO_DOOROFTIME_OPEN) (and (CanUse RG_SONG_OF_TIME) (or (== RSK_DOOR_OF_TIME RO_DOOROFTIME_SONGONLY) (and (== StoneCount 3) (HasItem RG_OCARINA_OF_TIME))))) + +def RR_TOT_BEYOND_DOOR_OF_TIME SCENE_TEMPLE_OF_TIME false RA_TEMPLE_OF_TIME +Beyond Door of Time +RC_TOT_MASTER_SWORD IsAdult +RC_GIFT_FROM_RAURU IsAdult +RC_SHEIK_AT_TEMPLE (and (HasItem RG_FOREST_MEDALLION) IsAdult) +RR_TEMPLE_OF_TIME true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/sacred_forest_meadow.s b/soh/soh/Enhancements/randomizer/logic/overworld/sacred_forest_meadow.s new file mode 100644 index 000000000..2288323b2 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/sacred_forest_meadow.s @@ -0,0 +1,50 @@ +def RR_SFM_ENTRYWAY SCENE_SACRED_FOREST_MEADOW false RA_SACRED_FOREST_MEADOW +SFM Entryway +RR_LW_BEYOND_MIDO true +RR_SACRED_FOREST_MEADOW (or IsAdult (CanKillEnemy RE_WOLFOS)) +RR_SFM_WOLFOS_GROTTO CanOpenBombGrotto + +def RR_SACRED_FOREST_MEADOW SCENE_SACRED_FOREST_MEADOW false RA_SACRED_FOREST_MEADOW +Sacred Forest Meadow +GossipStoneFairy CallGossipFairyExceptSuns +RC_SONG_FROM_SARIA (and IsChild (HasItem RG_ZELDAS_LETTER)) +RC_SHEIK_IN_FOREST IsAdult +RC_SFM_GS (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_SFM_SARIA_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_SFM_MAZE_LOWER_GOSSIP_STONE true +RC_SFM_MAZE_UPPER_GOSSIP_STONE true +RC_SFM_SARIA_GOSSIP_STONE true +RR_SFM_ENTRYWAY true +RR_FOREST_TEMPLE_ENTRYWAY (CanUse RG_HOOKSHOT) +RR_SFM_FAIRY_GROTTO true +RR_SFM_STORMS_GROTTO CanOpenStormsGrotto + +def RR_SFM_WOLFOS_GROTTO SCENE_GROTTOS false +SFM Wolfos Grotto +RC_SFM_WOLFOS_GROTTO_CHEST (CanKillEnemy RE_WOLFOS ED_CLOSE true 2) +RR_SFM_ENTRYWAY true + +def RR_SFM_FAIRY_GROTTO SCENE_GROTTOS false +SFM Fairy Grotto +FreeFairies true +RC_SFM_FAIRY_GROTTO_FAIRY_1 true +RC_SFM_FAIRY_GROTTO_FAIRY_2 true +RC_SFM_FAIRY_GROTTO_FAIRY_3 true +RC_SFM_FAIRY_GROTTO_FAIRY_4 true +RC_SFM_FAIRY_GROTTO_FAIRY_5 true +RC_SFM_FAIRY_GROTTO_FAIRY_6 true +RC_SFM_FAIRY_GROTTO_FAIRY_7 true +RC_SFM_FAIRY_GROTTO_FAIRY_8 true +RR_SACRED_FOREST_MEADOW true + +def RR_SFM_STORMS_GROTTO SCENE_GROTTOS false +SFM Storms Grotto +RC_SFM_DEKU_SCRUB_GROTTO_REAR CanStunDeku +RC_SFM_DEKU_SCRUB_GROTTO_FRONT CanStunDeku +RC_SFM_STORMS_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_SACRED_FOREST_MEADOW true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/thieves_hideout.s b/soh/soh/Enhancements/randomizer/logic/overworld/thieves_hideout.s new file mode 100644 index 000000000..a2d2cd132 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/thieves_hideout.s @@ -0,0 +1,94 @@ +def RR_TH_1_TORCH_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout 1 Torch Cell +THCouldFree1TorchCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) +THRescuedAllCarpenters (and (SmallKeys RR_GF_OUTSKIRTS (if (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) 4 1)) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter)))) +RC_TH_1_TORCH_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) +RC_TH_1_TORCH_CELL_RIGHT_POT CanBreakPots +RC_TH_1_TORCH_CELL_MID_POT CanBreakPots +RC_TH_1_TORCH_CELL_LEFT_POT CanBreakPots +RC_TH_1_TORCH_CELL_CRATE CanBreakCrates +RC_TH_FREED_CARPENTERS THRescuedAllCarpenters +RR_GF_OUTSKIRTS true +RR_GF_NEAR_GROTTO true + +def RR_TH_DOUBLE_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Double Cell +THCouldFreeDoubleCellCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) +THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys RR_GF_OUTSKIRTS 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) +RC_TH_DOUBLE_CELL_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) +RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT CanBreakPots +RC_TH_NEAR_DOUBLE_CELL_MID_POT CanBreakPots +RC_TH_NEAR_DOUBLE_CELL_LEFT_POT CanBreakPots +RC_TH_RIGHTMOST_JAILED_POT CanBreakPots +RC_TH_RIGHT_MIDDLE_JAILED_POT CanBreakPots +RC_TH_LEFT_MIDDLE_JAILED_POT CanBreakPots +RC_TH_LEFTMOST_JAILED_POT CanBreakPots +RC_TH_DOUBLE_CELL_LEFT_CRATE CanBreakCrates +RC_TH_DOUBLE_CELL_RIGHT_CRATE CanBreakCrates +RC_TH_FREED_CARPENTERS THRescuedAllCarpenters +RR_GF_OUTSKIRTS true +RR_GF_NEAR_GROTTO true + +def RR_TH_DEAD_END_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Dead End Cell +TH_CouldFreeDeadEndCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) +THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys RR_GF_OUTSKIRTS 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) +RC_TH_DEAD_END_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) +RC_TH_DEAD_END_CELL_CRATE CanBreakCrates +RC_TH_FREED_CARPENTERS THRescuedAllCarpenters +RR_GF_BELOW_GS true + +def RR_TH_STEEP_SLOPE_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Steep Slope Cell +THCouldRescueSlopeCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) +THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys RR_GF_OUTSKIRTS 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) +RC_TH_STEEP_SLOPE_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) +RC_TH_STEEP_SLOPE_RIGHT_POT CanBreakPots +RC_TH_STEEP_SLOPE_LEFT_POT CanBreakPots +RC_TH_FREED_CARPENTERS THRescuedAllCarpenters +RR_GF_ABOVE_GTG true +RR_GF_TOP_OF_LOWER_VINES true + +def RR_TH_KITCHEN_CORRIDOR SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Kitchen Corridor +RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE CanBreakCrates +RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE CanBreakCrates +RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE CanBreakCrates +RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE CanBreakCrates +RR_GF_NEAR_GROTTO true +RR_GF_ABOVE_GTG true +RR_TH_KITCHEN_MAIN (CanPassEnemy RE_GERUDO_GUARD) + +def RR_TH_KITCHEN_MAIN SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Kitchen Bottom +RC_TH_KITCHEN_POT_1 (and CanBreakPots (CanPassEnemy RE_GERUDO_GUARD)) +RC_TH_KITCHEN_POT_2 (and CanBreakPots (CanPassEnemy RE_GERUDO_GUARD)) +RC_TH_KITCHEN_CRATE (and CanBreakCrates (CanPassEnemy RE_GERUDO_GUARD)) +RC_TH_KITCHEN_SUN_FAIRY (and (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_SUNS_SONG)) +RR_TH_KITCHEN_CORRIDOR (CanPassEnemy RE_GERUDO_GUARD) +RR_TH_KITCHEN_TOP (CanPassEnemy RE_GERUDO_GUARD) + +def RR_TH_KITCHEN_TOP SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Kitchen Top +RC_TH_KITCHEN_POT_1 (CanUse RG_BOOMERANG) +RC_TH_KITCHEN_POT_2 (CanUse RG_BOOMERANG) +RR_TH_KITCHEN_MAIN true +RR_GF_NEAR_GS (or (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_HOVER_BOOTS)) +RR_GF_TOP_OF_LOWER_VINES (or (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_HOVER_BOOTS)) + +def RR_TH_BREAK_ROOM SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Break Room +RC_TH_BREAK_ROOM_FRONT_POT (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakPots) (and (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_BOOMERANG))) +RC_TH_BREAK_ROOM_BACK_POT (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakPots) (and (CanPassEnemy RE_GERUDO_GUARD) (CanUse RG_BOOMERANG))) +RC_TH_BREAK_HALLWAY_OUTER_CRATE CanBreakCrates +RC_TH_BREAK_HALLWAY_INNER_CRATE CanBreakCrates +RC_TH_BREAK_ROOM_RIGHT_CRATE (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakCrates) (and (CanPassEnemy RE_GERUDO_GUARD) (and HasExplosives (CanUse RG_BOOMERANG)))) +RC_TH_BREAK_ROOM_LEFT_CRATE (or (and (CanPassEnemy RE_BREAK_ROOM_GUARD) CanBreakCrates) (and (CanPassEnemy RE_GERUDO_GUARD) (and HasExplosives (CanUse RG_BOOMERANG)))) +RR_GF_BELOW_CHEST (CanPassEnemy RE_GERUDO_GUARD) +//Implies logic->CanPassEnemy(RE_GERUDO_GUARD) +RR_TH_BREAK_ROOM_CORRIDOR (CanUse RG_HOOKSHOT) + +def RR_TH_BREAK_ROOM_CORRIDOR SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS +Thieves Hideout Break Room +RR_TH_BREAK_ROOM (CanUse RG_HOOKSHOT) +RR_GF_ABOVE_JAIL true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/zoras_domain.s b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_domain.s new file mode 100644 index 000000000..6f04b77a4 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_domain.s @@ -0,0 +1,70 @@ +def RR_ZORAS_DOMAIN SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN +Zoras Domain +GossipStoneFairy CallGossipFairyExceptSuns +NutPot true +StickPot IsChild +FishGroup IsChild +KingZoraThawed (and IsAdult BlueFire) +DeliverLetter (and (CanUse RG_RUTOS_LETTER) (and IsChild (!= RSK_ZORAS_FOUNTAIN RO_ZF_OPEN))) +RC_ZD_DIVING_MINIGAME (and (HasItem RG_BRONZE_SCALE) (and (HasItem RG_CHILD_WALLET) IsChild)) +RC_ZD_CHEST (and IsChild (CanUse RG_STICKS)) +RC_ZD_KING_ZORA_THAWED (and IsAdult KingZoraThawed) +RC_ZD_TRADE_PRESCRIPTION (and IsAdult (and KingZoraThawed (CanUse RG_PRESCRIPTION))) +RC_ZD_GS_FROZEN_WATERFALL (and IsAdult (and (or HookshotOrBoomerang (or (CanUse RG_FAIRY_SLINGSHOT) (or (CanUse RG_FAIRY_BOW) (or (and (CanUse RG_MAGIC_SINGLE) (or (CanUse RG_MASTER_SWORD) (or (CanUse RG_KOKIRI_SWORD) (CanUse RG_BIGGORON_SWORD)))) (and RT_ZD_GS CanJumpslashExceptHammer))))) CanGetNightTimeGS)) +RC_ZD_FISH_1 (and IsChild HasBottle) +RC_ZD_FISH_2 (and IsChild HasBottle) +RC_ZD_FISH_3 (and IsChild HasBottle) +RC_ZD_FISH_4 (and IsChild HasBottle) +RC_ZD_FISH_5 (and IsChild HasBottle) +RC_ZD_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_ZD_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_ZD_GOSSIP_STONE true +RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT (and IsChild CanBreakUpperBeehives) +RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT (and IsChild CanBreakUpperBeehives) +RC_ZD_NEAR_SHOP_POT_1 CanBreakPots +RC_ZD_NEAR_SHOP_POT_2 CanBreakPots +RC_ZD_NEAR_SHOP_POT_3 CanBreakPots +RC_ZD_NEAR_SHOP_POT_4 CanBreakPots +RC_ZD_NEAR_SHOP_POT_5 CanBreakPots +RR_ZR_BEHIND_WATERFALL true +RR_LH_FROM_SHORTCUT (and IsChild (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS))) +RR_ZD_BEHIND_KING_ZORA (or DeliverLetter (or (== RSK_ZORAS_FOUNTAIN RO_ZF_OPEN) (or (and (== RSK_ZORAS_FOUNTAIN RO_ZF_CLOSED_CHILD) IsAdult) (and RT_ZD_KING_ZORA_SKIP IsAdult)))) +RR_ZD_SHOP (or IsChild BlueFire) +RR_ZORAS_DOMAIN_ISLAND true + +def RR_ZORAS_DOMAIN_ISLAND SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN +Zoras Domain Island +RR_ZORAS_DOMAIN (or IsAdult (HasItem RG_BRONZE_SCALE)) +RR_ZD_STORMS_GROTTO CanOpenStormsGrotto + +def RR_ZD_BEHIND_KING_ZORA SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN +ZD Behind King Zora +KingZoraThawed (and IsAdult BlueFire) +RC_ZD_BEHIND_KING_ZORA_BEEHIVE (and IsChild CanBreakUpperBeehives) +RR_ZORAS_DOMAIN (or DeliverLetter (or (== RSK_ZORAS_FOUNTAIN RO_ZF_OPEN) (and (== RSK_ZORAS_FOUNTAIN RO_ZF_CLOSED_CHILD) IsAdult))) +RR_ZORAS_FOUNTAIN true + +def RR_ZD_SHOP SCENE_ZORA_SHOP false +ZD Shop +RC_ZD_SHOP_ITEM_1 true +RC_ZD_SHOP_ITEM_2 true +RC_ZD_SHOP_ITEM_3 true +RC_ZD_SHOP_ITEM_4 true +RC_ZD_SHOP_ITEM_5 true +RC_ZD_SHOP_ITEM_6 true +RC_ZD_SHOP_ITEM_7 true +RC_ZD_SHOP_ITEM_8 true +RR_ZORAS_DOMAIN true + +def RR_ZD_STORMS_GROTTO SCENE_GROTTOS false +ZD Storms Grotto +FreeFairies true +RC_ZD_FAIRY_GROTTO_FAIRY_1 true +RC_ZD_FAIRY_GROTTO_FAIRY_2 true +RC_ZD_FAIRY_GROTTO_FAIRY_3 true +RC_ZD_FAIRY_GROTTO_FAIRY_4 true +RC_ZD_FAIRY_GROTTO_FAIRY_5 true +RC_ZD_FAIRY_GROTTO_FAIRY_6 true +RC_ZD_FAIRY_GROTTO_FAIRY_7 true +RC_ZD_FAIRY_GROTTO_FAIRY_8 true +RR_ZORAS_DOMAIN_ISLAND true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/zoras_fountain.s b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_fountain.s new file mode 100644 index 000000000..875cd435e --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_fountain.s @@ -0,0 +1,87 @@ +def RR_ZORAS_FOUNTAIN SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN +Zoras Fountain +GossipStoneFairy CallGossipFairyExceptSuns +ButterflyFairy (and (CanUse RG_STICKS) AtDay) +RC_ZF_GS_TREE IsChild +RC_ZF_GS_ABOVE_THE_LOG (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_ZF_FAIRY_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_ZF_JABU_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns +RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_ZF_FAIRY_GOSSIP_STONE true +RC_ZF_JABU_GOSSIP_STONE true +RC_ZF_NEAR_JABU_POT_1 (and IsChild CanBreakPots) +RC_ZF_NEAR_JABU_POT_2 (and IsChild CanBreakPots) +RC_ZF_NEAR_JABU_POT_3 (and IsChild CanBreakPots) +RC_ZF_NEAR_JABU_POT_4 (and IsChild CanBreakPots) +RR_ZD_BEHIND_KING_ZORA true +RR_ZF_ICEBERGS IsAdult +RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) +//child can break the brown rock without lifting the silver rock and it stays gone for adult, but it's not intuitive and there's no reasonable case where it matters. +RR_ZF_HIDDEN_CAVE (and (CanUse RG_SILVER_GAUNTLETS) BlastOrSmash) +RR_ZF_ROCK (and IsAdult (CanUse RG_SCARECROW)) +RR_JABU_JABUS_BELLY_ENTRYWAY (and IsChild (or (== RSK_JABU_OPEN RO_JABU_OPEN) (CanUse RG_BOTTLE_WITH_FISH))) +RR_ZF_GREAT_FAIRY_FOUNTAIN (or HasExplosives (and RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_SILVER_GAUNTLETS)))) + +def RR_ZF_ICEBERGS SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN +ZF Icebergs +RC_ZF_ICEBERG_FREESTANDING_POH IsAdult +RR_ZORAS_FOUNTAIN (or (HasItem RG_BRONZE_SCALE) (CanUse RG_HOVER_BOOTS)) +RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) +RR_ZF_LEDGE true + +def RR_ZF_LAKEBED SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN +ZF Lakebed +RC_ZF_BOTTOM_FREESTANDING_POH (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTH_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTH_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTH_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16))) +RR_ZORAS_FOUNTAIN (HasItem RG_BRONZE_SCALE) + +def RR_ZF_LEDGE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN +ZF Ledge +RR_ZORAS_FOUNTAIN (HasItem RG_BRONZE_SCALE) +RR_ZF_ICEBERGS IsAdult +RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) +RR_ICE_CAVERN_ENTRYWAY true + +def RR_ZF_HIDDEN_CAVE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN +ZF Hidden Cave +RC_ZF_HIDDEN_CAVE_POT_1 (and IsAdult CanBreakPots) +RC_ZF_HIDDEN_CAVE_POT_2 (and IsAdult CanBreakPots) +RC_ZF_HIDDEN_CAVE_POT_3 (and IsAdult CanBreakPots) +//There are invisible big skultullas here as adult but they do not block the path and can be "seen" with Z-target +//Lens is not currently needed for this either, implying they are not considered blocking, but it's open for discussion long-term +RR_ZF_HIDDEN_LEDGE true + +def RR_ZF_HIDDEN_LEDGE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN +ZF Hidden Ledge +RC_ZF_GS_HIDDEN_CAVE (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOMB_THROW) CanGetNightTimeGS)) +//It is possible to avoid fall damage by jumping towards the right and landing in deeper water, but this is basically never relevent +RR_ZORAS_FOUNTAIN (or (HasItem RG_BRONZE_SCALE) TakeDamage) +RR_ZF_HIDDEN_CAVE true + +def RR_ZF_ROCK SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN +ZF Rock +//Has a wonder item +RR_ZORAS_FOUNTAIN true + +def RR_ZF_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false +ZF Great Fairy Fountain +RC_ZF_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +RR_ZORAS_FOUNTAIN true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/zoras_river.s b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_river.s new file mode 100644 index 000000000..4b45836ab --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_river.s @@ -0,0 +1,106 @@ +def RR_ZR_FRONT SCENE_ZORAS_RIVER true RA_ZORAS_RIVER +ZR Front +RC_ZR_GS_TREE (and IsChild (CanKillEnemy RE_GOLD_SKULLTULA ED_CLOSE)) +RC_ZR_GRASS_1 CanCutShrubs +RC_ZR_GRASS_2 CanCutShrubs +RC_ZR_GRASS_3 CanCutShrubs +RC_ZR_GRASS_4 CanCutShrubs +RC_ZR_GRASS_5 CanCutShrubs +RC_ZR_GRASS_6 CanCutShrubs +RC_ZR_GRASS_7 CanCutShrubs +RC_ZR_GRASS_8 CanCutShrubs +RC_ZR_GRASS_9 CanCutShrubs +RC_ZR_GRASS_10 CanCutShrubs +RC_ZR_GRASS_11 CanCutShrubs +RC_ZR_GRASS_12 CanCutShrubs +RR_ZORAS_RIVER (or IsAdult BlastOrSmash) +RR_HYRULE_FIELD true + +def RR_ZORAS_RIVER SCENE_ZORAS_RIVER true RA_ZORAS_RIVER +Zora River +GossipStoneFairy CallGossipFairy +BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +RC_ZR_MAGIC_BEAN_SALESMAN (and (HasItem RG_CHILD_WALLET) IsChild) +RC_ZR_FROGS_OCARINA_GAME (and IsChild (and (CanUse RG_ZELDAS_LULLABY) (and (CanUse RG_SARIAS_SONG) (and (CanUse RG_SUNS_SONG) (and (CanUse RG_EPONAS_SONG) (and (CanUse RG_SONG_OF_TIME) (CanUse RG_SONG_OF_STORMS))))))) +RC_ZR_FROGS_IN_THE_RAIN (and IsChild (CanUse RG_SONG_OF_STORMS)) +RC_ZR_FROGS_ZELDAS_LULLABY (and IsChild (CanUse RG_ZELDAS_LULLABY)) +RC_ZR_FROGS_EPONAS_SONG (and IsChild (CanUse RG_EPONAS_SONG)) +RC_ZR_FROGS_SARIAS_SONG (and IsChild (CanUse RG_SARIAS_SONG)) +RC_ZR_FROGS_SUNS_SONG (and IsChild (CanUse RG_SUNS_SONG)) +RC_ZR_FROGS_SONG_OF_TIME (and IsChild (CanUse RG_SONG_OF_TIME)) +RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH (or IsChild (or (CanUse RG_HOVER_BOOTS) (and IsAdult RT_ZR_LOWER))) +RC_ZR_NEAR_DOMAIN_FREESTANDING_POH (or IsChild (or (CanUse RG_HOVER_BOOTS) (and IsAdult RT_ZR_UPPER))) +RC_ZR_GS_LADDER (and IsChild (and CanAttack CanGetNightTimeGS)) +RC_ZR_GS_NEAR_RAISED_GROTTOS (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) +RC_ZR_GS_ABOVE_BRIDGE (and IsAdult (and (CanUse RG_HOOKSHOT) CanGetNightTimeGS)) +RC_ZR_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_ZR_BEAN_SPROUT_FAIRY_2 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_ZR_BEAN_SPROUT_FAIRY_3 (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) +RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY CallGossipFairy +RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY CallGossipFairy +RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) +RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) +RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) +RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG_IRON_BOOTS) (CanUse RG_BOOMERANG)))) +RC_ZR_NEAR_GROTTOS_GOSSIP_STONE true +RC_ZR_NEAR_DOMAIN_GOSSIP_STONE true +RC_ZR_NEAR_FREESTANDING_POH_GRASS CanCutShrubs +RR_ZR_FRONT true +RR_ZR_OPEN_GROTTO true +RR_ZR_FAIRY_GROTTO (Here BlastOrSmash) +RR_THE_LOST_WOODS (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS)) +RR_ZR_STORMS_GROTTO CanOpenStormsGrotto +RR_ZR_BEHIND_WATERFALL (or (== RSK_SLEEPING_WATERFALL RO_WATERFALL_OPEN) (or (Here (CanUse RG_ZELDAS_LULLABY)) (or (and IsChild RT_ZR_CUCCO) (and IsAdult (and (CanUse RG_HOVER_BOOTS) RT_ZR_HOVERS))))) + +def RR_ZR_FROM_SHORTCUT SCENE_ZORAS_RIVER false RA_ZORAS_RIVER +ZR From Shortcut +RR_ZORAS_RIVER (or (> Hearts 1) (or (HasItem RG_BOTTLE_WITH_FAIRY) (HasItem RG_BRONZE_SCALE))) +RR_THE_LOST_WOODS (or (HasItem RG_SILVER_SCALE) (CanUse RG_IRON_BOOTS)) + +def RR_ZR_BEHIND_WATERFALL SCENE_ZORAS_RIVER true RA_ZORAS_RIVER +ZR Behind Waterfall +RR_ZORAS_RIVER true +RR_ZORAS_DOMAIN true + +def RR_ZR_OPEN_GROTTO SCENE_GROTTOS false +ZR Open Grotto +GossipStoneFairy CallGossipFairy +ButterflyFairy (CanUse RG_STICKS) +BugShrub CanCutShrubs +LoneFish true +RC_ZR_OPEN_GROTTO_CHEST true +RC_ZR_OPEN_GROTTO_FISH HasBottle +RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy +RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) +RC_ZR_OPEN_GROTTO_GOSSIP_STONE true +RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT CanBreakLowerBeehives +RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT CanBreakLowerBeehives +RC_ZR_OPEN_GROTTO_GRASS_1 CanCutShrubs +RC_ZR_OPEN_GROTTO_GRASS_2 CanCutShrubs +RC_ZR_OPEN_GROTTO_GRASS_3 CanCutShrubs +RC_ZR_OPEN_GROTTO_GRASS_4 CanCutShrubs +RR_ZORAS_RIVER true + +def RR_ZR_FAIRY_GROTTO SCENE_GROTTOS false +ZR Fairy Grotto +FreeFairies true +RC_ZR_FAIRY_GROTTO_FAIRY_1 true +RC_ZR_FAIRY_GROTTO_FAIRY_2 true +RC_ZR_FAIRY_GROTTO_FAIRY_3 true +RC_ZR_FAIRY_GROTTO_FAIRY_4 true +RC_ZR_FAIRY_GROTTO_FAIRY_5 true +RC_ZR_FAIRY_GROTTO_FAIRY_6 true +RC_ZR_FAIRY_GROTTO_FAIRY_7 true +RC_ZR_FAIRY_GROTTO_FAIRY_8 true +RR_ZORAS_RIVER true + +def RR_ZR_STORMS_GROTTO SCENE_GROTTOS false +ZR Storms Grotto +RC_ZR_DEKU_SCRUB_GROTTO_REAR CanStunDeku +RC_ZR_DEKU_SCRUB_GROTTO_FRONT CanStunDeku +RC_ZR_STORMS_GROTTO_BEEHIVE CanBreakUpperBeehives +RR_ZORAS_RIVER true diff --git a/soh/soh/Enhancements/randomizer/logic/root.s b/soh/soh/Enhancements/randomizer/logic/root.s new file mode 100644 index 000000000..c5ed16af3 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/logic/root.s @@ -0,0 +1,55 @@ +def RR_ROOT SCENE_ID_MAX false RA_LINKS_POCKET +Root +KakarikoVillageGateOpen (== RSK_KAK_GATE RO_KAK_GATE_OPEN) +THCouldFree1TorchCarpenter (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) +THCouldFreeDoubleCellCarpenter (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FAST)) +TH_CouldFreeDeadEndCarpenter (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FAST)) +THCouldRescueSlopeCarpenter (or (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FAST)) +THRescuedAllCarpenters (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_FREE) +RC_LINKS_POCKET true +RC_TRIFORCE_COMPLETED (>= TriforcePiecesCollected (add RSK_TRIFORCE_HUNT_PIECES_REQUIRED 1)) +RC_SARIA_SONG_HINT (CanUse RG_SARIAS_SONG) +RR_ROOT_EXITS true + +def RR_ROOT_EXITS SCENE_ID_MAX false RA_LINKS_POCKET +Root Exits +RR_CHILD_SPAWN IsChild +RR_ADULT_SPAWN IsAdult +RR_MINUET_OF_FOREST_WARP (CanUse RG_MINUET_OF_FOREST) +RR_BOLERO_OF_FIRE_WARP (CanUse RG_BOLERO_OF_FIRE) +RR_SERENADE_OF_WATER_WARP (CanUse RG_SERENADE_OF_WATER) +RR_NOCTURNE_OF_SHADOW_WARP (CanUse RG_NOCTURNE_OF_SHADOW) +RR_REQUIEM_OF_SPIRIT_WARP (CanUse RG_REQUIEM_OF_SPIRIT) +RR_PRELUDE_OF_LIGHT_WARP (CanUse RG_PRELUDE_OF_LIGHT) + +def RR_CHILD_SPAWN SCENE_ID_MAX false RA_LINKS_POCKET +Child Spawn +RR_KF_LINKS_HOUSE true + +def RR_ADULT_SPAWN SCENE_ID_MAX false RA_LINKS_POCKET +Adult Spawn +RR_TEMPLE_OF_TIME true + +def RR_MINUET_OF_FOREST_WARP SCENE_ID_MAX false RA_LINKS_POCKET +Minuet of Forest Warp +RR_SACRED_FOREST_MEADOW true + +def RR_BOLERO_OF_FIRE_WARP SCENE_ID_MAX false RA_LINKS_POCKET +Bolero of Fire Warp +RR_DMC_CENTRAL_LOCAL true + +def RR_SERENADE_OF_WATER_WARP SCENE_ID_MAX false RA_LINKS_POCKET +Serenade of Water Warp +RR_LAKE_HYLIA true + +def RR_REQUIEM_OF_SPIRIT_WARP SCENE_ID_MAX false RA_LINKS_POCKET +Requiem of Spirit Warp +RR_DESERT_COLOSSUS true + +def RR_NOCTURNE_OF_SHADOW_WARP SCENE_ID_MAX false RA_LINKS_POCKET +Nocturne of Shadow Warp +RR_GRAVEYARD_WARP_PAD_REGION true + +def RR_PRELUDE_OF_LIGHT_WARP SCENE_ID_MAX false RA_LINKS_POCKET +Prelude of Light Warp +RR_TEMPLE_OF_TIME true