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

Merge commit '05c87518e7ef5b6f12792c38975aa6a06cbaaf60' into doc_pause_menu

This commit is contained in:
Dragorn421 2024-08-01 21:28:06 +02:00
commit 43931defff
No known key found for this signature in database
GPG key ID: 381AEBAF3D429335
4 changed files with 114 additions and 53 deletions

View file

@ -109,7 +109,7 @@
#define R_C_UP_ICON_Y YREG(89) #define R_C_UP_ICON_Y YREG(89)
#define R_EPONAS_SONG_PLAYED DREG(53) #define R_EPONAS_SONG_PLAYED DREG(53)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + (i)) #define R_MAGIC_FILL_COLOR(i) ZREG(0 + (i))
#define R_PAUSE_SWITCH_PAGE_FRAME_ADVANCE_ON ZREG(13) #define R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON ZREG(13)
#define R_PAUSE_CURSOR_L_R_SELECTED_PRIM_TIMER ZREG(28) #define R_PAUSE_CURSOR_L_R_SELECTED_PRIM_TIMER ZREG(28)
#define R_C_BTN_COLOR(i) ZREG(39 + (i)) #define R_C_BTN_COLOR(i) ZREG(39 + (i))
#define R_B_BTN_COLOR(i) ZREG(43 + (i)) #define R_B_BTN_COLOR(i) ZREG(43 + (i))

View file

