Fix credits timing (#1254)

* Fix credits timing

* Add documentation

* Fix typo
This commit is contained in:
Josh Bodner 2022-11-18 15:42:58 -08:00 committed by GitHub
parent d141876af4
commit 2c0ec96eff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 1 deletions

View File

@ -314,6 +314,8 @@ namespace GameMenuBar {
CVar_SetS32("gCrouchStabHammerFix", 0);
// Fix all crouch stab
CVar_SetS32("gCrouchStabFix", 0);
// Fix credits timing
CVar_SetS32("gCreditsFix", 1);
// Fix Gerudo Warrior's clothing colors
CVar_SetS32("gGerudoWarriorClothingFix", 0);
@ -1166,6 +1168,8 @@ namespace GameMenuBar {
UIWidgets::PaddedEnhancementCheckbox("Remove power crouch stab", "gCrouchStabFix", true, false);
UIWidgets::Tooltip("Make crouch stabbing always do the same damage as a regular slash");
}
UIWidgets::PaddedEnhancementCheckbox("Fix credits timing", "gCreditsFix", true, false);
UIWidgets::Tooltip("Extend certain credits scenes so the music lines up properly with the visuals");
UIWidgets::PaddedEnhancementCheckbox("Fix Gerudo Warrior's clothing colors", "gGerudoWarriorClothingFix", true, false);
UIWidgets::Tooltip("Prevent the Gerudo Warrior's clothes changing color when changing Link's tunic or using bombs in front of her");

View File

@ -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);