diff options
| author | mzxrules <mzxrules@gmail.com> | 2022-08-18 05:12:23 -0400 |
|---|---|---|
| committer | mzxrules <mzxrules@gmail.com> | 2022-08-18 05:12:23 -0400 |
| commit | 1da0fa1ac5c451e2c1ec7c497237e9549c28ba33 (patch) | |
| tree | ca2de7430eb066834636cb28046afc46a1c94e7e /src/code | |
| parent | 64bced7853fe1362afb93d399a6d66831d525401 (diff) | |
More OKs, split map_data.data, more doc
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/z_map_data.c | 18 | ||||
| -rw-r--r-- | src/code/z_map_disp.c | 128 |
2 files changed, 63 insertions, 83 deletions
diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index 11b0a0130..da5309f7f 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -2,7 +2,7 @@ #include "z64map.h" extern Color_RGBA8 D_801BED40[]; -extern T_801BED4C D_801BED4C[]; +extern T_801BED4C D_801BED4C[5]; extern T_801BF170 D_801BED88[]; extern s32 D_801BEFC8[]; extern s32 D_801BF15C[5]; @@ -245,7 +245,7 @@ s32 func_80109BF4(s32 arg0) { return 2; } if (arg0 < 0x3A) { - return 1; + return MAPDATA_SOURCE_MAP_I_STATIC; } if (arg0 >= 0x3A) { return 0; @@ -260,7 +260,7 @@ s32 func_80109C38(s32 arg0) { switch (func_80109BF4(arg0)) { case 0: return func_80109670(arg0 + 0xC6); - case 1: + case MAPDATA_SOURCE_MAP_I_STATIC: return func_80109A40(arg0); case 2: return 0; @@ -276,7 +276,7 @@ s32 MapData_GetIMapSize(s32 arg0) { switch (func_80109BF4(arg0)) { case 0: return func_801096D4(arg0 + 0xC6); - case 1: + case MAPDATA_SOURCE_MAP_I_STATIC: return func_80109A98(arg0); case 2: return 0; @@ -295,7 +295,7 @@ void func_80109D40(s32 arg0, s32* arg1, s32* arg2) { case 0: func_801095AC(arg0 + 0xC6, arg1, arg2); return; - case 1: + case MAPDATA_SOURCE_MAP_I_STATIC: func_8010997C(arg0, arg1, arg2); return; case 2: @@ -318,7 +318,7 @@ void func_80109DD8(s32 arg0, s32* arg1, s32* arg2) { case 0: func_801095DC(arg0 + 0xC6, arg1, arg2); return; - case 1: + case MAPDATA_SOURCE_MAP_I_STATIC: func_801099AC(arg0, arg1, arg2); return; case 2: @@ -338,7 +338,7 @@ void func_80109E70(s32 arg0, s32* arg1) { case 0: func_8010960C(arg0 + 0xC6, arg1); return; - case 1: + case MAPDATA_SOURCE_MAP_I_STATIC: func_801099DC(arg0, arg1); return; case 2: @@ -355,7 +355,7 @@ u8 func_80109EF8(s32 arg0) { switch (func_80109BF4(arg0)) { case 0: return func_80109630(arg0 + 0xC6); - case 1: + case MAPDATA_SOURCE_MAP_I_STATIC: return func_80109A00(arg0); case 2: default: @@ -370,7 +370,7 @@ s16 func_80109F78(s32 arg0) { switch (func_80109BF4(arg0)) { case 0: return func_80109650(arg0 + 0xC6); - case 1: + case MAPDATA_SOURCE_MAP_I_STATIC: return func_80109A20(arg0); case 2: default: diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 1f9faab6e..09c54f321 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -2,22 +2,6 @@ void MapDisp_DestroyIMap(PlayState* play); void MapDisp_InitIMap(PlayState* play); -void func_80103090(MinimapEntry*, s32*, s32*); -void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot); -void func_80106644(PlayState* play, s32 x, s32 z, s32 rot); -s32 func_801039EC(PlayState* play); -void func_80103A58(PlayState* play, Actor* actor); - -void func_80106D5C(PlayState*, s32, s32, s32, s32, f32, s32); -void func_80107B78(PlayState*, s32, s32, s32, s32, f32); -void func_80108124(PlayState*, s32, s32, s32, s32, f32, s32); -void func_80108558(PlayState*, s32, s32, s32, s32, f32, s32); -s32 func_80108A64(PlayState*); -s32 func_80109BA0(s32); -s16 func_80109F78(s32); - -void func_80109D40(s32, s32*, s32*, void*); -void func_80109DD8(s32, s32*, s32*); extern s32 D_801BEAD0[4]; // G_IM_SIZ extern s32 D_801BEAE0[4]; // siz_LOAD_BLOCK @@ -54,9 +38,9 @@ extern TexturePtr D_02003F20; extern Gfx D_0401ED00[]; extern TexturePtr D_0C000000; -void func_80102E40(s32 arg0, s32 arg1) { - if (func_80109A98(arg1) != 0) { - func_80178E3C(SEGMENT_ROM_START(map_i_static), arg1, arg0, func_80109A98(arg1)); +void MapDisp_GetIMapTexture(void* dst, s32 iMapId) { + if (func_80109A98(iMapId) != 0) { + func_80178E3C(SEGMENT_ROM_START(map_i_static), iMapId, dst, func_80109A98(iMapId)); } } @@ -210,10 +194,13 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg } } #else +void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801031D0.s") #endif -s32 func_801039EC(PlayState *play) { +// Tests if the map data should be rotated 180 degrees +// SCENE_35TAKI is the only scene with data flipped in this manner. +s32 MapDisp_IsDataRotated(PlayState *play) { if (play->sceneNum == SCENE_35TAKI) { return true; } @@ -278,7 +265,7 @@ void func_80103A58(PlayState *play, Actor *actor) { var_v0 = spAC; } spC0 = 1.0f / (f32) var_v0; - if (func_801039EC(play) == 0) { + if (!MapDisp_IsDataRotated(play)) { spD8 = (s32) ((actor->world.pos.x - (f32) spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 + spD0; spD4 = (s32) ((actor->world.pos.z - (f32) spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE - D_801BEBB8.unkA + spCC; } else { @@ -299,7 +286,7 @@ void func_80103A58(PlayState *play, Actor *actor) { Matrix_Translate((f32) spD8 - 160.0f, 120.0f - (f32) spD4, 0.0f, MTXMODE_NEW); Matrix_RotateXFApply(-1.6f); spA2 = (s32) (0x7FFF - actor->focus.rot.y) / 1024; - if (func_801039EC(play) != 0) { + if (MapDisp_IsDataRotated(play)) { spA2 += 0x7FFF; } Matrix_RotateYF((f32) spA2 / 10.0f, MTXMODE_APPLY); @@ -367,6 +354,7 @@ void func_80103A58(PlayState *play, Actor *actor) { } } #else +void func_80103A58(PlayState* play, Actor* actor); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A58.s") #endif @@ -433,7 +421,7 @@ void func_801045AC(PlayState* play, Actor* actor) { var_v1 = sp4C; } sp5C = 1.0f / var_v1; - if (func_801039EC(play) == 0) { + if (!MapDisp_IsDataRotated(play)) { sp78 = (((s32) ((actor->world.pos.x - sp7C->unk2) * sp5C) + D_801BEBB8.unk8 + D_801BEBB8.unkC) - D_801BEBB8.unk8) + sp70; sp74 = (((s32) ((actor->world.pos.z - sp7C->unk6) * sp5C) + D_801BEBB8.unkA + D_801BEBB8.unkE) - D_801BEBB8.unkA) + sp6C; } else { @@ -509,7 +497,6 @@ void func_80104C80(PlayState* play) { if (&play->objectCtx) {} } -//init void MapDisp_Init(PlayState* play) { s32 i; @@ -680,7 +667,6 @@ void func_8010534C(PlayState* play) { D_801BEBB8.unk58 = 0; } -#ifdef NON_MATCHING void func_8010549C(PlayState* globalCtx, void* segmentAddress) { MinimapEntry* var_v1; MinimapList* temp_v0; @@ -694,7 +680,7 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) { for (i = 0; i < D_801BEC1C; i++) { - D_801F5130[i] = var_v1[i]; + D_801F5130[i] = *var_v1++; } D_801BEC14.entry = D_801F5130; @@ -703,17 +689,14 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) { D_801BEBB8.unk32 = globalCtx->colCtx.colHeader->minBounds.z; D_801BEBB8.unk34 = globalCtx->colCtx.colHeader->maxBounds.x - globalCtx->colCtx.colHeader->minBounds.x; D_801BEBB8.unk36 = globalCtx->colCtx.colHeader->maxBounds.z - globalCtx->colCtx.colHeader->minBounds.z; - D_801BEBB8.unk38 = (s16) (D_801BEBB8.unk30 + (D_801BEBB8.unk34 * 0.5f)); - D_801BEBB8.unk3A = (s16) (D_801BEBB8.unk32 + (D_801BEBB8.unk36 * 0.5f)); + D_801BEBB8.unk38 = D_801BEBB8.unk30 + (D_801BEBB8.unk34 * 0.5f); + D_801BEBB8.unk3A = D_801BEBB8.unk32 + (D_801BEBB8.unk36 * 0.5f); } } D_801BEBB8.unk0 = &D_801BEC14; func_80104F34(globalCtx); func_8010534C(globalCtx); } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010549C.s") -#endif void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { MinimapChest* var_v1; @@ -812,8 +795,6 @@ void func_80105B34(PlayState* play) { } } -#ifdef NON_MATCHING -//https://decomp.me/scratch/oK0wd void func_80105C40(s16 arg0) { MinimapEntry* temp_s0; MinimapEntry* sp58; @@ -823,11 +804,6 @@ void func_80105C40(s16 arg0) { s32 sp48; s32 sp44; s32 sp40; - s32 sp3C; - s32 sp38; - s32 var_v0; - s32 pad; - s32 sp2C; if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (arg0 != -1)) { temp_s0 = &D_801BEBB8.unk0->entry[arg0]; @@ -867,20 +843,27 @@ void func_80105C40(s16 arg0) { D_801BEBB8.unkE = D_801BEBB8.unkA; return; } - func_801030F4(sp58, &sp3C, &sp38); - //temp_a0 = ; - var_v0 = D_801BEBB8.unk0->unk4; - if (D_801BEBB8.unk0->unk4 == 0) { - var_v0 = 0x14; - } else if (D_801BEBB8.unk0->unk4 == -1) { - func_801030B4(temp_s0, &sp2C); - var_v0 = sp2C; + else { + s32 sp3C; + s32 sp38; + s32 var_v0; + s32 pad; + func_801030F4(sp58, &sp3C, &sp38); + //temp_a0 = ; + var_v0 = D_801BEBB8.unk0->unk4; + if (D_801BEBB8.unk0->unk4 == 0) { + var_v0 = 0x14; + } else if (D_801BEBB8.unk0->unk4 == -1) { + s32 sp2C; + func_801030B4(temp_s0, &sp2C); + var_v0 = sp2C; + } + //temp_fv0 = ; + D_801BEBB8.unk1C = (s16) (s32) (((f32) sp44 + (((f32) sp58->unk2 - (f32) temp_s0->unk2) * (1.0f / var_v0))) - (f32) sp3C); + D_801BEBB8.unk1E = (s16) (s32) (((f32) sp40 + (((f32) sp58->unk6 - (f32) temp_s0->unk6) * (1.0f / var_v0))) - (f32) sp38); + D_801BEBB8.unkC = sp54 - D_801BEBB8.unk1C; + D_801BEBB8.unkE = sp50 - D_801BEBB8.unk1E; } - //temp_fv0 = ; - D_801BEBB8.unk1C = (s16) (s32) (((f32) sp44 + (((f32) sp58->unk2 - (f32) temp_s0->unk2) * (1.0f / var_v0))) - (f32) sp3C); - D_801BEBB8.unk1E = (s16) (s32) (((f32) sp40 + (((f32) sp58->unk6 - (f32) temp_s0->unk6) * (1.0f / var_v0))) - (f32) sp38); - D_801BEBB8.unkC = sp54 - D_801BEBB8.unk1C; - D_801BEBB8.unkE = sp50 - D_801BEBB8.unk1E; } else { D_801BEBB8.unk1C = D_801BEBB8.unk1E = 0; @@ -910,9 +893,6 @@ void func_80105C40(s16 arg0) { } } } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105C40.s") -#endif #ifdef NON_MATCHING //https://decomp.me/scratch/WiRnZ @@ -925,22 +905,22 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { s32 sp58; s32 sp54; s32 var_v0; - f32 sp4C; - s32 sp48; sp6C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; if (sp6C->unk0 != 0xFFFF) { + f32 sp4C; func_801030F4(sp6C, &sp60, &sp5C); func_80103090(sp6C, &sp58, &sp54); var_v0 = D_801BEBB8.unk0->unk4; if (D_801BEBB8.unk0->unk4 == 0) { - var_v0 = 0x14; + var_v0 = 20; } else if (D_801BEBB8.unk0->unk4 == -1) { + s32 sp48; func_801030B4(sp6C, &sp48); var_v0 = sp48; } sp4C = (1.0f / var_v0); - if (func_801039EC(play) == 0) { + if (!MapDisp_IsDataRotated(play)) { sp68 = (s32) ((x - (f32)sp6C->unk2) * sp4C) + D_801BEBB8.unk8 + (D_801BEBB8.unkC - D_801BEBB8.unk8) + sp60; sp64 = (s32) ((z - (f32)sp6C->unk6) * sp4C) + D_801BEBB8.unkA + (D_801BEBB8.unkE - D_801BEBB8.unkA) + sp5C; } else { @@ -957,7 +937,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); Matrix_Translate((f32) sp68 - 160.0f, 120.0f - (f32) sp64, 0.0f, MTXMODE_NEW); Matrix_RotateXFApply(-1.6f); - if (func_801039EC(play) != 0) { + if (MapDisp_IsDataRotated(play)) { rot += 0x7FFF; } Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY); @@ -970,6 +950,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { } } #else +void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105FE0.s") #endif @@ -1021,12 +1002,10 @@ s32 func_8010657C(s32 arg0, s32 arg1) { return 0; } -#ifdef NON_MATCHING void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { - s32 pad[2]; + PauseContext* pauseCtx = &play->pauseCtx; - if ((D_801BEBB8.unk0 != 0) && ((s32) play->pauseCtx.state < 4) && (XREG(95) == 0) && (play->interfaceCtx.minimapAlpha != 0)) { - //sp2C = ;// + 0x10000; + if ((D_801BEBB8.unk0 != 0) && ((s32) pauseCtx->state < 4) && (XREG(95) == 0) && (play->interfaceCtx.minimapAlpha != 0)) { if ((func_801064CC(play) == 0) && (D_801BEC1C != 0)) { if (func_80106450(play) != 0) { func_801031D0(play, D_801BEBB8.unk10, D_801BEBB8.unkC, D_801BEBB8.unkE, D_801BEBB8.curRoom, 1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)); @@ -1035,7 +1014,7 @@ void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { } func_80104AE8(play); } - if (((func_8010A0A4(play) == 0) || (gSaveContext.save.inventory.dungeonItems[gSaveContext.mapIndex] & gBitFlags[1]) ) + if (((func_8010A0A4(play) == 0) || CHECK_DUNGEON_ITEM(1,gSaveContext.mapIndex ) ) && ((func_8010A0A4(play) != 0) || Inventory_IsMapVisible(play->sceneNum))) { if (play->interfaceCtx.unk_280 == 0) { func_80105FE0(play, x, z, rot); @@ -1045,9 +1024,6 @@ void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { } } } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106644.s") -#endif void MapDisp_ResetIMap(void) { s32 i; @@ -1118,7 +1094,7 @@ void* func_801068FC(PlayState* play, void* heap) { D_801F56B0.unk84[0] = heap; for (var_s1 = 0; var_s1 < D_801F56B0.rooms; var_s1++) { temp_s2 = D_801F56B0.unk4[var_s1]; - func_80102E40(D_801F56B0.unk84[var_s1], temp_s2); + MapDisp_GetIMapTexture(D_801F56B0.unk84[var_s1], temp_s2); if (var_s1 + 1 < D_801F56B0.rooms) { D_801F56B0.unk84[var_s1 + 1] = ALIGN16((intptr_t)D_801F56B0.unk84[var_s1] + MapData_GetIMapSize(temp_s2)); } else { @@ -1188,7 +1164,8 @@ s32 func_80106D08(s32 sceneNum) { #ifdef NON_MATCHING // https://decomp.me/scratch/3cGkW void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { - s32 var_a0; + PauseContext* pauseCtx = &play->pauseCtx; + //s32 var_a0; s32 var_a1_2; s32 var_a1_4; s32 var_a1_5; @@ -1209,9 +1186,9 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 // | 1); if (CHECK_DUNGEON_ITEM(2, arg6)) {//*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { //15, 15, F (172, 172, 123) - D_801BEC84[0xF] = COLOR16(176, 176, 128, 1); //0xAD5F; - D_801BECA4[0xF] = COLOR16(176, 176, 128, 1); - D_801BECC4[0xF] = COLOR16(176, 176, 128, 1); + D_801BEC84[0xF] = 0xAD5F; + D_801BECA4[0xF] = 0xAD5F; + D_801BECC4[0xF] = 0xAD5F; } else { D_801BEC84[0xF] = 0; D_801BECA4[0xF] = 0; @@ -1222,7 +1199,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 //temp_a0 = play->state.gfxCtx; //sp48 = arg6 + &gSaveContext; func_8012C628(play->state.gfxCtx); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, play->pauseCtx.alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, D_801BEC84); gDPLoadTLUT_pal16(POLY_OPA_DISP++, 1, D_801BECA4); gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, D_801BECC4); @@ -1256,7 +1233,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 continue; } else { //sp3C = play + 0x18000; - func_80109D40(spE8, &sp118, &sp114, sp108); + func_80109D40(spE8, &sp118, &sp114); func_80109DD8(spE8, &sp110, &sp10C); if (sp108->unk8 & 1) { sp110 = (sp118 / 2 - sp110) + sp118 / 2; @@ -1302,6 +1279,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 CLOSE_DISPS(play->state.gfxCtx); } #else +void func_80106D5C(PlayState*, s32, s32, s32, s32, f32, s32); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106D5C.s") #endif @@ -1470,6 +1448,7 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } } #else +void func_80107B78(PlayState*, s32, s32, s32, s32, f32); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80107B78.s") #endif @@ -1545,6 +1524,7 @@ void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 CLOSE_DISPS(arg0->state.gfxCtx); } #else +void func_80108558(PlayState*, s32, s32, s32, s32, f32, s32); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108558.s") #endif |
