From 930157eff20b41c24803b7431814dc237bec77d3 Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Sat, 11 May 2024 17:18:02 -0500 Subject: [PATCH] Pause Save = Owl Save (#278) * Pause Save = Owl Save PoC * Changes from inspect's decomp * pause save cvared and with textures. also game over (#2) * Fix bug where it would try to save on debug file * Put function back * Put function back 2 * Hide gameover option from menu for now --------- Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com> --- mm/2s2h/BenGui/BenMenuBar.cpp | 7 +- mm/assets/2s2h_assets.h | 15 ++ .../gContinuePlayingENGTex.ia8.png | Bin 0 -> 3445 bytes .../icon_item_static/gPauseNoENGTex.ia8.png | Bin 0 -> 1246 bytes .../gPauseSaveConfirmationENGTex.ia8.png | Bin 0 -> 2724 bytes .../gPauseSavePromptENGTex.ia8.png | Bin 0 -> 4570 bytes .../icon_item_static/gPauseYesENGTex.ia8.png | Bin 0 -> 1379 bytes mm/src/code/z_game_over.c | 11 ++ mm/src/code/z_sram_NES.c | 6 +- .../ovl_kaleido_scope/z_kaleido_prompt.c | 3 + .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 154 +++++++++++++++++- 11 files changed, 188 insertions(+), 8 deletions(-) create mode 100644 mm/assets/custom/textures/icon_item_static/gContinuePlayingENGTex.ia8.png create mode 100644 mm/assets/custom/textures/icon_item_static/gPauseNoENGTex.ia8.png create mode 100644 mm/assets/custom/textures/icon_item_static/gPauseSaveConfirmationENGTex.ia8.png create mode 100644 mm/assets/custom/textures/icon_item_static/gPauseSavePromptENGTex.ia8.png create mode 100644 mm/assets/custom/textures/icon_item_static/gPauseYesENGTex.ia8.png diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index e8559c0be..f9f5b9911 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -359,7 +359,10 @@ void DrawEnhancementsMenu() { ImGui::EndMenu(); } - if (UIWidgets::BeginMenu("Cycle")) { + if (UIWidgets::BeginMenu("Cycle / Saving")) { + UIWidgets::CVarCheckbox("Pause Menu Save", "gEnhancements.Kaleido.PauseSave", { + .tooltip = "Re-introduce the pause menu save system. Pressing B in the pause menu will give you the option to create an Owl Save from your current location. When loading back into the game, you will be placed at your last entrance." + }); UIWidgets::CVarCheckbox("Do not reset Bottle content", "gEnhancements.Cycle.DoNotResetBottleContent", { .tooltip = "Playing the Song Of Time will not reset the bottles' content." }); @@ -413,7 +416,7 @@ void DrawEnhancementsMenu() { ImGui::EndMenu(); } - + if (UIWidgets::BeginMenu("Masks")) { UIWidgets::CVarCheckbox("Fast Transformation", "gEnhancements.Masks.FastTransformation"); UIWidgets::CVarCheckbox("Fierce Deity's Mask Anywhere", "gEnhancements.Masks.FierceDeitysAnywhere", { diff --git a/mm/assets/2s2h_assets.h b/mm/assets/2s2h_assets.h index 8a2a71396..e71ebb8f4 100644 --- a/mm/assets/2s2h_assets.h +++ b/mm/assets/2s2h_assets.h @@ -58,3 +58,18 @@ static const ALIGN_ASSET(2) char gThreeDayClockHour24Tex[] = dgThreeDayClockHour #define dgEmptyTexture "__OTR__textures/virtual/gEmptyTexture" static const ALIGN_ASSET(2) char gEmptyTexture[] = dgEmptyTexture; + +#define dgPauseSavePromptENGTex "__OTR__textures/icon_item_static/gPauseSavePromptENGTex" +static const ALIGN_ASSET(2) char gPauseSavePromptENGTex[] = dgPauseSavePromptENGTex; + +#define dgPauseYesENGTex "__OTR__textures/icon_item_static/gPauseYesENGTex" +static const ALIGN_ASSET(2) char gPauseYesENGTex[] = dgPauseYesENGTex; + +#define dgPauseNoENGTex "__OTR__textures/icon_item_static/gPauseNoENGTex" +static const ALIGN_ASSET(2) char gPauseNoENGTex[] = dgPauseNoENGTex; + +#define dgPauseSaveConfirmationENGTex "__OTR__textures/icon_item_static/gPauseSaveConfirmationENGTex" +static const ALIGN_ASSET(2) char gPauseSaveConfirmationENGTex[] = dgPauseSaveConfirmationENGTex; + +#define dgContinuePlayingENGTex "__OTR__textures/icon_item_static/gContinuePlayingENGTex" +static const ALIGN_ASSET(2) char gContinuePlayingENGTex[] = dgContinuePlayingENGTex; diff --git a/mm/assets/custom/textures/icon_item_static/gContinuePlayingENGTex.ia8.png b/mm/assets/custom/textures/icon_item_static/gContinuePlayingENGTex.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..19cad5c37b99dd8e3382a965f216754c7637216c GIT binary patch literal 3445 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 IM6N<$f?z~TPXGV_ literal 0 HcmV?d00001 diff --git a/mm/assets/custom/textures/icon_item_static/gPauseSaveConfirmationENGTex.ia8.png b/mm/assets/custom/textures/icon_item_static/gPauseSaveConfirmationENGTex.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..5c4081faa34f21909529d843f11be1a1f812ada1 GIT binary patch literal 2724 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 eTJTW2T0|No1Y}8B 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 literal 0 HcmV?d00001 diff --git a/mm/assets/custom/textures/icon_item_static/gPauseYesENGTex.ia8.png b/mm/assets/custom/textures/icon_item_static/gPauseYesENGTex.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c06890e1282c90cc4f24d85d6a12cd390202dd GIT binary patch literal 1379 zcmV-p1)TbcP)*?3 zLN-^>g42H2Qe@fH@?yecWR)1bT|OxUBz1%>ZSJyzuxlT%gxGFb};17LLuyHdY6_KTIYmKBzl z;3rt#xqmPrEm7-n2%AA^iABr6)^dw=p5$V;vwvq}k# zHBzK0;1RVb)e{nvq9VQNe7ay5q1t91aTY@MleVs9z3~T6cKbm!Q*&{@SW?1Bgzm8>EW1|%XPqmh^%JDqg8yY|qpV>Y@=B4oGV(R5Y4s`~2Ht5+se zPCS4g0K5nAmhpZAa01`~z#FCm0G9xg05VnBuPN~W8~{E85Xx2zz%T480QdsnXQt1; zWbFSS9>4$q!Q=7dg2ABT_xlSd12aEAFT36D9CR=P_zwV>tI&M|02db*G&D3+&v6_M z4h}4VKtKinyWL(tJ3Gtu_V!8uz60>1u?KpIU9zuXtF^>-hRKqsVc89UWjY)Vt3*Wc zcw94hfj~gn-riR6yu^(41$wEKmRqUp6M%Q9;i);8Bf;r(W+h1?RaL34uTQesY~ua> zJ-J-2YtiSsQg3f> zDH4gOi9|wMUS5_B`NG12e13keg~MU>=;%mGBof--;Go13RMWfT0B{RHXm4*9A0Hp7 zP$Z)=%w#gOzrSBBzm=7h0s|lb z@YE6j54}YS0EA#Ls1OmwVzFW{CX-1>rBWozGL4Om<-J~SZf$K%AtKt@*- zbUIC|tEB%D_Ba*7B$Y!&z@>R`4X3ztGKLB(|k_1VTAc`WD zDojsLOBRczaddRlytlX4cy)D!cz8J5)6>JXwYAknqtPal$%N+SW}KXy(9+UU zo^9X8(}PzN`dd5YdHx%ojy?v~r2q&V#|bu@O~gNxkkx8^Nmf-CGQARn1Nx}ofj%~T z1@J3?-d~9(t!R)b{sNti+n_w8NSXiu002ovPDHLkV1nr0bhiKi literal 0 HcmV?d00001 diff --git a/mm/src/code/z_game_over.c b/mm/src/code/z_game_over.c index 0487f3214..a40cb541e 100644 --- a/mm/src/code/z_game_over.c +++ b/mm/src/code/z_game_over.c @@ -5,6 +5,7 @@ #include "functions.h" #include "variables.h" #include "macros.h" +#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" void GameOver_Init(PlayState* play) { play->gameOverCtx.state = GAMEOVER_INACTIVE; @@ -79,6 +80,16 @@ void GameOver_Update(PlayState* play) { break; case GAMEOVER_DEATH_FADE_OUT: + if (CVarGetInteger("gEnhancements.Kaleido.GameOver", 0)) { + sGameOverTimer--; + + if (sGameOverTimer == 0) { + play->pauseCtx.state = PAUSE_STATE_GAMEOVER_0; + gameOverCtx->state++; + Rumble_StateReset(); + } + break; + } if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_FANFARE) != NA_BGM_GAME_OVER) { func_80169F78(&play->state); if (gSaveContext.respawnFlag != -7) { diff --git a/mm/src/code/z_sram_NES.c b/mm/src/code/z_sram_NES.c index 65f64dfcb..1f5d2417b 100644 --- a/mm/src/code/z_sram_NES.c +++ b/mm/src/code/z_sram_NES.c @@ -1338,7 +1338,11 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; } } else { - gSaveContext.save.entrance = D_801C6A58[(void)0, gSaveContext.save.owlSaveLocation]; + if (gSaveContext.save.owlSaveLocation > 9) { + gSaveContext.save.entrance = gSaveContext.save.owlSaveLocation; + } else { + gSaveContext.save.entrance = D_801C6A58[(void)0, gSaveContext.save.owlSaveLocation]; + } if ((gSaveContext.save.entrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { gSaveContext.save.entrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10); diff --git a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c index d2a11b7d2..d5bf93d26 100644 --- a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c +++ b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c @@ -17,6 +17,9 @@ void KaleidoScope_UpdatePrompt(PlayState* play) { s8 stickAdjX = input->rel.stick_x; s16 alphaStep; + // #region 2S2H [Port] - Fix stick inputs + stickAdjX = pauseCtx->stickAdjX; + if (((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_1)) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_SAVE_PROMPT) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT)) { diff --git a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 249955938..22e7172f8 100644 --- a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -19,6 +19,8 @@ #include "archives/map_name_static/map_name_static.h" #include "2s2h/Enhancements/FrameInterpolation/FrameInterpolation.h" +#include "2s2h_assets.h" + // Page Textures (Background of Page): // Broken up into multiple textures. // Numbered by column/row. @@ -603,6 +605,18 @@ s16 sCursorEnvColorTarget[][3] = { { 0, 0, 0 }, { 170, 170, 170 }, { 0, 0, 0 }, { 255, 160, 0 }, { 0, 0, 100 }, { 0, 150, 255 }, }; +static TexturePtr sSaveTexs[] = { + gPauseSave00Tex, gPauseSave01Tex, gPauseSave02Tex, gPauseSave03Tex, gPauseSave04Tex, + gPauseSave10JPNTex, gPauseSave11Tex, gPauseSave12Tex, gPauseSave13Tex, gPauseSave14Tex, + gPauseSave20Tex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex, +}; + +static TexturePtr sGameOverTexs[] = { + gPauseSave00Tex, gPauseSave01Tex, gPauseSave02Tex, gPauseSave03Tex, gPauseSave04Tex, + gPauseGameOver10Tex, gPauseSave11Tex, gPauseSave12Tex, gPauseSave13Tex, gPauseSave14Tex, + gPauseSave20Tex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex, +}; + void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { static s16 sCursorColorTimer = 10; static s16 sCursorColorTargetIndex = 0; @@ -895,6 +909,104 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { } } + if (CVarGetInteger("gEnhancements.Kaleido.PauseSave", 0) || CVarGetInteger("gEnhancements.Kaleido.GameOver", 0)) { + Gfx_SetupDL42_Opa(gfxCtx); + if ((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) || IS_PAUSE_STATE_GAMEOVER) { + KaleidoScope_UpdatePrompt(play); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + switch (pauseCtx->pageIndex) { + case PAUSE_ITEM: + pauseCtx->itemPageRoll = pauseCtx->roll + 314.0f; + Matrix_RotateYF(0.0f, MTXMODE_NEW); + Matrix_Translate(0, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, 1); + Matrix_RotateXFApply(-pauseCtx->roll / 100.0f); + break; + case PAUSE_MAP: + pauseCtx->mapPageRoll = pauseCtx->roll + 314.0f; + Matrix_RotateYF(-1.57f, MTXMODE_NEW); + Matrix_Translate(0, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, 1); + Matrix_RotateXFApply(-pauseCtx->roll / 100.0f); + break; + case PAUSE_QUEST: + pauseCtx->questPageRoll = pauseCtx->roll + 314.0f; + Matrix_RotateYF(-3.14f, MTXMODE_NEW); + Matrix_Translate(0, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, 1); + Matrix_RotateXFApply(-pauseCtx->roll / 100.0f); + break; + case PAUSE_MASK: + pauseCtx->maskPageRoll = pauseCtx->roll + 314.0f; + Matrix_RotateYF(1.57f, MTXMODE_NEW); + Matrix_Translate(0, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, 1); + Matrix_RotateXFApply(-pauseCtx->roll / 100.0f); + break; + } + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if (IS_PAUSE_STATE_GAMEOVER) { + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->promptPageVtx, sGameOverTexs); + } else { + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->promptPageVtx, sSaveTexs); + } + + gSPVertex(POLY_OPA_DISP++, &pauseCtx->promptPageVtx[60], 32, 0); + + if (((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && ((pauseCtx->savePromptState <= PAUSE_SAVEPROMPT_STATE_4) || (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_6))) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_SAVE_PROMPT)) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gPauseSavePromptENGTex, 152, 16, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 100, 255, pauseCtx->promptAlpha); + if (pauseCtx->promptChoice == PAUSE_PROMPT_YES) { + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); + } else { + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL); + } + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gPauseYesENGTex, 48, 16, 12); + + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gPauseNoENGTex, 48, 16, 16); + + } else if (((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && (pauseCtx->savePromptState >= PAUSE_SAVEPROMPT_STATE_5)) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_8)) { + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gPauseSaveConfirmationENGTex, 152, 16, 0); + } else if ((pauseCtx->state == PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_10)) { + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gContinuePlayingENGTex, 152, 16, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 100, 255, pauseCtx->promptAlpha); + if (pauseCtx->promptChoice == PAUSE_PROMPT_YES) { + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); + } else { + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL); + } + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gPauseYesENGTex, 48, 16, 12); + + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gPauseNoENGTex, 48, 16, 16); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + if ((pauseCtx->state != PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT) && (pauseCtx->state != PAUSE_STATE_GAMEOVER_10)) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 0, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + } + } + } + CLOSE_DISPS(gfxCtx); FrameInterpolation_RecordCloseChild(); } @@ -1166,7 +1278,8 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5); - pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 48 * (1 << 5); + // #region 2S2H - fixed vtx size for correct texture size + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 64 * (1 << 5); gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); gDPPipeSync(POLY_OPA_DISP++); @@ -3247,6 +3360,13 @@ void KaleidoScope_Update(PlayState* play) { if (!pauseCtx->itemDescriptionOn && (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B))) { Interface_SetAButtonDoAction(play, DO_ACTION_NONE); + if (CVarGetInteger("gEnhancements.Kaleido.PauseSave", 0)) { + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + pauseCtx->state = PAUSE_STATE_SAVEPROMPT; + Audio_PlaySfx_MessageDecide(); + break; + } + } pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); @@ -3281,6 +3401,13 @@ void KaleidoScope_Update(PlayState* play) { // Abort having the player play the song and close the pause menu AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); Interface_SetAButtonDoAction(play, DO_ACTION_NONE); + if (CVarGetInteger("gEnhancements.Kaleido.PauseSave", 0)) { + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + pauseCtx->state = PAUSE_STATE_SAVEPROMPT; + Audio_PlaySfx_MessageDecide(); + break; + } + } pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); @@ -3317,6 +3444,13 @@ void KaleidoScope_Update(PlayState* play) { if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); Interface_SetAButtonDoAction(play, DO_ACTION_NONE); + if (CVarGetInteger("gEnhancements.Kaleido.PauseSave", 0)) { + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + pauseCtx->state = PAUSE_STATE_SAVEPROMPT; + Audio_PlaySfx_MessageDecide(); + break; + } + } pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); @@ -3362,15 +3496,25 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU; } else { Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); + if (CVarGetInteger("gEnhancements.Kaleido.PauseSave", 0)) { + gSaveContext.save.isOwlSave = true; + gSaveContext.save.owlSaveLocation = gSaveContext.save.entrance; + } Play_SaveCycleSceneFlags(&play->state); gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; func_8014546C(sramCtx); - if (!gSaveContext.flashSaveAvailable) { + if (!gSaveContext.flashSaveAvailable || gSaveContext.fileNum == 255) { // 2S2H [Enhancement] Don't let them save if they are in debug save pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_5; } else { - Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum], - gFlashSaveNumPages[gSaveContext.fileNum]); - Sram_StartWriteToFlashDefault(sramCtx); + if (CVarGetInteger("gEnhancements.Kaleido.PauseSave", 0)) { + Sram_SetFlashPagesOwlSave(sramCtx, gFlashOwlSaveStartPages[gSaveContext.fileNum * 2], + gFlashOwlSaveNumPages[gSaveContext.fileNum * 2]); + Sram_StartWriteToFlashOwlSave(sramCtx); + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum], + gFlashSaveNumPages[gSaveContext.fileNum]); + Sram_StartWriteToFlashDefault(sramCtx); + } pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_4; } sDelayTimer = 90;