1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-02-23 07:45:55 +00:00

PAUSE_STATE_SAVE_PROMPT and substates PAUSE_SAVE_PROMPT_STATE_ and other things

This commit is contained in:
Dragorn421 2022-08-29 14:07:33 +02:00
parent e8eb909b12
commit 1c6b7b082f
No known key found for this signature in database
GPG key ID: 32B53D2D16FC4118
8 changed files with 190 additions and 164 deletions

View file

@ -173,6 +173,10 @@
#define R_OCARINA_BUTTONS_YPOS(note) VREG(45 + (note))
#define R_OCARINA_BUTTONS_APPEAR_ALPHA_STEP VREG(50)
#define R_OCARINA_BUTTONS_YPOS_OFFSET VREG(51)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER_BASE VREG(60)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA VREG(61)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE VREG(62)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER VREG(63)
#define R_ITEM_AMMO_X(i) VREG(64 + (i))
#define R_ITEM_AMMO_Y(i) VREG(68 + (i))
#define R_ITEM_ICON_WIDTH(i) VREG(76 + (i))

View file

@ -749,7 +749,7 @@ typedef enum {
/* 4 */ PAUSE_STATE_OPENING_1, // Animate the pause menu coming together with rotations and other animations.
/* 5 */ PAUSE_STATE_OPENING_2, // Finish some animations for opening the menu.
/* 6 */ PAUSE_STATE_MAIN, // Pause menu ready for player inputs.
/* 7 */ PAUSE_STATE_7_SAVE_PROMPT_, // save
/* 7 */ PAUSE_STATE_SAVE_PROMPT, // Save prompt in the pause menu
/* 8 */ PAUSE_STATE_8, // saveGameOver
/* 9 */ PAUSE_STATE_9, // saveGameOver
/* 10 */ PAUSE_STATE_10, // game over saveGameOver
@ -779,14 +779,14 @@ typedef enum {
} PauseMainSubState;
typedef enum {
/* 0 */ PAUSE_S7_0,
/* 1 */ PAUSE_S7_1,
/* 2 */ PAUSE_S7_2,
/* 3 */ PAUSE_S7_3,
/* 4 */ PAUSE_S7_4,
/* 5 */ PAUSE_S7_5,
/* 6 */ PAUSE_S7_6
} PauseCtxUnk1EC;
/* 0 */ PAUSE_SAVE_PROMPT_STATE_APPEARING,
/* 1 */ PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE,
/* 2 */ PAUSE_SAVE_PROMPT_STATE_CLOSING,
/* 3 */ PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU,
/* 4 */ PAUSE_SAVE_PROMPT_STATE_SAVED,
/* 5 */ PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED,
/* 6 */ PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU_ALT
} PauseSavePromptSubState;
typedef enum {
/* 0 */ PAUSE_BG_PRERENDER_OFF, // Inactive, do nothing.
@ -827,14 +827,14 @@ typedef struct {
/* 0x01E4 */ u16 mainSubState;
/* 0x01E6 */ u16 mode;
/* 0x01E8 */ u16 pageIndex; // "kscp_pos"
/* 0x01EA */ u16 unk_1EA_OpenMenuAndPageSwitchTimer__;
/* 0x01EC */ u16 unk_1EC_ps7_;
/* 0x01F0 */ f32 savePromptOffsetDepth_unk_1F0;
/* 0x01EA */ u16 switchPageTimer;
/* 0x01EC */ u16 savePromptSubState;
/* 0x01F0 */ f32 savePromptOffsetDepth_;
/* 0x01F4 */ f32 rollRotPageItem;
/* 0x01F8 */ f32 rollRotPageEquip;
/* 0x01FC */ f32 rollRotPageMap;
/* 0x0200 */ f32 rollRotPageQuest;
/* 0x0204 */ f32 rollRotSavePromptPage_unk_204; // "angle_s"
/* 0x0204 */ f32 rollRotSavePrompt_; // "angle_s"
/* 0x0208 */ u16 alpha;
/* 0x020A */ s16 offsetY;
/* 0x020C */ char unk_20C[0x08];
@ -845,7 +845,7 @@ typedef struct {
/* 0x022C */ s16 cursorY[5]; // "cur_ypt"
/* 0x0236 */ s16 dungeonMapSlot;
/* 0x0238 */ s16 cursorSpecialPos; // "key_angle"
/* 0x023A */ s16 pageSwitchTimer;
/* 0x023A */ s16 delaySwitchPageInputTimer; // Used to introduce a delay before switching page when arriving on the "scroll left/right" positions while holding stick left/right.
/* 0x023C */ u16 namedItem; // "zoom_name"
/* 0x023E */ u16 cursorItem[4]; // "select_name"
/* 0x0246 */ u16 cursorSlot[4];

View file

@ -567,10 +567,10 @@ void func_80111070(void) {
VREG(57) = 255;
VREG(58) = 255;
VREG(59) = 255;
VREG(60) = 20;
VREG(61) = 100;
VREG(62) = 0;
VREG(63) = 10;
R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER_BASE = 20;
R_KALEIDO_PROMPT_CURSOR_ALPHA = 100;
R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE = 0;
R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER = 10;
R_ITEM_AMMO_X(1) = C_LEFT_BUTTON_X + 1;
R_ITEM_AMMO_X(2) = C_DOWN_BUTTON_X + 1;
R_ITEM_AMMO_X(3) = C_RIGHT_BUTTON_X + 1;

View file

@ -63,7 +63,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
HREG(82) = 3;
R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_DRAW;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_0;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; // PAUSE_STATE_WAIT_BG_PRERENDER
}
} else if (pauseCtx->state == PAUSE_STATE_8) {
@ -71,7 +71,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
HREG(82) = 3;
R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_DRAW;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_0;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; // PAUSE_STATE_9
} else if ((pauseCtx->state == PAUSE_STATE_WAIT_BG_PRERENDER) || (pauseCtx->state == PAUSE_STATE_9)) {
osSyncPrintf("PR_KAREIDOSCOPE_MODE=%d\n", R_PAUSE_BG_PRERENDER_STATE);
@ -119,8 +119,8 @@ void KaleidoScopeCall_Draw(PlayState* play) {
KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE];
if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_DONE) {
if (((play->pauseCtx.state >= PAUSE_STATE_OPENING_1) && (play->pauseCtx.state <= PAUSE_STATE_7_SAVE_PROMPT_)
/* PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_7_SAVE_PROMPT_ */) ||
if (((play->pauseCtx.state >= PAUSE_STATE_OPENING_1) && (play->pauseCtx.state <= PAUSE_STATE_SAVE_PROMPT)
/* PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_SAVE_PROMPT */) ||
((play->pauseCtx.state >= PAUSE_STATE_11) && (play->pauseCtx.state <= PAUSE_STATE_CLOSING)
/* PAUSE_STATE_11, PAUSE_STATE_12, PAUSE_STATE_13, PAUSE_STATE_14, PAUSE_STATE_15,
PAUSE_STATE_16, PAUSE_STATE_17, PAUSE_STATE_CLOSING */

View file

@ -41,7 +41,7 @@ void KaleidoSetup_Update(PlayState* play) {
R_PAUSE_CURSOR_LEFT_X = -175;
R_PAUSE_CURSOR_RIGHT_X = 155;
pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ = 0;
pauseCtx->switchPageTimer = 0;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_SWITCHING_PAGE; // irrelevant
if (R_START_LABEL_DD(0) == 0) {
@ -81,7 +81,7 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->state = PAUSE_STATE_OFF;
pauseCtx->debugState = 0;
pauseCtx->alpha = 0;
pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ = 0;
pauseCtx->switchPageTimer = 0;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->mode = 0;
pauseCtx->pageIndex = PAUSE_ITEM;
@ -89,9 +89,9 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->rollRotPageItem = pauseCtx->rollRotPageEquip = pauseCtx->rollRotPageMap = pauseCtx->rollRotPageQuest =
160.0f;
pauseCtx->eye.z = 64.0f;
pauseCtx->savePromptOffsetDepth_unk_1F0 = 936.0f;
pauseCtx->savePromptOffsetDepth_ = 936.0f;
pauseCtx->eye.x = pauseCtx->eye.y = 0.0f;
pauseCtx->rollRotSavePromptPage_unk_204 = -314.0f;
pauseCtx->rollRotSavePrompt_ = -314.0f;
pauseCtx->cursorPoint[PAUSE_ITEM] = 0;
pauseCtx->cursorPoint[PAUSE_MAP] = VREG(30) + 3;

View file

@ -2762,7 +2762,7 @@ void Interface_DrawItemButtons(PlayState* play) {
if ((pauseCtx->state < PAUSE_STATE_8)
/* PAUSE_STATE_OFF, PAUSE_STATE_WAIT_LETTERBOX, PAUSE_STATE_WAIT_BG_PRERENDER, PAUSE_STATE_INIT,
PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_7_SAVE_PROMPT_ */
PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_SAVE_PROMPT */
|| (pauseCtx->state >= PAUSE_STATE_CLOSING)
/* PAUSE_STATE_CLOSING, PAUSE_STATE_UNPAUSE */
) {

View file

@ -1,6 +1,6 @@
#include "z_kaleido_scope.h"
static s16 D_8082A6E0[] = { 100, 255 };
static s16 sKaleidoPromptCursorAlphaVals[] = { 100, 255 };
void KaleidoScope_UpdatePrompt(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
@ -8,8 +8,10 @@ void KaleidoScope_UpdatePrompt(PlayState* play) {
s8 relStickX = input->rel.stick_x;
s16 step;
if (((pauseCtx->state == PAUSE_STATE_7_SAVE_PROMPT_) && (pauseCtx->unk_1EC_ps7_ == PAUSE_S7_1)) ||
if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) &&
(pauseCtx->savePromptSubState == PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE)) ||
(pauseCtx->state == PAUSE_STATE_14) || (pauseCtx->state == PAUSE_STATE_16)) {
if ((pauseCtx->promptChoice == 0) && (relStickX >= 30)) {
Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -20,18 +22,20 @@ void KaleidoScope_UpdatePrompt(PlayState* play) {
pauseCtx->promptChoice = 0;
}
step = ABS(VREG(61) - D_8082A6E0[VREG(62)]) / VREG(63);
if (VREG(61) >= D_8082A6E0[VREG(62)]) {
VREG(61) -= step;
step = ABS(R_KALEIDO_PROMPT_CURSOR_ALPHA - sKaleidoPromptCursorAlphaVals[R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE]) /
R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER;
if (R_KALEIDO_PROMPT_CURSOR_ALPHA >= sKaleidoPromptCursorAlphaVals[R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE]) {
R_KALEIDO_PROMPT_CURSOR_ALPHA -= step;
} else {
VREG(61) += step;
R_KALEIDO_PROMPT_CURSOR_ALPHA += step;
}
VREG(63)--;
if (VREG(63) == 0) {
VREG(61) = D_8082A6E0[VREG(62)];
VREG(63) = VREG(60) + VREG(62);
VREG(62) ^= 1;
R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER--;
if (R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER == 0) {
R_KALEIDO_PROMPT_CURSOR_ALPHA = sKaleidoPromptCursorAlphaVals[R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE];
R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER =
R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER_BASE + R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE;
R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE ^= 1;
}
}
}

View file

@ -336,7 +336,7 @@ void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, u16 specialPos) {
PauseContext* pauseCtx = &play->pauseCtx;
pauseCtx->cursorSpecialPos = specialPos;
pauseCtx->pageSwitchTimer = 0;
pauseCtx->delaySwitchPageInputTimer = 0;
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
@ -389,14 +389,14 @@ void KaleidoScope_SetDefaultCursor(PlayState* play) {
void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 pt) {
pauseCtx->mainSubState = PAUSE_MAIN_STATE_SWITCHING_PAGE;
pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ = 0;
pauseCtx->switchPageTimer = 0;
if (!pt) { // pt == 0, scroll left
pauseCtx->mode = pauseCtx->pageIndex * 2 + 1;
Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_LEFT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT;
} else { // pt == 2, scroll left
} else { // pt == 2, scroll right
pauseCtx->mode = pauseCtx->pageIndex * 2;
Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_RIGHT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -432,21 +432,21 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) {
if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
if (pauseCtx->stickRelX < -30) {
pauseCtx->pageSwitchTimer++;
if ((pauseCtx->pageSwitchTimer >= 10) || (pauseCtx->pageSwitchTimer == 0)) {
pauseCtx->delaySwitchPageInputTimer++;
if ((pauseCtx->delaySwitchPageInputTimer >= 10) || (pauseCtx->delaySwitchPageInputTimer == 0)) {
KaleidoScope_SwitchPage(pauseCtx, 0);
}
} else {
pauseCtx->pageSwitchTimer = -1;
pauseCtx->delaySwitchPageInputTimer = -1;
}
} else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) {
if (pauseCtx->stickRelX > 30) {
pauseCtx->pageSwitchTimer++;
if ((pauseCtx->pageSwitchTimer >= 10) || (pauseCtx->pageSwitchTimer == 0)) {
pauseCtx->delaySwitchPageInputTimer++;
if ((pauseCtx->delaySwitchPageInputTimer >= 10) || (pauseCtx->delaySwitchPageInputTimer == 0)) {
KaleidoScope_SwitchPage(pauseCtx, 2);
}
} else {
pauseCtx->pageSwitchTimer = -1;
pauseCtx->delaySwitchPageInputTimer = -1;
}
}
}
@ -457,7 +457,7 @@ void KaleidoScope_DrawCursor(PlayState* play, u16 pageIndex) {
OPEN_DISPS(play->state.gfxCtx, "../z_kaleido_scope_PAL.c", 955);
temp = pauseCtx->mainSubState;
temp = pauseCtx->mainSubState; // fake?
if ((((pauseCtx->mainSubState == PAUSE_MAIN_STATE_IDLE) || (temp == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
(pauseCtx->state == PAUSE_STATE_MAIN)) ||
@ -564,11 +564,11 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
if ((pauseCtx->state < PAUSE_STATE_8)
/* PAUSE_STATE_OFF, PAUSE_STATE_WAIT_LETTERBOX, PAUSE_STATE_WAIT_BG_PRERENDER, PAUSE_STATE_INIT,
PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_7_SAVE_PROMPT_ */
PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_SAVE_PROMPT */
|| (pauseCtx->state >= PAUSE_STATE_CLOSING)
/* PAUSE_STATE_CLOSING, PAUSE_STATE_UNPAUSE */
) {
if (pauseCtx->state != PAUSE_STATE_7_SAVE_PROMPT_) {
if (pauseCtx->state != PAUSE_STATE_SAVE_PROMPT) {
stepR = ABS(sColor82ABRed_D_8082AB8C -
sCursorColors_D_8082ACF4[pauseCtx->cursorColorSet + sCursorColorBlinkOffset_D_8082AD40][0]) /
sCursorColorBlinkTimer_D_8082AD3C;
@ -851,7 +851,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
Gfx_SetupDL_42Opa(gfxCtx);
if ((pauseCtx->state == PAUSE_STATE_7_SAVE_PROMPT_) ||
if ((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) ||
((pauseCtx->state >= PAUSE_STATE_8) && (pauseCtx->state < PAUSE_STATE_CLOSING))
/* PAUSE_STATE_8, PAUSE_STATE_9, PAUSE_STATE_10, PAUSE_STATE_11, PAUSE_STATE_12,
PAUSE_STATE_13, PAUSE_STATE_14, PAUSE_STATE_15, PAUSE_STATE_16, PAUSE_STATE_17 */
@ -861,35 +861,35 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
if (!pauseCtx->pageIndex) { // pageIndex == PAUSE_ITEM
pauseCtx->rollRotPageItem = pauseCtx->rollRotSavePromptPage_unk_204 + 314.0f;
pauseCtx->rollRotPageItem = pauseCtx->rollRotSavePrompt_ + 314.0f;
Matrix_Translate(0.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f,
-pauseCtx->savePromptOffsetDepth_unk_1F0 / 10.0f, MTXMODE_NEW);
Matrix_Translate(0.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f, -pauseCtx->savePromptOffsetDepth_ / 10.0f,
MTXMODE_NEW);
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
Matrix_RotateX(-pauseCtx->rollRotSavePromptPage_unk_204 / 100.0f, MTXMODE_APPLY);
Matrix_RotateX(-pauseCtx->rollRotSavePrompt_ / 100.0f, MTXMODE_APPLY);
} else if (pauseCtx->pageIndex == PAUSE_MAP) {
pauseCtx->rollRotPageMap = pauseCtx->rollRotSavePromptPage_unk_204 + 314.0f;
pauseCtx->rollRotPageMap = pauseCtx->rollRotSavePrompt_ + 314.0f;
Matrix_Translate(pauseCtx->savePromptOffsetDepth_unk_1F0 / 10.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f,
0.0f, MTXMODE_NEW);
Matrix_Translate(pauseCtx->savePromptOffsetDepth_ / 10.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f, 0.0f,
MTXMODE_NEW);
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
Matrix_RotateZ(-pauseCtx->rollRotSavePromptPage_unk_204 / 100.0f, MTXMODE_APPLY);
Matrix_RotateZ(-pauseCtx->rollRotSavePrompt_ / 100.0f, MTXMODE_APPLY);
Matrix_RotateY(-1.57f, MTXMODE_APPLY);
} else if (pauseCtx->pageIndex == PAUSE_QUEST) {
pauseCtx->rollRotPageQuest = pauseCtx->rollRotSavePromptPage_unk_204 + 314.0f;
pauseCtx->rollRotPageQuest = pauseCtx->rollRotSavePrompt_ + 314.0f;
Matrix_Translate(0.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f,
pauseCtx->savePromptOffsetDepth_unk_1F0 / 10.0f, MTXMODE_NEW);
Matrix_Translate(0.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f, pauseCtx->savePromptOffsetDepth_ / 10.0f,
MTXMODE_NEW);
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
Matrix_RotateX(pauseCtx->rollRotSavePromptPage_unk_204 / 100.0f, MTXMODE_APPLY);
Matrix_RotateX(pauseCtx->rollRotSavePrompt_ / 100.0f, MTXMODE_APPLY);
Matrix_RotateY(3.14f, MTXMODE_APPLY);
} else {
pauseCtx->rollRotPageEquip = pauseCtx->rollRotSavePromptPage_unk_204 + 314.0f;
pauseCtx->rollRotPageEquip = pauseCtx->rollRotSavePrompt_ + 314.0f;
Matrix_Translate(-pauseCtx->savePromptOffsetDepth_unk_1F0 / 10.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f,
0.0f, MTXMODE_NEW);
Matrix_Translate(-pauseCtx->savePromptOffsetDepth_ / 10.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f, 0.0f,
MTXMODE_NEW);
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
Matrix_RotateZ(pauseCtx->rollRotSavePromptPage_unk_204 / 100.0f, MTXMODE_APPLY);
Matrix_RotateZ(pauseCtx->rollRotSavePrompt_ / 100.0f, MTXMODE_APPLY);
Matrix_RotateY(1.57f, MTXMODE_APPLY);
}
@ -900,22 +900,23 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
/* PAUSE_STATE_8, PAUSE_STATE_9, PAUSE_STATE_10, PAUSE_STATE_11, PAUSE_STATE_12,
PAUSE_STATE_13, PAUSE_STATE_14, PAUSE_STATE_15, PAUSE_STATE_16, PAUSE_STATE_17 */) {
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sGameOverTexs);
} else {
} else { // PAUSE_STATE_SAVE_PROMPT
POLY_OPA_DISP =
KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]);
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->saveVtx[60], 32, 0);
if (((pauseCtx->state == PAUSE_STATE_7_SAVE_PROMPT_) && (pauseCtx->unk_1EC_ps7_ < PAUSE_S7_4)
/* PAUSE_S7_0, PAUSE_S7_1, PAUSE_S7_2, PAUSE_S7_3 */) ||
if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) && (pauseCtx->savePromptSubState < PAUSE_SAVE_PROMPT_STATE_SAVED)
/* PAUSE_SAVE_PROMPT_STATE_APPEARING, PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE, PAUSE_SAVE_PROMPT_STATE_CLOSING, PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU */) ||
(pauseCtx->state == PAUSE_STATE_14)) {
POLY_OPA_DISP =
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sSavePromptTexs[gSaveContext.language], 152, 16, 0);
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, 255, 100, VREG(61));
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 100, R_KALEIDO_PROMPT_CURSOR_ALPHA);
if (pauseCtx->promptChoice == 0) {
gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL);
@ -932,16 +933,17 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
POLY_OPA_DISP =
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16);
} else if ((pauseCtx->state != PAUSE_STATE_7_SAVE_PROMPT_) || (pauseCtx->unk_1EC_ps7_ < PAUSE_S7_4)
/* PAUSE_S7_0, PAUSE_S7_1, PAUSE_S7_2, PAUSE_S7_3 */) {
} else if ((pauseCtx->state != PAUSE_STATE_SAVE_PROMPT) || (pauseCtx->savePromptSubState < PAUSE_SAVE_PROMPT_STATE_SAVED)
/* PAUSE_SAVE_PROMPT_STATE_APPEARING, PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE, PAUSE_SAVE_PROMPT_STATE_CLOSING, PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU */) {
if ((pauseCtx->state != PAUSE_STATE_15) &&
((pauseCtx->state == PAUSE_STATE_16) || (pauseCtx->state == PAUSE_STATE_17))) {
POLY_OPA_DISP =
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sContinuePromptTexs[gSaveContext.language], 152, 16, 0);
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, 255, 100, VREG(61));
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 100, R_KALEIDO_PROMPT_CURSOR_ALPHA);
if (pauseCtx->promptChoice == 0) {
gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL);
@ -1301,7 +1303,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0);
if (pauseCtx->state == PAUSE_STATE_7_SAVE_PROMPT_) {
if (pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) {
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(61 + gSaveContext.language);
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
@ -1524,7 +1526,7 @@ void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) {
pauseCtx->eye.x += D_8082ABAC_pageSwitch_eye_dx_[mode];
pauseCtx->eye.z += D_8082ABCC_pageSwitch_eye_dz_[mode];
if (pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ < 32) {
if (pauseCtx->switchPageTimer < 32) {
R_PAUSE_CURSOR_LEFT_X -= R_PAUSE_CURSOR_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_CURSOR_RIGHT_X -= R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
} else {
@ -1532,10 +1534,10 @@ void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) {
R_PAUSE_CURSOR_RIGHT_X += R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
}
pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ += 4;
pauseCtx->switchPageTimer += 4;
if (pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ == 64) {
pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ = 0;
if (pauseCtx->switchPageTimer == 64) {
pauseCtx->switchPageTimer = 0;
pauseCtx->pageIndex = D_8082ABEC_modeToNewPageIndex_[pauseCtx->mode];
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
}
@ -1953,8 +1955,9 @@ void KaleidoScope_InitVertices(PlayState* play, GraphicsContext* gfxCtx) {
if ((pauseCtx->state == PAUSE_STATE_OPENING_1) ||
(pauseCtx->state >= PAUSE_STATE_CLOSING
/* PAUSE_STATE_CLOSING, PAUSE_STATE_UNPAUSE */) ||
((pauseCtx->state == PAUSE_STATE_7_SAVE_PROMPT_) &&
((pauseCtx->unk_1EC_ps7_ == PAUSE_S7_2) || (pauseCtx->unk_1EC_ps7_ == PAUSE_S7_5))) ||
((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) &&
((pauseCtx->savePromptSubState == PAUSE_SAVE_PROMPT_STATE_CLOSING) ||
(pauseCtx->savePromptSubState == PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED))) ||
((pauseCtx->state >= PAUSE_STATE_8) && (pauseCtx->state <= PAUSE_STATE_13)
/* PAUSE_STATE_8, PAUSE_STATE_9, PAUSE_STATE_10, PAUSE_STATE_11, PAUSE_STATE_12, PAUSE_STATE_13 */)) {
pauseCtx->offsetY = 80;
@ -2486,14 +2489,16 @@ void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount) {
}
}
void KaleidoScope_UpdateOpening_(PlayState* play) {
void KaleidoScope_UpdateOpening(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
pauseCtx->eye.x += D_8082ABAC_pageSwitch_eye_dx_[pauseCtx->mode] * ZREG(46);
pauseCtx->eye.z += D_8082ABCC_pageSwitch_eye_dz_[pauseCtx->mode] * ZREG(46);
pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ += 4 * ZREG(46);
pauseCtx->switchPageTimer += 4 * ZREG(46);
if (pauseCtx->switchPageTimer == (4 * 16 * ZREG(47))) {
// Finished opening
if (pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ == (4 * 16 * ZREG(47))) {
func_80084BF4(play, 1);
gSaveContext.buttonStatus[0] = D_8082AB6C[pauseCtx->pageIndex][0];
@ -2505,11 +2510,11 @@ void KaleidoScope_UpdateOpening_(PlayState* play) {
pauseCtx->pageIndex = D_8082ABEC_modeToNewPageIndex_[pauseCtx->mode];
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->state++; // PAUSE_STATE_OPENING_2 or PAUSE_STATE_MAIN
pauseCtx->state++; // PAUSE_STATE_MAIN
pauseCtx->alpha = 255;
Interface_LoadActionLabelB(play, DO_ACTION_SAVE);
} else if (pauseCtx->unk_1EA_OpenMenuAndPageSwitchTimer__ == 64) {
} else if (pauseCtx->switchPageTimer == 64) {
pauseCtx->pageIndex = D_8082ABEC_modeToNewPageIndex_[pauseCtx->mode];
pauseCtx->mode = (u16)(pauseCtx->pageIndex * 2) + 1;
}
@ -2636,9 +2641,9 @@ void KaleidoScope_UpdateDungeonMap(PlayState* play) {
}
void KaleidoScope_Update(PlayState* play) {
static s16 D_8082B258_sState66NextState_ = PAUSE_MAIN_STATE_IDLE;
static s16 D_8082B25C_sState66NextStateTimer_ = 10;
static s16 sTimer_D_8082B260 = 0;
static s16 sMainSubStateAfterSongPlayerPlayingDone = PAUSE_MAIN_STATE_IDLE;
static s16 sDelayTimer = 10;
static s16 sTimer_ = 0;
PauseContext* pauseCtx = &play->pauseCtx;
InterfaceContext* interfaceCtx = &play->interfaceCtx;
GameOverContext* gameOverCtx = &play->gameOverCtx;
@ -2656,8 +2661,8 @@ void KaleidoScope_Update(PlayState* play) {
s32 pad;
if ((R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_DONE) &&
(((pauseCtx->state >= PAUSE_STATE_OPENING_1) && (pauseCtx->state <= PAUSE_STATE_7_SAVE_PROMPT_)
/* PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_7_SAVE_PROMPT_ */
(((pauseCtx->state >= PAUSE_STATE_OPENING_1) && (pauseCtx->state <= PAUSE_STATE_SAVE_PROMPT)
/* PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_SAVE_PROMPT */
) ||
((pauseCtx->state >= PAUSE_STATE_10) && (pauseCtx->state <= PAUSE_STATE_CLOSING)
/* PAUSE_STATE_10, PAUSE_STATE_11, PAUSE_STATE_12, PAUSE_STATE_13, PAUSE_STATE_14,
@ -2674,10 +2679,10 @@ void KaleidoScope_Update(PlayState* play) {
KaleidoScope_UpdateCursorSize(play);
KaleidoScope_HandlePageToggles(pauseCtx, input);
} else if ((pauseCtx->pageIndex == PAUSE_QUEST) &&
((pauseCtx->mainSubState <
PAUSE_MAIN_STATE_3) /* PAUSE_MAIN_STATE_IDLE, PAUSE_MAIN_STATE_SWITCHING_PAGE,
PAUSE_MAIN_STATE_SONG_PLAYBACK */
|| (pauseCtx->mainSubState == PAUSE_MAIN_STATE_SONG_PLAYER_PLAYING))) {
((pauseCtx->mainSubState < PAUSE_MAIN_STATE_3
/* PAUSE_MAIN_STATE_IDLE, PAUSE_MAIN_STATE_SWITCHING_PAGE, PAUSE_MAIN_STATE_SONG_PLAYBACK */
) ||
(pauseCtx->mainSubState == PAUSE_MAIN_STATE_SONG_PLAYER_PLAYING))) {
KaleidoScope_UpdateCursorSize(play);
}
@ -2702,7 +2707,7 @@ void KaleidoScope_Update(PlayState* play) {
R_PAUSE_CURSOR_LEFT_X = -175;
R_PAUSE_CURSOR_RIGHT_X = 155;
pauseCtx->rollRotSavePromptPage_unk_204 = -314.0f;
pauseCtx->rollRotSavePrompt_ = -314.0f;
//! @bug messed up alignment, should match `ALIGN64`
pauseCtx->playerSegment = (void*)(((uintptr_t)play->objectCtx.spaceStart + 0x30) & ~0x3F);
@ -2756,6 +2761,7 @@ void KaleidoScope_Update(PlayState* play) {
case SCENE_JYASINBOSS:
case SCENE_HAKADAN_BS:
sInDungeonScene = true;
size2 = (uintptr_t)_icon_item_dungeon_staticSegmentRomEnd -
(uintptr_t)_icon_item_dungeon_staticSegmentRomStart;
osSyncPrintf("icon_item_dungeon dungeon-size2=%x\n", size2);
@ -2770,6 +2776,7 @@ void KaleidoScope_Update(PlayState* play) {
default:
sInDungeonScene = false;
size2 = (uintptr_t)_icon_item_field_staticSegmentRomEnd -
(uintptr_t)_icon_item_field_staticSegmentRomStart;
osSyncPrintf("icon_item_field field-size2=%x\n", size2);
@ -3081,12 +3088,12 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->state = PAUSE_STATE_OPENING_2;
}
KaleidoScope_UpdateOpening_(play);
KaleidoScope_UpdateOpening(play);
break;
case PAUSE_STATE_OPENING_2:
pauseCtx->alpha += (u16)(255 / (R_PAUSE_UI_ANIMS_DURATION + R_PAUSE_UI_ANIM_ALPHA_ADD_DURATION));
KaleidoScope_UpdateOpening_(play);
KaleidoScope_UpdateOpening(play);
if (pauseCtx->state == PAUSE_STATE_MAIN) {
KaleidoScope_UpdateNamePanel(play);
@ -3111,8 +3118,8 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_0;
pauseCtx->state = PAUSE_STATE_7_SAVE_PROMPT_;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = PAUSE_STATE_SAVE_PROMPT;
}
break;
@ -3159,16 +3166,16 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_0;
pauseCtx->state = PAUSE_STATE_7_SAVE_PROMPT_;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = PAUSE_STATE_SAVE_PROMPT;
} else if (pauseCtx->ocarinaStaff->state == pauseCtx->ocarinaSongIdx) {
// The player successfully played the song
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
D_8082B258_sState66NextState_ = PAUSE_MAIN_STATE_IDLE;
D_8082B25C_sState66NextStateTimer_ = 30;
sMainSubStateAfterSongPlayerPlayingDone = PAUSE_MAIN_STATE_IDLE;
sDelayTimer = 30;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_SONG_PLAYER_PLAYING_DONE;
} else if (pauseCtx->ocarinaStaff->state == 0xFF) {
// The player failed to play the song
@ -3176,16 +3183,16 @@ void KaleidoScope_Update(PlayState* play) {
Audio_PlaySfxGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
D_8082B258_sState66NextState_ = PAUSE_MAIN_STATE_SONG_PLAYER_PLAYING_INIT;
D_8082B25C_sState66NextStateTimer_ = 20;
sMainSubStateAfterSongPlayerPlayingDone = PAUSE_MAIN_STATE_SONG_PLAYER_PLAYING_INIT;
sDelayTimer = 20;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_SONG_PLAYER_PLAYING_DONE;
}
break;
case PAUSE_MAIN_STATE_SONG_PLAYER_PLAYING_DONE:
D_8082B25C_sState66NextStateTimer_--;
if (D_8082B25C_sState66NextStateTimer_ == 0) {
pauseCtx->mainSubState = D_8082B258_sState66NextState_;
sDelayTimer--;
if (sDelayTimer == 0) {
pauseCtx->mainSubState = sMainSubStateAfterSongPlayerPlayingDone;
if (pauseCtx->mainSubState == PAUSE_MAIN_STATE_IDLE) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
@ -3215,8 +3222,8 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_0;
pauseCtx->state = PAUSE_STATE_7_SAVE_PROMPT_;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = PAUSE_STATE_SAVE_PROMPT;
}
break;
@ -3229,47 +3236,55 @@ void KaleidoScope_Update(PlayState* play) {
}
break;
case PAUSE_STATE_7_SAVE_PROMPT_:
switch (pauseCtx->unk_1EC_ps7_) {
case PAUSE_S7_0:
pauseCtx->rollRotSavePromptPage_unk_204 -= 314.0f / R_PAUSE_UI_ANIMS_DURATION;
case PAUSE_STATE_SAVE_PROMPT:
switch (pauseCtx->savePromptSubState) {
case PAUSE_SAVE_PROMPT_STATE_APPEARING:
pauseCtx->rollRotSavePrompt_ -= 314.0f / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_CURSOR_LEFT_X -= R_PAUSE_CURSOR_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_CURSOR_RIGHT_X -= R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
if (pauseCtx->rollRotSavePromptPage_unk_204 <= -628.0f) {
pauseCtx->rollRotSavePromptPage_unk_204 = -628.0f;
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_1;
if (pauseCtx->rollRotSavePrompt_ <= -628.0f) {
pauseCtx->rollRotSavePrompt_ = -628.0f;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE;
}
break;
case PAUSE_S7_1:
case PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE:
if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
if (pauseCtx->promptChoice != 0) {
Interface_SetDoAction(play, DO_ACTION_NONE);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_2;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_CLOSING;
R_PAUSE_OFFSET_VERTICAL = -6240;
YREG(8) = pauseCtx->rollRotSavePromptPage_unk_204;
YREG(8) = pauseCtx->rollRotSavePrompt_;
func_800F64E0(0);
} else {
Audio_PlaySfxGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
Play_SaveSceneFlags(play);
gSaveContext.savedSceneId = play->sceneId;
Sram_WriteSave(&play->sramCtx);
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_4;
D_8082B25C_sState66NextStateTimer_ = 3;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_SAVED;
sDelayTimer = 3;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_START) ||
CHECK_BTN_ALL(input->press.button, BTN_B)) {
Interface_SetDoAction(play, DO_ACTION_NONE);
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_2;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_CLOSING;
R_PAUSE_OFFSET_VERTICAL = -6240;
YREG(8) = pauseCtx->rollRotSavePromptPage_unk_204;
YREG(8) = pauseCtx->rollRotSavePrompt_;
func_800F64E0(0);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
@ -3277,47 +3292,51 @@ void KaleidoScope_Update(PlayState* play) {
}
break;
case PAUSE_S7_4:
case PAUSE_SAVE_PROMPT_STATE_SAVED:
if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) ||
CHECK_BTN_ALL(input->press.button, BTN_START) || (--D_8082B25C_sState66NextStateTimer_ == 0)) {
CHECK_BTN_ALL(input->press.button, BTN_START) || (--sDelayTimer == 0)) {
Interface_SetDoAction(play, DO_ACTION_NONE);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_5;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED;
R_PAUSE_OFFSET_VERTICAL = -6240;
YREG(8) = pauseCtx->rollRotSavePromptPage_unk_204;
YREG(8) = pauseCtx->rollRotSavePrompt_;
func_800F64E0(0);
}
break;
case PAUSE_S7_3:
case PAUSE_S7_6:
pauseCtx->rollRotSavePromptPage_unk_204 += 314.0f / R_PAUSE_UI_ANIMS_DURATION;
case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU:
case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU_ALT:
pauseCtx->rollRotSavePrompt_ += 314.0f / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_CURSOR_LEFT_X += R_PAUSE_CURSOR_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_CURSOR_RIGHT_X += R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
if (pauseCtx->rollRotSavePromptPage_unk_204 >= -314.0f) {
if (pauseCtx->rollRotSavePrompt_ >= -314.0f) {
pauseCtx->state = PAUSE_STATE_MAIN;
pauseCtx->unk_1EC_ps7_ = PAUSE_S7_0;
pauseCtx->savePromptSubState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->rollRotPageItem = pauseCtx->rollRotPageEquip = pauseCtx->rollRotPageMap =
pauseCtx->rollRotPageQuest = 0.0f;
pauseCtx->rollRotSavePromptPage_unk_204 = -314.0f;
pauseCtx->rollRotSavePrompt_ = -314.0f;
}
break;
case PAUSE_S7_2:
case PAUSE_S7_5:
if (pauseCtx->rollRotSavePromptPage_unk_204 != (YREG(8) + 160.0f)) {
case PAUSE_SAVE_PROMPT_STATE_CLOSING:
case PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED:
if (pauseCtx->rollRotSavePrompt_ != (YREG(8) + 160.0f)) {
pauseCtx->rollRotPageItem = pauseCtx->rollRotPageEquip = pauseCtx->rollRotPageMap =
pauseCtx->rollRotPageQuest += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->rollRotSavePromptPage_unk_204 += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->rollRotSavePrompt_ += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->infoPanelOffsetY -= 40 / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_CURSOR_LEFT_X -= R_PAUSE_CURSOR_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_CURSOR_RIGHT_X -= R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
XREG(5) -= 150 / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->alpha -= (u16)(255 / R_PAUSE_UI_ANIMS_DURATION);
if (pauseCtx->rollRotSavePromptPage_unk_204 == (YREG(8) + 160.0f)) {
if (pauseCtx->rollRotSavePrompt_ == (YREG(8) + 160.0f)) {
pauseCtx->alpha = 0;
}
} else {
@ -3327,7 +3346,7 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->rollRotPageQuest = 160.0f;
pauseCtx->namedItem = PAUSE_ITEM_NONE;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->rollRotSavePromptPage_unk_204 = -434.0f;
pauseCtx->rollRotSavePrompt_ = -434.0f;
}
break;
}
@ -3338,7 +3357,7 @@ void KaleidoScope_Update(PlayState* play) {
VREG(30) + 3;
R_PAUSE_CURSOR_LEFT_X = -175;
R_PAUSE_CURSOR_RIGHT_X = 155;
pauseCtx->rollRotSavePromptPage_unk_204 = -434.0f;
pauseCtx->rollRotSavePrompt_ = -434.0f;
Interface_ChangeAlpha(1);
//! @bug messed up alignment, should match `ALIGN64`
@ -3388,17 +3407,17 @@ void KaleidoScope_Update(PlayState* play) {
sDrawGameOverEnvColorRed_D_8082AB9C = 30;
sDrawGameOverEnvColorGreen_D_8082ABA0 = 0;
sDrawGameOverEnvColorBlue_D_8082ABA4 = 0;
sTimer_D_8082B260 = 30;
sTimer_ = 30;
VREG(88) = 98;
pauseCtx->promptChoice = 0;
pauseCtx->state++; // PAUSE_STATE_11
break;
case PAUSE_STATE_11:
stepR = ABS(sColor82ABRed_D_8082AB8C - 30) / sTimer_D_8082B260;
stepG = ABS(sColor82ABGreen_D_8082AB90) / sTimer_D_8082B260;
stepB = ABS(sColor82ABBlue_D_8082AB94) / sTimer_D_8082B260;
stepA = ABS(sColor82ABGameOverPrimAlpha_D_8082AB98 - 255) / sTimer_D_8082B260;
stepR = ABS(sColor82ABRed_D_8082AB8C - 30) / sTimer_;
stepG = ABS(sColor82ABGreen_D_8082AB90) / sTimer_;
stepB = ABS(sColor82ABBlue_D_8082AB94) / sTimer_;
stepA = ABS(sColor82ABGameOverPrimAlpha_D_8082AB98 - 255) / sTimer_;
if (sColor82ABRed_D_8082AB8C >= 30) {
sColor82ABRed_D_8082AB8C -= stepR;
} else {
@ -3420,9 +3439,9 @@ void KaleidoScope_Update(PlayState* play) {
sColor82ABGameOverPrimAlpha_D_8082AB98 += stepA;
}
stepR = ABS(sDrawGameOverEnvColorRed_D_8082AB9C - 255) / sTimer_D_8082B260;
stepG = ABS(sDrawGameOverEnvColorGreen_D_8082ABA0 - 130) / sTimer_D_8082B260;
stepB = ABS(sDrawGameOverEnvColorBlue_D_8082ABA4) / sTimer_D_8082B260;
stepR = ABS(sDrawGameOverEnvColorRed_D_8082AB9C - 255) / sTimer_;
stepG = ABS(sDrawGameOverEnvColorGreen_D_8082ABA0 - 130) / sTimer_;
stepB = ABS(sDrawGameOverEnvColorBlue_D_8082ABA4) / sTimer_;
if (sDrawGameOverEnvColorRed_D_8082AB9C >= 255) {
sDrawGameOverEnvColorRed_D_8082AB9C -= stepR;
} else {
@ -3439,8 +3458,8 @@ void KaleidoScope_Update(PlayState* play) {
sDrawGameOverEnvColorBlue_D_8082ABA4 += stepB;
}
sTimer_D_8082B260--;
if (sTimer_D_8082B260 == 0) {
sTimer_--;
if (sTimer_ == 0) {
sColor82ABRed_D_8082AB8C = 30;
sColor82ABGreen_D_8082AB90 = 0;
sColor82ABBlue_D_8082AB94 = 0;
@ -3451,21 +3470,20 @@ void KaleidoScope_Update(PlayState* play) {
sDrawGameOverEnvColorBlue_D_8082ABA4 = 0;
pauseCtx->state++; // PAUSE_STATE_12
sTimer_D_8082B260 = 40;
sTimer_ = 40;
}
break;
case PAUSE_STATE_12:
sTimer_D_8082B260--;
if (sTimer_D_8082B260 == 0) {
sTimer_--;
if (sTimer_ == 0) {
pauseCtx->state = PAUSE_STATE_13;
}
break;
case PAUSE_STATE_13:
pauseCtx->rollRotPageItem = pauseCtx->rollRotPageEquip = pauseCtx->rollRotPageMap =
pauseCtx->rollRotPageQuest = pauseCtx->rollRotSavePromptPage_unk_204 -=
160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->rollRotPageQuest = pauseCtx->rollRotSavePrompt_ -= 160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->infoPanelOffsetY += 40 / R_PAUSE_UI_ANIMS_DURATION;
interfaceCtx->startAlpha += 255 / R_PAUSE_UI_ANIMS_DURATION;
VREG(88) -= 3;
@ -3473,8 +3491,8 @@ void KaleidoScope_Update(PlayState* play) {
R_PAUSE_CURSOR_RIGHT_X += R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
XREG(5) += 150 / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->alpha += (u16)(255 / (R_PAUSE_UI_ANIMS_DURATION + R_PAUSE_UI_ANIM_ALPHA_ADD_DURATION));
if (pauseCtx->rollRotSavePromptPage_unk_204 < -628.0f) {
pauseCtx->rollRotSavePromptPage_unk_204 = -628.0f;
if (pauseCtx->rollRotSavePrompt_ < -628.0f) {
pauseCtx->rollRotSavePrompt_ = -628.0f;
interfaceCtx->startAlpha = 255;
VREG(88) = 66;
R_PAUSE_OFFSET_VERTICAL = 0;
@ -3485,7 +3503,7 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.deaths = 999;
}
}
osSyncPrintf("kscope->angle_s = %f\n", pauseCtx->rollRotSavePromptPage_unk_204);
osSyncPrintf("kscope->angle_s = %f\n", pauseCtx->rollRotSavePrompt_);
break;
case PAUSE_STATE_14:
@ -3504,17 +3522,17 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.savedSceneId = play->sceneId;
Sram_WriteSave(&play->sramCtx);
pauseCtx->state = PAUSE_STATE_15;
D_8082B25C_sState66NextStateTimer_ = 3;
sDelayTimer = 3;
}
}
break;
case PAUSE_STATE_15:
D_8082B25C_sState66NextStateTimer_--;
if (D_8082B25C_sState66NextStateTimer_ == 0) {
sDelayTimer--;
if (sDelayTimer == 0) {
pauseCtx->state = PAUSE_STATE_16;
gameOverCtx->state++;
} else if ((D_8082B25C_sState66NextStateTimer_ <= 80) &&
} else if ((sDelayTimer <= 80) &&
(CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START))) {
pauseCtx->state = PAUSE_STATE_16;
gameOverCtx->state++;