diff --git a/assets/xml/textures/icon_item_jpn_static.xml b/assets/xml/textures/icon_item_jpn_static.xml
index 95e1ea0552..f2fe854b8e 100644
--- a/assets/xml/textures/icon_item_jpn_static.xml
+++ b/assets/xml/textures/icon_item_jpn_static.xml
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/include/regs.h b/include/regs.h
index 7878d5aada..53e8053a71 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -100,6 +100,14 @@
#define R_TEXTBOX_TEXHEIGHT YREG(17)
#define R_TEXTBOX_WIDTH YREG(22)
#define R_TEXTBOX_HEIGHT YREG(23)
+#if OOT_NTSC
+#define R_KALEIDO_UNK1(i) YREG(48 + (i))
+#define R_KALEIDO_UNK2(i) YREG(50 + (i))
+#define R_KALEIDO_UNK3(i) YREG(52 + (i))
+#define R_KALEIDO_UNK4(i) YREG(54 + (i))
+#define R_KALEIDO_UNK5(i) YREG(56 + (i))
+#define R_KALEIDO_UNK6(i) YREG(58 + (i))
+#endif
#define R_TEXTBOX_ICON_XPOS YREG(71)
#define R_TEXTBOX_ICON_YPOS YREG(72)
#define R_TEXTBOX_ICON_DIMENSION YREG(75)
@@ -187,6 +195,12 @@
#define R_B_LABEL_X(i) WREG(40 + (i))
#define R_B_LABEL_Y(i) WREG(43 + (i))
#define R_A_LABEL_Z(i) WREG(46 + (i))
+#define R_KALEIDO_UNK1(i) WREG(49 + (i))
+#define R_KALEIDO_UNK2(i) WREG(52 + (i))
+#define R_KALEIDO_UNK3(i) WREG(55 + (i))
+#define R_KALEIDO_UNK4(i) WREG(58 + (i))
+#define R_KALEIDO_UNK5(i) WREG(61 + (i))
+#define R_KALEIDO_UNK6(i) WREG(64 + (i))
#endif
#define R_DGN_MINIMAP_X WREG(68)
#define R_DGN_MINIMAP_Y WREG(69)
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index ac1291e2d0..f9bfa5efdc 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -247,6 +247,22 @@ void Regs_InitDataImpl(void) {
YREG(45) = 236;
YREG(46) = 36;
YREG(47) = 0;
+
+#if OOT_NTSC
+ R_KALEIDO_UNK1(0) = -45;
+ R_KALEIDO_UNK1(1) = -48;
+ R_KALEIDO_UNK2(0) = 16;
+ R_KALEIDO_UNK2(1) = 22;
+ R_KALEIDO_UNK3(0) = -55;
+ R_KALEIDO_UNK3(1) = -53;
+ R_KALEIDO_UNK4(0) = 43;
+ R_KALEIDO_UNK4(1) = 47;
+ R_KALEIDO_UNK5(0) = -33;
+ R_KALEIDO_UNK5(1) = -42;
+ R_KALEIDO_UNK6(0) = -33;
+ R_KALEIDO_UNK6(1) = -37;
+#else
+ // Same as above, although these regs are now unused for PAL versions
YREG(48) = -45;
YREG(49) = -48;
YREG(50) = 16;
@@ -259,6 +275,8 @@ void Regs_InitDataImpl(void) {
YREG(57) = -42;
YREG(58) = -33;
YREG(59) = -37;
+#endif
+
YREG(60) = 14;
YREG(61) = -2;
YREG(62) = -2;
@@ -533,24 +551,24 @@ void Regs_InitDataImpl(void) {
R_A_LABEL_Z(0) = -380;
R_A_LABEL_Z(1) = -360;
R_A_LABEL_Z(2) = -350;
- WREG(49) = -48;
- WREG(50) = 16;
- WREG(51) = -62;
- WREG(52) = 22;
- WREG(53) = -84;
- WREG(54) = 20;
- WREG(55) = -53;
- WREG(56) = 40;
- WREG(57) = -64;
- WREG(58) = 47;
- WREG(59) = -84;
- WREG(60) = 44;
- WREG(61) = -42;
- WREG(62) = 32;
- WREG(63) = -45;
- WREG(64) = -37;
- WREG(65) = 30;
- WREG(66) = -50;
+ R_KALEIDO_UNK1(0) = -48;
+ R_KALEIDO_UNK1(1) = 16;
+ R_KALEIDO_UNK1(2) = -62;
+ R_KALEIDO_UNK2(0) = 22;
+ R_KALEIDO_UNK2(1) = -84;
+ R_KALEIDO_UNK2(2) = 20;
+ R_KALEIDO_UNK3(0) = -53;
+ R_KALEIDO_UNK3(1) = 40;
+ R_KALEIDO_UNK3(2) = -64;
+ R_KALEIDO_UNK4(0) = 47;
+ R_KALEIDO_UNK4(1) = -84;
+ R_KALEIDO_UNK4(2) = 44;
+ R_KALEIDO_UNK5(0) = -42;
+ R_KALEIDO_UNK5(1) = 32;
+ R_KALEIDO_UNK5(2) = -45;
+ R_KALEIDO_UNK6(0) = -37;
+ R_KALEIDO_UNK6(1) = 30;
+ R_KALEIDO_UNK6(2) = -50;
#endif
R_DGN_MINIMAP_X = 204;
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 2e9f652f36..0eba73593f 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
@@ -132,18 +132,49 @@ static void* sGameOverTexs[] = {
gPauseSave20Tex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex,
};
-static void* sEquipmentTexs[] =
- LANGUAGE_ARRAY(sEquipmentJPNTexs, sEquipmentENGTexs, sEquipmentGERTexs, sEquipmentFRATexs);
+#if OOT_NTSC
+#define EQUIPMENT_TEXS(language) ((language) != LANGUAGE_JPN ? sEquipmentENGTexs : sEquipmentJPNTexs)
+#define SELECT_ITEM_TEXS(language) ((language) != LANGUAGE_JPN ? sSelectItemENGTexs : sSelectItemJPNTexs)
+#define MAP_TEXS(language) ((language) != LANGUAGE_JPN ? sMapENGTexs : sMapJPNTexs)
+#define QUEST_STATUS_TEXS(language) ((language) != LANGUAGE_JPN ? sQuestStatusENGTexs : sQuestStatusJPNTexs)
+#define SAVE_TEXS(language) ((language) != LANGUAGE_JPN ? sSaveENGTexs : sSaveJPNTexs)
+#else
+static void* sEquipmentTexs[] = {
+ sEquipmentENGTexs,
+ sEquipmentGERTexs,
+ sEquipmentFRATexs,
+};
-static void* sSelectItemTexs[] =
- LANGUAGE_ARRAY(sSelectItemJPNTexs, sSelectItemENGTexs, sSelectItemGERTexs, sSelectItemFRATexs);
+static void* sSelectItemTexs[] = {
+ sSelectItemENGTexs,
+ sSelectItemGERTexs,
+ sSelectItemFRATexs,
+};
-static void* sMapTexs[] = LANGUAGE_ARRAY(sMapJPNTexs, sMapENGTexs, sMapGERTexs, sMapFRATexs);
+static void* sMapTexs[] = {
+ sMapENGTexs,
+ sMapGERTexs,
+ sMapFRATexs,
+};
-static void* sQuestStatusTexs[] =
- LANGUAGE_ARRAY(sQuestStatusJPNTexs, sQuestStatusENGTexs, sQuestStatusGERTexs, sQuestStatusFRATexs);
+static void* sQuestStatusTexs[] = {
+ sQuestStatusENGTexs,
+ sQuestStatusGERTexs,
+ sQuestStatusFRATexs,
+};
-static void* sSaveTexs[] = LANGUAGE_ARRAY(sSaveJPNTexs, sSaveENGTexs, sSaveGERTexs, sSaveFRATexs);
+static void* sSaveTexs[] = {
+ sSaveENGTexs,
+ sSaveGERTexs,
+ sSaveFRATexs,
+};
+
+#define EQUIPMENT_TEXS(language) (sEquipmentTexs[(language)])
+#define SELECT_ITEM_TEXS(language) (sSelectItemTexs[(language)])
+#define MAP_TEXS(language) (sMapTexs[(language)])
+#define QUEST_STATUS_TEXS(language) (sQuestStatusTexs[(language)])
+#define SAVE_TEXS(language) (sSaveTexs[(language)])
+#endif
s16 D_8082AAEC[] = {
32, 112, 32, 48, 32, 32, 32, 48, 32, 64, 32, 48, 48, 48, 48, 64, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 80, 64,
@@ -588,6 +619,9 @@ void KaleidoScope_SetupPageSwitch(PauseContext* pauseCtx, u8 pt) {
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT;
}
+#if OOT_NTSC
+ gSaveContext.buttonStatus[0] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][0];
+#endif
gSaveContext.buttonStatus[1] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][1];
gSaveContext.buttonStatus[2] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][2];
gSaveContext.buttonStatus[3] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][3];
@@ -832,7 +866,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx,
- sSelectItemTexs[gSaveContext.language]);
+ SELECT_ITEM_TEXS(gSaveContext.language));
KaleidoScope_DrawItemSelect(play);
}
@@ -850,7 +884,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx,
- sEquipmentTexs[gSaveContext.language]);
+ EQUIPMENT_TEXS(gSaveContext.language));
KaleidoScope_DrawEquipment(play);
}
@@ -869,7 +903,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx,
- sQuestStatusTexs[gSaveContext.language]);
+ QUEST_STATUS_TEXS(gSaveContext.language));
KaleidoScope_DrawQuestStatus(play, gfxCtx);
}
@@ -888,7 +922,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP =
- KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]);
+ KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, MAP_TEXS(gSaveContext.language));
if (sInDungeonScene) {
KaleidoScope_DrawDungeonMap(play, gfxCtx);
@@ -917,7 +951,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx,
- sSelectItemTexs[gSaveContext.language]);
+ SELECT_ITEM_TEXS(gSaveContext.language));
KaleidoScope_DrawItemSelect(play);
break;
@@ -932,7 +966,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP =
- KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]);
+ KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, MAP_TEXS(gSaveContext.language));
if (sInDungeonScene) {
KaleidoScope_DrawDungeonMap(play, gfxCtx);
@@ -964,7 +998,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx,
- sQuestStatusTexs[gSaveContext.language]);
+ QUEST_STATUS_TEXS(gSaveContext.language));
KaleidoScope_DrawQuestStatus(play, gfxCtx);
@@ -983,7 +1017,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx,
- sEquipmentTexs[gSaveContext.language]);
+ EQUIPMENT_TEXS(gSaveContext.language));
KaleidoScope_DrawEquipment(play);
@@ -1037,7 +1071,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sGameOverTexs);
} else { // PAUSE_STATE_SAVE_PROMPT
POLY_OPA_DISP =
- KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]);
+ KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, SAVE_TEXS(gSaveContext.language));
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->saveVtx[60], 32, 0);
@@ -1132,9 +1166,9 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
LANGUAGE_ARRAY(gPauseToSelectItemJPNTex, gPauseToSelectItemENGTex, gPauseToSelectItemGERTex,
gPauseToSelectItemFRATex),
};
- static u16 D_8082ADD8[3] = { 56, 88, 80 };
- static u16 D_8082ADE0[3] = { 64, 88, 72 };
- static u16 D_8082ADE8[3] = { 80, 104, 112 };
+ static u16 D_8082ADD8[] = LANGUAGE_ARRAY(56, 56, 88, 80);
+ static u16 D_8082ADE0[] = LANGUAGE_ARRAY(48, 64, 88, 72);
+ static u16 D_8082ADE8[] = LANGUAGE_ARRAY(96, 80, 104, 112);
static s16 D_8082ADF0[][4] = {
{ 180, 210, 255, 220 },
{ 100, 100, 150, 220 },
@@ -1415,13 +1449,14 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0);
if (pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) {
- pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(61 + gSaveContext.language);
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] =
+ R_KALEIDO_UNK5(gSaveContext.language);
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
- pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language);
+ pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK2(gSaveContext.language);
pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADE0[gSaveContext.language];
@@ -1461,13 +1496,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
} else {
if ((u32)pauseCtx->pageIndex == PAUSE_ITEM) {
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] =
- WREG(49 + gSaveContext.language);
+ R_KALEIDO_UNK1(gSaveContext.language);
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
pauseCtx->infoPanelVtx[16].v.ob[0] + 48;
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
- pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(58 + gSaveContext.language);
+ pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK4(gSaveContext.language);
pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADD8[gSaveContext.language];
@@ -1490,13 +1525,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
(pauseCtx->cursorSlot[PAUSE_QUEST] <= 0x11)) {
if (pauseCtx->namedItem != PAUSE_ITEM_NONE) {
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] =
- WREG(55 + gSaveContext.language);
+ R_KALEIDO_UNK3(gSaveContext.language);
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
- pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language);
+ pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK2(gSaveContext.language);
#if OOT_PAL
if (gSaveContext.language == LANGUAGE_GER) {
@@ -1523,13 +1558,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
}
} else if (pauseCtx->pageIndex == PAUSE_EQUIP) {
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] =
- WREG(64 + gSaveContext.language);
+ R_KALEIDO_UNK6(gSaveContext.language);
pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
- pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language);
+ pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK2(gSaveContext.language);
pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADD8[gSaveContext.language];
@@ -2675,7 +2710,9 @@ void KaleidoScope_UpdateCursorSize(PlayState* play) {
void KaleidoScope_LoadDungeonMap(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
+#if OOT_PAL
s32 pad;
+#endif
DMA_REQUEST_SYNC(interfaceCtx->mapSegment,
(uintptr_t)_map_48x85_staticSegmentRomStart + ((R_MAP_TEX_INDEX + 0) * MAP_48x85_TEX_SIZE),
@@ -3190,6 +3227,9 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->state = PAUSE_STATE_CLOSING;
WREG(2) = -6240;
func_800F64E0(0);
+#if OOT_NTSC
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+#endif
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
pauseCtx->nextPageMode = 0;
pauseCtx->promptChoice = 0;
@@ -3335,6 +3375,9 @@ void KaleidoScope_Update(PlayState* play) {
WREG(2) = -6240;
YREG(8) = pauseCtx->unk_204;
func_800F64E0(0);
+#if OOT_NTSC
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+#endif
} else {
Audio_PlaySfxGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
@@ -3356,6 +3399,9 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
+#if OOT_NTSC
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+#endif
}
break;