diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index 399bf5402..38e753acf 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -175,7 +175,8 @@ const std::vector enhancementsCvars = { "gBombchuBowlingAmmunition", "gCreditsFix", "gSilverRupeeJingleExtend", - "gStaticExplosionRadius" + "gStaticExplosionRadius", + "gNoInputForCredits", }; const std::vector randomizerCvars = { @@ -617,6 +618,8 @@ const std::vector randomizerPresetEntries = { PRESET_ENTRY_S32("gPauseLiveLink", 16), // Frames to wait PRESET_ENTRY_S32("gMinFrameCount", 200), + + PRESET_ENTRY_S32("gNoInputForCredits", 1), }; const std::vector s6PresetEntries = { diff --git a/soh/soh/GameMenuBar.cpp b/soh/soh/GameMenuBar.cpp index 955e39f1d..d8800b27d 100644 --- a/soh/soh/GameMenuBar.cpp +++ b/soh/soh/GameMenuBar.cpp @@ -641,6 +641,8 @@ namespace GameMenuBar { UIWidgets::Tooltip("Allows graves to be pulled when child during the day"); UIWidgets::PaddedEnhancementCheckbox("Dogs follow you everywhere", "gDogFollowsEverywhere", true, false); UIWidgets::Tooltip("Allows dogs to follow you anywhere you go, even if you leave the market"); + UIWidgets::PaddedEnhancementCheckbox("Don't require input for Credits sequence", "gNoInputForCredits", true, false); + UIWidgets::Tooltip("Removes the input requirement on textboxes after defeating Ganon, allowing Credits sequence to continue to progress"); // Blue Fire Arrows bool forceEnableBlueFireArrows = gSaveContext.n64ddFlag && diff --git a/soh/src/code/z_message_PAL.c b/soh/src/code/z_message_PAL.c index 0cd2bfd66..922832571 100644 --- a/soh/src/code/z_message_PAL.c +++ b/soh/src/code/z_message_PAL.c @@ -1180,6 +1180,23 @@ void Message_Decode(PlayState* play) { while (true) { phi_s1 = temp_s2 = msgCtx->msgBufDecoded[decodedBufPos] = font->msgBuf[msgCtx->msgBufPos]; + // Don't require input for credits textboxes in randomizer + if (CVarGetInteger("gNoInputForCredits", 0) && ( + msgCtx->textId == 0x706F || + msgCtx->textId == 0x7091 || + msgCtx->textId == 0x7092 || + msgCtx->textId == 0x7093 || + msgCtx->textId == 0x7094 || + msgCtx->textId == 0x7095 + )) { + if (temp_s2 == MESSAGE_BOX_BREAK) { + phi_s1 = temp_s2 = msgCtx->msgBufDecoded[decodedBufPos] = font->msgBuf[msgCtx->msgBufPos] = MESSAGE_BOX_BREAK_DELAYED; + } else if (temp_s2 == MESSAGE_END) { + phi_s1 = temp_s2 = msgCtx->msgBufDecoded[decodedBufPos] = font->msgBuf[msgCtx->msgBufPos] = MESSAGE_FADE2; + phi_s1 = temp_s2 = msgCtx->msgBufDecoded[++decodedBufPos] = font->msgBuf[++msgCtx->msgBufPos] = MESSAGE_END; + } + } + if (temp_s2 == MESSAGE_BOX_BREAK || temp_s2 == MESSAGE_TEXTID || temp_s2 == MESSAGE_BOX_BREAK_DELAYED || temp_s2 == MESSAGE_EVENT || temp_s2 == MESSAGE_END) { // Textbox decoding ends with any of the above text control characters