1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-12 03:53:47 +00:00

Pause doc: Prompt page and save prompt state (#2170)

* Pause doc: Prompt page and save prompt state

* bss

* `QUAD_PROMPT_` -> `PROMPT_QUAD_`

* `QUAD_MAP_WORLD_`, `QUAD_MAP_` -> `WORLD_MAP_QUAD_`

* `PAUSE_QUAD_CURSOR_` -> `PAUSE_CURSOR_QUAD_`

* `PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU_ALT` -> `_2`

* bss

* bss

* add comments to help clarify save prompt vs prompt
This commit is contained in:
Dragorn421 2024-09-11 18:58:33 +02:00 committed by GitHub
parent d9af701b88
commit 64570e871f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 308 additions and 255 deletions

View file

@ -226,6 +226,10 @@
#define R_TEXT_ADJUST_COLOR_2_B VREG(38) #define R_TEXT_ADJUST_COLOR_2_B VREG(38)
#define R_OCARINA_BUTTONS_YPOS(note) VREG(45 + (note)) #define R_OCARINA_BUTTONS_YPOS(note) VREG(45 + (note))
#define R_OCARINA_BUTTONS_YPOS_OFFSET VREG(51) #define R_OCARINA_BUTTONS_YPOS_OFFSET VREG(51)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER_BASE VREG(60)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA VREG(61)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE VREG(62)
#define R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER VREG(63)
#define R_ITEM_AMMO_X(i) VREG(64 + (i)) #define R_ITEM_AMMO_X(i) VREG(64 + (i))
#define R_ITEM_AMMO_Y(i) VREG(68 + (i)) #define R_ITEM_AMMO_Y(i) VREG(68 + (i))
#define R_ITEM_ICON_WIDTH(i) VREG(76 + (i)) #define R_ITEM_ICON_WIDTH(i) VREG(76 + (i))

View file

@ -97,13 +97,24 @@ typedef enum PauseMainState {
/* 9 */ PAUSE_MAIN_STATE_9 /* 9 */ PAUSE_MAIN_STATE_9
} PauseMainState; } PauseMainState;
// Sub-states of PAUSE_STATE_SAVE_PROMPT
typedef enum PauseSavePromptState {
/* 0 */ PAUSE_SAVE_PROMPT_STATE_APPEARING,
/* 1 */ PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE,
/* 2 */ PAUSE_SAVE_PROMPT_STATE_CLOSING,
/* 3 */ PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU,
/* 4 */ PAUSE_SAVE_PROMPT_STATE_SAVED,
/* 5 */ PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED,
/* 6 */ PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU_2 // unused
} PauseSavePromptState;
typedef enum PauseCursorQuad { typedef enum PauseCursorQuad {
/* 0 */ PAUSE_QUAD_CURSOR_TL, /* 0 */ PAUSE_CURSOR_QUAD_TL,
/* 1 */ PAUSE_QUAD_CURSOR_TR, /* 1 */ PAUSE_CURSOR_QUAD_TR,
/* 2 */ PAUSE_QUAD_CURSOR_BL, /* 2 */ PAUSE_CURSOR_QUAD_BL,
/* 3 */ PAUSE_QUAD_CURSOR_BR, /* 3 */ PAUSE_CURSOR_QUAD_BR,
/* 4 */ PAUSE_QUAD_CURSOR_4, /* 4 */ PAUSE_CURSOR_QUAD_4,
/* 5 */ PAUSE_QUAD_CURSOR_MAX /* 5 */ PAUSE_CURSOR_QUAD_MAX
} PauseCursorQuad; } PauseCursorQuad;
typedef enum WorldMapPoint { typedef enum WorldMapPoint {
@ -149,7 +160,7 @@ typedef struct PauseContext {
/* 0x0160 */ char unk_160[0x04]; /* 0x0160 */ char unk_160[0x04];
/* 0x0164 */ Vtx* questVtx; /* 0x0164 */ Vtx* questVtx;
/* 0x0168 */ Vtx* cursorVtx; /* 0x0168 */ Vtx* cursorVtx;
/* 0x016C */ Vtx* saveVtx; /* 0x016C */ Vtx* promptPageVtx; // Used by both the pause menu save prompt and the gameover prompt
/* 0x0170 */ char unk_170[0x24]; /* 0x0170 */ char unk_170[0x24];
/* 0x0194 */ struct OcarinaStaff* ocarinaStaff; /* 0x0194 */ struct OcarinaStaff* ocarinaStaff;
/* 0x0198 */ char unk_198[0x20]; /* 0x0198 */ char unk_198[0x20];
@ -162,7 +173,7 @@ typedef struct PauseContext {
/* 0x01E6 */ u16 nextPageMode; // During a page switch, indicates the page before switching and the direction to scroll in. Value is `(2 * prev pageIndex) + (scroll left ? 1 : 0)` /* 0x01E6 */ u16 nextPageMode; // During a page switch, indicates the page before switching and the direction to scroll in. Value is `(2 * prev pageIndex) + (scroll left ? 1 : 0)`
/* 0x01E8 */ u16 pageIndex; // "kscp_pos" /* 0x01E8 */ u16 pageIndex; // "kscp_pos"
/* 0x01EA */ u16 pageSwitchTimer; /* 0x01EA */ u16 pageSwitchTimer;
/* 0x01EC */ u16 unk_1EC; /* 0x01EC */ u16 savePromptState;
/* 0x01F0 */ f32 unk_1F0; /* 0x01F0 */ f32 unk_1F0;
/* 0x01F4 */ f32 unk_1F4; /* 0x01F4 */ f32 unk_1F4;
/* 0x01F8 */ f32 unk_1F8; /* 0x01F8 */ f32 unk_1F8;

View file

@ -42,7 +42,7 @@
*/ */
#if PLATFORM_GC #if PLATFORM_GC
#pragma increment_block_number "gc-eu:208 gc-eu-mq:208 gc-eu-mq-dbg:208 gc-jp:208 gc-jp-ce:208 gc-jp-mq:208 gc-us:208" \ #pragma increment_block_number "gc-eu:208 gc-eu-mq:208 gc-eu-mq-dbg:192 gc-jp:208 gc-jp-ce:208 gc-jp-mq:208 gc-us:208" \
"gc-us-mq:208" "gc-us-mq:208"
#include "global.h" #include "global.h"

View file

@ -647,10 +647,10 @@ void Regs_InitDataImpl(void) {
VREG(57) = 255; VREG(57) = 255;
VREG(58) = 255; VREG(58) = 255;
VREG(59) = 255; VREG(59) = 255;
VREG(60) = 20; R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER_BASE = 20;
VREG(61) = 100; R_KALEIDO_PROMPT_CURSOR_ALPHA = 100;
VREG(62) = 0; R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE = 0;
VREG(63) = 10; R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER = 10;
R_ITEM_AMMO_X(1) = C_LEFT_BUTTON_X + 1; R_ITEM_AMMO_X(1) = C_LEFT_BUTTON_X + 1;
R_ITEM_AMMO_X(2) = C_DOWN_BUTTON_X + 1; R_ITEM_AMMO_X(2) = C_DOWN_BUTTON_X + 1;
R_ITEM_AMMO_X(3) = C_RIGHT_BUTTON_X + 1; R_ITEM_AMMO_X(3) = C_RIGHT_BUTTON_X + 1;

View file

@ -66,7 +66,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP; R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP;
pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->unk_1EC = 0; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; // PAUSE_STATE_WAIT_BG_PRERENDER pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; // PAUSE_STATE_WAIT_BG_PRERENDER
} }
} else if (pauseCtx->state == PAUSE_STATE_8) { } else if (pauseCtx->state == PAUSE_STATE_8) {
@ -77,7 +77,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP; R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP;
pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
pauseCtx->unk_1EC = 0; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; // PAUSE_STATE_9 pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; // PAUSE_STATE_9
} else if ((pauseCtx->state == PAUSE_STATE_WAIT_BG_PRERENDER) || (pauseCtx->state == PAUSE_STATE_9)) { } else if ((pauseCtx->state == PAUSE_STATE_WAIT_BG_PRERENDER) || (pauseCtx->state == PAUSE_STATE_9)) {
PRINTF("PR_KAREIDOSCOPE_MODE=%d\n", R_PAUSE_BG_PRERENDER_STATE); PRINTF("PR_KAREIDOSCOPE_MODE=%d\n", R_PAUSE_BG_PRERENDER_STATE);

View file

@ -3392,7 +3392,7 @@ void Interface_Draw(PlayState* play) {
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
gSPMatrix(OVERLAY_DISP++, &gMtxClear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPMatrix(OVERLAY_DISP++, &gMtxClear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
// PAUSE_QUAD_CURSOR_4 // PAUSE_CURSOR_QUAD_4
pauseCtx->cursorVtx[16].v.ob[0] = pauseCtx->cursorVtx[18].v.ob[0] = pauseCtx->equipAnimX / 10; pauseCtx->cursorVtx[16].v.ob[0] = pauseCtx->cursorVtx[18].v.ob[0] = pauseCtx->equipAnimX / 10;
pauseCtx->cursorVtx[17].v.ob[0] = pauseCtx->cursorVtx[19].v.ob[0] = pauseCtx->cursorVtx[17].v.ob[0] = pauseCtx->cursorVtx[19].v.ob[0] =
pauseCtx->cursorVtx[16].v.ob[0] + WREG(90) / 10; pauseCtx->cursorVtx[16].v.ob[0] + WREG(90) / 10;
@ -3403,7 +3403,7 @@ void Interface_Draw(PlayState* play) {
if (pauseCtx->equipTargetItem < 0xBF) { if (pauseCtx->equipTargetItem < 0xBF) {
// Normal Equip (icon goes from the inventory slot to the C button when equipping it) // Normal Equip (icon goes from the inventory slot to the C button when equipping it)
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->equipAnimAlpha); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->equipAnimAlpha);
gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[PAUSE_QUAD_CURSOR_4 * 4], 4, 0); gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[PAUSE_CURSOR_QUAD_4 * 4], 4, 0);
gDPLoadTextureBlock(OVERLAY_DISP++, gItemIcons[pauseCtx->equipTargetItem], G_IM_FMT_RGBA, G_IM_SIZ_32b, gDPLoadTextureBlock(OVERLAY_DISP++, gItemIcons[pauseCtx->equipTargetItem], G_IM_FMT_RGBA, G_IM_SIZ_32b,
ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, 0, G_TX_NOMIRROR | G_TX_WRAP, ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, 0, G_TX_NOMIRROR | G_TX_WRAP,
@ -3416,7 +3416,7 @@ void Interface_Draw(PlayState* play) {
if ((pauseCtx->equipAnimAlpha > 0) && (pauseCtx->equipAnimAlpha < 255)) { if ((pauseCtx->equipAnimAlpha > 0) && (pauseCtx->equipAnimAlpha < 255)) {
svar1 = (pauseCtx->equipAnimAlpha / 8) / 2; svar1 = (pauseCtx->equipAnimAlpha / 8) / 2;
// PAUSE_QUAD_CURSOR_4 // PAUSE_CURSOR_QUAD_4
pauseCtx->cursorVtx[16].v.ob[0] = pauseCtx->cursorVtx[18].v.ob[0] = pauseCtx->cursorVtx[16].v.ob[0] = pauseCtx->cursorVtx[18].v.ob[0] =
pauseCtx->cursorVtx[16].v.ob[0] - svar1; pauseCtx->cursorVtx[16].v.ob[0] - svar1;
pauseCtx->cursorVtx[17].v.ob[0] = pauseCtx->cursorVtx[19].v.ob[0] = pauseCtx->cursorVtx[17].v.ob[0] = pauseCtx->cursorVtx[19].v.ob[0] =
@ -3427,7 +3427,7 @@ void Interface_Draw(PlayState* play) {
pauseCtx->cursorVtx[16].v.ob[1] - svar1 * 2 - 32; pauseCtx->cursorVtx[16].v.ob[1] - svar1 * 2 - 32;
} }
gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[PAUSE_QUAD_CURSOR_4 * 4], 4, 0); gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[PAUSE_CURSOR_QUAD_4 * 4], 4, 0);
gDPLoadTextureBlock(OVERLAY_DISP++, gMagicArrowEquipEffectTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, gDPLoadTextureBlock(OVERLAY_DISP++, gMagicArrowEquipEffectTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD); G_TX_NOLOD, G_TX_NOLOD);

View file

@ -1395,7 +1395,7 @@ void func_80B3F3D8(void) {
Sfx_PlaySfxCentered2(NA_SE_PL_SKIP); Sfx_PlaySfxCentered2(NA_SE_PL_SKIP);
} }
#pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:128 gc-jp-ce:128 gc-jp-mq:64 gc-us:128 gc-us-mq:64" #pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64"
void EnXc_PlayDiveSFX(Vec3f* src, PlayState* play) { void EnXc_PlayDiveSFX(Vec3f* src, PlayState* play) {
static Vec3f D_80B42DA0; static Vec3f D_80B42DA0;

View file

@ -15,7 +15,7 @@
#include "cic6105.h" #include "cic6105.h"
#endif #endif
#pragma increment_block_number "gc-eu:136 gc-eu-mq:136 gc-jp:138 gc-jp-ce:138 gc-jp-mq:138 gc-us:138 gc-us-mq:138" #pragma increment_block_number "gc-eu:133 gc-eu-mq:133 gc-jp:135 gc-jp-ce:135 gc-jp-mq:135 gc-us:135 gc-us-mq:135"
#define FLAGS ACTOR_FLAG_4 #define FLAGS ACTOR_FLAG_4

View file

@ -358,40 +358,40 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) {
void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
static void* cloudTexs[] = { static void* cloudTexs[] = {
gWorldMapCloudSacredForestMeadowTex, // QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW gWorldMapCloudSacredForestMeadowTex, // WORLD_MAP_QUAD_CLOUDS_SACRED_FOREST_MEADOW
gWorldMapCloudHyruleFieldTex, // QUAD_MAP_WORLD_CLOUDS_HYRULE_FIELD gWorldMapCloudHyruleFieldTex, // WORLD_MAP_QUAD_CLOUDS_HYRULE_FIELD
gWorldMapCloudLonLonRanchTex, // QUAD_MAP_WORLD_CLOUDS_LON_LON_RANCH gWorldMapCloudLonLonRanchTex, // WORLD_MAP_QUAD_CLOUDS_LON_LON_RANCH
gWorldMapCloudMarketTex, // QUAD_MAP_WORLD_CLOUDS_MARKET gWorldMapCloudMarketTex, // WORLD_MAP_QUAD_CLOUDS_MARKET
gWorldMapCloudHyruleCastleTex, // QUAD_MAP_WORLD_CLOUDS_HYRULE_CASTLE gWorldMapCloudHyruleCastleTex, // WORLD_MAP_QUAD_CLOUDS_HYRULE_CASTLE
gWorldMapCloudKakarikoVillageTex, // QUAD_MAP_WORLD_CLOUDS_KAKARIKO_VILLAGE gWorldMapCloudKakarikoVillageTex, // WORLD_MAP_QUAD_CLOUDS_KAKARIKO_VILLAGE
gWorldMapCloudGraveyardTex, // QUAD_MAP_WORLD_CLOUDS_GRAVEYARD gWorldMapCloudGraveyardTex, // WORLD_MAP_QUAD_CLOUDS_GRAVEYARD
gWorldMapCloudDeathMountainTrailTex, // QUAD_MAP_WORLD_CLOUDS_DEATH_MOUNTAIN_TRAIL gWorldMapCloudDeathMountainTrailTex, // WORLD_MAP_QUAD_CLOUDS_DEATH_MOUNTAIN_TRAIL
gWorldMapCloudGoronCityTex, // QUAD_MAP_WORLD_CLOUDS_GORON_CITY gWorldMapCloudGoronCityTex, // WORLD_MAP_QUAD_CLOUDS_GORON_CITY
gWorldMapCloudZorasRiverTex, // QUAD_MAP_WORLD_CLOUDS_ZORAS_RIVER gWorldMapCloudZorasRiverTex, // WORLD_MAP_QUAD_CLOUDS_ZORAS_RIVER
gWorldMapCloudZorasDomainTex, // QUAD_MAP_WORLD_CLOUDS_ZORAS_DOMAIN gWorldMapCloudZorasDomainTex, // WORLD_MAP_QUAD_CLOUDS_ZORAS_DOMAIN
gWorldMapCloudZorasFountainTex, // QUAD_MAP_WORLD_CLOUDS_ZORAS_FOUNTAIN gWorldMapCloudZorasFountainTex, // WORLD_MAP_QUAD_CLOUDS_ZORAS_FOUNTAIN
gWorldMapCloudGerudoValleyTex, // QUAD_MAP_WORLD_CLOUDS_GERUDO_VALLEY gWorldMapCloudGerudoValleyTex, // WORLD_MAP_QUAD_CLOUDS_GERUDO_VALLEY
gWorldMapCloudGerudosFortressTex, // QUAD_MAP_WORLD_CLOUDS_GERUDOS_FORTRESS gWorldMapCloudGerudosFortressTex, // WORLD_MAP_QUAD_CLOUDS_GERUDOS_FORTRESS
gWorldMapCloudDesertColossusTex, // QUAD_MAP_WORLD_CLOUDS_DESERT_COLOSSUS gWorldMapCloudDesertColossusTex, // WORLD_MAP_QUAD_CLOUDS_DESERT_COLOSSUS
gWorldMapCloudLakeHyliaTex, // QUAD_MAP_WORLD_CLOUDS_LAKE_HYLIA gWorldMapCloudLakeHyliaTex, // WORLD_MAP_QUAD_CLOUDS_LAKE_HYLIA
}; };
static u16 cloudFlagNums[] = { static u16 cloudFlagNums[] = {
WORLD_MAP_AREA_SACRED_FOREST_MEADOW, // QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW WORLD_MAP_AREA_SACRED_FOREST_MEADOW, // WORLD_MAP_QUAD_CLOUDS_SACRED_FOREST_MEADOW
WORLD_MAP_AREA_HYRULE_FIELD, // QUAD_MAP_WORLD_CLOUDS_HYRULE_FIELD WORLD_MAP_AREA_HYRULE_FIELD, // WORLD_MAP_QUAD_CLOUDS_HYRULE_FIELD
WORLD_MAP_AREA_LON_LON_RANCH, // QUAD_MAP_WORLD_CLOUDS_LON_LON_RANCH WORLD_MAP_AREA_LON_LON_RANCH, // WORLD_MAP_QUAD_CLOUDS_LON_LON_RANCH
WORLD_MAP_AREA_MARKET, // QUAD_MAP_WORLD_CLOUDS_MARKET WORLD_MAP_AREA_MARKET, // WORLD_MAP_QUAD_CLOUDS_MARKET
WORLD_MAP_AREA_HYRULE_CASTLE, // QUAD_MAP_WORLD_CLOUDS_HYRULE_CASTLE WORLD_MAP_AREA_HYRULE_CASTLE, // WORLD_MAP_QUAD_CLOUDS_HYRULE_CASTLE
WORLD_MAP_AREA_KAKARIKO_VILLAGE, // QUAD_MAP_WORLD_CLOUDS_KAKARIKO_VILLAGE WORLD_MAP_AREA_KAKARIKO_VILLAGE, // WORLD_MAP_QUAD_CLOUDS_KAKARIKO_VILLAGE
WORLD_MAP_AREA_GRAVEYARD, // QUAD_MAP_WORLD_CLOUDS_GRAVEYARD WORLD_MAP_AREA_GRAVEYARD, // WORLD_MAP_QUAD_CLOUDS_GRAVEYARD
WORLD_MAP_AREA_DEATH_MOUNTAIN_TRAIL, // QUAD_MAP_WORLD_CLOUDS_DEATH_MOUNTAIN_TRAIL WORLD_MAP_AREA_DEATH_MOUNTAIN_TRAIL, // WORLD_MAP_QUAD_CLOUDS_DEATH_MOUNTAIN_TRAIL
WORLD_MAP_AREA_GORON_CITY, // QUAD_MAP_WORLD_CLOUDS_GORON_CITY WORLD_MAP_AREA_GORON_CITY, // WORLD_MAP_QUAD_CLOUDS_GORON_CITY
WORLD_MAP_AREA_ZORAS_RIVER, // QUAD_MAP_WORLD_CLOUDS_ZORAS_RIVER WORLD_MAP_AREA_ZORAS_RIVER, // WORLD_MAP_QUAD_CLOUDS_ZORAS_RIVER
WORLD_MAP_AREA_ZORAS_DOMAIN, // QUAD_MAP_WORLD_CLOUDS_ZORAS_DOMAIN WORLD_MAP_AREA_ZORAS_DOMAIN, // WORLD_MAP_QUAD_CLOUDS_ZORAS_DOMAIN
WORLD_MAP_AREA_ZORAS_FOUNTAIN, // QUAD_MAP_WORLD_CLOUDS_ZORAS_FOUNTAIN WORLD_MAP_AREA_ZORAS_FOUNTAIN, // WORLD_MAP_QUAD_CLOUDS_ZORAS_FOUNTAIN
WORLD_MAP_AREA_GERUDO_VALLEY, // QUAD_MAP_WORLD_CLOUDS_GERUDO_VALLEY WORLD_MAP_AREA_GERUDO_VALLEY, // WORLD_MAP_QUAD_CLOUDS_GERUDO_VALLEY
WORLD_MAP_AREA_GERUDOS_FORTRESS, // QUAD_MAP_WORLD_CLOUDS_GERUDOS_FORTRESS WORLD_MAP_AREA_GERUDOS_FORTRESS, // WORLD_MAP_QUAD_CLOUDS_GERUDOS_FORTRESS
WORLD_MAP_AREA_DESERT_COLOSSUS, // QUAD_MAP_WORLD_CLOUDS_DESERT_COLOSSUS WORLD_MAP_AREA_DESERT_COLOSSUS, // WORLD_MAP_QUAD_CLOUDS_DESERT_COLOSSUS
WORLD_MAP_AREA_LAKE_HYLIA, // QUAD_MAP_WORLD_CLOUDS_LAKE_HYLIA WORLD_MAP_AREA_LAKE_HYLIA, // WORLD_MAP_QUAD_CLOUDS_LAKE_HYLIA
}; };
static s16 pointPulsePrimColor[] = { 0, 0, 255 }; static s16 pointPulsePrimColor[] = { 0, 0, 255 };
static s16 pointPrimColors[][3] = { static s16 pointPrimColors[][3] = {
@ -577,7 +577,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorSlot[PAUSE_MAP] =
PAGE_BG_QUADS + QUAD_MAP_WORLD_POINT_FIRST + pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; PAGE_BG_QUADS + WORLD_MAP_QUAD_POINT_FIRST + pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx); KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx);
} else { } else {
pauseCtx->cursorItem[PAUSE_MAP] = gSaveContext.worldMapArea + 0x18; pauseCtx->cursorItem[PAUSE_MAP] = gSaveContext.worldMapArea + 0x18;
@ -593,7 +593,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorSlot[PAUSE_MAP] =
PAGE_BG_QUADS + QUAD_MAP_WORLD_POINT_FIRST + pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; PAGE_BG_QUADS + WORLD_MAP_QUAD_POINT_FIRST + pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx); KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx);
Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -611,7 +611,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorSlot[PAUSE_MAP] =
PAGE_BG_QUADS + QUAD_MAP_WORLD_POINT_FIRST + pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; PAGE_BG_QUADS + WORLD_MAP_QUAD_POINT_FIRST + pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx); KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx);
Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -754,7 +754,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);
gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT);
// Quad PAGE_BG_QUADS + QUAD_MAP_28 // Quad PAGE_BG_QUADS + WORLD_MAP_QUAD_28
pauseCtx->mapPageVtx[172].v.ob[0] = pauseCtx->mapPageVtx[174].v.ob[0] = pauseCtx->mapPageVtx[172].v.ob[0] = pauseCtx->mapPageVtx[174].v.ob[0] =
areaBoxPosX[((void)0, gSaveContext.worldMapArea)]; areaBoxPosX[((void)0, gSaveContext.worldMapArea)];
@ -862,7 +862,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetEnvColor(POLY_OPA_DISP++, pointPulseEnvColor[0], pointPulseEnvColor[1], pointPulseEnvColor[2], 0); gDPSetEnvColor(POLY_OPA_DISP++, pointPulseEnvColor[0], pointPulseEnvColor[1], pointPulseEnvColor[2], 0);
} }
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + QUAD_MAP_WORLD_POINT_FIRST + i) * 4], 4, gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_POINT_FIRST + i) * 4], 4,
0); 0);
gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
@ -873,7 +873,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
KaleidoScope_DrawCursor(play, PAUSE_MAP); KaleidoScope_DrawCursor(play, PAUSE_MAP);
} }
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + QUAD_MAP_TRADE_QUEST_MARKER) * 4], 16, 0); gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_TRADE_QUEST_MARKER) * 4], 16, 0);
if (pauseCtx->tradeQuestMarker != TRADE_QUEST_MARKER_NONE) { if (pauseCtx->tradeQuestMarker != TRADE_QUEST_MARKER_NONE) {
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);

View file

@ -1,6 +1,6 @@
#include "z_kaleido_scope.h" #include "z_kaleido_scope.h"
static s16 D_8082A6E0[] = { 100, 255 }; static s16 sKaleidoPromptCursorAlphaVals[] = { 100, 255 };
void KaleidoScope_UpdatePrompt(PlayState* play) { void KaleidoScope_UpdatePrompt(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx; PauseContext* pauseCtx = &play->pauseCtx;
@ -8,8 +8,10 @@ void KaleidoScope_UpdatePrompt(PlayState* play) {
s8 stickAdjX = input->rel.stick_x; s8 stickAdjX = input->rel.stick_x;
s16 step; s16 step;
if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) && (pauseCtx->unk_1EC == 1)) || if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) &&
(pauseCtx->savePromptState == PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE)) ||
(pauseCtx->state == PAUSE_STATE_14) || (pauseCtx->state == PAUSE_STATE_16)) { (pauseCtx->state == PAUSE_STATE_14) || (pauseCtx->state == PAUSE_STATE_16)) {
if ((pauseCtx->promptChoice == 0) && (stickAdjX >= 30)) { if ((pauseCtx->promptChoice == 0) && (stickAdjX >= 30)) {
Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -20,18 +22,20 @@ void KaleidoScope_UpdatePrompt(PlayState* play) {
pauseCtx->promptChoice = 0; pauseCtx->promptChoice = 0;
} }
step = ABS(VREG(61) - D_8082A6E0[VREG(62)]) / VREG(63); step = ABS(R_KALEIDO_PROMPT_CURSOR_ALPHA - sKaleidoPromptCursorAlphaVals[R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE]) /
if (VREG(61) >= D_8082A6E0[VREG(62)]) { R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER;
VREG(61) -= step; if (R_KALEIDO_PROMPT_CURSOR_ALPHA >= sKaleidoPromptCursorAlphaVals[R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE]) {
R_KALEIDO_PROMPT_CURSOR_ALPHA -= step;
} else { } else {
VREG(61) += step; R_KALEIDO_PROMPT_CURSOR_ALPHA += step;
} }
VREG(63)--; R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER--;
if (VREG(63) == 0) { if (R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER == 0) {
VREG(61) = D_8082A6E0[VREG(62)]; R_KALEIDO_PROMPT_CURSOR_ALPHA = sKaleidoPromptCursorAlphaVals[R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE];
VREG(63) = VREG(60) + VREG(62); R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER =
VREG(62) ^= 1; R_KALEIDO_PROMPT_CURSOR_ALPHA_TIMER_BASE + R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE;
R_KALEIDO_PROMPT_CURSOR_ALPHA_STATE ^= 1;
} }
} }
} }

View file

@ -16,13 +16,13 @@
#include "terminal.h" #include "terminal.h"
#if !PLATFORM_GC #if !PLATFORM_GC
#define KALEIDO_COLOR_PROMPT_UNK_R 100 #define KALEIDO_PROMPT_CURSOR_R 100
#define KALEIDO_COLOR_PROMPT_UNK_G 100 #define KALEIDO_PROMPT_CURSOR_G 100
#define KALEIDO_COLOR_PROMPT_UNK_B 255 #define KALEIDO_PROMPT_CURSOR_B 255
#else #else
#define KALEIDO_COLOR_PROMPT_UNK_R 100 #define KALEIDO_PROMPT_CURSOR_R 100
#define KALEIDO_COLOR_PROMPT_UNK_G 255 #define KALEIDO_PROMPT_CURSOR_G 255
#define KALEIDO_COLOR_PROMPT_UNK_B 100 #define KALEIDO_PROMPT_CURSOR_B 100
#endif #endif
#if !PLATFORM_GC #if !PLATFORM_GC
@ -49,7 +49,7 @@ typedef enum {
#define VTX_PAGE_MAP_DUNGEON_QUADS 17 // VTX_PAGE_MAP_DUNGEON #define VTX_PAGE_MAP_DUNGEON_QUADS 17 // VTX_PAGE_MAP_DUNGEON
#define VTX_PAGE_QUEST_QUADS 0 // VTX_PAGE_QUEST #define VTX_PAGE_QUEST_QUADS 0 // VTX_PAGE_QUEST
#define VTX_PAGE_MAP_WORLD_QUADS 32 // VTX_PAGE_MAP_WORLD #define VTX_PAGE_MAP_WORLD_QUADS 32 // VTX_PAGE_MAP_WORLD
#define VTX_PAGE_PROMPT_QUADS 5 // VTX_PAGE_PROMPT #define VTX_PAGE_PROMPT_QUADS PROMPT_QUAD_MAX // VTX_PAGE_PROMPT
#if OOT_NTSC #if OOT_NTSC
@ -551,22 +551,22 @@ static void* sSavePromptBgQuadsTexs[] = {
#endif #endif
s16 gVtxPageMapWorldQuadsWidth[VTX_PAGE_MAP_WORLD_QUADS] = { s16 gVtxPageMapWorldQuadsWidth[VTX_PAGE_MAP_WORLD_QUADS] = {
32, // QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW 32, // WORLD_MAP_QUAD_CLOUDS_SACRED_FOREST_MEADOW
112, // QUAD_MAP_WORLD_CLOUDS_HYRULE_FIELD 112, // WORLD_MAP_QUAD_CLOUDS_HYRULE_FIELD
32, // QUAD_MAP_WORLD_CLOUDS_LON_LON_RANCH 32, // WORLD_MAP_QUAD_CLOUDS_LON_LON_RANCH
48, // QUAD_MAP_WORLD_CLOUDS_MARKET 48, // WORLD_MAP_QUAD_CLOUDS_MARKET
32, // QUAD_MAP_WORLD_CLOUDS_HYRULE_CASTLE 32, // WORLD_MAP_QUAD_CLOUDS_HYRULE_CASTLE
32, // QUAD_MAP_WORLD_CLOUDS_KAKARIKO_VILLAGE 32, // WORLD_MAP_QUAD_CLOUDS_KAKARIKO_VILLAGE
32, // QUAD_MAP_WORLD_CLOUDS_GRAVEYARD 32, // WORLD_MAP_QUAD_CLOUDS_GRAVEYARD
48, // QUAD_MAP_WORLD_CLOUDS_DEATH_MOUNTAIN_TRAIL 48, // WORLD_MAP_QUAD_CLOUDS_DEATH_MOUNTAIN_TRAIL
32, // QUAD_MAP_WORLD_CLOUDS_GORON_CITY 32, // WORLD_MAP_QUAD_CLOUDS_GORON_CITY
64, // QUAD_MAP_WORLD_CLOUDS_ZORAS_RIVER 64, // WORLD_MAP_QUAD_CLOUDS_ZORAS_RIVER
32, // QUAD_MAP_WORLD_CLOUDS_ZORAS_DOMAIN 32, // WORLD_MAP_QUAD_CLOUDS_ZORAS_DOMAIN
48, // QUAD_MAP_WORLD_CLOUDS_ZORAS_FOUNTAIN 48, // WORLD_MAP_QUAD_CLOUDS_ZORAS_FOUNTAIN
48, // QUAD_MAP_WORLD_CLOUDS_GERUDO_VALLEY 48, // WORLD_MAP_QUAD_CLOUDS_GERUDO_VALLEY
48, // QUAD_MAP_WORLD_CLOUDS_GERUDOS_FORTRESS 48, // WORLD_MAP_QUAD_CLOUDS_GERUDOS_FORTRESS
48, // QUAD_MAP_WORLD_CLOUDS_DESERT_COLOSSUS 48, // WORLD_MAP_QUAD_CLOUDS_DESERT_COLOSSUS
64, // QUAD_MAP_WORLD_CLOUDS_LAKE_HYLIA 64, // WORLD_MAP_QUAD_CLOUDS_LAKE_HYLIA
8, // WORLD_MAP_POINT_HAUNTED_WASTELAND 8, // WORLD_MAP_POINT_HAUNTED_WASTELAND
8, // WORLD_MAP_POINT_GERUDOS_FORTRESS 8, // WORLD_MAP_POINT_GERUDOS_FORTRESS
8, // WORLD_MAP_POINT_GERUDO_VALLEY 8, // WORLD_MAP_POINT_GERUDO_VALLEY
@ -579,29 +579,29 @@ s16 gVtxPageMapWorldQuadsWidth[VTX_PAGE_MAP_WORLD_QUADS] = {
8, // WORLD_MAP_POINT_LOST_WOODS 8, // WORLD_MAP_POINT_LOST_WOODS
8, // WORLD_MAP_POINT_KOKIRI_FOREST 8, // WORLD_MAP_POINT_KOKIRI_FOREST
8, // WORLD_MAP_POINT_ZORAS_DOMAIN 8, // WORLD_MAP_POINT_ZORAS_DOMAIN
8, // QUAD_MAP_28 8, // WORLD_MAP_QUAD_28
8, // QUAD_MAP_TRADE_QUEST_MARKER 8, // WORLD_MAP_QUAD_TRADE_QUEST_MARKER
80, // QUAD_MAP_30 80, // WORLD_MAP_QUAD_30
64, // QUAD_MAP_31 64, // WORLD_MAP_QUAD_31
}; };
s16 gVtxPageMapWorldQuadsHeight[VTX_PAGE_MAP_WORLD_QUADS] = { s16 gVtxPageMapWorldQuadsHeight[VTX_PAGE_MAP_WORLD_QUADS] = {
24, // QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW 24, // WORLD_MAP_QUAD_CLOUDS_SACRED_FOREST_MEADOW
72, // QUAD_MAP_WORLD_CLOUDS_HYRULE_FIELD 72, // WORLD_MAP_QUAD_CLOUDS_HYRULE_FIELD
13, // QUAD_MAP_WORLD_CLOUDS_LON_LON_RANCH 13, // WORLD_MAP_QUAD_CLOUDS_LON_LON_RANCH
22, // QUAD_MAP_WORLD_CLOUDS_MARKET 22, // WORLD_MAP_QUAD_CLOUDS_MARKET
19, // QUAD_MAP_WORLD_CLOUDS_HYRULE_CASTLE 19, // WORLD_MAP_QUAD_CLOUDS_HYRULE_CASTLE
20, // QUAD_MAP_WORLD_CLOUDS_KAKARIKO_VILLAGE 20, // WORLD_MAP_QUAD_CLOUDS_KAKARIKO_VILLAGE
19, // QUAD_MAP_WORLD_CLOUDS_GRAVEYARD 19, // WORLD_MAP_QUAD_CLOUDS_GRAVEYARD
27, // QUAD_MAP_WORLD_CLOUDS_DEATH_MOUNTAIN_TRAIL 27, // WORLD_MAP_QUAD_CLOUDS_DEATH_MOUNTAIN_TRAIL
14, // QUAD_MAP_WORLD_CLOUDS_GORON_CITY 14, // WORLD_MAP_QUAD_CLOUDS_GORON_CITY
26, // QUAD_MAP_WORLD_CLOUDS_ZORAS_RIVER 26, // WORLD_MAP_QUAD_CLOUDS_ZORAS_RIVER
22, // QUAD_MAP_WORLD_CLOUDS_ZORAS_DOMAIN 22, // WORLD_MAP_QUAD_CLOUDS_ZORAS_DOMAIN
21, // QUAD_MAP_WORLD_CLOUDS_ZORAS_FOUNTAIN 21, // WORLD_MAP_QUAD_CLOUDS_ZORAS_FOUNTAIN
49, // QUAD_MAP_WORLD_CLOUDS_GERUDO_VALLEY 49, // WORLD_MAP_QUAD_CLOUDS_GERUDO_VALLEY
32, // QUAD_MAP_WORLD_CLOUDS_GERUDOS_FORTRESS 32, // WORLD_MAP_QUAD_CLOUDS_GERUDOS_FORTRESS
45, // QUAD_MAP_WORLD_CLOUDS_DESERT_COLOSSUS 45, // WORLD_MAP_QUAD_CLOUDS_DESERT_COLOSSUS
60, // QUAD_MAP_WORLD_CLOUDS_LAKE_HYLIA 60, // WORLD_MAP_QUAD_CLOUDS_LAKE_HYLIA
8, // WORLD_MAP_POINT_HAUNTED_WASTELAND 8, // WORLD_MAP_POINT_HAUNTED_WASTELAND
8, // WORLD_MAP_POINT_GERUDOS_FORTRESS 8, // WORLD_MAP_POINT_GERUDOS_FORTRESS
8, // WORLD_MAP_POINT_GERUDO_VALLEY 8, // WORLD_MAP_POINT_GERUDO_VALLEY
@ -614,10 +614,10 @@ s16 gVtxPageMapWorldQuadsHeight[VTX_PAGE_MAP_WORLD_QUADS] = {
8, // WORLD_MAP_POINT_LOST_WOODS 8, // WORLD_MAP_POINT_LOST_WOODS
8, // WORLD_MAP_POINT_KOKIRI_FOREST 8, // WORLD_MAP_POINT_KOKIRI_FOREST
8, // WORLD_MAP_POINT_ZORAS_DOMAIN 8, // WORLD_MAP_POINT_ZORAS_DOMAIN
8, // QUAD_MAP_28 8, // WORLD_MAP_QUAD_28
16, // QUAD_MAP_TRADE_QUEST_MARKER 16, // WORLD_MAP_QUAD_TRADE_QUEST_MARKER
32, // QUAD_MAP_30 32, // WORLD_MAP_QUAD_30
8, // QUAD_MAP_31 8, // WORLD_MAP_QUAD_31
}; };
/** /**
@ -867,10 +867,10 @@ u8 gAreaGsFlags[] = {
}; };
static void* sCursorTexs[] = { static void* sCursorTexs[] = {
gPauseMenuCursorTopLeftTex, // PAUSE_QUAD_CURSOR_TL gPauseMenuCursorTopLeftTex, // PAUSE_CURSOR_QUAD_TL
gPauseMenuCursorTopRightTex, // PAUSE_QUAD_CURSOR_TR gPauseMenuCursorTopRightTex, // PAUSE_CURSOR_QUAD_TR
gPauseMenuCursorBottomLeftTex, // PAUSE_QUAD_CURSOR_BL gPauseMenuCursorBottomLeftTex, // PAUSE_CURSOR_QUAD_BL
gPauseMenuCursorBottomRightTex, // PAUSE_QUAD_CURSOR_BR gPauseMenuCursorBottomRightTex, // PAUSE_CURSOR_QUAD_BR
}; };
static s16 sCursorColors[][3] = { static s16 sCursorColors[][3] = {
@ -879,7 +879,7 @@ static s16 sCursorColors[][3] = {
{ KALEIDO_COLOR_CURSOR_UNK_R, KALEIDO_COLOR_CURSOR_UNK_G, KALEIDO_COLOR_CURSOR_UNK_B }, { KALEIDO_COLOR_CURSOR_UNK_R, KALEIDO_COLOR_CURSOR_UNK_G, KALEIDO_COLOR_CURSOR_UNK_B },
}; };
static void* sSavePromptTexs[] = static void* sSavePromptMessageTexs[] =
LANGUAGE_ARRAY(gPauseSavePromptJPNTex, gPauseSavePromptENGTex, gPauseSavePromptGERTex, gPauseSavePromptFRATex); LANGUAGE_ARRAY(gPauseSavePromptJPNTex, gPauseSavePromptENGTex, gPauseSavePromptGERTex, gPauseSavePromptFRATex);
static void* sSaveConfirmationTexs[] = LANGUAGE_ARRAY(gPauseSaveConfirmationJPNTex, gPauseSaveConfirmationENGTex, static void* sSaveConfirmationTexs[] = LANGUAGE_ARRAY(gPauseSaveConfirmationJPNTex, gPauseSaveConfirmationENGTex,
@ -1124,7 +1124,7 @@ void KaleidoScope_DrawCursor(PlayState* play, u16 pageIndex) {
if (pauseCtx->pageIndex == pageIndex) { if (pauseCtx->pageIndex == pageIndex) {
// Draw PAUSE_QUAD_CURSOR_TL, PAUSE_QUAD_CURSOR_TR, PAUSE_QUAD_CURSOR_BL, PAUSE_QUAD_CURSOR_BR // Draw PAUSE_CURSOR_QUAD_TL, PAUSE_CURSOR_QUAD_TR, PAUSE_CURSOR_QUAD_BL, PAUSE_CURSOR_QUAD_BR
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);
gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
@ -1511,27 +1511,31 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, gfxCtx, "../z_kaleido_scope_PAL.c", 1424); MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, gfxCtx, "../z_kaleido_scope_PAL.c", 1424);
if (IS_PAUSE_STATE_GAMEOVER(pauseCtx)) { if (IS_PAUSE_STATE_GAMEOVER(pauseCtx)) {
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sGameOverTexs); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->promptPageVtx, sGameOverTexs);
} else { // PAUSE_STATE_SAVE_PROMPT } else { // PAUSE_STATE_SAVE_PROMPT
POLY_OPA_DISP = POLY_OPA_DISP =
KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, SAVE_TEXS(gSaveContext.language)); KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->promptPageVtx, SAVE_TEXS(gSaveContext.language));
} }
gSPVertex(POLY_OPA_DISP++, &pauseCtx->saveVtx[60], 32, 0); //! @bug Loads 32 vertices, but there are only 20 to load
gSPVertex(POLY_OPA_DISP++, &pauseCtx->promptPageVtx[PAGE_BG_QUADS * 4], 32, 0);
if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) && (pauseCtx->unk_1EC < 4)) || if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) &&
(pauseCtx->savePromptState < PAUSE_SAVE_PROMPT_STATE_SAVED)) ||
(pauseCtx->state == PAUSE_STATE_14)) { (pauseCtx->state == PAUSE_STATE_14)) {
POLY_OPA_DISP = POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sSavePromptMessageTexs[gSaveContext.language],
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sSavePromptTexs[gSaveContext.language], 152, 16, 0); 152, 16, PROMPT_QUAD_MESSAGE * 4);
gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0,
0, PRIMITIVE, 0); 0, PRIMITIVE, 0);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, KALEIDO_COLOR_PROMPT_UNK_R, KALEIDO_COLOR_PROMPT_UNK_G, gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, KALEIDO_PROMPT_CURSOR_R, KALEIDO_PROMPT_CURSOR_G,
KALEIDO_COLOR_PROMPT_UNK_B, VREG(61)); KALEIDO_PROMPT_CURSOR_B, R_KALEIDO_PROMPT_CURSOR_ALPHA);
if (pauseCtx->promptChoice == 0) { if (pauseCtx->promptChoice == 0) {
// PROMPT_QUAD_CURSOR_LEFT
gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL);
} else { } else {
// PROMPT_QUAD_CURSOR_RIGHT
gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL); gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL);
} }
@ -1539,29 +1543,32 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
POLY_OPA_DISP = POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48,
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); 16, PROMPT_QUAD_CHOICE_YES * 4);
POLY_OPA_DISP = POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48,
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); 16, PROMPT_QUAD_CHOICE_NO * 4);
} else if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) && (pauseCtx->unk_1EC >= 4)) || } else if (((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) &&
(pauseCtx->savePromptState >= PAUSE_SAVE_PROMPT_STATE_SAVED)) ||
pauseCtx->state == PAUSE_STATE_15) { pauseCtx->state == PAUSE_STATE_15) {
#if PLATFORM_N64 #if PLATFORM_N64
POLY_OPA_DISP = POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sSaveConfirmationTexs[gSaveContext.language],
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sSaveConfirmationTexs[gSaveContext.language], 152, 16, 0); 152, 16, PROMPT_QUAD_MESSAGE * 4);
#endif #endif
} else if (((pauseCtx->state == PAUSE_STATE_16) || (pauseCtx->state == PAUSE_STATE_17))) { } else if (((pauseCtx->state == PAUSE_STATE_16) || (pauseCtx->state == PAUSE_STATE_17))) {
POLY_OPA_DISP = POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sContinuePromptTexs[gSaveContext.language], 152,
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sContinuePromptTexs[gSaveContext.language], 152, 16, 0); 16, PROMPT_QUAD_MESSAGE * 4);
gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0,
0, PRIMITIVE, 0); 0, PRIMITIVE, 0);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, KALEIDO_COLOR_PROMPT_UNK_R, KALEIDO_COLOR_PROMPT_UNK_G, gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, KALEIDO_PROMPT_CURSOR_R, KALEIDO_PROMPT_CURSOR_G,
KALEIDO_COLOR_PROMPT_UNK_B, VREG(61)); KALEIDO_PROMPT_CURSOR_B, R_KALEIDO_PROMPT_CURSOR_ALPHA);
if (pauseCtx->promptChoice == 0) { if (pauseCtx->promptChoice == 0) {
// PROMPT_QUAD_CURSOR_LEFT
gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL);
} else { } else {
// PROMPT_QUAD_CURSOR_RIGHT
gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL); gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL);
} }
@ -1569,11 +1576,11 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
POLY_OPA_DISP = POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48,
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); 16, PROMPT_QUAD_CHOICE_YES * 4);
POLY_OPA_DISP = POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48,
KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); 16, PROMPT_QUAD_CHOICE_NO * 4);
} }
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);
@ -2188,22 +2195,22 @@ static s16 sVtxPageMapDungeonQuadsX[VTX_PAGE_MAP_DUNGEON_QUADS] = {
}; };
static s16 sVtxPageQuestQuadsX[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; static s16 sVtxPageQuestQuadsX[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 };
static s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = { static s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = {
47, // QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW 47, // WORLD_MAP_QUAD_CLOUDS_SACRED_FOREST_MEADOW
-49, // QUAD_MAP_WORLD_CLOUDS_HYRULE_FIELD -49, // WORLD_MAP_QUAD_CLOUDS_HYRULE_FIELD
-17, // QUAD_MAP_WORLD_CLOUDS_LON_LON_RANCH -17, // WORLD_MAP_QUAD_CLOUDS_LON_LON_RANCH
-15, // QUAD_MAP_WORLD_CLOUDS_MARKET -15, // WORLD_MAP_QUAD_CLOUDS_MARKET
-9, // QUAD_MAP_WORLD_CLOUDS_HYRULE_CASTLE -9, // WORLD_MAP_QUAD_CLOUDS_HYRULE_CASTLE
24, // QUAD_MAP_WORLD_CLOUDS_KAKARIKO_VILLAGE 24, // WORLD_MAP_QUAD_CLOUDS_KAKARIKO_VILLAGE
43, // QUAD_MAP_WORLD_CLOUDS_GRAVEYARD 43, // WORLD_MAP_QUAD_CLOUDS_GRAVEYARD
14, // QUAD_MAP_WORLD_CLOUDS_DEATH_MOUNTAIN_TRAIL 14, // WORLD_MAP_QUAD_CLOUDS_DEATH_MOUNTAIN_TRAIL
9, // QUAD_MAP_WORLD_CLOUDS_GORON_CITY 9, // WORLD_MAP_QUAD_CLOUDS_GORON_CITY
38, // QUAD_MAP_WORLD_CLOUDS_ZORAS_RIVER 38, // WORLD_MAP_QUAD_CLOUDS_ZORAS_RIVER
82, // QUAD_MAP_WORLD_CLOUDS_ZORAS_DOMAIN 82, // WORLD_MAP_QUAD_CLOUDS_ZORAS_DOMAIN
71, // QUAD_MAP_WORLD_CLOUDS_ZORAS_FOUNTAIN 71, // WORLD_MAP_QUAD_CLOUDS_ZORAS_FOUNTAIN
-76, // QUAD_MAP_WORLD_CLOUDS_GERUDO_VALLEY -76, // WORLD_MAP_QUAD_CLOUDS_GERUDO_VALLEY
-87, // QUAD_MAP_WORLD_CLOUDS_GERUDOS_FORTRESS -87, // WORLD_MAP_QUAD_CLOUDS_GERUDOS_FORTRESS
-108, // QUAD_MAP_WORLD_CLOUDS_DESERT_COLOSSUS -108, // WORLD_MAP_QUAD_CLOUDS_DESERT_COLOSSUS
-54, // QUAD_MAP_WORLD_CLOUDS_LAKE_HYLIA -54, // WORLD_MAP_QUAD_CLOUDS_LAKE_HYLIA
-93, // WORLD_MAP_POINT_HAUNTED_WASTELAND -93, // WORLD_MAP_POINT_HAUNTED_WASTELAND
-67, // WORLD_MAP_POINT_GERUDOS_FORTRESS -67, // WORLD_MAP_POINT_GERUDOS_FORTRESS
-56, // WORLD_MAP_POINT_GERUDO_VALLEY -56, // WORLD_MAP_POINT_GERUDO_VALLEY
@ -2216,13 +2223,17 @@ static s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = {
58, // WORLD_MAP_POINT_LOST_WOODS 58, // WORLD_MAP_POINT_LOST_WOODS
74, // WORLD_MAP_POINT_KOKIRI_FOREST 74, // WORLD_MAP_POINT_KOKIRI_FOREST
89, // WORLD_MAP_POINT_ZORAS_DOMAIN 89, // WORLD_MAP_POINT_ZORAS_DOMAIN
0, // QUAD_MAP_28 0, // WORLD_MAP_QUAD_28
-58, // QUAD_MAP_TRADE_QUEST_MARKER -58, // WORLD_MAP_QUAD_TRADE_QUEST_MARKER
19, // QUAD_MAP_30 19, // WORLD_MAP_QUAD_30
28, // QUAD_MAP_31 28, // WORLD_MAP_QUAD_31
}; };
static s16 sVtxPagePromptQuadsX[VTX_PAGE_PROMPT_QUADS] = { static s16 sVtxPagePromptQuadsX[VTX_PAGE_PROMPT_QUADS] = {
0xFFB4, 0xFFC6, 0x000A, 0xFFC6, 0x000A, -76, // PROMPT_QUAD_MESSAGE
-58, // PROMPT_QUAD_CURSOR_LEFT
10, // PROMPT_QUAD_CURSOR_RIGHT
-58, // PROMPT_QUAD_CHOICE_YES
10, // PROMPT_QUAD_CHOICE_NO
}; };
static s16 sVtxPageItemQuadsWidth[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 }; static s16 sVtxPageItemQuadsWidth[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 };
static s16 sVtxPageEquipQuadsWidth[CLAMP_MIN(VTX_PAGE_EQUIP_QUADS, 1)] = { 0 }; static s16 sVtxPageEquipQuadsWidth[CLAMP_MIN(VTX_PAGE_EQUIP_QUADS, 1)] = { 0 };
@ -2232,7 +2243,11 @@ static s16 sVtxPageMapDungeonQuadsWidth[VTX_PAGE_MAP_DUNGEON_QUADS] = {
}; };
static s16 sVtxPageQuestQuadsWidth[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; static s16 sVtxPageQuestQuadsWidth[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 };
static s16 sVtxPagePromptQuadsWidth[VTX_PAGE_PROMPT_QUADS] = { static s16 sVtxPagePromptQuadsWidth[VTX_PAGE_PROMPT_QUADS] = {
0x0098, 0x0030, 0x0030, 0x0030, 0x0030, 152, // PROMPT_QUAD_MESSAGE
48, // PROMPT_QUAD_CURSOR_LEFT
48, // PROMPT_QUAD_CURSOR_RIGHT
48, // PROMPT_QUAD_CHOICE_YES
48, // PROMPT_QUAD_CHOICE_NO
}; };
static s16 sVtxPageItemQuadsY[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 }; static s16 sVtxPageItemQuadsY[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 };
static s16 sVtxPageEquipQuadsY[CLAMP_MIN(VTX_PAGE_EQUIP_QUADS, 1)] = { 0 }; static s16 sVtxPageEquipQuadsY[CLAMP_MIN(VTX_PAGE_EQUIP_QUADS, 1)] = { 0 };
@ -2242,22 +2257,22 @@ static s16 sVtxPageMapDungeonQuadsY[VTX_PAGE_MAP_DUNGEON_QUADS] = {
}; };
static s16 sVtxPageQuestQuadsY[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; static s16 sVtxPageQuestQuadsY[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 };
static s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = { static s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = {
15, // QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW 15, // WORLD_MAP_QUAD_CLOUDS_SACRED_FOREST_MEADOW
40, // QUAD_MAP_WORLD_CLOUDS_HYRULE_FIELD 40, // WORLD_MAP_QUAD_CLOUDS_HYRULE_FIELD
11, // QUAD_MAP_WORLD_CLOUDS_LON_LON_RANCH 11, // WORLD_MAP_QUAD_CLOUDS_LON_LON_RANCH
45, // QUAD_MAP_WORLD_CLOUDS_MARKET 45, // WORLD_MAP_QUAD_CLOUDS_MARKET
52, // QUAD_MAP_WORLD_CLOUDS_HYRULE_CASTLE 52, // WORLD_MAP_QUAD_CLOUDS_HYRULE_CASTLE
37, // QUAD_MAP_WORLD_CLOUDS_KAKARIKO_VILLAGE 37, // WORLD_MAP_QUAD_CLOUDS_KAKARIKO_VILLAGE
36, // QUAD_MAP_WORLD_CLOUDS_GRAVEYARD 36, // WORLD_MAP_QUAD_CLOUDS_GRAVEYARD
57, // QUAD_MAP_WORLD_CLOUDS_DEATH_MOUNTAIN_TRAIL 57, // WORLD_MAP_QUAD_CLOUDS_DEATH_MOUNTAIN_TRAIL
54, // QUAD_MAP_WORLD_CLOUDS_GORON_CITY 54, // WORLD_MAP_QUAD_CLOUDS_GORON_CITY
33, // QUAD_MAP_WORLD_CLOUDS_ZORAS_RIVER 33, // WORLD_MAP_QUAD_CLOUDS_ZORAS_RIVER
31, // QUAD_MAP_WORLD_CLOUDS_ZORAS_DOMAIN 31, // WORLD_MAP_QUAD_CLOUDS_ZORAS_DOMAIN
45, // QUAD_MAP_WORLD_CLOUDS_ZORAS_FOUNTAIN 45, // WORLD_MAP_QUAD_CLOUDS_ZORAS_FOUNTAIN
32, // QUAD_MAP_WORLD_CLOUDS_GERUDO_VALLEY 32, // WORLD_MAP_QUAD_CLOUDS_GERUDO_VALLEY
42, // QUAD_MAP_WORLD_CLOUDS_GERUDOS_FORTRESS 42, // WORLD_MAP_QUAD_CLOUDS_GERUDOS_FORTRESS
49, // QUAD_MAP_WORLD_CLOUDS_DESERT_COLOSSUS 49, // WORLD_MAP_QUAD_CLOUDS_DESERT_COLOSSUS
-10, // QUAD_MAP_WORLD_CLOUDS_LAKE_HYLIA -10, // WORLD_MAP_QUAD_CLOUDS_LAKE_HYLIA
31, // WORLD_MAP_POINT_HAUNTED_WASTELAND 31, // WORLD_MAP_POINT_HAUNTED_WASTELAND
27, // WORLD_MAP_POINT_GERUDOS_FORTRESS 27, // WORLD_MAP_POINT_GERUDOS_FORTRESS
15, // WORLD_MAP_POINT_GERUDO_VALLEY 15, // WORLD_MAP_POINT_GERUDO_VALLEY
@ -2270,13 +2285,17 @@ static s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = {
1, // WORLD_MAP_POINT_LOST_WOODS 1, // WORLD_MAP_POINT_LOST_WOODS
-9, // WORLD_MAP_POINT_KOKIRI_FOREST -9, // WORLD_MAP_POINT_KOKIRI_FOREST
25, // WORLD_MAP_POINT_ZORAS_DOMAIN 25, // WORLD_MAP_POINT_ZORAS_DOMAIN
0, // QUAD_MAP_28 0, // WORLD_MAP_QUAD_28
1, // QUAD_MAP_TRADE_QUEST_MARKER 1, // WORLD_MAP_QUAD_TRADE_QUEST_MARKER
-32, // QUAD_MAP_30 -32, // WORLD_MAP_QUAD_30
-26, // QUAD_MAP_31 -26, // WORLD_MAP_QUAD_31
}; };
static s16 sVtxPagePromptQuadsY[VTX_PAGE_PROMPT_QUADS] = { static s16 sVtxPagePromptQuadsY[VTX_PAGE_PROMPT_QUADS] = {
0x0024, 0x000A, 0x000A, 0xFFFA, 0xFFFA, 36, // PROMPT_QUAD_MESSAGE
10, // PROMPT_QUAD_CURSOR_LEFT
10, // PROMPT_QUAD_CURSOR_RIGHT
-6, // PROMPT_QUAD_CHOICE_YES
-6, // PROMPT_QUAD_CHOICE_NO
}; };
static s16 sVtxPageItemQuadsHeight[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 }; static s16 sVtxPageItemQuadsHeight[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 };
static s16 sVtxPageEquipQuadsHeight[CLAMP_MIN(VTX_PAGE_EQUIP_QUADS, 1)] = { 0 }; static s16 sVtxPageEquipQuadsHeight[CLAMP_MIN(VTX_PAGE_EQUIP_QUADS, 1)] = { 0 };
@ -2286,7 +2305,11 @@ static s16 sVtxPageMapDungeonQuadsHeight[VTX_PAGE_MAP_DUNGEON_QUADS] = {
}; };
static s16 sVtxPageQuestQuadsHeight[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; static s16 sVtxPageQuestQuadsHeight[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 };
static s16 sVtxPagePromptQuadsHeight[VTX_PAGE_PROMPT_QUADS] = { static s16 sVtxPagePromptQuadsHeight[VTX_PAGE_PROMPT_QUADS] = {
0x0010, 0x0030, 0x0030, 0x0010, 0x0010, 16, // PROMPT_QUAD_MESSAGE
48, // PROMPT_QUAD_CURSOR_LEFT
48, // PROMPT_QUAD_CURSOR_RIGHT
16, // PROMPT_QUAD_CHOICE_YES
16, // PROMPT_QUAD_CHOICE_NO
}; };
static s16* sVtxPageQuadsX[] = { static s16* sVtxPageQuadsX[] = {
@ -2566,8 +2589,8 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num
sTradeQuestMarkerBobTimer--; sTradeQuestMarkerBobTimer--;
} }
j = bufIAfterPageSections + ((QUAD_MAP_WORLD_POINT_FIRST + pauseCtx->tradeQuestMarker) * 4); j = bufIAfterPageSections + ((WORLD_MAP_QUAD_POINT_FIRST + pauseCtx->tradeQuestMarker) * 4);
i = bufIAfterPageSections + (QUAD_MAP_TRADE_QUEST_MARKER * 4); i = bufIAfterPageSections + (WORLD_MAP_QUAD_TRADE_QUEST_MARKER * 4);
vtx[i + 0].v.ob[0] = vtx[i + 2].v.ob[0] = vtx[j + 0].v.ob[0]; vtx[i + 0].v.ob[0] = vtx[i + 2].v.ob[0] = vtx[j + 0].v.ob[0];
@ -2632,7 +2655,9 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->offsetY = 0; pauseCtx->offsetY = 0;
if ((pauseCtx->state == PAUSE_STATE_OPENING_1) || (pauseCtx->state >= PAUSE_STATE_CLOSING) || if ((pauseCtx->state == PAUSE_STATE_OPENING_1) || (pauseCtx->state >= PAUSE_STATE_CLOSING) ||
((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) && ((pauseCtx->unk_1EC == 2) || (pauseCtx->unk_1EC == 5))) || ((pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) &&
((pauseCtx->savePromptState == PAUSE_SAVE_PROMPT_STATE_CLOSING) ||
(pauseCtx->savePromptState == PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED))) ||
((pauseCtx->state >= PAUSE_STATE_8) && (pauseCtx->state <= PAUSE_STATE_13))) { ((pauseCtx->state >= PAUSE_STATE_8) && (pauseCtx->state <= PAUSE_STATE_13))) {
pauseCtx->offsetY = 80; pauseCtx->offsetY = 80;
} }
@ -2698,9 +2723,9 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->questPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_QUEST_QUADS) * 4) * sizeof(Vtx)); pauseCtx->questPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_QUEST_QUADS) * 4) * sizeof(Vtx));
KaleidoScope_SetPageVertices(play, pauseCtx->questPageVtx, VTX_PAGE_QUEST, VTX_PAGE_QUEST_QUADS); KaleidoScope_SetPageVertices(play, pauseCtx->questPageVtx, VTX_PAGE_QUEST, VTX_PAGE_QUEST_QUADS);
pauseCtx->cursorVtx = GRAPH_ALLOC(gfxCtx, PAUSE_QUAD_CURSOR_MAX * 4 * sizeof(Vtx)); pauseCtx->cursorVtx = GRAPH_ALLOC(gfxCtx, PAUSE_CURSOR_QUAD_MAX * 4 * sizeof(Vtx));
for (i = 0; i < (PAUSE_QUAD_CURSOR_MAX * 4); i++) { for (i = 0; i < (PAUSE_CURSOR_QUAD_MAX * 4); i++) {
pauseCtx->cursorVtx[i].v.ob[0] = pauseCtx->cursorVtx[i].v.ob[1] = pauseCtx->cursorVtx[i].v.ob[2] = 0; pauseCtx->cursorVtx[i].v.ob[0] = pauseCtx->cursorVtx[i].v.ob[1] = pauseCtx->cursorVtx[i].v.ob[2] = 0;
pauseCtx->cursorVtx[i].v.flag = 0; pauseCtx->cursorVtx[i].v.flag = 0;
@ -2711,19 +2736,19 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->cursorVtx[i].v.cn[3] = 255; pauseCtx->cursorVtx[i].v.cn[3] = 255;
} }
// PAUSE_QUAD_CURSOR_TL // PAUSE_CURSOR_QUAD_TL
pauseCtx->cursorVtx[1].v.tc[0] = pauseCtx->cursorVtx[2].v.tc[1] = pauseCtx->cursorVtx[3].v.tc[0] = pauseCtx->cursorVtx[1].v.tc[0] = pauseCtx->cursorVtx[2].v.tc[1] = pauseCtx->cursorVtx[3].v.tc[0] =
pauseCtx->cursorVtx[3].v.tc[1] pauseCtx->cursorVtx[3].v.tc[1]
// PAUSE_QUAD_CURSOR_TR // PAUSE_CURSOR_QUAD_TR
= pauseCtx->cursorVtx[5].v.tc[0] = pauseCtx->cursorVtx[6].v.tc[1] = pauseCtx->cursorVtx[7].v.tc[0] = = pauseCtx->cursorVtx[5].v.tc[0] = pauseCtx->cursorVtx[6].v.tc[1] = pauseCtx->cursorVtx[7].v.tc[0] =
pauseCtx->cursorVtx[7].v.tc[1] pauseCtx->cursorVtx[7].v.tc[1]
// PAUSE_QUAD_CURSOR_BL // PAUSE_CURSOR_QUAD_BL
= pauseCtx->cursorVtx[9].v.tc[0] = pauseCtx->cursorVtx[10].v.tc[1] = pauseCtx->cursorVtx[11].v.tc[0] = = pauseCtx->cursorVtx[9].v.tc[0] = pauseCtx->cursorVtx[10].v.tc[1] = pauseCtx->cursorVtx[11].v.tc[0] =
pauseCtx->cursorVtx[11].v.tc[1] pauseCtx->cursorVtx[11].v.tc[1]
// PAUSE_QUAD_CURSOR_BR // PAUSE_CURSOR_QUAD_BR
= pauseCtx->cursorVtx[13].v.tc[0] = pauseCtx->cursorVtx[14].v.tc[1] = pauseCtx->cursorVtx[15].v.tc[0] = = pauseCtx->cursorVtx[13].v.tc[0] = pauseCtx->cursorVtx[14].v.tc[1] = pauseCtx->cursorVtx[15].v.tc[0] =
pauseCtx->cursorVtx[15].v.tc[1] = 16 * (1 << 5); pauseCtx->cursorVtx[15].v.tc[1] = 16 * (1 << 5);
// PAUSE_QUAD_CURSOR_4 // PAUSE_CURSOR_QUAD_4
pauseCtx->cursorVtx[17].v.tc[0] = pauseCtx->cursorVtx[18].v.tc[1] = pauseCtx->cursorVtx[19].v.tc[0] = pauseCtx->cursorVtx[17].v.tc[0] = pauseCtx->cursorVtx[18].v.tc[1] = pauseCtx->cursorVtx[19].v.tc[0] =
pauseCtx->cursorVtx[19].v.tc[1] = 32 * (1 << 5); pauseCtx->cursorVtx[19].v.tc[1] = 32 * (1 << 5);
@ -3041,8 +3066,8 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->infoPanelVtx = GRAPH_ALLOC(gfxCtx, 28 * sizeof(Vtx)); pauseCtx->infoPanelVtx = GRAPH_ALLOC(gfxCtx, 28 * sizeof(Vtx));
pauseCtx->saveVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_PROMPT_QUADS) * 4) * sizeof(Vtx)); pauseCtx->promptPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_PROMPT_QUADS) * 4) * sizeof(Vtx));
KaleidoScope_SetPageVertices(play, pauseCtx->saveVtx, VTX_PAGE_PROMPT, VTX_PAGE_PROMPT_QUADS); KaleidoScope_SetPageVertices(play, pauseCtx->promptPageVtx, VTX_PAGE_PROMPT, VTX_PAGE_PROMPT_QUADS);
} }
void KaleidoScope_DrawGameOver(PlayState* play) { void KaleidoScope_DrawGameOver(PlayState* play) {
@ -3256,27 +3281,27 @@ void KaleidoScope_UpdateCursorVtx(PlayState* play) {
// Move the quads according to the offsets set above, // Move the quads according to the offsets set above,
// and the position of the cursor in `pauseCtx->cursorVtx[0].v.ob` // and the position of the cursor in `pauseCtx->cursorVtx[0].v.ob`
// (see `KaleidoScope_SetCursorPos` and other `PAUSE_QUAD_CURSOR_TL` uses) // (see `KaleidoScope_SetCursorPos` and other `PAUSE_CURSOR_QUAD_TL` uses)
// PAUSE_QUAD_CURSOR_TL // PAUSE_CURSOR_QUAD_TL
pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->cursorVtx[2].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + tlOffsetX; pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->cursorVtx[2].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + tlOffsetX;
pauseCtx->cursorVtx[1].v.ob[0] = pauseCtx->cursorVtx[3].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + 16; pauseCtx->cursorVtx[1].v.ob[0] = pauseCtx->cursorVtx[3].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + 16;
pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->cursorVtx[1].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] + tlOffsetY; pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->cursorVtx[1].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] + tlOffsetY;
pauseCtx->cursorVtx[2].v.ob[1] = pauseCtx->cursorVtx[3].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - 16; pauseCtx->cursorVtx[2].v.ob[1] = pauseCtx->cursorVtx[3].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - 16;
// PAUSE_QUAD_CURSOR_TR // PAUSE_CURSOR_QUAD_TR
pauseCtx->cursorVtx[4].v.ob[0] = pauseCtx->cursorVtx[6].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + rightOffsetX; pauseCtx->cursorVtx[4].v.ob[0] = pauseCtx->cursorVtx[6].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + rightOffsetX;
pauseCtx->cursorVtx[5].v.ob[0] = pauseCtx->cursorVtx[7].v.ob[0] = pauseCtx->cursorVtx[4].v.ob[0] + 16; pauseCtx->cursorVtx[5].v.ob[0] = pauseCtx->cursorVtx[7].v.ob[0] = pauseCtx->cursorVtx[4].v.ob[0] + 16;
pauseCtx->cursorVtx[4].v.ob[1] = pauseCtx->cursorVtx[5].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1]; pauseCtx->cursorVtx[4].v.ob[1] = pauseCtx->cursorVtx[5].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1];
pauseCtx->cursorVtx[6].v.ob[1] = pauseCtx->cursorVtx[7].v.ob[1] = pauseCtx->cursorVtx[4].v.ob[1] - 16; pauseCtx->cursorVtx[6].v.ob[1] = pauseCtx->cursorVtx[7].v.ob[1] = pauseCtx->cursorVtx[4].v.ob[1] - 16;
// PAUSE_QUAD_CURSOR_BL // PAUSE_CURSOR_QUAD_BL
pauseCtx->cursorVtx[8].v.ob[0] = pauseCtx->cursorVtx[10].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0]; pauseCtx->cursorVtx[8].v.ob[0] = pauseCtx->cursorVtx[10].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0];
pauseCtx->cursorVtx[9].v.ob[0] = pauseCtx->cursorVtx[11].v.ob[0] = pauseCtx->cursorVtx[8].v.ob[0] + 16; pauseCtx->cursorVtx[9].v.ob[0] = pauseCtx->cursorVtx[11].v.ob[0] = pauseCtx->cursorVtx[8].v.ob[0] + 16;
pauseCtx->cursorVtx[8].v.ob[1] = pauseCtx->cursorVtx[9].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - bottomOffsetY; pauseCtx->cursorVtx[8].v.ob[1] = pauseCtx->cursorVtx[9].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - bottomOffsetY;
pauseCtx->cursorVtx[10].v.ob[1] = pauseCtx->cursorVtx[11].v.ob[1] = pauseCtx->cursorVtx[8].v.ob[1] - 16; pauseCtx->cursorVtx[10].v.ob[1] = pauseCtx->cursorVtx[11].v.ob[1] = pauseCtx->cursorVtx[8].v.ob[1] - 16;
// PAUSE_QUAD_CURSOR_BR // PAUSE_CURSOR_QUAD_BR
pauseCtx->cursorVtx[12].v.ob[0] = pauseCtx->cursorVtx[14].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + rightOffsetX; pauseCtx->cursorVtx[12].v.ob[0] = pauseCtx->cursorVtx[14].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + rightOffsetX;
pauseCtx->cursorVtx[13].v.ob[0] = pauseCtx->cursorVtx[15].v.ob[0] = pauseCtx->cursorVtx[12].v.ob[0] + 16; pauseCtx->cursorVtx[13].v.ob[0] = pauseCtx->cursorVtx[15].v.ob[0] = pauseCtx->cursorVtx[12].v.ob[0] + 16;
pauseCtx->cursorVtx[12].v.ob[1] = pauseCtx->cursorVtx[13].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - bottomOffsetY; pauseCtx->cursorVtx[12].v.ob[1] = pauseCtx->cursorVtx[13].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - bottomOffsetY;
@ -3794,7 +3819,7 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[4] = BTN_ENABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE; gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
pauseCtx->unk_1EC = 0; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = PAUSE_STATE_SAVE_PROMPT; pauseCtx->state = PAUSE_STATE_SAVE_PROMPT;
} }
break; break;
@ -3841,7 +3866,7 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[4] = BTN_ENABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE; gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
pauseCtx->unk_1EC = 0; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = PAUSE_STATE_SAVE_PROMPT; pauseCtx->state = PAUSE_STATE_SAVE_PROMPT;
} else if (pauseCtx->ocarinaStaff->state == pauseCtx->ocarinaSongIdx) { } else if (pauseCtx->ocarinaStaff->state == pauseCtx->ocarinaSongIdx) {
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
@ -3891,7 +3916,7 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[4] = BTN_ENABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE; gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
pauseCtx->unk_1EC = 0; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->state = PAUSE_STATE_SAVE_PROMPT; pauseCtx->state = PAUSE_STATE_SAVE_PROMPT;
} }
break; break;
@ -3906,18 +3931,18 @@ void KaleidoScope_Update(PlayState* play) {
break; break;
case PAUSE_STATE_SAVE_PROMPT: case PAUSE_STATE_SAVE_PROMPT:
switch (pauseCtx->unk_1EC) { switch (pauseCtx->savePromptState) {
case 0: case PAUSE_SAVE_PROMPT_STATE_APPEARING:
pauseCtx->unk_204 -= 314.0f / WREG(6); pauseCtx->unk_204 -= 314.0f / WREG(6);
WREG(16) -= WREG(25) / WREG(6); WREG(16) -= WREG(25) / WREG(6);
WREG(17) -= WREG(26) / WREG(6); WREG(17) -= WREG(26) / WREG(6);
if (pauseCtx->unk_204 <= -628.0f) { if (pauseCtx->unk_204 <= -628.0f) {
pauseCtx->unk_204 = -628.0f; pauseCtx->unk_204 = -628.0f;
pauseCtx->unk_1EC = 1; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE;
} }
break; break;
case 1: case PAUSE_SAVE_PROMPT_STATE_WAIT_CHOICE:
if (CHECK_BTN_ALL(input->press.button, BTN_A)) { if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
if (pauseCtx->promptChoice != 0) { if (pauseCtx->promptChoice != 0) {
Interface_SetDoAction(play, DO_ACTION_NONE); Interface_SetDoAction(play, DO_ACTION_NONE);
@ -3925,7 +3950,7 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[3] = BTN_ENABLED; gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE; gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
pauseCtx->unk_1EC = 2; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_CLOSING;
WREG(2) = -6240; WREG(2) = -6240;
YREG(8) = pauseCtx->unk_204; YREG(8) = pauseCtx->unk_204;
func_800F64E0(0); func_800F64E0(0);
@ -3939,7 +3964,7 @@ void KaleidoScope_Update(PlayState* play) {
Play_SaveSceneFlags(play); Play_SaveSceneFlags(play);
gSaveContext.save.info.playerData.savedSceneId = play->sceneId; gSaveContext.save.info.playerData.savedSceneId = play->sceneId;
Sram_WriteSave(&play->sramCtx); Sram_WriteSave(&play->sramCtx);
pauseCtx->unk_1EC = 4; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_SAVED;
#if PLATFORM_N64 #if PLATFORM_N64
D_8082B25C = 90; D_8082B25C = 90;
#else #else
@ -3949,7 +3974,7 @@ void KaleidoScope_Update(PlayState* play) {
} else if (CHECK_BTN_ALL(input->press.button, BTN_START) || } else if (CHECK_BTN_ALL(input->press.button, BTN_START) ||
CHECK_BTN_ALL(input->press.button, BTN_B)) { CHECK_BTN_ALL(input->press.button, BTN_B)) {
Interface_SetDoAction(play, DO_ACTION_NONE); Interface_SetDoAction(play, DO_ACTION_NONE);
pauseCtx->unk_1EC = 2; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_CLOSING;
WREG(2) = -6240; WREG(2) = -6240;
YREG(8) = pauseCtx->unk_204; YREG(8) = pauseCtx->unk_204;
func_800F64E0(0); func_800F64E0(0);
@ -3963,7 +3988,7 @@ void KaleidoScope_Update(PlayState* play) {
} }
break; break;
case 4: case PAUSE_SAVE_PROMPT_STATE_SAVED:
if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) || if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) ||
CHECK_BTN_ALL(input->press.button, BTN_START) || (--D_8082B25C == 0)) { CHECK_BTN_ALL(input->press.button, BTN_START) || (--D_8082B25C == 0)) {
Interface_SetDoAction(play, DO_ACTION_NONE); Interface_SetDoAction(play, DO_ACTION_NONE);
@ -3971,28 +3996,28 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[3] = BTN_ENABLED; gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE; gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
pauseCtx->unk_1EC = 5; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED;
WREG(2) = -6240; WREG(2) = -6240;
YREG(8) = pauseCtx->unk_204; YREG(8) = pauseCtx->unk_204;
func_800F64E0(0); func_800F64E0(0);
} }
break; break;
case 3: case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU:
case 6: case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU_2:
pauseCtx->unk_204 += 314.0f / WREG(6); pauseCtx->unk_204 += 314.0f / WREG(6);
WREG(16) += WREG(25) / WREG(6); WREG(16) += WREG(25) / WREG(6);
WREG(17) += WREG(26) / WREG(6); WREG(17) += WREG(26) / WREG(6);
if (pauseCtx->unk_204 >= -314.0f) { if (pauseCtx->unk_204 >= -314.0f) {
pauseCtx->state = PAUSE_STATE_MAIN; pauseCtx->state = PAUSE_STATE_MAIN;
pauseCtx->unk_1EC = 0; pauseCtx->savePromptState = PAUSE_SAVE_PROMPT_STATE_APPEARING;
pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 0.0f; pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 0.0f;
pauseCtx->unk_204 = -314.0f; pauseCtx->unk_204 = -314.0f;
} }
break; break;
case 2: case PAUSE_SAVE_PROMPT_STATE_CLOSING:
case 5: case PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED:
if (pauseCtx->unk_204 != (YREG(8) + 160.0f)) { if (pauseCtx->unk_204 != (YREG(8) + 160.0f)) {
pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 += pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 +=
160.0f / WREG(6); 160.0f / WREG(6);

View file

@ -42,33 +42,42 @@ extern u8 gAreaGsFlags[];
// Clouds quads cover undiscovered areas. // Clouds quads cover undiscovered areas.
// Point quads are location markers. They can also be highlighted as a hint of where to go. // Point quads are location markers. They can also be highlighted as a hint of where to go.
typedef enum MapQuad { typedef enum WorldMapQuad {
/* 0 */ QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW, /* 0 */ WORLD_MAP_QUAD_CLOUDS_SACRED_FOREST_MEADOW,
/* 1 */ QUAD_MAP_WORLD_CLOUDS_HYRULE_FIELD, /* 1 */ WORLD_MAP_QUAD_CLOUDS_HYRULE_FIELD,
/* 2 */ QUAD_MAP_WORLD_CLOUDS_LON_LON_RANCH, /* 2 */ WORLD_MAP_QUAD_CLOUDS_LON_LON_RANCH,
/* 3 */ QUAD_MAP_WORLD_CLOUDS_MARKET, /* 3 */ WORLD_MAP_QUAD_CLOUDS_MARKET,
/* 4 */ QUAD_MAP_WORLD_CLOUDS_HYRULE_CASTLE, /* 4 */ WORLD_MAP_QUAD_CLOUDS_HYRULE_CASTLE,
/* 5 */ QUAD_MAP_WORLD_CLOUDS_KAKARIKO_VILLAGE, /* 5 */ WORLD_MAP_QUAD_CLOUDS_KAKARIKO_VILLAGE,
/* 6 */ QUAD_MAP_WORLD_CLOUDS_GRAVEYARD, /* 6 */ WORLD_MAP_QUAD_CLOUDS_GRAVEYARD,
/* 7 */ QUAD_MAP_WORLD_CLOUDS_DEATH_MOUNTAIN_TRAIL, /* 7 */ WORLD_MAP_QUAD_CLOUDS_DEATH_MOUNTAIN_TRAIL,
/* 8 */ QUAD_MAP_WORLD_CLOUDS_GORON_CITY, /* 8 */ WORLD_MAP_QUAD_CLOUDS_GORON_CITY,
/* 9 */ QUAD_MAP_WORLD_CLOUDS_ZORAS_RIVER, /* 9 */ WORLD_MAP_QUAD_CLOUDS_ZORAS_RIVER,
/* 10 */ QUAD_MAP_WORLD_CLOUDS_ZORAS_DOMAIN, /* 10 */ WORLD_MAP_QUAD_CLOUDS_ZORAS_DOMAIN,
/* 11 */ QUAD_MAP_WORLD_CLOUDS_ZORAS_FOUNTAIN, /* 11 */ WORLD_MAP_QUAD_CLOUDS_ZORAS_FOUNTAIN,
/* 12 */ QUAD_MAP_WORLD_CLOUDS_GERUDO_VALLEY, /* 12 */ WORLD_MAP_QUAD_CLOUDS_GERUDO_VALLEY,
/* 13 */ QUAD_MAP_WORLD_CLOUDS_GERUDOS_FORTRESS, /* 13 */ WORLD_MAP_QUAD_CLOUDS_GERUDOS_FORTRESS,
/* 14 */ QUAD_MAP_WORLD_CLOUDS_DESERT_COLOSSUS, /* 14 */ WORLD_MAP_QUAD_CLOUDS_DESERT_COLOSSUS,
/* 15 */ QUAD_MAP_WORLD_CLOUDS_LAKE_HYLIA, /* 15 */ WORLD_MAP_QUAD_CLOUDS_LAKE_HYLIA,
/* 16 */ QUAD_MAP_WORLD_POINT_FIRST, /* 16 */ WORLD_MAP_QUAD_POINT_FIRST,
// 16 to 27 follows the `WorldMapPoint` enum // 16 to 27 follows the `WorldMapPoint` enum
/* 27 */ QUAD_MAP_WORLD_POINT_LAST = QUAD_MAP_WORLD_POINT_FIRST + WORLD_MAP_POINT_MAX - 1, /* 27 */ WORLD_MAP_QUAD_POINT_LAST = WORLD_MAP_QUAD_POINT_FIRST + WORLD_MAP_POINT_MAX - 1,
/* 28 */ QUAD_MAP_28, /* 28 */ WORLD_MAP_QUAD_28,
/* 29 */ QUAD_MAP_TRADE_QUEST_MARKER, /* 29 */ WORLD_MAP_QUAD_TRADE_QUEST_MARKER,
/* 30 */ QUAD_MAP_30, /* 30 */ WORLD_MAP_QUAD_30,
/* 31 */ QUAD_MAP_31, /* 31 */ WORLD_MAP_QUAD_31,
/* 32 */ QUAD_MAP_WORLD_IMAGE_FIRST, /* 32 */ WORLD_MAP_QUAD_IMAGE_FIRST,
/* 46 */ QUAD_MAP_WORLD_IMAGE_LAST = QUAD_MAP_WORLD_IMAGE_FIRST + WORLD_MAP_IMAGE_FRAG_NUM - 1 /* 46 */ WORLD_MAP_QUAD_IMAGE_LAST = WORLD_MAP_QUAD_IMAGE_FIRST + WORLD_MAP_IMAGE_FRAG_NUM - 1
} MapQuad; } WorldMapQuad;
typedef enum PromptQuad {
/* 0 */ PROMPT_QUAD_MESSAGE,
/* 1 */ PROMPT_QUAD_CURSOR_LEFT,
/* 2 */ PROMPT_QUAD_CURSOR_RIGHT,
/* 3 */ PROMPT_QUAD_CHOICE_YES,
/* 4 */ PROMPT_QUAD_CHOICE_NO,
/* 5 */ PROMPT_QUAD_MAX
} PromptQuad;
void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx); void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx);
s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s32 point); s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s32 point);