summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Longstaff <JordanLongstaff@users.noreply.github.com>2024-12-09 11:13:45 -0500
committerGitHub <noreply@github.com>2024-12-09 09:13:45 -0700
commitd0bfa6860b554a73cc1aeb4d025be4f26ee84b01 (patch)
treeed21c43787e467f0c002e2b52b14fcc7d67b57a8
parent4010229de5482cdd756bf2aaf1c7499e333730f7 (diff)
Skip the Mweep cutscene (#4646)
* Skip the Mweep cutscene * Fix bug: Ruto's letter was not removed from bottle
-rw-r--r--soh/soh/Enhancements/game-interactor/GameInteractor.h2
-rw-r--r--soh/soh/Enhancements/timesaver_hook_handlers.cpp8
-rw-r--r--soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c30
3 files changed, 30 insertions, 10 deletions
diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h
index e73120501..8aa37a580 100644
--- a/soh/soh/Enhancements/game-interactor/GameInteractor.h
+++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h
@@ -309,6 +309,8 @@ typedef enum {
// Vanilla condition: !EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL
VB_PLAY_PULL_MASTER_SWORD_CS,
VB_PLAY_DROP_FISH_FOR_JABU_CS,
+ // Opt: *EnKz
+ VB_PLAY_MWEEP_CS,
// Vanilla condition: player->getItemId == GI_GAUNTLETS_SILVER
VB_PLAY_NABOORU_CAPTURED_CS,
VB_PLAY_ZELDAS_LULLABY_CS,
diff --git a/soh/soh/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp
index 9fd658bc3..64ce4cfb5 100644
--- a/soh/soh/Enhancements/timesaver_hook_handlers.cpp
+++ b/soh/soh/Enhancements/timesaver_hook_handlers.cpp
@@ -404,6 +404,14 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
}
break;
}
+ case VB_PLAY_MWEEP_CS: {
+ if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), 0)) {
+ *should = false;
+ Inventory_ReplaceItem(gPlayState, ITEM_LETTER_RUTO, ITEM_BOTTLE);
+ Flags_SetEventChkInf(EVENTCHKINF_KING_ZORA_MOVED);
+ }
+ break;
+ }
case VB_PLAY_EYEDROP_CREATION_ANIM:
case VB_PLAY_EYEDROPS_CS:
case VB_PLAY_DROP_FISH_FOR_JABU_CS:
diff --git a/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c b/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c
index d5f14c959..79b719734 100644
--- a/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c
+++ b/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c
@@ -437,17 +437,23 @@ void EnKz_SetupMweep(EnKz* this, PlayState* play) {
Vec3f pos;
Vec3f initPos;
- this->cutsceneCamera = Play_CreateSubCamera(play);
- this->gameplayCamera = play->activeCamera;
- Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_WAIT);
- Play_ChangeCameraStatus(play, this->cutsceneCamera, CAM_STAT_ACTIVE);
+ bool shouldPlayCutscene = GameInteractor_Should(VB_PLAY_MWEEP_CS, true);
+
+ if (shouldPlayCutscene) {
+ this->cutsceneCamera = Play_CreateSubCamera(play);
+ this->gameplayCamera = play->activeCamera;
+ Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_WAIT);
+ Play_ChangeCameraStatus(play, this->cutsceneCamera, CAM_STAT_ACTIVE);
+ }
pos = this->actor.world.pos;
initPos = this->actor.home.pos;
pos.y += 60.0f;
initPos.y += -100.0f;
initPos.z += 260.0f;
- Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos);
- Player_SetCsActionWithHaltedActors(play, &this->actor, 8);
+ if (shouldPlayCutscene) {
+ Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos);
+ Player_SetCsActionWithHaltedActors(play, &this->actor, 8);
+ }
this->actor.speedXZ = 0.1f * CVarGetFloat(CVAR_ENHANCEMENT("MweepSpeed"), 1.0f);
this->actionFunc = EnKz_Mweep;
}
@@ -462,7 +468,9 @@ void EnKz_Mweep(EnKz* this, PlayState* play) {
pos.y += 60.0f;
initPos.y += -100.0f;
initPos.z += 260.0f;
- Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos);
+ if (GameInteractor_Should(VB_PLAY_MWEEP_CS, true)) {
+ Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos);
+ }
if ((EnKz_FollowPath(this, play) == 1) && (this->waypoint == 0)) {
Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_1);
Inventory_ReplaceItem(play, ITEM_LETTER_RUTO, ITEM_BOTTLE);
@@ -477,9 +485,11 @@ void EnKz_Mweep(EnKz* this, PlayState* play) {
}
void EnKz_StopMweep(EnKz* this, PlayState* play) {
- Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_ACTIVE);
- Play_ClearCamera(play, this->cutsceneCamera);
- Player_SetCsActionWithHaltedActors(play, &this->actor, 7);
+ if (GameInteractor_Should(VB_PLAY_MWEEP_CS, true)) {
+ Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_ACTIVE);
+ Play_ClearCamera(play, this->cutsceneCamera);
+ Player_SetCsActionWithHaltedActors(play, &this->actor, 7);
+ }
this->actionFunc = EnKz_Wait;
}