diff --git a/soh/compile_logic.py b/soh/compile_logic.py index c992cb766..1ff4236fd 100755 --- a/soh/compile_logic.py +++ b/soh/compile_logic.py @@ -150,10 +150,12 @@ void RegionTable_Init_Generated() { elif f != "//": if len(ast) != 1: print("expected atom, got tree", ast) + assert false elif f.isupper() or f.isdigit() or f in ("true", "false"): output(f) else: print("invalid atom", f) + assert false return "".join(result) class RR: @@ -202,7 +204,6 @@ LOGIC = { "IsAdult", "AtDay", "AtNight", - "LoweredWaterInBotw", "BigPoes", } @@ -317,6 +318,7 @@ def main(): if line.startswith("def "): if pcount != 0: print("error parsing", line) + assert false defline = line.split() active_rr = RR(*defline[1:]) RRs.append(active_rr) @@ -339,6 +341,7 @@ def main(): thing, code = buf.split(None, 1) except: print("failed to parse line", repr(buf)) + assert false continue if thing.startswith("RR_"): active_rr.exits.append((thing, parse(code))) diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 489b7d877..d4c1dd40f 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -2287,7 +2287,6 @@ void Logic::Reset(bool resetSaveContext /*= true*/) { // Adult logic FreedEpona = false; - // BigPoe = false; // Trade Quest Events WakeUpAdultTalon = false; 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 index 1c0359142..c3ed37f9a 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/bottom_of_the_well.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/bottom_of_the_well.s @@ -1,5 +1,6 @@ def RR_BOTTOM_OF_THE_WELL_ENTRYWAY SCENE_BOTTOM_OF_THE_WELL false RA_BOTTOM_OF_THE_WELL Bottom of the Well Entryway +//Exits 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 @@ -7,15 +8,18 @@ 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 +//Events StickPot true NutPot true LoweredWaterInsideBotw (CanUse RG_ZELDAS_LULLABY) +//Checks 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)) +//Exits 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)) @@ -29,6 +33,7 @@ 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 +//Checks 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 @@ -36,6 +41,7 @@ RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST true 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 +//Exits RR_BOTTOM_OF_THE_WELL_PERIMETER (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUTH)) RR_BOTTOM_OF_THE_WELL_INNER_ROOMS (SmallKeys SCENE_BOTTOM_OF_THE_WELL 3) RR_BOTTOM_OF_THE_WELL_BASEMENT true @@ -44,16 +50,20 @@ RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM (or RT_LENS_BOTW (CanUse RG_LENS_OF_TRUT //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 +//Checks 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 +//Exits 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 +//Checks 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))) +//Exits RR_BOTTOM_OF_THE_WELL_PERIMETER (and IsChild (and (SmallKeys SCENE_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 @@ -61,35 +71,45 @@ RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS (or RT_LENS_BOTW (CanUse RG_L 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 +//Checks RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST true RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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) +//Exits RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS (SmallKeys SCENE_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 +//Checks 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)) +//Exits 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 +//Checks 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. +//Exits 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 +//Checks 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 @@ -116,6 +136,7 @@ RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6 (and CanCutShrubs BlastOrSma 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) +//Exits 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 @@ -124,30 +145,37 @@ RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS (Here (or BlastOrSmash (or (C 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 +//Checks RC_BOTTOM_OF_THE_WELL_MAP_CHEST (HasItem RG_GORONS_BRACELET) +//Exits 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 +//Checks 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 +//Exits 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 +//Events 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() +//Checks 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 +//Exits 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 SCENE_BOTTOM_OF_THE_WELL 2)) @@ -158,25 +186,32 @@ 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 +//Events OpenedWestRoomMQBotw true +//Exits 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 +//Checks 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)) +//Exits RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and (or LoweredWaterInsideBotw (HasItem RG_BRONZE_SCALE)) (SmallKeys SCENE_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 +//Events OpenedMiddleHoleMQBotw HasExplosives +//Exits RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER (and IsChild (SmallKeys SCENE_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 +//Checks 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 @@ -184,10 +219,12 @@ 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. +//Exits 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 +//Checks 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 @@ -207,17 +244,20 @@ 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 +//Exits 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 +//Checks 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) +//Exits 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 @@ -226,5 +266,7 @@ Bottom of the Well MQ Basement Switch Platform //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. +//Checks RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST true +//Exits 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 index df6db93b1..eff8214ef 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/deku_tree.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/deku_tree.s @@ -1,13 +1,16 @@ def RR_DEKU_TREE_ENTRYWAY SCENE_DEKU_TREE false RA_DEKU_TREE Deku Tree Entryway +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks RC_DEKU_TREE_MAP_CHEST true RC_DEKU_TREE_LOBBY_LOWER_HEART true RC_DEKU_TREE_LOBBY_UPPER_HEART (CanPassEnemy RE_BIG_SKULLTULA) @@ -16,6 +19,7 @@ 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 +//Exits RR_DEKU_TREE_ENTRYWAY true RR_DEKU_TREE_2F_MIDDLE_ROOM true RR_DEKU_TREE_COMPASS_ROOM true @@ -25,40 +29,49 @@ 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 +//Exits 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 +//Checks 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) +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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 +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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 +//Exits 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 @@ -68,77 +81,97 @@ 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 +//Checks 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 +//Exits 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 +//Exits 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 +//Checks RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1 CanCutShrubs RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2 CanCutShrubs +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1 CanCutShrubs RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2 CanCutShrubs +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1 CanCutShrubs RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2 CanCutShrubs +//Exits 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 +//Checks RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM HookshotOrBoomerang +//Exits RR_DEKU_TREE_BASEMENT_BACK_LOBBY true def RR_DEKU_TREE_BASEMENT_UPPER SCENE_DEKU_TREE false RA_DEKU_TREE Deku Tree Basement Upper +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Exits 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 +//Checks 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) +//Exits 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 +//Events DekuBabaSticks (CanKillEnemy RE_WITHERED_DEKU_BABA) BrokeDeku1FWeb HasFireSource +//Checks 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 +//Exits RR_DEKU_TREE_ENTRYWAY true //may need canAvoid logic with enemy shuffle RR_DEKU_TREE_MQ_2F true @@ -150,12 +183,14 @@ RR_DEKU_TREE_MQ_BASEMENT BrokeDeku1FWeb def RR_DEKU_TREE_MQ_2F SCENE_DEKU_TREE false RA_DEKU_TREE Deku Tree MQ 2F +//Checks 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 +//Exits RR_DEKU_TREE_MQ_1F true //Will need canAvoid logic with enemy shuffle RR_DEKU_TREE_MQ_3F true @@ -163,10 +198,12 @@ 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts BrokeDeku1FWeb true //Implies CanKillEnemy(RE_GOHMA_LARVA) +//Checks 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 @@ -177,12 +214,14 @@ 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 +//Exits 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 +//Checks 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 @@ -191,34 +230,42 @@ 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Checks RC_DEKU_TREE_MQ_GS_PAST_BOULDER_VINES (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART true +//Exits RR_DEKU_TREE_MQ_COMPASS_ROOM BlastOrSmash def RR_DEKU_TREE_MQ_BASEMENT SCENE_DEKU_TREE false RA_DEKU_TREE Deku Tree MQ Basement +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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 +//Exits 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 @@ -228,54 +275,68 @@ RR_DEKU_TREE_MQ_BASEMENT_LEDGE (or RT_DEKU_B1_SKIP (or PushedDekuBasementBlock ( 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) +//Events ClearedMQDekuSERoom (CanKillEnemy RE_MAD_SCRUB) +//Checks 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 +//Exits 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 +//Events MQDekuWaterRoomTorches (or (CanUse RG_FIRE_ARROWS) (and (CanUse RG_STICKS) (or RT_DEKU_MQ_LOG (and IsChild CanShield)))) +//Checks 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 +//Exits 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 +//Events 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 +//Checks 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 +//Exits 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 +//Checks RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1 CanCutShrubs RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2 CanCutShrubs //both imply CanKillEnemy(RE_GOHMA_LARVA) +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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 +//Exits 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 @@ -283,19 +344,24 @@ RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM (Here (or HasFireSourceWithTorch (CanUse RG_F def RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE Deku Tree MQ Basement Back Room +//Checks 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 +//Exits 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 +//Events PushedDekuBasementBlock true +//Checks 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 +//Exits 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 @@ -304,27 +370,33 @@ RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM (and (Here (or HasFireSource (CanUse RG_STICKS def RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM SCENE_DEKU_TREE false RA_DEKU_TREE Deku Tree MQ Outside Boss Room +//Checks 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 +//Exits 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 +//Exits RR_DEKU_TREE_BOSS_ROOM true def RR_DEKU_TREE_BOSS_EXIT SCENE_DEKU_TREE false RA_DEKU_TREE Deku Tree Boss Exit +//Exits 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 +//Events DekuTreeClear (CanKillEnemy RE_GOHMA) +//Checks RC_QUEEN_GOHMA DekuTreeClear RC_DEKU_TREE_QUEEN_GOHMA_HEART DekuTreeClear RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1 CanCutShrubs @@ -335,5 +407,6 @@ 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 +//Exits 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 index 0929dddb1..826a5cebf 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/dodongos_cavern.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/dodongos_cavern.s @@ -1,22 +1,27 @@ def RR_DODONGOS_CAVERN_ENTRYWAY SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern Entryway +//Exits 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 +//Exits 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 +//Events GossipStoneFairy (and (or (Here CanBreakMudWalls) (HasItem RG_GORONS_BRACELET)) CallGossipFairy) +//Checks 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))) +//Exits RR_DODONGOS_CAVERN_BEGINNING true RR_DODONGOS_CAVERN_LOBBY_SWITCH IsAdult RR_DODONGOS_CAVERN_SE_CORRIDOR (Here (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET))) @@ -27,11 +32,13 @@ RR_DODONGOS_CAVERN_BOSS_ENTRYWAY false def RR_DODONGOS_CAVERN_LOBBY_SWITCH SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern Lobby Switch +//Exits 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 +//Checks 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 @@ -39,6 +46,7 @@ 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 +//Exits 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 @@ -46,72 +54,89 @@ 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 +//Checks RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS CanAttack +//Exits 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Checks RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS CanStunDeku +//Exits RR_DODONGOS_CAVERN_DODONGO_ROOM true def RR_DODONGOS_CAVERN_STAIRS_LOWER SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern Stairs Lower +//Exits 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 +//Checks 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 +//Exits 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 +//Checks RC_DODONGOS_CAVERN_COMPASS_CHEST true +//Exits 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 +//Exits 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 +//Checks 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 +//Exits 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))) @@ -119,76 +144,96 @@ RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER (or (and IsAdult RT_DC_JUMP) (or (CanUse RG_H def RR_DODONGOS_CAVERN_2F_SIDE_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern 2F Side Room +//Checks RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT CanStunDeku RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT CanStunDeku +//Exits 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 +//Checks RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1 CanBreakPots RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2 CanBreakPots RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS CanCutShrubs +//Exits 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 +//Checks RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART true RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART true RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART true +//Exits 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 +//Checks RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1 CanBreakPots RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2 CanBreakPots +//Exits 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 +//Checks RC_DODONGOS_CAVERN_BOMB_BAG_CHEST true RC_DODONGOS_CAVERN_BLADE_POT_1 CanBreakPots RC_DODONGOS_CAVERN_BLADE_POT_2 CanBreakPots +//Exits 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 +//Checks RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST (Here CanBreakMudWalls) +//Exits 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 +//Events FairyPot true +//Checks RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS CanCutShrubs +//Exits 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 +//Checks 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 +//Exits RR_DODONGOS_CAVERN_BOSS_AREA true def RR_DODONGOS_CAVERN_MQ_BEGINNING SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern MQ Beginning +//Exits 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 +//Checks 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 +//Exits 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))) @@ -200,15 +245,20 @@ RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH (Here (or HasExplosives (and ClearMQDCUpperLo def RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern MQ Gossip Stone +//Events GossipStoneFairy CallGossipFairy +//Checks 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) +//Exits 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 +//Events ClearMQDCUpperLobbyRocks (or BlastOrSmash (CanUse RG_DINS_FIRE)) +//Exits 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 @@ -218,19 +268,24 @@ RR_DODONGOS_CAVERN_MQ_POES_ROOM (or (CanUse RG_HOVER_BOOTS) (and RT_DC_MQ_CHILD_ def RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern MQ Stairs Past Mud Wall +//Events DekuBabaSticks CanGetDekuBabaSticks +//Checks RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM (and (CanUse RG_SONG_OF_TIME) (CanGetEnemyDrop RE_GOLD_SKULLTULA)) +//Exits 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 +//Checks 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 +//Exits 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))))) @@ -238,16 +293,19 @@ 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 +//Checks 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 +//Exits 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 +//Exits 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, @@ -257,19 +315,24 @@ 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 +//Checks 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 +//Exits 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 +//Events ClearMQDCUpperLobbyRocks (and (or (and IsAdult RT_DC_JUMP) (CanUse RG_HOVER_BOOTS)) (CanUse RG_STICKS)) +//Checks RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT (CanUse RG_BOOMERANG) RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART true +//Exits 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 @@ -282,8 +345,10 @@ RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS (and (CanUse RG_STICKS) (HasItem RG_GORONS_ def RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern MQ Torch Puzzle Lower +//Checks RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1 CanBreakPots RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2 CanBreakPots +//Exits 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) @@ -291,6 +356,7 @@ RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS (or (and HasFireSource (HasItem RG_GORONS_B 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 +//Checks 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 @@ -301,11 +367,13 @@ 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 +//Exits 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) +//Checks 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 @@ -313,47 +381,58 @@ 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Events ClearMQDCUpperLobbyRocks (or CanDetonateUprightBombFlower (CanUse RG_MEGATON_HAMMER)) +//Checks 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Checks RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART true +//Exits 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 +//Checks 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 @@ -368,6 +447,7 @@ 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 +//Exits 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))) @@ -376,19 +456,23 @@ def RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM SCENE_DODONGOS_CAVERN false RA_DODONGOS 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))) +//Checks 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 +//Exits 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 +//Checks 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 +//Exits 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) @@ -398,40 +482,50 @@ 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 +//Checks 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 +//Exits 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 +//Events 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 +//Checks 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 +//Exits 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 +//Exits RR_DODONGOS_CAVERN_BOSS_ROOM true def RR_DODONGOS_CAVERN_BOSS_EXIT SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern Boss Exit +//Exits 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 +//Events 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)) +//Checks RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST true RC_DODONGOS_CAVERN_KING_DODONGO_HEART DodongosCavernClear RC_KING_DODONGO DodongosCavernClear +//Exits 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 index 2228bebf5..4432fc518 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/fire_temple.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/fire_temple.s @@ -1,11 +1,13 @@ def RR_FIRE_TEMPLE_ENTRYWAY SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple Entryway +//Exits 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 +//Exits 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 SCENE_FIRE_TEMPLE 8) (not IsFireLoopLocked))) @@ -14,54 +16,69 @@ RR_FIRE_TEMPLE_BIG_LAVA_ROOM (and (SmallKeys SCENE_FIRE_TEMPLE 2) (>= FireTimer def RR_FIRE_TEMPLE_NEAR_BOSS_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple Near Boss Room +//Events FairyPot (or (CanUse RG_HOVER_BOOTS) (CanUse RG_HOOKSHOT)) +//Checks 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))) +//Exits 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 +//Exits RR_FIRE_TEMPLE_FIRST_ROOM (or (SmallKeys SCENE_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 +//Checks RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP CanAttack +//Exits 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 +//Checks RC_FIRE_TEMPLE_FLARE_DANCER_CHEST (and (or HasExplosives (CanUse RG_MEGATON_HAMMER)) IsAdult) +//Exits 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 +//Events FireLoopSwitch (CanUse RG_MEGATON_HAMMER) +//Exits 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 +//Checks RC_FIRE_TEMPLE_BOSS_KEY_CHEST true +//Exits 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 +//Exits 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 +//Checks RC_FIRE_TEMPLE_BIG_LAVA_POT_1 CanBreakPots RC_FIRE_TEMPLE_BIG_LAVA_POT_2 CanBreakPots RC_FIRE_TEMPLE_BIG_LAVA_POT_3 CanBreakPots +//Exits RR_FIRE_TEMPLE_FIRST_ROOM (SmallKeys SCENE_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)) @@ -70,44 +87,57 @@ RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM (SmallKeys SCENE_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 +//Checks RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST true +//Exits 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 +//Checks RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM (or (and IsAdult CanAttack) HookshotOrBoomerang) +//Exits 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 +//Checks RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST true +//Exits 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 +//Checks 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) +//Exits RR_FIRE_TEMPLE_BIG_LAVA_ROOM (SmallKeys SCENE_FIRE_TEMPLE 3) RR_FIRE_TEMPLE_SHORTCUT_ROOM (and (>= FireTimer 56) (SmallKeys SCENE_FIRE_TEMPLE 4)) def RR_FIRE_TEMPLE_SHORTCUT_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple Shortcut Room +//Checks RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST (Here true) +//Exits RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM (SmallKeys SCENE_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 +//Exits 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 +//Checks RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST true RC_FIRE_TEMPLE_GS_BOULDER_MAZE (and HasExplosives (or IsAdult HookshotOrBoomerang)) +//Exits RR_FIRE_TEMPLE_SHORTCUT_ROOM true RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM true RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM (SmallKeys SCENE_FIRE_TEMPLE 5) @@ -115,14 +145,18 @@ 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 +//Checks RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST true +//Exits 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 +//Checks RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART true RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART true RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART true +//Exits RR_FIRE_TEMPLE_BIG_LAVA_ROOM TakeDamage RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER (SmallKeys SCENE_FIRE_TEMPLE 5) RR_FIRE_TEMPLE_FIRE_WALL_CHASE (SmallKeys SCENE_FIRE_TEMPLE 6) @@ -130,9 +164,11 @@ 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 +//Checks 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) +//Exits RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM (and (>= FireTimer 24) (SmallKeys SCENE_FIRE_TEMPLE 6)) RR_FIRE_TEMPLE_MAP_AREA IsAdult RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER (and (>= FireTimer 24) IsAdult) @@ -140,12 +176,16 @@ RR_FIRE_TEMPLE_CORRIDOR (and (>= FireTimer 24) (and IsAdult (SmallKeys SCENE_FIR def RR_FIRE_TEMPLE_MAP_AREA SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple Map Region +//Checks RC_FIRE_TEMPLE_MAP_CHEST true +//Exits 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 +//Checks RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST true +//Exits RR_FIRE_TEMPLE_SHORTCUT_CLIMB HasExplosives RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER true RR_FIRE_TEMPLE_FIRE_WALL_CHASE true @@ -153,28 +193,35 @@ RR_FIRE_TEMPLE_SCARECROW_ROOM (or (CanUse RG_SCARECROW) (and RT_FIRE_SCARECROW ( def RR_FIRE_TEMPLE_SCARECROW_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple Scarecrow Room +//Checks 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))))))) +//Exits 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 +//Checks RC_FIRE_TEMPLE_SCARECROW_CHEST true RC_FIRE_TEMPLE_GS_SCARECROW_TOP CanUseProjectile +//Exits 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 +//Exits RR_FIRE_TEMPLE_FIRE_WALL_CHASE (SmallKeys SCENE_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 +//Checks 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 +//Exits RR_FIRE_TEMPLE_CORRIDOR true RR_FIRE_TEMPLE_FIRE_MAZE_UPPER (CanUse RG_HOVER_BOOTS) RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM true @@ -183,71 +230,88 @@ 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 +//Exits 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 +//Checks RC_FIRE_TEMPLE_COMPASS_CHEST true +//Exits 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 +//Checks RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST (Here (and (or (CanUse RG_SONG_OF_TIME) RT_RUSTED_SWITCHES) (CanUse RG_MEGATON_HAMMER))) +//Exits RR_FIRE_TEMPLE_FIRE_MAZE_ROOM (SmallKeys SCENE_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 +//Exits 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 +//Checks 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 +//Exits 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 +//Exits 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 +//Exits 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 +//Checks RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST true +//Exits 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 +//Checks RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1 CanBreakSmallCrates RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2 CanBreakSmallCrates +//Exits 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 +//Exits 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 +//Checks RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1 CanBreakPots RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2 CanBreakPots +//Exits 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)) @@ -255,25 +319,32 @@ RR_FIRE_TEMPLE_MQ_STALFOS_ROOM (SmallKeys SCENE_FIRE_TEMPLE 5) def RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple MQ First Room Upper +//Exits 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 +//Checks RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST (CanKillEnemy RE_LIKE_LIKE) +//Exits 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 +//Checks RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY (CanUse RG_SUNS_SONG) +//Exits 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 +//Events FairyPot true +//Checks 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 @@ -283,33 +354,42 @@ 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 +//Exits 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 +//Checks RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST (and (or IsAdult (CanUse RG_HOOKSHOT)) (Here (CanKillEnemy RE_FLARE_DANCER))) +//Exits 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 +//Events OpenedLowestGoronCage (CanUse RG_MEGATON_HAMMER) +//Exits 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 +//Checks RC_FIRE_TEMPLE_MQ_MAP_CHEST true +//Exits 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 +//Checks 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) +//Exits 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)))) @@ -326,6 +406,7 @@ Fire Temple MQ Near Boss Room North //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 +//Checks 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 @@ -335,17 +416,20 @@ 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 +//Exits 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 +//Checks 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))))) +//Exits 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 SCENE_FIRE_TEMPLE 2)) @@ -353,22 +437,28 @@ RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM (and HasFireSource (and (or (and (CanUse R def RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple MQ Torch Firewall Room +//Events FairyPot (CanUse RG_HOOKSHOT) +//Checks 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Exits 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 @@ -376,7 +466,9 @@ 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 +//Checks RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST (and HasExplosives RT_FIRE_MQ_MAZE_SIDE_ROOM) +//Exits 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) @@ -385,16 +477,19 @@ RR_FIRE_TEMPLE_MQ_UPPER_MAZE (and HasExplosives (and (CanUse RG_MEGATON_HAMMER) def RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple MQ Lower Maze Crate Cage +//Checks 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 +//Exits 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 +//Exits 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 @@ -406,6 +501,7 @@ RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM (and (SmallKeys SCENE_FIRE_TEMPLE 3) (CanUse R def RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple MQ Upper Maze Box Cage +//Checks 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 @@ -414,16 +510,20 @@ 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 +//Exits 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 +//Events OpenedUpperFireShortcut (CanUse RG_MEGATON_HAMMER) +//Exits 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 +//Checks 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) @@ -431,6 +531,7 @@ 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) +//Exits RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT OpenedUpperFireShortcut RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM OpenedUpperFireShortcut @@ -438,21 +539,27 @@ 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 +//Checks RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE (and (CanUse RG_HOOKSHOT) (CanUse RG_MEGATON_HAMMER)) +//Exits 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 +//Events FairyPot true +//Checks 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 +//Exits 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 +//Checks 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 @@ -465,6 +572,7 @@ 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 +//Exits RR_FIRE_TEMPLE_MQ_UPPER_MAZE (SmallKeys SCENE_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 @@ -472,9 +580,11 @@ RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE (and (Here (or (CanUse RG_FIRE_ARROWS) (and (C def RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple MQ South Fire Maze +//Checks 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 +//Exits 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))) @@ -484,37 +594,46 @@ 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 +//Events HitFireTemplePlatform (CanUse RG_MEGATON_HAMMER) OpenedFireMQFireMazeDoor (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_HOOKSHOT)) +//Exits 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 +//Checks 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 +//Exits 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 +//Exits 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 +//Checks 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) +//Exits 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 +//Checks RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY (CanKillEnemy RE_FLARE_DANCER) +//Exits RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL (CanKillEnemy RE_FLARE_DANCER) RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM (and (CanKillEnemy RE_FLARE_DANCER) (SmallKeys SCENE_FIRE_TEMPLE 4)) @@ -522,11 +641,13 @@ 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. +//Checks 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 +//Exits RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER (SmallKeys SCENE_FIRE_TEMPLE 4) RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS (and (Here (CanUse RG_MEGATON_HAMMER)) (SmallKeys SCENE_FIRE_TEMPLE 5)) @@ -534,20 +655,26 @@ RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS (and (Here (CanUse RG_MEGATON_HAMMER)) (Small 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 +//Checks RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE (CanUse RG_HOOKSHOT) +//Exits 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 +//Exits 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 +//Events FireTempleClear (and (>= FireTimer 64) (CanKillEnemy RE_VOLVAGIA)) +//Checks RC_FIRE_TEMPLE_VOLVAGIA_HEART FireTempleClear RC_VOLVAGIA FireTempleClear +//Exits 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 index 821e1ba0d..46c2d9ae5 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/forest_temple.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/forest_temple.s @@ -1,24 +1,30 @@ def RR_FOREST_TEMPLE_ENTRYWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple Entryway +//Exits 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 +//Checks 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))))))))))) +//Exits 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 +//Exits 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 +//Events ForestTempleMeg (and ForestTempleJoelle (and ForestTempleBeth (and ForestTempleAmy (CanUse RG_FAIRY_BOW)))) +//Checks RC_FOREST_TEMPLE_GS_LOBBY HookshotOrBoomerang RC_FOREST_TEMPLE_LOBBY_POT_1 CanBreakPots RC_FOREST_TEMPLE_LOBBY_POT_2 CanBreakPots @@ -26,6 +32,7 @@ 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 +//Exits 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) @@ -37,24 +44,31 @@ RR_FOREST_TEMPLE_BOSS_ENTRYWAY false def RR_FOREST_TEMPLE_NORTH_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple North Corridor +//Exits 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 +//Events FairyPot true +//Checks 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 +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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) +//Exits 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 @@ -63,10 +77,13 @@ 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART true RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART true +//Exits RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER true RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST true RR_FOREST_TEMPLE_FLOORMASTER_ROOM true @@ -74,10 +91,13 @@ 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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)))))) +//Exits 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))) @@ -85,43 +105,55 @@ 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Exits 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 +//Checks RC_FOREST_TEMPLE_MAP_CHEST (CanKillEnemy RE_BLUE_BUBBLE) +//Exits 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 +//Checks 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))) +//Exits 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 +//Exits 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 +//Checks RC_FOREST_TEMPLE_FLOORMASTER_CHEST CanDamage +//Exits RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER true def RR_FOREST_TEMPLE_WEST_CORRIDOR SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple West Corridor +//Exits RR_FOREST_TEMPLE_LOBBY (SmallKeys SCENE_FOREST_TEMPLE 1) 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 +//Checks RC_FOREST_TEMPLE_EYE_SWITCH_CHEST (and (HasItem RG_GORONS_BRACELET) (or (CanUse RG_FAIRY_BOW) (CanUse RG_FAIRY_SLINGSHOT))) +//Exits 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 SCENE_FOREST_TEMPLE 2))) @@ -129,102 +161,130 @@ RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED (and IsAdult (and (or (CanUse RG_FAIRY def RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple NW Corridor Twisted +//Exits RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (SmallKeys SCENE_FOREST_TEMPLE 2) RR_FOREST_TEMPLE_RED_POE_ROOM (SmallKeys SCENE_FOREST_TEMPLE 3) def RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple NW Corridor Straightened +//Checks RC_FOREST_TEMPLE_BOSS_KEY_CHEST true +//Exits RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST true RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM (SmallKeys SCENE_FOREST_TEMPLE 2) def RR_FOREST_TEMPLE_RED_POE_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple Red Poe Room +//Events ForestTempleJoelle (CanUse RG_FAIRY_BOW) +//Checks RC_FOREST_TEMPLE_RED_POE_CHEST ForestTempleJoelle +//Exits RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED (SmallKeys SCENE_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 +//Checks 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 +//Exits 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 +//Events ForestTempleBeth (CanUse RG_FAIRY_BOW) +//Checks 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 +//Exits RR_FOREST_TEMPLE_UPPER_STALFOS true RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED (SmallKeys SCENE_FOREST_TEMPLE 4) def RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple NE Corridor Straightened +//Exits RR_FOREST_TEMPLE_BLUE_POE_ROOM (SmallKeys SCENE_FOREST_TEMPLE 4) RR_FOREST_TEMPLE_FROZEN_EYE_ROOM (SmallKeys SCENE_FOREST_TEMPLE 5) def RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple NE Corridor Twisted +//Exits RR_FOREST_TEMPLE_FROZEN_EYE_ROOM (SmallKeys SCENE_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 +//Checks RC_FOREST_TEMPLE_FROZEN_EYE_POT_1 CanBreakPots RC_FOREST_TEMPLE_FROZEN_EYE_POT_2 CanBreakPots +//Exits RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED (SmallKeys SCENE_FOREST_TEMPLE 5) RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED (and (SmallKeys SCENE_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 +//Checks RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST true +//Exits 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 +//Events ForestTempleAmy (CanUse RG_FAIRY_BOW) +//Checks RC_FOREST_TEMPLE_GREEN_POE_POT_1 CanBreakPots RC_FOREST_TEMPLE_GREEN_POE_POT_2 CanBreakPots +//Exits 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 +//Exits 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 +//Checks RC_FOREST_TEMPLE_BASEMENT_CHEST true RC_FOREST_TEMPLE_GS_BASEMENT HookshotOrBoomerang +//Exits 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 +//Checks 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 +//Exits RR_FOREST_TEMPLE_ENTRYWAY true RR_FOREST_TEMPLE_MQ_CENTRAL_AREA (and (SmallKeys SCENE_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 +//Events ForestTempleMeg (and ForestTempleJoelle (and ForestTempleBeth (and ForestTempleAmy (CanKillEnemy RE_MEG)))) +//Checks 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 +//Exits 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 @@ -234,20 +294,26 @@ 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 +//Events FairyPot true ForestClearBelowBowChest (CanKillEnemy RE_WOLFOS) +//Checks RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST ForestClearBelowBowChest RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1 CanBreakPots RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2 CanBreakPots +//Exits 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 +//Events 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)))) +//Checks RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA) +//Exits 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 @@ -257,8 +323,10 @@ RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (and ForestCanTwistHallway (or (CanUse RG_HOOK 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 +//Events 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))))) +//Exits 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 @@ -266,7 +334,9 @@ RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE (or (and ForestCanTwistHallway (CanUse RG_HOVE def RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple MQ After Block Puzzle +//Checks RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST (SmallKeys SCENE_FOREST_TEMPLE 3) +//Exits RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY (SmallKeys SCENE_FOREST_TEMPLE 3) RR_FOREST_TEMPLE_MQ_JOELLE_ROOM (and ForestCanTwistHallway (SmallKeys SCENE_FOREST_TEMPLE 4)) //!QUANTUM LOGIC! @@ -277,24 +347,31 @@ RR_FOREST_TEMPLE_MQ_NW_OUTDOORS (and (SmallKeys SCENE_FOREST_TEMPLE 2) (Here (Ca def RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple MQ Straight Hallway +//Checks RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST (SmallKeys SCENE_FOREST_TEMPLE 3) +//Exits 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 +//Exits 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 +//Events ForestCanTwistHallway CanHitSwitch +//Checks 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 +//Exits 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 +//Checks 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))) @@ -304,14 +381,17 @@ RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART (and (CanUse RG_BOOMERANG) RT_FOREST_OU 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)) +//Exits 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 +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts +//Checks 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) @@ -319,15 +399,18 @@ RC_FOREST_TEMPLE_MQ_GS_WELL (or CanHitEyeTargets (and (CanUse RG_IRON_BOOTS) (Ca 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) +//Exits 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 +//Checks 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))))))))))))) +//Exits 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 @@ -335,32 +418,42 @@ RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE (and RT_FOREST_OUTDOORS_LEDGE (and (CanUse def RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple MQ NE Outdoors Ledge +//Checks RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST true +//Exits 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 +//Events ForestTempleJoelle (CanUse RG_FAIRY_BOW) +//Checks RC_FOREST_TEMPLE_MQ_MAP_CHEST ForestTempleJoelle +//Exits RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE (SmallKeys SCENE_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. +//Events ForestClearBelowBowChest (CanKillEnemy RE_WOLFOS) +//Checks 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 +//Exits 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 +//Events ForestTempleBeth (CanUse RG_FAIRY_BOW) +//Checks 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 @@ -368,6 +461,7 @@ 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 +//Exits RR_FOREST_TEMPLE_MQ_FALLING_ROOM (and (SmallKeys SCENE_FOREST_TEMPLE 5) (Here (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE)))) RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM (SmallKeys SCENE_FOREST_TEMPLE 6) RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM true @@ -375,59 +469,76 @@ 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 +//Checks 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 +//Exits RR_FOREST_TEMPLE_MQ_FALLING_ROOM (or (CanUse RG_FAIRY_BOW) (CanUse RG_DINS_FIRE)) RR_FOREST_TEMPLE_MQ_BETH_ROOM (SmallKeys SCENE_FOREST_TEMPLE 6) def RR_FOREST_TEMPLE_MQ_FALLING_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple MQ Falling Room +//Checks 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 +//Exits RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE true RR_FOREST_TEMPLE_MQ_AMY_ROOM (SmallKeys SCENE_FOREST_TEMPLE 6) def RR_FOREST_TEMPLE_MQ_AMY_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple MQ Amy Room +//Events ForestTempleAmy (CanUse RG_FAIRY_BOW) +//Checks RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1 CanBreakPots RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2 CanBreakPots +//Exits 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() +//Events ForestOpenBossCorridor CanHitEyeTargets +//Checks RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST true +//Exits 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 +//Checks 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 +//Exits 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 +//Exits 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 +//Exits 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 +//Events ForestTempleClear (CanKillEnemy RE_PHANTOM_GANON) +//Checks RC_FOREST_TEMPLE_PHANTOM_GANON_HEART ForestTempleClear RC_PHANTOM_GANON ForestTempleClear +//Exits 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 index 37f9be81e..8659899b2 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/ganons_castle.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/ganons_castle.s @@ -1,12 +1,15 @@ def RR_GANONS_CASTLE_ENTRYWAY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE Ganon's Castle Entryway +//Exits 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 +//Checks RC_SHEIK_HINT_GC true +//Exits RR_GANONS_CASTLE_ENTRYWAY true RR_GANONS_CASTLE_FOREST_TRIAL true RR_GANONS_CASTLE_FIRE_TRIAL true @@ -22,7 +25,9 @@ Invalid Region def RR_GANONS_CASTLE_DEKU_SCRUBS SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE Ganon's Castle Deku Scrubs +//Events FreeFairies true +//Checks RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT CanStunDeku RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT CanStunDeku RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT CanStunDeku @@ -38,23 +43,29 @@ 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 +//Events ForestTrialClear (and (CanUse RG_LIGHT_ARROWS) (or (CanUse RG_FIRE_ARROWS) (CanUse RG_DINS_FIRE))) +//Checks 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 +//Events FireTrialClear (and (CanUse RG_GORON_TUNIC) (and (CanUse RG_GOLDEN_GAUNTLETS) (and (CanUse RG_LIGHT_ARROWS) (CanUse RG_LONGSHOT)))) +//Checks 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 +//Events BlueFireAccess true FairyPot (and BlueFire (CanKillEnemy RE_FREEZARD)) WaterTrialClear (and BlueFire (and IsAdult (and (CanUse RG_MEGATON_HAMMER) (CanUse RG_LIGHT_ARROWS)))) +//Checks 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)))) @@ -63,7 +74,9 @@ RC_GANONS_CASTLE_WATER_TRIAL_POT_3 (and CanBreakPots (and BlueFire (CanKillEnemy def RR_GANONS_CASTLE_SHADOW_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE Ganon's Castle Shadow Trial +//Events 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)))))))) +//Checks 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)) @@ -76,8 +89,10 @@ RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3 (and (or (CanUse RG_FIRE_ARROWS) (and (Can def RR_GANONS_CASTLE_SPIRIT_TRIAL SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE Ganon's Castle Spirit Trial +//Events 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))))) +//Checks 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)))))) @@ -87,7 +102,9 @@ 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 +//Events LightTrialClear (and (CanUse RG_LIGHT_ARROWS) (and (CanUse RG_HOOKSHOT) (and (SmallKeys SCENE_INSIDE_GANONS_CASTLE 2) (or RT_LENS_GANON (CanUse RG_LENS_OF_TRUTH))))) +//Checks 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 @@ -102,13 +119,16 @@ RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2 (and CanBreakPots (and (CanUse RG_HOOKSHOT) ( def RR_GANONS_CASTLE_MQ_LOBBY SCENE_INSIDE_GANONS_CASTLE false RA_GANONS_CASTLE Ganon's Castle MQ Lobby +//Exits 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 +//Checks RC_SHEIK_HINT_MQ_GC true +//Exits RR_GANONS_CASTLE_MQ_LOBBY true RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM true RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM true @@ -121,7 +141,9 @@ 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 +//Events FreeFairies true +//Checks 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 @@ -135,86 +157,112 @@ 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 +//Exits 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 +//Checks RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY HookshotOrBoomerang +//Exits 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 +//Checks RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST CanHitEyeTargets RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST HasFireSource +//Exits 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 +//Events ForestTrialClear (CanUse RG_LIGHT_ARROWS) +//Checks RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1 CanBreakPots RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2 CanBreakPots +//Exits 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 +//Exits 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 +//Events FireTrialClear (CanUse RG_LIGHT_ARROWS) +//Checks 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 +//Events BlueFireAccess (or CanJumpslash HasExplosives) +//Checks RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST BlueFire RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART BlueFire +//Exits RR_GANONS_CASTLE_MQ_MAIN true RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM (and (SmallKeys SCENE_INSIDE_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 +//Exits RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM (SmallKeys SCENE_INSIDE_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 +//Events WaterTrialClear (CanUse RG_LIGHT_ARROWS) +//Checks RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1 CanBreakPots RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2 CanBreakPots +//Exits 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 +//Events ShadowTrialFirstChest (CanUse RG_FAIRY_BOW) +//Exits 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 +//Events ShadowTrialFirstChest (CanUse RG_FAIRY_BOW) +//Checks RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST ShadowTrialFirstChest //Hookshot here is possible but very tight, but it's basically never relevant +//Exits 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 +//Events ShadowTrialFirstChest CanDetonateUprightBombFlower +//Exits 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 +//Exits 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 @@ -223,7 +271,9 @@ RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE (or HasFireSource (or (CanUse RG_HOVER 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 +//Checks RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST CanHitEyeTargets +//Exits 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 @@ -234,74 +284,94 @@ RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM (or RT_LENS_GANON_MQ (CanUse RG_LENS 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 +//Events ShadowTrialClear (CanUse RG_LIGHT_ARROWS) +//Checks RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1 CanBreakPots RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2 CanBreakPots +//Exits 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 +//Exits 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 +//Checks RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST (CanPassEnemy RE_GREEN_BUBBLE) +//Exits 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 +//Checks 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))) +//Exits 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 +//Events SpiritTrialClear (CanUse RG_LIGHT_ARROWS) NutPot true +//Checks RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1 CanBreakPots RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2 CanBreakPots +//Exits 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 +//Exits 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 +//Checks RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST (CanUse RG_ZELDAS_LULLABY) +//Exits RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM true RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT (SmallKeys SCENE_INSIDE_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 +//Exits RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM (SmallKeys SCENE_INSIDE_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 +//Checks 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 +//Exits 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 SCENE_INSIDE_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 +//Events LightTrialClear (CanUse RG_LIGHT_ARROWS) +//Checks 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 +//Exits 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? @@ -309,22 +379,27 @@ RR_GANONS_TOWER_FLOOR_1 (and (or ForestTrialClear (IsTrialSkipped TK_FOREST_TRIA def RR_GANONS_TOWER_FLOOR_1 SCENE_GANONS_TOWER false Ganon's Tower Floor 1 +//Exits 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 +//Checks RC_GANONS_TOWER_BOSS_KEY_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) +//Exits 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 +//Exits 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 +//Checks RC_GANONS_CASTLE_GANONS_TOWER_POT_1 CanBreakPots RC_GANONS_CASTLE_GANONS_TOWER_POT_2 CanBreakPots RC_GANONS_CASTLE_GANONS_TOWER_POT_3 CanBreakPots @@ -343,22 +418,27 @@ 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 +//Exits 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 +//Checks RC_GANONDORF_HINT (HasBossSoul RG_GANON_SOUL) +//Exits 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. +//Exits 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 +//Checks 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 index 68a653b59..b1b2b5a53 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/gerudo_training_ground.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/gerudo_training_ground.s @@ -1,11 +1,13 @@ def RR_GERUDO_TRAINING_GROUND_ENTRYWAY SCENE_GERUDO_TRAINING_GROUND false RA_GERUDO_TRAINING_GROUND Gerudo Training Ground Entryway +//Exits 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 +//Checks 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) @@ -13,6 +15,7 @@ RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST (and (CanKillEnemy RE_BEAMOS) (CanKillEne 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 +//Exits 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))) @@ -20,52 +23,67 @@ 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 +//Checks RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST (and (SmallKeys SCENE_GERUDO_TRAINING_GROUND 3) (or RT_LENS_GTG (CanUse RG_LENS_OF_TRUTH))) RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST (SmallKeys SCENE_GERUDO_TRAINING_GROUND 4) RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST (SmallKeys SCENE_GERUDO_TRAINING_GROUND 6) RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST (SmallKeys SCENE_GERUDO_TRAINING_GROUND 7) RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST (SmallKeys SCENE_GERUDO_TRAINING_GROUND 9) +//Exits RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT (SmallKeys SCENE_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 +//Checks 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 +//Exits 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 +//Checks 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)))) +//Exits 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 +//Checks 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)) +//Exits 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 +//Checks RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST (CanUse RG_FAIRY_BOW) +//Exits 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 +//Checks RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST (CanUse RG_FAIRY_BOW) +//Exits 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 +//Checks RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST (CanKillEnemy RE_WOLFOS ED_CLOSE true 4 true) +//Exits 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 +//Checks 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 @@ -73,6 +91,7 @@ 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 +//Checks 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 @@ -81,6 +100,7 @@ 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 +//Exits 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 SCENE_GERUDO_TRAINING_GROUND 1) @@ -90,47 +110,62 @@ RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM (Here (or (and IsAdult (CanUse RG_FAI 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 +//Checks RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST true +//Exits 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 +//Checks RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST true +//Exits RR_GERUDO_TRAINING_GROUND_MQ_LOBBY (SmallKeys SCENE_GERUDO_TRAINING_GROUND 1) RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER (SmallKeys SCENE_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 +//Events MQGTGMazeSwitch (CanUse RG_MEGATON_HAMMER) +//Checks RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE CanBreakCrates +//Exits RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK (SmallKeys SCENE_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 +//Checks RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST (CanKillEnemy RE_IRON_KNUCKLE) +//Exits 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 +//Exits 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 +//Events BlueFireAccess true //implies logic->CanKillEnemy(RE_BIG_SKULLTULA) +//Checks RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2 true) +//Exits 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) +//Checks 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 +//Exits 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)))))))) @@ -138,27 +173,35 @@ 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 +//Checks RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST MQGTGMazeSwitch +//Exits 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 +//Checks RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST (CanUse RG_FAIRY_BOW) +//Exits 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) +//Checks 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) +//Exits 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 +//Events MQGTGRightSideSwitch (CanUse RG_MEGATON_HAMMER) GTGPlatformSilverRupees (and (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) +//Exits 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)))) @@ -170,6 +213,7 @@ RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT (and MQGTGRightSideSwitch (CanUse RG_LON 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 +//Exits 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 @@ -178,12 +222,15 @@ RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM (CanUse RG_HOVER_BOOTS) 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 +//Exits 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 +//Events GTGPlatformSilverRupees (and (or (and (CanUse RG_FAIRY_BOW) IsAdult) (CanUse RG_FIRE_ARROWS)) (CanUse RG_HOVER_BOOTS)) +//Exits 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)))) @@ -191,7 +238,9 @@ 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 +//Events GTGPlatformSilverRupees (and HasFireSource (CanUse RG_HOVER_BOOTS)) +//Exits 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)) @@ -204,20 +253,27 @@ Gerudo Training Ground MQ Dinolfos Room //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 +//Checks 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))))))) +//Exits 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 +//Checks 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)))) +//Exits 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 +//Events GTGPlatformSilverRupees (and (CanUse RG_FIRE_ARROWS) (CanUse RG_HOVER_BOOTS)) +//Checks RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST true RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST true +//Exits 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)))) diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s b/soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s index 999814260..2d39a1c9c 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/ice_cavern.s @@ -1,18 +1,23 @@ def RR_ICE_CAVERN_ENTRYWAY SCENE_ICE_CAVERN false RA_ICE_CAVERN Ice Cavern Entryway +//Exits 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 +//Checks RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +//Exits 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 +//Events BlueFireAccess IsAdult +//Checks 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)) @@ -39,14 +44,18 @@ RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3 (and BlueFire (or (CanUse RG_SONG_OF_TIME) ( def RR_ICE_CAVERN_MQ_BEGINNING SCENE_ICE_CAVERN false RA_ICE_CAVERN Ice Cavern MQ Beginning +//Checks RC_ICE_CAVERN_MQ_ENTRANCE_POT CanBreakPots +//Exits 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 +//Events FairyPot true +//Checks 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 @@ -55,6 +64,7 @@ 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. +//Exits 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) @@ -63,34 +73,44 @@ 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 +//Events BlueFireAccess (or IsChild (or CanJumpslash HasExplosives)) +//Checks 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 +//Checks 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))) +//Exits 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 +//Checks RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST (CanKillEnemy RE_STALFOS) RC_SHEIK_IN_ICE_CAVERN (CanKillEnemy RE_STALFOS) +//Exits 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 +//Checks RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1 CanBreakPots RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2 CanBreakPots +//Exits 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 +//Events BlueFireAccess true +//Checks 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 diff --git a/soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s b/soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s index 331c300bf..10101e6da 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/jabu_jabus_belly.s @@ -1,24 +1,29 @@ def RR_JABU_JABUS_BELLY_ENTRYWAY SCENE_JABU_JABU false RA_JABU_JABUS_BELLY Jabu Jabus Belly Entryway +//Exits 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 +//Exits 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 +//Events JabuWestTentacle (and JabuRutoIn1F (CanKillEnemy RE_TENTACLE ED_BOOMERANG)) +//Checks 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 +//Exits 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 @@ -30,8 +35,10 @@ RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM (or LoweredJabuPath (and RT_JABU_BOSS_HOVER ( def RR_JABU_JABUS_BELLY_B1_NORTH SCENE_JABU_JABU false RA_JABU_JABUS_BELLY Jabu Jabus Belly B1 North +//Events JabuRutoIn1F (or IsAdult (HasItem RG_BRONZE_SCALE)) FairyPot (or (CanUse RG_BOOMERANG) (and (CanUse RG_HOVER_BOOTS) (CanKillEnemy RE_OCTOROK))) +//Checks 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 @@ -40,6 +47,7 @@ RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2 (and CanBreakPots (or (CanUse RG_BOOMERANG 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)))) +//Exits 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)) @@ -47,86 +55,112 @@ 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 +//Checks RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM HookshotOrBoomerang +//Exits 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 +//Events 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 +//Checks 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 +//Exits 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 +//Checks RC_JABU_JABUS_BELLY_COMPASS_CHEST (CanKillEnemy RE_SHABOM) +//Exits 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 +//Events JabuEastTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) +//Exits 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 +//Events JabuNorthTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) //implied logic->CanKillEnemy(RE_BARI) +//Exits 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 +//Checks RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER (and IsAdult (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH)) +//Exits 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 +//Events FairyPot true NutPot true +//Checks 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 +//Exits 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 +//Events LoweredJabuPath true +//Exits 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 +//Checks RC_JABU_JABUS_BELLY_GS_NEAR_BOSS (CanKillEnemy RE_GOLD_SKULLTULA ED_BOMB_THROW) +//Exits 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 +//Events NutPot true +//Checks 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 +//Exits 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 +//Events MQJabuLiftRoomCow (CanUse RG_FAIRY_SLINGSHOT) +//Checks 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) +//Exits 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 @@ -135,13 +169,17 @@ RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE (or LoweredJabuPath (or (CanUse RG_H 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 +//Checks RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST MQJabuLiftRoomCow +//Exits 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 +//Events MQJabuHolesRoomDoor true +//Checks 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 @@ -149,10 +187,12 @@ RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2 CanBreakPots 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)) +//Exits 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 +//Checks 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) @@ -160,6 +200,7 @@ 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 +//Exits 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)))) @@ -168,6 +209,7 @@ RR_JABU_JABUS_BELLY_MQ_PAST_OCTO (and JabuWestTentacle (and (Here (CanKillEnemy def RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM SCENE_JABU_JABU false RA_JABU_JABUS_BELLY Jabu Jabus Belly MQ Water Switch Room +//Checks 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) @@ -176,28 +218,35 @@ 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 +//Exits 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 +//Events JabuNorthTentacle (and (Here BlastOrSmash) (CanUse RG_BOOMERANG)) //Implies CanKillEnemy(RE_LIKE_LIKE) +//Checks 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 +//Exits 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 +//Events JabuWestTentacle (CanKillEnemy RE_TENTACLE ED_BOOMERANG) +//Checks RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM (and (Here HasExplosives) (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG)) +//Exits 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 @@ -214,47 +263,59 @@ RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM (or //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)))) ) +//Checks ) +//Exits 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 +//Events LoweredJabuPath (and (CanUse RG_BOOMERANG) (CanUse RG_FAIRY_SLINGSHOT)) +//Checks 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) +//Exits 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 +//Events FairyPot true +//Checks 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 +//Exits 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 +//Exits 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 +//Exits 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 +//Events JabuJabusBellyClear (CanKillEnemy RE_BARINADE) +//Checks RC_JABU_JABUS_BELLY_BARINADE_POT_1 CanBreakPots RC_JABU_JABUS_BELLY_BARINADE_POT_2 CanBreakPots RC_JABU_JABUS_BELLY_BARINADE_POT_3 CanBreakPots @@ -263,5 +324,6 @@ 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 +//Exits 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 index 016ef9d33..cba8508ca 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/shadow_temple.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/shadow_temple.s @@ -1,12 +1,15 @@ def RR_SHADOW_TEMPLE_ENTRYWAY SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple Entryway +//Exits 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 +//Events NutPot true +//Checks 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 @@ -17,20 +20,24 @@ 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 +//Exits 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 +//Checks 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) +//Exits RR_SHADOW_TEMPLE_HUGE_PIT (and HasExplosives (and IsAdult (SmallKeys SCENE_SHADOW_TEMPLE 1))) RR_SHADOW_TEMPLE_BEYOND_BOAT false def RR_SHADOW_TEMPLE_HUGE_PIT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple Huge Pit +//Checks RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST CanJumpslashExceptHammer RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST CanJumpslashExceptHammer RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST true @@ -49,10 +56,12 @@ RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4 (or (and CanBreakPots (and RT_SHADOW_UMBRE 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) +//Exits 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 SCENE_SHADOW_TEMPLE 3))) def RR_SHADOW_TEMPLE_WIND_TUNNEL SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple Wind Tunnel +//Checks 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 @@ -62,10 +71,12 @@ 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 SCENE_SHADOW_TEMPLE 4)) RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART (and (CanUse RG_DISTANT_SCARECROW) (SmallKeys SCENE_SHADOW_TEMPLE 4)) +//Exits RR_SHADOW_TEMPLE_BEYOND_BOAT (and CanJumpslashExceptHammer (and (CanUse RG_ZELDAS_LULLABY) (SmallKeys SCENE_SHADOW_TEMPLE 4))) def RR_SHADOW_TEMPLE_BEYOND_BOAT SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple Beyond Boat +//Checks 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) @@ -81,6 +92,7 @@ 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))) +//Exits 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 SCENE_SHADOW_TEMPLE 5) (CanUse RG_HOVER_BOOTS))) def RR_SHADOW_TEMPLE_MQ_ENTRYWAY SCENE_ID_MAX false @@ -89,15 +101,18 @@ 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 +//Exits 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 +//Checks 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 +//Exits 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 SCENE_SHADOW_TEMPLE 6) (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)))) @@ -105,6 +120,7 @@ RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA (and (Here HasExplosives) (and (SmallKeys SCE //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 +//Checks 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)) @@ -112,26 +128,33 @@ 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 +//Exits 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 +//Checks 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) +//Exits RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT (and HasExplosives (SmallKeys SCENE_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 +//Checks RC_SHADOW_TEMPLE_MQ_MAP_CHEST (and (CanPassEnemy RE_BIG_SKULLTULA) (or (CanUse RG_HOOKSHOT) (and IsAdult (CanUse RG_HOVER_BOOTS)))) +//Exits 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 +//Checks RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) +//Exits 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 @@ -139,13 +162,16 @@ RR_SHADOW_TEMPLE_MQ_DOCK ShadowShortcutBlock //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 +//Exits RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS (SmallKeys SCENE_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 +//Checks RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY (CanUse RG_SONG_OF_STORMS) +//Exits 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)) @@ -154,20 +180,25 @@ 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 +//Checks 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))) +//Exits 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 +//Checks RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST (CanUse RG_LONGSHOT) +//Exits 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 SCENE_SHADOW_TEMPLE 3))) def RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple MQ Stone Umbrella Room +//Checks 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 @@ -175,16 +206,19 @@ RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM (or (CanGetEnemyDrop RE_GOLD_SKULLTUL 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) +//Exits 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 +//Checks 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 +//Exits 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 @@ -197,47 +231,61 @@ MQShadowFloorSpikeRupees (and (or RT_LENS_SHADOW_MQ (CanUse RG_LENS_OF_TRUTH)) //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 +//Events (or TakeDamage (CanUse RG_HOVER_BOOTS)))) +//Checks RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST (and (CanKillEnemy RE_REDEAD) (or RT_LENS_SHADOW_MQ (or TakeDamage (CanUse RG_LENS_OF_TRUTH)))) +//Exits 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 SCENE_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 +//Checks RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST (CanKillEnemy RE_STALFOS ED_CLOSE true 2) +//Exits 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 +//Exits RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM (and (SmallKeys SCENE_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 +//Checks 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) +//Exits 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 +//Events NutPot true +//Checks 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 +//Exits RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL (or RT_SHADOW_MQ_WINDY_WALKWAY (CanUse RG_HOVER_BOOTS)) RR_SHADOW_TEMPLE_MQ_DOCK (SmallKeys SCENE_SHADOW_TEMPLE 5) def RR_SHADOW_TEMPLE_MQ_DOCK SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple MQ Dock +//Events ShadowShortcutBlock (HasItem RG_GORONS_BRACELET) +//Checks RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART (CanUse RG_DISTANT_SCARECROW) RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART (CanUse RG_DISTANT_SCARECROW) +//Exits RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH ShadowShortcutBlock RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM (SmallKeys SCENE_SHADOW_TEMPLE 5) //funnily enough, the wheel jump seems to be in logic as there's no strength requirement in N64 @@ -247,19 +295,23 @@ 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 +//Checks 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 +//Exits 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 +//Checks 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 +//Exits 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 @@ -269,7 +321,9 @@ RR_SHADOW_TEMPLE_MQ_BOSS_DOOR (and (CanUse RG_HOVER_BOOTS) (or RT_LENS_SHADOW_MQ 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 +//Checks 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))) +//Exits 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 @@ -277,30 +331,38 @@ RR_SHADOW_TEMPLE_BOSS_ENTRYWAY true 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 +//Checks 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 +//Exits RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT true RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM (SmallKeys SCENE_SHADOW_TEMPLE 6) def RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple MQ Spike Walls Room +//Checks 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 +//Exits RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE (and (SmallKeys SCENE_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 +//Exits 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 +//Events ShadowTempleClear (CanKillEnemy RE_BONGO_BONGO) +//Checks RC_SHADOW_TEMPLE_BONGO_BONGO_HEART ShadowTempleClear RC_BONGO_BONGO ShadowTempleClear +//Exits 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 index d5496a8ff..f9e3091b6 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/spirit_temple.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/spirit_temple.s @@ -1,20 +1,25 @@ def RR_SPIRIT_TEMPLE_ENTRYWAY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple Entryway +//Exits 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 +//Checks RC_SPIRIT_TEMPLE_LOBBY_POT_1 CanBreakPots RC_SPIRIT_TEMPLE_LOBBY_POT_2 CanBreakPots +//Exits 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 +//Events NutCrate true +//Checks 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)))))) @@ -24,28 +29,34 @@ RC_SPIRIT_TEMPLE_ANUBIS_POT_3 (and (or (CanUse RG_BOOMERANG) (or (CanUse RG_FAIR 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 +//Exits RR_SPIRIT_TEMPLE_CHILD_CLIMB (SmallKeys SCENE_SPIRIT_TEMPLE 1) def RR_SPIRIT_TEMPLE_CHILD_CLIMB SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Child Spirit Temple Climb +//Checks RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST (or (HasProjectile HasProjectileAge::Both) (or (and (SmallKeys SCENE_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (HasProjectile HasProjectileAge::Adult))) (and (SmallKeys SCENE_SPIRIT_TEMPLE 5) (and IsChild (HasProjectile HasProjectileAge::Child))))) RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST (or (HasProjectile HasProjectileAge::Both) (or (and (SmallKeys SCENE_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (HasProjectile HasProjectileAge::Adult))) (and (SmallKeys SCENE_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 SCENE_SPIRIT_TEMPLE 5) (HasProjectile HasProjectileAge::Child))) (and (SmallKeys SCENE_SPIRIT_TEMPLE 2) (and (CanUse RG_SILVER_GAUNTLETS) (or (HasProjectile HasProjectileAge::Adult) (and TakeDamage CanJumpslashExceptHammer)))))))) RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1 CanBreakPots +//Exits 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 +//Checks 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 SCENE_SPIRIT_TEMPLE 3) RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST (SmallKeys SCENE_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))) +//Exits RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER (SmallKeys SCENE_SPIRIT_TEMPLE 1) def RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple Central Chamber +//Checks RC_SPIRIT_TEMPLE_MAP_CHEST (or (and (or HasExplosives (SmallKeys SCENE_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 SCENE_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_STICKS))) (and (SmallKeys SCENE_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 SCENE_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 SCENE_SPIRIT_TEMPLE 5) (and HasExplosives (CanUse RG_STICKS))) (and (SmallKeys SCENE_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 SCENE_SPIRIT_TEMPLE 3) (and (CanUse RG_SILVER_GAUNTLETS) (CanUse RG_ZELDAS_LULLABY))) @@ -60,6 +71,7 @@ RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3 (and CanBreakPots (SmallKeys SCENE_SPIRIT RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4 (and CanBreakPots (SmallKeys SCENE_SPIRIT_TEMPLE 2)) RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5 (and CanBreakPots (SmallKeys SCENE_SPIRIT_TEMPLE 2)) RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6 (and CanBreakPots (SmallKeys SCENE_SPIRIT_TEMPLE 2)) +//Exits RR_SPIRIT_TEMPLE_OUTDOOR_HANDS (or CanJumpslashExceptHammer HasExplosives) RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR (and (SmallKeys SCENE_SPIRIT_TEMPLE 4) (CanUse RG_SILVER_GAUNTLETS)) RR_SPIRIT_TEMPLE_CHILD_CLIMB true @@ -67,34 +79,42 @@ RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD (and RT_SPIRIT_PLATFORM_HOOKSHOT (CanUse RG_ def RR_SPIRIT_TEMPLE_OUTDOOR_HANDS SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple Outdoor Hands +//Checks RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST (or (and (SmallKeys SCENE_SPIRIT_TEMPLE 3) (and (CanUse RG_LONGSHOT) HasExplosives)) (SmallKeys SCENE_SPIRIT_TEMPLE 5)) RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST (and (SmallKeys SCENE_SPIRIT_TEMPLE 4) (and (CanUse RG_SILVER_GAUNTLETS) HasExplosives)) +//Exits RR_DESERT_COLOSSUS (or (and IsChild (SmallKeys SCENE_SPIRIT_TEMPLE 5)) (and (CanUse RG_SILVER_GAUNTLETS) (or (and (SmallKeys SCENE_SPIRIT_TEMPLE 3) HasExplosives) (SmallKeys SCENE_SPIRIT_TEMPLE 5)))) def RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple Beyond Central Locked Door +//Checks 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)) +//Exits RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR (and (SmallKeys SCENE_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 +//Checks 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) +//Exits 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 +//Exits 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 +//Checks 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) @@ -103,6 +123,7 @@ 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 +//Exits 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)) @@ -110,22 +131,27 @@ RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH (and (CanUse RG_LONGSHOT) (CanUse RG_BO 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 +//Events MQSpiritCrawlBoulder (or (CanUse RG_BOMBCHU_5) (and RT_RUSTED_SWITCHES (CanUse RG_MEGATON_HAMMER))) +//Checks 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 +//Exits 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 +//Checks 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 +//Exits 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))) @@ -133,58 +159,74 @@ RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM (and (CanUse RG_BOMBCHU_5) (and CanHitEyeTarg 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 +//Events FairyPot (Here (CanKillEnemy RE_STALFOS)) //implies logic->CanBreakPots() +//Checks 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)) +//Exits 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 +//Events MQSpiritMapRoomEnemies (and (CanKillEnemy RE_ANUBIS) (CanKillEnemy RE_KEESE)) +//Checks 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 +//Exits 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 +//Events MQSpiritMapRoomEnemies (and (CanKillEnemy RE_ANUBIS) (CanKillEnemy RE_KEESE ED_BOOMERANG)) +//Checks RC_SPIRIT_TEMPLE_MQ_MAP_CHEST true //The bridge is a temp flag, so not a way to cross south to north in logic +//Exits 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 +//Events MQSpiritTimeTravelChest (CanUse RG_MEGATON_HAMMER) MQSpiritCrawlBoulder (or (CanUse RG_BOMBCHU_5) (and RT_RUSTED_SWITCHES (CanUse RG_MEGATON_HAMMER))) +//Exits 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 SCENE_SPIRIT_TEMPLE 1) def RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple MQ Under Like Like +//Checks 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 +//Exits RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH (SmallKeys SCENE_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) +//Checks 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))) +//Exits 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 SCENE_SPIRIT_TEMPLE 2) def RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple MQ Statue Room +//Checks 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)))) @@ -195,6 +237,7 @@ RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1 (MQSpiritSharedStatueRoom RR_SPIRIT_TEMPLE_MQ 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 +//Exits RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM (SmallKeys SCENE_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))))) @@ -205,28 +248,34 @@ 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 +//Checks 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) +//Exits 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 SCENE_SPIRIT_TEMPLE 7) def RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple MQ East Iron Knuckle +//Exits RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM (SmallKeys SCENE_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 +//Checks 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 +//Exits 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 +//Exits 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 @@ -235,14 +284,18 @@ RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH (if IsChild (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 +//Checks RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST (and IsChild (and (SmallKeys SCENE_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 +//Exits 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 +//Checks 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))) +//Exits 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 @@ -255,21 +308,27 @@ RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F (or (CanUse RG_FIRE_ARROWS) (and RT_SPIRI 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 +//Events MQSpirit3SunsEnemies (or (and (CanUse RG_MIRROR_SHIELD) (CanKillEnemy RE_STALFOS ED_CLOSE true 2)) (and RSK_SUNLIGHT_ARROWS (CanUse RG_LIGHT_ARROWS))) +//Exits 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 +//Exits 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 +//Events Spirit1FSilverRupees (CanUse RG_MEGATON_HAMMER) +//Checks RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1 CanBreakPots RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2 CanBreakPots +//Exits 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 @@ -277,64 +336,81 @@ RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM (SmallKeys SCENE_SPIRIT_TEMPLE 7) def RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple MQ Leever Room +//Checks 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) +//Exits 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 +//Exits RR_SPIRIT_TEMPLE_MQ_1F_EAST (SmallKeys SCENE_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 +//Checks RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST (CanPassEnemy RE_BIG_SKULLTULA) RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) +//Exits 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 +//Checks 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)) +//Exits RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST (and (CanAvoidEnemy RE_BEAMOS true 4) (and (CanUse RG_SONG_OF_TIME) (and (SmallKeys SCENE_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 SCENE_SPIRIT_TEMPLE 6) def RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple MQ SoT Sun Room +//Checks RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST true RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY (CanUse RG_SUNS_SONG) +//Exits 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 +//Exits 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 +//Exits 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 +//Checks RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST true +//Exits 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 +//Checks RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST true +//Exits 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 +//Checks RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1 CanBreakPots RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2 CanBreakPots +//Exits 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 @@ -342,8 +418,10 @@ 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 +//Checks RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1 CanBreakPots RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2 CanBreakPots +//Exits RR_SPIRIT_TEMPLE_MQ_BIG_WALL true RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM (SmallKeys SCENE_SPIRIT_TEMPLE 7) RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM (CanUse RG_ZELDAS_LULLABY) @@ -351,12 +429,15 @@ 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 +//Checks 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) +//Exits 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 +//Checks 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 @@ -365,31 +446,39 @@ 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Exits 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 +//Exits 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 +//Events SpiritTempleClear (CanKillEnemy RE_TWINROVA) +//Checks RC_SPIRIT_TEMPLE_TWINROVA_HEART SpiritTempleClear RC_TWINROVA SpiritTempleClear +//Exits 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 index 07829c82e..385a6f3bb 100644 --- a/soh/soh/Enhancements/randomizer/logic/dungeons/water_temple.s +++ b/soh/soh/Enhancements/randomizer/logic/dungeons/water_temple.s @@ -1,5 +1,6 @@ def RR_WATER_TEMPLE_ENTRYWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Entryway +//Exits 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 @@ -7,8 +8,10 @@ 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 +//Checks 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))))) +//Exits 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))) @@ -25,9 +28,12 @@ RR_WATER_TEMPLE_PRE_BOSS_ROOM (or (and CanWaterTempleHigh (CanUse RG_LONGSHOT)) def RR_WATER_TEMPLE_EAST_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple East Lower +//Events CanWaterTempleLowFromHigh (CanUse RG_ZELDAS_LULLABY) +//Checks 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)))) +//Exits 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)))) @@ -35,145 +41,187 @@ RR_WATER_TEMPLE_TORCH_ROOM (and CanWaterTempleLowFromHigh (or HasFireSourceWithT def RR_WATER_TEMPLE_MAP_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Map Room +//Checks RC_WATER_TEMPLE_MAP_CHEST (CanKillEnemy RE_SPIKE ED_CLOSE true 3) +//Exits 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 +//Checks RC_WATER_TEMPLE_CRACKED_WALL_CHEST HasExplosives +//Exits RR_WATER_TEMPLE_EAST_LOWER true def RR_WATER_TEMPLE_TORCH_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Torch Room +//Checks RC_WATER_TEMPLE_TORCHES_CHEST (CanKillEnemy RE_SHELL_BLADE ED_CLOSE true 3) +//Exits 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 +//Exits 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 SCENE_WATER_TEMPLE 4)) def RR_WATER_TEMPLE_BOULDERS_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Boulders Lower +//Checks 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))))) +//Exits RR_WATER_TEMPLE_NORTH_LOWER (SmallKeys SCENE_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 +//Checks RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1 CanBreakPots RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2 CanBreakPots +//Exits 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 +//Exits 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 +//Exits 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 SCENE_WATER_TEMPLE 5)) def RR_WATER_TEMPLE_BOSS_KEY_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Boss Key Room +//Events FairyPot true +//Checks RC_WATER_TEMPLE_BOSS_KEY_CHEST true RC_WATER_TEMPLE_BOSS_KEY_POT_1 CanBreakPots RC_WATER_TEMPLE_BOSS_KEY_POT_2 CanBreakPots +//Exits 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 SCENE_WATER_TEMPLE 5)) def RR_WATER_TEMPLE_SOUTH_LOWER SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple South Lower +//Checks 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)))) +//Exits 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 +//Exits 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 +//Checks 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)))))) +//Exits 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 +//Exits RR_WATER_TEMPLE_LOBBY (SmallKeys SCENE_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 +//Events CanWaterTempleMiddle (CanUse RG_ZELDAS_LULLABY) +//Checks 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 SCENE_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))) +//Exits 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 +//Checks RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST (and (CanUse RG_HOOKSHOT) (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 40))) +//Exits 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 +//Checks 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 +//Exits 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 +//Exits 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 +//Events CanWaterTempleHigh (CanUse RG_ZELDAS_LULLABY) +//Exits RR_WATER_TEMPLE_LOBBY true def RR_WATER_TEMPLE_BLOCK_CORRIDOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Block Corridor +//Checks 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))) +//Exits 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 +//Checks 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))))) +//Exits RR_WATER_TEMPLE_LOBBY (and (CanUse RG_HOOKSHOT) (SmallKeys SCENE_WATER_TEMPLE 4)) RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM (and (CanUse RG_HOOKSHOT) (SmallKeys SCENE_WATER_TEMPLE 5)) def RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Dragon Pillars Room +//Checks RC_WATER_TEMPLE_LIKE_LIKE_POT_1 (CanUse RG_HOOKSHOT) RC_WATER_TEMPLE_LIKE_LIKE_POT_2 (CanUse RG_HOOKSHOT) +//Exits 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 +//Exits 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 +//Checks RC_WATER_TEMPLE_LONGSHOT_CHEST true +//Exits 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 +//Checks 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 @@ -182,18 +230,23 @@ RC_WATER_TEMPLE_RIVER_HEART_1 (or (and (CanUse RG_IRON_BOOTS) (>= WaterTimer 16) 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)) +//Exits 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 +//Events FairyPot true +//Checks RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1 CanBreakPots RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2 CanBreakPots +//Exits 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 +//Exits 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 @@ -206,6 +259,7 @@ RR_WATER_TEMPLE_MQ_2F_CENTRAL (MQWaterLevel WL_LOW_OR_MID) //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 +//Exits 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))) @@ -225,6 +279,7 @@ RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM (and MQWaterB1Switch (and (or (and (MQ //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 +//Exits 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)) @@ -241,6 +296,7 @@ RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY (or (and (CanUse RG_IRON_BOOTS) (>= WaterTim //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 +//Exits 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) @@ -253,20 +309,24 @@ Invalid Region def RR_WATER_TEMPLE_MQ_HIGH_EMBLEM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple MQ High Emblem +//Events ReachedWaterHighEmblem true CanWaterTempleHigh (CanUse RG_ZELDAS_LULLABY) +//Exits 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. +//Exits 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 +//Exits RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE (or (CanUse RG_ICE_ARROWS) TakeDamage) RR_WATER_TEMPLE_BOSS_ENTRYWAY true @@ -274,25 +334,32 @@ 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 +//Events CouldWaterTempleLow true CanWaterTempleLowFromHigh (CanUse RG_ZELDAS_LULLABY) +//Checks 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)))) +//Exits 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 +//Checks RC_WATER_TEMPLE_MQ_COMPASS_CHEST (and (CanKillEnemy RE_LIZALFOS) (CanKillEnemy RE_SPIKE)) +//Exits 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. +//Events MQWaterB1Switch (and RT_WATER_MQ_CENTRAL_PILLAR (CanUse RG_FIRE_ARROWS)) +//Exits 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))))) @@ -302,30 +369,37 @@ RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1 (and MQWaterOpenedPillarB1 (and (MQWaterLev //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 +//Events 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)) +//Exits 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 +//Events 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)))) +//Checks RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1 CanBreakCrates RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2 CanBreakCrates +//Exits 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 +//Exits 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 +//Checks 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 @@ -344,6 +418,7 @@ 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 +//Checks 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 @@ -357,17 +432,21 @@ 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 +//Exits 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 +//Checks RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH (CanGetEnemyDrop RE_GOLD_SKULLTULA) +//Exits 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 +//Checks 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 @@ -382,10 +461,12 @@ 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 +//Exits 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 +//Checks 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 @@ -397,12 +478,14 @@ 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 +//Exits 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 +//Checks 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 @@ -415,6 +498,7 @@ 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 +//Exits RR_WATER_TEMPLE_MQ_3F_CENTRAL (and (SmallKeys SCENE_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)) @@ -422,7 +506,9 @@ 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 +//Events 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)))) +//Exits 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))) @@ -430,12 +516,15 @@ RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER (and MQWaterStalfosPit (and (or IsAdult (an //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 +//Events FairyPot true NutPot true +//Checks 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) +//Exits 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)) @@ -443,33 +532,43 @@ 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 +//Checks 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) +//Exits 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 +//Events FairyPot true +//Checks RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1 CanBreakPots RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2 CanBreakPots +//Exits 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 +//Checks RC_WATER_TEMPLE_MQ_GS_RIVER (or (CanUse RG_LONGSHOT) (and (CanUse RG_IRON_BOOTS) (CanUse RG_HOOKSHOT))) +//Exits 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 +//Events FairyPot true +//Checks RC_WATER_TEMPLE_MQ_RIVER_POT_1 CanBreakPots RC_WATER_TEMPLE_MQ_RIVER_POT_2 CanBreakPots +//Exits 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)) @@ -478,8 +577,10 @@ RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR (or (HasItem RG_BRONZE_SCALE) (or (CanUse RG def RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple MQ Dragon Room Door +//Checks RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1 CanBreakCrates RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2 CanBreakCrates +//Exits 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) @@ -488,29 +589,36 @@ 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 +//Checks 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 +//Exits 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 +//Events MQWaterDragonTorches HasFireSource +//Checks 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 +//Exits 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 +//Checks RC_WATER_TEMPLE_MQ_BOSS_KEY_POT CanBreakPots RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE CanBreakCrates +//Exits 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))) @@ -518,15 +626,19 @@ RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST (and CanHitSwitch (Here (CanUse RG_DINS_F //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 +//Checks 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 +//Exits 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 +//Checks RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST true +//Exits 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))))) @@ -535,12 +647,15 @@ 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 +//Events MQWaterB1Switch (CanUse RG_IRON_BOOTS) +//Exits 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 +//Checks 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)) @@ -548,11 +663,13 @@ RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4 (and (CanUse RG_IRON_BOOT 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. +//Exits 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 +//Checks 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 @@ -564,6 +681,7 @@ 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 +//Checks 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)) @@ -572,6 +690,7 @@ RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3 (and (CanUse RG_IRON_BOOTS) (and 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)) +//Exits 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) @@ -583,6 +702,7 @@ RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE (and RT_WATER_MQ_LOCKED_GS (and (CanUs def RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple MQ Single Stalfos Room +//Checks 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 @@ -591,15 +711,18 @@ 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 +//Exits 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 +//Exits 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 +//Checks 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 @@ -607,28 +730,35 @@ 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 +//Exits 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 +//Checks 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 +//Exits RR_WATER_TEMPLE_MQ_DODONGO_ROOM true def RR_WATER_TEMPLE_BOSS_ENTRYWAY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Boss Entryway +//Exits 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 +//Events WaterTempleClear (CanKillEnemy RE_MORPHA) +//Checks RC_WATER_TEMPLE_MORPHA_HEART WaterTempleClear RC_MORPHA WaterTempleClear +//Exits 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 index 765c1c12b..1482562a1 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/castle_grounds.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/castle_grounds.s @@ -3,20 +3,24 @@ //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 +//Exits 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 +//Exits 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 +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugRock true +//Checks RC_HC_MALON_EGG true RC_HC_GS_TREE (and IsChild (CanKillEnemy RE_GOLD_SKULLTULA ED_CLOSE)) RC_HC_MALON_GOSSIP_STONE_FAIRY CallGossipFairy @@ -27,6 +31,7 @@ RC_HC_MALON_GOSSIP_STONE true RC_HC_ROCK_WALL_GOSSIP_STONE true RC_HC_GRASS_1 CanCutShrubs RC_HC_GRASS_2 CanCutShrubs +//Exits 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 @@ -34,26 +39,34 @@ RR_HC_STORMS_GROTTO CanOpenStormsGrotto def RR_HC_GARDEN SCENE_CASTLE_COURTYARD_ZELDA false HC Garden +//Checks RC_HC_ZELDAS_LETTER true RC_SONG_FROM_IMPA true +//Exits RR_HYRULE_CASTLE_GROUNDS true def RR_HC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false HC Great Fairy Fountain +//Checks RC_HC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +//Exits RR_CASTLE_GROUNDS true def RR_HC_STORMS_GROTTO SCENE_GROTTOS false HC Storms Grotto +//Checks RC_HC_GS_STORMS_GROTTO (and (CanUse RG_BOOMERANG) RT_HC_STORMS_GS) +//Exits 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 +//Events NutPot true GossipStoneFairy CallGossipFairy WanderingBugs true +//Checks 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) @@ -62,22 +75,29 @@ 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 +//Exits RR_HC_STORMS_GROTTO true def RR_GANONS_CASTLE_GROUNDS SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE Ganon's Castle Grounds +//Events BuiltRainbowBridge CanBuildRainbowBridge +//Checks RC_OGC_GS (or CanJumpslashExceptHammer (or CanUseProjectile (or (and CanShield (CanUse RG_MEGATON_HAMMER)) (CanUse RG_DINS_FIRE)))) +//Exits 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 +//Checks RC_OGC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +//Exits RR_CASTLE_GROUNDS true def RR_GANONS_CASTLE_LEDGE SCENE_OUTSIDE_GANONS_CASTLE false RA_OUTSIDE_GANONS_CASTLE Ganon's Castle Ledge +//Exits 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 index b427a12eb..b7eabe768 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_crater.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_crater.s @@ -1,12 +1,15 @@ def RR_DMC_UPPER_LOCAL SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER DMC Upper Local +//Events GossipStoneFairy (and HasExplosives (and CallGossipFairyExceptSuns (or (>= FireTimer 16) (>= Hearts 3)))) +//Checks 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)) +//Exits 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)))))) @@ -15,7 +18,9 @@ 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 +//Events BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or (>= FireTimer 8) (>= Hearts 3))))) +//Checks 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))) @@ -28,6 +33,7 @@ RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6 (and IsChild (or (>= FireTimer 8) (>= Hearts 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))))) +//Exits 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)) @@ -36,6 +42,7 @@ 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 +//Exits 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))) @@ -43,10 +50,12 @@ RR_DMC_CENTRAL_LOCAL (and (or (CanUse RG_HOVER_BOOTS) (or (CanUse RG_HOOKSHOT) ( def RR_DMC_LOWER_NEARBY SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER DMC Lower Nearby +//Checks 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 +//Exits RR_DMC_LOWER_LOCAL (>= FireTimer 48) RR_GC_DARUNIAS_CHAMBER true RR_DMC_GREAT_FAIRY_FOUNTAIN (CanUse RG_MEGATON_HAMMER) @@ -54,28 +63,35 @@ 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 +//Exits 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 +//Checks 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))) +//Exits 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 +//Checks RC_DMC_DEKU_SCRUB (and IsChild CanStunDeku) +//Exits 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 +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_DMC_UPPER_GROTTO_CHEST true RC_DMC_UPPER_GROTTO_FISH HasBottle RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -87,23 +103,29 @@ 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 +//Exits RR_DMC_UPPER_LOCAL true def RR_DMC_HAMMER_GROTTO SCENE_GROTTOS false DMC Hammer Grotto +//Checks 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 +//Exits RR_DMC_LOWER_LOCAL true def RR_DMC_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false DMC Great Fairy Fountain +//Checks RC_DMC_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +//Exits RR_DMC_LOWER_LOCAL true def RR_DMC_DISTANT_PLATFORM SCENE_DEATH_MOUNTAIN_CRATER false RA_DEATH_MOUNTAIN_CRATER DMC Distant Platform +//Checks RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1 IsAdult RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2 IsAdult RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3 IsAdult @@ -111,4 +133,5 @@ 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 +//Exits 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 index cef38e86d..39d9dc0f8 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_trail.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/death_mountain_trail.s @@ -1,6 +1,8 @@ def RR_DEATH_MOUNTAIN_TRAIL SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL Death Mountain +//Events BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse RG_SONG_OF_STORMS) (or HasExplosives (HasItem RG_GORONS_BRACELET))))) +//Checks 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)))))) @@ -12,6 +14,7 @@ RC_DMT_BEAN_SPROUT_FAIRY_1 (and IsChild (and (CanUse RG_MAGIC_BEAN) (and (CanUse 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) +//Exits 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)))) @@ -20,8 +23,10 @@ RR_DMT_STORMS_GROTTO CanOpenStormsGrotto def RR_DEATH_MOUNTAIN_SUMMIT SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL Death Mountain Summit +//Events GossipStoneFairy CallGossipFairy BugRock IsChild +//Checks 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)) @@ -29,6 +34,7 @@ RC_DMT_GS_FALLING_ROCKS_PATH (and IsAdult (and AtNight (and (or (CanUse RG_MEGAT RC_DMT_GOSSIP_STONE_FAIRY CallGossipFairy RC_DMT_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) RC_DMT_GOSSIP_STONE true +//Exits RR_DEATH_MOUNTAIN_TRAIL true RR_DMC_UPPER_LOCAL true RR_DMT_OWL_FLIGHT IsChild @@ -37,15 +43,19 @@ RR_DMT_GREAT_FAIRY_FOUNTAIN (Here BlastOrSmash) def RR_DMT_OWL_FLIGHT SCENE_DEATH_MOUNTAIN_TRAIL true RA_DEATH_MOUNTAIN_TRAIL DMT Owl Flight +//Exits RR_KAK_IMPAS_ROOFTOP true def RR_DMT_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC false DMT Great Fairy Fountain +//Checks RC_DMT_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +//Exits RR_DEATH_MOUNTAIN_SUMMIT true def RR_DMT_COW_GROTTO SCENE_GROTTOS false DMT Cow Grotto +//Checks RC_DMT_COW_GROTTO_COW (CanUse RG_EPONAS_SONG) RC_DMT_COW_GROTTO_BEEHIVE CanBreakLowerBeehives RC_DMT_COW_GROTTO_LEFT_HEART true @@ -62,14 +72,17 @@ 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 +//Exits RR_DEATH_MOUNTAIN_SUMMIT true def RR_DMT_STORMS_GROTTO SCENE_GROTTOS false DMT Storms Grotto +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_DMT_STORMS_GROTTO_CHEST true RC_DMT_STORMS_GROTTO_FISH HasBottle RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -81,4 +94,5 @@ 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 +//Exits 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 index 4ccac1864..bdddd9836 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/desert_colossus.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/desert_colossus.s @@ -1,7 +1,9 @@ def RR_DESERT_COLOSSUS SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS Desert Colossus +//Events FairyPond (CanUse RG_SONG_OF_STORMS) BugRock true +//Checks 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)) @@ -13,6 +15,7 @@ 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 +//Exits 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 @@ -22,7 +25,9 @@ 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 +//Events FairyPond true +//Checks RC_COLOSSUS_OASIS_FAIRY_1 true RC_COLOSSUS_OASIS_FAIRY_2 true RC_COLOSSUS_OASIS_FAIRY_3 true @@ -31,21 +36,28 @@ RC_COLOSSUS_OASIS_FAIRY_5 true RC_COLOSSUS_OASIS_FAIRY_6 true RC_COLOSSUS_OASIS_FAIRY_7 true RC_COLOSSUS_OASIS_FAIRY_8 true +//Exits RR_DESERT_COLOSSUS true def RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE SCENE_DESERT_COLOSSUS true RA_DESERT_COLOSSUS Desert Colossus From Spirit Entryway +//Checks RC_SHEIK_AT_COLOSSUS true +//Exits RR_DESERT_COLOSSUS true def RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false Colossus Great Fairy Fountain +//Checks RC_COLOSSUS_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +//Exits RR_DESERT_COLOSSUS true def RR_COLOSSUS_GROTTO SCENE_GROTTOS false Colossus Grotto +//Checks RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR CanStunDeku RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT CanStunDeku RC_COLOSSUS_GROTTO_BEEHIVE CanBreakUpperBeehives +//Exits 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 index a854df8d5..f4532e6e7 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_fortress.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_fortress.s @@ -1,8 +1,11 @@ def RR_GF_OUTSKIRTS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS Gerudo Fortress Outskirts +//Events GF_GateOpen (and IsAdult (HasItem RG_GERUDO_MEMBERSHIP_CARD)) +//Checks RC_GF_OUTSKIRTS_NE_CRATE (and (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) CanBreakCrates) RC_GF_OUTSKIRTS_NW_CRATE (or IsChild (CanPassEnemy RE_GERUDO_GUARD)) +//Exits RR_GV_FORTRESS_SIDE true RR_TH_1_TORCH_CELL true RR_GF_OUTSIDE_GATE GF_GateOpen @@ -13,10 +16,12 @@ RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) def RR_GF_NEAR_GROTTO SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Near Grotto +//Checks 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 +//Exits RR_TH_1_TORCH_CELL true RR_TH_STEEP_SLOPE_CELL true RR_TH_KITCHEN_CORRIDOR true @@ -28,7 +33,9 @@ RR_GF_STORMS_GROTTO (and IsAdult CanOpenStormsGrotto) def RR_GF_OUTSIDE_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Outside GTG +//Events GtG_GateOpen (and IsAdult (and (HasItem RG_GERUDO_MEMBERSHIP_CARD) (HasItem RG_CHILD_WALLET))) +//Exits RR_GF_TO_GTG (and GtG_GateOpen (or IsAdult RSK_SHUFFLE_DUNGEON_ENTRANCES)) RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) RR_GF_OUTSKIRTS true @@ -39,16 +46,19 @@ 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 +//Exits RR_GERUDO_TRAINING_GROUND_ENTRYWAY true def RR_GF_EXITING_GTG SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Exiting GTG +//Exits 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 +//Exits RR_TH_DOUBLE_CELL true RR_TH_KITCHEN_CORRIDOR true RR_GF_JAIL_WINDOW (CanUse RG_HOOKSHOT) @@ -59,6 +69,7 @@ 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 +//Exits RR_TH_STEEP_SLOPE_CELL true RR_GF_NEAR_GROTTO true RR_GF_TOP_OF_LOWER_VINES true @@ -66,6 +77,7 @@ RR_GF_ABOVE_GTG true def RR_GF_TOP_OF_LOWER_VINES SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Top of Lower Vines +//Exits RR_TH_KITCHEN_TOP true RR_TH_DOUBLE_CELL true RR_GF_ABOVE_GTG true @@ -75,7 +87,9 @@ 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 +//Checks RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOMB_THROW) CanGetNightTimeGS)) +//Exits RR_TH_KITCHEN_TOP true RR_GF_BOTTOM_OF_LOWER_VINES true RR_GF_TOP_OF_LOWER_VINES true @@ -86,6 +100,7 @@ RR_GF_BELOW_GS true def RR_GF_SLOPED_ROOF SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Sloped Roof +//Exits RR_GF_TOP_OF_LOWER_VINES true RR_GF_NEAR_GS true RR_GF_BOTTOM_OF_UPPER_VINES true @@ -93,6 +108,7 @@ 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 +//Exits RR_GF_OUTSIDE_GTG true RR_GF_TOP_OF_LOWER_VINES true RR_GF_SLOPED_ROOF (and IsAdult (CanUse RG_HOVER_BOOTS)) @@ -101,7 +117,9 @@ 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 +//Checks RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_SHORT_JUMPSLASH) CanGetNightTimeGS)) +//Exits RR_GF_TOP_OF_LOWER_VINES true RR_GF_SLOPED_ROOF true RR_GF_BOTTOM_OF_UPPER_VINES true @@ -109,13 +127,16 @@ RR_GF_NEAR_CHEST (or (CanUse RG_HOVER_BOOTS) (or (and IsAdult (and (CanUse RG_SC def RR_GF_NEAR_CHEST SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Near Chest +//Checks RC_GF_CHEST true RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_BOOMERANG) CanGetNightTimeGS)) +//Exits 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 +//Exits 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)) @@ -125,17 +146,21 @@ RR_GF_BELOW_CHEST true def RR_GF_BELOW_GS SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Below GS +//Checks RC_GF_GS_TOP_FLOOR (and IsAdult (and (CanGetEnemyDrop RE_GOLD_SKULLTULA ED_LONGSHOT) CanGetNightTimeGS)) +//Exits 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 +//Exits RR_TH_BREAK_ROOM true RR_GF_OUTSKIRTS true def RR_GF_HBA_RANGE SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF HBA Range +//Checks 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)) @@ -154,13 +179,16 @@ RC_GF_NORTH_TARGET_WEST_CRATE (or IsAdult (or BlastOrSmash (or HookshotOrBoomera RC_GF_NORTH_TARGET_CHILD_CRATE (and IsChild BlastOrSmash) RC_GF_SOUTH_TARGET_EAST_CRATE CanBreakCrates RC_GF_SOUTH_TARGET_WEST_CRATE CanBreakCrates +//Exits 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 +//Checks 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 +//Exits RR_GF_OUTSKIRTS (!= RT_GF_JUMP 0) RR_GF_NEAR_CHEST (CanUse RG_LONGSHOT) RR_GF_BELOW_CHEST TakeDamage @@ -169,18 +197,23 @@ 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 +//Exits RR_GF_OUTSKIRTS true RR_GF_BELOW_CHEST true def RR_GF_OUTSIDE_GATE SCENE_GERUDOS_FORTRESS false RA_GERUDO_FORTRESS GF Outside Gate +//Events GF_GateOpen (and IsAdult (HasItem RG_GERUDO_MEMBERSHIP_CARD)) +//Exits RR_GF_OUTSKIRTS GF_GateOpen RR_WASTELAND_NEAR_FORTRESS true def RR_GF_STORMS_GROTTO SCENE_GROTTOS false GF Storms Grotto +//Events FreeFairies true +//Checks RC_GF_FAIRY_GROTTO_FAIRY_1 true RC_GF_FAIRY_GROTTO_FAIRY_2 true RC_GF_FAIRY_GROTTO_FAIRY_3 true @@ -189,4 +222,5 @@ 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 +//Exits 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 index d8c314de7..f9b476295 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_valley.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/gerudo_valley.s @@ -1,7 +1,10 @@ def RR_GERUDO_VALLEY SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY Gerudo Valley +//Events BugRock IsChild +//Checks RC_GV_GS_SMALL_BRIDGE (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) +//Exits 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)) @@ -12,9 +15,11 @@ RR_GV_LOWER_STREAM IsChild def RR_GV_UPPER_STREAM SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY GV Upper Stream +//Events GossipStoneFairy CallGossipFairy BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) //can use cucco as child +//Checks 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)) @@ -25,14 +30,17 @@ 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) +//Exits 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 +//Exits RR_LAKE_HYLIA true def RR_GV_GROTTO_LEDGE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY GV Grotto Ledge +//Exits 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) @@ -40,13 +48,16 @@ RR_GV_CRATE_LEDGE (CanUse RG_LONGSHOT) def RR_GV_CRATE_LEDGE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY GV Crate Ledge +//Checks RC_GV_CRATE_FREESTANDING_POH CanBreakCrates RC_GV_FREESTANDING_POH_CRATE CanBreakCrates +//Exits 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 +//Checks 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))) @@ -55,10 +66,12 @@ RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE (or (HasItem RG_BRONZE_SCALE) (or ( 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))) +//Exits RR_GV_GROTTO_LEDGE true def RR_GV_FORTRESS_SIDE SCENE_GERUDO_VALLEY true RA_GERUDO_VALLEY GV Fortress Side +//Checks 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)) @@ -67,6 +80,7 @@ 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) +//Exits 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)))) @@ -76,11 +90,14 @@ RR_GV_CRATE_LEDGE (and RT_DAMAGE_BOOST_SIMPLE HasExplosives) def RR_GV_CARPENTER_TENT SCENE_CARPENTERS_TENT false GV Carpenter Tent +//Exits RR_GV_FORTRESS_SIDE true def RR_GV_STORMS_GROTTO SCENE_GROTTOS false GV Storms Grotto +//Checks RC_GV_DEKU_SCRUB_GROTTO_REAR CanStunDeku RC_GV_DEKU_SCRUB_GROTTO_FRONT CanStunDeku RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE CanBreakUpperBeehives +//Exits 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 index 019d44a86..099be9c1d 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/goron_city.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/goron_city.s @@ -1,5 +1,6 @@ def RR_GORON_CITY SCENE_GORON_CITY false RA_GORON_CITY Goron City +//Events GossipStoneFairy CallGossipFairyExceptSuns StickPot IsChild BugRock (or BlastOrSmash (CanUse RG_SILVER_GAUNTLETS)) @@ -7,6 +8,7 @@ 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)))))))) +//Checks 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)) @@ -25,6 +27,7 @@ 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)) +//Exits RR_DEATH_MOUNTAIN_TRAIL true RR_GC_MEDIGORON (or CanBreakMudWalls (HasItem RG_GORONS_BRACELET)) RR_GC_WOODS_WARP GCWoodsWarpOpen @@ -34,35 +37,44 @@ RR_GC_GROTTO_PLATFORM (and IsAdult (or (and (CanUse RG_SONG_OF_TIME) (or (> Effe def RR_GC_MEDIGORON SCENE_GORON_CITY false RA_GORON_CITY GC Medigoron +//Checks 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 +//Exits RR_GORON_CITY true def RR_GC_WOODS_WARP SCENE_GORON_CITY false RA_GORON_CITY GC Woods Warp +//Events GCWoodsWarpOpen (or BlastOrSmash (CanUse RG_DINS_FIRE)) +//Exits RR_GORON_CITY GCWoodsWarpOpen RR_THE_LOST_WOODS true def RR_GC_DARUNIAS_CHAMBER SCENE_GORON_CITY false RA_GORON_CITY GC Darunias Chamber +//Events GoronCityChildFire (and IsChild (CanUse RG_STICKS)) +//Checks 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 +//Exits RR_GORON_CITY true RR_DMC_LOWER_LOCAL IsAdult def RR_GC_GROTTO_PLATFORM SCENE_GORON_CITY false RA_GORON_CITY GC Grotto Platform +//Exits 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 +//Checks RC_GC_SHOP_ITEM_1 true RC_GC_SHOP_ITEM_2 true RC_GC_SHOP_ITEM_3 true @@ -71,12 +83,15 @@ RC_GC_SHOP_ITEM_5 true RC_GC_SHOP_ITEM_6 true RC_GC_SHOP_ITEM_7 true RC_GC_SHOP_ITEM_8 true +//Exits RR_GORON_CITY true def RR_GC_GROTTO SCENE_GROTTOS false GC Grotto +//Checks 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 +//Exits 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 index ce3a6e248..b40ba2a88 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/graveyard.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/graveyard.s @@ -1,9 +1,11 @@ def RR_THE_GRAVEYARD SCENE_GRAVEYARD false RA_THE_GRAVEYARD The Graveyard +//Events 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)))) +//Checks 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)) @@ -25,6 +27,7 @@ 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) +//Exits RR_GRAVEYARD_SHIELD_GRAVE (or IsAdult AtNight) RR_GRAVEYARD_COMPOSERS_GRAVE (CanUse RG_ZELDAS_LULLABY) RR_GRAVEYARD_HEART_PIECE_GRAVE (or IsAdult AtNight) @@ -36,8 +39,10 @@ RR_GRAVEYARD_WARP_PAD_REGION false def RR_GRAVEYARD_DAMPES_GRAVE SCENE_WINDMILL_AND_DAMPES_GRAVE false Graveyard Dampes Grave +//Events NutPot true DampesWindmillAccess (and IsAdult (CanUse RG_SONG_OF_TIME)) +//Checks 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 @@ -54,22 +59,28 @@ 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 +//Exits 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 +//Checks RC_DAMPE_HINT IsAdult +//Exits RR_THE_GRAVEYARD true def RR_GRAVEYARD_SHIELD_GRAVE SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN false Graveyard Shield Grave +//Checks RC_GRAVEYARD_SHIELD_GRAVE_CHEST true +//Exits 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 +//Checks RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1 true RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2 true RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3 true @@ -78,26 +89,34 @@ 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 +//Exits RR_GRAVEYARD_SHIELD_GRAVE true def RR_GRAVEYARD_COMPOSERS_GRAVE SCENE_ROYAL_FAMILYS_TOMB false Graveyard Composers Grave +//Checks 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) +//Exits RR_THE_GRAVEYARD true def RR_GRAVEYARD_HEART_PIECE_GRAVE SCENE_REDEAD_GRAVE false Graveyard Heart Piece Grave +//Checks RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST (CanUse RG_SUNS_SONG) +//Exits RR_THE_GRAVEYARD true def RR_GRAVEYARD_WARP_PAD_REGION SCENE_GRAVEYARD false RA_THE_GRAVEYARD Graveyard Warp Pad Region +//Events GossipStoneFairy CallGossipFairyExceptSuns +//Checks RC_GRAVEYARD_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG (CanUse RG_SONG_OF_STORMS) RC_GRAVEYARD_GOSSIP_STONE true +//Exits 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 index 6b03e5764..ee58d74f5 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/haunted_wasteland.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/haunted_wasteland.s @@ -1,14 +1,18 @@ def RR_WASTELAND_NEAR_FORTRESS SCENE_HAUNTED_WASTELAND false RA_HAUNTED_WASTELAND Wasteland Near Fortress +//Checks RC_HW_BEFORE_QUICKSAND_CRATE CanBreakCrates +//Exits 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 +//Events FairyPot true NutPot true CarpetMerchant (and (HasItem RG_ADULT_WALLET) (and (CanBuyAnother RC_WASTELAND_BOMBCHU_SALESMAN) (or CanJumpslash (CanUse RG_HOVER_BOOTS)))) +//Checks RC_WASTELAND_CHEST HasFireSource RC_WASTELAND_BOMBCHU_SALESMAN (or CanJumpslash (CanUse RG_HOVER_BOOTS)) RC_WASTELAND_GS HookshotOrBoomerang @@ -19,11 +23,14 @@ 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 +//Exits 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 +//Checks RC_HW_NEAR_COLOSSUS_CRATE CanBreakCrates +//Exits 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 index 784089178..d2c8e9136 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/hyrule_field.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/hyrule_field.s @@ -1,7 +1,9 @@ def RR_HYRULE_FIELD SCENE_HYRULE_FIELD true RA_HYRULE_FIELD Hyrule Field +//Events 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)))))) +//Checks 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) @@ -53,6 +55,7 @@ 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 +//Exits RR_LW_BRIDGE true RR_LAKE_HYLIA true RR_GERUDO_VALLEY true @@ -71,10 +74,12 @@ RR_HF_TEKTITE_GROTTO CanOpenBombGrotto def RR_HF_SOUTHEAST_GROTTO SCENE_GROTTOS false HF Southeast Grotto +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_HF_SOUTHEAST_GROTTO_CHEST true RC_HF_SOUTHEAST_GROTTO_FISH HasBottle RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -86,14 +91,17 @@ 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 +//Exits RR_HYRULE_FIELD true def RR_HF_OPEN_GROTTO SCENE_GROTTOS false HF Open Grotto +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_HF_OPEN_GROTTO_CHEST true RC_HF_OPEN_GROTTO_FISH HasBottle RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -105,24 +113,30 @@ 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 +//Exits RR_HYRULE_FIELD true def RR_HF_INSIDE_FENCE_GROTTO SCENE_GROTTOS false HF Inside Fence Grotto +//Checks RC_HF_DEKU_SCRUB_GROTTO CanStunDeku RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE CanBreakLowerBeehives RC_HF_FENCE_GROTTO_STORMS_FAIRY (CanUse RG_SONG_OF_STORMS) +//Exits RR_HYRULE_FIELD true def RR_HF_COW_GROTTO SCENE_GROTTOS false HF Cow Grotto +//Exits 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 +//Events BugShrub CanCutShrubs GossipStoneFairy CallGossipFairy +//Checks 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 @@ -132,14 +146,17 @@ 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 +//Exits RR_HF_COW_GROTTO true def RR_HF_NEAR_MARKET_GROTTO SCENE_GROTTOS false HF Near Market Grotto +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_HF_NEAR_MARKET_GROTTO_CHEST true RC_HF_NEAR_MARKET_GROTTO_FISH HasBottle RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -151,11 +168,14 @@ 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 +//Exits RR_HYRULE_FIELD true def RR_HF_FAIRY_GROTTO SCENE_GROTTOS false HF Fairy Grotto +//Events FreeFairies true +//Checks RC_HF_FAIRY_GROTTO_FAIRY_1 true RC_HF_FAIRY_GROTTO_FAIRY_2 true RC_HF_FAIRY_GROTTO_FAIRY_3 true @@ -164,14 +184,19 @@ 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 +//Exits RR_HYRULE_FIELD true def RR_HF_NEAR_KAK_GROTTO SCENE_GROTTOS false HF Near Kak Grotto +//Checks RC_HF_GS_NEAR_KAK_GROTTO HookshotOrBoomerang +//Exits RR_HYRULE_FIELD true def RR_HF_TEKTITE_GROTTO SCENE_GROTTOS false HF Tektite Grotto +//Checks RC_HF_TEKTITE_GROTTO_FREESTANDING_POH (or (HasItem RG_GOLDEN_SCALE) (CanUse RG_IRON_BOOTS)) +//Exits RR_HYRULE_FIELD true diff --git a/soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s b/soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s index a5875a2f7..2ef87abb8 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/kakariko.s @@ -1,10 +1,12 @@ def RR_KAKARIKO_VILLAGE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE Kakariko Village +//Events 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))) +//Checks 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) @@ -50,6 +52,7 @@ 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) +//Exits RR_HYRULE_FIELD true RR_KAK_CARPENTER_BOSS_HOUSE (CanOpenOverworldDoor RG_BOSS_HOUSE_KEY) RR_KAK_HOUSE_OF_SKULLTULA (CanOpenOverworldDoor RG_SKULLTULA_HOUSE_KEY) @@ -71,44 +74,57 @@ RR_KAK_BACKYARD (or IsAdult AtDay) def RR_KAK_CARPENTER_BOSS_HOUSE SCENE_KAKARIKO_CENTER_GUEST_HOUSE false Kak Carpenter Boss House +//Events WakeUpAdultTalon (and IsAdult (CanUse RG_POCKET_EGG)) +//Exits RR_KAKARIKO_VILLAGE true def RR_KAK_HOUSE_OF_SKULLTULA SCENE_HOUSE_OF_SKULLTULA false Kak House of Skulltula +//Checks 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) +//Exits RR_KAKARIKO_VILLAGE true def RR_KAK_IMPAS_HOUSE SCENE_IMPAS_HOUSE false Kak Impas House +//Checks RC_KAK_IMPAS_HOUSE_COW (CanUse RG_EPONAS_SONG) +//Exits RR_KAKARIKO_VILLAGE true def RR_KAK_IMPAS_LEDGE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE Kak Impas Ledge +//Exits RR_KAK_IMPAS_HOUSE_BACK true RR_KAKARIKO_VILLAGE true def RR_KAK_IMPAS_HOUSE_BACK SCENE_IMPAS_HOUSE false Kak Impas House Back +//Checks RC_KAK_IMPAS_HOUSE_FREESTANDING_POH true RC_KAK_IMPAS_HOUSE_COW (CanUse RG_EPONAS_SONG) +//Exits RR_KAK_IMPAS_LEDGE true def RR_KAK_WINDMILL SCENE_WINDMILL_AND_DAMPES_GRAVE false Kak Windmill +//Events DrainWell (and IsChild (CanUse RG_SONG_OF_STORMS)) +//Checks 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)) +//Exits RR_KAKARIKO_VILLAGE true def RR_KAK_BAZAAR SCENE_BAZAAR false Kak Bazaar +//Checks RC_KAK_BAZAAR_ITEM_1 true RC_KAK_BAZAAR_ITEM_2 true RC_KAK_BAZAAR_ITEM_3 true @@ -117,15 +133,19 @@ RC_KAK_BAZAAR_ITEM_5 true RC_KAK_BAZAAR_ITEM_6 true RC_KAK_BAZAAR_ITEM_7 true RC_KAK_BAZAAR_ITEM_8 true +//Exits RR_KAKARIKO_VILLAGE true def RR_KAK_SHOOTING_GALLERY SCENE_SHOOTING_GALLERY false Kak Shooting Gallery +//Checks RC_KAK_SHOOTING_GALLERY_REWARD (and (HasItem RG_CHILD_WALLET) (and IsAdult (CanUse RG_FAIRY_BOW))) +//Exits RR_KAKARIKO_VILLAGE true def RR_KAK_POTION_SHOP_FRONT SCENE_POTION_SHOP_KAKARIKO false Kak Potion Shop Front +//Checks RC_KAK_POTION_SHOP_ITEM_1 IsAdult RC_KAK_POTION_SHOP_ITEM_2 IsAdult RC_KAK_POTION_SHOP_ITEM_3 IsAdult @@ -134,43 +154,54 @@ 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 +//Exits 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 +//Exits 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. +//Checks RC_KAK_GS_WATCHTOWER (and IsChild (and (CanUse RG_DINS_FIRE) CanGetNightTimeGS)) +//Exits 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 +//Checks RC_KAK_MAN_ON_ROOF true +//Exits RR_KAK_BACKYARD true RR_KAKARIKO_VILLAGE true def RR_KAK_IMPAS_ROOFTOP SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE Kak Impas Rooftop +//Checks RC_KAK_GS_ABOVE_IMPAS_HOUSE (and IsAdult (and CanGetNightTimeGS (CanKillEnemy RE_GOLD_SKULLTULA))) +//Exits RR_KAK_IMPAS_LEDGE true RR_KAKARIKO_VILLAGE true def RR_KAK_BEHIND_GATE SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE Kak Behind Gate +//Exits 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 +//Checks RC_KAK_NEAR_MEDICINE_SHOP_POT_1 (and IsChild CanBreakPots) RC_KAK_NEAR_MEDICINE_SHOP_POT_2 (and IsChild CanBreakPots) +//Exits RR_KAKARIKO_VILLAGE true RR_KAK_OPEN_GROTTO true RR_KAK_ODD_POTION_BUILDING (and IsAdult (CanOpenOverworldDoor RG_GRANNYS_POTION_SHOP_KEY)) @@ -178,26 +209,33 @@ RR_KAK_POTION_SHOP_BACK (and IsAdult (and AtDay (CanOpenOverworldDoor RG_KAK_POT def RR_KAK_WELL SCENE_KAKARIKO_VILLAGE true RA_KAKARIKO_VILLAGE Kak Well +//Exits 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 +//Checks 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))) +//Exits RR_KAK_BACKYARD true def RR_KAK_REDEAD_GROTTO SCENE_GROTTOS false Kak Redead Grotto +//Checks RC_KAK_REDEAD_GROTTO_CHEST (CanKillEnemy RE_REDEAD ED_CLOSE true 2) +//Exits RR_KAKARIKO_VILLAGE true def RR_KAK_OPEN_GROTTO SCENE_GROTTOS false Kak Open Grotto +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_KAK_OPEN_GROTTO_CHEST true RC_KAK_OPEN_GROTTO_FISH HasBottle RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -209,4 +247,5 @@ 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 +//Exits 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 index b719ad694..ed50d46b9 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/kokiri_forest.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/kokiri_forest.s @@ -1,8 +1,10 @@ def RR_KOKIRI_FOREST SCENE_KOKIRI_FOREST false RA_KOKIRI_FOREST Kokiri Forest +//Events 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))) +//Checks 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) @@ -66,6 +68,7 @@ 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) +//Exits RR_KF_LINKS_HOUSE true RR_KF_MIDOS_HOUSE true RR_KF_SARIAS_HOUSE true @@ -79,40 +82,51 @@ RR_KF_STORMS_GROTTO CanOpenStormsGrotto def RR_KF_LINKS_HOUSE SCENE_LINKS_HOUSE false KF Link's House +//Checks RC_KF_LINKS_HOUSE_COW (and IsAdult (and (CanUse RG_EPONAS_SONG) LinksCow)) RC_KF_LINKS_HOUSE_POT CanBreakPots +//Exits RR_KOKIRI_FOREST true def RR_KF_MIDOS_HOUSE SCENE_MIDOS_HOUSE false KF Mido's House +//Checks 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 +//Exits RR_KOKIRI_FOREST true def RR_KF_SARIAS_HOUSE SCENE_SARIAS_HOUSE false KF Saria's House +//Checks 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 +//Exits RR_KOKIRI_FOREST true def RR_KF_HOUSE_OF_TWINS SCENE_TWINS_HOUSE false KF House of Twins +//Checks RC_KF_TWINS_HOUSE_POT_1 CanBreakPots RC_KF_TWINS_HOUSE_POT_2 CanBreakPots +//Exits RR_KOKIRI_FOREST true def RR_KF_KNOW_IT_ALL_HOUSE SCENE_KNOW_IT_ALL_BROS_HOUSE false KF Know It All House +//Checks RC_KF_BROTHERS_HOUSE_POT_1 CanBreakPots RC_KF_BROTHERS_HOUSE_POT_2 CanBreakPots +//Exits RR_KOKIRI_FOREST true def RR_KF_KOKIRI_SHOP SCENE_KOKIRI_SHOP false KF Kokiri Shop +//Checks RC_KF_SHOP_ITEM_1 true RC_KF_SHOP_ITEM_2 true RC_KF_SHOP_ITEM_3 true @@ -121,28 +135,34 @@ RC_KF_SHOP_ITEM_5 true RC_KF_SHOP_ITEM_6 true RC_KF_SHOP_ITEM_7 true RC_KF_SHOP_ITEM_8 true +//Exits RR_KOKIRI_FOREST true def RR_KF_OUTSIDE_DEKU_TREE SCENE_KOKIRI_FOREST false RA_KOKIRI_FOREST KF Outside Deku Tree +//Events DekuBabaSticks CanGetDekuBabaSticks DekuBabaNuts CanGetDekuBabaNuts ShowedMidoSwordAndShield (and IsChild (and (CanUse RG_KOKIRI_SWORD) (CanUse RG_DEKU_SHIELD))) +//Checks 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 +//Exits 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 +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_KF_STORMS_GROTTO_CHEST true RC_KF_STORMS_GROTTO_FISH HasBottle RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -154,5 +174,6 @@ 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 +//Exits 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 index fd2e4d8f1..ade0e4f87 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/lake_hylia.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/lake_hylia.s @@ -1,11 +1,13 @@ def RR_LAKE_HYLIA SCENE_LAKE_HYLIA true RA_LAKE_HYLIA Lake Hylia +//Events 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))) +//Checks 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))) @@ -72,6 +74,7 @@ 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 +//Exits RR_HYRULE_FIELD true RR_LH_FROM_SHORTCUT true RR_LH_OWL_FLIGHT @deprioritize IsChild @@ -82,25 +85,30 @@ RR_LH_GROTTO true def RR_LH_FROM_SHORTCUT SCENE_LAKE_HYLIA false RA_LAKE_HYLIA LH From Shortcut +//Exits 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 +//Exits 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 +//Exits 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 +//Exits RR_HYRULE_FIELD @deprioritize true def RR_LH_LAB SCENE_LAKESIDE_LABORATORY false LH Lab +//Checks 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)) @@ -108,10 +116,12 @@ 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) +//Exits RR_LAKE_HYLIA true def RR_LH_FISHING_POND SCENE_FISHING_POND false LH Fishing Hole +//Checks 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))) @@ -149,12 +159,15 @@ RC_LH_ADULT_FISH_15 (and (CanUse RG_FISHING_POLE) (and IsAdult RSK_FISHSANITY_AG 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 +//Exits RR_LH_FISHING_ISLAND true def RR_LH_GROTTO SCENE_GROTTOS false LH Grotto +//Checks 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 +//Exits 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 index d1f791a85..8e9e3065d 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/lon_lon_ranch.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/lon_lon_ranch.s @@ -1,7 +1,9 @@ def RR_LON_LON_RANCH SCENE_LON_LON_RANCH true RA_LON_LON_RANCH Lon Lon Ranch +//Events 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))) +//Checks 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) @@ -15,6 +17,7 @@ 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) +//Exits RR_HYRULE_FIELD true RR_LLR_TALONS_HOUSE (CanOpenOverworldDoor RG_TALONS_HOUSE_KEY) RR_LLR_STABLES (CanOpenOverworldDoor RG_STABLES_KEY) @@ -23,29 +26,37 @@ RR_LLR_GROTTO IsChild def RR_LLR_TALONS_HOUSE SCENE_LON_LON_BUILDINGS false LLR Talons House +//Checks 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 +//Exits RR_LON_LON_RANCH true def RR_LLR_STABLES SCENE_STABLE false LLR Stables +//Checks RC_LLR_STABLES_LEFT_COW (CanUse RG_EPONAS_SONG) RC_LLR_STABLES_RIGHT_COW (CanUse RG_EPONAS_SONG) +//Exits RR_LON_LON_RANCH true def RR_LLR_TOWER SCENE_LON_LON_BUILDINGS false LLR Tower +//Checks RC_LLR_FREESTANDING_POH IsChild RC_LLR_TOWER_LEFT_COW (CanUse RG_EPONAS_SONG) RC_LLR_TOWER_RIGHT_COW (CanUse RG_EPONAS_SONG) +//Exits RR_LON_LON_RANCH true def RR_LLR_GROTTO SCENE_GROTTOS false LLR Grotto +//Checks 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 +//Exits 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 index 9580118da..ff5c078e0 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/lost_woods.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/lost_woods.s @@ -1,9 +1,11 @@ def RR_THE_LOST_WOODS SCENE_LOST_WOODS false RA_THE_LOST_WOODS Lost Woods +//Events 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)))) +//Checks 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 @@ -39,6 +41,7 @@ RC_LW_GOSSIP_STONE true RC_LW_GRASS_1 CanCutShrubs RC_LW_GRASS_2 CanCutShrubs RC_LW_GRASS_3 CanCutShrubs +//Exits 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))) @@ -48,22 +51,28 @@ 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 +//Checks RC_LW_GIFT_FROM_SARIA true +//Exits RR_LW_BRIDGE true def RR_LW_BRIDGE SCENE_LOST_WOODS false RA_THE_LOST_WOODS LW Bridge +//Exits 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 +//Exits RR_KOKIRI_FOREST true def RR_LW_BEYOND_MIDO SCENE_LOST_WOODS false RA_THE_LOST_WOODS LW Beyond Mido +//Events ButterflyFairy (CanUse RG_STICKS) +//Checks 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)) @@ -78,6 +87,7 @@ RC_LW_GRASS_6 CanCutShrubs RC_LW_GRASS_7 CanCutShrubs RC_LW_GRASS_8 CanCutShrubs RC_LW_GRASS_9 CanCutShrubs +//Exits RR_LW_FOREST_EXIT true RR_THE_LOST_WOODS (or IsChild (CanUse RG_SARIAS_SONG)) RR_SFM_ENTRYWAY true @@ -86,10 +96,12 @@ RR_LW_SCRUBS_GROTTO (Here BlastOrSmash) def RR_LW_NEAR_SHORTCUTS_GROTTO SCENE_GROTTOS false LW Near Shortcuts Grotto +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST true RC_LW_NEAR_SHORTCUTS_GROTTO_FISH HasBottle RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -101,19 +113,24 @@ 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 +//Exits RR_THE_LOST_WOODS true def RR_DEKU_THEATER SCENE_GROTTOS false Deku Theater +//Checks RC_DEKU_THEATER_SKULL_MASK (and IsChild BorrowSkullMask) RC_DEKU_THEATER_MASK_OF_TRUTH (and IsChild BorrowRightMasks) +//Exits RR_LW_BEYOND_MIDO true def RR_LW_SCRUBS_GROTTO SCENE_GROTTOS false LW Scrubs Grotto +//Checks 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) +//Exits 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 index f6bb6fde5..be301f662 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/market.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/market.s @@ -1,5 +1,6 @@ def RR_MARKET_ENTRANCE SCENE_MARKET_ENTRANCE_DAY false RA_THE_MARKET Market Entrance +//Exits RR_HYRULE_FIELD (or IsAdult AtDay) RR_THE_MARKET true RR_MARKET_GUARD_HOUSE (CanOpenOverworldDoor RG_GUARD_HOUSE_KEY) @@ -7,6 +8,7 @@ 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 +//Checks 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))) @@ -19,6 +21,7 @@ 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 +//Exits RR_MARKET_ENTRANCE true RR_TOT_ENTRANCE true RR_CASTLE_GROUNDS true @@ -32,7 +35,9 @@ RR_MARKET_BACK_ALLEY IsChild def RR_MARKET_GUARD_HOUSE SCENE_MARKET_GUARD_HOUSE false Market Guard House +//Events CanEmptyBigPoes IsAdult +//Checks 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) @@ -95,10 +100,12 @@ 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) +//Exits RR_MARKET_ENTRANCE true def RR_MARKET_BAZAAR SCENE_BAZAAR false Market Bazaar +//Checks RC_MARKET_BAZAAR_ITEM_1 true RC_MARKET_BAZAAR_ITEM_2 true RC_MARKET_BAZAAR_ITEM_3 true @@ -107,6 +114,7 @@ RC_MARKET_BAZAAR_ITEM_5 true RC_MARKET_BAZAAR_ITEM_6 true RC_MARKET_BAZAAR_ITEM_7 true RC_MARKET_BAZAAR_ITEM_8 true +//Exits RR_THE_MARKET true def RR_MARKET_MASK_SHOP SCENE_HAPPY_MASK_SHOP false @@ -114,28 +122,37 @@ 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 +//Events 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) +//Checks RC_MASK_SHOP_HINT true +//Exits RR_THE_MARKET true def RR_MARKET_SHOOTING_GALLERY SCENE_SHOOTING_GALLERY false Market Shooting Gallery +//Checks RC_MARKET_SHOOTING_GALLERY_REWARD (and IsChild (HasItem RG_CHILD_WALLET)) +//Exits RR_THE_MARKET true def RR_MARKET_BOMBCHU_BOWLING SCENE_BOMBCHU_BOWLING_ALLEY false Market Bombchu Bowling +//Events CouldPlayBowling (HasItem RG_CHILD_WALLET) +//Checks RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE (and CouldPlayBowling BombchusEnabled) RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE (and CouldPlayBowling BombchusEnabled) +//Exits RR_THE_MARKET true def RR_MARKET_TREASURE_CHEST_GAME SCENE_TREASURE_BOX_SHOP false Market Treasure Chest Game +//Checks 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 SCENE_TREASURE_BOX_SHOP 6)) (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys SCENE_TREASURE_BOX_SHOP 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 SCENE_TREASURE_BOX_SHOP 1)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys SCENE_TREASURE_BOX_SHOP 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) @@ -148,10 +165,12 @@ RC_MARKET_TREASURE_CHEST_GAME_KEY_4 (and (HasItem RG_CHILD_WALLET) (or (and (== RC_MARKET_TREASURE_CHEST_GAME_ITEM_4 (and (HasItem RG_CHILD_WALLET) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_SINGLE_KEYS) (SmallKeys SCENE_TREASURE_BOX_SHOP 4)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys SCENE_TREASURE_BOX_SHOP 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 SCENE_TREASURE_BOX_SHOP 5)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys SCENE_TREASURE_BOX_SHOP 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 SCENE_TREASURE_BOX_SHOP 5)) (or (and (== RSK_SHUFFLE_CHEST_MINIGAME RO_CHEST_GAME_PACK) (SmallKeys SCENE_TREASURE_BOX_SHOP 1)) (and (CanUse RG_LENS_OF_TRUTH) (not RSK_SHUFFLE_CHEST_MINIGAME))))) +//Exits RR_THE_MARKET true def RR_MARKET_POTION_SHOP SCENE_POTION_SHOP_MARKET false Market Potion Shop +//Checks RC_MARKET_POTION_SHOP_ITEM_1 true RC_MARKET_POTION_SHOP_ITEM_2 true RC_MARKET_POTION_SHOP_ITEM_3 true @@ -160,10 +179,12 @@ 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 +//Exits RR_THE_MARKET true def RR_MARKET_BACK_ALLEY SCENE_BACK_ALLEY_DAY false RA_THE_MARKET Market Back Alley +//Exits 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) @@ -171,6 +192,7 @@ RR_MARKET_MAN_IN_GREEN_HOUSE (and AtNight (CanOpenOverworldDoor RG_ALLEY_HOUSE_K def RR_MARKET_BOMBCHU_SHOP SCENE_BOMBCHU_SHOP false Market Bombchu Shop +//Checks RC_MARKET_BOMBCHU_SHOP_ITEM_1 true RC_MARKET_BOMBCHU_SHOP_ITEM_2 true RC_MARKET_BOMBCHU_SHOP_ITEM_3 true @@ -179,24 +201,31 @@ 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 +//Exits RR_MARKET_BACK_ALLEY true def RR_MARKET_DOG_LADY_HOUSE SCENE_DOG_LADY_HOUSE false Market Dog Lady House +//Checks RC_MARKET_LOST_DOG (and IsChild AtNight) RC_MK_LOST_DOG_HOUSE_CRATE CanBreakCrates +//Exits RR_MARKET_BACK_ALLEY true def RR_MARKET_MAN_IN_GREEN_HOUSE SCENE_BACK_ALLEY_HOUSE false Market Man in Green House +//Checks RC_MK_BACK_ALLEY_HOUSE_POT_1 CanBreakPots RC_MK_BACK_ALLEY_HOUSE_POT_2 CanBreakPots RC_MK_BACK_ALLEY_HOUSE_POT_3 CanBreakPots +//Exits RR_MARKET_BACK_ALLEY true def RR_TOT_ENTRANCE SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY false RA_THE_MARKET ToT Entrance +//Events GossipStoneFairy CallGossipFairyExceptSuns +//Checks 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)) @@ -209,21 +238,26 @@ 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 +//Exits 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 +//Checks RC_TOT_LIGHT_ARROWS_CUTSCENE (and IsAdult CanTriggerLACS) RC_ALTAR_HINT_CHILD IsChild RC_ALTAR_HINT_ADULT IsAdult RC_TOT_SHEIK_HINT IsAdult +//Exits 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 +//Checks RC_TOT_MASTER_SWORD IsAdult RC_GIFT_FROM_RAURU IsAdult RC_SHEIK_AT_TEMPLE (and (HasItem RG_FOREST_MEDALLION) IsAdult) +//Exits 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 index 2288323b2..e9e86ce9e 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/sacred_forest_meadow.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/sacred_forest_meadow.s @@ -1,12 +1,15 @@ def RR_SFM_ENTRYWAY SCENE_SACRED_FOREST_MEADOW false RA_SACRED_FOREST_MEADOW SFM Entryway +//Exits 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 +//Events GossipStoneFairy CallGossipFairyExceptSuns +//Checks RC_SONG_FROM_SARIA (and IsChild (HasItem RG_ZELDAS_LETTER)) RC_SHEIK_IN_FOREST IsAdult RC_SFM_GS (and IsAdult (and HookshotOrBoomerang CanGetNightTimeGS)) @@ -19,6 +22,7 @@ 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 +//Exits RR_SFM_ENTRYWAY true RR_FOREST_TEMPLE_ENTRYWAY (CanUse RG_HOOKSHOT) RR_SFM_FAIRY_GROTTO true @@ -26,12 +30,16 @@ RR_SFM_STORMS_GROTTO CanOpenStormsGrotto def RR_SFM_WOLFOS_GROTTO SCENE_GROTTOS false SFM Wolfos Grotto +//Checks RC_SFM_WOLFOS_GROTTO_CHEST (CanKillEnemy RE_WOLFOS ED_CLOSE true 2) +//Exits RR_SFM_ENTRYWAY true def RR_SFM_FAIRY_GROTTO SCENE_GROTTOS false SFM Fairy Grotto +//Events FreeFairies true +//Checks RC_SFM_FAIRY_GROTTO_FAIRY_1 true RC_SFM_FAIRY_GROTTO_FAIRY_2 true RC_SFM_FAIRY_GROTTO_FAIRY_3 true @@ -40,11 +48,14 @@ 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 +//Exits RR_SACRED_FOREST_MEADOW true def RR_SFM_STORMS_GROTTO SCENE_GROTTOS false SFM Storms Grotto +//Checks RC_SFM_DEKU_SCRUB_GROTTO_REAR CanStunDeku RC_SFM_DEKU_SCRUB_GROTTO_FRONT CanStunDeku RC_SFM_STORMS_GROTTO_BEEHIVE CanBreakUpperBeehives +//Exits 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 index eb6bcf689..09486303d 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/thieves_hideout.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/thieves_hideout.s @@ -1,20 +1,25 @@ def RR_TH_1_TORCH_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS Thieves Hideout 1 Torch Cell +//Events THCouldFree1TorchCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) THRescuedAllCarpenters (and (SmallKeys SCENE_THIEVES_HIDEOUT (if (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) 4 1)) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter)))) +//Checks 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 +//Exits 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 +//Events THCouldFreeDoubleCellCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys SCENE_THIEVES_HIDEOUT 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) +//Checks 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 @@ -26,69 +31,85 @@ 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 +//Exits 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 +//Events TH_CouldFreeDeadEndCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys SCENE_THIEVES_HIDEOUT 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) +//Checks RC_TH_DEAD_END_CARPENTER (CanKillEnemy RE_GERUDO_WARRIOR) RC_TH_DEAD_END_CELL_CRATE CanBreakCrates RC_TH_FREED_CARPENTERS THRescuedAllCarpenters +//Exits RR_GF_BELOW_GS true def RR_TH_STEEP_SLOPE_CELL SCENE_THIEVES_HIDEOUT false RA_GERUDO_FORTRESS Thieves Hideout Steep Slope Cell +//Events THCouldRescueSlopeCarpenter (CanKillEnemy RE_GERUDO_WARRIOR) THRescuedAllCarpenters (and (== RSK_GERUDO_FORTRESS RO_GF_CARPENTERS_NORMAL) (and (SmallKeys SCENE_THIEVES_HIDEOUT 4) (and THCouldFree1TorchCarpenter (and THCouldFreeDoubleCellCarpenter (and TH_CouldFreeDeadEndCarpenter THCouldRescueSlopeCarpenter))))) +//Checks 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 +//Exits 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 +//Checks 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 +//Exits 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 +//Checks 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)) +//Exits 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 +//Checks RC_TH_KITCHEN_POT_1 (CanUse RG_BOOMERANG) RC_TH_KITCHEN_POT_2 (CanUse RG_BOOMERANG) +//Exits 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 +//Checks 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)))) +//Exits 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 +//Exits 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 index 6f04b77a4..e441dfd6c 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/zoras_domain.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_domain.s @@ -1,11 +1,13 @@ def RR_ZORAS_DOMAIN SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN Zoras Domain +//Events 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))) +//Checks 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) @@ -26,6 +28,7 @@ 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 +//Exits 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)))) @@ -34,18 +37,23 @@ RR_ZORAS_DOMAIN_ISLAND true def RR_ZORAS_DOMAIN_ISLAND SCENE_ZORAS_DOMAIN false RA_ZORAS_DOMAIN Zoras Domain Island +//Exits 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 +//Events KingZoraThawed (and IsAdult BlueFire) +//Checks RC_ZD_BEHIND_KING_ZORA_BEEHIVE (and IsChild CanBreakUpperBeehives) +//Exits 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 +//Checks RC_ZD_SHOP_ITEM_1 true RC_ZD_SHOP_ITEM_2 true RC_ZD_SHOP_ITEM_3 true @@ -54,11 +62,14 @@ RC_ZD_SHOP_ITEM_5 true RC_ZD_SHOP_ITEM_6 true RC_ZD_SHOP_ITEM_7 true RC_ZD_SHOP_ITEM_8 true +//Exits RR_ZORAS_DOMAIN true def RR_ZD_STORMS_GROTTO SCENE_GROTTOS false ZD Storms Grotto +//Events FreeFairies true +//Checks RC_ZD_FAIRY_GROTTO_FAIRY_1 true RC_ZD_FAIRY_GROTTO_FAIRY_2 true RC_ZD_FAIRY_GROTTO_FAIRY_3 true @@ -67,4 +78,5 @@ 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 +//Exits 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 index 875cd435e..45ca40c24 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/zoras_fountain.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_fountain.s @@ -1,7 +1,9 @@ def RR_ZORAS_FOUNTAIN SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN Zoras Fountain +//Events GossipStoneFairy CallGossipFairyExceptSuns ButterflyFairy (and (CanUse RG_STICKS) AtDay) +//Checks RC_ZF_GS_TREE IsChild RC_ZF_GS_ABOVE_THE_LOG (and IsChild (and HookshotOrBoomerang CanGetNightTimeGS)) RC_ZF_FAIRY_GOSSIP_STONE_FAIRY CallGossipFairyExceptSuns @@ -14,6 +16,7 @@ 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) +//Exits RR_ZD_BEHIND_KING_ZORA true RR_ZF_ICEBERGS IsAdult RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) @@ -25,13 +28,16 @@ RR_ZF_GREAT_FAIRY_FOUNTAIN (or HasExplosives (and RT_ZF_GREAT_FAIRY_WITHOUT_EXPL def RR_ZF_ICEBERGS SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN ZF Icebergs +//Checks RC_ZF_ICEBERG_FREESTANDING_POH IsAdult +//Exits 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 +//Checks 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))) @@ -51,10 +57,12 @@ RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE (and IsAdult (and (CanUse RG_IRON_BOOTS) (>= 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))) +//Exits RR_ZORAS_FOUNTAIN (HasItem RG_BRONZE_SCALE) def RR_ZF_LEDGE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN ZF Ledge +//Exits RR_ZORAS_FOUNTAIN (HasItem RG_BRONZE_SCALE) RR_ZF_ICEBERGS IsAdult RR_ZF_LAKEBED (CanUse RG_IRON_BOOTS) @@ -62,26 +70,33 @@ RR_ICE_CAVERN_ENTRYWAY true def RR_ZF_HIDDEN_CAVE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN ZF Hidden Cave +//Checks 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 +//Exits RR_ZF_HIDDEN_LEDGE true def RR_ZF_HIDDEN_LEDGE SCENE_ZORAS_FOUNTAIN false RA_ZORAS_FOUNTAIN ZF Hidden Ledge +//Checks 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 +//Exits 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 +//Exits RR_ZORAS_FOUNTAIN true def RR_ZF_GREAT_FAIRY_FOUNTAIN SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS false ZF Great Fairy Fountain +//Checks RC_ZF_GREAT_FAIRY_REWARD (CanUse RG_ZELDAS_LULLABY) +//Exits 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 index 4b45836ab..3ead9c82a 100644 --- a/soh/soh/Enhancements/randomizer/logic/overworld/zoras_river.s +++ b/soh/soh/Enhancements/randomizer/logic/overworld/zoras_river.s @@ -1,5 +1,6 @@ def RR_ZR_FRONT SCENE_ZORAS_RIVER true RA_ZORAS_RIVER ZR Front +//Checks RC_ZR_GS_TREE (and IsChild (CanKillEnemy RE_GOLD_SKULLTULA ED_CLOSE)) RC_ZR_GRASS_1 CanCutShrubs RC_ZR_GRASS_2 CanCutShrubs @@ -13,15 +14,18 @@ RC_ZR_GRASS_9 CanCutShrubs RC_ZR_GRASS_10 CanCutShrubs RC_ZR_GRASS_11 CanCutShrubs RC_ZR_GRASS_12 CanCutShrubs +//Exits RR_ZORAS_RIVER (or IsAdult BlastOrSmash) RR_HYRULE_FIELD true def RR_ZORAS_RIVER SCENE_ZORAS_RIVER true RA_ZORAS_RIVER Zora River +//Events GossipStoneFairy CallGossipFairy BeanPlantFairy (and IsChild (and (CanUse RG_MAGIC_BEAN) (CanUse RG_SONG_OF_STORMS))) ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs +//Checks 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)) @@ -49,6 +53,7 @@ RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE (and IsAdult (or (HasItem RG_BRONZE_SCALE) ( RC_ZR_NEAR_GROTTOS_GOSSIP_STONE true RC_ZR_NEAR_DOMAIN_GOSSIP_STONE true RC_ZR_NEAR_FREESTANDING_POH_GRASS CanCutShrubs +//Exits RR_ZR_FRONT true RR_ZR_OPEN_GROTTO true RR_ZR_FAIRY_GROTTO (Here BlastOrSmash) @@ -58,20 +63,24 @@ RR_ZR_BEHIND_WATERFALL (or (== RSK_SLEEPING_WATERFALL RO_WATERFALL_OPEN) (or (He def RR_ZR_FROM_SHORTCUT SCENE_ZORAS_RIVER false RA_ZORAS_RIVER ZR From Shortcut +//Exits 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 +//Exits RR_ZORAS_RIVER true RR_ZORAS_DOMAIN true def RR_ZR_OPEN_GROTTO SCENE_GROTTOS false ZR Open Grotto +//Events GossipStoneFairy CallGossipFairy ButterflyFairy (CanUse RG_STICKS) BugShrub CanCutShrubs LoneFish true +//Checks RC_ZR_OPEN_GROTTO_CHEST true RC_ZR_OPEN_GROTTO_FISH HasBottle RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY CallGossipFairy @@ -83,11 +92,14 @@ 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 +//Exits RR_ZORAS_RIVER true def RR_ZR_FAIRY_GROTTO SCENE_GROTTOS false ZR Fairy Grotto +//Events FreeFairies true +//Checks RC_ZR_FAIRY_GROTTO_FAIRY_1 true RC_ZR_FAIRY_GROTTO_FAIRY_2 true RC_ZR_FAIRY_GROTTO_FAIRY_3 true @@ -96,11 +108,14 @@ 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 +//Exits RR_ZORAS_RIVER true def RR_ZR_STORMS_GROTTO SCENE_GROTTOS false ZR Storms Grotto +//Checks RC_ZR_DEKU_SCRUB_GROTTO_REAR CanStunDeku RC_ZR_DEKU_SCRUB_GROTTO_FRONT CanStunDeku RC_ZR_STORMS_GROTTO_BEEHIVE CanBreakUpperBeehives +//Exits RR_ZORAS_RIVER true diff --git a/soh/soh/Enhancements/randomizer/logic/root.s b/soh/soh/Enhancements/randomizer/logic/root.s index c5ed16af3..99895d607 100644 --- a/soh/soh/Enhancements/randomizer/logic/root.s +++ b/soh/soh/Enhancements/randomizer/logic/root.s @@ -1,18 +1,22 @@ def RR_ROOT SCENE_ID_MAX false RA_LINKS_POCKET Root +//Events 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) +//Checks RC_LINKS_POCKET true RC_TRIFORCE_COMPLETED (>= TriforcePiecesCollected (add RSK_TRIFORCE_HUNT_PIECES_REQUIRED 1)) RC_SARIA_SONG_HINT (CanUse RG_SARIAS_SONG) +//Exits RR_ROOT_EXITS true def RR_ROOT_EXITS SCENE_ID_MAX false RA_LINKS_POCKET Root Exits +//Exits RR_CHILD_SPAWN IsChild RR_ADULT_SPAWN IsAdult RR_MINUET_OF_FOREST_WARP (CanUse RG_MINUET_OF_FOREST) @@ -24,32 +28,40 @@ RR_PRELUDE_OF_LIGHT_WARP (CanUse RG_PRELUDE_OF_LIGHT) def RR_CHILD_SPAWN SCENE_ID_MAX false RA_LINKS_POCKET Child Spawn +//Exits RR_KF_LINKS_HOUSE true def RR_ADULT_SPAWN SCENE_ID_MAX false RA_LINKS_POCKET Adult Spawn +//Exits RR_TEMPLE_OF_TIME true def RR_MINUET_OF_FOREST_WARP SCENE_ID_MAX false RA_LINKS_POCKET Minuet of Forest Warp +//Exits RR_SACRED_FOREST_MEADOW true def RR_BOLERO_OF_FIRE_WARP SCENE_ID_MAX false RA_LINKS_POCKET Bolero of Fire Warp +//Exits RR_DMC_CENTRAL_LOCAL true def RR_SERENADE_OF_WATER_WARP SCENE_ID_MAX false RA_LINKS_POCKET Serenade of Water Warp +//Exits RR_LAKE_HYLIA true def RR_REQUIEM_OF_SPIRIT_WARP SCENE_ID_MAX false RA_LINKS_POCKET Requiem of Spirit Warp +//Exits RR_DESERT_COLOSSUS true def RR_NOCTURNE_OF_SHADOW_WARP SCENE_ID_MAX false RA_LINKS_POCKET Nocturne of Shadow Warp +//Exits RR_GRAVEYARD_WARP_PAD_REGION true def RR_PRELUDE_OF_LIGHT_WARP SCENE_ID_MAX false RA_LINKS_POCKET Prelude of Light Warp +//Exits RR_TEMPLE_OF_TIME true