Fixed pause menu buttons not interpolating, skipped cursor interpolation when it moves, fixed pause menu panels popping in on widescreen
This commit is contained in:
parent
407b6e547c
commit
6848645854
|
@ -34,6 +34,9 @@
|
|||
#define gEXMatrixGroupDecomposedVerts(cmd, id, push, proj, edit) \
|
||||
gEXMatrixGroupDecomposed(cmd, id, push, proj, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_ORDER_LINEAR, edit)
|
||||
|
||||
#define gEXMatrixGroupDecomposedVertsOrderAuto(cmd, id, push, proj, edit) \
|
||||
gEXMatrixGroupDecomposed(cmd, id, push, proj, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_ORDER_AUTO, edit)
|
||||
|
||||
|
||||
int recomp_printf(const char* fmt, ...);
|
||||
float recomp_powf(float, float);
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
__start = 0x80000000;
|
||||
|
||||
/* Manual symbol overrides to work around recompiler ambiguity issue (TODO fix this) */
|
||||
_ovl_daytelopSegmentOvlEnd = 0x0;
|
||||
_ovl_kaleido_scopeSegmentTextStart = 0x0;
|
||||
_ovl_kaleido_scopeSegmentStart = 0x0;
|
||||
_ovl_daytelopSegmentBssStart = 0x0;
|
||||
_ovl_daytelopSegmentEnd = 0x0;
|
||||
_ovl_daytelopSegmentBssEnd = 0x0;
|
||||
|
||||
/* Static symbols that aren't in the elf */
|
||||
sSceneEntranceTable = 0x801C5720;
|
||||
D_808DE5B0 = 0x808DE5B0;
|
||||
|
@ -31,3 +39,4 @@ bzero_recomp = 0x8F00005C;
|
|||
osFlashWriteArray_recomp = 0x8F000060;
|
||||
osFlashWriteBuffer_recomp = 0x8F000064;
|
||||
osWritebackDCache_recomp = 0x8F000068;
|
||||
recomp_get_pending_set_time = 0x8F00006C;
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#define TEXTBOX_TRANSFORM_PROJECTION_ID 0x14U
|
||||
#define LETTERBOX_TRANSFORM_ID 0x15U
|
||||
#define LETTERBOX_TRANSFORM_PROJECTION_ID 0x16U
|
||||
#define PAUSE_CURSOR_TRANSFORM_ID 0x17U
|
||||
#define PAUSE_INFO_PANEL_TRANSFORM_ID 0x18U
|
||||
|
||||
#define SKYBOX_TRANSFORM_ID_START 0x100U
|
||||
|
||||
|
@ -19,7 +21,6 @@
|
|||
#define BOWSTRING_TRANSFORM_ID 0x400U
|
||||
#define HOOKSHOT_RETICLE_TRANSFORM_ID 0x401U
|
||||
|
||||
#define PAUSE_CURSOR_TRANSFORM_ID_START 0x500U
|
||||
|
||||
#define GOHT_ROCKS_TRANSFORM_ID_START 0x600U // Count: 0x200
|
||||
#define SPECIAL_EFFECTS_TRANSFORM_ID_START 0x800U
|
||||
|
|
|
@ -2,6 +2,16 @@
|
|||
#include "transform_ids.h"
|
||||
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
|
||||
|
||||
void KaleidoScope_DrawCursor(PlayState* play);
|
||||
void KaleidoScope_DrawGameOver(PlayState* play);
|
||||
void KaleidoScope_DrawInfoPanel(PlayState* play);
|
||||
void KaleidoScope_DrawOwlWarpInfoPanel(PlayState* play);
|
||||
void KaleidoScope_DrawOwlWarpMapPage(PlayState* play);
|
||||
void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx);
|
||||
Gfx* KaleidoScope_DrawPageSections(Gfx* gfx, Vtx* vertices, TexturePtr* textures);
|
||||
void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx);
|
||||
void KaleidoScope_UpdateCursorSize(PlayState* play);
|
||||
|
||||
extern s16 sCursorPrimR;
|
||||
extern s16 sCursorPrimG;
|
||||
extern s16 sCursorPrimB;
|
||||
|
@ -12,6 +22,37 @@ extern f32 sCursorCirclesX[4];
|
|||
extern f32 sCursorCirclesY[4];
|
||||
|
||||
extern u64 gPauseMenuCursorTex[];
|
||||
extern s16 sInDungeonScene;
|
||||
extern s16 sPauseCursorLeftX;
|
||||
extern s16 sPauseCursorRightX;
|
||||
extern s16 D_8082B920;
|
||||
extern s16 sPauseZRCursorColorTimerInits[];
|
||||
extern TexturePtr D_8082B998[];
|
||||
extern TexturePtr D_8082B9A8[];
|
||||
|
||||
extern Gfx gItemNamePanelDL[];
|
||||
extern Gfx gZButtonIconDL[];
|
||||
extern Gfx gRButtonIconDL[];
|
||||
extern Gfx gAButtonIconDL[];
|
||||
extern Gfx gCButtonIconsDL[];
|
||||
extern u64 gPauseToDecideENGTex[];
|
||||
extern u64 gPauseToEquipENGTex[];
|
||||
extern u64 gPauseToViewNotebookENGTex[];
|
||||
extern u64 gPauseToPlayMelodyENGTex[];
|
||||
|
||||
s16 sCursorPrimColorTarget[][3] = {
|
||||
{ 255, 255, 255 }, { 255, 255, 255 }, { 255, 255, 0 }, { 255, 255, 0 }, { 100, 150, 255 }, { 100, 255, 255 },
|
||||
};
|
||||
|
||||
s16 sCursorEnvColorTarget[][3] = {
|
||||
{ 0, 0, 0 }, { 170, 170, 170 }, { 0, 0, 0 }, { 255, 160, 0 }, { 0, 0, 100 }, { 0, 150, 255 },
|
||||
};
|
||||
|
||||
extern f32 sPauseMenuVerticalOffset;
|
||||
extern TexturePtr sItemPageBgTextures[];
|
||||
extern TexturePtr sMapPageBgTextures[];
|
||||
extern TexturePtr sQuestPageBgTextures[];
|
||||
extern TexturePtr sMaskPageBgTextures[];
|
||||
|
||||
s16 kaleido_s16(s16* addr) {
|
||||
return *(s16*)KaleidoManager_GetRamAddr(addr);
|
||||
|
@ -21,6 +62,89 @@ f32 kaleido_f32(f32* addr) {
|
|||
return *(f32*)KaleidoManager_GetRamAddr(addr);
|
||||
}
|
||||
|
||||
// @recomp Patched to set pageIndex to a dummy value when KaleidoScope_SetVertices is called to make it
|
||||
// allocate vertices for all pages at all times. This is simpler than patching KaleidoScope_SetVertices directly.
|
||||
void KaleidoScope_Draw(PlayState* play) {
|
||||
s32 pad;
|
||||
PauseContext* pauseCtx = &play->pauseCtx;
|
||||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x02, interfaceCtx->parameterSegment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x0A, pauseCtx->nameSegment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x0D, pauseCtx->iconItemLangSegment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x0B, pauseCtx->iconItemVtxSegment);
|
||||
|
||||
if (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) {
|
||||
KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z);
|
||||
Gfx_SetupDL42_Opa(play->state.gfxCtx);
|
||||
|
||||
if (!IS_PAUSE_STATE_OWL_WARP) {
|
||||
// Draw Default or Game Over Menus
|
||||
// @recomp Record the current pageIndex, then change it to a dummy value for the KaleidoScope_SetVertices.
|
||||
u16 saved_page_index = pauseCtx->pageIndex;
|
||||
pauseCtx->pageIndex = (u16)-1;
|
||||
KaleidoScope_SetVertices(play, play->state.gfxCtx);
|
||||
// @recomp Restore the old pageIndex value.
|
||||
pauseCtx->pageIndex = saved_page_index;
|
||||
KaleidoScope_DrawPages(play, play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL42_Opa(play->state.gfxCtx);
|
||||
gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f);
|
||||
|
||||
if (!IS_PAUSE_STATE_GAMEOVER) {
|
||||
KaleidoScope_DrawInfoPanel(play);
|
||||
}
|
||||
|
||||
KaleidoScope_UpdateCursorSize(play);
|
||||
|
||||
if (pauseCtx->state == PAUSE_STATE_MAIN) {
|
||||
KaleidoScope_DrawCursor(play);
|
||||
}
|
||||
|
||||
if ((pauseCtx->state >= PAUSE_STATE_GAMEOVER_3) && (pauseCtx->state <= PAUSE_STATE_GAMEOVER_10) &&
|
||||
(play->gameOverCtx.state != GAMEOVER_INACTIVE)) {
|
||||
KaleidoScope_DrawGameOver(play);
|
||||
}
|
||||
} else {
|
||||
// Draw Owl Warp Menu
|
||||
// @recomp Record the current pageIndex, then change it to a dummy value for the KaleidoScope_SetVertices.
|
||||
u16 saved_page_index = pauseCtx->pageIndex;
|
||||
pauseCtx->pageIndex = (u16)-1;
|
||||
KaleidoScope_SetVertices(play, play->state.gfxCtx);
|
||||
// @recomp Restore the old pageIndex value.
|
||||
pauseCtx->pageIndex = saved_page_index;
|
||||
KaleidoScope_DrawPages(play, play->state.gfxCtx);
|
||||
KaleidoScope_DrawOwlWarpMapPage(play);
|
||||
|
||||
Gfx_SetupDL42_Opa(play->state.gfxCtx);
|
||||
gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f);
|
||||
KaleidoScope_DrawOwlWarpInfoPanel(play);
|
||||
KaleidoScope_UpdateCursorSize(play);
|
||||
|
||||
if (pauseCtx->state == PAUSE_STATE_OWL_WARP_SELECT) {
|
||||
KaleidoScope_DrawCursor(play);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY_INIT) || (pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY)) {
|
||||
KaleidoScope_DrawInventoryEditor(play);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
void KaleidoScope_DrawCursor(PlayState* play) {
|
||||
PauseContext* pauseCtx = &play->pauseCtx;
|
||||
s16 i;
|
||||
|
@ -32,6 +156,10 @@ void KaleidoScope_DrawCursor(PlayState* play) {
|
|||
((pauseCtx->pageIndex == PAUSE_QUEST) && ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)))) {
|
||||
// @recomp Track the previously drawn cursor position.
|
||||
static f32 prev_cursor_x = 0.0f;
|
||||
static f32 prev_cursor_y = 0.0f;
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
@ -43,14 +171,19 @@ void KaleidoScope_DrawCursor(PlayState* play) {
|
|||
Matrix_Translate(pauseCtx->cursorX, pauseCtx->cursorY, -50.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
// @recomp Tag the current pause cursor matrices. Skip interpolation if the cursor moved.
|
||||
if (pauseCtx->cursorX == prev_cursor_x && pauseCtx->cursorY == prev_cursor_y) {
|
||||
gEXMatrixGroupDecomposedVerts(POLY_OPA_DISP++, PAUSE_CURSOR_TRANSFORM_ID, G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_ALLOW);
|
||||
}
|
||||
else {
|
||||
gEXMatrixGroupDecomposedSkipAll(POLY_OPA_DISP++, PAUSE_CURSOR_TRANSFORM_ID, G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_ALLOW);
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
Matrix_Push();
|
||||
// @recomp manual relocations, TODO remove when recompiler can handle this.
|
||||
Matrix_Translate(kaleido_f32(&sCursorCirclesX[i]), kaleido_f32(&sCursorCirclesY[i]), -50.0f, MTXMODE_APPLY);
|
||||
|
||||
// @recomp Tag the current pause cursor segment.
|
||||
gEXMatrixGroupDecomposedVerts(POLY_OPA_DISP++, PAUSE_CURSOR_TRANSFORM_ID_START + i, G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_ALLOW);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPLoadTextureBlock(POLY_OPA_DISP++, gPauseMenuCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0,
|
||||
|
@ -59,15 +192,720 @@ void KaleidoScope_DrawCursor(PlayState* play) {
|
|||
gSPVertex(POLY_OPA_DISP++, &pauseCtx->cursorVtx[0], 4, 0);
|
||||
gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
|
||||
|
||||
// @recomp Pop the pause cursor segment's transform id.
|
||||
gEXPopMatrixGroup(POLY_OPA_DISP++, G_MTX_MODELVIEW);
|
||||
|
||||
Matrix_Pop();
|
||||
}
|
||||
|
||||
// @recomp Pop the pause cursor's transform id.
|
||||
gEXPopMatrixGroup(POLY_OPA_DISP++, G_MTX_MODELVIEW);
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
|
||||
|
||||
// @recomp Update the tracked cursor position.
|
||||
prev_cursor_x = pauseCtx->cursorX;
|
||||
prev_cursor_y = pauseCtx->cursorY;
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* infoPanelVtx
|
||||
*
|
||||
* infoPanelVtx[0] name panel left texture
|
||||
* infoPanelVtx[4] name panel right texture
|
||||
* infoPanelVtx[8] Z Button icon
|
||||
* infoPanelVtx[12] R Button icon
|
||||
* infoPanelVtx[16] A button icon (or name segment)
|
||||
* infoPanelVtx[20] pause-to-decide texture
|
||||
* infoPanelVtx[24] (unused) oot remnant of Gold Skulltula Icon Texture
|
||||
*/
|
||||
|
||||
// @recomp Patched to tag the matrix for interpolating the vertices of the Z button, R button, and name panel.
|
||||
void KaleidoScope_DrawInfoPanel(PlayState* play) {
|
||||
static s16 sPauseZRCursorColorTargets[][4] = {
|
||||
{ 180, 210, 255, 220 },
|
||||
{ 100, 100, 150, 220 },
|
||||
};
|
||||
static s16 sPauseZRCursorColorTimer = 20;
|
||||
static s16 sPauseZRCursorColorIndex = 0;
|
||||
static s16 sPauseZRCursorRed;
|
||||
static s16 sPauseZRCursorGreen;
|
||||
static s16 sPauseZRCursorBlue;
|
||||
static s16 sPauseZRCursorAlpha;
|
||||
PauseContext* pauseCtx = &play->pauseCtx;
|
||||
s16 stepR;
|
||||
s16 stepG;
|
||||
s16 stepB;
|
||||
s16 stepA;
|
||||
s16 y;
|
||||
s16 i;
|
||||
s16 j;
|
||||
|
||||
// @recomp Manual relocations, TODO remove when done automatically by the recompiler.
|
||||
s16* sPauseZRCursorColorTimerInits_reloc = KaleidoManager_GetRamAddr(&sPauseZRCursorColorTimerInits);
|
||||
TexturePtr* D_8082B998_reloc = KaleidoManager_GetRamAddr(&D_8082B998);
|
||||
TexturePtr* D_8082B9A8_reloc = KaleidoManager_GetRamAddr(&D_8082B9A8);
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
stepR =
|
||||
ABS_ALT(sPauseZRCursorRed - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) / sPauseZRCursorColorTimer;
|
||||
stepG = ABS_ALT(sPauseZRCursorGreen - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) /
|
||||
sPauseZRCursorColorTimer;
|
||||
stepB = ABS_ALT(sPauseZRCursorBlue - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) /
|
||||
sPauseZRCursorColorTimer;
|
||||
stepA = ABS_ALT(sPauseZRCursorAlpha - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) /
|
||||
sPauseZRCursorColorTimer;
|
||||
|
||||
if (sPauseZRCursorRed >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) {
|
||||
sPauseZRCursorRed -= stepR;
|
||||
} else {
|
||||
sPauseZRCursorRed += stepR;
|
||||
}
|
||||
|
||||
if (sPauseZRCursorGreen >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) {
|
||||
sPauseZRCursorGreen -= stepG;
|
||||
} else {
|
||||
sPauseZRCursorGreen += stepG;
|
||||
}
|
||||
|
||||
if (sPauseZRCursorBlue >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) {
|
||||
sPauseZRCursorBlue -= stepB;
|
||||
} else {
|
||||
sPauseZRCursorBlue += stepB;
|
||||
}
|
||||
|
||||
if (sPauseZRCursorAlpha >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) {
|
||||
sPauseZRCursorAlpha -= stepA;
|
||||
} else {
|
||||
sPauseZRCursorAlpha += stepA;
|
||||
}
|
||||
|
||||
sPauseZRCursorColorTimer--;
|
||||
if (sPauseZRCursorColorTimer == 0) {
|
||||
sPauseZRCursorRed = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0];
|
||||
sPauseZRCursorGreen = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1];
|
||||
sPauseZRCursorBlue = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2];
|
||||
sPauseZRCursorAlpha = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3];
|
||||
sPauseZRCursorColorTimer = sPauseZRCursorColorTimerInits_reloc[0];
|
||||
sPauseZRCursorColorIndex ^= 1;
|
||||
}
|
||||
|
||||
y = pauseCtx->infoPanelOffsetY - 76;
|
||||
for (j = 0, i = 0; i < 7; i++, j += 4) {
|
||||
pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = y;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = y - 24;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] =
|
||||
pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag =
|
||||
pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] =
|
||||
pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 72 * (1 << 5);
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 24 * (1 << 5);
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] =
|
||||
pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] =
|
||||
pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] =
|
||||
pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] =
|
||||
pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] =
|
||||
pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200;
|
||||
|
||||
pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] =
|
||||
pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha;
|
||||
}
|
||||
|
||||
pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72;
|
||||
|
||||
pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72;
|
||||
|
||||
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
|
||||
pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = kaleido_s16(&sPauseCursorLeftX);
|
||||
|
||||
pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24;
|
||||
|
||||
pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = kaleido_s16(&D_8082B920);
|
||||
|
||||
pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] =
|
||||
pauseCtx->infoPanelVtx[8].v.ob[1] - 32;
|
||||
} else {
|
||||
pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = kaleido_s16(&sPauseCursorLeftX) + 3;
|
||||
|
||||
pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18;
|
||||
|
||||
pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = kaleido_s16(&D_8082B920) - 3;
|
||||
|
||||
pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] =
|
||||
pauseCtx->infoPanelVtx[8].v.ob[1] - 26;
|
||||
}
|
||||
|
||||
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
|
||||
pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = kaleido_s16(&sPauseCursorRightX);
|
||||
|
||||
pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[12].v.ob[0] + 24;
|
||||
|
||||
pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = kaleido_s16(&D_8082B920);
|
||||
|
||||
pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] =
|
||||
pauseCtx->infoPanelVtx[12].v.ob[1] - 32;
|
||||
} else {
|
||||
pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = kaleido_s16(&sPauseCursorRightX) + 3;
|
||||
|
||||
pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[12].v.ob[0] + 18;
|
||||
|
||||
pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = kaleido_s16(&D_8082B920) - 3;
|
||||
|
||||
pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] =
|
||||
pauseCtx->infoPanelVtx[12].v.ob[1] - 26;
|
||||
}
|
||||
|
||||
pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] =
|
||||
pauseCtx->infoPanelVtx[15].v.tc[0] = 24 * (1 << 5);
|
||||
|
||||
pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] =
|
||||
pauseCtx->infoPanelVtx[15].v.tc[1] = 32 * (1 << 5);
|
||||
|
||||
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
|
||||
Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
// @recomp Tag the matrix used for the for vertex interpolation.
|
||||
gEXMatrixGroupDecomposedVerts(POLY_OPA_DISP++, PAUSE_INFO_PANEL_TRANSFORM_ID, G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_NONE);
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, 255);
|
||||
gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0);
|
||||
|
||||
// @recomp Pop the matrix tag.
|
||||
gEXPopMatrixGroup(POLY_OPA_DISP++, G_MTX_MODELVIEW);
|
||||
// @recomp Multiply in an identity matrix to be able to split this into two matrix groups.
|
||||
gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_NOPUSH | G_MTX_MUL);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL);
|
||||
|
||||
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) &&
|
||||
(!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) {
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha);
|
||||
}
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, gZButtonIconDL);
|
||||
|
||||
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) &&
|
||||
(!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) {
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha);
|
||||
}
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL);
|
||||
|
||||
if (pauseCtx->cursorSpecialPos != 0) {
|
||||
j = (pauseCtx->cursorSpecialPos * 4) - 32;
|
||||
pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0];
|
||||
pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1];
|
||||
}
|
||||
|
||||
y = pauseCtx->infoPanelOffsetY - 80;
|
||||
pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = y;
|
||||
|
||||
pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16;
|
||||
|
||||
pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 16 * (1 << 5);
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
|
||||
ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0);
|
||||
|
||||
if (pauseCtx->itemDescriptionOn ||
|
||||
((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) &&
|
||||
(pauseCtx->nameDisplayTimer < 40) &&
|
||||
(!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) ||
|
||||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
|
||||
(pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
|
||||
(pauseCtx->cursorSpecialPos == 0))) {
|
||||
if (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) ||
|
||||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
|
||||
(pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
|
||||
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 128;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5);
|
||||
|
||||
gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0);
|
||||
|
||||
if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_GREY) {
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255);
|
||||
} else {
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
|
||||
}
|
||||
|
||||
POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, pauseCtx->nameSegment, G_IM_FMT_IA, 128, 16, 0);
|
||||
}
|
||||
} else if ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) ||
|
||||
(pauseCtx->mainState == PAUSE_MAIN_STATE_UNK)) {
|
||||
pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = y;
|
||||
|
||||
pauseCtx->infoPanelVtx[22].v.ob[1] = pauseCtx->infoPanelVtx[23].v.ob[1] =
|
||||
pauseCtx->infoPanelVtx[20].v.ob[1] - 16;
|
||||
|
||||
pauseCtx->infoPanelVtx[22].v.tc[1] = pauseCtx->infoPanelVtx[23].v.tc[1] = 16 * (1 << 5);
|
||||
|
||||
gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0);
|
||||
|
||||
if (pauseCtx->state == PAUSE_STATE_SAVEPROMPT) {
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -33;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
|
||||
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 0x10;
|
||||
|
||||
pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] + 0x30;
|
||||
|
||||
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);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
|
||||
|
||||
//! @bug: Incorrect dimensions. Should be 64x16
|
||||
POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToDecideENGTex, G_IM_FMT_IA, 48, 16, 4);
|
||||
|
||||
} else if (pauseCtx->cursorSpecialPos != 0) {
|
||||
if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
|
||||
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 128;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5);
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 200, 0, 255);
|
||||
|
||||
if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
|
||||
POLY_OPA_DISP =
|
||||
Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B998_reloc[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0);
|
||||
} else {
|
||||
POLY_OPA_DISP =
|
||||
Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B9A8_reloc[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0);
|
||||
}
|
||||
}
|
||||
} else if ((!pauseCtx->pageIndex || (pauseCtx->pageIndex == PAUSE_MASK)) &&
|
||||
(pauseCtx->namedItem != PAUSE_ITEM_NONE)) {
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -49;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 48;
|
||||
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 47;
|
||||
|
||||
pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] + 64;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 48 * (1 << 5);
|
||||
|
||||
pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 64 * (1 << 5);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, gCButtonIconsDL);
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
|
||||
|
||||
POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToEquipENGTex, G_IM_FMT_IA, 64, 16, 4);
|
||||
} else if ((pauseCtx->pageIndex == PAUSE_MAP) && kaleido_s16(&sInDungeonScene)) {
|
||||
// No code in this case
|
||||
} else if ((pauseCtx->pageIndex == PAUSE_QUEST) &&
|
||||
(pauseCtx->cursorSlot[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK)) {
|
||||
if (pauseCtx->namedItem != PAUSE_ITEM_NONE) {
|
||||
// The cursor is on the bombers notebook
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -58;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
|
||||
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 0x14;
|
||||
|
||||
pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] + 0x60;
|
||||
|
||||
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] = 96 * (1 << 5);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
|
||||
|
||||
POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToViewNotebookENGTex, G_IM_FMT_IA, 96, 16, 4);
|
||||
}
|
||||
} else if ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) &&
|
||||
(pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE)) {
|
||||
// The cursor is on a learned song
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -55;
|
||||
|
||||
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
|
||||
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[16].v.ob[0] + 20;
|
||||
|
||||
pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
|
||||
pauseCtx->infoPanelVtx[20].v.ob[0] + 96;
|
||||
|
||||
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] = 96 * (1 << 5);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
|
||||
|
||||
POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToPlayMelodyENGTex, G_IM_FMT_IA, 96, 16, 4);
|
||||
}
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
// @recomp Patched to draw always all 4 pages and tag their matrices.
|
||||
void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
|
||||
static s16 sCursorColorTimer = 10;
|
||||
static s16 sCursorColorTargetIndex = 0;
|
||||
PauseContext* pauseCtx = &play->pauseCtx;
|
||||
s16 stepR;
|
||||
s16 stepG;
|
||||
s16 stepB;
|
||||
|
||||
// @recomp Manual relocation, TODO remove when recompiler handles it automatically.
|
||||
TexturePtr* sItemPageBgTextures_reloc = KaleidoManager_GetRamAddr(&sItemPageBgTextures);
|
||||
TexturePtr* sMapPageBgTextures_reloc = KaleidoManager_GetRamAddr(&sMapPageBgTextures);
|
||||
TexturePtr* sQuestPageBgTextures_reloc = KaleidoManager_GetRamAddr(&sQuestPageBgTextures);
|
||||
TexturePtr* sMaskPageBgTextures_reloc = KaleidoManager_GetRamAddr(&sMaskPageBgTextures);
|
||||
s16* sCursorPrimR_reloc = KaleidoManager_GetRamAddr(&sCursorPrimR);
|
||||
s16* sCursorPrimG_reloc = KaleidoManager_GetRamAddr(&sCursorPrimG);
|
||||
s16* sCursorPrimB_reloc = KaleidoManager_GetRamAddr(&sCursorPrimB);
|
||||
s16* sCursorEnvR_reloc = KaleidoManager_GetRamAddr(&sCursorEnvR);
|
||||
s16* sCursorEnvG_reloc = KaleidoManager_GetRamAddr(&sCursorEnvG);
|
||||
s16* sCursorEnvB_reloc = KaleidoManager_GetRamAddr(&sCursorEnvB);
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
if (!IS_PAUSE_STATE_GAMEOVER) {
|
||||
if (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) {
|
||||
|
||||
stepR =
|
||||
ABS_ALT(*sCursorPrimR_reloc - sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) /
|
||||
sCursorColorTimer;
|
||||
stepG =
|
||||
ABS_ALT(*sCursorPrimG_reloc - sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) /
|
||||
sCursorColorTimer;
|
||||
stepB =
|
||||
ABS_ALT(*sCursorPrimB_reloc - sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) /
|
||||
sCursorColorTimer;
|
||||
|
||||
if (*sCursorPrimR_reloc >= sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) {
|
||||
*sCursorPrimR_reloc -= stepR;
|
||||
} else {
|
||||
*sCursorPrimR_reloc += stepR;
|
||||
}
|
||||
|
||||
if (*sCursorPrimG_reloc >= sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) {
|
||||
*sCursorPrimG_reloc -= stepG;
|
||||
} else {
|
||||
*sCursorPrimG_reloc += stepG;
|
||||
}
|
||||
|
||||
if (*sCursorPrimB_reloc >= sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) {
|
||||
*sCursorPrimB_reloc -= stepB;
|
||||
} else {
|
||||
*sCursorPrimB_reloc += stepB;
|
||||
}
|
||||
|
||||
stepR =
|
||||
ABS_ALT(*sCursorEnvR_reloc - sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) /
|
||||
sCursorColorTimer;
|
||||
stepG =
|
||||
ABS_ALT(*sCursorEnvG_reloc - sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) /
|
||||
sCursorColorTimer;
|
||||
stepB =
|
||||
ABS_ALT(*sCursorEnvB_reloc - sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) /
|
||||
sCursorColorTimer;
|
||||
|
||||
if (*sCursorEnvR_reloc >= sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) {
|
||||
*sCursorEnvR_reloc -= stepR;
|
||||
} else {
|
||||
*sCursorEnvR_reloc += stepR;
|
||||
}
|
||||
|
||||
if (*sCursorEnvG_reloc >= sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) {
|
||||
*sCursorEnvG_reloc -= stepG;
|
||||
} else {
|
||||
*sCursorEnvG_reloc += stepG;
|
||||
}
|
||||
|
||||
if (*sCursorEnvB_reloc >= sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) {
|
||||
*sCursorEnvB_reloc -= stepB;
|
||||
} else {
|
||||
*sCursorEnvB_reloc += stepB;
|
||||
}
|
||||
|
||||
sCursorColorTimer--;
|
||||
if (sCursorColorTimer == 0) {
|
||||
*sCursorPrimR_reloc = sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0];
|
||||
*sCursorPrimG_reloc = sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1];
|
||||
*sCursorPrimB_reloc = sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2];
|
||||
*sCursorEnvR_reloc = sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0];
|
||||
*sCursorEnvG_reloc = sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1];
|
||||
*sCursorEnvB_reloc = sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2];
|
||||
sCursorColorTargetIndex ^= 1;
|
||||
sCursorColorTimer = 10;
|
||||
}
|
||||
}
|
||||
|
||||
// @recomp Draw this page even when it's opposite the active one.
|
||||
if ((pauseCtx->pageIndex != PAUSE_ITEM)) {
|
||||
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);
|
||||
|
||||
Matrix_RotateYF(0.0f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, kaleido_f32(&sPauseMenuVerticalOffset) / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->itemPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sItemPageBgTextures_reloc);
|
||||
|
||||
KaleidoScope_DrawItemSelect(play);
|
||||
}
|
||||
|
||||
// @recomp Draw this page even when it's opposite the active one.
|
||||
if ((pauseCtx->pageIndex != PAUSE_MAP)) {
|
||||
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);
|
||||
|
||||
Matrix_RotateYF(-1.57f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, kaleido_f32(&sPauseMenuVerticalOffset) / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapPageBgTextures_reloc);
|
||||
|
||||
if (kaleido_s16(&sInDungeonScene)) {
|
||||
KaleidoScope_DrawDungeonMap(play);
|
||||
Gfx_SetupDL42_Opa(gfxCtx);
|
||||
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
func_801091F0(play);
|
||||
} else {
|
||||
KaleidoScope_DrawWorldMap(play);
|
||||
}
|
||||
}
|
||||
|
||||
// @recomp Draw this page even when it's opposite the active one.
|
||||
if ((pauseCtx->pageIndex != PAUSE_QUEST)) {
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
|
||||
gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP);
|
||||
|
||||
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);
|
||||
|
||||
Matrix_RotateYF(-3.14f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, kaleido_f32(&sPauseMenuVerticalOffset) / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->questPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, sQuestPageBgTextures_reloc);
|
||||
|
||||
KaleidoScope_DrawQuestStatus(play);
|
||||
}
|
||||
|
||||
// @recomp Draw this page even when it's opposite the active one.
|
||||
if ((pauseCtx->pageIndex != PAUSE_MASK)) {
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
|
||||
gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP);
|
||||
|
||||
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);
|
||||
|
||||
Matrix_RotateYF(1.57f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, kaleido_f32(&sPauseMenuVerticalOffset) / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->maskPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->maskPageVtx, sMaskPageBgTextures_reloc);
|
||||
|
||||
KaleidoScope_DrawMaskSelect(play);
|
||||
}
|
||||
|
||||
switch (pauseCtx->pageIndex) {
|
||||
case PAUSE_ITEM:
|
||||
if (pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_MASK) {
|
||||
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);
|
||||
|
||||
Matrix_RotateYF(0.0f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, kaleido_f32(&sPauseMenuVerticalOffset) / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->itemPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP =
|
||||
KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sItemPageBgTextures_reloc);
|
||||
|
||||
KaleidoScope_DrawItemSelect(play);
|
||||
}
|
||||
break;
|
||||
|
||||
case PAUSE_MAP:
|
||||
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);
|
||||
|
||||
Matrix_RotateYF(-1.57f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, kaleido_f32(&sPauseMenuVerticalOffset) / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapPageBgTextures_reloc);
|
||||
|
||||
if (kaleido_s16(&sInDungeonScene)) {
|
||||
KaleidoScope_DrawDungeonMap(play);
|
||||
Gfx_SetupDL42_Opa(gfxCtx);
|
||||
|
||||
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
|
||||
func_801091F0(play);
|
||||
} else {
|
||||
Matrix_RotateYF(R_PAUSE_WORLD_MAP_YAW / 1000.0f, MTXMODE_NEW);
|
||||
|
||||
if ((pauseCtx->state == PAUSE_STATE_OPENING_3) || (pauseCtx->state == PAUSE_STATE_OWL_WARP_3) ||
|
||||
(pauseCtx->state >= PAUSE_STATE_OWL_WARP_6) ||
|
||||
((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) &&
|
||||
((pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_3) ||
|
||||
(pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_7)))) {
|
||||
Matrix_Translate(0.0f, (R_PAUSE_WORLD_MAP_Y_OFFSET - 8000) / 100.0f,
|
||||
R_PAUSE_WORLD_MAP_DEPTH / 100.0f, MTXMODE_APPLY);
|
||||
} else {
|
||||
Matrix_Translate(0.0f, R_PAUSE_WORLD_MAP_Y_OFFSET / 100.0f, R_PAUSE_WORLD_MAP_DEPTH / 100.0f,
|
||||
MTXMODE_APPLY);
|
||||
}
|
||||
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
KaleidoScope_DrawWorldMap(play);
|
||||
}
|
||||
break;
|
||||
|
||||
case PAUSE_QUEST:
|
||||
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);
|
||||
|
||||
gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP);
|
||||
|
||||
Matrix_RotateYF(-3.14f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->questPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP =
|
||||
KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, sQuestPageBgTextures_reloc);
|
||||
|
||||
KaleidoScope_DrawQuestStatus(play);
|
||||
break;
|
||||
|
||||
case PAUSE_MASK:
|
||||
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);
|
||||
|
||||
Matrix_RotateYF(1.57f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
|
||||
Matrix_RotateXFApply(-pauseCtx->maskPageRoll / 100.0f);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
POLY_OPA_DISP =
|
||||
KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->maskPageVtx, sMaskPageBgTextures_reloc);
|
||||
|
||||
KaleidoScope_DrawMaskSelect(play);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue