Pause docs: UIOverlay L/R buttons details

This commit is contained in:
Dragorn421 2025-06-28 09:10:57 +02:00
parent b5f980570c
commit a8b4c56cef
No known key found for this signature in database
GPG Key ID: 05949E029F4EF294
3 changed files with 80 additions and 75 deletions

View File

@ -126,6 +126,7 @@ struct PlayState;
#define R_EPONAS_SONG_PLAYED DREG(53)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + (i))
#define R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON ZREG(13)
#define R_PAUSE_BUTTON_L_R_SELECTED_PRIM_TIMER ZREG(28)
#define R_C_BTN_COLOR(i) ZREG(39 + (i))
#define R_B_BTN_COLOR(i) ZREG(43 + (i))
#if OOT_NTSC
@ -192,6 +193,7 @@ struct PlayState;
#define R_B_LABEL_DD WREG(0)
#define R_PAUSE_PAGES_Y_ORIGIN_2 WREG(2) // Complements PauseContext.pagesYOrigin1
#define R_PAUSE_DEPTH_OFFSET WREG(3) // Offset position of all pages away from the camera
#define R_PAUSE_UI_ANIMS_DURATION WREG(6)
#if OOT_NTSC
#define R_B_LABEL_SCALE(i) WREG(8 + (i))
#define R_B_LABEL_X(i) WREG(10 + (i))
@ -201,6 +203,8 @@ struct PlayState;
#define R_PAUSE_BUTTON_LEFT_X WREG(16)
#define R_PAUSE_BUTTON_RIGHT_X WREG(17)
#define R_PAUSE_BUTTON_LEFT_RIGHT_Y WREG(18)
#define R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X WREG(25)
#define R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X WREG(26)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
#define R_MINIMAP_DISABLED WREG(31)

View File

