diff --git a/include/z64pause.h b/include/z64pause.h index be38d7dd01..12921fcd9f 100644 --- a/include/z64pause.h +++ b/include/z64pause.h @@ -112,6 +112,8 @@ typedef enum WorldMapPoint { /* 12 */ WORLD_MAP_POINT_MAX } WorldMapPoint; +#define TRADE_QUEST_MARKER_NONE 0xFF + typedef enum WorldMapPointState { /* 0 */ WORLD_MAP_POINT_STATE_HIDE, /* 1 */ WORLD_MAP_POINT_STATE_SHOW, @@ -184,7 +186,7 @@ typedef struct PauseContext { /* 0x0262 */ s16 promptChoice; // save/continue choice: 0 = yes; 4 = no /* 0x0264 */ s16 ocarinaSongIdx; /* 0x0266 */ u8 worldMapPoints[20]; // indices: `WorldMapPoint` enum, values: `WorldMapPointState` enum - /* 0x027A */ u8 tradeQuestLocation; + /* 0x027A */ u8 tradeQuestMarker; // Can be either a `WorldMapPoint` value or `TRADE_QUEST_MARKER_NONE` /* 0x027C */ SkelAnime playerSkelAnime; } PauseContext; // size = 0x2C0 diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c index c9e176b66c..efb6e0f553 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c @@ -873,9 +873,9 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { KaleidoScope_DrawCursor(play, PAUSE_MAP); } - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[176], 16, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + QUAD_MAP_TRADE_QUEST_MARKER) * 4], 16, 0); - if (pauseCtx->tradeQuestLocation != 0xFF) { + if (pauseCtx->tradeQuestMarker != TRADE_QUEST_MARKER_NONE) { gDPPipeSync(POLY_OPA_DISP++); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, pointPulsePrimColor[0], 0, pauseCtx->alpha); diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c index 2f1eeca581..b1349a495b 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c @@ -580,7 +580,7 @@ s16 gVtxPageMapWorldQuadsWidth[VTX_PAGE_MAP_WORLD_QUADS] = { 8, // WORLD_MAP_POINT_KOKIRI_FOREST 8, // WORLD_MAP_POINT_ZORAS_DOMAIN 8, // QUAD_MAP_28 - 8, // QUAD_MAP_29 + 8, // QUAD_MAP_TRADE_QUEST_MARKER 80, // QUAD_MAP_30 64, // QUAD_MAP_31 }; @@ -615,7 +615,7 @@ s16 gVtxPageMapWorldQuadsHeight[VTX_PAGE_MAP_WORLD_QUADS] = { 8, // WORLD_MAP_POINT_KOKIRI_FOREST 8, // WORLD_MAP_POINT_ZORAS_DOMAIN 8, // QUAD_MAP_28 - 16, // QUAD_MAP_29 + 16, // QUAD_MAP_TRADE_QUEST_MARKER 32, // QUAD_MAP_30 8, // QUAD_MAP_31 }; @@ -2225,7 +2225,7 @@ static s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = { 74, // WORLD_MAP_POINT_KOKIRI_FOREST 89, // WORLD_MAP_POINT_ZORAS_DOMAIN 0, // QUAD_MAP_28 - -58, // QUAD_MAP_29 + -58, // QUAD_MAP_TRADE_QUEST_MARKER 19, // QUAD_MAP_30 28, // QUAD_MAP_31 }; @@ -2279,7 +2279,7 @@ static s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = { -9, // WORLD_MAP_POINT_KOKIRI_FOREST 25, // WORLD_MAP_POINT_ZORAS_DOMAIN 0, // QUAD_MAP_28 - 1, // QUAD_MAP_29 + 1, // QUAD_MAP_TRADE_QUEST_MARKER -32, // QUAD_MAP_30 -26, // QUAD_MAP_31 }; @@ -2434,9 +2434,9 @@ static s16 sVtxMapWorldAreaHeight[] = { }; s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 numQuads) { - static s16 D_8082B110 = 0; - static s16 D_8082B114 = 1; - static s16 D_8082B118 = 0; + static s16 sTradeQuestMarkerBobY = 0; + static s16 sTradeQuestMarkerBobTimer = 1; + static s16 sTradeQuestMarkerBobState = 0; PauseContext* pauseCtx = &play->pauseCtx; s16* quadsX; s16* quadsWidth; @@ -2556,32 +2556,32 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num bufI += 12; - if (pauseCtx->tradeQuestLocation != 0xFF) { - if (D_8082B114 == 0) { - D_8082B118++; - switch (D_8082B118) { + if (pauseCtx->tradeQuestMarker != TRADE_QUEST_MARKER_NONE) { + if (sTradeQuestMarkerBobTimer == 0) { + sTradeQuestMarkerBobState++; + switch (sTradeQuestMarkerBobState) { case 1: - D_8082B110 = 3; - D_8082B114 = 8; + sTradeQuestMarkerBobY = 3; + sTradeQuestMarkerBobTimer = 8; break; case 2: - D_8082B110 = 0; - D_8082B114 = 6; - D_8082B118 = 0; + sTradeQuestMarkerBobY = 0; + sTradeQuestMarkerBobTimer = 6; + sTradeQuestMarkerBobState = 0; break; } } else { - D_8082B114--; + sTradeQuestMarkerBobTimer--; } - j = bufIAfterPageSections + (pauseCtx->tradeQuestLocation * 4) + 64; - i = bufIAfterPageSections + 116; + j = bufIAfterPageSections + ((QUAD_MAP_WORLD_POINT_FIRST + pauseCtx->tradeQuestMarker) * 4); + i = bufIAfterPageSections + (QUAD_MAP_TRADE_QUEST_MARKER * 4); vtx[i + 0].v.ob[0] = vtx[i + 2].v.ob[0] = vtx[j + 0].v.ob[0]; vtx[i + 1].v.ob[0] = vtx[i + 3].v.ob[0] = vtx[i + 0].v.ob[0] + 8; - vtx[i + 0].v.ob[1] = vtx[i + 1].v.ob[1] = vtx[j + 0].v.ob[1] - D_8082B110 + 10; + vtx[i + 0].v.ob[1] = vtx[i + 1].v.ob[1] = vtx[j + 0].v.ob[1] - sTradeQuestMarkerBobY + 10; vtx[i + 0].v.ob[2] = vtx[i + 1].v.ob[2] = vtx[i + 2].v.ob[2] = vtx[i + 3].v.ob[2] = 0; @@ -3699,33 +3699,37 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->worldMapPoints[WORLD_MAP_POINT_ZORAS_DOMAIN] = WORLD_MAP_POINT_STATE_SHOW; } - pauseCtx->tradeQuestLocation = 0xFF; + // Trade quest marker + + pauseCtx->tradeQuestMarker = TRADE_QUEST_MARKER_NONE; i = INV_CONTENT(ITEM_TRADE_ADULT); if (LINK_AGE_IN_YEARS == YEARS_ADULT) { if ((i <= ITEM_POCKET_CUCCO) || (i == ITEM_ODD_MUSHROOM)) { - pauseCtx->tradeQuestLocation = 8; + pauseCtx->tradeQuestMarker = WORLD_MAP_POINT_KAKARIKO_VILLAGE; } if ((i == ITEM_COJIRO) || (i == ITEM_ODD_POTION)) { - pauseCtx->tradeQuestLocation = 9; + pauseCtx->tradeQuestMarker = WORLD_MAP_POINT_LOST_WOODS; } if (i == ITEM_POACHERS_SAW) { - pauseCtx->tradeQuestLocation = 2; + pauseCtx->tradeQuestMarker = WORLD_MAP_POINT_GERUDO_VALLEY; } if ((i == ITEM_BROKEN_GORONS_SWORD) || (i == ITEM_EYE_DROPS)) { - pauseCtx->tradeQuestLocation = 7; + pauseCtx->tradeQuestMarker = WORLD_MAP_POINT_DEATH_MOUNTAIN; } if (i == ITEM_PRESCRIPTION) { - pauseCtx->tradeQuestLocation = 11; + pauseCtx->tradeQuestMarker = WORLD_MAP_POINT_ZORAS_DOMAIN; } if (i == ITEM_EYEBALL_FROG) { - pauseCtx->tradeQuestLocation = 3; + pauseCtx->tradeQuestMarker = WORLD_MAP_POINT_LAKE_HYLIA; } - if ((i == ITEM_CLAIM_CHECK) && (gSaveContext.save.info.playerData.bgsFlag == 0)) { - pauseCtx->tradeQuestLocation = 7; + if ((i == ITEM_CLAIM_CHECK) && !gSaveContext.save.info.playerData.bgsFlag) { + pauseCtx->tradeQuestMarker = WORLD_MAP_POINT_DEATH_MOUNTAIN; } } + // Next state + pauseCtx->state = PAUSE_STATE_OPENING_1; break; diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h index 1ada2645a9..945e7efa8c 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h @@ -63,7 +63,7 @@ typedef enum MapQuad { // 16 to 27 follows the `WorldMapPoint` enum /* 27 */ QUAD_MAP_WORLD_POINT_LAST = QUAD_MAP_WORLD_POINT_FIRST + WORLD_MAP_POINT_MAX - 1, /* 28 */ QUAD_MAP_28, - /* 29 */ QUAD_MAP_29, + /* 29 */ QUAD_MAP_TRADE_QUEST_MARKER, /* 30 */ QUAD_MAP_30, /* 31 */ QUAD_MAP_31, /* 32 */ QUAD_MAP_WORLD_IMAGE_FIRST,