diff options
| author | Josh Bodner <30329717+jbodner09@users.noreply.github.com> | 2022-11-18 15:42:58 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-18 18:42:58 -0500 |
| commit | 2c0ec96eff77ff62e17d4fae7ed8fcfdcd5a85e0 (patch) | |
| tree | c34a6922629ec30913598d39e468d0fb01d1d0cd /soh/src/code | |
| parent | d141876af4c8677350958716c845a16ec4b18c5a (diff) | |
Fix credits timing (#1254)
* Fix credits timing
* Add documentation
* Fix typo
Diffstat (limited to 'soh/src/code')
| -rw-r--r-- | soh/src/code/z_demo.c | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/soh/src/code/z_demo.c b/soh/src/code/z_demo.c index 4133d4dab..9eeb3bfa8 100644 --- a/soh/src/code/z_demo.c +++ b/soh/src/code/z_demo.c @@ -511,7 +511,54 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB temp = 1; } - if ((csCtx->frames == cmd->startFrame) || (temp != 0) || ((csCtx->frames > 20) && (randoCsSkip || debugCsSkip))) { + bool playCutscene = false; + if (!CVar_GetS32("gCreditsFix", 1) && (cmd->startFrame == csCtx->frames)) { + playCutscene = true; + } else if (CVar_GetS32("gCreditsFix", 1)) { + u16 delay = 0; + + // HACK: Align visual timing with audio during credits sequence + switch (cmd->base) { + case 55: // Gerudo fortress (second scene of credits roll) + delay = 20; + break; + case 56: // Kakariko village + delay = 40; + break; + case 57: // Death mountain trail + delay = 20; + break; + case 58: // Goron city + delay = 20; + break; + case 59: // Lake hylia + delay = 20; + break; + case 62: // Kokiri forest (houses) + delay = 40; + break; + case 63: // Kokiri forest (deku tree) + delay = 40; + break; + case 74: // First gorons dancing + delay = 100; + break; + case 75: // Magic carpet guy and old shop keepers + delay = 180; + break; + case 77: // Sad mido and king zora (plays after scene 78) + delay = 100; + break; + case 78: // Second gorons dancing + delay = 160; + break; + } + if (cmd->startFrame + delay == csCtx->frames) { + playCutscene = true; + } + } + + if (playCutscene || (temp != 0) || ((csCtx->frames > 20) && (randoCsSkip || debugCsSkip))) { csCtx->state = CS_STATE_UNSKIPPABLE_EXEC; Audio_SetCutsceneFlag(0); |