@ -352,7 +352,7 @@ void Regs_InitDataImpl(void) {
ZREG(25) = 4;
ZREG(26) = 20;
ZREG(27) = 10;
ZREG(28) = 20;
R_PAUSE_BUTTON_L_R_SELECTED_PRIM_TIMER = 20;
ZREG(29) = 4;
ZREG(30) = 20;
ZREG(31) = 10;
@ -557,8 +557,8 @@ void Regs_InitDataImpl(void) {
WREG(22) = -32;
WREG(23) = -38;
WREG(24) = -36;
WREG(25) = 40;
WREG(26) = -40;
R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X = 40;
R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X = -40;
WREG(27) = 0;
WREG(28) = 0;
R_OW_MINIMAP_X = 238;

View File

@ -1684,22 +1684,23 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
static u16 sToPlayMelodyTextWidths[] =
LANGUAGE_ARRAY(gPauseToPlayMelodyJPNTex_WIDTH, gPauseToPlayMelodyENGTex_WIDTH, gPauseToPlayMelodyGERTex_WIDTH,
gPauseToPlayMelodyFRATex_WIDTH);
static s16 D_8082ADF0[][4] = {
static s16 sLRSelectedPrimColors[][4] = {
{ 180, 210, 255, 220 },
{ 100, 100, 150, 220 },
};
static s16 D_8082AE00 = 20;
static s16 D_8082AE04 = 0;
static s16 sLRSelectedPrimTimer = 20;
static s16 sLRSelectedPrimState = 0;
static s16 D_8082AE08[] = {
10, 16, 16, 17, 12, 13, 18, 17, 17, 19, 13, 21, 20, 21, 14, 15, 15, 15, 11, 14,
};
static s16 D_8082AE30[] = {
21, 20, 19, 18, 11, 14, 10, 15, 16, 13, 12, 17,
};
static s16 D_808321A0;
static s16 D_808321A2;
static s16 D_808321A4;
static s16 D_808321A6;
static s16 sLRSelectedPrimR;
static s16 sLRSelectedPrimG;
static s16 sLRSelectedPrimB;
static s16 sLRSelectedPrimA;
PauseContext* pauseCtx = &play->pauseCtx;
s16 stepR;
s16 stepG;
@ -1711,39 +1712,39 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_kaleido_scope_PAL.c", 1676);
stepR = ABS(D_808321A0 - D_8082ADF0[D_8082AE04][0]) / D_8082AE00;
stepG = ABS(D_808321A2 - D_8082ADF0[D_8082AE04][1]) / D_8082AE00;
stepB = ABS(D_808321A4 - D_8082ADF0[D_8082AE04][2]) / D_8082AE00;
stepA = ABS(D_808321A6 - D_8082ADF0[D_8082AE04][3]) / D_8082AE00;
if (D_808321A0 >= D_8082ADF0[D_8082AE04][0]) {
D_808321A0 -= stepR;
stepR = ABS(sLRSelectedPrimR - sLRSelectedPrimColors[sLRSelectedPrimState][0]) / sLRSelectedPrimTimer;
stepG = ABS(sLRSelectedPrimG - sLRSelectedPrimColors[sLRSelectedPrimState][1]) / sLRSelectedPrimTimer;
stepB = ABS(sLRSelectedPrimB - sLRSelectedPrimColors[sLRSelectedPrimState][2]) / sLRSelectedPrimTimer;
stepA = ABS(sLRSelectedPrimA - sLRSelectedPrimColors[sLRSelectedPrimState][3]) / sLRSelectedPrimTimer;
if (sLRSelectedPrimR >= sLRSelectedPrimColors[sLRSelectedPrimState][0]) {
sLRSelectedPrimR -= stepR;
} else {
D_808321A0 += stepR;
sLRSelectedPrimR += stepR;
}
if (D_808321A2 >= D_8082ADF0[D_8082AE04][1]) {
D_808321A2 -= stepG;
if (sLRSelectedPrimG >= sLRSelectedPrimColors[sLRSelectedPrimState][1]) {
sLRSelectedPrimG -= stepG;
} else {
D_808321A2 += stepG;
sLRSelectedPrimG += stepG;
}
if (D_808321A4 >= D_8082ADF0[D_8082AE04][2]) {
D_808321A4 -= stepB;
if (sLRSelectedPrimB >= sLRSelectedPrimColors[sLRSelectedPrimState][2]) {
sLRSelectedPrimB -= stepB;
} else {
D_808321A4 += stepB;
sLRSelectedPrimB += stepB;
}
if (D_808321A6 >= D_8082ADF0[D_8082AE04][3]) {
D_808321A6 -= stepA;
if (sLRSelectedPrimA >= sLRSelectedPrimColors[sLRSelectedPrimState][3]) {
sLRSelectedPrimA -= stepA;
} else {
D_808321A6 += stepA;
sLRSelectedPrimA += stepA;
}
D_8082AE00--;
if (D_8082AE00 == 0) {
D_808321A0 = D_8082ADF0[D_8082AE04][0];
D_808321A2 = D_8082ADF0[D_8082AE04][1];
D_808321A4 = D_8082ADF0[D_8082AE04][2];
D_808321A6 = D_8082ADF0[D_8082AE04][3];
D_8082AE00 = ZREG(28);
D_8082AE04 ^= 1;
sLRSelectedPrimTimer--;
if (sLRSelectedPrimTimer == 0) {
sLRSelectedPrimR = sLRSelectedPrimColors[sLRSelectedPrimState][0];
sLRSelectedPrimG = sLRSelectedPrimColors[sLRSelectedPrimState][1];
sLRSelectedPrimB = sLRSelectedPrimColors[sLRSelectedPrimState][2];
sLRSelectedPrimA = sLRSelectedPrimColors[sLRSelectedPrimState][3];
sLRSelectedPrimTimer = R_PAUSE_BUTTON_L_R_SELECTED_PRIM_TIMER;
sLRSelectedPrimState ^= 1;
}
y = pauseCtx->infoPanelOffsetY - 76;
@ -1853,7 +1854,7 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
gSPDisplayList(POLY_OPA_DISP++, gInfoPanelBgDL);
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sLRSelectedPrimR, sLRSelectedPrimG, sLRSelectedPrimB, sLRSelectedPrimA);
}
// Draw UI_OVERLAY_QUAD_BUTTON_LEFT
@ -1862,14 +1863,14 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 220);
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sLRSelectedPrimR, sLRSelectedPrimG, sLRSelectedPrimB, sLRSelectedPrimA);
}
// Draw UI_OVERLAY_QUAD_BUTTON_RIGHT
gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL);
if (pauseCtx->cursorSpecialPos != 0) {
j = (pauseCtx->cursorSpecialPos - 8) * 4;
j = (pauseCtx->cursorSpecialPos - PAUSE_CURSOR_PAGE_LEFT + UI_OVERLAY_QUAD_BUTTON_LEFT) * 4;
pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->uiOverlayVtx[j].v.ob[0];
pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->uiOverlayVtx[j].v.ob[1];
KaleidoScope_DrawCursor(play, pauseCtx->pageIndex);
@ -2233,11 +2234,11 @@ void KaleidoScope_UpdatePageSwitch(PlayState* play, Input* input) {
if (pauseCtx->nextPageMode) {}
if (pauseCtx->pageSwitchTimer < ((4 * PAGE_SWITCH_NSTEPS) / 2)) {
R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
} else {
R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
}
pauseCtx->pageSwitchTimer += 4;
@ -4088,13 +4089,13 @@ void KaleidoScope_Update(PlayState* play) {
}
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch = pauseCtx->questPagePitch -=
160.0f / WREG(6);
pauseCtx->infoPanelOffsetY += 40 / WREG(6);
interfaceCtx->startAlpha += 255 / WREG(6);
R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
XREG(5) += 150 / WREG(6);
pauseCtx->alpha += (u16)(255 / (WREG(6) + WREG(4)));
160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->infoPanelOffsetY += 40 / R_PAUSE_UI_ANIMS_DURATION;
interfaceCtx->startAlpha += 255 / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_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 + WREG(4)));
if (pauseCtx->itemPagePitch == 0) {
interfaceCtx->startAlpha = 255;
@ -4249,9 +4250,9 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_SAVE_PROMPT:
switch (pauseCtx->savePromptState) {
case PAUSE_SAVE_PROMPT_STATE_APPEARING:
pauseCtx->promptPitch -= 314.0f / WREG(6);
R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
pauseCtx->promptPitch -= 314.0f / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
if (pauseCtx->promptPitch <= -628.0f) {
pauseCtx->promptPitch = -628.0f;
@ -4320,9 +4321,9 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU:
case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU_2:
pauseCtx->promptPitch += 314.0f / WREG(6);
R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
pauseCtx->promptPitch += 314.0f / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
if (pauseCtx->promptPitch >= -314.0f) {
pauseCtx->state = PAUSE_STATE_MAIN;
@ -4337,13 +4338,13 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED:
if (pauseCtx->promptPitch != (YREG(8) + 160.0f)) {
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch =
pauseCtx->questPagePitch += 160.0f / WREG(6);
pauseCtx->promptPitch += 160.0f / WREG(6);
pauseCtx->infoPanelOffsetY -= 40 / WREG(6);
R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
XREG(5) -= 150 / WREG(6);
pauseCtx->alpha -= (u16)(255 / WREG(6));
pauseCtx->questPagePitch += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->promptPitch += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->infoPanelOffsetY -= 40 / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_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->promptPitch == (YREG(8) + 160.0f)) {
pauseCtx->alpha = 0;
}
@ -4507,14 +4508,14 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_GAME_OVER_SHOW_WINDOW:
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch = pauseCtx->questPagePitch =
pauseCtx->promptPitch -= 160.0f / WREG(6);
pauseCtx->infoPanelOffsetY += 40 / WREG(6);
interfaceCtx->startAlpha += 255 / WREG(6);
pauseCtx->promptPitch -= 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;
R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
XREG(5) += 150 / WREG(6);
pauseCtx->alpha += (u16)(255 / (WREG(6) + WREG(4)));
R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_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 + WREG(4)));
if (pauseCtx->promptPitch < -628.0f) {
pauseCtx->promptPitch = -628.0f;
interfaceCtx->startAlpha = 255;
@ -4676,13 +4677,13 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_CLOSING:
if (pauseCtx->itemPagePitch != 160.0f) {
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch =
pauseCtx->questPagePitch += 160.0f / WREG(6);
pauseCtx->infoPanelOffsetY -= 40 / WREG(6);
interfaceCtx->startAlpha -= 255 / WREG(6);
R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
XREG(5) -= 150 / WREG(6);
pauseCtx->alpha -= (u16)(255 / WREG(6));
pauseCtx->questPagePitch += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
pauseCtx->infoPanelOffsetY -= 40 / R_PAUSE_UI_ANIMS_DURATION;
interfaceCtx->startAlpha -= 255 / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_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->itemPagePitch == 160.0f) {
pauseCtx->alpha = 0;
}