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

Doc page switch data and macros for age reqs

This commit is contained in:
Dragorn421 2022-10-12 10:24:09 +02:00
parent 4eae3ca126
commit a831003b36
No known key found for this signature in database
GPG key ID: 32B53D2D16FC4118
6 changed files with 296 additions and 108 deletions

View file

@ -730,13 +730,24 @@ typedef enum {
#define PAUSE_CURSOR_PAGE_RIGHT 11
typedef enum {
/* 0x00 */ PAUSE_ITEM,
/* 0x01 */ PAUSE_MAP,
/* 0x02 */ PAUSE_QUEST,
/* 0x03 */ PAUSE_EQUIP,
/* 0x00 */ PAUSE_ITEM, // -z
/* 0x01 */ PAUSE_MAP, // +x
/* 0x02 */ PAUSE_QUEST, // +z
/* 0x03 */ PAUSE_EQUIP, // -x
/* 0x04 */ PAUSE_WORLD_MAP
} PauseMenuPage;
#define PAUSE_ITEM_X (0)
#define PAUSE_ITEM_Z (-1)
#define PAUSE_MAP_X (1)
#define PAUSE_MAP_Z (0)
#define PAUSE_QUEST_X (0)
#define PAUSE_QUEST_Z (1)
#define PAUSE_EQUIP_X (-1)
#define PAUSE_EQUIP_Z (0)
#define PAUSE_EYE_DIST (64.0f)
#define PAUSE_EQUIP_PLAYER_WIDTH 64
#define PAUSE_EQUIP_PLAYER_HEIGHT 112
@ -827,7 +838,7 @@ typedef struct {
/* 0x01D6 */ u16 debugState;
/* 0x01D8 */ Vec3f eye;
/* 0x01E4 */ u16 mainSubState;
/* 0x01E6 */ u16 mode;
/* 0x01E6 */ u16 nextPageMode; // (2 * prev pageIndex) + (scroll left ? 1 : 0)
/* 0x01E8 */ u16 pageIndex; // "kscp_pos"
/* 0x01EA */ u16 switchPageTimer;
/* 0x01EC */ u16 savePromptSubState;

View file

@ -1,22 +1,42 @@
#include "global.h"
s16 sKaleidoSetupKscpPos0[] = {
s16 sKaleidoSetupUnusedPageIndex[] = {
PAUSE_QUEST, // PAUSE_ITEM
PAUSE_EQUIP, // PAUSE_MAP
PAUSE_ITEM, // PAUSE_QUEST
PAUSE_MAP, // PAUSE_EQUIP
};
f32 sKaleidoSetupEyeX0[] = { 0.0f, 64.0f, 0.0f, -64.0f };
f32 sKaleidoSetupEyeZ0[] = { -64.0f, 0.0f, 64.0f, 0.0f };
f32 sKaleidoSetupUnusedEyeX[] = {
PAUSE_EYE_DIST * -PAUSE_QUEST_X, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_EQUIP_X, // PAUSE_MAP
PAUSE_EYE_DIST * -PAUSE_ITEM_X, // PAUSE_QUEST
PAUSE_EYE_DIST * -PAUSE_MAP_X, // PAUSE_EQUIP
};
f32 sKaleidoSetupUnusedEyeZ[] = {
PAUSE_EYE_DIST * -PAUSE_QUEST_Z, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_EQUIP_Z, // PAUSE_MAP
PAUSE_EYE_DIST * -PAUSE_ITEM_Z, // PAUSE_QUEST
PAUSE_EYE_DIST * -PAUSE_MAP_Z, // PAUSE_EQUIP
};
s16 sKaleidoSetupKscpPos1[] = {
s16 sKaleidoSetupRightPageIndex[] = {
PAUSE_MAP, // PAUSE_ITEM
PAUSE_QUEST, // PAUSE_MAP
PAUSE_EQUIP, // PAUSE_QUEST
PAUSE_ITEM, // PAUSE_EQUIP
};
f32 sKaleidoSetupEyeX1[] = { -64.0f, 0.0f, 64.0f, 0.0f };
f32 sKaleidoSetupEyeZ1[] = { 0.0f, -64.0f, 0.0f, 64.0f };
f32 sKaleidoSetupRightPageEyeX[] = {
PAUSE_EYE_DIST * -PAUSE_MAP_X, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_QUEST_X, // PAUSE_MAP
PAUSE_EYE_DIST * -PAUSE_EQUIP_X, // PAUSE_QUEST
PAUSE_EYE_DIST * -PAUSE_ITEM_X, // PAUSE_EQUIP
};
f32 sKaleidoSetupRightPageEyeZ[] = {
PAUSE_EYE_DIST * -PAUSE_MAP_Z, // PAUSE_ITEM
PAUSE_EYE_DIST * -PAUSE_QUEST_Z, // PAUSE_MAP
PAUSE_EYE_DIST * -PAUSE_EQUIP_Z, // PAUSE_QUEST
PAUSE_EYE_DIST * -PAUSE_ITEM_Z, // PAUSE_EQUIP
};
void KaleidoSetup_Update(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
@ -45,19 +65,22 @@ void KaleidoSetup_Update(PlayState* play) {
pauseCtx->mainSubState = PAUSE_MAIN_STATE_SWITCHING_PAGE; // irrelevant
if (R_START_LABEL_DD(0) == 0) {
pauseCtx->eye.x = sKaleidoSetupEyeX0[pauseCtx->pageIndex];
pauseCtx->eye.z = sKaleidoSetupEyeZ0[pauseCtx->pageIndex];
pauseCtx->pageIndex = sKaleidoSetupKscpPos0[pauseCtx->pageIndex];
// Never reached, unused, and the data would be wrong anyway
pauseCtx->eye.x = sKaleidoSetupUnusedEyeX[pauseCtx->pageIndex];
pauseCtx->eye.z = sKaleidoSetupUnusedEyeZ[pauseCtx->pageIndex];
pauseCtx->pageIndex = sKaleidoSetupUnusedPageIndex[pauseCtx->pageIndex];
} else {
pauseCtx->eye.x = sKaleidoSetupEyeX1[pauseCtx->pageIndex];
pauseCtx->eye.z = sKaleidoSetupEyeZ1[pauseCtx->pageIndex];
pauseCtx->pageIndex = sKaleidoSetupKscpPos1[pauseCtx->pageIndex];
// Set eye position and pageIndex such that scrolling left brings to the desired page
pauseCtx->eye.x = sKaleidoSetupRightPageEyeX[pauseCtx->pageIndex];
pauseCtx->eye.z = sKaleidoSetupRightPageEyeZ[pauseCtx->pageIndex];
pauseCtx->pageIndex = sKaleidoSetupRightPageIndex[pauseCtx->pageIndex];
}
pauseCtx->mode = (u16)(pauseCtx->pageIndex * 2) + 1;
// Set next page mode to scroll left
pauseCtx->nextPageMode = (u16)(pauseCtx->pageIndex * 2) + 1;
pauseCtx->state = PAUSE_STATE_WAIT_LETTERBOX;
osSyncPrintf("=%d eye.x=%f, eye.z=%f kscp_pos=%d\n", pauseCtx->mode, pauseCtx->eye.x,
osSyncPrintf("=%d eye.x=%f, eye.z=%f kscp_pos=%d\n", pauseCtx->nextPageMode, pauseCtx->eye.x,
pauseCtx->eye.z, pauseCtx->pageIndex);
}
@ -83,7 +106,7 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->alpha = 0;
pauseCtx->switchPageTimer = 0;
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->mode = 0;
pauseCtx->nextPageMode = 0;
pauseCtx->pageIndex = PAUSE_ITEM;
pauseCtx->rollRotPageItem = pauseCtx->rollRotPageEquip = pauseCtx->rollRotPageMap = pauseCtx->rollRotPageQuest =

View file

@ -438,9 +438,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
osSyncPrintf("kscope->select_name[Display_Equipment] = %d\n", pauseCtx->cursorItem[PAUSE_EQUIP]);
if (!((gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] == 9) ||
(gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] ==
((void)0, gSaveContext.linkAge)))) {
if (!CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) {
pauseCtx->nameColorSet = 1;
}
@ -470,9 +468,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
(pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainSubState == PAUSE_MAIN_STATE_IDLE) &&
CHECK_BTN_ALL(input->press.button, BTN_A) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) {
if ((gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] == 9) ||
(gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] ==
((void)0, gSaveContext.linkAge))) {
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) {
@ -524,7 +520,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
for (k = 0, temp = rowStart + 1, bit = rowStart, j = point; k < 3; k++, bit++, j += 4, temp++) {
if ((gBitFlags[bit] & gSaveContext.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) {
if ((gEquipAgeReqs[i][k + 1] == 9) || (gEquipAgeReqs[i][k + 1] == ((void)0, gSaveContext.linkAge))) {
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;

View file

@ -24,7 +24,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx,
gDPPipeSync(POLY_OPA_DISP++);
if (!((gSlotAgeReqs[SLOT(item)] == 9) || gSlotAgeReqs[SLOT(item)] == ((void)0, gSaveContext.linkAge))) {
if (!CHECK_AGE_REQ_SLOT(SLOT(item))) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 100, 100, pauseCtx->alpha);
} else {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@ -337,7 +337,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
pauseCtx->cursorItem[PAUSE_ITEM] = cursorItem;
pauseCtx->cursorSlot[PAUSE_ITEM] = cursorSlot;
if (!((gSlotAgeReqs[cursorSlot] == 9) || (gSlotAgeReqs[cursorSlot] == ((void)0, gSaveContext.linkAge)))) {
if (!CHECK_AGE_REQ_SLOT(cursorSlot)) {
pauseCtx->nameColorSet = 1;
}
@ -348,9 +348,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
if ((pauseCtx->debugState == 0) && (pauseCtx->state == PAUSE_STATE_MAIN) &&
(pauseCtx->mainSubState == PAUSE_MAIN_STATE_IDLE)) {
if (CHECK_BTN_ANY(input->press.button, BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT)) {
if (((gSlotAgeReqs[cursorSlot] == 9) ||
(gSlotAgeReqs[cursorSlot] == ((void)0, gSaveContext.linkAge))) &&
(cursorItem != ITEM_SOLD_OUT)) {
if (CHECK_AGE_REQ_SLOT(cursorSlot) && (cursorItem != ITEM_SOLD_OUT)) {
if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
pauseCtx->equipTargetCBtn = 0;
} else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) {
@ -436,7 +434,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
if (gSaveContext.inventory.items[i] != ITEM_NONE) {
if ((pauseCtx->mainSubState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_ITEM) &&
(pauseCtx->cursorSpecialPos == 0)) {
if ((gSlotAgeReqs[i] == 9) || (gSlotAgeReqs[i] == ((void)0, gSaveContext.linkAge))) {
if (CHECK_AGE_REQ_SLOT(i)) {
if ((sEquipState == 2) && (i == 3)) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, magicArrowEffectsR[pauseCtx->equipTargetItem - 0xBF],
magicArrowEffectsG[pauseCtx->equipTargetItem - 0xBF],

View file

@ -9,8 +9,19 @@ extern s16 D_8082AAEC_width_MAP_PAGE_VTX_NOT_IN_DUNGEON_SCENE_[];
extern s16 D_8082AB2C_height_MAP_PAGE_VTX_NOT_IN_DUNGEON_SCENE_[];
extern u8 gSlotAgeReqs[];
extern u8 gEquipAgeReqs[EQUIP_TYPE_MAX][4];
extern u8 gItemAgeReqs[];
extern u8 gAreaGsFlags[];
#define AGE_REQ_ADULT LINK_AGE_ADULT
#define AGE_REQ_CHILD LINK_AGE_CHILD
#define AGE_REQ_NONE 9
#define CHECK_AGE_REQ_SLOT(slot) \
((gSlotAgeReqs[slot] == AGE_REQ_NONE) || gSlotAgeReqs[slot] == ((void)0, gSaveContext.linkAge))
#define CHECK_AGE_REQ_EQUIP(y, x) \
((gEquipAgeReqs[y][x] == 9) || (gEquipAgeReqs[y][x] == ((void)0, gSaveContext.linkAge)))
#define CHECK_AGE_REQ_ITEM(item) ((gItemAgeReqs[item] == 9) || (gItemAgeReqs[item] == ((void)0, gSaveContext.linkAge)))
void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx);
s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s32 point);
void KaleidoScope_DrawDebugEditor(PlayState* play);

View file

@ -136,13 +136,32 @@ s16 D_8082AB2C_height_MAP_PAGE_VTX_NOT_IN_DUNGEON_SCENE_[] = {
};
// TODO may not be indexed by `PAUSE_`
static u8 D_8082AB6C[][5] = {
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED }, // PAUSE_ITEM
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED }, // PAUSE_MAP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, // PAUSE_QUEST
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED }, // PAUSE_EQUIP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED }, // PAUSE_WORLD_MAP
static u8 D_8082AB6C_buttonStatusNext_[][5] = {
// PAUSE_ITEM + SWITCH_PAGE_LEFT_PT
//
// -> PAUSE_EQUIP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
// PAUSE_MAP + SWITCH_PAGE_LEFT_PT
//
// -> PAUSE_ITEM
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED },
// PAUSE_QUEST + SWITCH_PAGE_LEFT_PT
// PAUSE_ITEM + SWITCH_PAGE_RIGHT_PT
// -> PAUSE_MAP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED },
// PAUSE_EQUIP + SWITCH_PAGE_LEFT_PT
// PAUSE_MAP + SWITCH_PAGE_RIGHT_PT
// -> PAUSE_QUEST
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
//
// PAUSE_QUEST + SWITCH_PAGE_RIGHT_PT
// -> PAUSE_EQUIP
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
//
// PAUSE_EQUIP + SWITCH_PAGE_RIGHT_PT
// -> PAUSE_ITEM
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED },
};
static s16 sColor82ABRed_D_8082AB8C = 0;
@ -156,55 +175,181 @@ static s16 sDrawGameOverEnvColorBlue_D_8082ABA4 = 0;
static s16 sInDungeonScene = false;
// "pt" from debug string in KaleidoScope_SwitchPage
static f32 D_8082ABAC_pageSwitch_eye_dx_[] = {
-4.0f, // PAUSE_ITEM pt=0
4.0f, // PAUSE_ITEM pt=1
4.0f, // PAUSE_MAP pt=0
4.0f, // PAUSE_MAP pt=1
4.0f, // PAUSE_QUEST pt=0
-4.0f, // PAUSE_QUEST pt=1
-4.0f, // PAUSE_EQUIP pt=0
-4.0f, // PAUSE_EQUIP pt=1
static f32 sPageSwitchEyeDx[] = {
-PAUSE_EYE_DIST * (PAUSE_MAP_X - PAUSE_ITEM_X) / 16, // PAUSE_ITEM right
-PAUSE_EYE_DIST*(PAUSE_EQUIP_X - PAUSE_ITEM_X) / 16, // PAUSE_ITEM left
-PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_MAP_X) / 16, // PAUSE_MAP right
-PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_MAP_X) / 16, // PAUSE_MAP left
-PAUSE_EYE_DIST*(PAUSE_EQUIP_X - PAUSE_QUEST_X) / 16, // PAUSE_QUEST right
-PAUSE_EYE_DIST*(PAUSE_MAP_X - PAUSE_QUEST_X) / 16, // PAUSE_QUEST left
-PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_EQUIP_X) / 16, // PAUSE_EQUIP right
-PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_EQUIP_X) / 16, // PAUSE_EQUIP left
};
static f32 D_8082ABCC_pageSwitch_eye_dz_[] = {
-4.0f, // PAUSE_ITEM pt=0
-4.0f, // PAUSE_ITEM pt=1
-4.0f, // PAUSE_MAP pt=0
4.0f, // PAUSE_MAP pt=1
4.0f, // PAUSE_QUEST pt=0
4.0f, // PAUSE_QUEST pt=1
4.0f, // PAUSE_EQUIP pt=0
-4.0f, // PAUSE_EQUIP pt=1
static f32 sPageSwitchEyeDz[] = {
-PAUSE_EYE_DIST * (PAUSE_MAP_Z - PAUSE_ITEM_Z) / 16, // PAUSE_ITEM right
-PAUSE_EYE_DIST*(PAUSE_EQUIP_Z - PAUSE_ITEM_Z) / 16, // PAUSE_ITEM left
-PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_MAP_Z) / 16, // PAUSE_MAP right
-PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_MAP_Z) / 16, // PAUSE_MAP left
-PAUSE_EYE_DIST*(PAUSE_EQUIP_Z - PAUSE_QUEST_Z) / 16, // PAUSE_QUEST right
-PAUSE_EYE_DIST*(PAUSE_MAP_Z - PAUSE_QUEST_Z) / 16, // PAUSE_QUEST left
-PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_EQUIP_Z) / 16, // PAUSE_EQUIP right
-PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_EQUIP_Z) / 16, // PAUSE_EQUIP left
};
static u16 D_8082ABEC_modeToNewPageIndex_[] = {
PAUSE_MAP, // PAUSE_ITEM pt=0
PAUSE_EQUIP, // PAUSE_ITEM pt=1
PAUSE_QUEST, // PAUSE_MAP pt=0
PAUSE_ITEM, // PAUSE_MAP pt=1
PAUSE_EQUIP, // PAUSE_QUEST pt=0
PAUSE_MAP, // PAUSE_QUEST pt=1
PAUSE_ITEM, // PAUSE_EQUIP pt=0
PAUSE_QUEST, // PAUSE_EQUIP pt=1
static u16 sPageSwitchNextPageIndex[] = {
PAUSE_MAP, // PAUSE_ITEM right
PAUSE_EQUIP, // PAUSE_ITEM left
PAUSE_QUEST, // PAUSE_MAP right
PAUSE_ITEM, // PAUSE_MAP left
PAUSE_EQUIP, // PAUSE_QUEST right
PAUSE_MAP, // PAUSE_QUEST left
PAUSE_ITEM, // PAUSE_EQUIP right
PAUSE_QUEST, // PAUSE_EQUIP left
};
u8 gSlotAgeReqs[] = {
1, 9, 9, 0, 0, 9, 1, 9, 9, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 0, 1,
AGE_REQ_CHILD, // SLOT_STICK
AGE_REQ_NONE, // SLOT_NUT
AGE_REQ_NONE, // SLOT_BOMB
AGE_REQ_ADULT, // SLOT_BOW
AGE_REQ_ADULT, // SLOT_ARROW_FIRE
AGE_REQ_NONE, // SLOT_DINS_FIRE
AGE_REQ_CHILD, // SLOT_SLINGSHOT
AGE_REQ_NONE, // SLOT_OCARINA
AGE_REQ_NONE, // SLOT_BOMBCHU
AGE_REQ_ADULT, // SLOT_HOOKSHOT
AGE_REQ_ADULT, // SLOT_ARROW_ICE
AGE_REQ_NONE, // SLOT_FARORES_WIND
AGE_REQ_CHILD, // SLOT_BOOMERANG
AGE_REQ_NONE, // SLOT_LENS
AGE_REQ_CHILD, // SLOT_BEAN
AGE_REQ_ADULT, // SLOT_HAMMER
AGE_REQ_ADULT, // SLOT_ARROW_LIGHT
AGE_REQ_NONE, // SLOT_NAYRUS_LOVE
AGE_REQ_NONE, // SLOT_BOTTLE_1
AGE_REQ_NONE, // SLOT_BOTTLE_2
AGE_REQ_NONE, // SLOT_BOTTLE_3
AGE_REQ_NONE, // SLOT_BOTTLE_4
AGE_REQ_ADULT, // SLOT_TRADE_ADULT
AGE_REQ_CHILD, // SLOT_TRADE_CHILD
};
// Not sure EQUIP_TYPE_MAX is really EQUIP_TYPE_MAX
u8 gEquipAgeReqs[EQUIP_TYPE_MAX][4] = {
{ 0, 1, 0, 0 },
{ 9, 1, 9, 0 },
{ 0, 9, 0, 0 },
{ 9, 9, 0, 0 },
{
AGE_REQ_ADULT,
AGE_REQ_CHILD,
AGE_REQ_ADULT,
AGE_REQ_ADULT,
}, // EQUIP_TYPE_SWORD
{
AGE_REQ_NONE,
AGE_REQ_CHILD,
AGE_REQ_NONE,
AGE_REQ_ADULT,
}, // EQUIP_TYPE_SHIELD
{
AGE_REQ_ADULT,
AGE_REQ_NONE,
AGE_REQ_ADULT,
AGE_REQ_ADULT,
}, // EQUIP_TYPE_TUNIC
{
AGE_REQ_NONE,
AGE_REQ_NONE,
AGE_REQ_ADULT,
AGE_REQ_ADULT,
}, // EQUIP_TYPE_BOOTS
};
u8 gItemAgeReqs[] = {
1, 9, 9, 0, 0, 9, 1, 9, 9, 9, 0, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 1, 9, 0, 9, 0, 0, 9, 0, 0, 1, 1, 1, 0, 0, 0, 9, 9, 9, 1, 0, 0, 9, 9, 0,
AGE_REQ_CHILD, // ITEM_STICK
AGE_REQ_NONE, // ITEM_NUT
AGE_REQ_NONE, // ITEM_BOMB
AGE_REQ_ADULT, // ITEM_BOW
AGE_REQ_ADULT, // ITEM_ARROW_FIRE
AGE_REQ_NONE, // ITEM_DINS_FIRE
AGE_REQ_CHILD, // ITEM_SLINGSHOT
AGE_REQ_NONE, // ITEM_OCARINA_FAIRY
AGE_REQ_NONE, // ITEM_OCARINA_TIME
AGE_REQ_NONE, // ITEM_BOMBCHU
AGE_REQ_ADULT, // ITEM_HOOKSHOT
AGE_REQ_ADULT, // ITEM_LONGSHOT
AGE_REQ_ADULT, // ITEM_ARROW_ICE
AGE_REQ_NONE, // ITEM_FARORES_WIND
AGE_REQ_CHILD, // ITEM_BOOMERANG
AGE_REQ_NONE, // ITEM_LENS
AGE_REQ_CHILD, // ITEM_BEAN
AGE_REQ_ADULT, // ITEM_HAMMER
AGE_REQ_ADULT, // ITEM_ARROW_LIGHT
AGE_REQ_NONE, // ITEM_NAYRUS_LOVE
AGE_REQ_NONE, // ITEM_BOTTLE
AGE_REQ_NONE, // ITEM_POTION_RED
AGE_REQ_NONE, // ITEM_POTION_GREEN
AGE_REQ_NONE, // ITEM_POTION_BLUE
AGE_REQ_NONE, // ITEM_FAIRY
AGE_REQ_NONE, // ITEM_FISH
AGE_REQ_NONE, // ITEM_MILK_BOTTLE
AGE_REQ_NONE, // ITEM_LETTER_RUTO
AGE_REQ_NONE, // ITEM_BLUE_FIRE
AGE_REQ_NONE, // ITEM_BUG
AGE_REQ_NONE, // ITEM_BIG_POE
AGE_REQ_NONE, // ITEM_MILK_HALF
AGE_REQ_NONE, // ITEM_POE
AGE_REQ_CHILD, // ITEM_WEIRD_EGG
AGE_REQ_CHILD, // ITEM_CHICKEN
AGE_REQ_CHILD, // ITEM_LETTER_ZELDA
AGE_REQ_CHILD, // ITEM_MASK_KEATON
AGE_REQ_CHILD, // ITEM_MASK_SKULL
AGE_REQ_CHILD, // ITEM_MASK_SPOOKY
AGE_REQ_CHILD, // ITEM_MASK_BUNNY
AGE_REQ_CHILD, // ITEM_MASK_GORON
AGE_REQ_CHILD, // ITEM_MASK_ZORA
AGE_REQ_CHILD, // ITEM_MASK_GERUDO
AGE_REQ_CHILD, // ITEM_MASK_TRUTH
AGE_REQ_CHILD, // ITEM_SOLD_OUT
AGE_REQ_ADULT, // ITEM_POCKET_EGG
AGE_REQ_ADULT, // ITEM_POCKET_CUCCO
AGE_REQ_ADULT, // ITEM_COJIRO
AGE_REQ_ADULT, // ITEM_ODD_MUSHROOM
AGE_REQ_ADULT, // ITEM_ODD_POTION
AGE_REQ_ADULT, // ITEM_SAW
AGE_REQ_ADULT, // ITEM_SWORD_BROKEN
AGE_REQ_ADULT, // ITEM_PRESCRIPTION
AGE_REQ_ADULT, // ITEM_FROG
AGE_REQ_ADULT, // ITEM_EYEDROPS
AGE_REQ_ADULT, // ITEM_CLAIM_CHECK
AGE_REQ_ADULT, // ITEM_BOW_ARROW_FIRE
AGE_REQ_ADULT, // ITEM_BOW_ARROW_ICE
AGE_REQ_ADULT, // ITEM_BOW_ARROW_LIGHT
AGE_REQ_CHILD, // ITEM_SWORD_KOKIRI
AGE_REQ_ADULT, // ITEM_SWORD_MASTER
AGE_REQ_ADULT, // ITEM_SWORD_BGS
AGE_REQ_CHILD, // ITEM_SHIELD_DEKU
AGE_REQ_NONE, // ITEM_SHIELD_HYLIAN
AGE_REQ_ADULT, // ITEM_SHIELD_MIRROR
AGE_REQ_NONE, // ITEM_TUNIC_KOKIRI
AGE_REQ_ADULT, // ITEM_TUNIC_GORON
AGE_REQ_ADULT, // ITEM_TUNIC_ZORA
AGE_REQ_NONE, // ITEM_BOOTS_KOKIRI
AGE_REQ_ADULT, // ITEM_BOOTS_IRON
AGE_REQ_ADULT, // ITEM_BOOTS_HOVER
AGE_REQ_CHILD, // ITEM_BULLET_BAG_30
AGE_REQ_CHILD, // ITEM_BULLET_BAG_40
AGE_REQ_CHILD, // ITEM_BULLET_BAG_50
AGE_REQ_ADULT, // ITEM_QUIVER_30
AGE_REQ_ADULT, // ITEM_QUIVER_40
AGE_REQ_ADULT, // ITEM_QUIVER_50
AGE_REQ_NONE, // ITEM_BOMB_BAG_20
AGE_REQ_NONE, // ITEM_BOMB_BAG_30
AGE_REQ_NONE, // ITEM_BOMB_BAG_40
AGE_REQ_CHILD, // ITEM_BRACELET
AGE_REQ_ADULT, // ITEM_GAUNTLETS_SILVER
AGE_REQ_ADULT, // ITEM_GAUNTLETS_GOLD
AGE_REQ_NONE, // ITEM_SCALE_SILVER
AGE_REQ_NONE, // ITEM_SCALE_GOLDEN
AGE_REQ_ADULT, // ITEM_SWORD_KNIFE
};
u8 gAreaGsFlags[] = {
@ -387,26 +532,29 @@ void KaleidoScope_SetDefaultCursor(PlayState* play) {
}
}
#define SWITCH_PAGE_LEFT_PT 0
#define SWITCH_PAGE_RIGHT_PT 2
void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 pt) {
pauseCtx->mainSubState = PAUSE_MAIN_STATE_SWITCHING_PAGE;
pauseCtx->switchPageTimer = 0;
if (!pt) { // pt == 0, scroll left
pauseCtx->mode = pauseCtx->pageIndex * 2 + 1;
if (!pt) { // SWITCH_PAGE_LEFT_PT
pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1;
Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_LEFT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT;
} else { // pt == 2, scroll right
pauseCtx->mode = pauseCtx->pageIndex * 2;
} else { // SWITCH_PAGE_RIGHT_PT
pauseCtx->nextPageMode = pauseCtx->pageIndex * 2;
Audio_PlaySfxGeneral(NA_SE_SY_WIN_SCROLL_RIGHT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT;
}
gSaveContext.buttonStatus[1] = D_8082AB6C[pauseCtx->pageIndex + pt][1];
gSaveContext.buttonStatus[2] = D_8082AB6C[pauseCtx->pageIndex + pt][2];
gSaveContext.buttonStatus[3] = D_8082AB6C[pauseCtx->pageIndex + pt][3];
gSaveContext.buttonStatus[4] = D_8082AB6C[pauseCtx->pageIndex + pt][4];
gSaveContext.buttonStatus[1] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + pt][1];
gSaveContext.buttonStatus[2] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + pt][2];
gSaveContext.buttonStatus[3] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + pt][3];
gSaveContext.buttonStatus[4] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + pt][4];
osSyncPrintf("kscope->kscp_pos+pt = %d\n", pauseCtx->pageIndex + pt);
@ -421,12 +569,12 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) {
}
if (CHECK_BTN_ALL(input->press.button, BTN_R)) {
KaleidoScope_SwitchPage(pauseCtx, 2);
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT_PT);
return;
}
if (CHECK_BTN_ALL(input->press.button, BTN_Z)) {
KaleidoScope_SwitchPage(pauseCtx, 0);
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT_PT);
return;
}
@ -434,7 +582,7 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) {
if (pauseCtx->stickAdjX < -30) {
pauseCtx->pageSwitchInputTimer++;
if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) {
KaleidoScope_SwitchPage(pauseCtx, 0);
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT_PT);
}
} else {
pauseCtx->pageSwitchInputTimer = -1;
@ -443,7 +591,7 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) {
if (pauseCtx->stickAdjX > 30) {
pauseCtx->pageSwitchInputTimer++;
if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) {
KaleidoScope_SwitchPage(pauseCtx, 2);
KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT_PT);
}
} else {
pauseCtx->pageSwitchInputTimer = -1;
@ -1530,16 +1678,16 @@ void KaleidoScope_UpdateNamePanel(PlayState* play) {
void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) {
PauseContext* pauseCtx = &play->pauseCtx;
s32 frameAdvanceFreeze = false;
s32 mode;
s32 nextPageMode;
if (R_PAUSE_SWITCH_PAGE_FRAME_ADVANCE_ON && !CHECK_BTN_ALL(input->press.button, BTN_L)) {
frameAdvanceFreeze = true;
}
if (!frameAdvanceFreeze) {
mode = pauseCtx->mode;
pauseCtx->eye.x += D_8082ABAC_pageSwitch_eye_dx_[mode];
pauseCtx->eye.z += D_8082ABCC_pageSwitch_eye_dz_[mode];
nextPageMode = pauseCtx->nextPageMode;
pauseCtx->eye.x += sPageSwitchEyeDx[nextPageMode];
pauseCtx->eye.z += sPageSwitchEyeDz[nextPageMode];
if (pauseCtx->switchPageTimer < 32) {
R_PAUSE_CURSOR_LEFT_X -= R_PAUSE_CURSOR_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
@ -1551,9 +1699,9 @@ void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) {
pauseCtx->switchPageTimer += 4;
if (pauseCtx->switchPageTimer == 64) {
if (pauseCtx->switchPageTimer == (4 * 16)) {
pauseCtx->switchPageTimer = 0;
pauseCtx->pageIndex = D_8082ABEC_modeToNewPageIndex_[pauseCtx->mode];
pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
}
}
@ -2509,8 +2657,8 @@ void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount) {
void KaleidoScope_UpdateOpening(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
pauseCtx->eye.x += D_8082ABAC_pageSwitch_eye_dx_[pauseCtx->mode] * ZREG(46);
pauseCtx->eye.z += D_8082ABCC_pageSwitch_eye_dz_[pauseCtx->mode] * ZREG(46);
pauseCtx->eye.x += sPageSwitchEyeDx[pauseCtx->nextPageMode] * ZREG(46);
pauseCtx->eye.z += sPageSwitchEyeDz[pauseCtx->nextPageMode] * ZREG(46);
pauseCtx->switchPageTimer += 4 * ZREG(46);
if (pauseCtx->switchPageTimer == (4 * 16 * ZREG(47))) {
@ -2518,22 +2666,23 @@ void KaleidoScope_UpdateOpening(PlayState* play) {
func_80084BF4(play, 1);
gSaveContext.buttonStatus[0] = D_8082AB6C[pauseCtx->pageIndex][0];
gSaveContext.buttonStatus[1] = D_8082AB6C[pauseCtx->pageIndex][1];
gSaveContext.buttonStatus[2] = D_8082AB6C[pauseCtx->pageIndex][2];
gSaveContext.buttonStatus[3] = D_8082AB6C[pauseCtx->pageIndex][3];
gSaveContext.buttonStatus[4] = D_8082AB6C[pauseCtx->pageIndex][4];
gSaveContext.buttonStatus[0] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + SWITCH_PAGE_LEFT_PT][0];
gSaveContext.buttonStatus[1] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + SWITCH_PAGE_LEFT_PT][1];
gSaveContext.buttonStatus[2] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + SWITCH_PAGE_LEFT_PT][2];
gSaveContext.buttonStatus[3] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + SWITCH_PAGE_LEFT_PT][3];
gSaveContext.buttonStatus[4] = D_8082AB6C_buttonStatusNext_[pauseCtx->pageIndex + SWITCH_PAGE_LEFT_PT][4];
pauseCtx->pageIndex = D_8082ABEC_modeToNewPageIndex_[pauseCtx->mode];
pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->state++; // PAUSE_STATE_MAIN
pauseCtx->alpha = 255;
Interface_LoadActionLabelB(play, DO_ACTION_SAVE);
} else if (pauseCtx->switchPageTimer == 64) {
pauseCtx->pageIndex = D_8082ABEC_modeToNewPageIndex_[pauseCtx->mode];
pauseCtx->mode = (u16)(pauseCtx->pageIndex * 2) + 1;
} else if (pauseCtx->switchPageTimer == (4 * 16 * 1)) {
// `ZREG(47)` is always 1 so this normally never happens
pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
pauseCtx->nextPageMode = (u16)(pauseCtx->pageIndex * 2) + 1;
}
}
@ -2744,7 +2893,7 @@ void KaleidoScope_Update(PlayState* play) {
gSegments[8] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment);
for (i = 0; i < ARRAY_COUNTU(gItemAgeReqs); i++) {
if ((gItemAgeReqs[i] != 9) && (gItemAgeReqs[i] != ((void)0, gSaveContext.linkAge))) {
if (!CHECK_AGE_REQ_ITEM(i)) {
KaleidoScope_GrayOutTextureRGBA32(SEGMENTED_TO_VIRTUAL(gItemIcons[i]), 0x400);
}
}
@ -3126,7 +3275,7 @@ void KaleidoScope_Update(PlayState* play) {
R_PAUSE_OFFSET_VERTICAL = -6240;
func_800F64E0(0);
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
pauseCtx->mode = 0;
pauseCtx->nextPageMode = 0;
pauseCtx->promptChoice = 0;
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -3174,7 +3323,7 @@ void KaleidoScope_Update(PlayState* play) {
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->mode = 0;
pauseCtx->nextPageMode = 0;
pauseCtx->promptChoice = 0;
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -3230,7 +3379,7 @@ void KaleidoScope_Update(PlayState* play) {
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
pauseCtx->mainSubState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->mode = 0;
pauseCtx->nextPageMode = 0;
pauseCtx->promptChoice = 0;
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);