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:
parent
6d56b1b8e0
commit
b44ff69ded
5 changed files with 274 additions and 97 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue