Restored vanilla pause buffering and input behavior broken by 'easy frame advance' cheat (#2511)

* Restored vanilla pause buffering and input behavior broken by 'easy frame advance' cheat

Currently, holding A and repeatedly pausing and unpausing will cause that A input to be repeated, resulting in Link rolling without additional A inputs. Similarly, holding Z and unpausing in front of a candidate actor will cause Link to switch Z-targeting to that actor.

As a side effect, this also does not allow inputs to be buffered before the Subscreen has finished its closing animation, which is how vanilla also works. This is slightly unfortunate because the "freeze" before the game resumes is considerably shorter in Shipwright, but it'd be better to implement a fake delay there if we want to make it more forgiving.

* Fixed writing past end of the buffer when loading personal item tracker notes longer than 8 characters

* Revert "Fixed writing past end of the buffer when loading personal item tracker notes longer than 8 characters"

This reverts commit 721c18d488.
This commit is contained in:
Evgenii Babinets 2023-02-28 04:22:26 -05:00 committed by GitHub
parent 7f5221b149
commit afc61e65ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 1 deletions

View File

@ -1053,6 +1053,9 @@ namespace GameMenuBar {
UIWidgets::Tooltip("Allows any item to be equipped, regardless of age\nAlso allows Child to use Adult strength upgrades");
UIWidgets::PaddedEnhancementCheckbox("Easy Frame Advancing", "gCheatEasyPauseBufferEnabled", true, false);
UIWidgets::Tooltip("Continue holding START button when unpausing to only advance a single frame and then re-pause");
const bool bEasyFrameAdvanceEnabled = CVarGetInteger("gCheatEasyPauseBufferEnabled", 0);
UIWidgets::PaddedEnhancementCheckbox("Easy Input Buffering", "gCheatEasyInputBufferingEnabled", true, false, bEasyFrameAdvanceEnabled, "Forced enabled when Easy Frame Advancing is enabled");
UIWidgets::Tooltip("Inputs that are held down while the Subscreen is closing will be pressed when the game is resumed");
UIWidgets::PaddedEnhancementCheckbox("Unrestricted Items", "gNoRestrictItems", true, false);
UIWidgets::Tooltip("Allows you to use any item at any location");
UIWidgets::PaddedEnhancementCheckbox("Freeze Time", "gFreezeTime", true, false);

View File

@ -3656,7 +3656,9 @@ void KaleidoScope_Update(PlayState* play)
switch (pauseCtx->unk_1E4) {
case 0:
if (CHECK_BTN_ALL(input->press.button, BTN_START)) {
CVarSetInteger("gPauseBufferBlockInputFrame", 9);
if (CVarGetInteger("gCheatEasyPauseBufferEnabled", 0) || CVarGetInteger("gCheatEasyInputBufferingEnabled", 0)) {
CVarSetInteger("gPauseBufferBlockInputFrame", 9);
}
if (CVarGetInteger("gCheatEasyPauseBufferEnabled", 0)) {
CVarSetInteger("gCheatEasyPauseBufferFrameAdvance", 13);
}