@ -20,6 +20,19 @@ typedef enum {
/* 0x04 */ PAUSE_WORLD_MAP /* 0x04 */ PAUSE_WORLD_MAP
} PauseMenuPage; } PauseMenuPage;
// The XZ coordinates in which direction each pause page is at
// e.g. the item page is in the -z direction
/*
* < item >
*
* ^ ^
* x
* equip o--> map
* |
* v z v v
*
* < quest >
*/
#define PAUSE_ITEM_X (0) #define PAUSE_ITEM_X (0)
#define PAUSE_ITEM_Z (-1) #define PAUSE_ITEM_Z (-1)
#define PAUSE_MAP_X (1) #define PAUSE_MAP_X (1)
@ -29,6 +42,9 @@ typedef enum {
#define PAUSE_EQUIP_X (-1) #define PAUSE_EQUIP_X (-1)
#define PAUSE_EQUIP_Z (0) #define PAUSE_EQUIP_Z (0)
// The pause camera looks at x=0,z=0,
// with the eye being PAUSE_EYE_DIST away in the direction opposite to the active page,
// which results in the camera being pointed (through x=0,z=0) towards the active page.
#define PAUSE_EYE_DIST (64.0f) #define PAUSE_EYE_DIST (64.0f)
#define PAUSE_EQUIP_PLAYER_WIDTH 64 #define PAUSE_EQUIP_PLAYER_WIDTH 64
@ -154,9 +170,9 @@ typedef struct {
/* 0x01D6 */ u16 debugState; /* 0x01D6 */ u16 debugState;
/* 0x01D8 */ Vec3f eye; /* 0x01D8 */ Vec3f eye;
/* 0x01E4 */ u16 mainState; /* 0x01E4 */ u16 mainState;
/* 0x01E6 */ u16 nextPageMode; // (2 * prev pageIndex) + (scroll left ? 1 : 0) /* 0x01E6 */ u16 nextPageMode; // During a page switch, indicates the page before switching and the direction to scroll in. Value is `(2 * prev pageIndex) + (scroll left ? 1 : 0)`
/* 0x01E8 */ u16 pageIndex; // "kscp_pos" /* 0x01E8 */ u16 pageIndex; // "kscp_pos"
/* 0x01EA */ u16 switchPageTimer; /* 0x01EA */ u16 pageSwitchTimer;
/* 0x01EC */ u16 savePromptState; /* 0x01EC */ u16 savePromptState;
/* 0x01F0 */ f32 savePromptOffsetDepth_; /* 0x01F0 */ f32 savePromptOffsetDepth_;
/* 0x01F4 */ f32 itemPageRoll; /* 0x01F4 */ f32 itemPageRoll;

View file

@ -1,17 +1,25 @@
#include "global.h" #include "global.h"
/*
* The following three arrays are effectively unused.
* They are partly equivalent to the `sKaleidoSetupRightPage*` arrays below,
* but make each page correspond to the opposite page instead of the page to the right.
*/
s16 sKaleidoSetupUnusedPageIndex[] = { s16 sKaleidoSetupUnusedPageIndex[] = {
PAUSE_QUEST, // PAUSE_ITEM PAUSE_QUEST, // PAUSE_ITEM
PAUSE_EQUIP, // PAUSE_MAP PAUSE_EQUIP, // PAUSE_MAP
PAUSE_ITEM, // PAUSE_QUEST PAUSE_ITEM, // PAUSE_QUEST
PAUSE_MAP, // PAUSE_EQUIP PAUSE_MAP, // PAUSE_EQUIP
}; };
f32 sKaleidoSetupUnusedEyeX[] = { f32 sKaleidoSetupUnusedEyeX[] = {
PAUSE_EYE_DIST * -PAUSE_QUEST_X, // PAUSE_ITEM PAUSE_EYE_DIST * -PAUSE_QUEST_X, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_EQUIP_X, // PAUSE_MAP PAUSE_EYE_DIST * -PAUSE_EQUIP_X, // PAUSE_MAP
PAUSE_EYE_DIST * -PAUSE_ITEM_X, // PAUSE_QUEST PAUSE_EYE_DIST * -PAUSE_ITEM_X, // PAUSE_QUEST
PAUSE_EYE_DIST * -PAUSE_MAP_X, // PAUSE_EQUIP PAUSE_EYE_DIST * -PAUSE_MAP_X, // PAUSE_EQUIP
}; };
f32 sKaleidoSetupUnusedEyeZ[] = { f32 sKaleidoSetupUnusedEyeZ[] = {
PAUSE_EYE_DIST * -PAUSE_QUEST_Z, // PAUSE_ITEM PAUSE_EYE_DIST * -PAUSE_QUEST_Z, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_EQUIP_Z, // PAUSE_MAP PAUSE_EYE_DIST * -PAUSE_EQUIP_Z, // PAUSE_MAP
@ -19,18 +27,26 @@ f32 sKaleidoSetupUnusedEyeZ[] = {
PAUSE_EYE_DIST * -PAUSE_MAP_Z, // PAUSE_EQUIP PAUSE_EYE_DIST * -PAUSE_MAP_Z, // PAUSE_EQUIP
}; };
/*
* The following three arrays are used when opening the pause menu to set up a page switch such that scrolling left
* brings to the initial page.
* For example to open the menu on page PAUSE_ITEM, the menu would open on PAUSE_MAP and scroll left to PAUSE_ITEM.
*/
s16 sKaleidoSetupRightPageIndex[] = { s16 sKaleidoSetupRightPageIndex[] = {
PAUSE_MAP, // PAUSE_ITEM PAUSE_MAP, // PAUSE_ITEM
PAUSE_QUEST, // PAUSE_MAP PAUSE_QUEST, // PAUSE_MAP
PAUSE_EQUIP, // PAUSE_QUEST PAUSE_EQUIP, // PAUSE_QUEST
PAUSE_ITEM, // PAUSE_EQUIP PAUSE_ITEM, // PAUSE_EQUIP
}; };
f32 sKaleidoSetupRightPageEyeX[] = { f32 sKaleidoSetupRightPageEyeX[] = {
PAUSE_EYE_DIST * -PAUSE_MAP_X, // PAUSE_ITEM PAUSE_EYE_DIST * -PAUSE_MAP_X, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_QUEST_X, // PAUSE_MAP PAUSE_EYE_DIST * -PAUSE_QUEST_X, // PAUSE_MAP
PAUSE_EYE_DIST * -PAUSE_EQUIP_X, // PAUSE_QUEST PAUSE_EYE_DIST * -PAUSE_EQUIP_X, // PAUSE_QUEST
PAUSE_EYE_DIST * -PAUSE_ITEM_X, // PAUSE_EQUIP PAUSE_EYE_DIST * -PAUSE_ITEM_X, // PAUSE_EQUIP
}; };
f32 sKaleidoSetupRightPageEyeZ[] = { f32 sKaleidoSetupRightPageEyeZ[] = {
PAUSE_EYE_DIST * -PAUSE_MAP_Z, // PAUSE_ITEM PAUSE_EYE_DIST * -PAUSE_MAP_Z, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_QUEST_Z, // PAUSE_MAP PAUSE_EYE_DIST * -PAUSE_QUEST_Z, // PAUSE_MAP
@ -60,15 +76,17 @@ void KaleidoSetup_Update(PlayState* play) {
R_PAUSE_CURSOR_LEFT_X = -175; R_PAUSE_CURSOR_LEFT_X = -175;
R_PAUSE_CURSOR_RIGHT_X = 155; R_PAUSE_CURSOR_RIGHT_X = 155;
pauseCtx->switchPageTimer = 0; pauseCtx->pageSwitchTimer = 0;
// irrelevant, the initial page switch animation is handled by KaleidoScope_UpdateOpening // Setting mainState here is irrelevant, mainState is only used under PAUSE_STATE_MAIN,
// and mainState is reset to idle before reaching the main state anyway (KaleidoScopeCall_Update) // which isn't involved in the initial pause menu opening page scrolling animation.
// mainState is also overwritten later before being used.
pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE; pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE;
//! @bug using an unrelated reg //! @bug REG collision
if (R_START_LABEL_DD(0) == 0) { if (R_START_LABEL_DD(0) == 0) {
// Never reached, unused, and the data would be wrong anyway // Never reached, unused, and the data would be wrong anyway
// (scrolling left from this would not bring to the initial page)
pauseCtx->eye.x = sKaleidoSetupUnusedEyeX[pauseCtx->pageIndex]; pauseCtx->eye.x = sKaleidoSetupUnusedEyeX[pauseCtx->pageIndex];
pauseCtx->eye.z = sKaleidoSetupUnusedEyeZ[pauseCtx->pageIndex]; pauseCtx->eye.z = sKaleidoSetupUnusedEyeZ[pauseCtx->pageIndex];
pauseCtx->pageIndex = sKaleidoSetupUnusedPageIndex[pauseCtx->pageIndex]; pauseCtx->pageIndex = sKaleidoSetupUnusedPageIndex[pauseCtx->pageIndex];
@ -117,7 +135,7 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->alpha = 0; pauseCtx->alpha = 0;
// mainState = PAUSE_MAIN_STATE_IDLE , pageIndex = PAUSE_ITEM // mainState = PAUSE_MAIN_STATE_IDLE , pageIndex = PAUSE_ITEM
pauseCtx->switchPageTimer = pauseCtx->mainState = pauseCtx->nextPageMode = pauseCtx->pageIndex = 0; pauseCtx->pageSwitchTimer = pauseCtx->mainState = pauseCtx->nextPageMode = pauseCtx->pageIndex = 0;
pauseCtx->rollRotSavePrompt_ = -314.0f; pauseCtx->rollRotSavePrompt_ = -314.0f;

View file

@ -453,29 +453,44 @@ s16 gVtxPageMapWorldQuadsHeight[VTX_PAGE_MAP_WORLD_QUADS] = {
8, // QUAD_MAP_31 8, // QUAD_MAP_31
}; };
/**
* Contains the status of buttons for each page.
*
* Indexed by `pageIndex + pt` values,
* where pageIndex is from the `PauseMenuPage` enum
* and pt is 0 or 2 (respectively `PAGE_SWITCH_PT_LEFT` and `PAGE_SWITCH_PT_RIGHT`).
*
* `PauseMenuPage` enum values are ordered clockwise, starting at PAUSE_ITEM. That means adding 1 to a page index
* produces (modulo 4) the index of the page to the right, and similar with subtracting 1 for the left page.
* The indexing of this array relies on this property, but without modulo operations. Instead, the data for the first
* and last pages (PAUSE_ITEM, PAUSE_EQUIP) is duplicated.
*
* For example when scrolling left from the quest page PAUSE_QUEST (so, to PAUSE_MAP),
* the index is `PAUSE_QUEST + PAGE_SWITCH_PT_LEFT` and the data is button status for the map page.
*/
static u8 gPageSwitchNextButtonStatus[][5] = { static u8 gPageSwitchNextButtonStatus[][5] = {
// PAUSE_ITEM + SWITCH_PAGE_LEFT_PT // PAUSE_ITEM + PAGE_SWITCH_PT_LEFT
// //
// -> PAUSE_EQUIP // -> PAUSE_EQUIP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED }, { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
// PAUSE_MAP + SWITCH_PAGE_LEFT_PT // PAUSE_MAP + PAGE_SWITCH_PT_LEFT
// //
// -> PAUSE_ITEM // -> PAUSE_ITEM
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED }, { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED },
// PAUSE_QUEST + SWITCH_PAGE_LEFT_PT // PAUSE_QUEST + PAGE_SWITCH_PT_LEFT
// PAUSE_ITEM + SWITCH_PAGE_RIGHT_PT // PAUSE_ITEM + PAGE_SWITCH_PT_RIGHT
// -> PAUSE_MAP // -> PAUSE_MAP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED },
// PAUSE_EQUIP + SWITCH_PAGE_LEFT_PT // PAUSE_EQUIP + PAGE_SWITCH_PT_LEFT
// PAUSE_MAP + SWITCH_PAGE_RIGHT_PT // PAUSE_MAP + PAGE_SWITCH_PT_RIGHT
// -> PAUSE_QUEST // -> PAUSE_QUEST
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED }, { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
// //
// PAUSE_QUEST + SWITCH_PAGE_RIGHT_PT // PAUSE_QUEST + PAGE_SWITCH_PT_RIGHT
// -> PAUSE_EQUIP // -> PAUSE_EQUIP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED }, { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
// //
// PAUSE_EQUIP + SWITCH_PAGE_RIGHT_PT // PAUSE_EQUIP + PAGE_SWITCH_PT_RIGHT
// -> PAUSE_ITEM // -> PAUSE_ITEM
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED }, { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED },
@ -492,26 +507,38 @@ static s16 sDrawGameOverEnvColorBlue_D_8082ABA4 = 0;
static s16 sInDungeonScene = false; static s16 sInDungeonScene = false;
/*
* The following three `sPageSwitch*` arrays are indexed by nextPageMode values,
* which encode the page to switch from and the scroll direction.
*
* sPageSwitchEyeDx/Dz describe how to move the camera eye so that the pages appear scrolling and the next active page
* is switched into view.
*
* sPageSwitchNextPageIndex contains the page a nextPageMode leads to once scrolling is done.
*/
#define PAGE_SWITCH_NSTEPS 16
static f32 sPageSwitchEyeDx[] = { static f32 sPageSwitchEyeDx[] = {
-PAUSE_EYE_DIST * (PAUSE_MAP_X - PAUSE_ITEM_X) / 16, // PAUSE_ITEM right -PAUSE_EYE_DIST * (PAUSE_MAP_X - PAUSE_ITEM_X) / PAGE_SWITCH_NSTEPS, // PAUSE_ITEM right
-PAUSE_EYE_DIST*(PAUSE_EQUIP_X - PAUSE_ITEM_X) / 16, // PAUSE_ITEM left -PAUSE_EYE_DIST*(PAUSE_EQUIP_X - PAUSE_ITEM_X) / PAGE_SWITCH_NSTEPS, // PAUSE_ITEM left
-PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_MAP_X) / 16, // PAUSE_MAP right -PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_MAP_X) / PAGE_SWITCH_NSTEPS, // PAUSE_MAP right
-PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_MAP_X) / 16, // PAUSE_MAP left -PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_MAP_X) / PAGE_SWITCH_NSTEPS, // PAUSE_MAP left
-PAUSE_EYE_DIST*(PAUSE_EQUIP_X - PAUSE_QUEST_X) / 16, // PAUSE_QUEST right -PAUSE_EYE_DIST*(PAUSE_EQUIP_X - PAUSE_QUEST_X) / PAGE_SWITCH_NSTEPS, // PAUSE_QUEST right
-PAUSE_EYE_DIST*(PAUSE_MAP_X - PAUSE_QUEST_X) / 16, // PAUSE_QUEST left -PAUSE_EYE_DIST*(PAUSE_MAP_X - PAUSE_QUEST_X) / PAGE_SWITCH_NSTEPS, // PAUSE_QUEST left
-PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_EQUIP_X) / 16, // PAUSE_EQUIP right -PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_EQUIP_X) / PAGE_SWITCH_NSTEPS, // PAUSE_EQUIP right
-PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_EQUIP_X) / 16, // PAUSE_EQUIP left -PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_EQUIP_X) / PAGE_SWITCH_NSTEPS, // PAUSE_EQUIP left
}; };
static f32 sPageSwitchEyeDz[] = { static f32 sPageSwitchEyeDz[] = {
-PAUSE_EYE_DIST * (PAUSE_MAP_Z - PAUSE_ITEM_Z) / 16, // PAUSE_ITEM right -PAUSE_EYE_DIST * (PAUSE_MAP_Z - PAUSE_ITEM_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_ITEM right
-PAUSE_EYE_DIST*(PAUSE_EQUIP_Z - PAUSE_ITEM_Z) / 16, // PAUSE_ITEM left -PAUSE_EYE_DIST*(PAUSE_EQUIP_Z - PAUSE_ITEM_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_ITEM left
-PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_MAP_Z) / 16, // PAUSE_MAP right -PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_MAP_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_MAP right
-PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_MAP_Z) / 16, // PAUSE_MAP left -PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_MAP_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_MAP left
-PAUSE_EYE_DIST*(PAUSE_EQUIP_Z - PAUSE_QUEST_Z) / 16, // PAUSE_QUEST right -PAUSE_EYE_DIST*(PAUSE_EQUIP_Z - PAUSE_QUEST_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_QUEST right
-PAUSE_EYE_DIST*(PAUSE_MAP_Z - PAUSE_QUEST_Z) / 16, // PAUSE_QUEST left -PAUSE_EYE_DIST*(PAUSE_MAP_Z - PAUSE_QUEST_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_QUEST left
-PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_EQUIP_Z) / 16, // PAUSE_EQUIP right -PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_EQUIP_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_EQUIP right
-PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_EQUIP_Z) / 16, // PAUSE_EQUIP left -PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_EQUIP_Z) / PAGE_SWITCH_NSTEPS, // PAUSE_EQUIP left
}; };
static u16 sPageSwitchNextPageIndex[] = { static u16 sPageSwitchNextPageIndex[] = {
@ -847,19 +874,19 @@ void KaleidoScope_SetDefaultCursor(PlayState* play) {
} }
} }
#define SWITCH_PAGE_LEFT_PT 0 #define PAGE_SWITCH_PT_LEFT 0
#define SWITCH_PAGE_RIGHT_PT 2 #define PAGE_SWITCH_PT_RIGHT 2
void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 pt) { void KaleidoScope_SetupPageSwitch(PauseContext* pauseCtx, u8 pt) {
pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE; pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE;
pauseCtx->switchPageTimer = 0; pauseCtx->pageSwitchTimer = 0;
if (!pt) { // SWITCH_PAGE_LEFT_PT if (!pt) { // PAGE_SWITCH_PT_LEFT
pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1; pauseCtx->nextPageMode = pauseCtx->pageIndex * 2 + 1;
Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_LEFT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_LEFT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT;
} else { // SWITCH_PAGE_RIGHT_PT } else { // PAGE_SWITCH_PT_RIGHT
pauseCtx->nextPageMode = pauseCtx->pageIndex * 2; pauseCtx->nextPageMode = pauseCtx->pageIndex * 2;
Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_RIGHT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_RIGHT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -886,12 +913,12 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) {
} }
if (CHECK_BTN_ALL(input->press.button, BTN_R)) { if (CHECK_BTN_ALL(input->press.button, BTN_R)) {
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT_PT); KaleidoScope_SetupPageSwitch(pauseCtx, PAGE_SWITCH_PT_RIGHT);
return; return;
} }
if (CHECK_BTN_ALL(input->press.button, BTN_Z)) { if (CHECK_BTN_ALL(input->press.button, BTN_Z)) {
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT_PT); KaleidoScope_SetupPageSwitch(pauseCtx, PAGE_SWITCH_PT_LEFT);
return; return;
} }
@ -899,7 +926,7 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) {
if (pauseCtx->stickAdjX < -30) { if (pauseCtx->stickAdjX < -30) {
pauseCtx->pageSwitchInputTimer++; pauseCtx->pageSwitchInputTimer++;
if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) { if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) {
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT_PT); KaleidoScope_SetupPageSwitch(pauseCtx, PAGE_SWITCH_PT_LEFT);
} }
} else { } else {
pauseCtx->pageSwitchInputTimer = -1; pauseCtx->pageSwitchInputTimer = -1;
@ -908,7 +935,7 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) {
if (pauseCtx->stickAdjX > 30) { if (pauseCtx->stickAdjX > 30) {
pauseCtx->pageSwitchInputTimer++; pauseCtx->pageSwitchInputTimer++;
if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) { if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) {
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT_PT); KaleidoScope_SetupPageSwitch(pauseCtx, PAGE_SWITCH_PT_RIGHT);
} }
} else { } else {
pauseCtx->pageSwitchInputTimer = -1; pauseCtx->pageSwitchInputTimer = -1;
@ -2012,12 +2039,12 @@ void KaleidoScope_UpdateNamePanel(PlayState* play) {
} }
} }
void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) { void KaleidoScope_UpdatePageSwitch(PlayState* play, Input* input) {
PauseContext* pauseCtx = &play->pauseCtx; PauseContext* pauseCtx = &play->pauseCtx;
s32 frameAdvanceFreeze = false; s32 frameAdvanceFreeze = false;
s32 nextPageMode; s32 nextPageMode;
if (R_PAUSE_SWITCH_PAGE_FRAME_ADVANCE_ON && !CHECK_BTN_ALL(input->press.button, BTN_L)) { if (R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON && !CHECK_BTN_ALL(input->press.button, BTN_L)) {
frameAdvanceFreeze = true; frameAdvanceFreeze = true;
} }
@ -2026,7 +2053,7 @@ void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) {
pauseCtx->eye.x += sPageSwitchEyeDx[nextPageMode]; pauseCtx->eye.x += sPageSwitchEyeDx[nextPageMode];
pauseCtx->eye.z += sPageSwitchEyeDz[nextPageMode]; pauseCtx->eye.z += sPageSwitchEyeDz[nextPageMode];
if (pauseCtx->switchPageTimer < ((4 * 16) / 2)) { if (pauseCtx->pageSwitchTimer < ((4 * PAGE_SWITCH_NSTEPS) / 2)) {
R_PAUSE_CURSOR_LEFT_X -= R_PAUSE_CURSOR_LEFT_MOVE_OFFSET_X / 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; R_PAUSE_CURSOR_RIGHT_X -= R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
} else { } else {
@ -2034,10 +2061,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; R_PAUSE_CURSOR_RIGHT_X += R_PAUSE_CURSOR_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
} }
pauseCtx->switchPageTimer += 4; pauseCtx->pageSwitchTimer += 4;
if (pauseCtx->switchPageTimer == (4 * 16)) { if (pauseCtx->pageSwitchTimer == (4 * PAGE_SWITCH_NSTEPS)) {
pauseCtx->switchPageTimer = 0; pauseCtx->pageSwitchTimer = 0;
pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode]; pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
} }
@ -3297,9 +3324,9 @@ void KaleidoScope_UpdateOpening(PlayState* play) {
pauseCtx->eye.x += sPageSwitchEyeDx[pauseCtx->nextPageMode] * ZREG(46); pauseCtx->eye.x += sPageSwitchEyeDx[pauseCtx->nextPageMode] * ZREG(46);
pauseCtx->eye.z += sPageSwitchEyeDz[pauseCtx->nextPageMode] * ZREG(46); pauseCtx->eye.z += sPageSwitchEyeDz[pauseCtx->nextPageMode] * ZREG(46);
pauseCtx->switchPageTimer += 4 * ZREG(46); pauseCtx->pageSwitchTimer += 4 * ZREG(46);
if (pauseCtx->switchPageTimer == (4 * 16 * ZREG(47))) { if (pauseCtx->pageSwitchTimer == (4 * PAGE_SWITCH_NSTEPS * ZREG(47))) {
// Finished opening // Finished opening
func_80084BF4(play, 1); func_80084BF4(play, 1);
@ -3317,7 +3344,7 @@ void KaleidoScope_UpdateOpening(PlayState* play) {
pauseCtx->alpha = 255; pauseCtx->alpha = 255;
Interface_LoadActionLabelB(play, DO_ACTION_SAVE); Interface_LoadActionLabelB(play, DO_ACTION_SAVE);
} else if (pauseCtx->switchPageTimer == (4 * 16 * 1)) { } else if (pauseCtx->pageSwitchTimer == (4 * PAGE_SWITCH_NSTEPS * 1)) {
// `ZREG(47)` is always 1 so this normally never happens // `ZREG(47)` is always 1 so this normally never happens
pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode]; pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
pauseCtx->nextPageMode = (u16)(pauseCtx->pageIndex * 2) + 1; pauseCtx->nextPageMode = (u16)(pauseCtx->pageIndex * 2) + 1;
@ -3911,7 +3938,7 @@ void KaleidoScope_Update(PlayState* play) {
break; break;
case PAUSE_MAIN_STATE_SWITCHING_PAGE: case PAUSE_MAIN_STATE_SWITCHING_PAGE:
KaleidoScope_UpdateSwitchPage(play, &play->state.input[0]); KaleidoScope_UpdatePageSwitch(play, &play->state.input[0]);
break; break;
case PAUSE_MAIN_STATE_SONG_PLAYBACK: case PAUSE_MAIN_STATE_SONG_PLAYBACK: