diff --git a/soh/soh/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp index 2ac7cc3c1..aca6f302e 100644 --- a/soh/soh/Enhancements/timesaver_hook_handlers.cpp +++ b/soh/soh/Enhancements/timesaver_hook_handlers.cpp @@ -297,9 +297,10 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li } switch (actor->id) { case ACTOR_OBJ_SWITCH: { + // The DC boss door can be unlocked with OI; One Point is required for it + // The Water Temple Dragon Room chest can be obtained with a cutscene dive if (((actor->params == 8224 && gPlayState->sceneNum == SCENE_DODONGOS_CAVERN) || - (actor->params == 6979 && gPlayState->sceneNum == SCENE_WATER_TEMPLE) || - (actor->params == 8961 && gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE)) && + (actor->params == 6979 && gPlayState->sceneNum == SCENE_WATER_TEMPLE)) && CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) { break; } @@ -312,9 +313,12 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li case ACTOR_BG_BDAN_SWITCH: { // The switch in jabu that you are intended to press with a box to reach barinade // can be skipped by either a frame perfect roll open or with OI + // Additionally, the blue switch that you are intended to press with Ruto + // can be skipped with OI // The One Point for that switch is used in common setups for the former and is required for the // latter to work - if (actor->params == 14848 && gPlayState->sceneNum == SCENE_JABU_JABU && + if ((actor->params == 14848 || actor->params == 14336) && + gPlayState->sceneNum == SCENE_JABU_JABU && CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) { break; } @@ -339,6 +343,7 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li break; } case ACTOR_EN_BOX: { + // The chest that drops in MQ Jabu allowing unintended door entry if (actor->params == -30457 && gPlayState->sceneNum == SCENE_JABU_JABU && CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) { break; @@ -348,6 +353,17 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li RateLimitedSuccessChime(); break; } + case ACTOR_EN_SIOFUKI: { + // The Spirit Temple MQ water jet cutscene is required for an actor glitch + // setup that skips the grate + if (actor->params == 6359 && gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE && + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) { + *should = true; + break; + } + *should = false; + break; + } case ACTOR_BG_HIDAN_FWBIG: case ACTOR_EN_EX_ITEM: case ACTOR_EN_DNT_NOMAL: @@ -357,7 +373,17 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li break; } case ACTOR_EN_TA: - case ACTOR_DOOR_SHUTTER: + case ACTOR_DOOR_SHUTTER: { + // The shutter cutscene occurs post-switch cutscene to focus Link on the unlocked doors + if (((actor->params == 9402 && gPlayState->sceneNum == SCENE_JABU_JABU) || + (actor->params == 20460 && gPlayState->sceneNum == SCENE_DODONGOS_CAVERN)) && + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) { + break; + } + *should = false; + RateLimitedSuccessChime(); + break; + } case ACTOR_BG_ICE_SHUTTER: case ACTOR_OBJ_LIGHTSWITCH: case ACTOR_OBJ_SYOKUDAI: