1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-06-07 17:11:50 +00:00

Pause doc: Equipment page (#2538)

* [Pause menu docs] Equipment page

* final name
This commit is contained in:
Dragorn421 2025-05-25 13:59:05 +02:00 committed by GitHub
parent 6d56b1b8e0
commit b44ff69ded
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 274 additions and 97 deletions

View file

@ -50,6 +50,8 @@ typedef enum PauseMenuPage {
#define PAUSE_EQUIP_PLAYER_WIDTH 64
#define PAUSE_EQUIP_PLAYER_HEIGHT 112
#define PAUSE_EQUIP_PLAYER_FRAG_HEIGHT (TMEM_SIZE / (PAUSE_EQUIP_PLAYER_WIDTH * G_IM_SIZ_16b_BYTES))
#define PAUSE_EQUIP_PLAYER_FRAG_NUM (((PAUSE_EQUIP_PLAYER_HEIGHT - 1) / PAUSE_EQUIP_PLAYER_FRAG_HEIGHT) + 1)
#define PAUSE_EQUIP_BUFFER_SIZE sizeof(u16[PAUSE_EQUIP_PLAYER_HEIGHT][PAUSE_EQUIP_PLAYER_WIDTH])
#define PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE 0x5000
@ -92,7 +94,7 @@ typedef enum PauseMainState {
/* 4 */ PAUSE_MAIN_STATE_SONG_PROMPT_INIT, // Start the prompt for the player to play the song.
/* 5 */ PAUSE_MAIN_STATE_SONG_PROMPT, // Waiting for the player to play the song.
/* 6 */ PAUSE_MAIN_STATE_SONG_PROMPT_DONE, // The song prompt is done, the player either played the song successfully or made a mistake.
/* 7 */ PAUSE_MAIN_STATE_7,
/* 7 */ PAUSE_MAIN_STATE_EQUIP_CHANGED,
/* 8 */ PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG, // Like PAUSE_MAIN_STATE_IDLE, but the quest page is active and the cursor is positioned on a song.
/* 9 */ PAUSE_MAIN_STATE_SONG_PLAYBACK_START // Start playing the song back to the player.
} PauseMainState;

View file

@ -160,8 +160,8 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->cursorY[PAUSE_MAP] = 0;
pauseCtx->cursorX[PAUSE_QUEST] = 0;
pauseCtx->cursorY[PAUSE_QUEST] = 0;
pauseCtx->cursorX[PAUSE_EQUIP] = 1;
pauseCtx->cursorY[PAUSE_EQUIP] = 0;
pauseCtx->cursorX[PAUSE_EQUIP] = EQUIP_VALUE_SWORD_KOKIRI;
pauseCtx->cursorY[PAUSE_EQUIP] = EQUIP_TYPE_SWORD;
pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE;
pauseCtx->cursorItem[PAUSE_MAP] = VREG(30) + 3;

View file

@ -13,18 +13,60 @@
#include "assets/textures/icon_item_static/icon_item_static.h"
#include "assets/textures/parameter_static/parameter_static.h"
static u8 sChildUpgrades[] = { UPG_BULLET_BAG, UPG_BOMB_BAG, UPG_STRENGTH, UPG_SCALE };
static u8 sAdultUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG, UPG_STRENGTH, UPG_SCALE };
static u8 sChildUpgrades[] = {
UPG_BULLET_BAG, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
UPG_BOMB_BAG, // EQUIP_QUAD_UPG_BOMB_BAG
UPG_STRENGTH, // EQUIP_QUAD_UPG_STRENGTH
UPG_SCALE, // EQUIP_QUAD_UPG_SCALE
};
static u8 sAdultUpgrades[] = {
UPG_QUIVER, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
UPG_BOMB_BAG, // EQUIP_QUAD_UPG_BOMB_BAG
UPG_STRENGTH, // EQUIP_QUAD_UPG_STRENGTH
UPG_SCALE, // EQUIP_QUAD_UPG_SCALE
};
static u8 sChildUpgradeItemBases[] = { ITEM_BULLET_BAG_30, ITEM_BOMB_BAG_20, ITEM_STRENGTH_GORONS_BRACELET,
ITEM_SCALE_SILVER };
static u8 sAdultUpgradeItemBases[] = { ITEM_QUIVER_30, ITEM_BOMB_BAG_20, ITEM_STRENGTH_GORONS_BRACELET,
ITEM_SCALE_SILVER };
static u8 sChildUpgradeItemBases[] = {
ITEM_BULLET_BAG_30, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
ITEM_BOMB_BAG_20, // EQUIP_QUAD_UPG_BOMB_BAG
ITEM_STRENGTH_GORONS_BRACELET, // EQUIP_QUAD_UPG_STRENGTH
ITEM_SCALE_SILVER, // EQUIP_QUAD_UPG_SCALE
};
static u8 sAdultUpgradeItemBases[] = {
ITEM_QUIVER_30, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
ITEM_BOMB_BAG_20, // EQUIP_QUAD_UPG_BOMB_BAG
ITEM_STRENGTH_GORONS_BRACELET, // EQUIP_QUAD_UPG_STRENGTH
ITEM_SCALE_SILVER, // EQUIP_QUAD_UPG_SCALE
};
static u8 sUpgradeItemOffsets[] = { 0x00, 0x03, 0x06, 0x09 };
static u8 sUpgradeItemOffsets[] = {
0, // unused
ITEM_BOMB_BAG_20 - ITEM_QUIVER_30, // UPG_BOMB_BAG
ITEM_STRENGTH_GORONS_BRACELET - ITEM_QUIVER_30, // UPG_STRENGTH
ITEM_SCALE_SILVER - ITEM_QUIVER_30, // UPG_SCALE
};
static u8 sEquipmentItemOffsets[] = {
0x00, 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x00, 0x06, 0x07, 0x08, 0x00, 0x09, 0x0A, 0x0B,
// EQUIP_TYPE_SWORD
0, // unused
ITEM_SWORD_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_KOKIRI
ITEM_SWORD_MASTER - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_MASTER
ITEM_SWORD_BIGGORON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_BIGGORON
// EQUIP_TYPE_SHIELD
0, // unused
ITEM_SHIELD_DEKU - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_DEKU
ITEM_SHIELD_HYLIAN - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_HYLIAN
ITEM_SHIELD_MIRROR - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_MIRROR
// EQUIP_TYPE_TUNIC
0, // unused
ITEM_TUNIC_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_KOKIRI
ITEM_TUNIC_GORON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_GORON
ITEM_TUNIC_ZORA - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_ZORA
// EQUIP_TYPE_BOOTS
0, // unused
ITEM_BOOTS_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_KOKIRI
ITEM_BOOTS_IRON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_IRON
ITEM_BOOTS_HOVER - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_HOVER
};
void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u32 height) {
@ -46,15 +88,15 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
curTexture = source;
remainingSize = width * height * 2;
textureHeight = 4096 / (width * 2);
textureSize = width * textureHeight * 2;
remainingSize = width * height * G_IM_SIZ_16b_BYTES;
textureHeight = TMEM_SIZE / (width * G_IM_SIZ_16b_BYTES);
textureSize = width * textureHeight * G_IM_SIZ_16b_BYTES;
textureCount = remainingSize / textureSize;
if ((remainingSize % textureSize) != 0) {
textureCount += 1;
}
vtxIndex = 80;
vtxIndex = EQUIP_QUAD_PLAYER_FIRST * 4;
gDPSetTileCustom(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, width - 1, textureHeight - 1, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
@ -76,7 +118,7 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u
if ((remainingSize - textureSize) < 0) {
if (remainingSize > 0) {
textureHeight = remainingSize / (s32)(width * 2);
textureHeight = remainingSize / (s32)(width * G_IM_SIZ_16b_BYTES);
remainingSize -= textureSize;
gDPSetTileCustom(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, width - 1, textureHeight - 1, 0,
@ -156,7 +198,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, ZREG(39), ZREG(40), ZREG(41), pauseCtx->alpha);
gDPSetEnvColor(POLY_OPA_DISP++, ZREG(43), ZREG(44), ZREG(45), 0);
for (i = 0, j = 64; i < 4; i++, j += 4) {
// Draw EQUIP_QUAD_SELECTED_SWORD, EQUIP_QUAD_SELECTED_SHIELD, EQUIP_QUAD_SELECTED_TUNIC, EQUIP_QUAD_SELECTED_BOOTS
for (i = 0, j = EQUIP_QUAD_SELECTED_SWORD * 4; i < EQUIP_TYPE_MAX; i++, j += 4) {
if (CUR_EQUIP_VALUE(i) != 0) {
gDPPipeSync(POLY_OPA_DISP++);
gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 4, 0);
@ -170,6 +214,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_EQUIP];
pauseCtx->cursorColorSet = 0;
// Handle moving the cursor with stick input
if (pauseCtx->cursorSpecialPos == 0) {
pauseCtx->nameColorSet = 0;
@ -185,12 +231,13 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
cursorMoveResult = 0;
do {
if (pauseCtx->stickAdjX < -30) {
if (pauseCtx->cursorX[PAUSE_EQUIP] != 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG) {
pauseCtx->cursorX[PAUSE_EQUIP]--;
pauseCtx->cursorPoint[PAUSE_EQUIP] -= 1;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
//! @bug Assumes adult always has bullet bag (as adult this should rely on `UPG_QUIVER`)
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
cursorMoveResult = 1;
}
@ -232,7 +279,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
pauseCtx->cursorX[PAUSE_EQUIP]++;
pauseCtx->cursorPoint[PAUSE_EQUIP] += 1;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
}
@ -279,17 +326,21 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
pauseCtx->cursorY[PAUSE_EQUIP]--;
pauseCtx->cursorPoint[PAUSE_EQUIP] -= 4;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
cursorMoveResult = 1;
}
} else if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
} else {
if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
}
}
} else {
if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
}
} else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
}
} else {
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
@ -301,13 +352,15 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
pauseCtx->cursorY[PAUSE_EQUIP]++;
pauseCtx->cursorPoint[PAUSE_EQUIP] += 4;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
}
} else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
} else {
if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
}
}
} else {
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
@ -328,25 +381,29 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
cursorPoint = cursorX = cursorY = 0;
while (true) {
if (cursorX == 0) {
if (cursorY == 0) {
if (cursorX == EQUIP_CURSOR_X_UPG) {
if (cursorY == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
} else if (CUR_UPG_VALUE(cursorY) != 0) {
} else {
if (CUR_UPG_VALUE(cursorY) != 0) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
}
} else {
if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
} else if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
cursorY = cursorY + 1;
@ -362,7 +419,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
}
} else {
} else { // cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT
if (pauseCtx->stickAdjX < -30) {
pauseCtx->nameDisplayTimer = 0;
pauseCtx->cursorSpecialPos = 0;
@ -372,18 +429,20 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
cursorPoint = cursorX = 3;
cursorY = 0;
while (true) {
if (cursorX == 0) {
if (cursorX == EQUIP_CURSOR_X_UPG) {
if (CUR_UPG_VALUE(cursorY) != 0) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
} else if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
} else {
if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
}
cursorY = cursorY + 1;
@ -401,11 +460,14 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
// set cursorItem
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
pauseCtx->cursorColorSet = 0;
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0)) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) &&
(CUR_UPG_VALUE(UPG_BULLET_BAG) != 0)) {
cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1;
} else {
cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] +
@ -413,7 +475,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
PRINTF("H_arrowcase_1 + non_equip_item_table = %d\n", cursorItem);
}
} else {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (CUR_UPG_VALUE(UPG_QUIVER) == 0)) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) &&
(CUR_UPG_VALUE(UPG_QUIVER) == 0)) {
cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1;
} else {
cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] +
@ -430,8 +493,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (pauseCtx->cursorX[PAUSE_EQUIP] == 3)) {
if (gSaveContext.save.info.playerData.bgsFlag != 0) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_TYPE_SWORD) &&
(pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_VALUE_SWORD_BIGGORON)) {
if (gSaveContext.save.info.playerData.bgsFlag) {
cursorItem = ITEM_HEART_PIECE_2;
} else if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) {
cursorItem = ITEM_GIANTS_KNIFE;
@ -445,6 +509,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
PRINTF("kscope->select_name[Display_Equipment] = %d\n", pauseCtx->cursorItem[PAUSE_EQUIP]);
// Handle age particularities
if (!CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) {
pauseCtx->nameColorSet = 1;
}
@ -457,7 +523,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
if ((pauseCtx->cursorX[PAUSE_EQUIP] == 0) && (pauseCtx->cursorY[PAUSE_EQUIP] == 0)) {
if ((pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) &&
(pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER)) {
if (LINK_AGE_IN_YEARS != YEARS_CHILD) {
if ((cursorItem >= ITEM_BULLET_BAG_30) && (cursorItem <= ITEM_BULLET_BAG_50)) {
pauseCtx->nameColorSet = 1;
@ -469,20 +536,25 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Set cursor position
KaleidoScope_SetCursorPos(pauseCtx, cursorSlot * 4, pauseCtx->equipVtx);
// Handle input for changing equipment
if ((pauseCtx->cursorSpecialPos == 0) && (cursorItem != PAUSE_ITEM_NONE) &&
(pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
CHECK_BTN_ALL(input->press.button, BTN_A) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) {
CHECK_BTN_ALL(input->press.button, BTN_A) && (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG)) {
if (CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) {
Inventory_ChangeEquipment(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]);
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_TYPE_SWORD) {
gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 0;
gSaveContext.save.info.equips.buttonItems[0] = cursorItem;
if ((pauseCtx->cursorX[PAUSE_EQUIP] == 3) && (gSaveContext.save.info.playerData.bgsFlag != 0)) {
if ((pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_VALUE_SWORD_BIGGORON) &&
gSaveContext.save.info.playerData.bgsFlag) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
gSaveContext.save.info.playerData.swordHealth = 8;
} else {
@ -490,8 +562,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
}
if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_SWORD_BIGGORON) &&
(gSaveContext.save.info.playerData.bgsFlag == 0) &&
!gSaveContext.save.info.playerData.bgsFlag &&
CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_GIANTS_KNIFE;
}
@ -502,7 +573,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
pauseCtx->mainState = PAUSE_MAIN_STATE_7;
// Wait 10 frames before accepting input again
pauseCtx->mainState = PAUSE_MAIN_STATE_EQUIP_CHANGED;
sEquipTimer = 10;
} else {
Audio_PlaySfxGeneral(NA_SE_SY_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
@ -514,7 +587,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
} else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (pauseCtx->pageIndex == PAUSE_EQUIP)) {
} else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (pauseCtx->pageIndex == PAUSE_EQUIP)) {
KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_EQUIP] * 4, pauseCtx->equipVtx);
pauseCtx->cursorColorSet = 8;
@ -524,13 +597,19 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
for (rowStart = 0, i = 0, point = 4; i < 4; i++, rowStart += 4, point += 16) {
// Enlarge the equip item at the current cursor position, if it can be equipped
// for each row (one row per equip type)
for (rowStart = 0, i = 0, point = EQUIP_QUAD_SWORD_KOKIRI * 4; i < EQUIP_TYPE_MAX;
i++, rowStart += 4, point += 4 * 4) {
// for each equip column
for (k = 0, temp = rowStart + 1, bit = rowStart, j = point; k < 3; k++, bit++, j += 4, temp++) {
if ((gBitFlags[bit] & gSaveContext.save.info.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) {
if (CHECK_AGE_REQ_EQUIP(i, k + 1)) {
if (temp == cursorSlot) {
pauseCtx->equipVtx[j].v.ob[0] = pauseCtx->equipVtx[j + 2].v.ob[0] =
pauseCtx->equipVtx[j].v.ob[0] - 2;
pauseCtx->equipVtx[j + 1].v.ob[0] = pauseCtx->equipVtx[j + 3].v.ob[0] =
@ -545,13 +624,19 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Draw upgrades and equips
Gfx_SetupDL_42Opa(play->state.gfxCtx);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
for (rowStart = 0, j = 0, temp = 0, i = 0; i < 4; i++, rowStart += 4, j += 16) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 16, 0);
// for each row
for (rowStart = 0, j = 0, temp = 0, i = 0; i < 4; i++, rowStart += 4, j += 4 * 4) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 4 * 4, 0);
// Draw upgrade `i`
// EQUIP_QUAD_UPG_BULLETBAG_QUIVER, EQUIP_QUAD_UPG_BOMB_BAG, EQUIP_QUAD_UPG_STRENGTH, EQUIP_QUAD_UPG_SCALE
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
point = CUR_UPG_VALUE(sChildUpgrades[i]);
@ -562,6 +647,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
} else {
if ((i == 0) && (CUR_UPG_VALUE(sAdultUpgrades[i]) == 0)) {
// Show bullet bag instead of quiver if player has no quiver
//! @bug This assumes adult always has bullet bag
KaleidoScope_DrawQuadTextureRGBA32(
play->state.gfxCtx, gItemIcons[sChildUpgradeItemBases[i] + CUR_UPG_VALUE(sChildUpgrades[i]) - 1],
ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, 0);
@ -572,12 +659,20 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Draw owned equips of type `i`
// EQUIP_QUAD_SWORD_KOKIRI, EQUIP_QUAD_SWORD_MASTER, EQUIP_QUAD_SWORD_BIGGORON
// EQUIP_QUAD_SHIELD_DEKU, EQUIP_QUAD_SHIELD_HYLIAN, EQUIP_QUAD_SHIELD_MIRROR
// EQUIP_QUAD_TUNIC_KOKIRI, EQUIP_QUAD_TUNIC_GORON, EQUIP_QUAD_TUNIC_ZORA
// EQUIP_QUAD_BOOTS_KOKIRI, EQUIP_QUAD_BOOTS_IRON, EQUIP_QUAD_BOOTS_HOVER
for (k = 0, bit = rowStart, point = 4; k < 3; k++, point += 4, temp++, bit++) {
if (((u32)i == 0) && (k == 2) && (gSaveContext.save.info.playerData.bgsFlag != 0)) {
if (((u32)i == EQUIP_TYPE_SWORD) && (k == EQUIP_INV_SWORD_BIGGORON) &&
gSaveContext.save.info.playerData.bgsFlag) {
KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIconSwordBiggoronTex, ITEM_ICON_WIDTH,
ITEM_ICON_HEIGHT, point);
} else if ((i == 0) && (k == 2) && (gBitFlags[bit + 1] & gSaveContext.save.info.inventory.equipment)) {
} else if ((i == EQUIP_TYPE_SWORD) && (k == EQUIP_INV_SWORD_BIGGORON) &&
(gBitFlags[bit + 1] & gSaveContext.save.info.inventory.equipment)) {
KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIconBrokenGiantsKnifeTex, ITEM_ICON_WIDTH,
ITEM_ICON_HEIGHT, point);
} else if (gBitFlags[bit] & gSaveContext.save.info.inventory.equipment) {
@ -587,13 +682,15 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Draw player to the player prerender buffer
KaleidoScope_DrawPlayerWork(play);
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (sEquipTimer == 10)) {
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (sEquipTimer == 10)) {
KaleidoScope_SetupPlayerPreRender(play);
}
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (sEquipTimer == 9)) {
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (sEquipTimer == 9)) {
#ifndef AVOID_UB
//! @bug: This function shouldn't take any arguments
KaleidoScope_ProcessPlayerPreRender(play);
@ -609,6 +706,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x0B, interfaceCtx->mapSegment);
gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment);
// Draw player prerender onto the equip page
Gfx_SetupDL_42Opa(play->state.gfxCtx);
KaleidoScope_DrawEquipmentImage(play, pauseCtx->playerSegment, PAUSE_EQUIP_PLAYER_WIDTH, PAUSE_EQUIP_PLAYER_HEIGHT);

View file

@ -1876,13 +1876,14 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
(pauseCtx->nameDisplayTimer < WREG(89)) &&
(((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && (pauseCtx->mainState <= PAUSE_MAIN_STATE_7)) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
(pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED)) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
(pauseCtx->cursorSpecialPos == 0)) {
if (((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
(pauseCtx->mainState <= PAUSE_MAIN_STATE_7)) ||
(pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED)) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63;
@ -1949,7 +1950,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
QUEST_ICON_HEIGHT, 0);
}
}
} else if ((pauseCtx->mainState < PAUSE_MAIN_STATE_3) || (pauseCtx->mainState == PAUSE_MAIN_STATE_7) ||
} else if ((pauseCtx->mainState < PAUSE_MAIN_STATE_3) || (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = temp;
@ -2156,7 +2157,7 @@ void KaleidoScope_UpdateNamePanel(PlayState* play) {
((pauseCtx->cursorSlot[PAUSE_QUEST] >= 6) && (pauseCtx->cursorSlot[PAUSE_QUEST] <= 0x11)) &&
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) ||
(pauseCtx->pageIndex == PAUSE_ITEM) ||
((pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0))) {
((pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG))) {
if (pauseCtx->namedItem != ITEM_SOLD_OUT) {
pauseCtx->nameDisplayTimer++;
if (pauseCtx->nameDisplayTimer > WREG(88)) {
@ -2691,9 +2692,14 @@ static s16 sItemVtxQuadsWithAmmo[] = {
SLOT_MAGIC_BEAN * 4, // ITEM_QUAD_AMMO_BEAN_
};
static s16 D_8082B12C[] = { -114, 12, 44, 76 };
static s16 sEquipColumnsX[] = { -114, 12, 44, 76 };
static u8 D_8082B134[] = { 1, 5, 9, 13 };
static u8 sEquipQuadsFirstByEquipType[EQUIP_TYPE_MAX] = {
EQUIP_QUAD_SWORD_KOKIRI, // EQUIP_TYPE_SWORD
EQUIP_QUAD_SHIELD_DEKU, // EQUIP_TYPE_SHIELD
EQUIP_QUAD_TUNIC_KOKIRI, // EQUIP_TYPE_TUNIC
EQUIP_QUAD_BOOTS_KOKIRI, // EQUIP_TYPE_BOOTS
};
static s16 sQuestQuadsX[] = {
74, // QUEST_MEDALLION_FOREST
@ -3109,19 +3115,29 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
}
}
pauseCtx->equipVtx = GRAPH_ALLOC(gfxCtx, 112 * sizeof(Vtx));
pauseCtx->equipVtx = GRAPH_ALLOC(gfxCtx, (EQUIP_QUAD_MAX * 4) * sizeof(Vtx));
for (k = 0, i = 0, y = 58; i < 4; i++, y -= 32) {
// EQUIP_QUAD_UPG_BULLETBAG_QUIVER, EQUIP_QUAD_SWORD_KOKIRI, EQUIP_QUAD_SWORD_MASTER, EQUIP_QUAD_SWORD_BIGGORON,
// EQUIP_QUAD_UPG_BOMB_BAG, EQUIP_QUAD_SHIELD_DEKU, EQUIP_QUAD_SHIELD_HYLIAN, EQUIP_QUAD_SHIELD_MIRROR,
// EQUIP_QUAD_UPG_STRENGTH, EQUIP_QUAD_TUNIC_KOKIRI, EQUIP_QUAD_TUNIC_GORON, EQUIP_QUAD_TUNIC_ZORA,
// EQUIP_QUAD_UPG_SCALE, EQUIP_QUAD_BOOTS_KOKIRI, EQUIP_QUAD_BOOTS_IRON, EQUIP_QUAD_BOOTS_HOVER
// for each row
for (k = 0, i = 0, y = (EQUIP_TYPE_MAX * EQUIP_GRID_CELL_HEIGHT) / 2 - 6; i < EQUIP_TYPE_MAX;
i++, y -= EQUIP_GRID_CELL_HEIGHT) {
// for each column
for (j = 0; j < 4; j++, k += 4) {
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] = D_8082B12C[j] + 2;
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] =
sEquipColumnsX[j] + EQUIP_GRID_QUAD_MARGIN;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] =
pauseCtx->equipVtx[k + 0].v.ob[0] + 28;
pauseCtx->equipVtx[k + 0].v.ob[0] + EQUIP_GRID_QUAD_WIDTH;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] = y + pauseCtx->pagesYOrigin1 - 2;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] =
y + pauseCtx->pagesYOrigin1 - EQUIP_GRID_QUAD_MARGIN;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - 28;
pauseCtx->equipVtx[k + 0].v.ob[1] - EQUIP_GRID_QUAD_HEIGHT;
pauseCtx->equipVtx[k + 0].v.ob[2] = pauseCtx->equipVtx[k + 1].v.ob[2] = pauseCtx->equipVtx[k + 2].v.ob[2] =
pauseCtx->equipVtx[k + 3].v.ob[2] = 0;
@ -3133,7 +3149,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 2].v.tc[0] = 0;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[0] =
pauseCtx->equipVtx[k + 3].v.tc[1] = 0x400;
pauseCtx->equipVtx[k + 3].v.tc[1] = EQUIP_GRID_QUAD_TEX_SIZE * (1 << 5);
pauseCtx->equipVtx[k + 0].v.cn[0] = pauseCtx->equipVtx[k + 1].v.cn[0] = pauseCtx->equipVtx[k + 2].v.cn[0] =
pauseCtx->equipVtx[k + 3].v.cn[0] = pauseCtx->equipVtx[k + 0].v.cn[1] =
@ -3147,19 +3163,23 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
}
}
for (j = 0; j < 4; k += 4, j++) {
// EQUIP_QUAD_SELECTED_SWORD, EQUIP_QUAD_SELECTED_SHIELD, EQUIP_QUAD_SELECTED_TUNIC, EQUIP_QUAD_SELECTED_BOOTS
for (j = 0; j < EQUIP_TYPE_MAX; k += 4, j++) {
if (CUR_EQUIP_VALUE(j) != 0) {
i = (CUR_EQUIP_VALUE(j) + D_8082B134[j] - 1) * 4;
i = (CUR_EQUIP_VALUE(j) + sEquipQuadsFirstByEquipType[j] - 1) * 4;
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] = pauseCtx->equipVtx[i].v.ob[0] - 2;
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] =
pauseCtx->equipVtx[i].v.ob[0] + EQUIP_GRID_SELECTED_QUAD_MARGIN;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] =
pauseCtx->equipVtx[k + 0].v.ob[0] + 32;
pauseCtx->equipVtx[k + 0].v.ob[0] + EQUIP_GRID_SELECTED_QUAD_WIDTH;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] = pauseCtx->equipVtx[i].v.ob[1] + 2;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] =
pauseCtx->equipVtx[i].v.ob[1] - EQUIP_GRID_SELECTED_QUAD_MARGIN;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - 32;
pauseCtx->equipVtx[k + 0].v.ob[1] - EQUIP_GRID_SELECTED_QUAD_HEIGHT;
pauseCtx->equipVtx[k + 0].v.ob[2] = pauseCtx->equipVtx[k + 1].v.ob[2] = pauseCtx->equipVtx[k + 2].v.ob[2] =
pauseCtx->equipVtx[k + 3].v.ob[2] = 0;
@ -3171,7 +3191,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 2].v.tc[0] = 0;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[0] =
pauseCtx->equipVtx[k + 3].v.tc[1] = 0x400;
pauseCtx->equipVtx[k + 3].v.tc[1] = EQUIP_GRID_SELECTED_QUAD_TEX_SIZE * (1 << 5);
pauseCtx->equipVtx[k + 0].v.cn[0] = pauseCtx->equipVtx[k + 1].v.cn[0] = pauseCtx->equipVtx[k + 2].v.cn[0] =
pauseCtx->equipVtx[k + 3].v.cn[0] = pauseCtx->equipVtx[k + 0].v.cn[1] =
@ -3185,16 +3205,20 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
}
}
x = 112;
// EQUIP_QUAD_PLAYER_FIRST..EQUIP_QUAD_PLAYER_LAST
x = PAUSE_EQUIP_PLAYER_HEIGHT;
y = 50;
for (;;) {
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] = -64;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] = pauseCtx->equipVtx[k + 0].v.ob[0] + 64;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] =
pauseCtx->equipVtx[k + 0].v.ob[0] + PAUSE_EQUIP_PLAYER_WIDTH;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] = y + pauseCtx->pagesYOrigin1;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] = pauseCtx->equipVtx[k + 0].v.ob[1] - 32;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - PAUSE_EQUIP_PLAYER_FRAG_HEIGHT;
pauseCtx->equipVtx[k + 0].v.ob[2] = pauseCtx->equipVtx[k + 1].v.ob[2] = pauseCtx->equipVtx[k + 2].v.ob[2] =
pauseCtx->equipVtx[k + 3].v.ob[2] = 0;
@ -3205,9 +3229,10 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 0].v.tc[0] = pauseCtx->equipVtx[k + 0].v.tc[1] = pauseCtx->equipVtx[k + 1].v.tc[1] =
pauseCtx->equipVtx[k + 2].v.tc[0] = 0;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 3].v.tc[0] = 0x800;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 3].v.tc[0] = PAUSE_EQUIP_PLAYER_WIDTH * (1 << 5);
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] = 0x400;
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] =
PAUSE_EQUIP_PLAYER_FRAG_HEIGHT * (1 << 5);
pauseCtx->equipVtx[k + 0].v.cn[0] = pauseCtx->equipVtx[k + 1].v.cn[0] = pauseCtx->equipVtx[k + 2].v.cn[0] =
pauseCtx->equipVtx[k + 3].v.cn[0] = pauseCtx->equipVtx[k + 0].v.cn[1] = pauseCtx->equipVtx[k + 1].v.cn[1] =
@ -3218,16 +3243,18 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 0].v.cn[3] = pauseCtx->equipVtx[k + 1].v.cn[3] = pauseCtx->equipVtx[k + 2].v.cn[3] =
pauseCtx->equipVtx[k + 3].v.cn[3] = pauseCtx->alpha;
x -= 32;
x -= PAUSE_EQUIP_PLAYER_FRAG_HEIGHT;
if (x < 0) {
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - 0x10;
pauseCtx->equipVtx[k + 0].v.ob[1] - (PAUSE_EQUIP_PLAYER_HEIGHT % PAUSE_EQUIP_PLAYER_FRAG_HEIGHT);
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] =
(PAUSE_EQUIP_PLAYER_HEIGHT % PAUSE_EQUIP_PLAYER_FRAG_HEIGHT) * (1 << 5);
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] = 0x200;
break;
}
y -= 32;
y -= PAUSE_EQUIP_PLAYER_FRAG_HEIGHT;
k += 4;
}
@ -4144,7 +4171,7 @@ void KaleidoScope_Update(PlayState* play) {
}
break;
case PAUSE_MAIN_STATE_7:
case PAUSE_MAIN_STATE_EQUIP_CHANGED:
break;
case PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG:

View file

@ -69,6 +69,55 @@ typedef enum QuestQuad {
/* 47 */ QUEST_QUAD_MAX
} QuestQuad;
#define EQUIP_CURSOR_X_UPG 0
#define EQUIP_CURSOR_Y_BULLETBAG_QUIVER 0
#define EQUIP_GRID_CELL_WIDTH 32
#define EQUIP_GRID_CELL_HEIGHT 32
#define EQUIP_GRID_QUAD_MARGIN 2
#define EQUIP_GRID_QUAD_WIDTH (EQUIP_GRID_CELL_WIDTH - (2 * EQUIP_GRID_QUAD_MARGIN))
#define EQUIP_GRID_QUAD_HEIGHT (EQUIP_GRID_CELL_HEIGHT - (2 * EQUIP_GRID_QUAD_MARGIN))
#define EQUIP_GRID_QUAD_TEX_SIZE 32 // both width and height
#define EQUIP_GRID_SELECTED_QUAD_MARGIN (-2)
#define EQUIP_GRID_SELECTED_QUAD_WIDTH (EQUIP_GRID_QUAD_WIDTH - (2 * EQUIP_GRID_SELECTED_QUAD_MARGIN))
#define EQUIP_GRID_SELECTED_QUAD_HEIGHT (EQUIP_GRID_QUAD_HEIGHT - (2 * EQUIP_GRID_SELECTED_QUAD_MARGIN))
#define EQUIP_GRID_SELECTED_QUAD_TEX_SIZE 32 // both width and height
typedef enum EquipQuad {
// Grid of upgrades and equips, left column is upgrades, others are equips, with one row per equip type
// Row 0
/* 0 */ EQUIP_QUAD_UPG_BULLETBAG_QUIVER,
/* 1 */ EQUIP_QUAD_SWORD_KOKIRI,
/* 2 */ EQUIP_QUAD_SWORD_MASTER,
/* 3 */ EQUIP_QUAD_SWORD_BIGGORON,
// Row 1
/* 4 */ EQUIP_QUAD_UPG_BOMB_BAG,
/* 5 */ EQUIP_QUAD_SHIELD_DEKU,
/* 6 */ EQUIP_QUAD_SHIELD_HYLIAN,
/* 7 */ EQUIP_QUAD_SHIELD_MIRROR,
// Row 2
/* 8 */ EQUIP_QUAD_UPG_STRENGTH,
/* 9 */ EQUIP_QUAD_TUNIC_KOKIRI,
/* 10 */ EQUIP_QUAD_TUNIC_GORON,
/* 11 */ EQUIP_QUAD_TUNIC_ZORA,
// Row 3
/* 12 */ EQUIP_QUAD_UPG_SCALE,
/* 13 */ EQUIP_QUAD_BOOTS_KOKIRI,
/* 14 */ EQUIP_QUAD_BOOTS_IRON,
/* 15 */ EQUIP_QUAD_BOOTS_HOVER,
// Markers indicating the currently selected equip
/* 16 */ EQUIP_QUAD_SELECTED_SWORD,
/* 17 */ EQUIP_QUAD_SELECTED_SHIELD,
/* 18 */ EQUIP_QUAD_SELECTED_TUNIC,
/* 19 */ EQUIP_QUAD_SELECTED_BOOTS,
// Player prerender
/* 20 */ EQUIP_QUAD_PLAYER_FIRST,
/* 23 */ EQUIP_QUAD_PLAYER_LAST = EQUIP_QUAD_PLAYER_FIRST + PAUSE_EQUIP_PLAYER_FRAG_NUM - 1,
// 24..27 are unused, probably meant for player prerender
/* 28 */ EQUIP_QUAD_MAX = EQUIP_QUAD_PLAYER_LAST + 4 + 1
} EquipQuad;
// The world map image is split into a number of quad fragments for drawing
#define WORLD_MAP_IMAGE_WIDTH 216
#define WORLD_MAP_IMAGE_HEIGHT 128