summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_actor.c9
-rw-r--r--src/code/z_construct.c28
-rw-r--r--src/code/z_elf_message.c2
-rw-r--r--src/code/z_lifemeter.c2
-rw-r--r--src/code/z_map_exp.c605
-rw-r--r--src/code/z_map_mark.c34
-rw-r--r--src/code/z_parameter.c30
-rw-r--r--src/code/z_room.c4
8 files changed, 646 insertions, 68 deletions
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index aa3b4999c..decdcc605 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -2753,11 +2753,10 @@ Actor* Actor_Spawn(ActorContext* actorCtx, GlobalContext* globalCtx, s16 actorId
overlayEntry->nbLoaded = 0;
}
- actorInit =
- (ActorInit*)((u32)(overlayEntry->initInfo != NULL
- ? (ActorInit*)((u32)overlayEntry->initInfo - (s32)((u32)overlayEntry->vramStart -
- (u32)overlayEntry->loadedRamAddr))
- : NULL));
+ actorInit = (void*)(u32)((overlayEntry->initInfo != NULL)
+ ? (void*)((u32)overlayEntry->initInfo -
+ (s32)((u32)overlayEntry->vramStart - (u32)overlayEntry->loadedRamAddr))
+ : NULL);
}
objBankIndex = Object_GetIndex(&globalCtx->objectCtx, actorInit->objectId);
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index 75ac3d50a..e6788647a 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -2,7 +2,7 @@
#include <global.h>
void func_80110990(GlobalContext* globalCtx) {
- func_80080F44(globalCtx);
+ Map_Destroy(globalCtx);
}
#ifdef NON_MATCHING
@@ -165,7 +165,7 @@ void func_801109B0(GlobalContext* globalCtx) {
osSyncPrintf("PARAMETER領域=%x\n", parameterSize + 0x5300);
Health_InitData(globalCtx);
- func_80080F68(globalCtx);
+ Map_Init(globalCtx);
interfaceCtx->unk_242 = 0;
interfaceCtx->unk_23C = 0;
@@ -483,9 +483,9 @@ void func_80111070(void) {
WREG(26) = -0x28;
WREG(27) = 0;
WREG(28) = 0;
- WREG(29) = 0xEE;
- WREG(30) = 0xA4;
- WREG(31) = 0;
+ R_OW_MINIMAP_X = 0xEE;
+ R_OW_MINIMAP_Y = 0xA4;
+ R_MINIMAP_TOGGLED = 0;
WREG(32) = 0x7A;
WREG(33) = 0x3C;
WREG(35) = 0;
@@ -520,8 +520,8 @@ void func_80111070(void) {
WREG(64) = -0x25;
WREG(65) = 0x1E;
WREG(66) = -0x32;
- WREG(68) = 0xCC;
- WREG(69) = 0x8C;
+ R_DGN_MINIMAP_X = 0xCC;
+ R_DGN_MINIMAP_Y = 0x8C;
WREG(87) = 0x50;
WREG(88) = 0x46;
WREG(89) = 0x28;
@@ -543,13 +543,13 @@ void func_80111070(void) {
VREG(7) = 0x4E;
VREG(8) = 0xA6;
VREG(9) = 0x28;
- VREG(14) = 0x20;
- VREG(15) = 0x20;
- VREG(16) = 0x6E;
- VREG(17) = -0x2E4;
- VREG(18) = 0;
- VREG(19) = 0xFF;
- VREG(20) = 0xFF;
+ R_COMPASS_SCALE_X = 0x20;
+ R_COMPASS_SCALE_Y = 0x20;
+ R_COMPASS_OFFSET_X = 0x6E;
+ R_COMPASS_OFFSET_Y = -0x2E4;
+ R_MINIMAP_COLOR(0) = 0;
+ R_MINIMAP_COLOR(1) = 0xFF;
+ R_MINIMAP_COLOR(2) = 0xFF;
}
VREG(21) = 0;
diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c
index e37756c6d..0342e8468 100644
--- a/src/code/z_elf_message.c
+++ b/src/code/z_elf_message.c
@@ -25,7 +25,7 @@ u32 ElfMessage_CheckCondition(ElfMessage* msg) {
return ((msg->byte0 & 1) == 1) == !!(gSaveContext.eventChkInf[(msg->byte1 & 0xF0) >> 4] & temp);
case 2:
return ((msg->byte0 & 1) == 1) ==
- !!(gBitFlags[msg->byte1 - ITEM_KEY_BOSS] & gSaveContext.dungeonItems[gSaveContext.dungeonIndex]);
+ !!(gBitFlags[msg->byte1 - ITEM_KEY_BOSS] & gSaveContext.dungeonItems[gSaveContext.mapIndex]);
case 4:
return ((msg->byte0 & 1) == 1) == (msg->byte3 == INV_CONTENT(msg->byte1));
case 6:
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index 9cc05db1c..63c328ce6 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -184,7 +184,7 @@ s32 func_80078E84(GlobalContext* globalCtx) {
return 0;
}
-void Interface_DrawHealth(GlobalContext* globalCtx) {
+void Health_Draw(GlobalContext* globalCtx) {
s32 pad[5];
u8* heartBgImg;
u32 curColorSet;
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index b740bba3c..6505d207d 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -1,24 +1,607 @@
#include <ultra64.h>
#include <global.h>
+#include <vt.h>
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_800807A0.s")
+MapData* gMapData;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_800807FC.s")
+s16 sPlayerInitialPosX = 0;
+s16 sPlayerInitialPosZ = 0;
+s16 sPlayerInitialDirection = 0;
+s16 sEntranceIconMapIndex = 0;
+s16 sLastRoomNum = 99;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_800808FC.s")
+void Map_SavePlayerInitialInfo(GlobalContext* globalCtx) {
+ Player* player = PLAYER;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_80080AB4.s")
+ sPlayerInitialPosX = player->actor.posRot.pos.x;
+ sPlayerInitialPosZ = player->actor.posRot.pos.z;
+ sPlayerInitialDirection = (s16)((0x7FFF - player->actor.shape.rot.y) / 0x400);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_80080E04.s")
+void Map_SetPaletteData(GlobalContext* globalCtx, s16 room) {
+ s32 mapIndex = gSaveContext.mapIndex;
+ InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+ s16 paletteNum = gMapData->roomPalette[mapIndex][room];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_80080F44.s")
+ if (interfaceCtx->mapRoomNum == room) {
+ interfaceCtx->mapPaletteNum = paletteNum;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_80080F68.s")
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ // Translates to: "PALETE Set"
+ osSyncPrintf("PALETEセット 【 i=%x : room=%x 】Room_Inf[%d][4]=%x ( map_palete_no = %d )\n", paletteNum,
+ room, mapIndex, gSaveContext.sceneFlags[mapIndex].rooms, interfaceCtx->mapPaletteNum);
+ osSyncPrintf(VT_RST);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_80081240.s")
+ interfaceCtx->unk_140[paletteNum * 2] = 2;
+ interfaceCtx->unk_140[paletteNum * 2 + 1] = 0xBF;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/Interface_DrawMinimap.s")
+void Map_SetFloorPalettesData(GlobalContext* globalCtx, s16 floor) {
+ s32 mapIndex = gSaveContext.mapIndex;
+ InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+ s16 room;
+ s16 i;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_80082248.s")
+ for (i = 0; i < 16; i++) {
+ interfaceCtx->unk_140[i] = 0;
+ interfaceCtx->unk_140[i + 16] = 0;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/func_8008226C.s")
+ if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
+ interfaceCtx->unk_140[30] = 0;
+ interfaceCtx->unk_140[31] = 1;
+ }
+
+ switch (globalCtx->sceneNum) {
+ case SCENE_YDAN:
+ case SCENE_DDAN:
+ case SCENE_BDAN:
+ case SCENE_BMORI1:
+ case SCENE_HIDAN:
+ case SCENE_MIZUSIN:
+ case SCENE_JYASINZOU:
+ case SCENE_HAKADAN:
+ case SCENE_HAKADANCH:
+ case SCENE_ICE_DOUKUTO:
+ case SCENE_YDAN_BOSS:
+ case SCENE_DDAN_BOSS:
+ case SCENE_BDAN_BOSS:
+ case SCENE_MORIBOSSROOM:
+ case SCENE_FIRE_BS:
+ case SCENE_MIZUSIN_BS:
+ case SCENE_JYASINBOSS:
+ case SCENE_HAKADAN_BS:
+ for (i = 0; i < gMapData->maxPaletteCount[mapIndex]; i++) {
+ room = gMapData->paletteRoom[mapIndex][floor][i];
+ if ((room != 0xFF) && (gSaveContext.sceneFlags[mapIndex].rooms & gBitFlags[room])) {
+ Map_SetPaletteData(globalCtx, room);
+ }
+ }
+ break;
+ }
+}
+
+void Map_InitData(GlobalContext* globalCtx, s16 room) {
+ s32 mapIndex = gSaveContext.mapIndex;
+ InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+ s16 extendedMapIndex;
+
+ switch (globalCtx->sceneNum) {
+ case SCENE_SPOT00:
+ case SCENE_SPOT01:
+ case SCENE_SPOT02:
+ case SCENE_SPOT03:
+ case SCENE_SPOT04:
+ case SCENE_SPOT05:
+ case SCENE_SPOT06:
+ case SCENE_SPOT07:
+ case SCENE_SPOT08:
+ case SCENE_SPOT09:
+ case SCENE_SPOT10:
+ case SCENE_SPOT11:
+ case SCENE_SPOT12:
+ case SCENE_SPOT13:
+ case SCENE_SPOT15:
+ case SCENE_SPOT16:
+ case SCENE_SPOT17:
+ case SCENE_SPOT18:
+ case SCENE_SPOT20:
+ case SCENE_GANON_TOU:
+ extendedMapIndex = mapIndex;
+ if (globalCtx->sceneNum == SCENE_SPOT02) {
+ if (CHECK_QUEST_ITEM(QUEST_SONG_NOCTURNE)) {
+ extendedMapIndex = 0x14;
+ }
+ } else if (globalCtx->sceneNum == SCENE_SPOT06) {
+ if ((LINK_AGE_IN_YEARS == YEARS_ADULT) && !CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER)) {
+ extendedMapIndex = 0x15;
+ }
+ } else if (globalCtx->sceneNum == SCENE_SPOT09) {
+ if ((LINK_AGE_IN_YEARS == YEARS_ADULT) && !((gSaveContext.eventChkInf[9] & 0xF) == 0xF)) {
+ extendedMapIndex = 0x16;
+ }
+ } else if (globalCtx->sceneNum == SCENE_SPOT12) {
+ if ((gSaveContext.eventChkInf[9] & 0xF) == 0xF) {
+ extendedMapIndex = 0x17;
+ }
+ }
+ osSyncPrintf(VT_FGCOL(BLUE));
+ osSyncPrintf("KKK=%d\n", extendedMapIndex);
+ osSyncPrintf(VT_RST);
+ sEntranceIconMapIndex = extendedMapIndex;
+ DmaMgr_SendRequest1(interfaceCtx->mapSegment,
+ (u32)_map_grand_staticSegmentRomStart + gMapData->owMinimapTexOffset[extendedMapIndex],
+ gMapData->owMinimapTexSize[mapIndex], "../z_map_exp.c", 309);
+ interfaceCtx->unk_258 = mapIndex;
+ break;
+ case SCENE_YDAN:
+ case SCENE_DDAN:
+ case SCENE_BDAN:
+ case SCENE_BMORI1:
+ case SCENE_HIDAN:
+ case SCENE_MIZUSIN:
+ case SCENE_JYASINZOU:
+ case SCENE_HAKADAN:
+ case SCENE_HAKADANCH:
+ case SCENE_ICE_DOUKUTO:
+ case SCENE_YDAN_BOSS:
+ case SCENE_DDAN_BOSS:
+ case SCENE_BDAN_BOSS:
+ case SCENE_MORIBOSSROOM:
+ case SCENE_FIRE_BS:
+ case SCENE_MIZUSIN_BS:
+ case SCENE_JYASINBOSS:
+ case SCENE_HAKADAN_BS:
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ // Translates to: "Deku Tree Dungeon MAP Texture DMA"
+ osSyncPrintf("デクの樹ダンジョンMAP テクスチャDMA(%x) scene_id_offset=%d VREG(30)=%d\n", room,
+ mapIndex, VREG(30));
+ osSyncPrintf(VT_RST);
+ DmaMgr_SendRequest1(globalCtx->interfaceCtx.mapSegment,
+ (u32)_map_i_staticSegmentRomStart +
+ ((gMapData->dgnMinimapTexIndexOffset[mapIndex] + room) * 0xFF0),
+ 0xFF0, "../z_map_exp.c", 346);
+ R_COMPASS_OFFSET_X = gMapData->roomCompassOffsetX[mapIndex][room];
+ R_COMPASS_OFFSET_Y = gMapData->roomCompassOffsetY[mapIndex][room];
+ Map_SetFloorPalettesData(globalCtx, VREG(30));
+ // Translates to: "MAP Individual Floor ON Check"
+ osSyncPrintf("MAP 各階ONチェック\n");
+ break;
+ }
+}
+
+void Map_InitRoomData(GlobalContext* globalCtx, s16 room) {
+ s32 mapIndex = gSaveContext.mapIndex;
+ InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+
+ osSyncPrintf("*******\n*******\nroom_no=%d (%d)(%d)\n*******\n*******\n", room,
+ mapIndex, globalCtx->sceneNum);
+
+ if (room >= 0) {
+ switch (globalCtx->sceneNum) {
+ case SCENE_YDAN:
+ case SCENE_DDAN:
+ case SCENE_BDAN:
+ case SCENE_BMORI1:
+ case SCENE_HIDAN:
+ case SCENE_MIZUSIN:
+ case SCENE_JYASINZOU:
+ case SCENE_HAKADAN:
+ case SCENE_HAKADANCH:
+ case SCENE_ICE_DOUKUTO:
+ case SCENE_YDAN_BOSS:
+ case SCENE_DDAN_BOSS:
+ case SCENE_BDAN_BOSS:
+ case SCENE_MORIBOSSROOM:
+ case SCENE_FIRE_BS:
+ case SCENE_MIZUSIN_BS:
+ case SCENE_JYASINBOSS:
+ case SCENE_HAKADAN_BS:
+ gSaveContext.sceneFlags[mapIndex].rooms |= gBitFlags[room];
+ osSyncPrintf("ROOM_INF=%d\n", gSaveContext.sceneFlags[mapIndex].rooms);
+ interfaceCtx->mapRoomNum = room;
+ interfaceCtx->unk_25A = mapIndex;
+ Map_SetPaletteData(globalCtx, room);
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("部屋部屋=%d\n", room); // "Room Room = %d"
+ osSyncPrintf(VT_RST);
+ Map_InitData(globalCtx, room);
+ break;
+ }
+ } else {
+ interfaceCtx->mapRoomNum = 0;
+ }
+
+ if (gSaveContext.unk_1422 != 2) {
+ gSaveContext.unk_1422 = 0;
+ }
+}
+
+void Map_Destroy(GlobalContext* globalCtx) {
+ MapMark_ClearPointers(globalCtx);
+ gMapData = NULL;
+}
+
+void Map_Init(GlobalContext* globalCtx) {
+ s32 mapIndex = gSaveContext.mapIndex;
+ InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+
+ gMapData = &gMapDataTable;
+
+ interfaceCtx->unk_258 = -1;
+ interfaceCtx->unk_25A = -1;
+
+ interfaceCtx->mapSegment = Game_Alloc(&globalCtx->state, 0x1000, "../z_map_exp.c", 457);
+ // Translates to "MAP TEXTURE INITIALIZATION scene_data_ID=%d mapSegment=%x"
+ osSyncPrintf("\n\n\nMAP テクスチャ初期化 scene_data_ID=%d\nmapSegment=%x\n\n", globalCtx->sceneNum,
+ interfaceCtx->mapSegment, globalCtx);
+ if (interfaceCtx->mapSegment == NULL) {
+ __assert("parameter->mapSegment != NULL", "../z_map_exp.c", 459);
+ }
+
+ switch (globalCtx->sceneNum) {
+ case SCENE_SPOT00:
+ case SCENE_SPOT01:
+ case SCENE_SPOT02:
+ case SCENE_SPOT03:
+ case SCENE_SPOT04:
+ case SCENE_SPOT05:
+ case SCENE_SPOT06:
+ case SCENE_SPOT07:
+ case SCENE_SPOT08:
+ case SCENE_SPOT09:
+ case SCENE_SPOT10:
+ case SCENE_SPOT11:
+ case SCENE_SPOT12:
+ case SCENE_SPOT13:
+ case SCENE_SPOT15:
+ case SCENE_SPOT16:
+ case SCENE_SPOT17:
+ case SCENE_SPOT18:
+ case SCENE_SPOT20:
+ case SCENE_GANON_TOU:
+ mapIndex = globalCtx->sceneNum - SCENE_SPOT00;
+ R_MAP_INDEX = gSaveContext.mapIndex = mapIndex;
+ R_COMPASS_SCALE_X = gMapData->owCompassInfo[mapIndex][0];
+ R_COMPASS_SCALE_Y = gMapData->owCompassInfo[mapIndex][1];
+ R_COMPASS_OFFSET_X = gMapData->owCompassInfo[mapIndex][2];
+ R_COMPASS_OFFSET_Y = gMapData->owCompassInfo[mapIndex][3];
+ Map_InitData(globalCtx, mapIndex);
+ R_OW_MINIMAP_X = gMapData->owMinimapPosX[mapIndex];
+ R_OW_MINIMAP_Y = gMapData->owMinimapPosY[mapIndex];
+ break;
+ case SCENE_YDAN:
+ case SCENE_DDAN:
+ case SCENE_BDAN:
+ case SCENE_BMORI1:
+ case SCENE_HIDAN:
+ case SCENE_MIZUSIN:
+ case SCENE_JYASINZOU:
+ case SCENE_HAKADAN:
+ case SCENE_HAKADANCH:
+ case SCENE_ICE_DOUKUTO:
+ case SCENE_GANON:
+ case SCENE_MEN:
+ case SCENE_GERUDOWAY:
+ case SCENE_GANONTIKA:
+ case SCENE_GANON_SONOGO:
+ case SCENE_GANONTIKA_SONOGO:
+ case SCENE_TAKARAYA:
+ case SCENE_YDAN_BOSS:
+ case SCENE_DDAN_BOSS:
+ case SCENE_BDAN_BOSS:
+ case SCENE_MORIBOSSROOM:
+ case SCENE_FIRE_BS:
+ case SCENE_MIZUSIN_BS:
+ case SCENE_JYASINBOSS:
+ case SCENE_HAKADAN_BS:
+ mapIndex =
+ (globalCtx->sceneNum >= SCENE_YDAN_BOSS) ? globalCtx->sceneNum - SCENE_YDAN_BOSS : globalCtx->sceneNum;
+ R_MAP_INDEX = gSaveContext.mapIndex = mapIndex;
+ if ((globalCtx->sceneNum <= SCENE_ICE_DOUKUTO) || (globalCtx->sceneNum >= SCENE_YDAN_BOSS)) {
+ R_COMPASS_SCALE_X = gMapData->dgnCompassInfo[mapIndex][0];
+ R_COMPASS_SCALE_Y = gMapData->dgnCompassInfo[mapIndex][1];
+ R_COMPASS_OFFSET_X = gMapData->dgnCompassInfo[mapIndex][2];
+ R_COMPASS_OFFSET_Y = gMapData->dgnCompassInfo[mapIndex][3];
+ R_MAP_TEX_INDEX = R_MAP_TEX_INDEX_BASE = gMapData->dgnMinimapTexIndexBase[mapIndex];
+ Map_InitRoomData(globalCtx, globalCtx->roomCtx.curRoom.num);
+ MapMark_Init(globalCtx);
+ }
+ break;
+ }
+}
+
+#ifdef NON_MATCHING
+// regalloc and minor ordering differences
+void Minimap_DrawCompassIcons(GlobalContext* globalCtx) {
+ GraphicsContext* gfxCtx;
+ Player* player = PLAYER;
+ s16 tempX, tempY, tempZ;
+ Gfx* dispRefs[4];
+
+ gfxCtx = globalCtx->state.gfxCtx;
+ Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_map_exp.c", 565);
+
+ if (globalCtx->interfaceCtx.minimapAlpha >= 0xAA) {
+ func_80094A14(globalCtx->state.gfxCtx);
+
+ gSPMatrix(gfxCtx->overlay.p++, &gMtxClear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetCombineLERP(gfxCtx->overlay.p++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(gfxCtx->overlay.p++, 0x00, 0x00, 0x00, 0xFF);
+ gDPSetCombineMode(gfxCtx->overlay.p++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+
+ tempX = player->actor.posRot.pos.x;
+ tempZ = player->actor.posRot.pos.z;
+ tempX /= R_COMPASS_SCALE_X;
+ tempZ /= R_COMPASS_SCALE_Y;
+ Matrix_Translate((R_COMPASS_OFFSET_X + tempX) / 10.0f, (R_COMPASS_OFFSET_Y - tempZ) / 10.0f, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY);
+ Matrix_RotateX(-1.6f, MTXMODE_APPLY);
+ tempY = (0x7FFF - player->actor.shape.rot.y) / 0x400;
+ Matrix_RotateY(tempY / 10.0f, MTXMODE_APPLY);
+ gSPMatrix(gfxCtx->overlay.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_map_exp.c", 585),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gDPSetPrimColor(gfxCtx->overlay.p++, 0, 0, 0xC8, 0xFF, 0x00, 0xFF);
+ gSPDisplayList(gfxCtx->overlay.p++, D_0400C820);
+
+ tempX = sPlayerInitialPosX;
+ tempZ = sPlayerInitialPosZ;
+ tempX /= R_COMPASS_SCALE_X;
+ tempZ /= R_COMPASS_SCALE_Y;
+ Matrix_Translate((R_COMPASS_OFFSET_X + tempX) / 10.0f, (R_COMPASS_OFFSET_Y - tempZ) / 10.0f, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(VREG(9) / 100.0f, VREG(9) / 100.0f, VREG(9) / 100.0f, MTXMODE_APPLY);
+ Matrix_RotateX(VREG(52) / 10.0f, MTXMODE_APPLY);
+ Matrix_RotateY(sPlayerInitialDirection / 10.0f, MTXMODE_APPLY);
+ gSPMatrix(gfxCtx->overlay.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_map_exp.c", 603),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gDPSetPrimColor(gfxCtx->overlay.p++, 0, 0xFF, 0xC8, 0x00, 0x00, 0xFF);
+ gSPDisplayList(gfxCtx->overlay.p++, D_0400C820);
+ }
+
+ Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_map_exp.c", 607);
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/Minimap_DrawCompassIcons.s")
+#endif
+
+void Minimap_Draw(GlobalContext* globalCtx) {
+ s32 pad[2];
+ InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+ s32 mapIndex = gSaveContext.mapIndex;
+ GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
+ Gfx* dispRefs[4];
+
+ Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_map_exp.c", 626);
+
+ if (globalCtx->pauseCtx.state < 4) {
+ switch (globalCtx->sceneNum) {
+ case SCENE_YDAN:
+ case SCENE_DDAN:
+ case SCENE_BDAN:
+ case SCENE_BMORI1:
+ case SCENE_HIDAN:
+ case SCENE_MIZUSIN:
+ case SCENE_JYASINZOU:
+ case SCENE_HAKADAN:
+ case SCENE_HAKADANCH:
+ case SCENE_ICE_DOUKUTO:
+ if (!R_MINIMAP_TOGGLED) {
+ func_80094520(globalCtx->state.gfxCtx);
+ gDPSetCombineLERP(gfxCtx->overlay.p++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE,
+ 0, TEXEL0, 0, PRIMITIVE, 0);
+
+ if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
+ gDPSetPrimColor(gfxCtx->overlay.p++, 0, 0, 0x64, 0xFF, 0xFF, interfaceCtx->minimapAlpha);
+
+ gDPLoadTextureBlock_4b(gfxCtx->overlay.p++, interfaceCtx->mapSegment, G_IM_FMT_I, 96, 85, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(gfxCtx->overlay.p++, R_DGN_MINIMAP_X << 2, R_DGN_MINIMAP_Y << 2,
+ (R_DGN_MINIMAP_X + 96) << 2, (R_DGN_MINIMAP_Y + 85) << 2, G_TX_RENDERTILE,
+ 0, 0, 1024, 1024);
+ }
+
+ if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_COMPASS]) {
+ Minimap_DrawCompassIcons(globalCtx); // Draw icons for the player spawn and current position
+ func_80094520(globalCtx->state.gfxCtx);
+ MapMark_DrawConditionally(globalCtx);
+ }
+ }
+
+ if (!~(globalCtx->state.input[0].press.in.button | ~L_TRIG) && !Gameplay_InCsMode(globalCtx)) {
+ osSyncPrintf("Game_play_demo_mode_check=%d\n", Gameplay_InCsMode(globalCtx));
+ // clang-format off
+ if (!R_MINIMAP_TOGGLED) { Audio_PlaySoundGeneral(NA_SE_SY_CAMERA_ZOOM_UP, &D_801333D4, 4,
+ &D_801333E0, &D_801333E0, &D_801333E8); }
+ else { Audio_PlaySoundGeneral(NA_SE_SY_CAMERA_ZOOM_DOWN, &D_801333D4, 4,
+ &D_801333E0, &D_801333E0, &D_801333E8); }
+ // clang-format on
+ R_MINIMAP_TOGGLED ^= 1;
+ }
+
+ break;
+ case SCENE_SPOT00:
+ case SCENE_SPOT01:
+ case SCENE_SPOT02:
+ case SCENE_SPOT03:
+ case SCENE_SPOT04:
+ case SCENE_SPOT05:
+ case SCENE_SPOT06:
+ case SCENE_SPOT07:
+ case SCENE_SPOT08:
+ case SCENE_SPOT09:
+ case SCENE_SPOT10:
+ case SCENE_SPOT11:
+ case SCENE_SPOT12:
+ case SCENE_SPOT13:
+ case SCENE_SPOT15:
+ case SCENE_SPOT16:
+ case SCENE_SPOT17:
+ case SCENE_SPOT18:
+ case SCENE_SPOT20:
+ case SCENE_GANON_TOU:
+ if (!R_MINIMAP_TOGGLED) {
+ func_80094520(globalCtx->state.gfxCtx);
+
+ gDPSetCombineMode(gfxCtx->overlay.p++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfxCtx->overlay.p++, 0, 0, R_MINIMAP_COLOR(0), R_MINIMAP_COLOR(1),
+ R_MINIMAP_COLOR(2), interfaceCtx->minimapAlpha);
+
+ gDPLoadTextureBlock_4b(gfxCtx->overlay.p++, interfaceCtx->mapSegment, G_IM_FMT_IA,
+ gMapData->owMinimapWidth[mapIndex], gMapData->owMinimapHeight[mapIndex], 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(gfxCtx->overlay.p++, R_OW_MINIMAP_X << 2, R_OW_MINIMAP_Y << 2,
+ (R_OW_MINIMAP_X + gMapData->owMinimapWidth[mapIndex]) << 2,
+ (R_OW_MINIMAP_Y + gMapData->owMinimapHeight[mapIndex]) << 2, G_TX_RENDERTILE, 0,
+ 0, 1024, 1024);
+
+ if (((globalCtx->sceneNum != SCENE_SPOT01) && (globalCtx->sceneNum != SCENE_SPOT04) &&
+ (globalCtx->sceneNum != SCENE_SPOT08)) ||
+ (LINK_AGE_IN_YEARS != YEARS_ADULT)) {
+ if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
+ ((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
+ (gSaveContext.infTable[26] & gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
+
+ gDPLoadTextureBlock(gfxCtx->overlay.p++, D_02002500, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 8, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(gfxCtx->overlay.p++,
+ gMapData->owEntranceIconPosX[sEntranceIconMapIndex] << 2,
+ gMapData->owEntranceIconPosY[sEntranceIconMapIndex] << 2,
+ (gMapData->owEntranceIconPosX[sEntranceIconMapIndex] + 8) << 2,
+ (gMapData->owEntranceIconPosY[sEntranceIconMapIndex] + 8) << 2,
+ G_TX_RENDERTILE, 0, 0, 1024, 1024);
+ }
+ }
+
+ if ((globalCtx->sceneNum == SCENE_SPOT08) && (gSaveContext.infTable[26] & gBitFlags[9])) {
+ gDPLoadTextureBlock(gfxCtx->overlay.p++, D_02002500, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 8, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(gfxCtx->overlay.p++, 1080, 616, 1112, 648, G_TX_RENDERTILE, 0, 0, 1024,
+ 1024);
+ }
+
+ Minimap_DrawCompassIcons(globalCtx); // Draw icons for the player spawn and current position
+ }
+
+ if (!~(globalCtx->state.input[0].press.in.button | ~L_TRIG) && !Gameplay_InCsMode(globalCtx)) {
+ // clang-format off
+ if (!R_MINIMAP_TOGGLED) { Audio_PlaySoundGeneral(NA_SE_SY_CAMERA_ZOOM_UP, &D_801333D4, 4,
+ &D_801333E0, &D_801333E0, &D_801333E8); }
+ else { Audio_PlaySoundGeneral(NA_SE_SY_CAMERA_ZOOM_DOWN, &D_801333D4, 4,
+ &D_801333E0, &D_801333E0, &D_801333E8); }
+ // clang-format on
+ R_MINIMAP_TOGGLED ^= 1;
+ }
+
+ break;
+ }
+ }
+
+ Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_map_exp.c", 782);
+}
+
+s16 Map_GetFloorTextIndexOffset(s32 mapIndex, s32 floor) {
+ return gMapData->floorTexIndexOffset[mapIndex][floor];
+}
+
+#ifdef NON_MATCHING
+// single extra load instruction
+void Map_Update(GlobalContext* globalCtx) {
+ Player* player = PLAYER;
+ s32 mapIndex = gSaveContext.mapIndex;
+ InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+ s16 floor;
+ s16 i;
+
+ if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.flag == 0)) {
+ switch (globalCtx->sceneNum) {
+ case SCENE_YDAN:
+ case SCENE_DDAN:
+ case SCENE_BDAN:
+ case SCENE_BMORI1:
+ case SCENE_HIDAN:
+ case SCENE_MIZUSIN:
+ case SCENE_JYASINZOU:
+ case SCENE_HAKADAN:
+ case SCENE_HAKADANCH:
+ case SCENE_ICE_DOUKUTO:
+ case SCENE_GANON:
+ case SCENE_MEN:
+ case SCENE_GERUDOWAY:
+ case SCENE_GANONTIKA:
+ case SCENE_GANON_SONOGO:
+ case SCENE_GANONTIKA_SONOGO:
+ case SCENE_TAKARAYA:
+ interfaceCtx->unk_140[30] = 0;
+ if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
+ interfaceCtx->unk_140[31] = 1;
+ } else {
+ interfaceCtx->unk_140[31] = 0;
+ }
+
+ for (floor = 0; floor < 8; floor++) {
+ if (player->actor.posRot.pos.y > gMapData->floorCoordY[mapIndex][floor]) {
+ break;
+ }
+ }
+
+ if (1) { // Appears to be necessary to match
+ gSaveContext.sceneFlags[mapIndex].floors |= gBitFlags[floor];
+ VREG(30) = floor;
+ if (R_MAP_TEX_INDEX != (R_MAP_TEX_INDEX_BASE + Map_GetFloorTextIndexOffset(mapIndex, floor))) {
+ R_MAP_TEX_INDEX = R_MAP_TEX_INDEX_BASE + Map_GetFloorTextIndexOffset(mapIndex, floor);
+ }
+ }
+
+ if (interfaceCtx->mapRoomNum != sLastRoomNum) {
+ // Translates to "Current floor = %d Current room = %x Number of rooms = %d"
+ osSyncPrintf("現在階=%d 現在部屋=%x 部屋数=%d\n", floor, interfaceCtx->mapRoomNum,
+ gMapData->switchEntryCount[mapIndex]);
+ if (interfaceCtx->mapRoomNum) {} // Improves codegen but may not be necessary
+ sLastRoomNum = interfaceCtx->mapRoomNum;
+ }
+
+ for (i = 0; i < gMapData->switchEntryCount[mapIndex]; i++) {
+ if ((interfaceCtx->mapRoomNum == gMapData->switchFromRoom[mapIndex][i]) &&
+ (floor == gMapData->switchFromFloor[mapIndex][i])) {
+ interfaceCtx->mapRoomNum = gMapData->switchToRoom[mapIndex][i];
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("階層切替=%x\n", interfaceCtx->mapRoomNum); // "Layer switching = %x"
+ osSyncPrintf(VT_RST);
+ Map_InitData(globalCtx, interfaceCtx->mapRoomNum);
+ gSaveContext.unk_1422 = 0;
+ Map_SavePlayerInitialInfo(globalCtx);
+ }
+ }
+
+ VREG(10) = interfaceCtx->mapRoomNum;
+ break;
+ case SCENE_YDAN_BOSS:
+ case SCENE_DDAN_BOSS:
+ case SCENE_BDAN_BOSS:
+ case SCENE_MORIBOSSROOM:
+ case SCENE_FIRE_BS:
+ case SCENE_MIZUSIN_BS:
+ case SCENE_JYASINBOSS:
+ case SCENE_HAKADAN_BS:
+ VREG(30) = gMapData->bossFloor[globalCtx->sceneNum - SCENE_YDAN_BOSS];
+ R_MAP_TEX_INDEX = R_MAP_TEX_INDEX_BASE +
+ gMapData->floorTexIndexOffset[globalCtx->sceneNum - SCENE_YDAN_BOSS][VREG(30)];
+ break;
+ }
+ }
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_exp/Map_Update.s")
+#endif
diff --git a/src/code/z_map_mark.c b/src/code/z_map_mark.c
index 8fdef5d0c..798ec5874 100644
--- a/src/code/z_map_mark.c
+++ b/src/code/z_map_mark.c
@@ -18,9 +18,9 @@ typedef struct {
/* 0x00 */ void* loadedRamAddr; // original name: "allocp"
/* 0x04 */ u32 vromStart;
/* 0x08 */ u32 vromEnd;
- /* 0x0C */ u32 vramStart;
- /* 0x10 */ u32 vramEnd;
- /* 0x14 */ u32 vramTable;
+ /* 0x0C */ void* vramStart;
+ /* 0x10 */ void* vramEnd;
+ /* 0x14 */ void* vramTable;
} MapMarkDataOverlay; // size = 0x18
static u32 sBaseImageSizes[] = { 0, 1, 2, 3 };
@@ -46,18 +46,16 @@ static MapMarkDataOverlay sMapMarkDataOvl = {
NULL,
(u32)_ovl_map_mark_dataSegmentRomStart,
(u32)_ovl_map_mark_dataSegmentRomEnd,
- (u32)_ovl_map_mark_dataSegmentStart,
- (u32)_ovl_map_mark_dataSegmentEnd,
- (u32)gMapMarkDataTable,
+ _ovl_map_mark_dataSegmentStart,
+ _ovl_map_mark_dataSegmentEnd,
+ gMapMarkDataTable,
};
static MapMarksData** sLoadedMarkDataTable;
-extern u8** D_8015FFD0;
-
void MapMark_Init(GlobalContext* globalCtx) {
MapMarkDataOverlay* overlay = &sMapMarkDataOvl;
- u32 overlaySize = overlay->vramEnd - overlay->vramStart;
+ u32 overlaySize = (u32)overlay->vramEnd - (u32)overlay->vramStart;
overlay->loadedRamAddr = Game_Alloc(&globalCtx->state, overlaySize, "../z_map_mark.c", 235);
LogUtils_CheckNullPointer("dlftbl->allocp", overlay->loadedRamAddr, "../z_map_mark.c", 236);
@@ -65,10 +63,10 @@ void MapMark_Init(GlobalContext* globalCtx) {
Overlay_Load(overlay->vromStart, overlay->vromEnd, overlay->vramStart, overlay->vramEnd, overlay->loadedRamAddr);
sLoadedMarkDataTable = gMapMarkDataTable;
- sLoadedMarkDataTable =
- (void*)(s32)((overlay->vramTable != 0)
- ? (void*)(overlay->vramTable - (s32)(overlay->vramStart - (s32)overlay->loadedRamAddr))
- : NULL);
+ sLoadedMarkDataTable = (void*)(u32)(
+ (overlay->vramTable != NULL)
+ ? (void*)((u32)overlay->vramTable - (s32)((u32)overlay->vramStart - (u32)overlay->loadedRamAddr))
+ : NULL);
}
void MapMark_ClearPointers(GlobalContext* globalCtx) {
@@ -81,24 +79,24 @@ void MapMark_Draw(GlobalContext* globalCtx) {
MapMarkData* mapMarkData;
MapMarkPoint* markPoint;
MapMarkInfo* markInfo;
- u16 dungeonId;
+ u16 dungeon;
s32 i;
s32 rectLeft;
s32 rectTop;
GraphicsContext* gfxCtx;
Gfx* dispRefs[4];
- dungeonId = gSaveContext.dungeonIndex;
+ dungeon = gSaveContext.mapIndex;
interfaceCtx = &globalCtx->interfaceCtx;
- if ((D_8015FFD0 != NULL) && (globalCtx->interfaceCtx.roomNum >= D_8015FFD0[7][dungeonId])) {
+ if ((gMapData != NULL) && (globalCtx->interfaceCtx.mapRoomNum >= gMapData->dgnMinimapCount[dungeon])) {
// Translates to: "ROOM NUMBER EXCEEDED, YIKES %d/%d MapMarkDraw PROCESSING INTERRUPTED"
osSyncPrintf(VT_COL(RED, WHITE) "部屋番号がオーバーしてるで,ヤバイで %d/%d \nMapMarkDraw の処理を中断します\n",
- VT_RST, globalCtx->interfaceCtx.roomNum, D_8015FFD0[7][dungeonId]);
+ VT_RST, globalCtx->interfaceCtx.mapRoomNum, gMapData->dgnMinimapCount[dungeon]);
return;
}
- mapMarkData = &sLoadedMarkDataTable[dungeonId][interfaceCtx->roomNum][0];
+ mapMarkData = &sLoadedMarkDataTable[dungeon][interfaceCtx->mapRoomNum][0];
gfxCtx = globalCtx->state.gfxCtx;
Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_map_mark.c", 303);
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 860678a28..5c32f70c2 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -1413,14 +1413,14 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
gSaveContext.equipment |= (gBitFlags[item - ITEM_BOOTS_KOKIRI] << gEquipShifts[EQUIP_BOOTS]);
return ITEM_NONE;
} else if ((item == ITEM_KEY_BOSS) || (item == ITEM_COMPASS) || (item == ITEM_DUNGEON_MAP)) {
- gSaveContext.dungeonItems[gSaveContext.dungeonIndex] |= gBitFlags[item - ITEM_KEY_BOSS];
+ gSaveContext.dungeonItems[gSaveContext.mapIndex] |= gBitFlags[item - ITEM_KEY_BOSS];
return ITEM_NONE;
} else if (item == ITEM_KEY_SMALL) {
- if (gSaveContext.dungeonKeys[gSaveContext.dungeonIndex] < 0) {
- gSaveContext.dungeonKeys[gSaveContext.dungeonIndex] = 1;
+ if (gSaveContext.dungeonKeys[gSaveContext.mapIndex] < 0) {
+ gSaveContext.dungeonKeys[gSaveContext.mapIndex] = 1;
return ITEM_NONE;
} else {
- gSaveContext.dungeonKeys[gSaveContext.dungeonIndex]++;
+ gSaveContext.dungeonKeys[gSaveContext.mapIndex]++;
return ITEM_NONE;
}
} else if ((item == ITEM_QUIVER_30) || (item == ITEM_BOW)) {
@@ -2130,9 +2130,8 @@ void Interface_SetNaviCall(GlobalContext* globalCtx, u16 naviCallState) {
if (((naviCallState == 0x1D) || (naviCallState == 0x1E)) && !interfaceCtx->naviCalling &&
(globalCtx->csCtx.state == 0)) {
// clang-format off
- // NOLINTNEXTLINE
- if (naviCallState == 0x1E) Audio_PlaySoundGeneral(NA_SE_VO_NAVY_CALL, &D_801333D4, 4,
- &D_801333E0, &D_801333E0, &D_801333E8);
+ if (naviCallState == 0x1E) { Audio_PlaySoundGeneral(NA_SE_VO_NAVY_CALL, &D_801333D4, 4,
+ &D_801333E0, &D_801333E0, &D_801333E8); }
// clang-format on
if (naviCallState == 0x1D) {
@@ -2178,10 +2177,9 @@ s32 Health_ChangeBy(GlobalContext* globalCtx, s16 healthChange) {
gSaveContext.healthCapacity);
// clang-format off
- // NOLINTNEXTLINE
- if (healthChange > 0) Audio_PlaySoundGeneral(NA_SE_SY_HP_RECOVER, &D_801333D4, 4,
- &D_801333E0, &D_801333E0, &D_801333E8);
- else if ((gSaveContext.doubleDefense != 0) && (healthChange < 0)) {
+ if (healthChange > 0) { Audio_PlaySoundGeneral(NA_SE_SY_HP_RECOVER, &D_801333D4, 4,
+ &D_801333E0, &D_801333E0, &D_801333E8);
+ } else if ((gSaveContext.doubleDefense != 0) && (healthChange < 0)) {
healthChange >>= 1;
// Translates to: "Heart decrease halved!!=%d"
osSyncPrintf("ハート減少半分!!=%d\n", healthChange);
@@ -3161,7 +3159,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
if (pauseCtx->flag == 0) {
Interface_InitVertices(globalCtx);
func_8008A994(interfaceCtx);
- Interface_DrawHealth(globalCtx);
+ Health_Draw(globalCtx);
func_80094520(globalCtx->state.gfxCtx);
@@ -3185,7 +3183,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
case SCENE_GANON_SONOGO:
case SCENE_GANONTIKA_SONOGO:
case SCENE_TAKARAYA:
- if (gSaveContext.dungeonKeys[gSaveContext.dungeonIndex] >= 0) {
+ if (gSaveContext.dungeonKeys[gSaveContext.mapIndex] >= 0) {
// Small Key Icon
gDPPipeSync(gfxCtx->overlay.p++);
gDPSetPrimColor(gfxCtx->overlay.p++, 0, 0, 0xC8, 0xE6, 0xFF, interfaceCtx->magicAlpha);
@@ -3200,7 +3198,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
interfaceCtx->counterDigits[2] = 0;
- interfaceCtx->counterDigits[3] = gSaveContext.dungeonKeys[gSaveContext.dungeonIndex];
+ interfaceCtx->counterDigits[3] = gSaveContext.dungeonKeys[gSaveContext.mapIndex];
while (interfaceCtx->counterDigits[3] >= 10) {
interfaceCtx->counterDigits[2]++;
@@ -3268,7 +3266,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
}
Interface_DrawMagicBar(globalCtx);
- Interface_DrawMinimap(globalCtx);
+ Minimap_Draw(globalCtx);
if ((R_PAUSE_MENU_MODE != 2) && (R_PAUSE_MENU_MODE != 3)) {
func_8002C124(&globalCtx->actorCtx.targetCtx, globalCtx); // Draw Z-Target
@@ -4099,7 +4097,7 @@ void Interface_Update(GlobalContext* globalCtx) {
break;
}
- func_8008226C(globalCtx);
+ Map_Update(globalCtx);
if (gSaveContext.healthAccumulator != 0) {
gSaveContext.healthAccumulator -= 4;
diff --git a/src/code/z_room.c b/src/code/z_room.c
index 600f4e014..9fcd433f8 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -655,9 +655,9 @@ void func_80097534(GlobalContext* globalCtx, RoomContext* roomCtx) {
roomCtx->prevRoom.segment = NULL;
func_80031B14(globalCtx, &globalCtx->actorCtx);
Actor_SpawnTransitionActors(globalCtx, &globalCtx->actorCtx);
- func_80080E04(globalCtx, roomCtx->curRoom.num);
+ Map_InitRoomData(globalCtx, roomCtx->curRoom.num);
if (!((globalCtx->sceneNum >= SCENE_SPOT00) && (globalCtx->sceneNum <= SCENE_SPOT20))) {
- func_800807A0(globalCtx);
+ Map_SavePlayerInitialInfo(globalCtx);
}
func_800F66C0(globalCtx->roomCtx.curRoom.echo);
}