From 1eb665bd28749a04feb1f91ec463b1bf6c08e328 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 zcmeAS@N?(olHy`uVBq!ia0y~yV3@(cz#zcE#=yYvN^#p11_s8)OlRkS;vjb?1y5IJ zGeb)=GhHJ+Lk0$oiKP?wdpiY+9JkL3oU$;$*}1vpYEmL=kazPX{S|DcC$cU+Uw=Tp z|NE2)*A|3obVU6!y%HageL;rBRnVolIMDm#>pdbpCyFh<*S!0FuXxAzmL(}TusL6h1VT$n?My_MEv&thZ20)?g2>e$ch;}9op(WW!xk=o zja6X+^91Kb>#tCI&rz=VG9%`P&yB?=SzF)x*oHk7pBxeEXJ-o*^R?K&Dtlw>jvGzy+)Y=x)~n3kVLG$rdhm-5 zhv&Ro)`nDv-G2Ur@sRYV(CZtv^ZzZnxA7Nmc4qpEXF(Qy3=9mM1s;*b3=G`DAk4@x zYmNj119yX`i(^PeY5FpP*i9xnk2+r)lrYQVkui{nuvLcK6BLW`=XgrMvz+ zJA`gpFm17WznWg$9*vuC%dTC%Jh|%S(&>+8o8@*fylBZ$Sr+;we(eR$nM+r#()x6O zncro~^X(#W|EAwq_{qq^;sjG8L!r#_PwBDqL>hE%M>DjXoo(*k)!m&RK5a{%mbSL? z@qT&#xSd697J3F6D z$L_m%D>rQlDt~jsur@4AEJkm-HW4CI>iU_}HKDH}YFkQ&m z7*Qf$|7YXF+xh#a##O&HExf<4*3xWt?%l`z_IiB0ysDz}+QJr04^3Xn!^7}z-Mx~s zvS&;OzP-Ku{OYdGPR?t$Z_f^qJ3C?e#XCKAeeE}>o^v0bDs{8OL30K`x(jQ>lMlMc!GKrJA;5=(?Nwl zb^nVtbuiS0{LqbEb@}#lQo?PK%6}%OQ%ps^ zSHHNhkVP=Cy1H73Tdz`L)9Ziy4B~nF_AEX9?CfmiTdSkC<=hlfRN7VWuqnlC_H#xK zoAcbEp`jC_FQ#4lXj6aKT2)n5FjeyUr@Yo2mctA!z0&6Arca&fxet7Qg<^c| znSXzMP29R}#}11{Px%`bTz`Fd=AO*bO+t}ZszUj11%-z%j}>a2Ia9J|_uVBcy{qrq zGheEnaPMARXUB@AOI?pN8HAmPTOGP~bJW_6D_3gnDtgNGxx&W8!s5i0PFXp*v?hfM zH*QF9voJmR{ByqnNAz{e12^{j{su>|S3# zze%^>s&yX~vaJ4=qb0(1kz0R{!1Y&ekBZ0lRPT)|+8M**P+%dWBf)d&#}A9$b$_kS zo;h=2^Labz;GdyiFJHf|e)DaanXRp_s;a8F#G~YXTe0Mx!2JC6OIBWI^Qy0iSZMI? z^Lcw?rA5b%9g`4iF?23_`BK5bRExpM+1WW{lFF|ai~Cg=nl8UgS)_64vcJ9T<_MjM zE=rE`YroBG;o)a7Y{SWuo?PvRuUxqzvU=spPNQQln)&TK7zLIsTXuK|M+9U)gzKXp1 z>74a@mBSAWe0_W_Ow*0Nvh9CDFVn)UcbXX)7G2a}Sg>M6$Mula(ideJ0-~d5r<%~&#~{sEQSMFThl(;^zYnh$;5C> zA}uX##hyKLPM<%&-_g^BWnTQo+NB32q6OdDe!p{gZTx<@j}h3XD(c{NJ-DUyf7yyE^giHckklTjb>VGzs<|=pmH8_L;3w$^P3kh zPAqm9_Qbc7FMDD_5*I@Z^cgx%u|<&zw9NIZ@_d!i1)S3h(y+ zubXi;tu864X{L|&@~yXS-AbBuobklXKc?Ms;qTeP+5}Rzch8$Q&!xWJURzi9X`h_! zt{0Q2?nUe9a zY`3Ppy}VerYx>rx%~$PQ0+;CT`_c6D$&&{U4mMXYWaQ+Wv8(*FBul_N%J^kd%l1=;e*_}+=Y`FXGxo_|8O0z52d^{p-*nix4e*M3lPl|S~*uURicI(Zz zWy_v4U1Dt9^xQN3^z-M>Po{0&IBC+P6K~$=XbS7}^!6I|AD_JJ>+ioQ+iy!UEZn*^ z^v~Dp@tOi06AnL2h}!k&(Ib!g`u!r^M>ERGrnR-VM^;u=vT$d1xz4WHf8Rg-{5)UQ zX2&868K2&J`~Ls?ZSr1!|DPfo0gektj-H~nJIIqLCQm^}{Q0144?ppVN>?A+XPH7Sub$h-NH{t7nJ6ImCZuRkE) z|9#4YYYRd(I--7=UWpILz97TmD(F&N9O!-W^&XL)6UCO_YuJL}il&buJGVGEbP z#;P!Zd4ltz^;f99=P1{FnGy5D=f>ibtgY{TY{Q<4PYw?KXB5fJ&YV!nwL56P#kcOM zTc(LloBsG*T9?;byJy~SI`1TTB(1ODw{l$e@o~~LPo^IdX)$T?%{>Mx+EP!d>pzK~ z@Ls31*^9H+G-!$D1Hr8tSA~TpFH%oQ(U|%7|Lt&FORJ!@dEcEsZ%*9v)$z1h$f>rE zl_?TalQ-BNOkFo`zJ1Ha@{6ZS&(<>Z`C9B>mAx@`$Bm|U?xw3;>s4m&FrC?QJ@`e3 z!*kv(YeTBTZa;s*cu4wF==BZT`TrK(+xUw&J2U;ovmlE;1_lPs0*}aI1_o|n5N2eU zHAjMhftlIU#WBRA^XRmL-pY{z?fX^Q_>?39A_5!*Ty0cq3-+Ekcd$6^KSLs4Q=E;q z)0anAEmw5UE0g|c)A43)v)rZ!n#&_aGTl;|4<2y4k#oFo)7`mOf;K4y^rbzk_x^i;E#Z05PJMNCb=}J*(G7P`-pu*7IZ3>qRKDFs{a(c zl5423lV_SSZ(iMo+-MgUGjns<1M5Px6dSyjDs7F@og*(RyVb=dEIfQJpTNxNQlD1| z1SK*!tPJ^NW@Z*6n3$TXYH4mhou`DGoBP&>4+hgxTOWpKh}bk7J$f|d_%!`*4j~Mg z4Ix^tMn5b5ojd1u+2m}Q*3?H29w>;OP*+!f%<%pDcg2RJjW0Smnwy*FRxjDj%FuA{ z-n|*iGW}CdpFVvyYwM{KCpbD?m>5oPy2T(YEc~#NnVI=xgpS+VFyZT^%!PlKnz^tB zu-|8%waj+qv+LKduU)!y>9WTb3(pwz?9a=~laP{fy8czJAx7^y^M?KV-@V3OHTj* 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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 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 zcmeAS@N?(olHy`uVBq!ia0y~yU@%}{U=ZM7V_;wiSodcm0|R4Yrn7TEage){f~Tvq znW3ebnXZwZAp?WP#L|iTy`2I@j@xGiPFWb>?A+XPH7Sub$h-NH{t7nJ6ImCZuRkE) z|9#4YYYRd(I--7=UWpILz97TmD(F&N9O!-W^&XL)6UCO_YuJL}il&buJGVGEbP z#;P!Zd4ltz^;f99=P1{FnGy5D=f>ibtgY{TY{Q<4PYw?KXB5fJ&YV!nwL56P#kcOM zTc(LloBsG*T9?;byJy~SI`1TTB(1ODw{l$e@o~~LPo^IdX)$T?%{>Mx+EP!d>pzK~ z@Ls31*^9H+G-!$D1Hr8tSA~TpFH%oQ(U|%7|Lt&FORJ!@dEcEsZ%*9v)$z1h$f>rE zl_?TalQ-BNOkFo`zJ1Ha@{6ZS&(<>Z`C9B>mAx@`$Bm|U?xw3;>s4m&FrC?QJ@`e3 z!*kv(YeTBTZa;s*cu4wF==BZT`TrK(+xUw&J2U;ovmlE;1_lPs0*}aI1_o|n5N2eU zHAjMhfw{xe#WBRA^Jti(w{oPwzeO(>Eco(3zJQ}KRB^T`JHKEVpBzh}jG&u=hmxGl z&Nval632s&D>|O+5;qh|;fv(A%sBFqo8YMwC6(yy`6KBX-&n?-t``d-}$!5E} zl~T4pxL6Xpch#>~S67Fth4|St$TRF=|1j-i9diNG1I7c=%a|FaGfZMI3cayj^CN={ zgB`QLsW6@c`fs!uelR^qUv_?f%A5ZRat9a~4nF?)r0L*-N8f*QYcLzz+w1SX`%b3B zfcXbM!;IAzYMB|t#l=lbOhV2V%JA{==`=bxurchu8)t8AefsOSZ(a=hm_IDu$X?YM zyJ>ym>a9o0+D=Ydk$980A=OHTZ?%id$BG!^ibe;AoA>U8ecW@T=PPT~%Bj<$SH2N$ zC|~h#rR5CegD*?cR6UhKLsza}@4xA0&ZED7ZFk13%c*=YckbNt75|lfANg~orGmj; z@|>Buxv0{j%a?<1-MzciLnY`;U3T{CWDSv^{QP`Pq0SYZE>6*LanpEz9y-)iQ&+dH z^>E_X7cV@#RfKLmc(CAzP{`%oj~NQM9WwIs#pUJYR|aTYxO-Q&w7gt=^Ui(y)(Hsq z_V+($8`(?-3$y-)YX<>%$*`YI~jx_L8DSM2om5-ZR#IAe)pG8+UnN$)t5>f+b?w?T zrPD^fetyp;pH#83vhuN;f4-=;_U@hg_s<&&zyEM$Z&|1k*$nn>x+V_{(k!hnTo{>Vv1;JPrlB@9wOyStlqcDjCb z{QbSfx|bG~lw8@fef#x_($dz)kCRI)DlBeazI=G=)~#1v7hhDHe6r=)v$Q#L=3KaR zDQI5q{bQG#!-aoETR*M*Cq1vvj_uk~1`e6yoMy9qkJwL{a5byeGb~ixXs=KU^RE>T z8tu$#SU+et+@JY}xuHL`dY@B1gXD|kBi|XMX6PLMw$5bP0l+XkK=-za< 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;