From 31f40adf09f5c097dd3734ecd14728c010983bf2 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 23 Jun 2022 18:16:07 -0400 Subject: [PATCH 01/28] First batch of functions --- include/functions.h | 2 +- include/variables.h | 2 +- include/z64map.h | 82 +++++ include/z64scene.h | 2 +- src/code/z_map_data.c | 151 +++++++- src/code/z_map_disp.c | 704 ++++++++++++++++++++++++++++++++++++- tools/disasm/variables.txt | 2 +- 7 files changed, 916 insertions(+), 29 deletions(-) create mode 100644 include/z64map.h diff --git a/include/functions.h b/include/functions.h index 84be91ee7..b882418be 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1774,7 +1774,7 @@ s32 func_8010A0A4(GlobalContext* globalCtx); // void func_8010A0F0(void); // void func_8010A164(void); // void func_8010A194(void); -// void func_8010A208(void); +s32 func_8010A208(GlobalContext* play); // void func_8010A238(void); // void func_8010A2AC(void); void func_8010A2DC(GlobalContext* globalCtx); diff --git a/include/variables.h b/include/variables.h index cbe125ad5..e21fb5b80 100644 --- a/include/variables.h +++ b/include/variables.h @@ -983,7 +983,7 @@ extern u8 D_801BDBC8; // extern UNK_TYPE2 D_801BEBFA; // extern UNK_TYPE2 D_801BEBFC; // extern UNK_TYPE2 D_801BEC10; -extern UNK_PTR D_801BEC14; +extern MinimapList D_801BEC14; // extern UNK_TYPE4 D_801BEC1C; // extern UNK_TYPE4 D_801BEC20; // extern UNK_TYPE1 D_801BEC24; diff --git a/include/z64map.h b/include/z64map.h new file mode 100644 index 000000000..47f8fb3d6 --- /dev/null +++ b/include/z64map.h @@ -0,0 +1,82 @@ +#ifndef Z64_MAP_D_H +#define Z64_MAP_D_H +#include "ultra64.h" + +/* z_map_data */ + +typedef struct { + /* 0x00 */ s32 unk0; + /* 0x04 */ u8 unk4; + /* 0x05 */ u8 unk5; + /* 0x06 */ u8 unk6; + /* 0x07 */ u8 unk7; + /* 0x08 */ u8 unk8; + /* 0x09 */ u8 unk9; + /* 0x0A */ s16 unkA; +} T_D_801BED4C; // size 0x0C? + +typedef struct { + /* 0x00 */ u8 unk0; + /* 0x01 */ u8 unk1; + /* 0x02 */ s16 unk2; + /* 0x04 */ s16 unk4; + /* 0x06 */ u8 unk6; + /* 0x07 */ u8 unk7; + /* 0x08 */ s16 unk8; +} T_D_801BED88; // size 0x0A + +/* z_map_disp */ + +typedef struct { + /* 0x00 */ s16 unk0; + /* 0x00 */ s16 unk2; + /* 0x00 */ s16 unk4; + /* 0x00 */ s16 unk6; +} T_D_801BEBB8_unk48; + +typedef struct { + /* 0x00 */ MinimapList* unk0; //unk0 -> sub1 -> s16[5] + /* 0x04 */ s32 unk4; + /* 0x08 */ char unk8[4]; + /* 0x0C */ s16 unkC; + /* 0x0E */ s16 unkE; + /* 0x10 */ s32 unk10; + /* 0x14 */ s32 unk14; //unk4 same type as unk14 + /* 0x18 */ s32 unk18; + /* 0x1C */ s16 unk1C; //same as 0C + /* 0x1E */ s16 unk1E; //same as 0E + /* 0x20 */ char unk20[4]; + /* 0x24 */ s32 unk24; + /* 0x28 */ char unk28[8]; + /* 0x30 */ s16 unk30; //scene minBounds.x + /* 0x32 */ s16 unk32; //scene minBounds.z + /* 0x34 */ s16 unk34; //scene boundsWidth.x + /* 0x36 */ s16 unk36; //scene boundsWidth.z + /* 0x38 */ s16 unk38; //scene boundsMidpoint.x + /* 0x3A */ s16 unk3A; //scene boundsMidpoint.z + /* 0x3C */ s16* unk3C; + /* 0x40 */ s16 unk40; + /* 0x42 */ char unk42[2]; + /* 0x44 */ s16 unk44; + /* 0x48 */ s16* unk48; +} T_D_801BEBB8; + +typedef struct{ + /* 0x00 */ u16 unk0; + /* 0x02 */ s16 unk2; + /* 0x04 */ char unk4[2]; + /* 0x06 */ s16 unk6; + /* 0x08 */ u16 unk8; +} T_func_801030F4; //probably above, size 0x0A? + +typedef struct { + /* 0x00 */ s16 unk0; //scene + /* 0x02 */ s16 unk2; +} T_D_801BEC5C; + +/* z_map_data */ +s32 func_801096D4(s32 arg0); +void func_8010983C(s32 arg0, s32 *arg1); +void func_801097C8(s32 arg0, s32* arg1, s32* arg2); +void func_80109754(s32 arg0, s32 *arg1, s32 *arg2); +#endif diff --git a/include/z64scene.h b/include/z64scene.h index 5a1c39e16..08d4a6bef 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -469,7 +469,7 @@ typedef struct { } Path; // size = 0x8 typedef struct { - /* 0x00 */ UNK_TYPE2 unk0; + /* 0x00 */ u16 unk0; /* 0x02 */ UNK_TYPE2 unk2; /* 0x04 */ UNK_TYPE2 unk4; /* 0x06 */ UNK_TYPE2 unk6; diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index a854a37e7..f61a02fee 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -1,44 +1,157 @@ #include "global.h" +#include "z64map.h" + +extern T_D_801BED4C D_801BED4C[]; +extern T_D_801BED88 D_801BED88[]; #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801094A0.s") +// extern ? D_801BED40; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801094C8.s") +// void func_801094A0(s32 arg0, ?* arg1) { +// *arg1 = (unaligned s32) *((arg0 * 4) + &D_801BED40); +// } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801094F8.s") +void func_801094C8(s32 arg0, s32 *arg1, s32 *arg2) { + *arg1 = D_801BED4C[arg0].unk4; + *arg2 = D_801BED4C[arg0].unk5; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109528.s") +void func_801094F8(s32 arg0, s32* arg1, s32* arg2) { + *arg1 = D_801BED4C[arg0].unk6; + *arg2 = D_801BED4C[arg0].unk7; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010954C.s") +void func_80109528(s32 arg0, s32* arg1) { + *arg1 = D_801BED4C[arg0].unk8; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010956C.s") +u8 func_8010954C(s32 arg0) { + return D_801BED4C[arg0].unk9; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010958C.s") +s16 func_8010956C(s32 arg0) { + return D_801BED4C[arg0].unkA; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801095AC.s") +s32 func_8010958C(s32 arg0) { + return D_801BED4C[arg0].unk0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801095DC.s") +void func_801095AC(s32 arg0, s32 *arg1, s32 *arg2) { + *arg1 = D_801BED88[arg0-0x100].unk0; + *arg2 = D_801BED88[arg0-0x100].unk1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010960C.s") +void func_801095DC(s32 arg0, s32* arg1, s32* arg2) { + *arg1 = D_801BED88[arg0-0x100].unk2; + *arg2 = D_801BED88[arg0-0x100].unk4; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109630.s") +void func_8010960C(s32 arg0, s32* arg1) { + *arg1 = D_801BED88[arg0-0x100].unk6; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109650.s") +u8 func_80109630(s32 arg0) { + return D_801BED88[arg0-0x100].unk7; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109670.s") +s16 func_80109650(s32 arg0) { + return D_801BED88[arg0-0x100].unk8; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801096D4.s") +s32 func_80109670(s32 arg0) { + s32 cond = arg0 - 0x100; + s32 var_s1 = 0; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109714.s") + for(i = 1; i < cond + 1; i++) { + var_s1 += func_801096D4((i-1) + 0x100); + } + return var_s1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109754.s") +s32 func_801096D4(s32 arg0) { + return (D_801BED88[arg0 - 0x100].unk0 * D_801BED88[arg0 - 0x100].unk1) / 2; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801097C8.s") +s32 func_80109714(s32 arg0) { + if ((arg0 >= 0) && (arg0 < 5)) { + return 0; + } + if ((arg0 >= 0x100) && (arg0 < 0x162)) { + return 1; + } + return 2; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010983C.s") +void func_80109754(s32 arg0, s32 *arg1, s32 *arg2) { + switch (func_80109714(arg0)) { + case 0: + func_801094C8(arg0, arg1, arg2); + return; + case 1: + func_801095AC(arg0, arg1, arg2); + return; + default: + *arg2 = 0; + *arg1 = 0; + return; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801098A0.s") +void func_801097C8(s32 arg0, s32* arg1, s32* arg2) { + switch (func_80109714(arg0)) { + case 0: + func_801094F8(arg0, arg1, arg2); + return; + case 1: + func_801095DC(arg0, arg1, arg2); + return; + default: + *arg2 = 0; + *arg1 = 0; + return; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109908.s") +void func_8010983C(s32 arg0, s32 *arg1) { + switch(func_80109714(arg0)){ + default: + *arg1 = 0; + return; + case 0: + *arg1 = func_8010956C(arg0); + return; + case 1: + *arg1 = func_80109650(arg0); + return; + } +} + +void func_801098A0(s32 arg0, s32* arg1) { + switch (func_80109714(arg0)) { + case 0: + func_80109528(arg0, arg1); + return; + case 1: + func_8010960C(arg0, arg1); + return; + default: + *arg1 = 0; + return; + } +} + +u8 func_80109908(s32 arg0) { + switch (func_80109714(arg0)) { + case 0: + return func_8010954C(arg0); + case 1: + return func_80109630(arg0); + default: + return 0; + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109964.s") diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index d1f09f440..d75b12a0b 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,4 +1,26 @@ #include "global.h" +#include "z64map.h" +#define PlayState GlobalContext + +void func_801031D0(PlayState* play, s32, s32, s32, s32, f32); +void func_80103090(u16*, 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); + +// ? func_80104AE8(GlobalContext *); /* extern */ +// ? func_80105FE0(GlobalContext *, s32, s32, s32); /* extern */ +// s32 func_80106450(GlobalContext *); /* extern */ +// s32 func_801064CC(GlobalContext *); /* extern */ +// s32 func_8010657C(s32, s32); /* extern */ +extern T_D_801BEBB8 D_801BEBB8; +extern s32 D_801BEC1C; //scene rooms +extern T_D_801BEC5C D_801BEC5C[5]; +extern TexturePtr D_801BEB38; + +extern MinimapList D_801BEC14; +extern MinimapEntry D_801F5130[0x50]; #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E40.s") @@ -14,31 +36,617 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102F9C.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103090.s") +void func_80103090(u16* arg0, s32* out1, s32* out2){ + func_80109754(*arg0, out1, out2); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801030B4.s") +//func_801030B4(u16 *, s32 *, u16 *, T_D_801BEBB8 *); +void func_801030B4(u16 *arg0, s32 *arg1) { + func_8010983C(*arg0, arg1); + if (*arg1 == 0) { + *arg1 = 0x14; + } +} + +void func_801030F4(T_func_801030F4* arg0, s32* arg1, s32* arg2) { + s32 sp2C; + s32 sp28; + s32 temp_v0; + s32 temp_v0_2; + + if (arg0->unk0 == 0xFFFF) { + *arg1 = 0; + *arg2 = 0; + return; + } + func_80103090(arg0, &sp2C, &sp28); + func_801097C8(arg0->unk0, arg1, arg2); + if (arg0->unk8 & 1) { + temp_v0 = sp2C / 2; + *arg1 = (temp_v0 - *arg1) + temp_v0; + } + if (arg0->unk8 & 2) { + temp_v0_2 = sp28 / 2; + *arg2 = (temp_v0_2 - *arg2) + temp_v0_2; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801030F4.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801031D0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801039EC.s") +s32 func_801039EC(GlobalContext *play) { + if (play->sceneNum == SCENE_35TAKI) { + return true; + } + return false; +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A10.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A58.s") +// void func_80103A58(GlobalContext *play, Actor *actor) { +// u16 *spDC; +// s32 spD8; +// s32 spD4; +// s32 spD0; +// s32 spCC; +// s32 spC8; +// s32 spC4; +// f32 spC0; +// Actor *spB4; +// s32 spAC; +// GraphicsContext *spA8; +// s16 spA2; +// Gfx *sp88; +// f32 sp2C; +// void *sp1C; +// Gfx *temp_a2; +// Gfx *temp_v0_10; +// Gfx *temp_v0_11; +// Gfx *temp_v0_12; +// Gfx *temp_v0_13; +// Gfx *temp_v0_14; +// Gfx *temp_v0_15; +// Gfx *temp_v0_16; +// Gfx *temp_v0_17; +// Gfx *temp_v0_18; +// Gfx *temp_v0_20; +// Gfx *temp_v0_21; +// Gfx *temp_v0_22; +// Gfx *temp_v0_23; +// Gfx *temp_v0_24; +// Gfx *temp_v0_25; +// Gfx *temp_v0_26; +// Gfx *temp_v0_27; +// Gfx *temp_v0_28; +// Gfx *temp_v0_29; +// Gfx *temp_v0_30; +// Gfx *temp_v0_3; +// Gfx *temp_v0_4; +// Gfx *temp_v0_5; +// Gfx *temp_v0_6; +// Gfx *temp_v0_7; +// Gfx *temp_v0_8; +// Gfx *temp_v0_9; +// GraphicsContext *temp_a0_2; +// f32 temp_fv0; +// s16 temp_v0; +// s16 temp_v0_2; +// s16 temp_v1; +// s16 temp_v1_2; +// s16 temp_v1_3; +// s16 var_v0; +// s16 var_v1; +// s32 temp_t3; +// s32 temp_v1_4; +// s32 var_t2; +// s32 var_t8; +// u16 *temp_a0; +// u32 temp_v0_19; +// u32 temp_v1_5; +// u32 var_a0; +// u32 var_a1; +// u32 var_v1_2; +// void *temp_v1_6; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010439C.s") +// temp_a0 = D_801BEBB8.unk0->unk0 + (D_801BEBB8.unk4 * 0xA); +// if (*temp_a0 != 0xFFFF) { +// spB4 = play->actorCtx.actorLists[2].first; +// spDC = temp_a0; +// func_801030F4(temp_a0, &spD0, &spCC, &D_801BEBB8); +// func_80103090(spDC, &spC8, &spC4); +// temp_v1 = D_801BEBB8.unk0->unk4; +// var_v0 = temp_v1; +// if (temp_v1 == 0) { +// var_v0 = 0x14; +// } else if (temp_v1 == -1) { +// func_801030B4(spDC, &spAC, spDC, &D_801BEBB8); +// var_v0 = (s16) spAC; +// } +// temp_fv0 = 1.0f / (f32) var_v0; +// spC0 = temp_fv0; +// if (func_801039EC(play) == 0) { +// temp_v0 = D_801BEBB8.unk8; +// temp_v1_2 = D_801BEBB8.unkA; +// var_t2 = (((s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0) + temp_v0 + D_801BEBB8.unkC) - temp_v0) + spD0; +// var_t8 = ((s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0) + temp_v1_2 + D_801BEBB8.unkE) - temp_v1_2; +// } else { +// temp_v0_2 = D_801BEBB8.unk8; +// temp_v1_3 = D_801BEBB8.unkA; +// var_t2 = (((temp_v0_2 - (s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0)) + D_801BEBB8.unkC) - temp_v0_2) + spD0; +// var_t8 = ((temp_v1_3 - (s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0)) + D_801BEBB8.unkE) - temp_v1_3; +// } +// temp_t3 = var_t8 + spCC; +// if ((var_t2 > 0) && (var_t2 < 0x3FF) && (temp_t3 > 0) && (temp_t3 < 0x3FF)) { +// temp_a0_2 = play->state.gfxCtx; +// if ((actor->category == 2) && (actor->flags & 0x80000000)) { +// spA8 = temp_a0_2; +// spD8 = var_t2; +// spD4 = temp_t3; +// func_8012C8D4(temp_a0_2); +// temp_v0_3 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_3 + 8; +// temp_v0_3->words.w0 = 0xDA380003; +// temp_v0_3->words.w1 = (u32) &gIdentityMtx; +// temp_v0_4 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_4 + 8; +// temp_v0_4->words.w0 = 0xFC309661; +// temp_v0_4->words.w1 = 0x552EFF7F; +// temp_v0_5 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_5 + 8; +// temp_v0_5->words.w0 = 0xFB000000; +// temp_v0_5->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; +// temp_v0_6 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_6 + 8; +// temp_v0_6->words.w1 = 0xFFFDF6FB; +// temp_v0_6->words.w0 = 0xFCFFFFFF; +// temp_v0_7 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_7 + 8; +// temp_v0_7->words.w0 = 0xE200001C; +// temp_v0_7->words.w1 = 0x407248; +// sp1C = play + 0x10000; +// spA8 = spA8; +// Matrix_Translate((f32) var_t2 - 160.0f, 120.0f - (f32) temp_t3, 0.0f, MTXMODE_NEW); +// Matrix_RotateXFApply(-1.6f); +// temp_v1_4 = (s32) (0x7FFF - actor->focus.rot.y) / 1024; +// spA2 = (s16) temp_v1_4; +// var_v1 = (s16) temp_v1_4; +// if (func_801039EC(play) != 0) { +// var_v1 += 0x7FFF; +// } +// spA8 = spA8; +// Matrix_RotateYF((f32) var_v1 / 10.0f, MTXMODE_APPLY); +// Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); +// temp_v0_8 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_8 + 8; +// temp_v0_8->words.w0 = 0xDA380003; +// spA8 = spA8; +// sp88 = temp_v0_8; +// sp88->words.w1 = Matrix_NewMtx(play->state.gfxCtx); +// temp_v0_9 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_9 + 8; +// temp_v0_9->words.w0 = 0xFA000000; +// temp_v0_9->words.w1 = (sp1C->unk6C5C & 0xFF) | 0xC8FF0000; +// temp_v0_10 = spA8->overlay.p; +// spA8->overlay.p = temp_v0_10 + 8; +// temp_v0_10->words.w1 = (u32) &D_0401ED00; +// temp_v0_10->words.w0 = 0xDE000000; +// return; +// } +// if (actor->id == 6) { +// spD4 = temp_t3; +// spD8 = var_t2; +// spA8 = temp_a0_2; +// if (Flags_GetTreasure(play, actor->params & 0x1F) == 0) { +// spD4 = temp_t3; +// spD8 = var_t2; +// spA8 = temp_a0_2; +// sp2C = func_80102F9C(spB4->world.pos.y); +// if (func_80102F9C(actor->world.pos.y) == sp2C) { +// spD4 = temp_t3; +// spD8 = var_t2; +// spA8 = temp_a0_2; +// func_8012C654(play->state.gfxCtx); +// temp_v0_11 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_11 + 8; +// temp_v0_11->words.w1 = 0; +// temp_v0_11->words.w0 = 0xE7000000; +// temp_v0_12 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_12 + 8; +// temp_v0_12->words.w1 = 0; +// temp_v0_12->words.w0 = 0xE3001001; +// temp_v0_13 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_13 + 8; +// temp_v0_13->words.w0 = 0xFA000000; +// temp_v0_13->words.w1 = (play->interfaceCtx.minimapAlpha & 0xFF) | ~0xFF; +// temp_v0_14 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_14 + 8; +// temp_v0_14->words.w0 = 0xFB000000; +// temp_v0_14->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; +// temp_v0_15 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_15 + 8; +// temp_v0_15->words.w1 = 0; +// temp_v0_15->words.w0 = 0xE7000000; +// temp_v0_16 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_16 + 8; +// temp_v0_16->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xFD000000; +// temp_v0_16->words.w1 = (u32) &D_02003F20; +// temp_v0_17 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_17 + 8; +// temp_v0_17->words.w1 = 0x07000000; +// temp_v0_17->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xF5000000; +// temp_v0_18 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_18 + 8; +// temp_v0_18->words.w1 = 0; +// temp_v0_18->words.w0 = 0xE6000000; +// temp_a2 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_a2 + 8; +// temp_a2->words.w0 = 0xF3000000; +// temp_v1_5 = ((u32) (D_801BEAF8 + 0x40) >> D_801BEB08) - 1; +// var_a0 = 0x7FF; +// if (temp_v1_5 < 0x7FFU) { +// var_a0 = temp_v1_5; +// } +// temp_v0_19 = (u32) (D_801BEB18 * 8) >> 3; +// var_a1 = temp_v0_19; +// if (temp_v0_19 == 0) { +// var_a1 = 1; +// } +// if (temp_v0_19 == 0) { +// var_v1_2 = 1; +// } else { +// var_v1_2 = temp_v0_19; +// } +// temp_a2->words.w1 = (((u32) (var_a1 + 0x7FF) / var_v1_2) & 0xFFF) | 0x07000000U | ((var_a0 & 0xFFF) << 0xC); +// temp_v0_20 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_20 + 8; +// temp_v0_20->words.w1 = 0; +// temp_v0_20->words.w0 = 0xE7000000; +// temp_v0_21 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_21 + 8; +// temp_v0_21->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) << 0x13); +// temp_v0_21->words.w1 = 0; +// temp_v0_22 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_22 + 8; +// temp_v0_22->words.w0 = 0xF2000000; +// temp_v0_22->words.w1 = 0x1C01C; +// temp_v0_23 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_23 + 8; +// temp_v0_23->words.w0 = ((((var_t2 + 4) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 4) * 4) & 0xFFF); +// temp_v0_23->words.w1 = ((((var_t2 - 4) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 4) * 4) & 0xFFF); +// temp_v0_24 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_24 + 8; +// temp_v0_24->words.w1 = 0; +// temp_v0_24->words.w0 = 0xE1000000; +// temp_v0_25 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_25 + 8; +// temp_v0_25->words.w1 = 0x04000400; +// temp_v0_25->words.w0 = 0xF1000000; +// return; +// } +// } +// } +// spD4 = temp_t3; +// spD8 = var_t2; +// spA8 = temp_a0_2; +// func_8012C654(play->state.gfxCtx); +// temp_v0_26 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_26 + 8; +// temp_v0_26->words.w0 = 0xFC119623; +// temp_v0_26->words.w1 = 0xFF2FFFFF; +// if (actor->flags & 0x80000000) { +// temp_v0_27 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_27 + 8; +// temp_v0_27->words.w0 = 0xFA000000; +// temp_v1_6 = (actor->category * 4) + &D_801BEC2C; +// temp_v0_27->words.w1 = (temp_v1_6->unk2 << 8) | (temp_v1_6->unk0 << 0x18) | (temp_v1_6->unk1 << 0x10) | (play->interfaceCtx.minimapAlpha & 0xFF); +// temp_v0_28 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_28 + 8; +// temp_v0_28->words.w0 = ((((var_t2 + 1) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 1) * 4) & 0xFFF); +// temp_v0_28->words.w1 = ((((var_t2 - 1) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 1) * 4) & 0xFFF); +// temp_v0_29 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_29 + 8; +// temp_v0_29->words.w1 = 0; +// temp_v0_29->words.w0 = 0xE1000000; +// temp_v0_30 = temp_a0_2->overlay.p; +// temp_a0_2->overlay.p = temp_v0_30 + 8; +// temp_v0_30->words.w1 = 0x10001; +// temp_v0_30->words.w0 = 0xF1000000; +// } +// } +// } +// } +void func_8010439C(GlobalContext *play) { + ActorContext *actorCtx; + s32 i; + + if (play->roomCtx.currRoom.num != -1) { + OPEN_DISPS(play->state.gfxCtx); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); + + actorCtx = &play->actorCtx; + for (i = 0; i < ACTORCAT_MAX; i++) { + Actor *actor = actorCtx->actorLists[i].first; + if (actor != NULL) { + do { + if ( + (actor->update != NULL) + && (actor->init == NULL) + && (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) + && ((actor->id == ACTOR_EN_BOX) || (i == ACTORCAT_PLAYER) || (actor->flags & ACTOR_FLAG_80000000)) + && ((D_801BEBB8.unk4 == actor->room) || (actor->room == -1))) { + func_80103A58(play, actor); + } + actor = actor->next; + } while (actor != NULL); + } + } + CLOSE_DISPS(play->state.gfxCtx); + } +} + +//#ifdef NON_MATCHING +// ? func_80103090(u16*, ?*, ?*); /* extern */ +// ? func_801030B4(u16*, s32*, GraphicsContext*, T_D_801BEBB8*); /* extern */ +// ? func_801030F4(f32, f32, u16*, s32*, s32*, T_D_801BEBB8*); /* extern */ +// s32 func_80103A10(GlobalContext*); /* extern */ +// extern ? D_801BEC2C; + +// void func_801045AC(GlobalContext* play, Actor* actor) { +// u16* sp7C; +// s32 sp78; +// s32 sp74; +// s32 sp70; +// s32 sp6C; +// ? sp68; +// ? sp64; +// f32 sp5C; +// f32 sp50; +// s32 sp4C; +// GraphicsContext* sp48; +// s32 sp34; +// Gfx* temp_a0_3; +// Gfx* temp_v0_10; +// Gfx* temp_v0_11; +// Gfx* temp_v0_4; +// Gfx* temp_v0_6; +// Gfx* temp_v0_7; +// Gfx* temp_v0_8; +// Gfx* temp_v0_9; +// GraphicsContext* temp_a0_2; +// GraphicsContext* var_a2; +// f32 temp_fv0; +// f32 temp_fv1; +// f32 var_fa0; +// f32 var_ft1; +// s16 temp_v0; +// s16 temp_v0_2; +// s16 temp_v0_3; +// s16 temp_v0_5; +// s16 temp_v1; +// s16 temp_v1_2; +// s16 var_v1; +// s16 var_v1_2; +// s32 var_t0; +// s32 var_t0_2; +// s32 var_t1; +// s32 var_t1_2; +// u16* temp_a0; +// u8 temp_t7; +// void* temp_v1_3; + +// temp_fv1 = 0.0028571428f * fabsf(play->actorCtx.actorLists[2].first->world.pos.y - actor->world.pos.y); +// var_fa0 = 1.0f - temp_fv1; +// if (temp_fv1 > 1.0f) { +// var_fa0 = 0.0f; +// } +// temp_a0 = D_801BEBB8.unk0->unk0 + (D_801BEBB8.unk4 * 0xA); +// if (*temp_a0 != 0xFFFF) { +// sp7C = temp_a0; +// sp50 = var_fa0; +// func_801030F4(var_fa0, 1.0f, temp_a0, &sp70, &sp6C, &D_801BEBB8); +// func_80103090(sp7C, &sp68, &sp64); +// temp_v0 = D_801BEBB8.unk0->unk4; +// var_v1 = temp_v0; +// if (temp_v0 == 0) { +// var_v1 = 0x14; +// } else if (temp_v0 == -1) { +// func_801030B4(sp7C, &sp4C); +// var_v1 = (s16) sp4C; +// } +// temp_fv0 = 1.0f / (f32) var_v1; +// sp5C = temp_fv0; +// if (func_801039EC(play) == 0) { +// temp_v0_2 = D_801BEBB8.unk8; +// temp_v1 = D_801BEBB8.unkA; +// var_t0 = (((s32) ((actor->world.pos.x - (f32) sp7C->unk2) * temp_fv0) + temp_v0_2 + D_801BEBB8.unkC) - temp_v0_2) + sp70; +// var_t1 = (((s32) ((actor->world.pos.z - (f32) sp7C->unk6) * temp_fv0) + temp_v1 + D_801BEBB8.unkE) - temp_v1) + sp6C; +// } else { +// temp_v0_3 = D_801BEBB8.unk8; +// temp_v1_2 = D_801BEBB8.unkA; +// var_t0 = (((temp_v0_3 - (s32) ((actor->world.pos.x - (f32) sp7C->unk2) * temp_fv0)) + D_801BEBB8.unkC) - temp_v0_3) + sp70; +// var_t1 = (((temp_v1_2 - (s32) ((actor->world.pos.z - (f32) sp7C->unk6) * temp_fv0)) + D_801BEBB8.unkE) - temp_v1_2) + sp6C; +// } +// if ((var_t0 > 0) && (var_t0 < 0x3FF) && (var_t1 > 0) && (var_t1 < 0x3FF) && (temp_a0_2 = play->state.gfxCtx, sp74 = var_t1, sp78 = var_t0, sp48 = temp_a0_2, func_8012C654(temp_a0_2), temp_v0_4 = sp48->overlay.p, sp48->overlay.p = temp_v0_4 + 8, temp_v0_4->words.w0 = 0xFC119623, temp_v0_4->words.w1 = 0xFF2FFFFF, (actor->category == 0xA)) && (sp48 = sp48, sp78 = var_t0, sp74 = var_t1, var_a2 = sp48, var_t0_2 = var_t0, var_t1_2 = var_t1, (func_80103A10(play) != 0))) { +// temp_a0_3 = var_a2->overlay.p; +// var_a2->overlay.p = temp_a0_3 + 8; +// temp_a0_3->words.w0 = 0xFA000000; +// temp_v1_3 = (actor->category * 4) + &D_801BEC2C; +// temp_t7 = temp_v1_3->unk3; +// var_ft1 = (f32) temp_t7; +// if ((s32) temp_t7 < 0) { +// var_ft1 += 4294967296.0f; +// } +// temp_a0_3->words.w1 = ((s32) ((var_ft1 * (1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)) * sp50 * (f32) play->interfaceCtx.minimapAlpha) / 255.0f) & 0xFF) | (temp_v1_3->unk0 << 0x18) | (temp_v1_3->unk1 << 0x10) | (temp_v1_3->unk2 << 8); +// temp_v0_5 = D_801BEBB8.unk0->unk4; +// var_v1_2 = temp_v0_5; +// if (temp_v0_5 == 0) { +// var_v1_2 = 0x14; +// } else if (temp_v0_5 == -1) { +// sp48 = var_a2; +// sp78 = var_t0_2; +// sp74 = var_t1_2; +// func_801030B4(sp7C, &sp34, var_a2, &D_801BEBB8); +// var_a2 = sp48; +// var_t0_2 = sp78; +// var_t1_2 = sp74; +// var_v1_2 = (s16) sp34; +// } +// if (var_v1_2 < 0x33) { +// temp_v0_6 = var_a2->overlay.p; +// var_a2->overlay.p = temp_v0_6 + 8; +// temp_v0_6->words.w0 = ((((var_t0_2 + 2) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((var_t1_2 + 2) * 4) & 0xFFF); +// temp_v0_6->words.w1 = ((((var_t0_2 - 2) * 4) & 0xFFF) << 0xC) | (((var_t1_2 - 2) * 4) & 0xFFF); +// temp_v0_7 = var_a2->overlay.p; +// var_a2->overlay.p = temp_v0_7 + 8; +// temp_v0_7->words.w1 = 0; +// temp_v0_7->words.w0 = 0xE1000000; +// temp_v0_8 = var_a2->overlay.p; +// var_a2->overlay.p = temp_v0_8 + 8; +// temp_v0_8->words.w1 = 0x10001; +// temp_v0_8->words.w0 = 0xF1000000; +// return; +// } +// temp_v0_9 = var_a2->overlay.p; +// var_a2->overlay.p = temp_v0_9 + 8; +// temp_v0_9->words.w0 = ((((var_t0_2 + 1) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((var_t1_2 + 1) * 4) & 0xFFF); +// temp_v0_9->words.w1 = ((((var_t0_2 - 1) * 4) & 0xFFF) << 0xC) | (((var_t1_2 - 1) * 4) & 0xFFF); +// temp_v0_10 = var_a2->overlay.p; +// var_a2->overlay.p = temp_v0_10 + 8; +// temp_v0_10->words.w1 = 0; +// temp_v0_10->words.w0 = 0xE1000000; +// temp_v0_11 = var_a2->overlay.p; +// var_a2->overlay.p = temp_v0_11 + 8; +// temp_v0_11->words.w1 = 0x10001; +// temp_v0_11->words.w0 = 0xF1000000; +// } +// } +// } +// #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801045AC.s") +// #endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104AE8.s") +void func_80104AE8(GlobalContext *play) { + s32 i; + Actor* actor; + + if (play->roomCtx.currRoom.num != -1) { + OPEN_DISPS(play->state.gfxCtx); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); + + actor = play->actorCtx.actorLists[ACTORCAT_DOOR].first; + if (actor != NULL) { + do { + if ( + (actor->update != NULL) + && (actor->init == NULL) + && Object_IsLoaded(&play->objectCtx, actor->objBankIndex) + && ((D_801BEBB8.unk4 == actor->room) || (actor->room == -1))) { + func_801045AC(play, actor); + } + actor = actor->next; + } while (actor != NULL); + } + CLOSE_DISPS(play->state.gfxCtx); + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104C80.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104CF4.s") +#ifdef NON_MATCHING +void func_80104F34(GlobalContext* arg0) { + s16 temp_a3; + s16 temp_s0; + s16 temp_t3; + s16 temp_t5; + s32 var_t2; + s16* temp_a3_2; + s16* temp_t2_2; + s32 temp_t0; + s32 var_a3; + s32 var_a3_2; + s32 var_t0; + s32 var_t0_2; + s32 var_t1_4; + s32 var_t3; + s32 var_t5; + MinimapEntry* temp_t2; + MinimapEntry* temp_t0_2; + void* temp_t9; + void* temp_v1; + s32 i; + + for (var_t0 = 0; var_t0 < 32; var_t0++){ + D_801BEBB8.unk48[var_t0] = -0x7FFF; + } + for (var_t3 = 0; var_t3 < D_801BEC1C; var_t3++) { + var_t0_2 = 0; + temp_t2 = D_801BEBB8.unk0->entry + var_t3; + if (temp_t2->unk0 == 0xFFFF) { + + } else { + for (var_t0_2 = 0; var_t0_2 < 32; var_t0_2++) + { + if (D_801BEBB8.unk48[var_t0_2] == -0x7FFF) { + D_801BEBB8.unk48[var_t0_2] = temp_t2->unk4; + break; + } + else if(fabsf((f32) D_801BEBB8.unk48[var_t0_2] - (f32) temp_t2->unk4) < 5.0f) { + break; + } + } + } + } + for (var_a3 = 0; var_a3 < D_801BEC1C; var_a3++) { + if (D_801BEBB8.unk48[var_a3] == -0x7FFF) { + break; + } else { + for (temp_t0 = var_a3+ 1; temp_t0 < D_801BEC1C; temp_t0++) { + temp_s0 = D_801BEBB8.unk48[temp_t0]; + temp_t2_2 = &D_801BEBB8.unk48[var_a3]; + if (temp_s0 != -0x7FFF) { + temp_t3 = *temp_t2_2; + if (temp_s0 < temp_t3) { + *temp_t2_2 = temp_s0; + D_801BEBB8.unk48[temp_t0] = temp_t3; + } + } + else { + break; + } + } + } + } + for (var_a3 = 0; var_a3 < D_801BEC1C; var_a3++) { + D_801BEBB8.unk3C[var_a3] = -1; + temp_t0_2 = &D_801BEBB8.unk0->entry[var_a3]; + + for (var_t2 = 0; var_t2 < D_801BEC1C; var_t2++) { + if ((D_801BEBB8.unk48[var_t2] != -0x7FFF) && (fabsf((f32) D_801BEBB8.unk48[var_t2] - (f32) temp_t0_2->unk4) < 5.0f)) { + D_801BEBB8.unk3C[var_a3] = var_t2; + break; + } + } + } + D_801BEBB8.unk40 = 0; + for (var_t1_4 = 0; var_t1_4 < D_801BEC1C; var_t1_4++) { + if (D_801BEBB8.unk48[var_t1_4] != -0x7FFF) { + D_801BEBB8.unk40++; + } + } + D_801BEBB8.unk44 = 0; + for (i = 0; i < 5; i++) { + if (arg0->sceneNum == D_801BEC5C[i].unk0) { + D_801BEBB8.unk44 = D_801BEC5C[i].unk2; + } + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104F34.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105294.s") @@ -48,7 +656,44 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010534C.s") + +// ? func_80104F34(GlobalContext*); /* extern */ +// ? func_8010534C(GlobalContext*); /* extern */ + +#ifdef NON_MATCHING +void func_8010549C(GlobalContext* globalCtx, void* segmentAddress) { + MinimapEntry* var_v1; + MinimapList* temp_v0; + s32 i; + + if (func_8010A208(globalCtx) == 0) { + D_801BEC1C = globalCtx->numRooms; + temp_v0 = Lib_SegmentedToVirtual(segmentAddress); + D_801BEC14 = *temp_v0; + var_v1 = Lib_SegmentedToVirtual(temp_v0->entry); + + for (i = 0; i < D_801BEC1C; i++) + { + D_801F5130[i] = var_v1[i]; + } + + D_801BEC14.entry = &D_801F5130; + if (globalCtx->colCtx.colHeader != NULL) { + D_801BEBB8.unk30 = globalCtx->colCtx.colHeader->minBounds.x; + 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.unk0 = &D_801BEC14; + func_80104F34(globalCtx); + func_8010534C(globalCtx); +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010549C.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010565C.s") @@ -71,8 +716,55 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106530.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010657C.s") +// s32 func_8010657C(s32 arg0, s32 arg1) { +// s16 temp_a3; +// s16 temp_t0; +// s32 temp_a2; +// s32 temp_v1; +// if ((arg0 == -1) || (arg1 == -1)) { +// return 0; +// } +// //temp_a2 = D_801BEBB8.unk3C[arg]; +// temp_a3 = D_801BEBB8.unk3C[arg1];//*(temp_a2 + (arg1 * 2)); +// temp_t0 = D_801BEBB8.unk3C[arg0];//*(temp_a2 + (arg0 * 2)); +// temp_v1 = *D_801BEBB8.unk0; +// if ((temp_a3 >= temp_t0) && ((temp_t0 + (((s32) (temp_v1 + (arg0 * 0xA))->unk8 >> 2) & 7)) >= temp_a3)) { +// return 1; +// } +// if ((temp_t0 >= temp_a3) && ((temp_a3 + (((s32) (temp_v1 + (arg1 * 0xA))->unk8 >> 2) & 7)) >= temp_t0)) { +// return 1; +// } +// return 0; +// } + +#ifdef NON_MATCHING +void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { + s32 pad[2]; + + if ((D_801BEBB8.unk0 != 0) && ((s32) play->pauseCtx.state < 4) && (XREG(95) == 0) && (play->interfaceCtx.minimapAlpha != 0)) { + //sp2C = ;// + 0x10000; + 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.unk4, 1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)); + if ((D_801BEBB8.unk4 != D_801BEBB8.unk14) && (func_8010657C(D_801BEBB8.unk4, D_801BEBB8.unk14) != 0)) { + func_801031D0(play, D_801BEBB8.unk18, D_801BEBB8.unkC + D_801BEBB8.unk1C, D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.unk14, (f32) D_801BEBB8.unk24 * 0.05f); + } + func_80104AE8(play); + } + if (((func_8010A0A4(play) == 0) || (gSaveContext.save.inventory.dungeonItems[gSaveContext.mapIndex] & gBitFlags[1]) ) + && ((func_8010A0A4(play) != 0) || Inventory_IsMapVisible(play->sceneNum))) { + if (play->interfaceCtx.unk_280 == 0) { + func_80105FE0(play, x, z, rot); + } + func_8010439C(play); + } + } + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106644.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010683C.s") diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d643adfcb..f33262b5b 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1024,7 +1024,7 @@ 0x801BEBFA:("D_801BEBFA","UNK_TYPE2","",0x2), 0x801BEBFC:("D_801BEBFC","UNK_TYPE2","",0x2), 0x801BEC10:("D_801BEC10","UNK_TYPE2","",0x2), - 0x801BEC14:("D_801BEC14","UNK_PTR","",0x4), + 0x801BEC14:("D_801BEC14","MinimapList","",0x8), 0x801BEC1C:("D_801BEC1C","UNK_TYPE4","",0x4), 0x801BEC20:("D_801BEC20","UNK_TYPE4","",0x4), 0x801BEC24:("D_801BEC24","UNK_TYPE1","",0x1), From 7769846704621adcc2dadf7482ba3e8dea675128 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 4 Jul 2022 20:42:28 -0400 Subject: [PATCH 02/28] more ok --- src/code/z_map_disp.c | 154 ++++++++++++++++++------------------------ 1 file changed, 65 insertions(+), 89 deletions(-) diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index d75b12a0b..496e6cd72 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -9,10 +9,10 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot); s32 func_801039EC(PlayState* play); void func_80103A58(PlayState* play, Actor* actor); -// ? func_80104AE8(GlobalContext *); /* extern */ -// ? func_80105FE0(GlobalContext *, s32, s32, s32); /* extern */ -// s32 func_80106450(GlobalContext *); /* extern */ -// s32 func_801064CC(GlobalContext *); /* extern */ +// ? func_80104AE8(PlayState *); /* extern */ +// ? func_80105FE0(PlayState *, s32, s32, s32); /* extern */ +// s32 func_80106450(PlayState *); /* extern */ +// s32 func_801064CC(PlayState *); /* extern */ // s32 func_8010657C(s32, s32); /* extern */ extern T_D_801BEBB8 D_801BEBB8; extern s32 D_801BEC1C; //scene rooms @@ -74,7 +74,7 @@ void func_801030F4(T_func_801030F4* arg0, s32* arg1, s32* arg2) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801031D0.s") -s32 func_801039EC(GlobalContext *play) { +s32 func_801039EC(PlayState *play) { if (play->sceneNum == SCENE_35TAKI) { return true; } @@ -84,7 +84,7 @@ s32 func_801039EC(GlobalContext *play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A10.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A58.s") -// void func_80103A58(GlobalContext *play, Actor *actor) { +// void func_80103A58(PlayState *play, Actor *actor) { // u16 *spDC; // s32 spD8; // s32 spD4; @@ -357,7 +357,7 @@ s32 func_801039EC(GlobalContext *play) { // } // } -void func_8010439C(GlobalContext *play) { +void func_8010439C(PlayState *play) { ActorContext *actorCtx; s32 i; @@ -390,10 +390,10 @@ void func_8010439C(GlobalContext *play) { // ? func_80103090(u16*, ?*, ?*); /* extern */ // ? func_801030B4(u16*, s32*, GraphicsContext*, T_D_801BEBB8*); /* extern */ // ? func_801030F4(f32, f32, u16*, s32*, s32*, T_D_801BEBB8*); /* extern */ -// s32 func_80103A10(GlobalContext*); /* extern */ +// s32 func_80103A10(PlayState*); /* extern */ // extern ? D_801BEC2C; -// void func_801045AC(GlobalContext* play, Actor* actor) { +// void func_801045AC(PlayState* play, Actor* actor) { // u16* sp7C; // s32 sp78; // s32 sp74; @@ -527,7 +527,7 @@ void func_8010439C(GlobalContext *play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801045AC.s") // #endif -void func_80104AE8(GlobalContext *play) { +void func_80104AE8(PlayState *play) { s32 i; Actor* actor; @@ -556,97 +556,73 @@ void func_80104AE8(GlobalContext *play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104CF4.s") -#ifdef NON_MATCHING -void func_80104F34(GlobalContext* arg0) { - s16 temp_a3; - s16 temp_s0; - s16 temp_t3; - s16 temp_t5; - s32 var_t2; - s16* temp_a3_2; - s16* temp_t2_2; - s32 temp_t0; - s32 var_a3; - s32 var_a3_2; - s32 var_t0; - s32 var_t0_2; - s32 var_t1_4; - s32 var_t3; - s32 var_t5; - MinimapEntry* temp_t2; - MinimapEntry* temp_t0_2; - void* temp_t9; - void* temp_v1; - s32 i; +void func_80104F34(PlayState* arg0) { + s32 i1; + s32 i2; + s32 i3; + s32 i4; - for (var_t0 = 0; var_t0 < 32; var_t0++){ - D_801BEBB8.unk48[var_t0] = -0x7FFF; + for (i1 = 0; i1 < 32; i1++){ + D_801BEBB8.unk48[i1] = -0x7FFF; } - for (var_t3 = 0; var_t3 < D_801BEC1C; var_t3++) { - var_t0_2 = 0; - temp_t2 = D_801BEBB8.unk0->entry + var_t3; - if (temp_t2->unk0 == 0xFFFF) { - - } else { - for (var_t0_2 = 0; var_t0_2 < 32; var_t0_2++) - { - if (D_801BEBB8.unk48[var_t0_2] == -0x7FFF) { - D_801BEBB8.unk48[var_t0_2] = temp_t2->unk4; - break; - } - else if(fabsf((f32) D_801BEBB8.unk48[var_t0_2] - (f32) temp_t2->unk4) < 5.0f) { - break; - } - } + for (i2 = 0; i2 < D_801BEC1C; i2++) { + MinimapEntry* mapEntry1 = &D_801BEBB8.unk0->entry[i2]; + + if (mapEntry1->unk0 == 0xFFFF) { + continue; } - } - for (var_a3 = 0; var_a3 < D_801BEC1C; var_a3++) { - if (D_801BEBB8.unk48[var_a3] == -0x7FFF) { - break; - } else { - for (temp_t0 = var_a3+ 1; temp_t0 < D_801BEC1C; temp_t0++) { - temp_s0 = D_801BEBB8.unk48[temp_t0]; - temp_t2_2 = &D_801BEBB8.unk48[var_a3]; - if (temp_s0 != -0x7FFF) { - temp_t3 = *temp_t2_2; - if (temp_s0 < temp_t3) { - *temp_t2_2 = temp_s0; - D_801BEBB8.unk48[temp_t0] = temp_t3; - } - } - else { - break; - } - } - } - } - for (var_a3 = 0; var_a3 < D_801BEC1C; var_a3++) { - D_801BEBB8.unk3C[var_a3] = -1; - temp_t0_2 = &D_801BEBB8.unk0->entry[var_a3]; - - for (var_t2 = 0; var_t2 < D_801BEC1C; var_t2++) { - if ((D_801BEBB8.unk48[var_t2] != -0x7FFF) && (fabsf((f32) D_801BEBB8.unk48[var_t2] - (f32) temp_t0_2->unk4) < 5.0f)) { - D_801BEBB8.unk3C[var_a3] = var_t2; + for (i1 = 0; i1 < 32; i1++) { + if (D_801BEBB8.unk48[i1] == -0x7FFF) { + D_801BEBB8.unk48[i1] = mapEntry1->unk4; + break; + } else if(fabsf((f32) D_801BEBB8.unk48[i1] - (f32) mapEntry1->unk4) < 5.0f) { break; } } } + for (i2 = 0; i2 < D_801BEC1C; i2++) { + if (D_801BEBB8.unk48[i2] == -0x7FFF) { + break; + } + for (i3 = i2+1; i3 < D_801BEC1C; i3++) { + if (D_801BEBB8.unk48[i3] == -0x7FFF) { + break; + } + if (D_801BEBB8.unk48[i3] < D_801BEBB8.unk48[i2]) { + s16 temp_t3 = D_801BEBB8.unk48[i2]; + + D_801BEBB8.unk48[i2] = D_801BEBB8.unk48[i3]; + D_801BEBB8.unk48[i3] = temp_t3; + } + } + } + for (i2 = 0; i2 < D_801BEC1C; i2++) { + MinimapEntry* mapEntry2 = &D_801BEBB8.unk0->entry[i2]; + + D_801BEBB8.unk3C[i2] = -1; + + for (i4 = 0; i4 < D_801BEC1C; i4++) { + if (D_801BEBB8.unk48[i4] != -0x7FFF) { + if (fabsf((f32) D_801BEBB8.unk48[i4] - (f32) mapEntry2->unk4) < 5.0f) { + D_801BEBB8.unk3C[i2] = i4; + break; + } + } + } + } D_801BEBB8.unk40 = 0; - for (var_t1_4 = 0; var_t1_4 < D_801BEC1C; var_t1_4++) { - if (D_801BEBB8.unk48[var_t1_4] != -0x7FFF) { + for (i2 = 0; i2 < D_801BEC1C; i2++) { + if (D_801BEBB8.unk48[i2] != -0x7FFF) { D_801BEBB8.unk40++; } } D_801BEBB8.unk44 = 0; - for (i = 0; i < 5; i++) { - if (arg0->sceneNum == D_801BEC5C[i].unk0) { - D_801BEBB8.unk44 = D_801BEC5C[i].unk2; + for (i2 = 0; i2 < 5; i2++) { + if (arg0->sceneNum == D_801BEC5C[i2].unk0) { + D_801BEBB8.unk44 = D_801BEC5C[i2].unk2; } } } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104F34.s") -#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105294.s") @@ -657,11 +633,11 @@ void func_80104F34(GlobalContext* arg0) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010534C.s") -// ? func_80104F34(GlobalContext*); /* extern */ -// ? func_8010534C(GlobalContext*); /* extern */ +// ? func_80104F34(PlayState*); /* extern */ +// ? func_8010534C(PlayState*); /* extern */ #ifdef NON_MATCHING -void func_8010549C(GlobalContext* globalCtx, void* segmentAddress) { +void func_8010549C(PlayState* globalCtx, void* segmentAddress) { MinimapEntry* var_v1; MinimapList* temp_v0; s32 i; From 30465e128a64a74539063909cdf857fc4d521ab0 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 4 Jul 2022 22:26:56 -0400 Subject: [PATCH 03/28] z_map_data OK --- include/z64map.h | 20 +++- src/code/z_map_data.c | 244 +++++++++++++++++++++++++++++++++++++----- src/code/z_map_disp.c | 10 +- 3 files changed, 238 insertions(+), 36 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index 47f8fb3d6..c52ae2861 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -13,7 +13,7 @@ typedef struct { /* 0x08 */ u8 unk8; /* 0x09 */ u8 unk9; /* 0x0A */ s16 unkA; -} T_D_801BED4C; // size 0x0C? +} T_801BED4C; // size 0x0C? typedef struct { /* 0x00 */ u8 unk0; @@ -23,7 +23,17 @@ typedef struct { /* 0x06 */ u8 unk6; /* 0x07 */ u8 unk7; /* 0x08 */ s16 unk8; -} T_D_801BED88; // size 0x0A +} T_801BED88; // size 0x0A + +typedef struct { + u8 unk0; + u8 unk1; + s16 unk2; + s16 unk4; + u8 unk6; + u8 unk7; + s16 unk8; +} T_801BF170; // size 0x0A, ident to T_801BED88 /* z_map_disp */ @@ -32,7 +42,7 @@ typedef struct { /* 0x00 */ s16 unk2; /* 0x00 */ s16 unk4; /* 0x00 */ s16 unk6; -} T_D_801BEBB8_unk48; +} T_801BEBB8_unk48; typedef struct { /* 0x00 */ MinimapList* unk0; //unk0 -> sub1 -> s16[5] @@ -59,7 +69,7 @@ typedef struct { /* 0x42 */ char unk42[2]; /* 0x44 */ s16 unk44; /* 0x48 */ s16* unk48; -} T_D_801BEBB8; +} T_801BEBB8; typedef struct{ /* 0x00 */ u16 unk0; @@ -72,7 +82,7 @@ typedef struct{ typedef struct { /* 0x00 */ s16 unk0; //scene /* 0x02 */ s16 unk2; -} T_D_801BEC5C; +} T_801BEC5C; /* z_map_data */ s32 func_801096D4(s32 arg0); diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index f61a02fee..404fac482 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -1,15 +1,24 @@ #include "global.h" #include "z64map.h" -extern T_D_801BED4C D_801BED4C[]; -extern T_D_801BED88 D_801BED88[]; +extern T_801BED4C D_801BED4C[]; +extern T_801BED88 D_801BED88[]; +extern s32 D_801BF15C[5]; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801094A0.s") -// extern ? D_801BED40; +extern T_801BF170 D_801BF170[]; -// void func_801094A0(s32 arg0, ?* arg1) { -// *arg1 = (unaligned s32) *((arg0 * 4) + &D_801BED40); -// } +typedef struct { + char unk0[4]; +} T_801BED40; //size 0x04 + +extern T_801BED40 D_801BED40[]; + +extern s32 D_801BF3B4[]; +extern s32 D_801BEFC8[]; + +void func_801094A0(s32 arg0, T_801BED40* arg1) { + *arg1 = D_801BED40[arg0]; +} void func_801094C8(s32 arg0, s32 *arg1, s32 *arg2) { *arg1 = D_801BED4C[arg0].unk4; @@ -153,40 +162,223 @@ u8 func_80109908(s32 arg0) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109964.s") +s32 func_80109964(s32 arg0) { + return D_801BF15C[arg0]; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010997C.s") +void func_8010997C(s32 arg0, s32* arg1, s32* arg2) { + *arg1 = D_801BF170[arg0].unk0; + *arg2 = D_801BF170[arg0].unk1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801099AC.s") +void func_801099AC(s32 arg0, s32* arg1, s32* arg2) { + *arg1 = D_801BF170[arg0].unk2; + *arg2 = D_801BF170[arg0].unk4; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801099DC.s") +void func_801099DC(s32 arg0, s32* arg1) { + *arg1 = D_801BF170[arg0].unk6; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A00.s") +u8 func_80109A00(s32 arg0) { + return D_801BF170[arg0].unk7; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A20.s") +s16 func_80109A20(s32 arg0) { + return D_801BF170[arg0].unk8; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A40.s") +s32 func_80109A98(s32); /* extern */ -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A98.s") +s32 func_80109A40(s32 arg0) { + s32 temp_s2; + s32 var_s0; + s32 var_s1; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109AD8.s") + var_s1 = 0; + for (var_s0 = 1; var_s0 < arg0+1; var_s0++) + { + var_s1 += func_80109A98(var_s0 - 1); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109B38.s") + return var_s1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109BA0.s") +s32 func_80109A98(s32 arg0) { + return (D_801BF170[arg0].unk0 * D_801BF170[arg0].unk1) / 2; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109BF4.s") +s32 func_80109AD8(s32 arg0) { + switch (func_80109714(arg0)) { + case 0: + return D_801BF3B4[arg0]; + case 1: + return D_801BEFC8[arg0]; + default: + return 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109C38.s") +s32 func_80109B38(s32 arg0) { + if (func_80109AD8(arg0) != 0x3A) { + return 1; + } + switch (func_80109714(arg0)) { + case 0: + return 2; + case 1: + return 0; + default: + return 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109CBC.s") +s32 func_80109BA0(s32 arg0) { + s32 temp_v0 = func_80109AD8(arg0); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109D40.s") + if (temp_v0 != 0x3A) { + return temp_v0; + } + if ((arg0 >= 0x100) && (arg0 < 0x162)) { + return arg0 - 0xC6; + } + return -1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109DD8.s") +s32 func_80109BF4(s32 arg0) { + if (arg0 == -1) { + return 2; + } + if (arg0 < 0x3A) { + return 1; + } + if (arg0 >= 0x3A) { + return 0; + } + return 2; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109E70.s") +s32 func_80109C38(s32 arg0) { + if (arg0 == -1) { + return 0; + } + switch (func_80109BF4(arg0)) { + case 0: + return func_80109670(arg0 + 0xC6); + case 1: + return func_80109A40(arg0); + case 2: + return 0; + default: + return 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109EF8.s") +s32 func_80109CBC(s32 arg0) { + if (arg0 == -1) { + return 0; + } + switch (func_80109BF4(arg0)) { + case 0: + return func_801096D4(arg0 + 0xC6); + case 1: + return func_80109A98(arg0); + case 2: + return 0; + default: + return 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109F78.s") +void func_80109D40(s32 arg0, s32* arg1, s32* arg2) { + if (arg0 == -1) { + *arg2 = 0; + *arg1 = 0; + return; + } + switch (func_80109BF4(arg0)) { + case 0: + func_801095AC(arg0 + 0xC6, arg1, arg2); + return; + case 1: + func_8010997C(arg0, arg1, arg2); + return; + default: + case 2: + *arg2 = 0; + *arg1 = 0; + return; + } +} + +void func_80109DD8(s32 arg0, s32* arg1, s32* arg2) { + s32 temp_v0; + + if (arg0 == -1) { + *arg2 = 0; + *arg1 = 0; + return; + } + switch (func_80109BF4(arg0)) { + case 0: + func_801095DC(arg0 + 0xC6, arg1, arg2); + return; + case 1: + func_801099AC(arg0, arg1, arg2); + return; + default: + case 2: + *arg2 = 0; + *arg1 = 0; + return; + } +} + +void func_80109E70(s32 arg0, s32* arg1) { + if (arg0 == -1) { + *arg1 = 0; + return; + } + switch (func_80109BF4(arg0)) { + case 0: + func_8010960C(arg0 + 0xC6, arg1); + return; + case 1: + func_801099DC(arg0, arg1); + return; + case 2: + default: + *arg1 = 0; + return; + } +} + +u8 func_80109EF8(s32 arg0) { + if (arg0 == -1) { + return 0; + } + switch (func_80109BF4(arg0)) { + case 0: + return func_80109630(arg0 + 0xC6); + case 1: + return func_80109A00(arg0); + case 2: + default: + return 0; + } +} + +s16 func_80109F78(s32 arg0) { + if (arg0 == -1) { + return 0; + } + switch (func_80109BF4(arg0)) { + case 0: + return func_80109650(arg0 + 0xC6); + case 1: + return func_80109A20(arg0); + case 2: + default: + return 0; + } +} diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 0ebe651df..a213a6592 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -13,9 +13,9 @@ void func_80103A58(PlayState* play, Actor* actor); // s32 func_80106450(PlayState *); /* extern */ // s32 func_801064CC(PlayState *); /* extern */ // s32 func_8010657C(s32, s32); /* extern */ -extern T_D_801BEBB8 D_801BEBB8; +extern T_801BEBB8 D_801BEBB8; extern s32 D_801BEC1C; //scene rooms -extern T_D_801BEC5C D_801BEC5C[5]; +extern T_801BEC5C D_801BEC5C[5]; extern TexturePtr D_801BEB38; extern MinimapList D_801BEC14; @@ -39,7 +39,7 @@ void func_80103090(u16* arg0, s32* out1, s32* out2){ func_80109754(*arg0, out1, out2); } -//func_801030B4(u16 *, s32 *, u16 *, T_D_801BEBB8 *); +//func_801030B4(u16 *, s32 *, u16 *, T_801BEBB8 *); void func_801030B4(u16 *arg0, s32 *arg1) { func_8010983C(*arg0, arg1); if (*arg1 == 0) { @@ -387,8 +387,8 @@ void func_8010439C(PlayState *play) { //#ifdef NON_MATCHING // ? func_80103090(u16*, ?*, ?*); /* extern */ -// ? func_801030B4(u16*, s32*, GraphicsContext*, T_D_801BEBB8*); /* extern */ -// ? func_801030F4(f32, f32, u16*, s32*, s32*, T_D_801BEBB8*); /* extern */ +// ? func_801030B4(u16*, s32*, GraphicsContext*, T_801BEBB8*); /* extern */ +// ? func_801030F4(f32, f32, u16*, s32*, s32*, T_801BEBB8*); /* extern */ // s32 func_80103A10(PlayState*); /* extern */ // extern ? D_801BEC2C; From 2ac9fe46ade8eaeec211b46a06cf3f1fdccbcd89 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Sat, 9 Jul 2022 00:36:57 -0400 Subject: [PATCH 04/28] More OKs, MinimapList ZAPD breaking change --- include/z64map.h | 13 +- include/z64scene.h | 8 +- src/code/z_map_disp.c | 861 ++++++++++++++++++++---------------------- 3 files changed, 414 insertions(+), 468 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index c52ae2861..60e9bb7a0 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -47,7 +47,8 @@ typedef struct { typedef struct { /* 0x00 */ MinimapList* unk0; //unk0 -> sub1 -> s16[5] /* 0x04 */ s32 unk4; - /* 0x08 */ char unk8[4]; + /* 0x08 */ s16 unk8; + /* 0x0A */ s16 unkA; /* 0x0C */ s16 unkC; /* 0x0E */ s16 unkE; /* 0x10 */ s32 unk10; @@ -55,7 +56,7 @@ typedef struct { /* 0x18 */ s32 unk18; /* 0x1C */ s16 unk1C; //same as 0C /* 0x1E */ s16 unk1E; //same as 0E - /* 0x20 */ char unk20[4]; + /* 0x20 */ s32 unk20; /* 0x24 */ s32 unk24; /* 0x28 */ char unk28[8]; /* 0x30 */ s16 unk30; //scene minBounds.x @@ -71,14 +72,6 @@ typedef struct { /* 0x48 */ s16* unk48; } T_801BEBB8; -typedef struct{ - /* 0x00 */ u16 unk0; - /* 0x02 */ s16 unk2; - /* 0x04 */ char unk4[2]; - /* 0x06 */ s16 unk6; - /* 0x08 */ u16 unk8; -} T_func_801030F4; //probably above, size 0x0A? - typedef struct { /* 0x00 */ s16 unk0; //scene /* 0x02 */ s16 unk2; diff --git a/include/z64scene.h b/include/z64scene.h index 08d4a6bef..446506ee3 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -470,15 +470,15 @@ typedef struct { typedef struct { /* 0x00 */ u16 unk0; - /* 0x02 */ UNK_TYPE2 unk2; + /* 0x02 */ s16 unk2; /* 0x04 */ UNK_TYPE2 unk4; - /* 0x06 */ UNK_TYPE2 unk6; - /* 0x08 */ UNK_TYPE2 unk8; + /* 0x06 */ s16 unk6; + /* 0x08 */ u16 unk8; } MinimapEntry; // size = 0xA typedef struct { /* 0x00 */ MinimapEntry* entry; - /* 0x04 */ UNK_TYPE unk4; + /* 0x04 */ s16 unk4; } MinimapList; // size = 0x8 typedef struct { diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index a213a6592..7b37236e3 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -2,17 +2,12 @@ #include "z64map.h" void func_801031D0(PlayState* play, s32, s32, s32, s32, f32); -void func_80103090(u16*, s32*, s32*); +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); -// ? func_80104AE8(PlayState *); /* extern */ -// ? func_80105FE0(PlayState *, s32, s32, s32); /* extern */ -// s32 func_80106450(PlayState *); /* extern */ -// s32 func_801064CC(PlayState *); /* extern */ -// s32 func_8010657C(s32, s32); /* extern */ extern T_801BEBB8 D_801BEBB8; extern s32 D_801BEC1C; //scene rooms extern T_801BEC5C D_801BEC5C[5]; @@ -21,6 +16,21 @@ extern TexturePtr D_801BEB38; extern MinimapList D_801BEC14; extern MinimapEntry D_801F5130[0x50]; +typedef struct { + /* 0x00 */ UNK_TYPE1 unk0[8]; + /* 0x08 */ s32 unk8; // G_IM_SIZ +} T_801BEAE0; + +extern Gfx D_0401ED00[]; +extern T_801BEAE0 D_801BEAE0; + +extern s32 D_801BEAF8; +extern s32 D_801BEB08; +extern s32 D_801BEB18; +extern s32 D_801BEB28; +extern s32 D_801BEAD8; +extern Color_RGBA8 D_801BEC2C[]; // cat colors + #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E40.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E90.s") @@ -33,21 +43,21 @@ extern MinimapEntry D_801F5130[0x50]; #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102EF0.s") +f32 func_80102F9C(f32); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102F9C.s") -void func_80103090(u16* arg0, s32* out1, s32* out2){ - func_80109754(*arg0, out1, out2); +void func_80103090(MinimapEntry* arg0, s32* out1, s32* out2){ + func_80109754(arg0->unk0, out1, out2); } -//func_801030B4(u16 *, s32 *, u16 *, T_801BEBB8 *); -void func_801030B4(u16 *arg0, s32 *arg1) { - func_8010983C(*arg0, arg1); +void func_801030B4(MinimapEntry *arg0, s32 *arg1) { + func_8010983C(arg0->unk0, arg1); if (*arg1 == 0) { *arg1 = 0x14; } } -void func_801030F4(T_func_801030F4* arg0, s32* arg1, s32* arg2) { +void func_801030F4(MinimapEntry* arg0, s32* arg1, s32* arg2) { s32 sp2C; s32 sp28; s32 temp_v0; @@ -70,7 +80,6 @@ void func_801030F4(T_func_801030F4* arg0, s32* arg1, s32* arg2) { } } - #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801031D0.s") s32 func_801039EC(PlayState *play) { @@ -80,281 +89,282 @@ s32 func_801039EC(PlayState *play) { return false; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A10.s") +s32 func_80103A10(PlayState* play) { + if ((gSaveContext.save.entranceIndex == 0x6400) && (Cutscene_GetSceneSetupIndex(play) != 0)) { + return false; + } + return true; +} +#ifdef NON_MATCHING +void func_80103A58(PlayState *play, Actor *actor) { + MinimapEntry *spDC; + s32 spD8; + s32 spD4; + s32 spD0; + s32 spCC; + s32 spC8; + s32 spC4; + f32 spC0; + Player *spB4; + s32 spAC; + GraphicsContext *spA8; + s16 spA2; + //GraphicsContext *temp_a0_2; + f32 temp_fv0; + s16 temp_v0_2; + s16 temp_v1; + s16 temp_v1_3; + s16 var_v0; + s16 var_v1; + s32 temp_t3; + s32 temp_v1_4; + s32 var_t2; + s32 var_t8; + u32 temp_v0_19; + u32 temp_v1_5; + u32 var_a0; + u32 var_a1; + u32 var_v1_2; + Color_RGBA8 *temp_v1_6; + + spB4 = GET_PLAYER(play); //play->actorCtx.actorLists[2].first; + spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4];//->unk0 + ( * 0xA); + if (spDC->unk0 != 0xFFFF) { + //spDC = temp_a0; + func_801030F4(spDC, &spD0, &spCC); + func_80103090(spDC, &spC8, &spC4); + temp_v1 = D_801BEBB8.unk0->unk4; + var_v0 = temp_v1; + if (temp_v1 == 0) { + var_v0 = 0x14; + } else if (temp_v1 == -1) { + func_801030B4(spDC, &spAC); + var_v0 = (s16) spAC; + } + temp_fv0 = 1.0f / (f32) var_v0; + spC0 = temp_fv0; + if (func_801039EC(play) == 0) { + spD8 = (((s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0) + D_801BEBB8.unk8 + D_801BEBB8.unkC) - D_801BEBB8.unk8) + spD0; + var_t8 = ((s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0) + D_801BEBB8.unkA + D_801BEBB8.unkE) - D_801BEBB8.unkA; + } else { + spD8 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + spD0; + var_t8 = ((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0)) + D_801BEBB8.unkE) - D_801BEBB8.unkA; + } + spD4 = var_t8 + spCC; + if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { + //temp_a0_2 = play->state.gfxCtx; + OPEN_DISPS(play->state.gfxCtx); + if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) { + //spA8 = temp_a0_2; + func_8012C8D4(play->state.gfxCtx); //temp_a0_2); + // temp_v0_3 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_3 + 8; + // temp_v0_3->words.w0 = 0xDA380003; + // temp_v0_3->words.w1 = (u32) &gIdentityMtx; + // temp_v0_4 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_4 + 8; + // temp_v0_4->words.w0 = 0xFC309661; + // temp_v0_4->words.w1 = 0x552EFF7F; + // temp_v0_5 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_5 + 8; + // temp_v0_5->words.w0 = 0xFB000000; + // temp_v0_5->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; + // temp_v0_6 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_6 + 8; + // temp_v0_6->words.w1 = 0xFFFDF6FB; + // temp_v0_6->words.w0 = 0xFCFFFFFF; + // temp_v0_7 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_7 + 8; + // temp_v0_7->words.w0 = 0xE200001C; + // temp_v0_7->words.w1 = 0x00407248; + + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); + + //sp1C = play + 0x10000; + //spA8 = spA8; + Matrix_Translate((f32) spD8 - 160.0f, 120.0f - (f32) spD4, 0.0f, MTXMODE_NEW); + Matrix_RotateXFApply(-1.6f); + temp_v1_4 = (s32) (0x7FFF - actor->focus.rot.y) / 1024; + spA2 = (s16) temp_v1_4; + var_v1 = (s16) temp_v1_4; + if (func_801039EC(play) != 0) { + var_v1 += 0x7FFF; + } + // spA8 = spA8; + Matrix_RotateYF((f32) var_v1 / 10.0f, MTXMODE_APPLY); + Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); + // temp_v0_8 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_8 + 8; + // temp_v0_8->words.w0 = 0xDA380003; + // spA8 = spA8; + // sp88 = temp_v0_8; + // sp88->words.w1 = Matrix_NewMtx(play->state.gfxCtx); + // temp_v0_9 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_9 + 8; + // temp_v0_9->words.w0 = 0xFA000000; + // temp_v0_9->words.w1 = ((u8)play->interfaceCtx.minimapAlpha) | 0xC8FF0000; + // temp_v0_10 = spA8->overlay.p; + // spA8->overlay.p = temp_v0_10 + 8; + // temp_v0_10->words.w1 = (u32) &D_0401ED00; + // temp_v0_10->words.w0 = 0xDE000000; + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0xC8, 0xFF, 0x00, 0x00); + gSPDisplayList(OVERLAY_DISP++, &D_0401ED00); + return; + } + if (actor->id == ACTOR_EN_BOX) { + //spD4 = spD4; + //spD8 = spD8; + //spA8 = temp_a0_2; = play->state.gfxCtx; + if (Flags_GetTreasure(play, actor->params & 0x1F) == 0) { + //spD4 = spD4; + //spD8 = spD8; + //spA8 = temp_a0_2; + //sp2C = ; + if (func_80102F9C(spB4->actor.world.pos.y) == func_80102F9C(actor->world.pos.y)) { + //spD4 = spD4; + //spD8 = spD8; + //spA8 = temp_a0_2; + func_8012C654(play->state.gfxCtx); + // temp_v0_11 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_11 + 8; + // temp_v0_11->words.w1 = 0x00000000; + // temp_v0_11->words.w0 = 0xE7000000; + // temp_v0_12 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_12 + 8; + // temp_v0_12->words.w1 = 0x00000000; + // temp_v0_12->words.w0 = 0xE3001001; + // temp_v0_13 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_13 + 8; + // temp_v0_13->words.w0 = 0xFA000000; + // temp_v0_13->words.w1 = (play->interfaceCtx.minimapAlpha & 0xFF) | ~0xFF; + // temp_v0_14 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_14 + 8; + // temp_v0_14->words.w0 = 0xFB000000; + // temp_v0_14->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; + // temp_v0_15 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_15 + 8; + // temp_v0_15->words.w1 = 0x00000000; + // temp_v0_15->words.w0 = 0xE7000000; + // temp_v0_16 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_16 + 8; + // //gsDPSetTextureImage(G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 1, 0x02003F20) + // temp_v0_16->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xFD000000; + // temp_v0_16->words.w1 = (u32) &D_02003F20; + // temp_v0_17 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_17 + 8; + // temp_v0_17->words.w1 = 0x07000000; + // temp_v0_17->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xF5000000; + // //gsDPSetTile(G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD) + // temp_v0_18 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_18 + 8; + // temp_v0_18->words.w1 = 0x00000000; + // temp_v0_18->words.w0 = 0xE6000000; + // temp_a2 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_a2 + 8; + gDPPipeSync(OVERLAY_DISP++); + gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); + gDPPipeSync(OVERLAY_DISP++); + gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 1, 0x02003F20); + gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync(OVERLAY_DISP++); + + //temp_a2->words.w0 = 0xF3000000; + temp_v1_5 = ((u32) (D_801BEAF8 + 0x40) >> D_801BEB08) - 1; + var_a0 = 0x7FF; + if (temp_v1_5 < 0x7FFU) { + var_a0 = temp_v1_5; + } + temp_v0_19 = (u32) (D_801BEB18 * 8) >> 3; + var_a1 = temp_v0_19; + if (temp_v0_19 == 0) { + var_a1 = 1; + } + if (temp_v0_19 == 0) { + var_v1_2 = 1; + } else { + var_v1_2 = temp_v0_19; + } + //temp_a2->words.w1 = (((u32) (var_a1 + 0x7FF) / var_v1_2) & 0xFFF) | 0x07000000U | ((var_a0 & 0xFFF) << 0xC); + gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0, var_a0, (u32) (var_a1 + 0x7FF) / var_v1_2); + // temp_v0_20 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_20 + 8; + // temp_v0_20->words.w1 = 0x00000000; + // temp_v0_20->words.w0 = 0xE7000000; + gDPPipeSync(OVERLAY_DISP++); + + // temp_v0_21 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_21 + 8; + // temp_v0_21->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) << 0x13); + // temp_v0_21->words.w1 = 0x00000000; + + gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, (D_801BEAD8 & 3), ((u32) ((D_801BEB28 * 8) + 7) >> 3), 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + // temp_v0_22 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_22 + 8; + // temp_v0_22->words.w0 = 0xF2000000; + // temp_v0_22->words.w1 = 0x0001C01C; + gDPSetTileSize(OVERLAY_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); + // temp_v0_23 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_23 + 8; + // temp_v0_23->words.w0 = ((((var_t2 + 4) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 4) * 4) & 0xFFF); + // temp_v0_23->words.w1 = ((((var_t2 - 4) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 4) * 4) & 0xFFF); + // temp_v0_24 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_24 + 8; + // temp_v0_24->words.w1 = 0x00000000; + // temp_v0_24->words.w0 = 0xE1000000; + // temp_v0_25 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_25 + 8; + // temp_v0_25->words.w1 = 0x04000400; + // temp_v0_25->words.w0 = 0xF1000000; + gSPTextureRectangle(OVERLAY_DISP++, ((spD8 - 4) * 4), ((spD4 - 4) * 4), ((spD8 + 4) * 4), ((spD4 + 4) * 4), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + return; + } + } + } + spD4 = spD4; + spD8 = spD8; + //spA8 = temp_a0_2; + func_8012C654(play->state.gfxCtx); + // temp_v0_26 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_26 + 8; + // temp_v0_26->words.w0 = 0xFC119623; + // temp_v0_26->words.w1 = 0xFF2FFFFF; + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + if (actor->flags & 0x80000000) { + // temp_v0_27 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_27 + 8; + // temp_v0_27->words.w0 = 0xFA000000; + temp_v1_6 = &D_801BEC2C[actor->category]; + //temp_v0_27->words.w1 = (temp_v1_6->unk2 << 8) | (temp_v1_6->unk0 << 0x18) | (temp_v1_6->unk1 << 0x10) | (play->interfaceCtx.minimapAlpha & 0xFF); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, temp_v1_6->r, temp_v1_6->g, temp_v1_6->b, play->interfaceCtx.minimapAlpha); + // temp_v0_28 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_28 + 8; + // temp_v0_28->words.w0 = ((((var_t2 + 1) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 1) * 4) & 0xFFF); + // temp_v0_28->words.w1 = ((((var_t2 - 1) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 1) * 4) & 0xFFF); + // temp_v0_29 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_29 + 8; + // temp_v0_29->words.w1 = 0x00000000; + // temp_v0_29->words.w0 = 0xE1000000; + // temp_v0_30 = temp_a0_2->overlay.p; + // temp_a0_2->overlay.p = temp_v0_30 + 8; + // temp_v0_30->words.w1 = 0x00010001; + // temp_v0_30->words.w0 = 0xF1000000; + gSPTextureRectangle(OVERLAY_DISP++, ((spD8 - 1) * 4), ((spD4 - 1) * 4), ((spD8 + 1) * 4), ((spD4 + 1) * 4), G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + } + CLOSE_DISPS(play->state.gfxCtx); + } + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A58.s") -// void func_80103A58(PlayState *play, Actor *actor) { -// u16 *spDC; -// s32 spD8; -// s32 spD4; -// s32 spD0; -// s32 spCC; -// s32 spC8; -// s32 spC4; -// f32 spC0; -// Actor *spB4; -// s32 spAC; -// GraphicsContext *spA8; -// s16 spA2; -// Gfx *sp88; -// f32 sp2C; -// void *sp1C; -// Gfx *temp_a2; -// Gfx *temp_v0_10; -// Gfx *temp_v0_11; -// Gfx *temp_v0_12; -// Gfx *temp_v0_13; -// Gfx *temp_v0_14; -// Gfx *temp_v0_15; -// Gfx *temp_v0_16; -// Gfx *temp_v0_17; -// Gfx *temp_v0_18; -// Gfx *temp_v0_20; -// Gfx *temp_v0_21; -// Gfx *temp_v0_22; -// Gfx *temp_v0_23; -// Gfx *temp_v0_24; -// Gfx *temp_v0_25; -// Gfx *temp_v0_26; -// Gfx *temp_v0_27; -// Gfx *temp_v0_28; -// Gfx *temp_v0_29; -// Gfx *temp_v0_30; -// Gfx *temp_v0_3; -// Gfx *temp_v0_4; -// Gfx *temp_v0_5; -// Gfx *temp_v0_6; -// Gfx *temp_v0_7; -// Gfx *temp_v0_8; -// Gfx *temp_v0_9; -// GraphicsContext *temp_a0_2; -// f32 temp_fv0; -// s16 temp_v0; -// s16 temp_v0_2; -// s16 temp_v1; -// s16 temp_v1_2; -// s16 temp_v1_3; -// s16 var_v0; -// s16 var_v1; -// s32 temp_t3; -// s32 temp_v1_4; -// s32 var_t2; -// s32 var_t8; -// u16 *temp_a0; -// u32 temp_v0_19; -// u32 temp_v1_5; -// u32 var_a0; -// u32 var_a1; -// u32 var_v1_2; -// void *temp_v1_6; - -// temp_a0 = D_801BEBB8.unk0->unk0 + (D_801BEBB8.unk4 * 0xA); -// if (*temp_a0 != 0xFFFF) { -// spB4 = play->actorCtx.actorLists[2].first; -// spDC = temp_a0; -// func_801030F4(temp_a0, &spD0, &spCC, &D_801BEBB8); -// func_80103090(spDC, &spC8, &spC4); -// temp_v1 = D_801BEBB8.unk0->unk4; -// var_v0 = temp_v1; -// if (temp_v1 == 0) { -// var_v0 = 0x14; -// } else if (temp_v1 == -1) { -// func_801030B4(spDC, &spAC, spDC, &D_801BEBB8); -// var_v0 = (s16) spAC; -// } -// temp_fv0 = 1.0f / (f32) var_v0; -// spC0 = temp_fv0; -// if (func_801039EC(play) == 0) { -// temp_v0 = D_801BEBB8.unk8; -// temp_v1_2 = D_801BEBB8.unkA; -// var_t2 = (((s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0) + temp_v0 + D_801BEBB8.unkC) - temp_v0) + spD0; -// var_t8 = ((s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0) + temp_v1_2 + D_801BEBB8.unkE) - temp_v1_2; -// } else { -// temp_v0_2 = D_801BEBB8.unk8; -// temp_v1_3 = D_801BEBB8.unkA; -// var_t2 = (((temp_v0_2 - (s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0)) + D_801BEBB8.unkC) - temp_v0_2) + spD0; -// var_t8 = ((temp_v1_3 - (s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0)) + D_801BEBB8.unkE) - temp_v1_3; -// } -// temp_t3 = var_t8 + spCC; -// if ((var_t2 > 0) && (var_t2 < 0x3FF) && (temp_t3 > 0) && (temp_t3 < 0x3FF)) { -// temp_a0_2 = play->state.gfxCtx; -// if ((actor->category == 2) && (actor->flags & 0x80000000)) { -// spA8 = temp_a0_2; -// spD8 = var_t2; -// spD4 = temp_t3; -// func_8012C8D4(temp_a0_2); -// temp_v0_3 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_3 + 8; -// temp_v0_3->words.w0 = 0xDA380003; -// temp_v0_3->words.w1 = (u32) &gIdentityMtx; -// temp_v0_4 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_4 + 8; -// temp_v0_4->words.w0 = 0xFC309661; -// temp_v0_4->words.w1 = 0x552EFF7F; -// temp_v0_5 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_5 + 8; -// temp_v0_5->words.w0 = 0xFB000000; -// temp_v0_5->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; -// temp_v0_6 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_6 + 8; -// temp_v0_6->words.w1 = 0xFFFDF6FB; -// temp_v0_6->words.w0 = 0xFCFFFFFF; -// temp_v0_7 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_7 + 8; -// temp_v0_7->words.w0 = 0xE200001C; -// temp_v0_7->words.w1 = 0x407248; -// sp1C = play + 0x10000; -// spA8 = spA8; -// Matrix_Translate((f32) var_t2 - 160.0f, 120.0f - (f32) temp_t3, 0.0f, MTXMODE_NEW); -// Matrix_RotateXFApply(-1.6f); -// temp_v1_4 = (s32) (0x7FFF - actor->focus.rot.y) / 1024; -// spA2 = (s16) temp_v1_4; -// var_v1 = (s16) temp_v1_4; -// if (func_801039EC(play) != 0) { -// var_v1 += 0x7FFF; -// } -// spA8 = spA8; -// Matrix_RotateYF((f32) var_v1 / 10.0f, MTXMODE_APPLY); -// Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); -// temp_v0_8 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_8 + 8; -// temp_v0_8->words.w0 = 0xDA380003; -// spA8 = spA8; -// sp88 = temp_v0_8; -// sp88->words.w1 = Matrix_NewMtx(play->state.gfxCtx); -// temp_v0_9 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_9 + 8; -// temp_v0_9->words.w0 = 0xFA000000; -// temp_v0_9->words.w1 = (sp1C->unk6C5C & 0xFF) | 0xC8FF0000; -// temp_v0_10 = spA8->overlay.p; -// spA8->overlay.p = temp_v0_10 + 8; -// temp_v0_10->words.w1 = (u32) &D_0401ED00; -// temp_v0_10->words.w0 = 0xDE000000; -// return; -// } -// if (actor->id == 6) { -// spD4 = temp_t3; -// spD8 = var_t2; -// spA8 = temp_a0_2; -// if (Flags_GetTreasure(play, actor->params & 0x1F) == 0) { -// spD4 = temp_t3; -// spD8 = var_t2; -// spA8 = temp_a0_2; -// sp2C = func_80102F9C(spB4->world.pos.y); -// if (func_80102F9C(actor->world.pos.y) == sp2C) { -// spD4 = temp_t3; -// spD8 = var_t2; -// spA8 = temp_a0_2; -// func_8012C654(play->state.gfxCtx); -// temp_v0_11 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_11 + 8; -// temp_v0_11->words.w1 = 0; -// temp_v0_11->words.w0 = 0xE7000000; -// temp_v0_12 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_12 + 8; -// temp_v0_12->words.w1 = 0; -// temp_v0_12->words.w0 = 0xE3001001; -// temp_v0_13 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_13 + 8; -// temp_v0_13->words.w0 = 0xFA000000; -// temp_v0_13->words.w1 = (play->interfaceCtx.minimapAlpha & 0xFF) | ~0xFF; -// temp_v0_14 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_14 + 8; -// temp_v0_14->words.w0 = 0xFB000000; -// temp_v0_14->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; -// temp_v0_15 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_15 + 8; -// temp_v0_15->words.w1 = 0; -// temp_v0_15->words.w0 = 0xE7000000; -// temp_v0_16 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_16 + 8; -// temp_v0_16->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xFD000000; -// temp_v0_16->words.w1 = (u32) &D_02003F20; -// temp_v0_17 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_17 + 8; -// temp_v0_17->words.w1 = 0x07000000; -// temp_v0_17->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xF5000000; -// temp_v0_18 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_18 + 8; -// temp_v0_18->words.w1 = 0; -// temp_v0_18->words.w0 = 0xE6000000; -// temp_a2 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_a2 + 8; -// temp_a2->words.w0 = 0xF3000000; -// temp_v1_5 = ((u32) (D_801BEAF8 + 0x40) >> D_801BEB08) - 1; -// var_a0 = 0x7FF; -// if (temp_v1_5 < 0x7FFU) { -// var_a0 = temp_v1_5; -// } -// temp_v0_19 = (u32) (D_801BEB18 * 8) >> 3; -// var_a1 = temp_v0_19; -// if (temp_v0_19 == 0) { -// var_a1 = 1; -// } -// if (temp_v0_19 == 0) { -// var_v1_2 = 1; -// } else { -// var_v1_2 = temp_v0_19; -// } -// temp_a2->words.w1 = (((u32) (var_a1 + 0x7FF) / var_v1_2) & 0xFFF) | 0x07000000U | ((var_a0 & 0xFFF) << 0xC); -// temp_v0_20 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_20 + 8; -// temp_v0_20->words.w1 = 0; -// temp_v0_20->words.w0 = 0xE7000000; -// temp_v0_21 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_21 + 8; -// temp_v0_21->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) << 0x13); -// temp_v0_21->words.w1 = 0; -// temp_v0_22 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_22 + 8; -// temp_v0_22->words.w0 = 0xF2000000; -// temp_v0_22->words.w1 = 0x1C01C; -// temp_v0_23 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_23 + 8; -// temp_v0_23->words.w0 = ((((var_t2 + 4) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 4) * 4) & 0xFFF); -// temp_v0_23->words.w1 = ((((var_t2 - 4) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 4) * 4) & 0xFFF); -// temp_v0_24 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_24 + 8; -// temp_v0_24->words.w1 = 0; -// temp_v0_24->words.w0 = 0xE1000000; -// temp_v0_25 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_25 + 8; -// temp_v0_25->words.w1 = 0x04000400; -// temp_v0_25->words.w0 = 0xF1000000; -// return; -// } -// } -// } -// spD4 = temp_t3; -// spD8 = var_t2; -// spA8 = temp_a0_2; -// func_8012C654(play->state.gfxCtx); -// temp_v0_26 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_26 + 8; -// temp_v0_26->words.w0 = 0xFC119623; -// temp_v0_26->words.w1 = 0xFF2FFFFF; -// if (actor->flags & 0x80000000) { -// temp_v0_27 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_27 + 8; -// temp_v0_27->words.w0 = 0xFA000000; -// temp_v1_6 = (actor->category * 4) + &D_801BEC2C; -// temp_v0_27->words.w1 = (temp_v1_6->unk2 << 8) | (temp_v1_6->unk0 << 0x18) | (temp_v1_6->unk1 << 0x10) | (play->interfaceCtx.minimapAlpha & 0xFF); -// temp_v0_28 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_28 + 8; -// temp_v0_28->words.w0 = ((((var_t2 + 1) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 1) * 4) & 0xFFF); -// temp_v0_28->words.w1 = ((((var_t2 - 1) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 1) * 4) & 0xFFF); -// temp_v0_29 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_29 + 8; -// temp_v0_29->words.w1 = 0; -// temp_v0_29->words.w0 = 0xE1000000; -// temp_v0_30 = temp_a0_2->overlay.p; -// temp_a0_2->overlay.p = temp_v0_30 + 8; -// temp_v0_30->words.w1 = 0x10001; -// temp_v0_30->words.w0 = 0xF1000000; -// } -// } -// } -// } +#endif void func_8010439C(PlayState *play) { ActorContext *actorCtx; @@ -385,146 +395,80 @@ void func_8010439C(PlayState *play) { } } -//#ifdef NON_MATCHING -// ? func_80103090(u16*, ?*, ?*); /* extern */ -// ? func_801030B4(u16*, s32*, GraphicsContext*, T_801BEBB8*); /* extern */ -// ? func_801030F4(f32, f32, u16*, s32*, s32*, T_801BEBB8*); /* extern */ -// s32 func_80103A10(PlayState*); /* extern */ -// extern ? D_801BEC2C; - -// void func_801045AC(PlayState* play, Actor* actor) { -// u16* sp7C; -// s32 sp78; -// s32 sp74; -// s32 sp70; -// s32 sp6C; -// ? sp68; -// ? sp64; -// f32 sp5C; -// f32 sp50; -// s32 sp4C; -// GraphicsContext* sp48; -// s32 sp34; -// Gfx* temp_a0_3; -// Gfx* temp_v0_10; -// Gfx* temp_v0_11; -// Gfx* temp_v0_4; -// Gfx* temp_v0_6; -// Gfx* temp_v0_7; -// Gfx* temp_v0_8; -// Gfx* temp_v0_9; -// GraphicsContext* temp_a0_2; -// GraphicsContext* var_a2; -// f32 temp_fv0; -// f32 temp_fv1; -// f32 var_fa0; -// f32 var_ft1; -// s16 temp_v0; -// s16 temp_v0_2; -// s16 temp_v0_3; -// s16 temp_v0_5; -// s16 temp_v1; -// s16 temp_v1_2; -// s16 var_v1; -// s16 var_v1_2; -// s32 var_t0; -// s32 var_t0_2; -// s32 var_t1; -// s32 var_t1_2; -// u16* temp_a0; -// u8 temp_t7; -// void* temp_v1_3; - -// temp_fv1 = 0.0028571428f * fabsf(play->actorCtx.actorLists[2].first->world.pos.y - actor->world.pos.y); -// var_fa0 = 1.0f - temp_fv1; -// if (temp_fv1 > 1.0f) { -// var_fa0 = 0.0f; -// } -// temp_a0 = D_801BEBB8.unk0->unk0 + (D_801BEBB8.unk4 * 0xA); -// if (*temp_a0 != 0xFFFF) { -// sp7C = temp_a0; -// sp50 = var_fa0; -// func_801030F4(var_fa0, 1.0f, temp_a0, &sp70, &sp6C, &D_801BEBB8); -// func_80103090(sp7C, &sp68, &sp64); -// temp_v0 = D_801BEBB8.unk0->unk4; -// var_v1 = temp_v0; -// if (temp_v0 == 0) { -// var_v1 = 0x14; -// } else if (temp_v0 == -1) { -// func_801030B4(sp7C, &sp4C); -// var_v1 = (s16) sp4C; -// } -// temp_fv0 = 1.0f / (f32) var_v1; -// sp5C = temp_fv0; -// if (func_801039EC(play) == 0) { -// temp_v0_2 = D_801BEBB8.unk8; -// temp_v1 = D_801BEBB8.unkA; -// var_t0 = (((s32) ((actor->world.pos.x - (f32) sp7C->unk2) * temp_fv0) + temp_v0_2 + D_801BEBB8.unkC) - temp_v0_2) + sp70; -// var_t1 = (((s32) ((actor->world.pos.z - (f32) sp7C->unk6) * temp_fv0) + temp_v1 + D_801BEBB8.unkE) - temp_v1) + sp6C; -// } else { -// temp_v0_3 = D_801BEBB8.unk8; -// temp_v1_2 = D_801BEBB8.unkA; -// var_t0 = (((temp_v0_3 - (s32) ((actor->world.pos.x - (f32) sp7C->unk2) * temp_fv0)) + D_801BEBB8.unkC) - temp_v0_3) + sp70; -// var_t1 = (((temp_v1_2 - (s32) ((actor->world.pos.z - (f32) sp7C->unk6) * temp_fv0)) + D_801BEBB8.unkE) - temp_v1_2) + sp6C; -// } -// if ((var_t0 > 0) && (var_t0 < 0x3FF) && (var_t1 > 0) && (var_t1 < 0x3FF) && (temp_a0_2 = play->state.gfxCtx, sp74 = var_t1, sp78 = var_t0, sp48 = temp_a0_2, func_8012C654(temp_a0_2), temp_v0_4 = sp48->overlay.p, sp48->overlay.p = temp_v0_4 + 8, temp_v0_4->words.w0 = 0xFC119623, temp_v0_4->words.w1 = 0xFF2FFFFF, (actor->category == 0xA)) && (sp48 = sp48, sp78 = var_t0, sp74 = var_t1, var_a2 = sp48, var_t0_2 = var_t0, var_t1_2 = var_t1, (func_80103A10(play) != 0))) { -// temp_a0_3 = var_a2->overlay.p; -// var_a2->overlay.p = temp_a0_3 + 8; -// temp_a0_3->words.w0 = 0xFA000000; -// temp_v1_3 = (actor->category * 4) + &D_801BEC2C; -// temp_t7 = temp_v1_3->unk3; -// var_ft1 = (f32) temp_t7; -// if ((s32) temp_t7 < 0) { -// var_ft1 += 4294967296.0f; -// } -// temp_a0_3->words.w1 = ((s32) ((var_ft1 * (1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)) * sp50 * (f32) play->interfaceCtx.minimapAlpha) / 255.0f) & 0xFF) | (temp_v1_3->unk0 << 0x18) | (temp_v1_3->unk1 << 0x10) | (temp_v1_3->unk2 << 8); -// temp_v0_5 = D_801BEBB8.unk0->unk4; -// var_v1_2 = temp_v0_5; -// if (temp_v0_5 == 0) { -// var_v1_2 = 0x14; -// } else if (temp_v0_5 == -1) { -// sp48 = var_a2; -// sp78 = var_t0_2; -// sp74 = var_t1_2; -// func_801030B4(sp7C, &sp34, var_a2, &D_801BEBB8); -// var_a2 = sp48; -// var_t0_2 = sp78; -// var_t1_2 = sp74; -// var_v1_2 = (s16) sp34; -// } -// if (var_v1_2 < 0x33) { -// temp_v0_6 = var_a2->overlay.p; -// var_a2->overlay.p = temp_v0_6 + 8; -// temp_v0_6->words.w0 = ((((var_t0_2 + 2) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((var_t1_2 + 2) * 4) & 0xFFF); -// temp_v0_6->words.w1 = ((((var_t0_2 - 2) * 4) & 0xFFF) << 0xC) | (((var_t1_2 - 2) * 4) & 0xFFF); -// temp_v0_7 = var_a2->overlay.p; -// var_a2->overlay.p = temp_v0_7 + 8; -// temp_v0_7->words.w1 = 0; -// temp_v0_7->words.w0 = 0xE1000000; -// temp_v0_8 = var_a2->overlay.p; -// var_a2->overlay.p = temp_v0_8 + 8; -// temp_v0_8->words.w1 = 0x10001; -// temp_v0_8->words.w0 = 0xF1000000; -// return; -// } -// temp_v0_9 = var_a2->overlay.p; -// var_a2->overlay.p = temp_v0_9 + 8; -// temp_v0_9->words.w0 = ((((var_t0_2 + 1) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((var_t1_2 + 1) * 4) & 0xFFF); -// temp_v0_9->words.w1 = ((((var_t0_2 - 1) * 4) & 0xFFF) << 0xC) | (((var_t1_2 - 1) * 4) & 0xFFF); -// temp_v0_10 = var_a2->overlay.p; -// var_a2->overlay.p = temp_v0_10 + 8; -// temp_v0_10->words.w1 = 0; -// temp_v0_10->words.w0 = 0xE1000000; -// temp_v0_11 = var_a2->overlay.p; -// var_a2->overlay.p = temp_v0_11 + 8; -// temp_v0_11->words.w1 = 0x10001; -// temp_v0_11->words.w0 = 0xF1000000; -// } -// } -// } -// #else +#ifdef NON_MATCHING +void func_801045AC(PlayState* play, Actor* actor) { //4729 + MinimapEntry* sp7C; + s32 sp78; + s32 sp74; + s32 sp70; + s32 sp6C; + s32 sp68; + s32 sp64; + f32 temp_fv1; + s16 temp_v0; + s16 temp_v0_5; + f32 sp5C; + s32 var_v1; + s32 var_v1_2; + f32 sp50; + s32 sp4C; + //GraphicsContext* sp48; + + temp_fv1 = 0.0028571428f * fabsf(play->actorCtx.actorLists[2].first->world.pos.y - actor->world.pos.y); + sp50 = 1.0f - temp_fv1; + if (temp_fv1 > 1.0f) { + sp50 = 0.0f; + } + sp7C = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + if (sp7C->unk0 != 0xFFFF) { + func_801030F4(sp7C, &sp70, &sp6C); + func_80103090(sp7C, &sp68, &sp64); + temp_v0 = D_801BEBB8.unk0->unk4; + var_v1 = temp_v0; + if (temp_v0 == 0) { + var_v1 = 0x14; + } else if (temp_v0 == -1) { + func_801030B4(sp7C, &sp4C); + var_v1 = sp4C; + } + sp5C = 1.0f / (f32) var_v1; + if (func_801039EC(play) == 0) { + sp78 = (((s32) ((actor->world.pos.x - (f32) sp7C->unk2) * sp5C) + D_801BEBB8.unk8 + D_801BEBB8.unkC) - D_801BEBB8.unk8) + sp70; + sp74 = (((s32) ((actor->world.pos.z - (f32) sp7C->unk6) * sp5C) + D_801BEBB8.unkA + D_801BEBB8.unkE) - D_801BEBB8.unkA) + sp6C; + } else { + sp78 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - (f32) sp7C->unk2) * sp5C)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + sp70; + sp74 = (((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - (f32) sp7C->unk6) * sp5C)) + D_801BEBB8.unkE) - D_801BEBB8.unkA) + sp6C; + } + if ((sp78 > 0) && (sp78 < 0x3FF) && (sp74 > 0) && (sp74 < 0x3FF) ) { + OPEN_DISPS(play->state.gfxCtx); + func_8012C654(play->state.gfxCtx); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + if ((actor->category == 0xA) && (func_80103A10(play) != 0)) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, (s32)((D_801BEC2C[actor->category].a * (1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)) * sp50 * (f32) play->interfaceCtx.minimapAlpha) / 255.0f)); + temp_v0_5 = D_801BEBB8.unk0->unk4; + var_v1_2 = temp_v0_5; + if (temp_v0_5 == 0) { + var_v1_2 = 0x14; + } else if (temp_v0_5 == -1) { + s32 sp34; + func_801030B4(sp7C, &sp34); // sp34 is local temp + var_v1_2 = sp34; + } + if (var_v1_2 <= 50) { + gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 2) * 4, (sp74 - 2) * 4, (sp78 + 2) * 4, (sp74 + 2) * 4, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + } else { + gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 1) * 4, (sp74 - 1) * 4, (sp78 + 1) * 4, (sp74 + 1) * 4, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + } + } + CLOSE_DISPS(play->state.gfxCtx); + } + } +} +#else +void func_801045AC(PlayState* play, Actor* actor); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801045AC.s") -// #endif +#endif void func_80104AE8(PlayState *play) { s32 i; @@ -629,12 +573,9 @@ void func_80104F34(PlayState* arg0) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105328.s") +void func_8010534C(PlayState*); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010534C.s") - -// ? func_80104F34(PlayState*); /* extern */ -// ? func_8010534C(PlayState*); /* extern */ - #ifdef NON_MATCHING void func_8010549C(PlayState* globalCtx, void* segmentAddress) { MinimapEntry* var_v1; @@ -652,7 +593,7 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) { D_801F5130[i] = var_v1[i]; } - D_801BEC14.entry = &D_801F5130; + D_801BEC14.entry = D_801F5130; if (globalCtx->colCtx.colHeader != NULL) { D_801BEBB8.unk30 = globalCtx->colCtx.colHeader->minBounds.x; D_801BEBB8.unk32 = globalCtx->colCtx.colHeader->minBounds.z; @@ -682,36 +623,48 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105FE0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106408.s") +s32 func_80106408(PlayState* arg0) { + if ((gSaveContext.save.entranceIndex == 0x6400) && (Cutscene_GetSceneSetupIndex(arg0) != 0)) { + return true; + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106450.s") +s32 func_80106450(PlayState* play) { + if (((func_8010A0A4(play) == 0) && (Inventory_IsMapVisible(play->sceneNum) != 0)) + || ((func_8010A0A4(play) != 0) && CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) )) { + return true; + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801064CC.s") +s32 func_801064CC(PlayState* play) { + if (((play->csCtx.state != 0) && (func_80106408(play) == 0)) || (D_801BEBB8.unk20 & 2) || (func_8010A208(play) != 0)) { + return true; + } + return false; +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106530.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010657C.s") -// s32 func_8010657C(s32 arg0, s32 arg1) { -// s16 temp_a3; -// s16 temp_t0; -// s32 temp_a2; -// s32 temp_v1; +s32 func_8010657C(s32 arg0, s32 arg1) { + MinimapEntry* temp_v1; + s16* temp1; // Can be removed, but adds readability -// if ((arg0 == -1) || (arg1 == -1)) { -// return 0; -// } -// //temp_a2 = D_801BEBB8.unk3C[arg]; -// temp_a3 = D_801BEBB8.unk3C[arg1];//*(temp_a2 + (arg1 * 2)); -// temp_t0 = D_801BEBB8.unk3C[arg0];//*(temp_a2 + (arg0 * 2)); -// temp_v1 = *D_801BEBB8.unk0; -// if ((temp_a3 >= temp_t0) && ((temp_t0 + (((s32) (temp_v1 + (arg0 * 0xA))->unk8 >> 2) & 7)) >= temp_a3)) { -// return 1; -// } -// if ((temp_t0 >= temp_a3) && ((temp_a3 + (((s32) (temp_v1 + (arg1 * 0xA))->unk8 >> 2) & 7)) >= temp_t0)) { -// return 1; -// } -// return 0; -// } + if ((arg0 == -1) || (arg1 == -1)) { + return 0; + } + temp_v1 = &D_801BEBB8.unk0->entry[arg0]; + temp1 = D_801BEBB8.unk3C; + if ((temp1[arg0] <= temp1[arg1]) && (temp1[arg1] <= (temp1[arg0] + ((temp_v1->unk8 >> 2) & 7)))) { + return 1; + } + temp_v1 = &D_801BEBB8.unk0->entry[arg1]; + if ((temp1[arg1] <= temp1[arg0]) && (temp1[arg0] <= (temp1[arg1] + ((temp_v1->unk8 >> 2) & 7)) )) { + return 1; + } + return 0; +} #ifdef NON_MATCHING void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { From bbdf16e7d4ec6fbf0626d1cc28fdd004c2c0e332 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Tue, 19 Jul 2022 13:08:16 -0400 Subject: [PATCH 05/28] func_80103A58 improvements, more OK --- include/z64map.h | 13 ++ src/code/z_map_disp.c | 297 +++++++++++++----------------------------- 2 files changed, 102 insertions(+), 208 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index 60e9bb7a0..075f4dc6e 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -70,6 +70,8 @@ typedef struct { /* 0x42 */ char unk42[2]; /* 0x44 */ s16 unk44; /* 0x48 */ s16* unk48; + /* 0x4C */ char unk4C[0x0C]; + /* 0x58 */ s16 unk58; } T_801BEBB8; typedef struct { @@ -77,6 +79,17 @@ typedef struct { /* 0x02 */ s16 unk2; } T_801BEC5C; +typedef struct{ + /* 0x00 */ s16 unk0; + /* 0x02 */ s16 unk2; + /* 0x04 */ s16 unk4; + /* 0x06 */ UNK_TYPE2 unk6; + /* 0x08 */ s16 unk8; + /* 0x0A */ UNK_TYPE2 unkA; + /* 0x0C */ UNK_TYPE2 unkC; + /* 0x0E */ u16 unkE; +} T_801F53B0; + /* z_map_data */ s32 func_801096D4(s32 arg0); void func_8010983C(s32 arg0, s32 *arg1); diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 7b37236e3..77de75fa0 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -24,13 +24,18 @@ typedef struct { extern Gfx D_0401ED00[]; extern T_801BEAE0 D_801BEAE0; -extern s32 D_801BEAF8; +extern u32 D_801BEAF8; extern s32 D_801BEB08; -extern s32 D_801BEB18; -extern s32 D_801BEB28; -extern s32 D_801BEAD8; +extern u32 D_801BEB18; +extern u32 D_801BEB28; +extern s32 D_801BEAD8; // G_IM_SIZ extern Color_RGBA8 D_801BEC2C[]; // cat colors +extern u8 D_801BEC24; +extern T_801F53B0 D_801F53B0[]; + +extern TexturePtr D_02003F20; + #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E40.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E90.s") @@ -106,32 +111,18 @@ void func_80103A58(PlayState *play, Actor *actor) { s32 spC8; s32 spC4; f32 spC0; - Player *spB4; - s32 spAC; - GraphicsContext *spA8; - s16 spA2; - //GraphicsContext *temp_a0_2; - f32 temp_fv0; - s16 temp_v0_2; - s16 temp_v1; - s16 temp_v1_3; - s16 var_v0; - s16 var_v1; - s32 temp_t3; - s32 temp_v1_4; - s32 var_t2; - s32 var_t8; u32 temp_v0_19; - u32 temp_v1_5; - u32 var_a0; - u32 var_a1; + s32 var_v0; + Player *spB4; u32 var_v1_2; - Color_RGBA8 *temp_v1_6; + s32 spAC; + //GraphicsContext *spA8; + s16 spA2; + s16 temp_v1; - spB4 = GET_PLAYER(play); //play->actorCtx.actorLists[2].first; - spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4];//->unk0 + ( * 0xA); + spB4 = GET_PLAYER(play); + spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; if (spDC->unk0 != 0xFFFF) { - //spDC = temp_a0; func_801030F4(spDC, &spD0, &spCC); func_80103090(spDC, &spC8, &spC4); temp_v1 = D_801BEBB8.unk0->unk4; @@ -140,223 +131,69 @@ void func_80103A58(PlayState *play, Actor *actor) { var_v0 = 0x14; } else if (temp_v1 == -1) { func_801030B4(spDC, &spAC); - var_v0 = (s16) spAC; + var_v0 = spAC; } - temp_fv0 = 1.0f / (f32) var_v0; - spC0 = temp_fv0; + spC0 = 1.0f / (f32) var_v0; if (func_801039EC(play) == 0) { - spD8 = (((s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0) + D_801BEBB8.unk8 + D_801BEBB8.unkC) - D_801BEBB8.unk8) + spD0; - var_t8 = ((s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0) + D_801BEBB8.unkA + D_801BEBB8.unkE) - D_801BEBB8.unkA; + 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 { - spD8 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - (f32) spDC->unk2) * temp_fv0)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + spD0; - var_t8 = ((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - (f32) spDC->unk6) * temp_fv0)) + D_801BEBB8.unkE) - D_801BEBB8.unkA; + spD8 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - (f32) spDC->unk2) * spC0)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + spD0; + spD4 = ((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - (f32) spDC->unk6) * spC0)) + D_801BEBB8.unkE) - D_801BEBB8.unkA + spCC; } - spD4 = var_t8 + spCC; if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { - //temp_a0_2 = play->state.gfxCtx; OPEN_DISPS(play->state.gfxCtx); if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) { - //spA8 = temp_a0_2; - func_8012C8D4(play->state.gfxCtx); //temp_a0_2); - // temp_v0_3 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_3 + 8; - // temp_v0_3->words.w0 = 0xDA380003; - // temp_v0_3->words.w1 = (u32) &gIdentityMtx; - // temp_v0_4 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_4 + 8; - // temp_v0_4->words.w0 = 0xFC309661; - // temp_v0_4->words.w1 = 0x552EFF7F; - // temp_v0_5 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_5 + 8; - // temp_v0_5->words.w0 = 0xFB000000; - // temp_v0_5->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; - // temp_v0_6 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_6 + 8; - // temp_v0_6->words.w1 = 0xFFFDF6FB; - // temp_v0_6->words.w0 = 0xFCFFFFFF; - // temp_v0_7 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_7 + 8; - // temp_v0_7->words.w0 = 0xE200001C; - // temp_v0_7->words.w1 = 0x00407248; - + func_8012C8D4(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); - //sp1C = play + 0x10000; - //spA8 = spA8; Matrix_Translate((f32) spD8 - 160.0f, 120.0f - (f32) spD4, 0.0f, MTXMODE_NEW); Matrix_RotateXFApply(-1.6f); - temp_v1_4 = (s32) (0x7FFF - actor->focus.rot.y) / 1024; - spA2 = (s16) temp_v1_4; - var_v1 = (s16) temp_v1_4; + spA2 = (s32) (0x7FFF - actor->focus.rot.y) / 1024; if (func_801039EC(play) != 0) { - var_v1 += 0x7FFF; + spA2 += 0x7FFF; } - // spA8 = spA8; - Matrix_RotateYF((f32) var_v1 / 10.0f, MTXMODE_APPLY); + Matrix_RotateYF((f32) spA2 / 10.0f, MTXMODE_APPLY); Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); - // temp_v0_8 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_8 + 8; - // temp_v0_8->words.w0 = 0xDA380003; - // spA8 = spA8; - // sp88 = temp_v0_8; - // sp88->words.w1 = Matrix_NewMtx(play->state.gfxCtx); - // temp_v0_9 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_9 + 8; - // temp_v0_9->words.w0 = 0xFA000000; - // temp_v0_9->words.w1 = ((u8)play->interfaceCtx.minimapAlpha) | 0xC8FF0000; - // temp_v0_10 = spA8->overlay.p; - // spA8->overlay.p = temp_v0_10 + 8; - // temp_v0_10->words.w1 = (u32) &D_0401ED00; - // temp_v0_10->words.w0 = 0xDE000000; gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0xC8, 0xFF, 0x00, 0x00); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha); gSPDisplayList(OVERLAY_DISP++, &D_0401ED00); return; } if (actor->id == ACTOR_EN_BOX) { - //spD4 = spD4; - //spD8 = spD8; - //spA8 = temp_a0_2; = play->state.gfxCtx; - if (Flags_GetTreasure(play, actor->params & 0x1F) == 0) { - //spD4 = spD4; - //spD8 = spD8; - //spA8 = temp_a0_2; - //sp2C = ; + if (!Flags_GetTreasure(play, actor->params & 0x1F)) { if (func_80102F9C(spB4->actor.world.pos.y) == func_80102F9C(actor->world.pos.y)) { - //spD4 = spD4; - //spD8 = spD8; - //spA8 = temp_a0_2; func_8012C654(play->state.gfxCtx); - // temp_v0_11 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_11 + 8; - // temp_v0_11->words.w1 = 0x00000000; - // temp_v0_11->words.w0 = 0xE7000000; - // temp_v0_12 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_12 + 8; - // temp_v0_12->words.w1 = 0x00000000; - // temp_v0_12->words.w0 = 0xE3001001; - // temp_v0_13 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_13 + 8; - // temp_v0_13->words.w0 = 0xFA000000; - // temp_v0_13->words.w1 = (play->interfaceCtx.minimapAlpha & 0xFF) | ~0xFF; - // temp_v0_14 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_14 + 8; - // temp_v0_14->words.w0 = 0xFB000000; - // temp_v0_14->words.w1 = play->interfaceCtx.minimapAlpha & 0xFF; - // temp_v0_15 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_15 + 8; - // temp_v0_15->words.w1 = 0x00000000; - // temp_v0_15->words.w0 = 0xE7000000; - // temp_v0_16 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_16 + 8; - // //gsDPSetTextureImage(G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 1, 0x02003F20) - // temp_v0_16->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xFD000000; - // temp_v0_16->words.w1 = (u32) &D_02003F20; - // temp_v0_17 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_17 + 8; - // temp_v0_17->words.w1 = 0x07000000; - // temp_v0_17->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xF5000000; - // //gsDPSetTile(G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD) - // temp_v0_18 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_18 + 8; - // temp_v0_18->words.w1 = 0x00000000; - // temp_v0_18->words.w0 = 0xE6000000; - // temp_a2 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_a2 + 8; gDPPipeSync(OVERLAY_DISP++); gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); gDPPipeSync(OVERLAY_DISP++); - gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 1, 0x02003F20); - gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, (D_801BEAE0.unk8 & 3), 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 1, &D_02003F20); + gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); gDPLoadSync(OVERLAY_DISP++); - - //temp_a2->words.w0 = 0xF3000000; - temp_v1_5 = ((u32) (D_801BEAF8 + 0x40) >> D_801BEB08) - 1; - var_a0 = 0x7FF; - if (temp_v1_5 < 0x7FFU) { - var_a0 = temp_v1_5; - } - temp_v0_19 = (u32) (D_801BEB18 * 8) >> 3; - var_a1 = temp_v0_19; - if (temp_v0_19 == 0) { - var_a1 = 1; - } - if (temp_v0_19 == 0) { - var_v1_2 = 1; - } else { - var_v1_2 = temp_v0_19; - } - //temp_a2->words.w1 = (((u32) (var_a1 + 0x7FF) / var_v1_2) & 0xFFF) | 0x07000000U | ((var_a0 & 0xFFF) << 0xC); - gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0, var_a0, (u32) (var_a1 + 0x7FF) / var_v1_2); - // temp_v0_20 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_20 + 8; - // temp_v0_20->words.w1 = 0x00000000; - // temp_v0_20->words.w0 = 0xE7000000; - gDPPipeSync(OVERLAY_DISP++); - - // temp_v0_21 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_21 + 8; - // temp_v0_21->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) << 0x13); - // temp_v0_21->words.w1 = 0x00000000; - - gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, (D_801BEAD8 & 3), ((u32) ((D_801BEB28 * 8) + 7) >> 3), 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - // temp_v0_22 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_22 + 8; - // temp_v0_22->words.w0 = 0xF2000000; - // temp_v0_22->words.w1 = 0x0001C01C; + gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0, + ((D_801BEAF8 + 0x40) >> D_801BEB08) - 1, + (((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18) + 0x7FF) + / ((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18)); + gDPPipeSync(OVERLAY_DISP++); + gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAD8, + ((D_801BEB28 * 8) + 7) >> 3, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); gDPSetTileSize(OVERLAY_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); - // temp_v0_23 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_23 + 8; - // temp_v0_23->words.w0 = ((((var_t2 + 4) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 4) * 4) & 0xFFF); - // temp_v0_23->words.w1 = ((((var_t2 - 4) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 4) * 4) & 0xFFF); - // temp_v0_24 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_24 + 8; - // temp_v0_24->words.w1 = 0x00000000; - // temp_v0_24->words.w0 = 0xE1000000; - // temp_v0_25 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_25 + 8; - // temp_v0_25->words.w1 = 0x04000400; - // temp_v0_25->words.w0 = 0xF1000000; - gSPTextureRectangle(OVERLAY_DISP++, ((spD8 - 4) * 4), ((spD4 - 4) * 4), ((spD8 + 4) * 4), ((spD4 + 4) * 4), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, (spD4 + 4) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); return; } } } - spD4 = spD4; - spD8 = spD8; - //spA8 = temp_a0_2; func_8012C654(play->state.gfxCtx); - // temp_v0_26 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_26 + 8; - // temp_v0_26->words.w0 = 0xFC119623; - // temp_v0_26->words.w1 = 0xFF2FFFFF; gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (actor->flags & 0x80000000) { - // temp_v0_27 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_27 + 8; - // temp_v0_27->words.w0 = 0xFA000000; - temp_v1_6 = &D_801BEC2C[actor->category]; - //temp_v0_27->words.w1 = (temp_v1_6->unk2 << 8) | (temp_v1_6->unk0 << 0x18) | (temp_v1_6->unk1 << 0x10) | (play->interfaceCtx.minimapAlpha & 0xFF); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, temp_v1_6->r, temp_v1_6->g, temp_v1_6->b, play->interfaceCtx.minimapAlpha); - // temp_v0_28 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_28 + 8; - // temp_v0_28->words.w0 = ((((var_t2 + 1) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_t3 + 1) * 4) & 0xFFF); - // temp_v0_28->words.w1 = ((((var_t2 - 1) * 4) & 0xFFF) << 0xC) | (((temp_t3 - 1) * 4) & 0xFFF); - // temp_v0_29 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_29 + 8; - // temp_v0_29->words.w1 = 0x00000000; - // temp_v0_29->words.w0 = 0xE1000000; - // temp_v0_30 = temp_a0_2->overlay.p; - // temp_a0_2->overlay.p = temp_v0_30 + 8; - // temp_v0_30->words.w1 = 0x00010001; - // temp_v0_30->words.w0 = 0xF1000000; - gSPTextureRectangle(OVERLAY_DISP++, ((spD8 - 1) * 4), ((spD4 - 1) * 4), ((spD8 + 1) * 4), ((spD4 + 1) * 4), G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, play->interfaceCtx.minimapAlpha); + gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 1) << 2, (spD4 - 1) << 2, (spD8 + 1) << 2, (spD4 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } CLOSE_DISPS(play->state.gfxCtx); } @@ -571,10 +408,54 @@ void func_80104F34(PlayState* arg0) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105318.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105328.s") +s32 func_80105328(s32 arg0) { + if (((((u16)arg0) >> 7) & 7) == 5) { + return 1; + } + return 0; +} -void func_8010534C(PlayState*); +#ifdef NON_MATCHING +void func_8010534C(PlayState* play) { + T_801F53B0* var_s0; + s16 temp_a0; + s16 temp_a2; + s16 temp_v0; + s32 var_v0; + s32 var_v1; + s16* temp_v1; + s32 var_s2; + + for (var_s2 = 0; var_s2 < D_801BEC24; var_s2++) { + var_s0 = &D_801F53B0[var_s2]; + if (func_80105328(var_s0->unkE) != 0) { + if (var_s0->unk4 < 0) { + var_v1 = -var_s0->unk4; + } + else { + var_v1 = var_s0->unk4; + } + if (var_v1 != 0x18) { + for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { + if (((var_v0 == D_801BEBB8.unk40 - 1) && (var_s0->unk8 >= (D_801BEBB8.unk48[var_v0] - 5))) + || ( + (var_v0 != D_801BEBB8.unk40 - 1) && + (var_s0->unk8 >= (D_801BEBB8.unk48[var_v0] - 5)) && + (var_s0->unk8 < (D_801BEBB8.unk48[var_v0+1] - 5)) + )) { + D_801BEBB8.unk58 = var_v0; + return; + } + } + } + } + } + D_801BEBB8.unk58 = 0; +} +#else +void func_8010534C(PlayState* play); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010534C.s") +#endif #ifdef NON_MATCHING void func_8010549C(PlayState* globalCtx, void* segmentAddress) { @@ -623,8 +504,8 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105FE0.s") -s32 func_80106408(PlayState* arg0) { - if ((gSaveContext.save.entranceIndex == 0x6400) && (Cutscene_GetSceneSetupIndex(arg0) != 0)) { +s32 func_80106408(PlayState* play) { + if ((gSaveContext.save.entranceIndex == 0x6400) && (Cutscene_GetSceneSetupIndex(play) != 0)) { return true; } return false; From 90d82ee1957d52454395e2acd0ed77eac6a35037 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Tue, 26 Jul 2022 23:57:47 -0400 Subject: [PATCH 06/28] func_80106D5C and func_801091F0 decomped --- include/z64map.h | 2 +- src/code/z_map_disp.c | 209 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 207 insertions(+), 4 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index bbb37600f..15c41193e 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -88,7 +88,7 @@ typedef struct { /* 0x3A */ s16 unk3A; //scene boundsMidpoint.z /* 0x3C */ s16* unk3C; /* 0x40 */ s16 unk40; - /* 0x42 */ char unk42[2]; + /* 0x42 */ s16 unk42; /* 0x44 */ s16 unk44; /* 0x48 */ s16* unk48; /* 0x4C */ char unk4C[0x0C]; diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index a1b303488..d63184936 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -8,8 +8,20 @@ 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); + +s16 func_80106D08(s16); +void func_80109D40(s32, s32*, s32*, void*); +void func_80109DD8(s32, s32*, s32*); + extern T_801BEBB8 D_801BEBB8; -extern s32 D_801BEC1C; //scene rooms +extern s32 D_801BEC1C; //current scene's no. of rooms extern T_801BEC5C D_801BEC5C[5]; extern TexturePtr D_801BEB38; @@ -336,7 +348,7 @@ void func_80104AE8(PlayState *play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104CF4.s") -void func_80104F34(PlayState* arg0) { +void func_80104F34(PlayState* play) { s32 i1; s32 i2; s32 i3; @@ -398,7 +410,7 @@ void func_80104F34(PlayState* arg0) { } D_801BEBB8.unk44 = 0; for (i2 = 0; i2 < 5; i2++) { - if (arg0->sceneNum == D_801BEC5C[i2].unk0) { + if (play->sceneNum == D_801BEC5C[i2].unk0) { D_801BEBB8.unk44 = D_801BEC5C[i2].unk2; } } @@ -587,7 +599,131 @@ void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106D08.s") +extern u16 D_801BEC84[0x10]; //palette 0 +extern u16 D_801BECA4[0x10]; //palette 1 +extern u16 D_801BECC4[0x10]; //palette 2 +extern TexturePtr D_801F57B4[32]; //unconfirmed length +extern s32 D_801F5834; + +#define COLOR16(r, g, b, a) (s16) \ + ( ((s32) (((r) * 31.0f) / 255.0f) << 11) \ + | ((s32) (((g) * 31.0f) / 255.0f) << 6) \ + | ((s32) (((b) * 31.0f) / 255.0f) << 1) \ + | (a)) \ + +#ifdef NON_MATCHING +void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { + s32 var_a0; + s32 var_a0_2; + s32 var_a0_3; + s32 var_a0_4; + s32 var_a1_2; + s32 var_a1_4; + s32 var_a1_5; + s32 var_s2; + s32 var_v1; + s32 var_v1_2; + s32 var_v1_3; + TexturePtr temp_s1; + + D_801BECC4[1] = COLOR16(0, ((D_801F5834 * -120.0f) / 40.0f) + 200.0f, ((D_801F5834 * 115.0f) / 40.0f) + 140.0f, 1); + // ( + // 0 << 11 + // | ((s32) (((((D_801F5834 * -120.0f) / 40.0f) + 200.0f) * 31.0f) / 255.0f) << 6) + // | ((s32) (((((D_801F5834 * 115.0f) / 40.0f) + 140.0f) * 31.0f) / 255.0f) << 1) + // | 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); + } else { + D_801BEC84[0xF] = 0; + D_801BECA4[0xF] = 0; + D_801BECC4[0xF] = 0; + } + + OPEN_DISPS(play->state.gfxCtx); + //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); + gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, D_801BEC84); + gDPLoadTLUT_pal16(POLY_OPA_DISP++, 1, D_801BECA4); + gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, D_801BECC4); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); + + for (var_s2 = 0; var_s2 < D_801BEC1C; var_s2++) { + s32 sp118; + s32 sp114; + s32 sp110; + s32 sp10C; + MinimapEntry* sp108; + s32 sp100; + s32 spFC; + s32 spF8; + s32 spF4; + s32 spF0; + s32 spEC; + s32 spE8; + + sp108 = &D_801BEBB8.unk0->entry[var_s2]; + if ((sp108->unk0 != 0xFFFF) && (sp108->unk0 < 0x162)) { + if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) && ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { + temp_s1 = D_801F57B4[var_s2]; + if (temp_s1 != NULL) { + spE8 = func_80109BA0(sp108->unk0); + if (spE8 == -1) { + continue; + } else { + //sp3C = play + 0x18000; + func_80109D40(spE8, &sp118, &sp114, sp108); + func_80109DD8(spE8, &sp110, &sp10C); + if (sp108->unk8 & 1) { + sp110 = (sp118 / 2 - sp110) + sp118 / 2; + sp100 = (sp118 - 1) << 5; + spF8 = 0xFC00; + } else { + sp100 = 0; + spF8 = 0x400; + } + if (sp108->unk8 & 2) { + sp10C = (sp114 / 2 - sp10C) + sp114 / 2; + spFC = (sp114 - 1) << 5; + spF4 = 0xFC00; + } else { + spFC = 0; + spF4 = 0x400; + } + spF0 = (s32) (((((f32) sp108->unk2 - (f32) D_801BEBB8.unk38) * arg5) - (f32) sp110) + (f32) ((arg3 / 2) + arg1)); + spEC = (s32) (((((f32) sp108->unk6 - (f32) D_801BEBB8.unk3A) * arg5) - (f32) sp10C) + (f32) ((arg4 / 2) + arg2)); + if (var_s2 == play->roomCtx.currRoom.num) { + if (Map_IsInBossArea(play) != 0) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 2, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } + } else if (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].rooms & (1 << var_s2)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else if (CHECK_DUNGEON_ITEM(2, arg6)) { //*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 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); + } + else { + continue; + } + gSPTextureRectangle(POLY_OPA_DISP++, (spF0 << 2), (spEC << 2), (spF0 + sp118) << 2, (spEC + sp114) << 2, 0, sp100, spFC, spF8, spF4); + gDPPipeSync(POLY_OPA_DISP++); + } + } + } + } + } + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + CLOSE_DISPS(play->state.gfxCtx); +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106D5C.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80107B78.s") @@ -605,6 +741,73 @@ void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80109124.s") +typedef struct { + s16 unk0; + s32 unk4; + s32 unk8; +} T_801BED24; // size 0x0C + +extern T_801BED24 D_801BED24[2]; + +#ifdef NON_MATCHING +void func_801091F0(PlayState* play) { + s32 var_t2; + u16 temp_a0; + s16 sp44; + s32 sp40; + s32 sp3C; + s32 var_v0; + s32 temp_v0_2; + + sp44 = 0; + sp40 = 0; + sp3C = 0; + if (func_80108A64(play) == 0) { + if (Map_IsInBossArea(play) != 0) { + switch (play->sceneNum) { + case 0x1F: + sp44 = 0; + break; + case 0x44: + sp44 = 1; + break; + case 0x5F: + sp44 = 2; + break; + case 0x36: + sp44 = 3; + break; + } + } else { + sp44 = gSaveContext.mapIndex; + } + temp_a0 = D_801BEBB8.unk0->entry->unk0; + if ((temp_a0 != 0xFFFF) && (temp_a0 < 0x162)) { + temp_v0_2 = func_80109BA0(temp_a0); + if (temp_v0_2 != -1) { + var_t2 = func_80109F78(temp_v0_2); + if (var_t2 == 0) { + var_t2 = 0x50; + } + for (var_v0 = 0; var_v0 < 2; var_v0++){ + if (play->sceneNum == D_801BED24[var_v0].unk0) { + sp40 = D_801BED24[var_v0].unk4; + sp3C = D_801BED24[var_v0].unk8; + } + } + + func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); + func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); + func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); + if (CHECK_DUNGEON_ITEM(1, sp44)) { + func_80107B78(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2); + } + } + } + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801091F0.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80109428.s") From 5c616b90666ad473a7313869ecf45b9d35248577 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Tue, 2 Aug 2022 17:09:05 -0400 Subject: [PATCH 07/28] func_801031D0 decomped and some fixes --- include/functions.h | 2 +- include/z64map.h | 4 +- src/code/z_map_data.c | 10 ++--- src/code/z_map_disp.c | 93 ++++++++++++++++++++++++++++++++++++++----- 4 files changed, 88 insertions(+), 21 deletions(-) diff --git a/include/functions.h b/include/functions.h index 59afb49d2..ddc94564e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1728,7 +1728,7 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot); s32 func_80109124(s16 arg0); // void func_801091F0(void); // void func_80109428(void); -// void func_801094A0(void); +void func_801094A0(s32 arg0, Color_RGBA8* color); // void func_801094C8(void); // void func_801094F8(void); // void func_80109528(void); diff --git a/include/z64map.h b/include/z64map.h index 15c41193e..2d20e1360 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -72,9 +72,9 @@ typedef struct { /* 0x0A */ s16 unkA; /* 0x0C */ s16 unkC; /* 0x0E */ s16 unkE; - /* 0x10 */ s32 unk10; + /* 0x10 */ TexturePtr unk10; /* 0x14 */ s32 unk14; //unk4 same type as unk14 - /* 0x18 */ s32 unk18; + /* 0x18 */ TexturePtr unk18; /* 0x1C */ s16 unk1C; //same as 0C /* 0x1E */ s16 unk1E; //same as 0E /* 0x20 */ s32 unk20; diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index 404fac482..d0240a76f 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -7,17 +7,13 @@ extern s32 D_801BF15C[5]; extern T_801BF170 D_801BF170[]; -typedef struct { - char unk0[4]; -} T_801BED40; //size 0x04 - -extern T_801BED40 D_801BED40[]; +extern Color_RGBA8 D_801BED40[]; extern s32 D_801BF3B4[]; extern s32 D_801BEFC8[]; -void func_801094A0(s32 arg0, T_801BED40* arg1) { - *arg1 = D_801BED40[arg0]; +void func_801094A0(s32 arg0, Color_RGBA8* color) { + *color = D_801BED40[arg0]; } void func_801094C8(s32 arg0, s32 *arg1, s32 *arg2) { diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index d63184936..3db075bd6 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,7 +1,6 @@ #include "global.h" #include "z64map.h" -void func_801031D0(PlayState* play, s32, s32, s32, s32, f32); 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); @@ -97,7 +96,70 @@ void func_801030F4(MinimapEntry* arg0, s32* arg1, s32* arg2) { } } +void func_801098A0(u16, s32*); +s32 func_80109908(u16); + +#ifdef NON_MATCHING +// https://decomp.me/scratch/XPZfI +void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { + MinimapEntry* spCC; + s32 spC8; + s32 spC4; + s16 var_a0_4; + s16 var_a3; + s32 var_t0; + s32 var_t1; + s32 var_v1_4; + s32 var_v1_5; + Color_RGBA8 spAC; + s32 spA8; + + spCC = &D_801BEBB8.unk0->entry[arg4]; + if ((spCC->unk0 != 0xFFFF) && (arg1 != 0)) { + func_80103090(spCC, &spC8, &spC4); + OPEN_DISPS(play->state.gfxCtx); + func_8012C654(play->state.gfxCtx); + func_801094A0(func_80109908(spCC->unk0), &spAC); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC.r, spAC.g, spAC.b, (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC.a / 255.0f)); + func_801098A0(spCC->unk0, &spA8); + switch (spA8) { + case 1: + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_IA, spC8, spC4, 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); + break; + case 3: + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); + break; + default: + case 0: + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); + break; + } + + var_t1 = (spCC->unk8 & 1) ? (spC8 - 1) << 5 : 0; + var_t0 = (spCC->unk8 & 2) ? 0 : (spC4 - 1) << 5; + + var_v1_4 = (spCC->unk8 & 1) ? -1 : 1; + var_a3 = var_v1_4 << 0xA; + var_v1_5 = (spCC->unk8 & 2) ? 1 : -1; + + if ((spCC->unk8 & 1) != 0) { + var_a3 = var_a3 & 0xFFFF; + } + if ((spCC->unk8 & 2) != 0) { + var_a0_4 = var_v1_5 << 0xA; + } else { + var_a0_4 = (var_v1_5 << 0xA) & 0xFFFF; + } + gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (spC8 + arg2) << 2, (arg3 + spC4) << 2, G_TX_RENDERTILE, var_t1, var_t0, var_a3, var_a0_4); + CLOSE_DISPS(play->state.gfxCtx); + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801031D0.s") +#endif s32 func_801039EC(PlayState *play) { if (play->sceneNum == SCENE_35TAKI) { @@ -114,6 +176,7 @@ s32 func_80103A10(PlayState* play) { } #ifdef NON_MATCHING +// https://decomp.me/scratch/TR5Jq void func_80103A58(PlayState *play, Actor *actor) { MinimapEntry *spDC; s32 spD8; @@ -245,6 +308,7 @@ void func_8010439C(PlayState *play) { } #ifdef NON_MATCHING +// https://decomp.me/scratch/vbnTA void func_801045AC(PlayState* play, Actor* actor) { //4729 MinimapEntry* sp7C; s32 sp78; @@ -428,6 +492,7 @@ s32 func_80105328(s32 arg0) { } #ifdef NON_MATCHING +// https://decomp.me/scratch/F3QhH void func_8010534C(PlayState* play) { T_801F53B0* var_s0; s16 temp_a0; @@ -612,21 +677,22 @@ extern s32 D_801F5834; | (a)) \ #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; - s32 var_a0_2; - s32 var_a0_3; - s32 var_a0_4; s32 var_a1_2; s32 var_a1_4; s32 var_a1_5; - s32 var_s2; s32 var_v1; - s32 var_v1_2; - s32 var_v1_3; + s32 var_s2; TexturePtr temp_s1; + s32 temp1; + s32 temp2; - D_801BECC4[1] = COLOR16(0, ((D_801F5834 * -120.0f) / 40.0f) + 200.0f, ((D_801F5834 * 115.0f) / 40.0f) + 140.0f, 1); + temp1 = ((D_801F5834 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; + temp2 = ((D_801F5834 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; + + D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; //COLOR16(0, ((D_801F5834 * -120.0f) / 40.0f) + 200.0f, ((D_801F5834 * 115.0f) / 40.0f) + 140.0f, 1); // ( // 0 << 11 // | ((s32) (((((D_801F5834 * -120.0f) / 40.0f) + 200.0f) * 31.0f) / 255.0f) << 6) @@ -659,6 +725,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s32 sp110; s32 sp10C; MinimapEntry* sp108; + s32 pad104; s32 sp100; s32 spFC; s32 spF8; @@ -666,10 +733,13 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s32 spF0; s32 spEC; s32 spE8; + s32 padE4; + s32 padE0; sp108 = &D_801BEBB8.unk0->entry[var_s2]; if ((sp108->unk0 != 0xFFFF) && (sp108->unk0 < 0x162)) { - if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) && ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { + if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) + && ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { temp_s1 = D_801F57B4[var_s2]; if (temp_s1 != NULL) { spE8 = func_80109BA0(sp108->unk0); @@ -695,8 +765,9 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 spFC = 0; spF4 = 0x400; } - spF0 = (s32) (((((f32) sp108->unk2 - (f32) D_801BEBB8.unk38) * arg5) - (f32) sp110) + (f32) ((arg3 / 2) + arg1)); - spEC = (s32) (((((f32) sp108->unk6 - (f32) D_801BEBB8.unk3A) * arg5) - (f32) sp10C) + (f32) ((arg4 / 2) + arg2)); + spF0 = ((sp108->unk2 - (f32) D_801BEBB8.unk38) * arg5 - sp110) + ((arg3 / 2) + arg1); + spEC = ((sp108->unk6 - (f32) D_801BEBB8.unk3A) * arg5 - sp10C) + ((arg4 / 2) + arg2); + if (var_s2 == play->roomCtx.currRoom.num) { if (Map_IsInBossArea(play) != 0) { gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); From 723c82ce224372654e2e69d2edb071014a94298e Mon Sep 17 00:00:00 2001 From: mzxrules Date: Wed, 3 Aug 2022 12:39:40 -0400 Subject: [PATCH 08/28] house cleaning, more OKs more decomp --- include/z64map.h | 30 ++++++- src/code/z_map_disp.c | 197 ++++++++++++++++++++++++++++++++---------- 2 files changed, 181 insertions(+), 46 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index 2d20e1360..13c861965 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -58,6 +58,11 @@ typedef struct { /* z_map_disp */ +typedef struct { + /* 0x00 */ UNK_TYPE1 unk0[8]; + /* 0x08 */ s32 unk8; // G_IM_SIZ +} T_801BEAE0; + typedef struct { /* 0x00 */ s16 unk0; /* 0x00 */ s16 unk2; @@ -91,7 +96,8 @@ typedef struct { /* 0x42 */ s16 unk42; /* 0x44 */ s16 unk44; /* 0x48 */ s16* unk48; - /* 0x4C */ char unk4C[0x0C]; + /* 0x4C */ s16 unk4C; + /* 0x4E */ char unk4E[0x0A]; /* 0x58 */ s16 unk58; } T_801BEBB8; @@ -111,9 +117,31 @@ typedef struct{ /* 0x0E */ u16 unkE; } T_801F53B0; +typedef struct { + /* 0x00 */ s32 unk0[5]; +} T_801BEC70; + +typedef struct { + s16 unk0; + s32 unk4; + s32 unk8; +} T_801BED24; // size 0x0C + +typedef struct { + /* 0x000 */ s32 unk0; + /* 0x004 */ s32 unk4[32]; + /* 0x084 */ s32 unk84[32]; + /* 0x104 */ s32 unk104[32]; + /* 0x184 */ s32 unk184; +} T_801F56B0; + /* z_map_data */ +s32 func_80109CBC(s32); +s32 func_80109A98(s32); s32 func_801096D4(s32 arg0); void func_8010983C(s32 arg0, s32 *arg1); void func_801097C8(s32 arg0, s32* arg1, s32* arg2); void func_80109754(s32 arg0, s32 *arg1, s32 *arg2); + +void func_80178E3C(u8*, s32, s32, s32); #endif diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 3db075bd6..a84891354 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -19,35 +19,40 @@ s16 func_80106D08(s16); void func_80109D40(s32, s32*, s32*, void*); void func_80109DD8(s32, s32*, s32*); -extern T_801BEBB8 D_801BEBB8; -extern s32 D_801BEC1C; //current scene's no. of rooms -extern T_801BEC5C D_801BEC5C[5]; -extern TexturePtr D_801BEB38; +extern T_801BEAE0 D_801BEAE0; +extern s32 D_801BEAD8; // G_IM_SIZ +extern u32 D_801BEAF8; +extern s32 D_801BEB08; +extern u32 D_801BEB18; +extern u32 D_801BEB28; +extern TexturePtr D_801BEB38; +extern T_801BEBB8 D_801BEBB8; +extern s16 D_801BEC10; +extern MinimapList D_801BEC14; //D_801F5130 +extern s32 D_801BEC1C; //current scene's no. of rooms +extern u8 D_801BEC24; +extern Color_RGBA8 D_801BEC2C[]; // cat colors +extern T_801BEC5C D_801BEC5C[5]; +extern T_801BEC70 D_801BEC70; +extern u16 D_801BEC84[0x10]; //palette 0 +extern u16 D_801BECA4[0x10]; //palette 1 +extern u16 D_801BECC4[0x10]; //palette 2 +extern T_801BED24 D_801BED24[2]; -extern MinimapList D_801BEC14; extern MinimapEntry D_801F5130[0x50]; +extern T_801F53B0 D_801F53B0[]; +extern T_801F56B0 D_801F56B0; +extern TexturePtr D_801F57B4[32]; //unconfirmed length +extern s32 D_801F5834; -typedef struct { - /* 0x00 */ UNK_TYPE1 unk0[8]; - /* 0x08 */ s32 unk8; // G_IM_SIZ -} T_801BEAE0; +extern TexturePtr D_02003F20; +extern Gfx D_0401ED00[]; -extern Gfx D_0401ED00[]; -extern T_801BEAE0 D_801BEAE0; - -extern u32 D_801BEAF8; -extern s32 D_801BEB08; -extern u32 D_801BEB18; -extern u32 D_801BEB28; -extern s32 D_801BEAD8; // G_IM_SIZ -extern Color_RGBA8 D_801BEC2C[]; // cat colors - -extern u8 D_801BEC24; -extern T_801F53B0 D_801F53B0[]; - -extern TexturePtr D_02003F20; - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E40.s") +void func_80102E40(s32 arg0, s32 arg1) { + if (func_80109A98(arg1) != 0) { + func_80178E3C(_map_i_staticSegmentRomStart, arg1, arg0, func_80109A98(arg1)); + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E90.s") @@ -480,9 +485,18 @@ void func_80104F34(PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105294.s") +s32 func_80105294(void) { + T_801BEC70 sp4 = D_801BEC70; + + if ((D_801BEBB8.unk0 == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || (D_801BEC1C == 0)) { + return 0x7B; + } + return sp4.unk0[D_801BEBB8.unk58]; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105318.s") +s16 func_80105318(void) { + return D_801BEC10; +} s32 func_80105328(s32 arg0) { if (((((u16)arg0) >> 7) & 7) == 5) { @@ -652,24 +666,112 @@ void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106644.s") #endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010683C.s") +void func_8010683C(void) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801068B4.s") + D_801F56B0.unk0 = 0; + for (i = 0; i < 32; i++) + { + D_801F56B0.unk4[i] = 0; + D_801F56B0.unk84[i] = 0; + D_801F56B0.unk104[i] = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801068D8.s") + D_801F56B0.unk184 = 0; + D_801BEBB8.unk20 &= ~1; +} +void func_801068B4(s32 arg0) { + func_8010683C(); +} + +void func_801068D8(s32 arg0) { + func_8010683C(); +} + +#ifdef NON_MATCHING +s32 func_801068FC(s32 arg0, s32 arg1) { + s32 sp3C; + s32 temp_s2; + s32 temp_v0; + s32 temp_v0_2; + s32 var_s1; + s32 var_s1_2; + s32 var_s1_3; + s32 var_s2; + s32 var_s3; + s32 var_s4; + u16 temp_a0; + u16 temp_a0_2; + + sp3C = arg1; + if ((D_801BEBB8.unk0 == NULL) || (D_801BEC1C == 0)) { + return sp3C; + } + D_801F56B0.unk0 = 0; + + for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { + var_s2 = 0; + temp_a0 = D_801BEBB8.unk0->entry[var_s4].unk0; + if (temp_a0 == 0xFFFF) { + continue; + } else { + temp_v0 = func_80109BA0((s32) temp_a0); + if (temp_v0 == -1) { + continue; + } else { + for (var_s1 = 0; var_s1 < D_801F56B0.unk0; var_s1++) { + if (temp_v0 == D_801F56B0.unk4[var_s1]) { + var_s2 = 1; + break; + } + } + if (var_s2 == 0) { + D_801F56B0.unk4[D_801F56B0.unk0] = temp_v0; + D_801F56B0.unk0 += 1; + } + } + } + } + for (var_s1_2 = 0; var_s1_2 < D_801F56B0.unk0; var_s1_2++) { + temp_s2 = D_801F56B0.unk4[var_s1_2]; + func_80102E40(D_801F56B0.unk84[var_s1_2], temp_s2); + if (var_s1_2 + 1 < D_801F56B0.unk0) { + D_801F56B0.unk84[var_s1_2 + 1] = (func_80109CBC(temp_s2) + D_801F56B0.unk84[var_s1_2] + 0xF) & ~0xF; + } else { + sp3C = func_80109CBC(temp_s2) + D_801F56B0.unk84[var_s1_2]; + } + } + for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { + var_s3 = 0; + temp_a0_2 = D_801BEBB8.unk0->entry[var_s4].unk0; + if (temp_a0_2 == 0xFFFF) { + D_801F56B0.unk104[var_s4] = 0; + } else { + temp_v0_2 = func_80109BA0((s32) temp_a0_2); + for (var_s1_3 = 0; var_s1_3 < D_801F56B0.unk0; var_s1_3++) { + if (temp_v0_2 == D_801F56B0.unk4[var_s1_3]) { + var_s3 = 1; + break; + } + } + if (var_s3 == 0) { + D_801F56B0.unk104[var_s4] = 0; + } else { + D_801F56B0.unk104[var_s4] = D_801F56B0.unk84[var_s1_3]; + } + } + } + return sp3C; +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801068FC.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106BEC.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106D08.s") -extern u16 D_801BEC84[0x10]; //palette 0 -extern u16 D_801BECA4[0x10]; //palette 1 -extern u16 D_801BECC4[0x10]; //palette 2 -extern TexturePtr D_801F57B4[32]; //unconfirmed length -extern s32 D_801F5834; - #define COLOR16(r, g, b, a) (s16) \ ( ((s32) (((r) * 31.0f) / 255.0f) << 11) \ | ((s32) (((g) * 31.0f) / 255.0f) << 6) \ @@ -812,14 +914,6 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80109124.s") -typedef struct { - s16 unk0; - s32 unk4; - s32 unk8; -} T_801BED24; // size 0x0C - -extern T_801BED24 D_801BED24[2]; - #ifdef NON_MATCHING void func_801091F0(PlayState* play) { s32 var_t2; @@ -881,4 +975,17 @@ void func_801091F0(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801091F0.s") #endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80109428.s") +void func_80109428(s32 arg0) { + D_801BEBB8.unk4C++; + if (!(D_801BEBB8.unk20 & 1)) { + D_801F56B0.unk184++; + if (D_801F56B0.unk184 >= 0x29) { + D_801BEBB8.unk20 |= 1; + } + } else { + D_801F56B0.unk184--; + if (D_801F56B0.unk184 < 0) { + D_801BEBB8.unk20 &= ~1; + } + } +} From cdabbfdbde960dbed9590b7d27ac229b2c1c4857 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 4 Aug 2022 01:34:04 -0400 Subject: [PATCH 09/28] Even more OKs --- include/functions.h | 2 +- include/variables.h | 1 - include/z64map.h | 24 +++--- include/z64scene.h | 8 -- src/code/z_map_data.c | 4 +- src/code/z_map_disp.c | 149 ++++++++++++++++++++++++++++++++++--- tools/disasm/variables.txt | 3 +- 7 files changed, 156 insertions(+), 35 deletions(-) diff --git a/include/functions.h b/include/functions.h index 7160a95fe..a9705281d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1682,7 +1682,7 @@ s16 func_80105318(void); // void func_80105328(void); // void func_8010534C(void); void func_8010549C(PlayState* play, void* segmentAddress); -void func_8010565C(PlayState* play, u8 num, void* segmentAddress); +void func_8010565C(PlayState* play, s32 num, void* segmentAddress); void func_80105818(PlayState* play, u32 uParm2, TransitionActorEntry* puParm3); void func_80105A40(void); void func_80105B34(PlayState* play); diff --git a/include/variables.h b/include/variables.h index 7c1733512..7ccb36154 100644 --- a/include/variables.h +++ b/include/variables.h @@ -3164,7 +3164,6 @@ extern s16 D_801F4E7A; // extern LightsBuffer sLightsBuffer; // extern UNK_TYPE1 D_801F5130; // extern UNK_TYPE1 D_801F5270; -// extern UNK_TYPE1 D_801F528E; // extern UNK_TYPE1 D_801F53B0; // extern UNK_TYPE1 D_801F56B0; // extern UNK_TYPE1 D_801F5730; diff --git a/include/z64map.h b/include/z64map.h index 13c861965..a17317548 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -23,6 +23,14 @@ typedef struct { /* 0x04 */ s16 unk4; } MinimapList2; // size = 0x8 +typedef struct { + /* 0x00 */ UNK_TYPE2 unk0; + /* 0x02 */ UNK_TYPE2 unk2; + /* 0x04 */ UNK_TYPE2 unk4; + /* 0x06 */ UNK_TYPE2 unk6; + /* 0x08 */ UNK_TYPE2 unk8; +} MinimapChest; // size = 0xA + /* z_map_data */ typedef struct { @@ -63,13 +71,6 @@ typedef struct { /* 0x08 */ s32 unk8; // G_IM_SIZ } T_801BEAE0; -typedef struct { - /* 0x00 */ s16 unk0; - /* 0x00 */ s16 unk2; - /* 0x00 */ s16 unk4; - /* 0x00 */ s16 unk6; -} T_801BEBB8_unk48; - typedef struct { /* 0x00 */ MinimapList2* unk0; //unk0 -> sub1 -> s16[5] /* 0x04 */ s32 unk4; @@ -84,7 +85,8 @@ typedef struct { /* 0x1E */ s16 unk1E; //same as 0E /* 0x20 */ s32 unk20; /* 0x24 */ s32 unk24; - /* 0x28 */ char unk28[8]; + /* 0x28 */ void* unk28; + /* 0x2C */ void* unk2C; /* 0x30 */ s16 unk30; //scene minBounds.x /* 0x32 */ s16 unk32; //scene minBounds.z /* 0x34 */ s16 unk34; //scene boundsWidth.x @@ -97,8 +99,11 @@ typedef struct { /* 0x44 */ s16 unk44; /* 0x48 */ s16* unk48; /* 0x4C */ s16 unk4C; - /* 0x4E */ char unk4E[0x0A]; + /* 0x4E */ char unk4E[0x02]; + /* 0x50 */ s32 unk50; //num chests + /* 0x54 */ MinimapChest* unk54; /* 0x58 */ s16 unk58; + /* 0x5A */ s16 unk5A; } T_801BEBB8; typedef struct { @@ -138,6 +143,7 @@ typedef struct { /* z_map_data */ s32 func_80109CBC(s32); s32 func_80109A98(s32); +s32 func_80109AD8(s32); s32 func_801096D4(s32 arg0); void func_8010983C(s32 arg0, s32 *arg1); void func_801097C8(s32 arg0, s32* arg1, s32* arg2); diff --git a/include/z64scene.h b/include/z64scene.h index 14a238917..d750647f0 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -469,14 +469,6 @@ typedef struct { /* 0x04 */ Vec3s* points; // Segment Address to the array of points } Path; // size = 0x8 -typedef struct { - /* 0x00 */ UNK_TYPE2 unk0; - /* 0x02 */ UNK_TYPE2 unk2; - /* 0x04 */ UNK_TYPE2 unk4; - /* 0x06 */ UNK_TYPE2 unk6; - /* 0x08 */ UNK_TYPE2 unk8; -} MinimapChest; // size = 0xA - // TODO: consider merging with bgCamInfo? typedef struct { /* 0x0 */ s16 setting; // camera setting described by CameraSettingType enum diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index d0240a76f..ee570aa21 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -12,6 +12,8 @@ extern Color_RGBA8 D_801BED40[]; extern s32 D_801BF3B4[]; extern s32 D_801BEFC8[]; +s32 func_80109A98(s32); + void func_801094A0(s32 arg0, Color_RGBA8* color) { *color = D_801BED40[arg0]; } @@ -184,8 +186,6 @@ s16 func_80109A20(s32 arg0) { return D_801BF170[arg0].unk8; } -s32 func_80109A98(s32); /* extern */ - s32 func_80109A40(s32 arg0) { s32 temp_s2; s32 var_s0; diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index a84891354..38e5e69a7 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,6 +1,7 @@ #include "global.h" #include "z64map.h" +void func_801068B4(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); @@ -30,6 +31,7 @@ extern T_801BEBB8 D_801BEBB8; extern s16 D_801BEC10; extern MinimapList D_801BEC14; //D_801F5130 extern s32 D_801BEC1C; //current scene's no. of rooms +extern s32 D_801BEC20; //MinimapChest count extern u8 D_801BEC24; extern Color_RGBA8 D_801BEC2C[]; // cat colors extern T_801BEC5C D_801BEC5C[5]; @@ -39,7 +41,9 @@ extern u16 D_801BECA4[0x10]; //palette 1 extern u16 D_801BECC4[0x10]; //palette 2 extern T_801BED24 D_801BED24[2]; + extern MinimapEntry D_801F5130[0x50]; +extern MinimapChest D_801F5270[32]; extern T_801F53B0 D_801F53B0[]; extern T_801F56B0 D_801F56B0; extern TexturePtr D_801F57B4[32]; //unconfirmed length @@ -50,22 +54,63 @@ extern Gfx D_0401ED00[]; void func_80102E40(s32 arg0, s32 arg1) { if (func_80109A98(arg1) != 0) { - func_80178E3C(_map_i_staticSegmentRomStart, arg1, arg0, func_80109A98(arg1)); + func_80178E3C(SEGMENT_ROM_START(map_i_static), arg1, arg0, func_80109A98(arg1)); } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102E90.s") +void func_80102E90(PlayState* play, s16* arg1) { + *arg1 = -1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102EA4.s") +void func_80102EA4(UNK_TYPE4 arg0, UNK_TYPE4 arg1) { -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102EB4.s") +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102ED0.s") +void func_80102EB4(u32 param_1) { + D_801BEBB8.unk20 |= param_1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102EF0.s") +void func_80102ED0(u32 param_1) { + D_801BEBB8.unk20 &= ~param_1; +} -f32 func_80102F9C(f32); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80102F9C.s") +s32 func_80102EF0(PlayState* play) { + MinimapEntry* entry; + s8 temp_v1; + + if (Map_IsInBossArea(play) == 1) { + return 1; + } + temp_v1 = play->roomCtx.currRoom.num; + if (temp_v1 == -1) { + return 0; + } + entry = &D_801BEBB8.unk0->entry[temp_v1]; + if (entry->unk0 == 0xFFFF) { + return 0; + } + if (func_80109AD8(entry->unk0) == 0x3A) { + return 0; + } + return 1; +} + +f32 func_80102F9C(f32 arg0) { + s32 i; + + if ((D_801BEBB8.unk48[D_801BEBB8.unk40-1] - 80.0f) < arg0) { + return D_801BEBB8.unk48[D_801BEBB8.unk40-1]; + } + for (i = D_801BEBB8.unk40 - 2; i >= 0; i--) { + if (((D_801BEBB8.unk48[i] - 80.0f) < arg0) && (arg0 < (D_801BEBB8.unk48[i + 1] + 80.0f))) { + return D_801BEBB8.unk48[i]; + } + } + if (arg0 < (D_801BEBB8.unk48[0] + 80.0f)) { + return D_801BEBB8.unk48[0]; + } + return 0.0f; +} void func_80103090(MinimapEntry* arg0, s32* out1, s32* out2){ func_80109754(arg0->unk0, out1, out2); @@ -413,9 +458,75 @@ void func_80104AE8(PlayState *play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104C80.s") +#ifdef NON_MATCHING +//https://decomp.me/scratch/kvGBZ +void func_80104C80(PlayState* play) { + s32 objBankIndex; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104CF4.s") + objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP); + if (objBankIndex < 0) { + D_801BEBB8.unk20 |= 1; + return; + } + do { + + } while (!Object_IsLoaded(&play->objectCtx, objBankIndex)); +} +#else +void func_80104C80(PlayState* play); +#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104C80.s") +#endif + +void func_80104CF4(PlayState* play) { + s32 i; + + D_801BEBB8.unk0 = NULL; + D_801BEBB8.unk4 = -1; + D_801BEBB8.unk8 = 0xD2; + D_801BEBB8.unkA = 0x8C; + D_801BEBB8.unkC = 0xD2; + D_801BEBB8.unkE = 0x8C; + D_801BEBB8.unk10 = NULL; + D_801BEBB8.unk14 = -1; + D_801BEBB8.unk18 = NULL; + D_801BEBB8.unk1C = 0; + D_801BEBB8.unk1E = 0; + D_801BEBB8.unk20 = 0; + D_801BEBB8.unk24 = 0; + + if (Map_IsInBossArea(play) == 0) { + D_801BEC1C = play->numRooms; + } + D_801BEBB8.unk28 = THA_AllocEndAlign16(&play->state.heap, 0x4000); + D_801BEBB8.unk2C = THA_AllocEndAlign16(&play->state.heap, 0x4000); + func_80104C80(play); + if (Map_IsInBossArea(play) == 0) { + D_801BEBB8.unk34 = 0x64; + D_801BEBB8.unk30 = 0; + D_801BEBB8.unk36 = 0x64; + D_801BEBB8.unk32 = 0; + D_801BEBB8.unk38 = (s16) (s32) ((f32) D_801BEBB8.unk30 + ((f32) D_801BEBB8.unk34 * 0.5f)); + D_801BEBB8.unk3A = (s16) (s32) ((f32) D_801BEBB8.unk32 + ((f32) D_801BEBB8.unk36 * 0.5f)); + } + D_801BEBB8.unk3C = THA_AllocEndAlign16(&play->state.heap, D_801BEC1C * sizeof(s16)); + + for (i = 0; i < D_801BEC1C; i++) { + func_80102E90(play, &D_801BEBB8.unk3C[i]); + } + D_801BEBB8.unk48 = THA_AllocEndAlign16(&play->state.heap, 32 * sizeof(s16)); + + for (i = 0; i < 32; i++) + { + D_801BEBB8.unk48[i] = -0x7FFF; + } + func_801068B4(play); + D_801BEBB8.unk58 = 0; + D_801BEBB8.unk5A = 0; + if (Map_IsInBossArea(play) != 0) { + func_8010549C(play, NULL); + func_8010565C(play, 0, NULL); + } +} void func_80104F34(PlayState* play) { s32 i1; @@ -583,7 +694,21 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010549C.s") #endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010565C.s") +void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { + MinimapChest* var_v1; + s32 var_a3; + + if (Map_IsInBossArea(play) == 0) { + var_v1 = Lib_SegmentedToVirtual(segmentAddress); + for (var_a3 = 0; var_a3 < num; var_v1++, var_a3++) { + D_801F5270[var_a3] = *var_v1; + } + D_801BEC20 = num; + } + D_801BEBB8.unk54 = D_801F5270; + D_801BEBB8.unk50 = D_801BEC20; +} + #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105818.s") @@ -681,7 +806,7 @@ void func_8010683C(void) { D_801BEBB8.unk20 &= ~1; } -void func_801068B4(s32 arg0) { +void func_801068B4(PlayState* play) { func_8010683C(); } diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 0c2490f40..0fcb25ef8 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -3994,8 +3994,7 @@ 0x801F4F70:("sLightsBuffer","LightsBuffer","",0x188), 0x801F5100:("sZeldaArena","Arena","",0x24), 0x801F5130:("D_801F5130","UNK_TYPE1","",0x1), - 0x801F5270:("D_801F5270","UNK_TYPE1","",0x1), - 0x801F528E:("D_801F528E","UNK_TYPE1","",0x1), + 0x801F5270:("D_801F5270","UNK_TYPE1","",0x140), 0x801F53B0:("D_801F53B0","UNK_TYPE1","",0x1), 0x801F56B0:("D_801F56B0","UNK_TYPE1","",0x1), 0x801F5730:("D_801F5730","UNK_TYPE1","",0x1), From 5ece2556476ec696bff484d8e8228297dbb51a7d Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 4 Aug 2022 22:55:05 -0400 Subject: [PATCH 10/28] func_80105C40 almost OK, more OKs --- include/functions.h | 4 +- include/z64.h | 2 +- include/z64map.h | 50 ++-------- include/z64scene.h | 27 +++++- src/code/z_map_data.c | 4 +- src/code/z_map_disp.c | 212 ++++++++++++++++++++++++++++++++++++++---- src/code/z_map_exp.c | 4 +- 7 files changed, 235 insertions(+), 68 deletions(-) diff --git a/include/functions.h b/include/functions.h index a9705281d..dbdc6c819 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1683,8 +1683,8 @@ s16 func_80105318(void); // void func_8010534C(void); void func_8010549C(PlayState* play, void* segmentAddress); void func_8010565C(PlayState* play, s32 num, void* segmentAddress); -void func_80105818(PlayState* play, u32 uParm2, TransitionActorEntry* puParm3); -void func_80105A40(void); +void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList); +void func_80105A40(PlayState* play); void func_80105B34(PlayState* play); void func_80105C40(s16 arg0); // void func_80105FE0(void); diff --git a/include/z64.h b/include/z64.h index c9cbeb1bc..2405448fd 100644 --- a/include/z64.h +++ b/include/z64.h @@ -37,7 +37,6 @@ #include "z64effect.h" #include "z64item.h" #include "z64light.h" -#include "z64map.h" #include "z64math.h" #include "z64message.h" #include "z64object.h" @@ -45,6 +44,7 @@ #include "z64player.h" #include "z64save.h" #include "z64scene.h" +#include "z64map.h" #include "z64schedule.h" #include "z64skin.h" #include "z64subs.h" diff --git a/include/z64map.h b/include/z64map.h index a17317548..2dd7ef90c 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -1,40 +1,14 @@ #ifndef Z64MAP_H #define Z64MAP_H #include "ultra64.h" - +#include "z64scene.h" #define FLOOR_INDEX_MAX 4 /* z_scene */ -typedef struct { - /* 0x00 */ u16 unk0; - /* 0x02 */ s16 unk2; - /* 0x04 */ UNK_TYPE2 unk4; - /* 0x06 */ s16 unk6; - /* 0x08 */ u16 unk8; -} MinimapEntry; // size = 0xA - -typedef struct { - /* 0x00 */ MinimapEntry* entry; - /* 0x04 */ s32 unk4; -} MinimapList; // size = 0x8 - -typedef struct { - /* 0x00 */ MinimapEntry* entry; - /* 0x04 */ s16 unk4; -} MinimapList2; // size = 0x8 - -typedef struct { - /* 0x00 */ UNK_TYPE2 unk0; - /* 0x02 */ UNK_TYPE2 unk2; - /* 0x04 */ UNK_TYPE2 unk4; - /* 0x06 */ UNK_TYPE2 unk6; - /* 0x08 */ UNK_TYPE2 unk8; -} MinimapChest; // size = 0xA - /* z_map_data */ typedef struct { - /* 0x00 */ s32 unk0; + /* 0x00 */ TexturePtr lmapTex; //minimap texture /* 0x04 */ u8 unk4; /* 0x05 */ u8 unk5; /* 0x06 */ u8 unk6; @@ -78,15 +52,15 @@ typedef struct { /* 0x0A */ s16 unkA; /* 0x0C */ s16 unkC; /* 0x0E */ s16 unkE; - /* 0x10 */ TexturePtr unk10; + /* 0x10 */ TexturePtr unk10; // gameplay cur minimap room /* 0x14 */ s32 unk14; //unk4 same type as unk14 /* 0x18 */ TexturePtr unk18; /* 0x1C */ s16 unk1C; //same as 0C /* 0x1E */ s16 unk1E; //same as 0E /* 0x20 */ s32 unk20; /* 0x24 */ s32 unk24; - /* 0x28 */ void* unk28; - /* 0x2C */ void* unk2C; + /* 0x28 */ TexturePtr unk28; //unk type + /* 0x2C */ TexturePtr unk2C; //unk type /* 0x30 */ s16 unk30; //scene minBounds.x /* 0x32 */ s16 unk32; //scene minBounds.z /* 0x34 */ s16 unk34; //scene boundsWidth.x @@ -111,17 +85,6 @@ typedef struct { /* 0x02 */ s16 unk2; } T_801BEC5C; -typedef struct{ - /* 0x00 */ s16 unk0; - /* 0x02 */ s16 unk2; - /* 0x04 */ s16 unk4; - /* 0x06 */ UNK_TYPE2 unk6; - /* 0x08 */ s16 unk8; - /* 0x0A */ UNK_TYPE2 unkA; - /* 0x0C */ UNK_TYPE2 unkC; - /* 0x0E */ u16 unkE; -} T_801F53B0; - typedef struct { /* 0x00 */ s32 unk0[5]; } T_801BEC70; @@ -141,6 +104,9 @@ typedef struct { } T_801F56B0; /* z_map_data */ +TexturePtr func_8010958C(s32); + +s32 func_80109714(s32); s32 func_80109CBC(s32); s32 func_80109A98(s32); s32 func_80109AD8(s32); diff --git a/include/z64scene.h b/include/z64scene.h index d750647f0..175ecc066 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -4,7 +4,6 @@ #include "ultra64.h" #include "z64dma.h" #include "z64cutscene.h" -#include "z64map.h" #include "unk.h" #define SPAWN_ROT_FLAGS(rotation, flags) (((rotation) << 7) | (flags)) @@ -305,6 +304,32 @@ typedef struct { /* 0x04 */ TransitionActorEntry* transitionActorList; } DoorContext; +typedef struct { + /* 0x00 */ u16 unk0; + /* 0x02 */ s16 unk2; + /* 0x04 */ UNK_TYPE2 unk4; + /* 0x06 */ s16 unk6; + /* 0x08 */ u16 unk8; +} MinimapEntry; // size = 0xA + +typedef struct { + /* 0x00 */ MinimapEntry* entry; + /* 0x04 */ s32 unk4; +} MinimapList; // size = 0x8 + +typedef struct { + /* 0x00 */ MinimapEntry* entry; + /* 0x04 */ s16 unk4; +} MinimapList2; // size = 0x8 + +typedef struct { + /* 0x00 */ UNK_TYPE2 unk0; + /* 0x02 */ UNK_TYPE2 unk2; + /* 0x04 */ UNK_TYPE2 unk4; + /* 0x06 */ UNK_TYPE2 unk6; + /* 0x08 */ UNK_TYPE2 unk8; +} MinimapChest; // size = 0xA + typedef struct { /* 0x0 */ s16 id; /* 0x2 */ Vec3s pos; diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index ee570aa21..b2693ef23 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -40,8 +40,8 @@ s16 func_8010956C(s32 arg0) { return D_801BED4C[arg0].unkA; } -s32 func_8010958C(s32 arg0) { - return D_801BED4C[arg0].unk0; +TexturePtr func_8010958C(s32 arg0) { + return D_801BED4C[arg0].lmapTex; } void func_801095AC(s32 arg0, s32 *arg1, s32 *arg2) { diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 38e5e69a7..b3da50419 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,6 +1,6 @@ #include "global.h" -#include "z64map.h" +void func_801068D8(PlayState* play); void func_801068B4(PlayState* play); void func_80103090(MinimapEntry*, s32*, s32*); void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot); @@ -28,11 +28,12 @@ extern u32 D_801BEB18; extern u32 D_801BEB28; extern TexturePtr D_801BEB38; extern T_801BEBB8 D_801BEBB8; +extern s16 D_801BEBFA; extern s16 D_801BEC10; extern MinimapList D_801BEC14; //D_801F5130 extern s32 D_801BEC1C; //current scene's no. of rooms extern s32 D_801BEC20; //MinimapChest count -extern u8 D_801BEC24; +extern DoorContext D_801BEC24; extern Color_RGBA8 D_801BEC2C[]; // cat colors extern T_801BEC5C D_801BEC5C[5]; extern T_801BEC70 D_801BEC70; @@ -41,10 +42,9 @@ extern u16 D_801BECA4[0x10]; //palette 1 extern u16 D_801BECC4[0x10]; //palette 2 extern T_801BED24 D_801BED24[2]; - extern MinimapEntry D_801F5130[0x50]; extern MinimapChest D_801F5270[32]; -extern T_801F53B0 D_801F53B0[]; +extern TransitionActorEntry D_801F53B0[48]; extern T_801F56B0 D_801F56B0; extern TexturePtr D_801F57B4[32]; //unconfirmed length extern s32 D_801F5834; @@ -62,7 +62,7 @@ void func_80102E90(PlayState* play, s16* arg1) { *arg1 = -1; } -void func_80102EA4(UNK_TYPE4 arg0, UNK_TYPE4 arg1) { +void func_80102EA4(PlayState* play, s16* arg1) { } @@ -619,7 +619,7 @@ s32 func_80105328(s32 arg0) { #ifdef NON_MATCHING // https://decomp.me/scratch/F3QhH void func_8010534C(PlayState* play) { - T_801F53B0* var_s0; + TransitionActorEntry* var_s0; s16 temp_a0; s16 temp_a2; s16 temp_v0; @@ -628,22 +628,22 @@ void func_8010534C(PlayState* play) { s16* temp_v1; s32 var_s2; - for (var_s2 = 0; var_s2 < D_801BEC24; var_s2++) { + for (var_s2 = 0; var_s2 < D_801BEC24.numTransitionActors; var_s2++) { var_s0 = &D_801F53B0[var_s2]; - if (func_80105328(var_s0->unkE) != 0) { - if (var_s0->unk4 < 0) { - var_v1 = -var_s0->unk4; + if (func_80105328(var_s0->params) != 0) { + if (var_s0->id < 0) { + var_v1 = -var_s0->id; } else { - var_v1 = var_s0->unk4; + var_v1 = var_s0->id; } if (var_v1 != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { - if (((var_v0 == D_801BEBB8.unk40 - 1) && (var_s0->unk8 >= (D_801BEBB8.unk48[var_v0] - 5))) + if (((var_v0 == D_801BEBB8.unk40 - 1) && (var_s0->pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) || ( (var_v0 != D_801BEBB8.unk40 - 1) && - (var_s0->unk8 >= (D_801BEBB8.unk48[var_v0] - 5)) && - (var_s0->unk8 < (D_801BEBB8.unk48[var_v0+1] - 5)) + (var_s0->pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && + (var_s0->pos.y < (D_801BEBB8.unk48[var_v0+1] - 5)) )) { D_801BEBB8.unk58 = var_v0; return; @@ -709,14 +709,190 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { D_801BEBB8.unk50 = D_801BEC20; } +void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105818.s") + if (Map_IsInBossArea(play) == 0) { + D_801BEC24.numTransitionActors = num; + for (i = 0; i < num; i++) + { + D_801F53B0[i] = transitionActorList[i]; + } + D_801BEC24.transitionActorList = D_801F53B0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105A40.s") +void func_80105A40(PlayState* play) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105B34.s") + D_801BEBB8.unk0 = NULL; + D_801BEBB8.unk4 = -1; + D_801BEBB8.unkC = 0xD2; + D_801BEBB8.unkE = 0x8C; + D_801BEBB8.unk10 = NULL; + D_801BEBB8.unk14 = -1; + D_801BEBB8.unk18 = NULL; + D_801BEBB8.unk1C = 0; + D_801BEBB8.unk1E = 0; + D_801BEBB8.unk20 = 0; + D_801BEBB8.unk24 = 0; + D_801BEBB8.unk28 = NULL; + D_801BEBB8.unk2C = NULL; + + for (i = 0; i < D_801BEC1C; i++) { + func_80102EA4(play, &D_801BEBB8.unk3C[i]); + } + D_801BEBB8.unk3C = NULL; + D_801BEBB8.unk40 = 0; + D_801BEBB8.unk42 = 0; + D_801BEBB8.unk44 = 0; + D_801BEBB8.unk4C = 0; + D_801BEBB8.unk48 = NULL; + D_801BEBB8.unk50 = 0; + D_801BEBB8.unk54 = NULL; + func_801068D8(play); + D_801BEBB8.unk5A = 0; +} + + +void func_80105B34(PlayState* play) { + s16 temp_a0; + s16 temp_a0_2; + s16 temp_v1; + s16 temp_v1_2; + s32 temp_v0; + + if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0)) { + D_801BEBFA = 8 - play->pauseCtx.unk_256; + if (D_801BEBB8.unk14 != -1) { + temp_v0 = D_801BEBB8.unk24; + if (temp_v0 > 0) { + temp_v1 = D_801BEBB8.unk8; + temp_a0 = D_801BEBB8.unkC; + if (temp_v1 != temp_a0) { + D_801BEBB8.unkC = (s16) (s32) (((f32) (temp_v1 - temp_a0) / (f32) temp_v0) + (f32) temp_a0); + } + temp_v1_2 = D_801BEBB8.unkA; + temp_a0_2 = D_801BEBB8.unkE; + if (temp_v1_2 != temp_a0_2) { + D_801BEBB8.unkE = (s16) (s32) (((f32) (temp_v1_2 - temp_a0_2) / (f32) temp_v0) + (f32) temp_a0_2); + } + D_801BEBB8.unk24 = temp_v0 - 1; + return; + } + D_801BEBB8.unk14 = -1; + D_801BEBB8.unk24 = 0; + D_801BEBB8.unkC = D_801BEBB8.unk8; + D_801BEBB8.unkE = D_801BEBB8.unkA; + return; + } + D_801BEBB8.unk24 = 0; + } +} + + +#ifdef NON_MATCHING +//https://decomp.me/scratch/oK0wd +void func_80105C40(s16 arg0) { + MinimapEntry* temp_s0; + MinimapEntry* sp58; + s32 sp54; + s32 sp50; + s32 sp4C; + 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]; + if ( ( temp_s0->unk0 < 5) || (( temp_s0->unk0 >= 0x100) && ( temp_s0->unk0 < 0x162)) || temp_s0->unk0 == 0xFFFF) { + + D_801BEBB8.unk14 = D_801BEBB8.unk4; + D_801BEBB8.unk4 = arg0; + D_801BEBB8.unk24 = 0x14; + + D_801BEBB8.unk18 = D_801BEBB8.unk10; + sp54 = D_801BEBB8.unk8; + sp50 = D_801BEBB8.unkA; + + temp_s0 = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + + if (temp_s0->unk0 == 0xFFFF) { + D_801BEBB8.unk1E = 0; + D_801BEBB8.unk8 = 0xD2; + D_801BEBB8.unkA = 0x8C; + D_801BEBB8.unkC = 0xD2; + D_801BEBB8.unkE = 0x8C; + D_801BEBB8.unk10 = NULL; + D_801BEBB8.unk1C = D_801BEBB8.unk1E; + return; + } + func_801030F4(temp_s0, &sp44, &sp40); + func_80103090(temp_s0, &sp4C, &sp48); + D_801BEBB8.unk8 = 0x127 - sp4C; + D_801BEBB8.unkA = 0xDC - sp48; + if (D_801BEBB8.unk14 != -1) { + sp58 = &D_801BEBB8.unk0->entry[D_801BEBB8.unk14]; + if (sp58->unk0 == 0xFFFF) { + D_801BEBB8.unk1E = 0; + D_801BEBB8.unk10 = NULL; + D_801BEBB8.unk1C = D_801BEBB8.unk1E; + D_801BEBB8.unkC = D_801BEBB8.unk8; + 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; + } + //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; + D_801BEBB8.unkC = D_801BEBB8.unk8; + D_801BEBB8.unkE = D_801BEBB8.unkA; + } + D_801BEBB8.unk10 = NULL; + + switch (func_80109714(temp_s0->unk0)) { + case 0: + D_801BEBB8.unk10 = func_8010958C(temp_s0->unk0); + return; + case 1: + if (D_801BEBB8.unk18 == D_801BEBB8.unk28) { + D_801BEBB8.unk10 = D_801BEBB8.unk2C; + } else { + D_801BEBB8.unk10 = D_801BEBB8.unk28; + } + if (func_801096D4(temp_s0->unk0) != 0) { + func_80178E3C(SEGMENT_ROM_START(map_grand_static), + temp_s0->unk0 - 0x100, + (s32) D_801BEBB8.unk10, + func_801096D4(temp_s0->unk0)); + } + break; + } + } + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105C40.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105FE0.s") @@ -810,7 +986,7 @@ void func_801068B4(PlayState* play) { func_8010683C(); } -void func_801068D8(s32 arg0) { +void func_801068D8(PlayState* play) { func_8010683C(); } diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index 5135a3c41..d681f2e95 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -169,8 +169,8 @@ void Map_InitRoomData(PlayState* play, s16 room) { } } -void Map_Destroy(void) { - func_80105A40(); +void Map_Destroy(PlayState* play) { + func_80105A40(play); } void Map_Init(PlayState* play) { From 7879695e68683b7523894d5dc444a2996f25981c Mon Sep 17 00:00:00 2001 From: mzxrules Date: Wed, 10 Aug 2022 13:13:14 -0400 Subject: [PATCH 11/28] func_80108AF8 OK and more --- include/z64save.h | 1 + src/code/z_map_disp.c | 378 +++++++++++++++++++++++++++++++++--------- 2 files changed, 297 insertions(+), 82 deletions(-) diff --git a/include/z64save.h b/include/z64save.h index 43260b277..16bbe3425 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -315,6 +315,7 @@ typedef enum SunsSongState { #define RESET_HEART_PIECE_COUNT (gSaveContext.save.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT)) #define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item]) +#define CHECK_DUNGEON_ITEM2(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) #define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item]) #define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.inventory.dungeonKeys[(void)0, dungeonIndex]) diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index b3da50419..8ed6821bd 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -16,19 +16,20 @@ s32 func_80108A64(PlayState*); s32 func_80109BA0(s32); s16 func_80109F78(s32); -s16 func_80106D08(s16); void func_80109D40(s32, s32*, s32*, void*); void func_80109DD8(s32, s32*, s32*); -extern T_801BEAE0 D_801BEAE0; extern s32 D_801BEAD8; // G_IM_SIZ -extern u32 D_801BEAF8; -extern s32 D_801BEB08; -extern u32 D_801BEB18; -extern u32 D_801BEB28; +extern T_801BEAE0 D_801BEAE0; +extern u32 D_801BEAF8; // siz_INCR +extern s32 D_801BEB08; // siz_SHIFT +extern u32 D_801BEB18; // siz_BYTES +extern u32 D_801BEB28; // siz_LINE_BYTES extern TexturePtr D_801BEB38; extern T_801BEBB8 D_801BEBB8; -extern s16 D_801BEBFA; +extern s16 D_801BEBF8; // D_801BEBB8.unk40 +extern s16 D_801BEBFA; // D_801BEBB8.unk42 +extern s16 D_801BEBFC; // D_801BEBB8.unk44 extern s16 D_801BEC10; extern MinimapList D_801BEC14; //D_801F5130 extern s32 D_801BEC1C; //current scene's no. of rooms @@ -225,6 +226,26 @@ s32 func_80103A10(PlayState* play) { return true; } +#define gDPLoadTextureBlock_TEST(pkt, timg, fmt, siz_LOAD_BLOCK, siz_INCR, siz_SHIFT, siz_BYTES, siz_LINE_BYTES, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz_INCR) >> siz_SHIFT) -1, \ + CALC_DXT(width, siz_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz_LINE_BYTES)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +}) + #ifdef NON_MATCHING // https://decomp.me/scratch/TR5Jq void func_80103A58(PlayState *play, Actor *actor) { @@ -236,39 +257,37 @@ void func_80103A58(PlayState *play, Actor *actor) { s32 spC8; s32 spC4; f32 spC0; - u32 temp_v0_19; + u32 pad; s32 var_v0; Player *spB4; - u32 var_v1_2; + u32 pad2; s32 spAC; //GraphicsContext *spA8; - s16 spA2; - s16 temp_v1; - spB4 = GET_PLAYER(play); spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + spB4 = GET_PLAYER(play); if (spDC->unk0 != 0xFFFF) { func_801030F4(spDC, &spD0, &spCC); func_80103090(spDC, &spC8, &spC4); - temp_v1 = D_801BEBB8.unk0->unk4; - var_v0 = temp_v1; - if (temp_v1 == 0) { + var_v0 = D_801BEBB8.unk0->unk4; + if (D_801BEBB8.unk0->unk4 == 0) { var_v0 = 0x14; - } else if (temp_v1 == -1) { + } else if (D_801BEBB8.unk0->unk4 == -1) { func_801030B4(spDC, &spAC); var_v0 = spAC; } spC0 = 1.0f / (f32) var_v0; if (func_801039EC(play) == 0) { - 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; + 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 { - spD8 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - (f32) spDC->unk2) * spC0)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + spD0; - spD4 = ((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - (f32) spDC->unk6) * spC0)) + D_801BEBB8.unkE) - D_801BEBB8.unkA + spCC; + 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; } if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) { + s16 spA2; func_8012C8D4(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); @@ -298,17 +317,39 @@ void func_80103A58(PlayState *play, Actor *actor) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); gDPPipeSync(OVERLAY_DISP++); - gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 1, &D_02003F20); - gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(OVERLAY_DISP++); - gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0, - ((D_801BEAF8 + 0x40) >> D_801BEB08) - 1, - (((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18) + 0x7FF) - / ((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18)); - gDPPipeSync(OVERLAY_DISP++); - gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAD8, - ((D_801BEB28 * 8) + 7) >> 3, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPSetTileSize(OVERLAY_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); + + gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, + D_801BEAE0.unk8, D_801BEAF8, D_801BEB08, D_801BEB18, D_801BEB28, D_801BEAD8, 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); + + // gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 1, &D_02003F20); + // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 0, 0x0000, G_TX_LOADTILE, 0, + // G_TX_NOMIRROR | G_TX_WRAP, // cmt + // G_TX_NOMASK, //maskt + // G_TX_NOLOD, //shiftt + // G_TX_NOMIRROR | G_TX_WRAP, //cms + // G_TX_NOMASK, //masks + // G_TX_NOLOD); //shifts + // gDPLoadSync(OVERLAY_DISP++); + // gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0, + // ((D_801BEAF8 + 0x40) >> D_801BEB08) - 1, + // (((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18) + 0x7FF) + // / ((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18)); + // gDPPipeSync(OVERLAY_DISP++); + // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAD8, + // ((D_801BEB28 * 8) + 7) >> 3, 0x0000, G_TX_RENDERTILE, 0, + // G_TX_NOMIRROR | G_TX_WRAP, // cmt + // G_TX_NOMASK, + // G_TX_NOLOD, + // G_TX_NOMIRROR | G_TX_WRAP, + // G_TX_NOMASK, + // G_TX_NOLOD); + // gDPSetTileSize(OVERLAY_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, (spD4 + 4) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); return; } @@ -357,9 +398,7 @@ void func_8010439C(PlayState *play) { } } -#ifdef NON_MATCHING -// https://decomp.me/scratch/vbnTA -void func_801045AC(PlayState* play, Actor* actor) { //4729 +void func_801045AC(PlayState* play, Actor* actor) { MinimapEntry* sp7C; s32 sp78; s32 sp74; @@ -367,40 +406,38 @@ void func_801045AC(PlayState* play, Actor* actor) { //4729 s32 sp6C; s32 sp68; s32 sp64; - f32 temp_fv1; - s16 temp_v0; - s16 temp_v0_5; + Player* player; f32 sp5C; + f32 temp_fv1; s32 var_v1; - s32 var_v1_2; f32 sp50; - s32 sp4C; - //GraphicsContext* sp48; - temp_fv1 = 0.0028571428f * fabsf(play->actorCtx.actorLists[2].first->world.pos.y - actor->world.pos.y); - sp50 = 1.0f - temp_fv1; - if (temp_fv1 > 1.0f) { + player = GET_PLAYER(play); + temp_fv1 = fabsf(player->actor.world.pos.y - actor->world.pos.y); + sp50 = 1.0f - (1 / 350.0f) * temp_fv1; + if (sp50 < 0) { sp50 = 0.0f; } sp7C = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; if (sp7C->unk0 != 0xFFFF) { func_801030F4(sp7C, &sp70, &sp6C); func_80103090(sp7C, &sp68, &sp64); - temp_v0 = D_801BEBB8.unk0->unk4; - var_v1 = temp_v0; - if (temp_v0 == 0) { + + var_v1 = D_801BEBB8.unk0->unk4; + if (D_801BEBB8.unk0->unk4 == 0) { var_v1 = 0x14; - } else if (temp_v0 == -1) { + } else if (D_801BEBB8.unk0->unk4 == -1) { + s32 sp4C; func_801030B4(sp7C, &sp4C); var_v1 = sp4C; } - sp5C = 1.0f / (f32) var_v1; + sp5C = 1.0f / var_v1; if (func_801039EC(play) == 0) { - sp78 = (((s32) ((actor->world.pos.x - (f32) sp7C->unk2) * sp5C) + D_801BEBB8.unk8 + D_801BEBB8.unkC) - D_801BEBB8.unk8) + sp70; - sp74 = (((s32) ((actor->world.pos.z - (f32) sp7C->unk6) * sp5C) + D_801BEBB8.unkA + D_801BEBB8.unkE) - D_801BEBB8.unkA) + sp6C; + 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 { - sp78 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - (f32) sp7C->unk2) * sp5C)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + sp70; - sp74 = (((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - (f32) sp7C->unk6) * sp5C)) + D_801BEBB8.unkE) - D_801BEBB8.unkA) + sp6C; + sp78 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - sp7C->unk2) * sp5C)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + sp70; + sp74 = (((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - sp7C->unk6) * sp5C)) + D_801BEBB8.unkE) - D_801BEBB8.unkA) + sp6C; } if ((sp78 > 0) && (sp78 < 0x3FF) && (sp74 > 0) && (sp74 < 0x3FF) ) { OPEN_DISPS(play->state.gfxCtx); @@ -408,30 +445,27 @@ void func_801045AC(PlayState* play, Actor* actor) { //4729 gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if ((actor->category == 0xA) && (func_80103A10(play) != 0)) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, (s32)((D_801BEC2C[actor->category].a * (1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)) * sp50 * (f32) play->interfaceCtx.minimapAlpha) / 255.0f)); - temp_v0_5 = D_801BEBB8.unk0->unk4; - var_v1_2 = temp_v0_5; - if (temp_v0_5 == 0) { - var_v1_2 = 0x14; - } else if (temp_v0_5 == -1) { + s32 pad; + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, (s32)((D_801BEC2C[actor->category].a * (1.0f - D_801BEBB8.unk24 * 0.05f) * sp50 * play->interfaceCtx.minimapAlpha) / 255.0f)); + + var_v1 = D_801BEBB8.unk0->unk4; + if (D_801BEBB8.unk0->unk4 == 0) { + var_v1 = 0x14; + } else if (D_801BEBB8.unk0->unk4 == -1) { s32 sp34; - func_801030B4(sp7C, &sp34); // sp34 is local temp - var_v1_2 = sp34; + func_801030B4(sp7C, &sp34); + var_v1 = sp34; } - if (var_v1_2 <= 50) { - gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 2) * 4, (sp74 - 2) * 4, (sp78 + 2) * 4, (sp74 + 2) * 4, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + if (var_v1 <= 50) { + gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 2) << 2, (sp74 - 2) << 2, (sp78 + 2) << 2, (sp74 + 2) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } else { - gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 1) * 4, (sp74 - 1) * 4, (sp78 + 1) * 4, (sp74 + 1) * 4, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 1) << 2, (sp74 - 1) << 2, (sp78 + 1) << 2, (sp74 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } } CLOSE_DISPS(play->state.gfxCtx); } } } -#else -void func_801045AC(PlayState* play, Actor* actor); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801045AC.s") -#endif void func_80104AE8(PlayState *play) { s32 i; @@ -458,7 +492,7 @@ void func_80104AE8(PlayState *play) { } } -#ifdef NON_MATCHING +//Possible fakematch //https://decomp.me/scratch/kvGBZ void func_80104C80(PlayState* play) { s32 objBankIndex; @@ -466,16 +500,13 @@ void func_80104C80(PlayState* play) { objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP); if (objBankIndex < 0) { D_801BEBB8.unk20 |= 1; - return; } - do { - - } while (!Object_IsLoaded(&play->objectCtx, objBankIndex)); + else + { + do { } while (!Object_IsLoaded(&play->objectCtx, objBankIndex)); + } + if (&play->objectCtx) {} } -#else -void func_80104C80(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80104C80.s") -#endif void func_80104CF4(PlayState* play) { s32 i; @@ -894,7 +925,64 @@ void func_80105C40(s16 arg0) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105C40.s") #endif +#ifdef NON_MATCHING +//https://decomp.me/scratch/WiRnZ +void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { + MinimapEntry* sp6C; + s32 sp68; + s32 sp64; + s32 sp60; + s32 sp5C; + s32 sp58; + s32 sp54; + s32 var_v0; + f32 sp4C; + s32 sp48; + + sp6C = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + if (sp6C->unk0 != 0xFFFF) { + 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; + } else if (D_801BEBB8.unk0->unk4 == -1) { + func_801030B4(sp6C, &sp48); + var_v0 = sp48; + } + sp4C = (1.0f / var_v0); + if (func_801039EC(play) == 0) { + 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 { + 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; + } + if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) { + OPEN_DISPS(play->state.gfxCtx); + func_8012C8D4(play->state.gfxCtx); + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + 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) { + rot += 0x7FFF; + } + Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY); + Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0xFF, 200, 0, 0, play->interfaceCtx.minimapAlpha); + gSPDisplayList(OVERLAY_DISP++, D_0401ED00); + CLOSE_DISPS(play->state.gfxCtx); + } + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105FE0.s") +#endif s32 func_80106408(PlayState* play) { if ((gSaveContext.save.entranceIndex == 0x6400) && (Cutscene_GetSceneSetupIndex(play) != 0)) { @@ -918,7 +1006,12 @@ s32 func_801064CC(PlayState* play) { return false; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106530.s") +s32 func_80106530(PlayState* play) { + if ((func_801064CC(play) == true) || !func_80106450(play)) { + return true; + } + return false; +} s32 func_8010657C(s32 arg0, s32 arg1) { MinimapEntry* temp_v1; @@ -1069,9 +1162,37 @@ s32 func_801068FC(s32 arg0, s32 arg1) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801068FC.s") #endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106BEC.s") +s32 func_80106BEC(s32 arg0, f32 arg1) { + if (arg0 == 0) { + if ((D_801BEBB8.unk48[0] <= arg1) && ((D_801BEBB8.unk40 == 1) || (arg1 < D_801BEBB8.unk48[1]))) { + return 1; + } + } + else if (arg0 >= (D_801BEBB8.unk40 - 1)) { + if (D_801BEBB8.unk48[D_801BEBB8.unk40-1] <= arg1) { + return 1; + } + } + else if ((D_801BEBB8.unk48[arg0] <= arg1) && (arg1 < D_801BEBB8.unk48[arg0+1])) { + return 1; + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106D08.s") +s32 func_80106D08(s32 arg0) { + switch (arg0) { + case 0x1F: + return 0x1B; + case 0x44: + return 0x21; + case 0x5F: + return 0x49; + case 0x36: + return 0x16; + default: + return arg0; + } +} #define COLOR16(r, g, b, a) (s16) \ ( ((s32) (((r) * 31.0f) / 255.0f) << 11) \ @@ -1205,15 +1326,108 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108558.s") +u32 func_80108A10(s32); // returns TIMG for func_80108AF8 #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108A10.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108A64.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108AF8.s") +//https://decomp.me/scratch/4gO7Z +void func_80108AF8(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + s32 temp_a0_2; + s32 temp_a2_2; + s16 a3; + s16 a2; + s32 pad; + s32 var_s1; + s32 spB4 = 0; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801090B0.s") + if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (func_80108A64(play) == 0)) { + if (Map_IsInBossArea(play) != 0) { + switch (play->sceneNum) { + case 0x1F: + spB4 = 0; + break; + case 0x44: + spB4 = 1; + break; + case 0x5F: + spB4 = 2; + break; + case 0x36: + spB4 = 3; + break; + } + } else { + spB4 = gSaveContext.mapIndex; + } + OPEN_DISPS(play->state.gfxCtx); + func_8012C628(play->state.gfxCtx); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80109124.s") + for (var_s1 = 0; var_s1 < D_801BEBB8.unk40; var_s1++) { + if ((gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].unk_14 & gBitFlags[4 - var_s1]) + || CHECK_DUNGEON_ITEM2(2, spB4)) { + gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b, + 24, 16, 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(POLY_OPA_DISP++, 0x0144, (125 - var_s1 * 15) << 2, 0x01A4, ((125 - var_s1 * 15) + 16) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } + } + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 255, pauseCtx->alpha); + gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10((D_801BEBB8.unk44 - pauseCtx->unk_256) + 8), G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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); + + a3 = 80; + a2 = 106; + temp_a0_2 = (5 + (pauseCtx->unk_256 * 0xF)); + temp_a2_2 = temp_a0_2 + 0x10; + if ((pauseCtx->unk_258 == 0) && (pauseCtx->unk_242[1] == 0)) { + a2++; + a3--; + temp_a2_2 += 4; + temp_a0_2 -= 4; + gSPTextureRectangle(POLY_OPA_DISP++, a3 << 2, (temp_a0_2) << 2, a2 << 2, (temp_a2_2) << 2, G_TX_RENDERTILE, 0, 0, 0x036E, 0x02AA); + } else { + gSPTextureRectangle(POLY_OPA_DISP++, (a3 + 1) << 2, temp_a0_2 << 2, (a2 - 1) << 2, temp_a2_2 << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } + func_8012C8AC(play->state.gfxCtx); + CLOSE_DISPS(play->state.gfxCtx); + } +} + +s32 func_801090B0(s32 arg0) { + if ((D_801BEBB8.unk0 == NULL) || (D_801BEC1C == 0)) { + return false; + } + if ((arg0 < 0) || (arg0 >= 6)) { + return false; + } + if (D_801BEBB8.unk48[arg0] != -0x7FFF) { + return true; + } + return false; +} + +s32 func_80109124(s16 arg0) { + s32 i; + + if ((D_801BEBB8.unk0 == NULL) || (D_801BEC1C == 0)) { + return -1; + } + if (D_801BEBB8.unk40 < 2) { + return 0; + } + if ((D_801BEBB8.unk48[1] - 5) >= arg0) { + return 0; + } + for (i = 1; i < D_801BEBB8.unk40; i++) { + if (((D_801BEBB8.unk48[i] - 5) < arg0) && ((D_801BEBB8.unk48[i + 1] - 5) >= arg0)) { + return i; + } + } + return D_801BEBB8.unk40 - 1; +} #ifdef NON_MATCHING void func_801091F0(PlayState* play) { From e71c8e62d1f3e06b68794220ece59449bfd7dda8 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 11 Aug 2022 04:20:37 -0400 Subject: [PATCH 12/28] All functions attempted --- include/z64map.h | 5 - src/code/z_map_disp.c | 358 +++++++++++++++++++++++++++++++------ tools/disasm/variables.txt | 17 +- 3 files changed, 314 insertions(+), 66 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index 2dd7ef90c..e995a49b9 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -40,11 +40,6 @@ typedef struct { /* z_map_disp */ -typedef struct { - /* 0x00 */ UNK_TYPE1 unk0[8]; - /* 0x08 */ s32 unk8; // G_IM_SIZ -} T_801BEAE0; - typedef struct { /* 0x00 */ MinimapList2* unk0; //unk0 -> sub1 -> s16[5] /* 0x04 */ s32 unk4; diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 8ed6821bd..5a7ea81f2 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -19,12 +19,13 @@ s16 func_80109F78(s32); void func_80109D40(s32, s32*, s32*, void*); void func_80109DD8(s32, s32*, s32*); -extern s32 D_801BEAD8; // G_IM_SIZ -extern T_801BEAE0 D_801BEAE0; -extern u32 D_801BEAF8; // siz_INCR -extern s32 D_801BEB08; // siz_SHIFT -extern u32 D_801BEB18; // siz_BYTES -extern u32 D_801BEB28; // siz_LINE_BYTES +extern s32 D_801BEAD0[4]; //G_IM_SIZ +extern s32 D_801BEAE0[4]; // siz_LOAD_BLOCK +extern u32 D_801BEAF0[4]; // siz_INCR +extern s32 D_801BEB00[4]; // siz_SHIFT +extern u32 D_801BEB10[4]; // siz_BYTES +extern u32 D_801BEB20[4]; // siz_LINE_BYTES + extern TexturePtr D_801BEB38; extern T_801BEBB8 D_801BEBB8; extern s16 D_801BEBF8; // D_801BEBB8.unk40 @@ -41,6 +42,8 @@ extern T_801BEC70 D_801BEC70; extern u16 D_801BEC84[0x10]; //palette 0 extern u16 D_801BECA4[0x10]; //palette 1 extern u16 D_801BECC4[0x10]; //palette 2 +extern TexturePtr D_801BECE4[6]; +extern TexturePtr D_801BED00[9]; extern T_801BED24 D_801BED24[2]; extern MinimapEntry D_801F5130[0x50]; @@ -50,8 +53,10 @@ extern T_801F56B0 D_801F56B0; extern TexturePtr D_801F57B4[32]; //unconfirmed length extern s32 D_801F5834; +extern TexturePtr D_02002460; extern TexturePtr D_02003F20; extern Gfx D_0401ED00[]; +extern TexturePtr D_0C000000; void func_80102E40(s32 arg0, s32 arg1) { if (func_80109A98(arg1) != 0) { @@ -319,7 +324,7 @@ void func_80103A58(PlayState *play, Actor *actor) { gDPPipeSync(OVERLAY_DISP++); gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, - D_801BEAE0.unk8, D_801BEAF8, D_801BEB08, D_801BEB18, D_801BEB28, D_801BEAD8, 8, 8, 0, + D_801BEAE0[2], D_801BEAF0[2], D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 8, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, @@ -640,8 +645,9 @@ s16 func_80105318(void) { return D_801BEC10; } -s32 func_80105328(s32 arg0) { - if (((((u16)arg0) >> 7) & 7) == 5) { +// TransitionActor params test +s32 func_80105328(s32 params) { + if (((((u16)params) >> 7) & 7) == 5) { return 1; } return 0; @@ -650,31 +656,23 @@ s32 func_80105328(s32 arg0) { #ifdef NON_MATCHING // https://decomp.me/scratch/F3QhH void func_8010534C(PlayState* play) { + DoorContext* doorCtx; TransitionActorEntry* var_s0; - s16 temp_a0; - s16 temp_a2; - s16 temp_v0; s32 var_v0; - s32 var_v1; - s16* temp_v1; s32 var_s2; - for (var_s2 = 0; var_s2 < D_801BEC24.numTransitionActors; var_s2++) { - var_s0 = &D_801F53B0[var_s2]; - if (func_80105328(var_s0->params) != 0) { - if (var_s0->id < 0) { - var_v1 = -var_s0->id; - } - else { - var_v1 = var_s0->id; - } - if (var_v1 != 0x18) { + doorCtx = &D_801BEC24; + + for (var_s2 = 0; var_s2 < doorCtx->numTransitionActors; var_s2++) { + if (func_80105328(D_801F53B0[var_s2].params) != 0) { + if (ABS_ALT(D_801F53B0[var_s2].id) != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { - if (((var_v0 == D_801BEBB8.unk40 - 1) && (var_s0->pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) + if ( + ( (var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) ) || ( (var_v0 != D_801BEBB8.unk40 - 1) && - (var_s0->pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && - (var_s0->pos.y < (D_801BEBB8.unk48[var_v0+1] - 5)) + (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && + (D_801F53B0[var_s2].pos.y < (D_801BEBB8.unk48[var_v0+1] - 5)) )) { D_801BEBB8.unk58 = var_v0; return; @@ -1179,18 +1177,18 @@ s32 func_80106BEC(s32 arg0, f32 arg1) { return 0; } -s32 func_80106D08(s32 arg0) { - switch (arg0) { - case 0x1F: - return 0x1B; - case 0x44: - return 0x21; - case 0x5F: - return 0x49; - case 0x36: - return 0x16; +s32 func_80106D08(s32 sceneNum) { + switch (sceneNum) { + case SCENE_MITURIN_BS: + return SCENE_MITURIN; + case SCENE_HAKUGIN_BS: + return SCENE_HAKUGIN; + case SCENE_SEA_BS: + return SCENE_SEA; + case SCENE_INISIE_BS: + return SCENE_INISIE_N; default: - return arg0; + return sceneNum; } } @@ -1320,16 +1318,276 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106D5C.s") #endif +#ifdef NON_MATCHING +// https://decomp.me/scratch/dKnQx +void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { + s32 sp3C; + MinimapEntry* sp38; + GraphicsContext* temp_s1; + MinimapChest* var_s0; + s32 temp_ft0; + s32 temp_ft0_2; + s32 var_s3; + s32 var_v1; + s32 var_v1_2; + + //temp_t0 = ; + if (D_801BEBB8.unk54 != NULL) { + // temp_s1 = arg0->state.gfxCtx; + OPEN_DISPS(arg0->state.gfxCtx); + // temp_v1 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1 + 8; + // temp_v1->words.w1 = 0x00000000; + // temp_v1->words.w0 = 0xE7000000; + + // temp_v1_2 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_2 + 8; + // temp_v1_2->words.w1 = 0x00000000; + // temp_v1_2->words.w0 = 0xE3001001; + + // temp_v1_3 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_3 + 8; + // temp_v1_3->words.w0 = 0xFA000000; + // temp_v1_3->words.w1 = (arg0->pauseCtx.alpha & 0xFF) | ~0xFF; + + // temp_v1_4 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_4 + 8; + // temp_v1_4->words.w1 = 0x000000FF; + // temp_v1_4->words.w0 = 0xFB000000; + + // temp_v1_5 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_5 + 8; + // temp_v1_5->words.w1 = 0x00000000; + // temp_v1_5->words.w0 = 0xE7000000; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, arg0->pauseCtx.alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); + + // temp_v1_6 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_6 + 8; + // temp_v1_6->words.w1 = (u32) &D_02003F20; + // temp_v1_6->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xFD000000; + + // temp_v1_7 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_7 + 8; + // var_a0 = 0x7FF; + // temp_v1_7->words.w1 = 0x07000000; + // temp_v1_7->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xF5000000; + + // temp_v1_8 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_8 + 8; + // temp_v1_8->words.w1 = 0x00000000; + // temp_v1_8->words.w0 = 0xE6000000; + + // temp_a1 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_a1 + 8; + // temp_a1->words.w0 = 0xF3000000; + // temp_v0 = ((u32) (D_801BEAF8 + 0x40) >> D_801BEB08) - 1; + // if (temp_v0 < 0x7FFU) { + // var_a0 = temp_v0; + // } + // temp_v1_9 = (u32) (D_801BEB18 * 8) >> 3; + // var_a2 = temp_v1_9; + // if (temp_v1_9 == 0) { + // var_a2 = 1; + // } + // if (temp_v1_9 == 0) { + // var_v0 = 1; + // } else { + // var_v0 = temp_v1_9; + // } + // temp_a1->words.w1 = (((u32) (var_a2 + 0x7FF) / var_v0) & 0xFFF) | 0x07000000U | ((var_a0 & 0xFFF) << 0xC); + + // temp_v1_10 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_10 + 8; + // temp_v1_10->words.w1 = 0x00000000; + // temp_v1_10->words.w0 = 0xE7000000; + + // temp_v1_11 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_11 + 8; + // temp_v1_11->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) << 0x13); + // temp_v1_11->words.w1 = 0x00000000; + + // temp_v1_12 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_12 + 8; + // temp_v1_12->words.w0 = 0xF2000000; + // temp_v1_12->words.w1 = 0x0001C01C; + +// gDPSetTextureImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, 0x02003F20); +// gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); +// gDPLoadSync(POLY_OPA_DISP++); +// gDPLoadBlock(POLY_OPA_DISP++, G_TX_LOADTILE, 0, 0, 0, 0); +// gDPPipeSync(POLY_OPA_DISP++); +// gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); +// gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); + + gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, + D_801BEAE0[2], D_801BEAF0[2], D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); + + var_s3 = 0; + var_s0 = D_801BEBB8.unk54; + //if (D_801BEBB8.unk50 > 0) { + for (var_s3 = 0; var_s3 < D_801BEBB8.unk50; var_s3++) { + sp3C = var_s0[var_s3].unk0; + sp38 = &D_801BEBB8.unk0->entry[sp3C]; + switch (arg0->sceneNum) { + case SCENE_MITURIN_BS: + var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest & (1 << var_s0[var_s3].unk2); + break; + case SCENE_HAKUGIN_BS: + var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_HAKUGIN].chest & (1 << var_s0[var_s3].unk2); + break; + case SCENE_SEA_BS: + var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_SEA].chest & (1 << var_s0[var_s3].unk2); + break; + case SCENE_INISIE_BS: + var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest & (1 << var_s0[var_s3].unk2); + break; + default: + var_v1_2 = Flags_GetTreasure(arg0, (s32) var_s0[var_s3].unk2); + break; + } + if (( D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) || ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < (s32) D_801BEBB8.unk42) || (var_v1_2 != 0)) { + continue; + } else if (func_80106BEC((s32) D_801BEBB8.unk42, (f32) var_s0[var_s3].unk6) == 0) { + continue; + } else { + temp_ft0 = (s32) (((((f32) var_s0[var_s3].unk4 - (f32) D_801BEBB8.unk38) * arg5) - (f32) 4) + (f32) ((arg3 / 2) + arg1)); + temp_ft0_2 = (s32) (((((f32) var_s0[var_s3].unk8 - (f32) D_801BEBB8.unk3A) * arg5) - (f32) 4) + (f32) ((arg4 / 2) + arg2)); + // temp_v1_13 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_13 + 8; + // temp_v1_13->words.w1 = (((temp_ft0 * 4) & 0xFFF) << 0xC) | ((temp_ft0_2 * 4) & 0xFFF); + // temp_v1_13->words.w0 = ((((temp_ft0 + 8) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_ft0_2 + 8) * 4) & 0xFFF); + // temp_v1_14 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_14 + 8; + // temp_v1_14->words.w1 = 0; + // temp_v1_14->words.w0 = 0xE1000000; + // temp_v1_15 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_15 + 8; + // temp_v1_15->words.w1 = 0x04000400; + // temp_v1_15->words.w0 = 0xF1000000; + + gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } + } + CLOSE_DISPS(arg0->state.gfxCtx); + } +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80107B78.s") +#endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108124.s") +void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { + PauseContext* pauseCtx = &play->pauseCtx; + DoorContext* sp48 = &D_801BEC24; + TransitionActorEntry* var_s1; + s32 tempX; + s32 tempY; + s32 i; + s8 roomA; + s8 roomB; + if (sp48->numTransitionActors != 0) { + OPEN_DISPS(play->state.gfxCtx); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); + for (i = 0; i < sp48->numTransitionActors; i++) { + if (func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) { + if ((ABS_ALT(D_801F53B0[i].id) != ACTOR_EN_HOLL) + && (func_80105328(D_801F53B0[i].params) == 0)){ + roomA = D_801F53B0[i].sides[0].room; + roomB = D_801F53B0[i].sides[1].room; + if (CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) + || (roomA < 0) + || (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].rooms & (1 << roomA)) + || (roomB < 0) + || (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].rooms & (1 << roomB))) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + + tempX = ((f32) D_801F53B0[i].pos.x - D_801BEBB8.unk38) * arg5 + ((arg3 / 2) + arg1); + tempY = ((f32) D_801F53B0[i].pos.z - D_801BEBB8.unk3A) * arg5 + ((arg4 / 2) + arg2); + gSPTextureRectangle(POLY_OPA_DISP++, ((tempX - 1) << 2), ((tempY - 1) << 2), ((tempX + 1) << 2), ((tempY + 1) << 2), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } + } + } + } + CLOSE_DISPS(play->state.gfxCtx); + } +} + +#ifdef NON_MATCHING +// https://decomp.me/scratch/nHYgx +void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { + DoorContext* sp30; + //TransitionActorEntry* var_s0; + s32 temp_ft0; + s32 temp_ft0_2; + s32 var_s2; + + sp30 = &D_801BEC24; + OPEN_DISPS(arg0->state.gfxCtx); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, arg0->pauseCtx.alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); + if (CHECK_DUNGEON_ITEM(1, arg6)) { + gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, &D_02002460, G_IM_FMT_IA, + D_801BEAE0[1], D_801BEAF0[1], D_801BEB00[1], D_801BEB10[1],D_801BEB20[1], D_801BEAD0[1], 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); + for (var_s2 = 0; var_s2 < sp30->numTransitionActors; var_s2++) { + if ((func_80105328((s32) D_801F53B0[var_s2].params) != 0) && (func_80106BEC((s32) D_801BEBB8.unk42, (f32) D_801F53B0[var_s2].pos.y) != 0)) { + if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) { + temp_ft0 = ((((f32) D_801F53B0[var_s2].pos.x - D_801BEBB8.unk38) * arg5) - 4) + ((arg3 / 2) + arg1); + temp_ft0_2 = ((((f32) D_801F53B0[var_s2].pos.z - D_801BEBB8.unk3A) * arg5) - 4) + ((arg4 / 2) + arg2); + gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } + } + } + } + CLOSE_DISPS(arg0->state.gfxCtx); +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108558.s") +#endif -u32 func_80108A10(s32); // returns TIMG for func_80108AF8 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108A10.s") +TexturePtr func_80108A10(s32 arg0) { + if ((arg0 >= 0) && (arg0 < 8)) { + return D_801BECE4[arg0]; + } + if ((arg0 >= -8) && (arg0 < 0)) { + return D_801BED00[-arg0]; + } + return &D_0C000000; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108A64.s") +s32 func_80108A64(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + + if (pauseCtx->pageIndex != 1) { + return 1; + } + if ((pauseCtx->state == 7) || (( pauseCtx->state >= 8) && (pauseCtx->state < 0x13))) { + return 1; + } + if ((pauseCtx->state != 6) || (pauseCtx->unk_200 != 0)) { + return 1; + } + if (pauseCtx->alpha == 0) { + return 1; + } + return 0; +} //https://decomp.me/scratch/4gO7Z void func_80108AF8(PlayState* play) { @@ -1345,16 +1603,16 @@ void func_80108AF8(PlayState* play) { if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (func_80108A64(play) == 0)) { if (Map_IsInBossArea(play) != 0) { switch (play->sceneNum) { - case 0x1F: + case SCENE_MITURIN_BS: spB4 = 0; break; - case 0x44: + case SCENE_HAKUGIN_BS: spB4 = 1; break; - case 0x5F: + case SCENE_SEA_BS: spB4 = 2; break; - case 0x36: + case SCENE_INISIE_BS: spB4 = 3; break; } @@ -1445,16 +1703,16 @@ void func_801091F0(PlayState* play) { if (func_80108A64(play) == 0) { if (Map_IsInBossArea(play) != 0) { switch (play->sceneNum) { - case 0x1F: + case SCENE_MITURIN_BS: sp44 = 0; break; - case 0x44: + case SCENE_HAKUGIN_BS: sp44 = 1; break; - case 0x5F: + case SCENE_SEA_BS: sp44 = 2; break; - case 0x36: + case SCENE_INISIE_BS: sp44 = 3; break; } diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 0fcb25ef8..6ad292573 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1006,17 +1006,12 @@ 0x801BEA70:("HeartDDTextures","UNK_TYPE1","",0x1), 0x801BEAB0:("posBindFuncs","LightsPosBindFunc","[3]",0xc), 0x801BEABC:("dirBindFuncs","LightsBindFunc","[3]",0xc), - 0x801BEAD4:("D_801BEAD4","UNK_TYPE4","",0x4), - 0x801BEAD8:("D_801BEAD8","UNK_TYPE4","",0x4), - 0x801BEAE0:("D_801BEAE0","UNK_TYPE1","",0x1), - 0x801BEAF4:("D_801BEAF4","UNK_TYPE4","",0x4), - 0x801BEAF8:("D_801BEAF8","UNK_TYPE4","",0x4), - 0x801BEB04:("D_801BEB04","UNK_TYPE4","",0x4), - 0x801BEB08:("D_801BEB08","UNK_TYPE4","",0x4), - 0x801BEB14:("D_801BEB14","UNK_TYPE4","",0x4), - 0x801BEB18:("D_801BEB18","UNK_TYPE4","",0x4), - 0x801BEB24:("D_801BEB24","UNK_TYPE4","",0x4), - 0x801BEB28:("D_801BEB28","UNK_TYPE4","",0x4), + 0x801BEAD0:("D_801BEAD0","s32","[4]",0x10), + 0x801BEAE0:("D_801BEAE0","s32","[4]",0x10), + 0x801BEAF0:("D_801BEAF0","u32","[4]",0x10), + 0x801BEB00:("D_801BEB00","s32","[4]",0x10), + 0x801BEB10:("D_801BEB10","u32","[4]",0x10), + 0x801BEB20:("D_801BEB20","u32","[4]",0x10), 0x801BEB38:("D_801BEB38","UNK_TYPE1","",0x1), 0x801BEBB8:("D_801BEBB8","UNK_TYPE4","",0x4), 0x801BEBD8:("D_801BEBD8","UNK_TYPE4","",0x4), From 30b83c17d7ee02458a6df080c9c438feba58b1a4 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 11 Aug 2022 17:33:53 -0400 Subject: [PATCH 13/28] func_8010534C OK --- src/code/z_map_disp.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 5a7ea81f2..37abfefb3 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -653,8 +653,6 @@ s32 func_80105328(s32 params) { return 0; } -#ifdef NON_MATCHING -// https://decomp.me/scratch/F3QhH void func_8010534C(PlayState* play) { DoorContext* doorCtx; TransitionActorEntry* var_s0; @@ -667,6 +665,7 @@ void func_8010534C(PlayState* play) { if (func_80105328(D_801F53B0[var_s2].params) != 0) { if (ABS_ALT(D_801F53B0[var_s2].id) != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { + s32 temp = (D_801BEBB8.unk48[var_v0] - 5); // needed for matching if ( ( (var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) ) || ( @@ -683,10 +682,6 @@ void func_8010534C(PlayState* play) { } D_801BEBB8.unk58 = 0; } -#else -void func_8010534C(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_8010534C.s") -#endif #ifdef NON_MATCHING void func_8010549C(PlayState* globalCtx, void* segmentAddress) { From 64bced7853fe1362afb93d399a6d66831d525401 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Tue, 16 Aug 2022 21:13:19 -0400 Subject: [PATCH 14/28] Start documentation, rename DoorCtx --- include/functions.h | 12 +- include/z64.h | 2 +- include/z64map.h | 24 +- include/z64scene.h | 8 +- src/code/z_actor.c | 6 +- src/code/z_map_data.c | 25 +-- src/code/z_map_disp.c | 210 +++++++++--------- src/code/z_map_exp.c | 2 +- src/code/z_play.c | 2 +- src/code/z_scene.c | 12 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 10 +- .../actors/ovl_Door_Spiral/z_door_spiral.c | 6 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 4 +- src/overlays/actors/ovl_En_Holl/z_en_holl.c | 12 +- tools/disasm/functions.txt | 14 +- tools/disasm/variables.txt | 16 +- 17 files changed, 170 insertions(+), 197 deletions(-) diff --git a/include/functions.h b/include/functions.h index dbdc6c819..152b52245 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1675,7 +1675,7 @@ s32 func_80102EF0(PlayState* play); // void func_801045AC(void); // void func_80104AE8(void); // void func_80104C80(void); -void func_80104CF4(PlayState* play); +void MapDisp_Init(PlayState* play); // void func_80104F34(void); s32 func_80105294(void); s16 func_80105318(void); @@ -1684,7 +1684,7 @@ s16 func_80105318(void); void func_8010549C(PlayState* play, void* segmentAddress); void func_8010565C(PlayState* play, s32 num, void* segmentAddress); void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList); -void func_80105A40(PlayState* play); +void MapDisp_Destroy(PlayState* play); void func_80105B34(PlayState* play); void func_80105C40(s16 arg0); // void func_80105FE0(void); @@ -1695,8 +1695,6 @@ s32 func_80106530(PlayState* play); // void func_8010657C(void); void func_80106644(PlayState* play, s32 x, s32 z, s32 rot); // void func_8010683C(void); -// void func_801068B4(void); -// void func_801068D8(void); // void func_801068FC(void); // void func_80106BEC(void); // void func_80106D08(void); @@ -1710,7 +1708,7 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot); // void func_801090B0(void); s32 func_80109124(s16 arg0); // void func_801091F0(void); -// void func_80109428(void); +void func_80109428(PlayState* play); void func_801094A0(s32 arg0, Color_RGBA8* color); // void func_801094C8(void); // void func_801094F8(void); @@ -1744,7 +1742,7 @@ void func_801094A0(s32 arg0, Color_RGBA8* color); // void func_80109BA0(void); // void func_80109BF4(void); // void func_80109C38(void); -// void func_80109CBC(void); +// void MapData_GetIMapSize(void); // void func_80109D40(void); // void func_80109DD8(void); // void func_80109E70(void); @@ -2166,7 +2164,7 @@ void Scene_HeaderCmdObjectList(PlayState* play, SceneCmd* cmd); void Scene_HeaderCmdLightList(PlayState* play, SceneCmd* cmd); void Scene_HeaderCmdPathList(PlayState* play, SceneCmd* cmd); void Scene_HeaderCmdTransiActorList(PlayState* play, SceneCmd* cmd); -void Door_InitContext(GameState* gameState, DoorContext* doorCtx); +void Scene_ResetTransiActorList(GameState* gameState, TransitionActorList* transitionActors); void Scene_HeaderCmdEnvLightSettings(PlayState* play, SceneCmd* cmd); void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex); void Scene_HeaderCmdSkyboxSettings(PlayState* play, SceneCmd* cmd); diff --git a/include/z64.h b/include/z64.h index 2405448fd..b8638e81c 100644 --- a/include/z64.h +++ b/include/z64.h @@ -1120,7 +1120,7 @@ struct PlayState { /* 0x17104 */ AnimationContext animationCtx; /* 0x17D88 */ ObjectContext objectCtx; /* 0x186E0 */ RoomContext roomCtx; - /* 0x18760 */ DoorContext doorCtx; + /* 0x18760 */ TransitionActorList transitionActors; /* 0x18768 */ void (*playerInit)(Player* player, struct PlayState* play, FlexSkeletonHeader* skelHeader); /* 0x1876C */ void (*playerUpdate)(Player* player, struct PlayState* play, Input* input); /* 0x18770 */ void (*unk_18770)(struct PlayState* play, Player* player); diff --git a/include/z64map.h b/include/z64map.h index e995a49b9..f263112c6 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -4,7 +4,6 @@ #include "z64scene.h" #define FLOOR_INDEX_MAX 4 -/* z_scene */ /* z_map_data */ typedef struct { @@ -18,16 +17,6 @@ typedef struct { /* 0x0A */ s16 unkA; } T_801BED4C; // size 0x0C? -typedef struct { - /* 0x00 */ u8 unk0; - /* 0x01 */ u8 unk1; - /* 0x02 */ s16 unk2; - /* 0x04 */ s16 unk4; - /* 0x06 */ u8 unk6; - /* 0x07 */ u8 unk7; - /* 0x08 */ s16 unk8; -} T_801BED88; // size 0x0A - typedef struct { u8 unk0; u8 unk1; @@ -42,13 +31,13 @@ typedef struct { typedef struct { /* 0x00 */ MinimapList2* unk0; //unk0 -> sub1 -> s16[5] - /* 0x04 */ s32 unk4; + /* 0x04 */ s32 curRoom; /* 0x08 */ s16 unk8; /* 0x0A */ s16 unkA; /* 0x0C */ s16 unkC; /* 0x0E */ s16 unkE; /* 0x10 */ TexturePtr unk10; // gameplay cur minimap room - /* 0x14 */ s32 unk14; //unk4 same type as unk14 + /* 0x14 */ s32 prevRoom; /* 0x18 */ TexturePtr unk18; /* 0x1C */ s16 unk1C; //same as 0C /* 0x1E */ s16 unk1E; //same as 0E @@ -68,7 +57,6 @@ typedef struct { /* 0x44 */ s16 unk44; /* 0x48 */ s16* unk48; /* 0x4C */ s16 unk4C; - /* 0x4E */ char unk4E[0x02]; /* 0x50 */ s32 unk50; //num chests /* 0x54 */ MinimapChest* unk54; /* 0x58 */ s16 unk58; @@ -91,10 +79,10 @@ typedef struct { } T_801BED24; // size 0x0C typedef struct { - /* 0x000 */ s32 unk0; + /* 0x000 */ s32 rooms; /* 0x004 */ s32 unk4[32]; - /* 0x084 */ s32 unk84[32]; - /* 0x104 */ s32 unk104[32]; + /* 0x084 */ void* unk84[32]; + /* 0x104 */ void* unk104[32]; /* 0x184 */ s32 unk184; } T_801F56B0; @@ -102,7 +90,7 @@ typedef struct { TexturePtr func_8010958C(s32); s32 func_80109714(s32); -s32 func_80109CBC(s32); +s32 MapData_GetIMapSize(s32); s32 func_80109A98(s32); s32 func_80109AD8(s32); s32 func_801096D4(s32 arg0); diff --git a/include/z64scene.h b/include/z64scene.h index 175ecc066..82ff9af4b 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -300,14 +300,14 @@ typedef struct { } TransitionActorEntry; // size = 0x10 typedef struct { - /* 0x00 */ u8 numTransitionActors; - /* 0x04 */ TransitionActorEntry* transitionActorList; -} DoorContext; + /* 0x00 */ u8 count; + /* 0x04 */ TransitionActorEntry* list; +} TransitionActorList; typedef struct { /* 0x00 */ u16 unk0; /* 0x02 */ s16 unk2; - /* 0x04 */ UNK_TYPE2 unk4; + /* 0x04 */ s16 unk4; /* 0x06 */ s16 unk6; /* 0x08 */ u16 unk8; } MinimapEntry; // size = 0xA diff --git a/src/code/z_actor.c b/src/code/z_actor.c index d792b276a..79bc911f6 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3260,9 +3260,9 @@ Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, PlayState* play } void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) { - TransitionActorEntry* transitionActorList = play->doorCtx.transitionActorList; + TransitionActorEntry* transitionActorList = play->transitionActors.list; s32 i; - s16 numTransitionActors = play->doorCtx.numTransitionActors; + s16 numTransitionActors = play->transitionActors.count; for (i = 0; i < numTransitionActors; transitionActorList++, i++) { if (transitionActorList->id >= 0) { @@ -3281,7 +3281,7 @@ void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) { transitionActorList->rotY & 0x7F, 0x3FF, 0) != NULL) { transitionActorList->id = -transitionActorList->id; } - numTransitionActors = play->doorCtx.numTransitionActors; + numTransitionActors = play->transitionActors.count; } } } diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index b2693ef23..11b0a0130 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -1,19 +1,17 @@ #include "global.h" #include "z64map.h" -extern T_801BED4C D_801BED4C[]; -extern T_801BED88 D_801BED88[]; -extern s32 D_801BF15C[5]; - -extern T_801BF170 D_801BF170[]; - -extern Color_RGBA8 D_801BED40[]; - -extern s32 D_801BF3B4[]; -extern s32 D_801BEFC8[]; +extern Color_RGBA8 D_801BED40[]; +extern T_801BED4C D_801BED4C[]; +extern T_801BF170 D_801BED88[]; +extern s32 D_801BEFC8[]; +extern s32 D_801BF15C[5]; +extern T_801BF170 D_801BF170[]; +extern s32 D_801BF3B4[]; s32 func_80109A98(s32); +// Get ? Color void func_801094A0(s32 arg0, Color_RGBA8* color) { *color = D_801BED40[arg0]; } @@ -149,6 +147,7 @@ void func_801098A0(s32 arg0, s32* arg1) { } } +//return some color index? u8 func_80109908(s32 arg0) { switch (func_80109714(arg0)) { case 0: @@ -270,7 +269,7 @@ s32 func_80109C38(s32 arg0) { } } -s32 func_80109CBC(s32 arg0) { +s32 MapData_GetIMapSize(s32 arg0) { if (arg0 == -1) { return 0; } @@ -299,8 +298,8 @@ void func_80109D40(s32 arg0, s32* arg1, s32* arg2) { case 1: func_8010997C(arg0, arg1, arg2); return; - default: case 2: + default: *arg2 = 0; *arg1 = 0; return; @@ -322,8 +321,8 @@ void func_80109DD8(s32 arg0, s32* arg1, s32* arg2) { case 1: func_801099AC(arg0, arg1, arg2); return; - default: case 2: + default: *arg2 = 0; *arg1 = 0; return; diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 37abfefb3..1f9faab6e 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,7 +1,7 @@ #include "global.h" -void func_801068D8(PlayState* play); -void func_801068B4(PlayState* play); +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); @@ -19,7 +19,7 @@ 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_801BEAD0[4]; // G_IM_SIZ extern s32 D_801BEAE0[4]; // siz_LOAD_BLOCK extern u32 D_801BEAF0[4]; // siz_INCR extern s32 D_801BEB00[4]; // siz_SHIFT @@ -28,15 +28,13 @@ extern u32 D_801BEB20[4]; // siz_LINE_BYTES extern TexturePtr D_801BEB38; extern T_801BEBB8 D_801BEBB8; -extern s16 D_801BEBF8; // D_801BEBB8.unk40 extern s16 D_801BEBFA; // D_801BEBB8.unk42 -extern s16 D_801BEBFC; // D_801BEBB8.unk44 -extern s16 D_801BEC10; + extern MinimapList D_801BEC14; //D_801F5130 extern s32 D_801BEC1C; //current scene's no. of rooms extern s32 D_801BEC20; //MinimapChest count -extern DoorContext D_801BEC24; -extern Color_RGBA8 D_801BEC2C[]; // cat colors +extern TransitionActorList D_801BEC24; +extern Color_RGBA8 D_801BEC2C[12]; // cat colors extern T_801BEC5C D_801BEC5C[5]; extern T_801BEC70 D_801BEC70; extern u16 D_801BEC84[0x10]; //palette 0 @@ -50,8 +48,6 @@ extern MinimapEntry D_801F5130[0x50]; extern MinimapChest D_801F5270[32]; extern TransitionActorEntry D_801F53B0[48]; extern T_801F56B0 D_801F56B0; -extern TexturePtr D_801F57B4[32]; //unconfirmed length -extern s32 D_801F5834; extern TexturePtr D_02002460; extern TexturePtr D_02003F20; @@ -82,23 +78,23 @@ void func_80102ED0(u32 param_1) { s32 func_80102EF0(PlayState* play) { MinimapEntry* entry; - s8 temp_v1; + s8 curRoom; - if (Map_IsInBossArea(play) == 1) { - return 1; + if (Map_IsInBossArea(play) == true) { + return true; } - temp_v1 = play->roomCtx.currRoom.num; - if (temp_v1 == -1) { - return 0; + curRoom = play->roomCtx.currRoom.num; + if (curRoom == -1) { + return false; } - entry = &D_801BEBB8.unk0->entry[temp_v1]; + entry = &D_801BEBB8.unk0->entry[curRoom]; if (entry->unk0 == 0xFFFF) { - return 0; + return false; } if (func_80109AD8(entry->unk0) == 0x3A) { - return 0; + return false; } - return 1; + return true; } f32 func_80102F9C(f32 arg0) { @@ -269,7 +265,7 @@ void func_80103A58(PlayState *play, Actor *actor) { s32 spAC; //GraphicsContext *spA8; - spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; spB4 = GET_PLAYER(play); if (spDC->unk0 != 0xFFFF) { func_801030F4(spDC, &spD0, &spCC); @@ -392,7 +388,7 @@ void func_8010439C(PlayState *play) { && (actor->init == NULL) && (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) && ((actor->id == ACTOR_EN_BOX) || (i == ACTORCAT_PLAYER) || (actor->flags & ACTOR_FLAG_80000000)) - && ((D_801BEBB8.unk4 == actor->room) || (actor->room == -1))) { + && ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { func_80103A58(play, actor); } actor = actor->next; @@ -423,7 +419,7 @@ void func_801045AC(PlayState* play, Actor* actor) { if (sp50 < 0) { sp50 = 0.0f; } - sp7C = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + sp7C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; if (sp7C->unk0 != 0xFFFF) { func_801030F4(sp7C, &sp70, &sp6C); func_80103090(sp7C, &sp68, &sp64); @@ -487,7 +483,7 @@ void func_80104AE8(PlayState *play) { (actor->update != NULL) && (actor->init == NULL) && Object_IsLoaded(&play->objectCtx, actor->objBankIndex) - && ((D_801BEBB8.unk4 == actor->room) || (actor->room == -1))) { + && ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { func_801045AC(play, actor); } actor = actor->next; @@ -513,34 +509,35 @@ void func_80104C80(PlayState* play) { if (&play->objectCtx) {} } -void func_80104CF4(PlayState* play) { +//init +void MapDisp_Init(PlayState* play) { s32 i; D_801BEBB8.unk0 = NULL; - D_801BEBB8.unk4 = -1; + D_801BEBB8.curRoom = -1; D_801BEBB8.unk8 = 0xD2; D_801BEBB8.unkA = 0x8C; D_801BEBB8.unkC = 0xD2; D_801BEBB8.unkE = 0x8C; D_801BEBB8.unk10 = NULL; - D_801BEBB8.unk14 = -1; + D_801BEBB8.prevRoom = -1; D_801BEBB8.unk18 = NULL; D_801BEBB8.unk1C = 0; D_801BEBB8.unk1E = 0; D_801BEBB8.unk20 = 0; D_801BEBB8.unk24 = 0; - if (Map_IsInBossArea(play) == 0) { + if (!Map_IsInBossArea(play)) { D_801BEC1C = play->numRooms; } D_801BEBB8.unk28 = THA_AllocEndAlign16(&play->state.heap, 0x4000); D_801BEBB8.unk2C = THA_AllocEndAlign16(&play->state.heap, 0x4000); func_80104C80(play); - if (Map_IsInBossArea(play) == 0) { - D_801BEBB8.unk34 = 0x64; + if (!Map_IsInBossArea(play)) { D_801BEBB8.unk30 = 0; - D_801BEBB8.unk36 = 0x64; D_801BEBB8.unk32 = 0; + D_801BEBB8.unk34 = 0x64; + D_801BEBB8.unk36 = 0x64; D_801BEBB8.unk38 = (s16) (s32) ((f32) D_801BEBB8.unk30 + ((f32) D_801BEBB8.unk34 * 0.5f)); D_801BEBB8.unk3A = (s16) (s32) ((f32) D_801BEBB8.unk32 + ((f32) D_801BEBB8.unk36 * 0.5f)); } @@ -555,7 +552,7 @@ void func_80104CF4(PlayState* play) { { D_801BEBB8.unk48[i] = -0x7FFF; } - func_801068B4(play); + MapDisp_InitIMap(play); D_801BEBB8.unk58 = 0; D_801BEBB8.unk5A = 0; if (Map_IsInBossArea(play) != 0) { @@ -642,7 +639,7 @@ s32 func_80105294(void) { } s16 func_80105318(void) { - return D_801BEC10; + return D_801BEBB8.unk58; } // TransitionActor params test @@ -654,14 +651,14 @@ s32 func_80105328(s32 params) { } void func_8010534C(PlayState* play) { - DoorContext* doorCtx; + TransitionActorList* transitionActors; TransitionActorEntry* var_s0; s32 var_v0; s32 var_s2; - doorCtx = &D_801BEC24; + transitionActors = &D_801BEC24; - for (var_s2 = 0; var_s2 < doorCtx->numTransitionActors; var_s2++) { + for (var_s2 = 0; var_s2 < transitionActors->count; var_s2++) { if (func_80105328(D_801F53B0[var_s2].params) != 0) { if (ABS_ALT(D_801F53B0[var_s2].id) != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { @@ -737,24 +734,24 @@ void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionAct s32 i; if (Map_IsInBossArea(play) == 0) { - D_801BEC24.numTransitionActors = num; + D_801BEC24.count = num; for (i = 0; i < num; i++) { D_801F53B0[i] = transitionActorList[i]; } - D_801BEC24.transitionActorList = D_801F53B0; + D_801BEC24.list = D_801F53B0; } } -void func_80105A40(PlayState* play) { +void MapDisp_Destroy(PlayState* play) { s32 i; D_801BEBB8.unk0 = NULL; - D_801BEBB8.unk4 = -1; + D_801BEBB8.curRoom = -1; D_801BEBB8.unkC = 0xD2; D_801BEBB8.unkE = 0x8C; D_801BEBB8.unk10 = NULL; - D_801BEBB8.unk14 = -1; + D_801BEBB8.prevRoom = -1; D_801BEBB8.unk18 = NULL; D_801BEBB8.unk1C = 0; D_801BEBB8.unk1E = 0; @@ -775,7 +772,7 @@ void func_80105A40(PlayState* play) { D_801BEBB8.unk48 = NULL; D_801BEBB8.unk50 = 0; D_801BEBB8.unk54 = NULL; - func_801068D8(play); + MapDisp_DestroyIMap(play); D_801BEBB8.unk5A = 0; } @@ -789,7 +786,7 @@ void func_80105B34(PlayState* play) { if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0)) { D_801BEBFA = 8 - play->pauseCtx.unk_256; - if (D_801BEBB8.unk14 != -1) { + if (D_801BEBB8.prevRoom != -1) { temp_v0 = D_801BEBB8.unk24; if (temp_v0 > 0) { temp_v1 = D_801BEBB8.unk8; @@ -805,7 +802,7 @@ void func_80105B34(PlayState* play) { D_801BEBB8.unk24 = temp_v0 - 1; return; } - D_801BEBB8.unk14 = -1; + D_801BEBB8.prevRoom = -1; D_801BEBB8.unk24 = 0; D_801BEBB8.unkC = D_801BEBB8.unk8; D_801BEBB8.unkE = D_801BEBB8.unkA; @@ -815,7 +812,6 @@ void func_80105B34(PlayState* play) { } } - #ifdef NON_MATCHING //https://decomp.me/scratch/oK0wd void func_80105C40(s16 arg0) { @@ -837,15 +833,15 @@ void func_80105C40(s16 arg0) { temp_s0 = &D_801BEBB8.unk0->entry[arg0]; if ( ( temp_s0->unk0 < 5) || (( temp_s0->unk0 >= 0x100) && ( temp_s0->unk0 < 0x162)) || temp_s0->unk0 == 0xFFFF) { - D_801BEBB8.unk14 = D_801BEBB8.unk4; - D_801BEBB8.unk4 = arg0; + D_801BEBB8.prevRoom = D_801BEBB8.curRoom; + D_801BEBB8.curRoom = arg0; D_801BEBB8.unk24 = 0x14; D_801BEBB8.unk18 = D_801BEBB8.unk10; sp54 = D_801BEBB8.unk8; sp50 = D_801BEBB8.unkA; - temp_s0 = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + temp_s0 = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; if (temp_s0->unk0 == 0xFFFF) { D_801BEBB8.unk1E = 0; @@ -861,8 +857,8 @@ void func_80105C40(s16 arg0) { func_80103090(temp_s0, &sp4C, &sp48); D_801BEBB8.unk8 = 0x127 - sp4C; D_801BEBB8.unkA = 0xDC - sp48; - if (D_801BEBB8.unk14 != -1) { - sp58 = &D_801BEBB8.unk0->entry[D_801BEBB8.unk14]; + if (D_801BEBB8.prevRoom != -1) { + sp58 = &D_801BEBB8.unk0->entry[D_801BEBB8.prevRoom]; if (sp58->unk0 == 0xFFFF) { D_801BEBB8.unk1E = 0; D_801BEBB8.unk10 = NULL; @@ -932,7 +928,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { f32 sp4C; s32 sp48; - sp6C = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4]; + sp6C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; if (sp6C->unk0 != 0xFFFF) { func_801030F4(sp6C, &sp60, &sp5C); func_80103090(sp6C, &sp58, &sp54); @@ -1033,9 +1029,9 @@ void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { //sp2C = ;// + 0x10000; 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.unk4, 1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)); - if ((D_801BEBB8.unk4 != D_801BEBB8.unk14) && (func_8010657C(D_801BEBB8.unk4, D_801BEBB8.unk14) != 0)) { - func_801031D0(play, D_801BEBB8.unk18, D_801BEBB8.unkC + D_801BEBB8.unk1C, D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.unk14, (f32) D_801BEBB8.unk24 * 0.05f); + func_801031D0(play, D_801BEBB8.unk10, D_801BEBB8.unkC, D_801BEBB8.unkE, D_801BEBB8.curRoom, 1.0f - ((f32) D_801BEBB8.unk24 * 0.05f)); + if ((D_801BEBB8.curRoom != D_801BEBB8.prevRoom) && (func_8010657C(D_801BEBB8.curRoom, D_801BEBB8.prevRoom) != 0)) { + func_801031D0(play, D_801BEBB8.unk18, D_801BEBB8.unkC + D_801BEBB8.unk1C, D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.prevRoom, (f32) D_801BEBB8.unk24 * 0.05f); } func_80104AE8(play); } @@ -1053,103 +1049,99 @@ void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106644.s") #endif -void func_8010683C(void) { +void MapDisp_ResetIMap(void) { s32 i; - D_801F56B0.unk0 = 0; + D_801F56B0.rooms = 0; for (i = 0; i < 32; i++) { D_801F56B0.unk4[i] = 0; - D_801F56B0.unk84[i] = 0; - D_801F56B0.unk104[i] = 0; + D_801F56B0.unk84[i] = NULL; + D_801F56B0.unk104[i] = NULL; } D_801F56B0.unk184 = 0; D_801BEBB8.unk20 &= ~1; } -void func_801068B4(PlayState* play) { - func_8010683C(); +void MapDisp_InitIMap(PlayState* play) { + MapDisp_ResetIMap(); } -void func_801068D8(PlayState* play) { - func_8010683C(); +void MapDisp_DestroyIMap(PlayState* play) { + MapDisp_ResetIMap(); } #ifdef NON_MATCHING -s32 func_801068FC(s32 arg0, s32 arg1) { - s32 sp3C; +//alloc pause screen dungeon map +void* func_801068FC(PlayState* play, void* heap) { + void* heapNext; //sp3C s32 temp_s2; s32 temp_v0; - s32 temp_v0_2; s32 var_s1; - s32 var_s1_2; - s32 var_s1_3; s32 var_s2; - s32 var_s3; s32 var_s4; - u16 temp_a0; - u16 temp_a0_2; + MinimapEntry* entry; + s32 var_s3; - sp3C = arg1; + heapNext = heap; if ((D_801BEBB8.unk0 == NULL) || (D_801BEC1C == 0)) { - return sp3C; + return heapNext; } - D_801F56B0.unk0 = 0; + D_801F56B0.rooms = 0; + //loop for number of rooms for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { var_s2 = 0; - temp_a0 = D_801BEBB8.unk0->entry[var_s4].unk0; - if (temp_a0 == 0xFFFF) { + entry = &D_801BEBB8.unk0->entry[var_s4]; + if (entry->unk0 == 0xFFFF) { continue; } else { - temp_v0 = func_80109BA0((s32) temp_a0); + temp_v0 = func_80109BA0(entry->unk0); if (temp_v0 == -1) { continue; } else { - for (var_s1 = 0; var_s1 < D_801F56B0.unk0; var_s1++) { + for (var_s1 = 0; var_s1 < D_801F56B0.rooms; var_s1++) { if (temp_v0 == D_801F56B0.unk4[var_s1]) { var_s2 = 1; break; } } if (var_s2 == 0) { - D_801F56B0.unk4[D_801F56B0.unk0] = temp_v0; - D_801F56B0.unk0 += 1; + D_801F56B0.unk4[D_801F56B0.rooms] = temp_v0; + D_801F56B0.rooms += 1; } } } } - for (var_s1_2 = 0; var_s1_2 < D_801F56B0.unk0; var_s1_2++) { - temp_s2 = D_801F56B0.unk4[var_s1_2]; - func_80102E40(D_801F56B0.unk84[var_s1_2], temp_s2); - if (var_s1_2 + 1 < D_801F56B0.unk0) { - D_801F56B0.unk84[var_s1_2 + 1] = (func_80109CBC(temp_s2) + D_801F56B0.unk84[var_s1_2] + 0xF) & ~0xF; + + 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); + 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 { - sp3C = func_80109CBC(temp_s2) + D_801F56B0.unk84[var_s1_2]; + heapNext = (intptr_t)D_801F56B0.unk84[var_s1] + MapData_GetIMapSize(temp_s2); } } for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { - var_s3 = 0; - temp_a0_2 = D_801BEBB8.unk0->entry[var_s4].unk0; - if (temp_a0_2 == 0xFFFF) { - D_801F56B0.unk104[var_s4] = 0; + entry = &D_801BEBB8.unk0->entry[var_s4]; + if (entry->unk0 == 0xFFFF) { + D_801F56B0.unk104[var_s4] = NULL; } else { - temp_v0_2 = func_80109BA0((s32) temp_a0_2); - for (var_s1_3 = 0; var_s1_3 < D_801F56B0.unk0; var_s1_3++) { - if (temp_v0_2 == D_801F56B0.unk4[var_s1_3]) { - var_s3 = 1; + var_s3 = false; + temp_v0 = func_80109BA0(entry->unk0); + for (var_s1 = 0; var_s1 < D_801F56B0.rooms; var_s1++) { + if (temp_v0 == D_801F56B0.unk4[var_s1]) { + var_s3 = true; break; } } - if (var_s3 == 0) { - D_801F56B0.unk104[var_s4] = 0; - } else { - D_801F56B0.unk104[var_s4] = D_801F56B0.unk84[var_s1_3]; - } + D_801F56B0.unk104[var_s4] = (!var_s3) ? NULL : D_801F56B0.unk84[var_s1]; } } - return sp3C; + return heapNext; } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801068FC.s") @@ -1206,8 +1198,8 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s32 temp1; s32 temp2; - temp1 = ((D_801F5834 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; - temp2 = ((D_801F5834 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; + temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; + temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; //COLOR16(0, ((D_801F5834 * -120.0f) / 40.0f) + 200.0f, ((D_801F5834 * 115.0f) / 40.0f) + 140.0f, 1); // ( @@ -1257,7 +1249,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 if ((sp108->unk0 != 0xFFFF) && (sp108->unk0 < 0x162)) { if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) && ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { - temp_s1 = D_801F57B4[var_s2]; + temp_s1 = D_801F56B0.unk104[var_s2]; if (temp_s1 != NULL) { spE8 = func_80109BA0(sp108->unk0); if (spE8 == -1) { @@ -1483,7 +1475,7 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { PauseContext* pauseCtx = &play->pauseCtx; - DoorContext* sp48 = &D_801BEC24; + TransitionActorList* transitionActors = &D_801BEC24; TransitionActorEntry* var_s1; s32 tempX; s32 tempY; @@ -1491,11 +1483,11 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s8 roomA; s8 roomB; - if (sp48->numTransitionActors != 0) { + if (transitionActors->count != 0) { OPEN_DISPS(play->state.gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); - for (i = 0; i < sp48->numTransitionActors; i++) { + for (i = 0; i < transitionActors->count; i++) { if (func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) { if ((ABS_ALT(D_801F53B0[i].id) != ACTOR_EN_HOLL) && (func_80105328(D_801F53B0[i].params) == 0)){ @@ -1522,7 +1514,7 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 #ifdef NON_MATCHING // https://decomp.me/scratch/nHYgx void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { - DoorContext* sp30; + TransitionActorList* sp30; //TransitionActorEntry* var_s0; s32 temp_ft0; s32 temp_ft0_2; @@ -1540,7 +1532,7 @@ void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, &D_02002460, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1], D_801BEB00[1], D_801BEB10[1],D_801BEB20[1], D_801BEAD0[1], 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); - for (var_s2 = 0; var_s2 < sp30->numTransitionActors; var_s2++) { + for (var_s2 = 0; var_s2 < sp30->count; var_s2++) { if ((func_80105328((s32) D_801F53B0[var_s2].params) != 0) && (func_80106BEC((s32) D_801BEBB8.unk42, (f32) D_801F53B0[var_s2].pos.y) != 0)) { if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) { temp_ft0 = ((((f32) D_801F53B0[var_s2].pos.x - D_801BEBB8.unk38) * arg5) - 4) + ((arg3 / 2) + arg1); @@ -1743,11 +1735,11 @@ void func_801091F0(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801091F0.s") #endif -void func_80109428(s32 arg0) { +void func_80109428(PlayState* play) { D_801BEBB8.unk4C++; if (!(D_801BEBB8.unk20 & 1)) { D_801F56B0.unk184++; - if (D_801F56B0.unk184 >= 0x29) { + if (D_801F56B0.unk184 > 40) { D_801BEBB8.unk20 |= 1; } } else { diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index d681f2e95..5126682be 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -170,7 +170,7 @@ void Map_InitRoomData(PlayState* play, s16 room) { } void Map_Destroy(PlayState* play) { - func_80105A40(play); + MapDisp_Destroy(play); } void Map_Init(PlayState* play) { diff --git a/src/code/z_play.c b/src/code/z_play.c index 6d90048f5..9e081e454 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -276,7 +276,7 @@ s32 func_8016A02C(GameState* thisx, Actor* actor, s16* yaw) { return false; } - transitionActor = &this->doorCtx.transitionActorList[(u16)actor->params >> 10]; + transitionActor = &this->transitionActors.list[(u16)actor->params >> 10]; frontRoom = transitionActor->sides[0].room; if (frontRoom == transitionActor->sides[1].room) { return false; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index cf40d6049..a0c2a51dc 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -318,14 +318,14 @@ void Scene_HeaderCmdPathList(PlayState* play, SceneCmd* cmd) { // SceneTableEntry Header Command 0x0E: Transition Actor List void Scene_HeaderCmdTransiActorList(PlayState* play, SceneCmd* cmd) { - play->doorCtx.numTransitionActors = cmd->transiActorList.num; - play->doorCtx.transitionActorList = Lib_SegmentedToVirtual(cmd->transiActorList.segment); - func_80105818(play, play->doorCtx.numTransitionActors, play->doorCtx.transitionActorList); + play->transitionActors.count = cmd->transiActorList.num; + play->transitionActors.list = Lib_SegmentedToVirtual(cmd->transiActorList.segment); + func_80105818(play, play->transitionActors.count, play->transitionActors.list); } // Init function for the transition system. -void Door_InitContext(GameState* state, DoorContext* doorCtx) { - doorCtx->numTransitionActors = 0; +void Scene_ResetTransiActorList(GameState* state, TransitionActorList* transitionActors) { + transitionActors->count = 0; } // SceneTableEntry Header Command 0x0F: Environment Light Settings List @@ -478,7 +478,7 @@ void Scene_HeaderCmdActorCutsceneList(PlayState* play, SceneCmd* cmd) { // SceneTableEntry Header Command 0x1C: Mini Maps void Scene_HeaderCmdMiniMap(PlayState* play, SceneCmd* cmd) { - func_80104CF4(play); + MapDisp_Init(play); func_8010549C(play, cmd->minimapSettings.segment); } diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index b54e7a583..717d25ed1 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -100,7 +100,7 @@ void BgOpenShutter_Destroy(Actor* thisx, PlayState* play) { BgOpenShutter* this = THIS; s32 params = BGOPENSHUTTER_GET_A(thisx); - play->doorCtx.transitionActorList[params].id = -play->doorCtx.transitionActorList[params].id; + play->transitionActors.list[params].id = -play->transitionActors.list[params].id; DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); } diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 0c99056b4..e268ed0fa 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -139,7 +139,7 @@ void DoorShutter_SetupAction(DoorShutter* this, DoorShutterActionFunc actionFunc } s32 func_808A0900(DoorShutter* this, PlayState* play) { - TransitionActorEntry* transitionEntry = &play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)]; + TransitionActorEntry* transitionEntry = &play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)]; s8 frontRoom = transitionEntry->sides[0].room; if (frontRoom == transitionEntry->sides[1].room) { @@ -255,8 +255,8 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) { if (this->actor.room >= 0) { s32 transitionActorId = DOORSHUTTER_GET_FC00(&this->actor); - play->doorCtx.transitionActorList[transitionActorId].id = - -play->doorCtx.transitionActorList[transitionActorId].id; + play->transitionActors.list[transitionActorId].id = + -play->transitionActors.list[transitionActorId].id; } } @@ -551,7 +551,7 @@ void func_808A1884(DoorShutter* this, PlayState* play) { Actor_OffsetOfPointInActorCoords(&this->actor, &sp44, &player->actor.world.pos); this->actor.room = - play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)].sides[(sp44.z < 0.0f) ? 0 : 1].room; + play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)].sides[(sp44.z < 0.0f) ? 0 : 1].room; if (room != this->actor.room) { Room temp = play->roomCtx.currRoom; @@ -679,7 +679,7 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) { if (sp44->unk_04 != 0) { TransitionActorEntry* transitionEntry = - &play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)]; + &play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)]; if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c index 43c7143c3..8aa604b58 100644 --- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c +++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c @@ -182,7 +182,7 @@ void DoorSpiral_Init(Actor* thisx, PlayState* play) { s32 transition = GET_TRANSITION_ID_PARAM(thisx); s8 objBankId; - if (this->actor.room != play->doorCtx.transitionActorList[transition].sides[0].room) { + if (this->actor.room != play->transitionActors.list[transition].sides[0].room) { Actor_MarkForDeath(&this->actor); return; } @@ -206,7 +206,7 @@ void DoorSpiral_Init(Actor* thisx, PlayState* play) { void DoorSpiral_Destroy(Actor* thisx, PlayState* play) { s32 transition = GET_TRANSITION_ID_PARAM(thisx); - play->doorCtx.transitionActorList[transition].id *= -1; + play->transitionActors.list[transition].id *= -1; } /** @@ -282,7 +282,7 @@ void DoorSpiral_Wait(DoorSpiral* this, PlayState* play) { player->doorDirection = this->orientation; player->doorActor = &this->actor; transition = GET_TRANSITION_ID_PARAM(this); - player->doorNext = ((u16)play->doorCtx.transitionActorList[transition].params) >> 10; + player->doorNext = ((u16)play->transitionActors.list[transition].params) >> 10; func_80122F28(player); } diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index d9bc5cee1..349e317a6 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -438,7 +438,7 @@ void EnDoor_Destroy(Actor* thisx, PlayState* play) { EnDoor* this = (EnDoor*)thisx; if (this->unk_1A4 != 7) { - TransitionActorEntry* transitionEntry = &play->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA]; + TransitionActorEntry* transitionEntry = &play->transitionActors.list[(u16)this->dyna.actor.params >> 0xA]; if (transitionEntry->id < 0) { transitionEntry->id = -transitionEntry->id; } @@ -630,7 +630,7 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* transitionEntry = NULL; if (this->unk_1A4 != 7) { - transitionEntry = &play->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA]; + transitionEntry = &play->transitionActors.list[(u16)this->dyna.actor.params >> 0xA]; } rot->z += this->dyna.actor.world.rot.y; if ((this->unk_1A4 == 7) || (play->roomCtx.prevRoom.num >= 0) || diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index 0e85e7dc5..96e378e54 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -130,7 +130,7 @@ void EnHoll_Destroy(Actor* thisx, PlayState* play) { if (!EN_HOLL_IS_SCENE_CHANGER(this)) { u32 enHollId = EN_HOLL_GET_ID(&this->actor); - play->doorCtx.transitionActorList[enHollId].id = -play->doorCtx.transitionActorList[enHollId].id; + play->transitionActors.list[enHollId].id = -play->transitionActors.list[enHollId].id; if (this == sInstancePlayingSound) { sInstancePlayingSound = NULL; } @@ -181,7 +181,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) { if (sLoadingPlaneDistance < playerDistFromCentralPlane) { if ((play->roomCtx.prevRoom.num >= 0) && (play->roomCtx.unk31 == 0)) { - this->actor.room = play->doorCtx.transitionActorList[enHollId].sides[this->playerSide].room; + this->actor.room = play->transitionActors.list[enHollId].sides[this->playerSide].room; if (play->roomCtx.prevRoom.num == this->actor.room) { EnHoll_ChangeRooms(play); } @@ -194,7 +194,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) { play->transitionTrigger = TRANS_TRIGGER_START; play->unk_1878C(play); } else { - this->actor.room = play->doorCtx.transitionActorList[enHollId].sides[this->playerSide ^ 1].room; + this->actor.room = play->transitionActors.list[enHollId].sides[this->playerSide ^ 1].room; if (play->roomCtx.prevRoom.num < 0) { Room_StartRoomTransition(play, &play->roomCtx, this->actor.room); if (this == sInstancePlayingSound) { @@ -234,7 +234,7 @@ void EnHoll_TransparentIdle(EnHoll* this, PlayState* play) { playerDistFromCentralPlane > EN_HOLL_LOADING_PLANE_DISTANCE) { s32 enHollId = EN_HOLL_GET_ID(&this->actor); s32 playerSide = (transformedPlayerPos.z < 0.0f) ? EN_HOLL_BEHIND : EN_HOLL_BEFORE; - TransitionActorEntry* transitionActorEntry = &play->doorCtx.transitionActorList[enHollId]; + TransitionActorEntry* transitionActorEntry = &play->transitionActors.list[enHollId]; s8 room = transitionActorEntry->sides[playerSide].room; this->actor.room = room; @@ -262,7 +262,7 @@ void EnHoll_VerticalBgCoverIdle(EnHoll* this, PlayState* play) { s32 enHollId = EN_HOLL_GET_ID(&this->actor); s32 playerSide = (this->actor.playerHeightRel > 0.0f) ? EN_HOLL_ABOVE : EN_HOLL_BELOW; - this->actor.room = play->doorCtx.transitionActorList[enHollId].sides[playerSide].room; + this->actor.room = play->transitionActors.list[enHollId].sides[playerSide].room; if ((this->actor.room != play->roomCtx.currRoom.num) && Room_StartRoomTransition(play, &play->roomCtx, this->actor.room)) { @@ -286,7 +286,7 @@ void EnHoll_VerticalIdle(EnHoll* this, PlayState* play) { s32 enHollId = EN_HOLL_GET_ID(&this->actor); s32 playerSide = (this->actor.playerHeightRel > 0.0f) ? EN_HOLL_ABOVE : EN_HOLL_BELOW; - this->actor.room = play->doorCtx.transitionActorList[enHollId].sides[playerSide].room; + this->actor.room = play->transitionActors.list[enHollId].sides[playerSide].room; if ((this->actor.room != play->roomCtx.currRoom.num) && Room_StartRoomTransition(play, &play->roomCtx, this->actor.room)) { this->actionFunc = EnHoll_RoomTransitionIdle; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 8605e3449..93fc813c1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1919,7 +1919,7 @@ 0x801045AC:("func_801045AC",), 0x80104AE8:("func_80104AE8",), 0x80104C80:("func_80104C80",), - 0x80104CF4:("func_80104CF4",), + 0x80104CF4:("MapDisp_Init",), 0x80104F34:("func_80104F34",), 0x80105294:("func_80105294",), 0x80105318:("func_80105318",), @@ -1928,7 +1928,7 @@ 0x8010549C:("func_8010549C",), 0x8010565C:("func_8010565C",), 0x80105818:("func_80105818",), - 0x80105A40:("func_80105A40",), + 0x80105A40:("MapDisp_Destroy",), 0x80105B34:("func_80105B34",), 0x80105C40:("func_80105C40",), 0x80105FE0:("func_80105FE0",), @@ -1938,9 +1938,9 @@ 0x80106530:("func_80106530",), 0x8010657C:("func_8010657C",), 0x80106644:("func_80106644",), - 0x8010683C:("func_8010683C",), - 0x801068B4:("func_801068B4",), - 0x801068D8:("func_801068D8",), + 0x8010683C:("MapDisp_ResetIMap",), + 0x801068B4:("MapDisp_InitIMap",), + 0x801068D8:("MapDisp_DestroyIMap",), 0x801068FC:("func_801068FC",), 0x80106BEC:("func_80106BEC",), 0x80106D08:("func_80106D08",), @@ -1988,7 +1988,7 @@ 0x80109BA0:("func_80109BA0",), 0x80109BF4:("func_80109BF4",), 0x80109C38:("func_80109C38",), - 0x80109CBC:("func_80109CBC",), + 0x80109CBC:("MapData_GetIMapSize",), 0x80109D40:("func_80109D40",), 0x80109DD8:("func_80109DD8",), 0x80109E70:("func_80109E70",), @@ -2435,7 +2435,7 @@ 0x8012FDA4:("Scene_HeaderCmdLightList",), 0x8012FE2C:("Scene_HeaderCmdPathList",), 0x8012FE5C:("Scene_HeaderCmdTransiActorList",), - 0x8012FEBC:("Door_InitContext",), + 0x8012FEBC:("Scene_ResetTransiActorList",), 0x8012FECC:("Scene_HeaderCmdEnvLightSettings",), 0x8012FF10:("Scene_LoadAreaTextures",), 0x8012FF8C:("Scene_HeaderCmdSkyboxSettings",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6ad292573..2d901f802 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1023,13 +1023,12 @@ 0x801BEC1C:("D_801BEC1C","UNK_TYPE4","",0x4), 0x801BEC20:("D_801BEC20","UNK_TYPE4","",0x4), 0x801BEC24:("D_801BEC24","UNK_TYPE1","",0x1), - 0x801BEC2C:("D_801BEC2C","UNK_TYPE1","",0x1), - 0x801BEC5C:("D_801BEC5C","UNK_TYPE2","",0x2), - 0x801BEC5E:("D_801BEC5E","UNK_TYPE2","",0x2), + 0x801BEC2C:("D_801BEC2C","Color_RGBA8","[12]",0x30), + 0x801BEC5C:("D_801BEC5C","T_801BEC5C","[5]",0x14), 0x801BEC70:("D_801BEC70","UNK_TYPE4","",0x4), - 0x801BEC84:("D_801BEC84","UNK_TYPE1","",0x1), - 0x801BECA4:("D_801BECA4","UNK_TYPE1","",0x1), - 0x801BECC4:("D_801BECC4","UNK_TYPE1","",0x1), + 0x801BEC84:("D_801BEC84","u16","[16]",0x10), + 0x801BECA4:("D_801BECA4","u16","[16]",0x10), + 0x801BECC4:("D_801BECC4","u16","[16]",0x10), 0x801BECE4:("D_801BECE4","UNK_TYPE1","",0x1), 0x801BED00:("D_801BED00","UNK_TYPE1","",0x1), 0x801BED24:("D_801BED24","UNK_TYPE2","",0x2), @@ -3991,10 +3990,7 @@ 0x801F5130:("D_801F5130","UNK_TYPE1","",0x1), 0x801F5270:("D_801F5270","UNK_TYPE1","",0x140), 0x801F53B0:("D_801F53B0","UNK_TYPE1","",0x1), - 0x801F56B0:("D_801F56B0","UNK_TYPE1","",0x1), - 0x801F5730:("D_801F5730","UNK_TYPE1","",0x1), - 0x801F57B4:("D_801F57B4","UNK_TYPE1","",0x1), - 0x801F5834:("D_801F5834","UNK_TYPE1","",0x1), + 0x801F56B0:("D_801F56B0","T_801F56B0","",0x188), 0x801F5840:("gNMIBuffer","s32*","",0x4), 0x801F5850:("D_801F5850","UNK_TYPE1","",0x1), 0x801F58B0:("D_801F58B0","UNK_TYPE1","",0x1), From 1da0fa1ac5c451e2c1ec7c497237e9549c28ba33 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 18 Aug 2022 05:12:23 -0400 Subject: [PATCH 15/28] More OKs, split map_data.data, more doc --- include/functions.h | 4 +- include/z64map.h | 8 ++- spec | 1 + src/code/z_map_data.c | 18 +++--- src/code/z_map_disp.c | 128 ++++++++++++++++--------------------- tools/disasm/files.txt | 3 +- tools/disasm/functions.txt | 4 +- tools/disasm/variables.txt | 27 +++----- 8 files changed, 84 insertions(+), 109 deletions(-) diff --git a/include/functions.h b/include/functions.h index 152b52245..e4f95941f 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1657,7 +1657,6 @@ s32 ZeldaArena_Check(); void ZeldaArena_Init(void* start, size_t size); void ZeldaArena_Cleanup(); u8 ZeldaArena_IsInitialized(); -// void func_80102E40(void); // void func_80102E90(void); // void func_80102EA4(void); void func_80102EB4(u32 param_1); @@ -1668,7 +1667,6 @@ s32 func_80102EF0(PlayState* play); // void func_801030B4(void); // void func_801030F4(void); // void func_801031D0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// void func_801039EC(void); // void func_80103A10(void); // void func_80103A58(void); // void func_8010439C(void); @@ -2827,7 +2825,7 @@ s32 func_80178A94(s32 param_1, s32 param_2); // void func_80178C80(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_80178D7C(void); // void func_80178DAC(void); -// void func_80178E3C(void); +void func_80178E3C(uintptr_t vrom, s32 id, void* dst, s32 size); // void func_80178E7C(void); // void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value); // void Check_WriteI4Pixel(u16* buffer, u32 x, u32 y, u32 value); diff --git a/include/z64map.h b/include/z64map.h index f263112c6..d94ea3b22 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -6,6 +6,8 @@ /* z_map_data */ +#define MAPDATA_SOURCE_MAP_I_STATIC 1 + typedef struct { /* 0x00 */ TexturePtr lmapTex; //minimap texture /* 0x04 */ u8 unk4; @@ -89,6 +91,8 @@ typedef struct { /* z_map_data */ TexturePtr func_8010958C(s32); +s16 func_80109F78(s32); +s32 func_80109BA0(s32); s32 func_80109714(s32); s32 MapData_GetIMapSize(s32); s32 func_80109A98(s32); @@ -97,6 +101,6 @@ s32 func_801096D4(s32 arg0); void func_8010983C(s32 arg0, s32 *arg1); void func_801097C8(s32 arg0, s32* arg1, s32* arg2); void func_80109754(s32 arg0, s32 *arg1, s32 *arg2); - -void func_80178E3C(u8*, s32, s32, s32); +void func_80109D40(s32, s32*, s32*); +void func_80109DD8(s32, s32*, s32*); #endif diff --git a/spec b/spec index a488e0dbd..c741b10bc 100644 --- a/spec +++ b/spec @@ -491,6 +491,7 @@ beginseg include "build/data/code/z_map_disp.data.o" include "build/data/code/z_map_disp.bss.o" include "build/src/code/z_map_data.o" + include "build/data/code/z_map_data.data.o" include "build/src/code/z_map_exp.o" include "build/src/code/z_msgevent.o" include "build/data/code/z_msgevent.data.o" 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 diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 22762b51a..a73d5d35f 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -540,7 +540,8 @@ 0x801BE960 : "z_lib", 0x801BE990 : "z_lifemeter", 0x801BEAB0 : "z_lights", - 0x801BEAD0 : "z_map_disp", # z_map_data is somewhere in here + 0x801BEAD0 : "z_map_disp", + 0x801BED40 : "z_map_data", 0x801BF550 : "z_map_exp", 0x801BF5C0 : "z_msgevent", 0x801BF6C0 : "z_parameter", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 93fc813c1..12befc404 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1901,7 +1901,7 @@ 0x80102DBC:("ZeldaArena_Init",), 0x80102DEC:("ZeldaArena_Cleanup",), 0x80102E10:("ZeldaArena_IsInitialized",), - 0x80102E40:("func_80102E40",), + 0x80102E40:("MapDisp_GetIMapTexture",), 0x80102E90:("func_80102E90",), 0x80102EA4:("func_80102EA4",), 0x80102EB4:("func_80102EB4",), @@ -1912,7 +1912,7 @@ 0x801030B4:("func_801030B4",), 0x801030F4:("func_801030F4",), 0x801031D0:("func_801031D0",), - 0x801039EC:("func_801039EC",), + 0x801039EC:("MapDisp_IsDataRotated",), 0x80103A10:("func_80103A10",), 0x80103A58:("func_80103A58",), 0x8010439C:("func_8010439C",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 2d901f802..df9bc7e1c 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1013,38 +1013,29 @@ 0x801BEB10:("D_801BEB10","u32","[4]",0x10), 0x801BEB20:("D_801BEB20","u32","[4]",0x10), 0x801BEB38:("D_801BEB38","UNK_TYPE1","",0x1), - 0x801BEBB8:("D_801BEBB8","UNK_TYPE4","",0x4), - 0x801BEBD8:("D_801BEBD8","UNK_TYPE4","",0x4), + 0x801BEBB8:("D_801BEBB8","UNK_TYPE4","",0x40), 0x801BEBF8:("D_801BEBF8","UNK_TYPE2","",0x2), 0x801BEBFA:("D_801BEBFA","UNK_TYPE2","",0x2), - 0x801BEBFC:("D_801BEBFC","UNK_TYPE2","",0x2), - 0x801BEC10:("D_801BEC10","UNK_TYPE2","",0x2), + 0x801BEBFC:("D_801BEBFC","UNK_TYPE2","",0x18), 0x801BEC14:("D_801BEC14","MinimapList","",0x8), 0x801BEC1C:("D_801BEC1C","UNK_TYPE4","",0x4), 0x801BEC20:("D_801BEC20","UNK_TYPE4","",0x4), - 0x801BEC24:("D_801BEC24","UNK_TYPE1","",0x1), + 0x801BEC24:("D_801BEC24","UNK_TYPE1","",0x8), 0x801BEC2C:("D_801BEC2C","Color_RGBA8","[12]",0x30), 0x801BEC5C:("D_801BEC5C","T_801BEC5C","[5]",0x14), - 0x801BEC70:("D_801BEC70","UNK_TYPE4","",0x4), + 0x801BEC70:("D_801BEC70","UNK_TYPE4","",0x14), 0x801BEC84:("D_801BEC84","u16","[16]",0x10), 0x801BECA4:("D_801BECA4","u16","[16]",0x10), 0x801BECC4:("D_801BECC4","u16","[16]",0x10), - 0x801BECE4:("D_801BECE4","UNK_TYPE1","",0x1), - 0x801BED00:("D_801BED00","UNK_TYPE1","",0x1), - 0x801BED24:("D_801BED24","UNK_TYPE2","",0x2), - 0x801BED3C:("D_801BED3C","UNK_TYPE1","",0x1), + 0x801BECE4:("D_801BECE4","UNK_TYPE1","",0x1C), + 0x801BED00:("D_801BED00","UNK_TYPE1","",0x24), + 0x801BED24:("D_801BED24","UNK_TYPE2","",0x18), 0x801BED40:("D_801BED40","UNK_TYPE1","",0x1), - 0x801BED4C:("D_801BED4C","UNK_TYPE1","",0x1), - 0x801BED54:("D_801BED54","UNK_TYPE1","",0x1), - 0x801BED55:("D_801BED55","UNK_TYPE1","",0x1), - 0x801BED56:("D_801BED56","UNK_TYPE1","",0x1), + 0x801BED4C:("D_801BED4C","UNK_TYPE1","",0x3C), 0x801BED88:("D_801BED88","UNK_TYPE1","",0x1), 0x801BEFC8:("D_801BEFC8","UNK_TYPE1","",0x1), 0x801BF15C:("D_801BF15C","UNK_TYPE1","",0x1), - 0x801BF170:("D_801BF170","UNK_TYPE1","",0x1), - 0x801BF176:("D_801BF176","UNK_TYPE1","",0x1), - 0x801BF177:("D_801BF177","UNK_TYPE1","",0x1), - 0x801BF178:("D_801BF178","UNK_TYPE1","",0x1), + 0x801BF170:("D_801BF170","UNK_TYPE1","",0x244), 0x801BF3B4:("D_801BF3B4","UNK_TYPE1","",0x1), 0x801BF550:("D_801BF550","UNK_TYPE2","",0x2), 0x801BF554:("D_801BF554","UNK_TYPE2","",0x2), From a65750c33a955f466199d3e30267f4073104371a Mon Sep 17 00:00:00 2001 From: mzxrules Date: Fri, 19 Aug 2022 22:46:52 -0400 Subject: [PATCH 16/28] incremental clean-up, more function names --- include/z64map.h | 17 +- include/z64scene.h | 4 +- spec | 1 - src/code/z_map_data.c | 509 +++++---- src/code/z_map_disp.c | 966 +++++++++--------- .../actors/ovl_Door_Shutter/z_door_shutter.c | 6 +- tools/disasm/functions.txt | 6 +- tools/disasm/variables.txt | 4 +- tools/overlayhelpers/mapdata.py | 65 ++ 9 files changed, 889 insertions(+), 689 deletions(-) create mode 100755 tools/overlayhelpers/mapdata.py diff --git a/include/z64map.h b/include/z64map.h index d94ea3b22..d9b7ac4df 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -6,7 +6,14 @@ /* z_map_data */ -#define MAPDATA_SOURCE_MAP_I_STATIC 1 +#define MAPDATA_MID_GAMEPLAY_DANGEON_KEEP 0 +#define MAPDATA_MID_GRAND_MAP_STATIC 1 +#define MAPDATA_MID_MAP_I_STATIC 2 + + +#define MAPDATA_CPID_GRAND_MAP_STATIC 0 +#define MAPDATA_CPID_MAP_I_STATIC 1 +#define MAPDATA_CPID_2 2 typedef struct { /* 0x00 */ TexturePtr lmapTex; //minimap texture @@ -17,7 +24,7 @@ typedef struct { /* 0x08 */ u8 unk8; /* 0x09 */ u8 unk9; /* 0x0A */ s16 unkA; -} T_801BED4C; // size 0x0C? +} T_801BED4C; // size 0x0C typedef struct { u8 unk0; @@ -94,13 +101,13 @@ TexturePtr func_8010958C(s32); s16 func_80109F78(s32); s32 func_80109BA0(s32); s32 func_80109714(s32); -s32 MapData_GetIMapSize(s32); +s32 MapData_GetMapSize(s32); s32 func_80109A98(s32); s32 func_80109AD8(s32); s32 func_801096D4(s32 arg0); -void func_8010983C(s32 arg0, s32 *arg1); -void func_801097C8(s32 arg0, s32* arg1, s32* arg2); void func_80109754(s32 arg0, s32 *arg1, s32 *arg2); +void func_801097C8(s32 arg0, s32* arg1, s32* arg2); +void MapData_GetMapScale(s32 mapId, s32 *scale); void func_80109D40(s32, s32*, s32*); void func_80109DD8(s32, s32*, s32*); #endif diff --git a/include/z64scene.h b/include/z64scene.h index 82ff9af4b..45a8c101e 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -305,7 +305,7 @@ typedef struct { } TransitionActorList; typedef struct { - /* 0x00 */ u16 unk0; + /* 0x00 */ u16 mapId; /* 0x02 */ s16 unk2; /* 0x04 */ s16 unk4; /* 0x06 */ s16 unk6; @@ -319,7 +319,7 @@ typedef struct { typedef struct { /* 0x00 */ MinimapEntry* entry; - /* 0x04 */ s16 unk4; + /* 0x04 */ s16 scale; } MinimapList2; // size = 0x8 typedef struct { diff --git a/spec b/spec index c741b10bc..a488e0dbd 100644 --- a/spec +++ b/spec @@ -491,7 +491,6 @@ beginseg include "build/data/code/z_map_disp.data.o" include "build/data/code/z_map_disp.bss.o" include "build/src/code/z_map_data.o" - include "build/data/code/z_map_data.data.o" include "build/src/code/z_map_exp.o" include "build/src/code/z_msgevent.o" include "build/data/code/z_msgevent.data.o" diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index da5309f7f..b61f1438e 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -1,14 +1,117 @@ #include "global.h" #include "z64map.h" -extern Color_RGBA8 D_801BED40[]; -extern T_801BED4C D_801BED4C[5]; -extern T_801BF170 D_801BED88[]; -extern s32 D_801BEFC8[]; -extern s32 D_801BF15C[5]; -extern T_801BF170 D_801BF170[]; -extern s32 D_801BF3B4[]; +static Color_RGBA8 D_801BED40[3] = { + { 255, 255, 255, 255 }, + { 0, 255, 255, 160 }, + { 100, 255, 255, 255 }, +}; +static T_801BED4C D_801BED4C[5] = { + { 0x050022C8, 0x60, 0x55, 0x30, 0x2A, 0x00, 0x00, 20 }, { 0x050042C8, 0x60, 0x55, 0x30, 0x3E, 0x00, 0x00, 20 }, + { 0x050052C8, 0x60, 0x55, 0x44, 0x2A, 0x00, 0x00, 20 }, { 0x050032C8, 0x60, 0x55, 0x30, 0x3E, 0x00, 0x00, 20 }, + { 0x050062C8, 0x60, 0x55, 0x44, 0x3E, 0x00, 0x00, 20 }, +}; +static T_801BF170 D_801BED88[98] = { + { 0x60, 0x55, 48, 42, 0x00, 0x00, 20 }, { 0x60, 0x55, 48, 62, 0x00, 0x00, 20 }, + { 0x60, 0x55, 68, 42, 0x00, 0x00, 20 }, { 0x60, 0x55, 48, 62, 0x00, 0x00, 20 }, + { 0x60, 0x55, 68, 62, 0x00, 0x00, 20 }, { 0x50, 0x48, 40, 35, 0x01, 0x01, 52 }, + { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, + { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 49, 0x03, 0x02, 20 }, + { 0x30, 0x2C, 25, 23, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, + { 0x30, 0x2E, 25, 24, 0x03, 0x02, 20 }, { 0x40, 0x3D, 32, 31, 0x03, 0x02, 20 }, + { 0x60, 0x55, 49, 50, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 62, 0x03, 0x02, 20 }, + { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, { 0x30, 0x50, 21, 41, 0x01, 0x01, 198 }, + { 0x20, 0x80, 17, 87, 0x01, 0x01, 138 }, { 0x50, 0x35, 40, 27, 0x01, 0x01, 54 }, + { 0x20, 0x51, 16, 15, 0x03, 0x02, 20 }, { 0x50, 0x2D, 35, 23, 0x03, 0x02, 20 }, + { 0x40, 0x57, 36, 44, 0x03, 0x02, 20 }, { 0x40, 0x33, 31, 23, 0x03, 0x02, 20 }, + { 0x50, 0x4F, 40, 40, 0x03, 0x02, 20 }, { 0x60, 0x4B, 36, 26, 0x03, 0x02, 20 }, + { 0x30, 0x29, 24, 20, 0x03, 0x02, 20 }, { 0x40, 0x2D, 31, 20, 0x03, 0x02, 20 }, + { 0x50, 0x34, 38, 28, 0x03, 0x02, 20 }, { 0x30, 0x2D, 23, 20, 0x03, 0x02, 20 }, + { 0x30, 0x3B, 25, 37, 0x03, 0x02, 20 }, { 0x30, 0x3C, 21, 38, 0x03, 0x02, 20 }, + { 0x30, 0x51, 24, 40, 0x03, 0x02, 20 }, { 0x30, 0x51, 24, 40, 0x03, 0x02, 20 }, + { 0x50, 0x59, 41, 26, 0x03, 0x02, 20 }, { 0x50, 0x35, 39, 26, 0x03, 0x02, 20 }, + { 0x40, 0x4E, 37, 36, 0x03, 0x02, 20 }, { 0x40, 0x44, 33, 33, 0x03, 0x02, 20 }, + { 0x30, 0x44, 23, 35, 0x03, 0x02, 20 }, { 0x30, 0x24, 25, 17, 0x03, 0x02, 20 }, + { 0x30, 0x19, 24, 12, 0x03, 0x02, 20 }, { 0x40, 0x4B, 24, 37, 0x03, 0x02, 20 }, + { 0x20, 0x35, 17, 26, 0x03, 0x02, 20 }, { 0x50, 0x3E, 35, 27, 0x01, 0x01, 105 }, + { 0x40, 0x4C, 31, 31, 0x01, 0x01, 133 }, { 0x60, 0x55, 47, 43, 0x03, 0x02, 20 }, + { 0x50, 0x47, 48, 33, 0x01, 0x01, 180 }, { 0x50, 0x57, 44, 44, 0x01, 0x01, 72 }, + { 0x40, 0x41, 31, 36, 0x01, 0x01, 57 }, { 0x30, 0x29, 28, 20, 0x01, 0x01, 60 }, + { 0x40, 0x4C, 17, 36, 0x01, 0x01, 58 }, { 0x50, 0x3C, 27, 22, 0x01, 0x01, 83 }, + { 0x50, 0x2F, 38, 23, 0x01, 0x01, 69 }, { 0x50, 0x3C, 40, 38, 0x01, 0x01, 29 }, + { 0x30, 0x13, 17, 8, 0x01, 0x01, 25 }, { 0x20, 0x63, 17, 16, 0x01, 0x01, 88 }, + { 0x30, 0x45, 19, 28, 0x01, 0x01, 76 }, { 0x30, 0x53, 34, 47, 0x01, 0x01, 104 }, + { 0x50, 0x36, 45, 27, 0x01, 0x01, 61 }, { 0x50, 0x5C, 35, 50, 0x01, 0x01, 60 }, + { 0x30, 0x4B, 24, 37, 0x03, 0x02, 20 }, { 0x40, 0x31, 32, 23, 0x03, 0x02, 20 }, + { 0x40, 0x31, 25, 24, 0x03, 0x02, 20 }, { 0x40, 0x34, 32, 24, 0x03, 0x02, 34 }, + { 0x40, 0x31, 31, 24, 0x03, 0x02, 34 }, { 0x20, 0x21, 18, 14, 0x03, 0x02, 34 }, + { 0x30, 0x32, 25, 25, 0x03, 0x02, 34 }, { 0x40, 0x34, 32, 25, 0x03, 0x02, 34 }, + { 0x30, 0x23, 24, 18, 0x03, 0x02, 34 }, { 0x40, 0x33, 32, 26, 0x03, 0x02, 34 }, + { 0x30, 0x23, 24, 18, 0x03, 0x02, 34 }, { 0x30, 0x35, 24, 28, 0x03, 0x02, 34 }, + { 0x40, 0x35, 33, 25, 0x03, 0x02, 34 }, { 0x40, 0x2F, 31, 24, 0x03, 0x02, 34 }, + { 0x40, 0x34, 32, 35, 0x03, 0x02, 34 }, { 0x30, 0x30, 24, 23, 0x03, 0x02, 34 }, + { 0x40, 0x57, 32, 26, 0x03, 0x02, 34 }, { 0x30, 0x1E, 24, 14, 0x03, 0x02, 34 }, + { 0x50, 0x4A, 40, 36, 0x01, 0x01, 50 }, { 0x50, 0x57, 6, 41, 0x01, 0x01, 42 }, + { 0x50, 0x38, 19, 27, 0x01, 0x01, 40 }, { 0x50, 0x41, 25, 33, 0x01, 0x01, 40 }, + { 0x10, 0x26, 8, 12, 0x01, 0x01, 47 }, { 0x50, 0x4E, 46, 33, 0x01, 0x01, 142 }, + { 0x50, 0x37, 32, 29, 0x01, 0x01, 155 }, { 0x50, 0x62, 67, 48, 0x01, 0x01, 51 }, + { 0x50, 0x3E, 47, 19, 0x01, 0x01, 55 }, { 0x20, 0x7B, 15, 83, 0x01, 0x01, 140 }, + { 0x50, 0x3C, 47, 14, 0x01, 0x01, 170 }, { 0x30, 0x4D, 18, 59, 0x01, 0x01, 79 }, + { 0x50, 0x40, 35, 30, 0x01, 0x01, 33 }, { 0x40, 0x32, 29, 22, 0x01, 0x01, 40 }, + { 0x50, 0x41, 39, 5, 0x01, 0x01, 37 }, { 0x20, 0x3D, 8, 56, 0x01, 0x01, 35 }, + { 0x50, 0x53, 37, 42, 0x01, 0x01, 95 }, { 0x50, 0x1B, 30, 21, 0x01, 0x01, 134 }, + { 0x50, 0x17, 122, -18, 0x01, 0x01, 53 }, { 0x50, 0x3C, 27, 22, 0x01, 0x01, 83 }, +}; +static s32 D_801BF15C[5] = { + 0x50, 0x50, 0x8D, 0x50, 0x50, +}; +static T_801BF170 D_801BF170[58] = { + { 0x60, 0x55, 73, 67, 0x00, 0x00, 60 }, { 0x60, 0x55, 73, 74, 0x00, 0x00, 60 }, + { 0x60, 0x55, 80, 67, 0x00, 0x00, 60 }, { 0x60, 0x55, 73, 67, 0x00, 0x00, 60 }, + { 0x60, 0x55, 80, 74, 0x00, 0x00, 60 }, { 0x20, 0x1D, 17, 14, 0x02, 0x00, 50 }, + { 0x20, 0x1B, 16, 13, 0x02, 0x00, 50 }, { 0x20, 0x1E, 16, 15, 0x02, 0x00, 50 }, + { 0x10, 0x20, 8, 20, 0x02, 0x00, 50 }, { 0x10, 0x0C, 8, 6, 0x02, 0x00, 50 }, + { 0x20, 0x1B, 16, 13, 0x02, 0x00, 50 }, { 0x10, 0x0E, 8, 7, 0x02, 0x00, 50 }, + { 0x20, 0x13, 16, 9, 0x02, 0x00, 50 }, { 0x20, 0x1A, 16, 16, 0x02, 0x00, 50 }, + { 0x10, 0x20, 8, 22, 0x02, 0x00, 50 }, { 0x20, 0x1B, 16, 13, 0x02, 0x00, 50 }, + { 0x10, 0x23, 9, 5, 0x02, 0x00, 45 }, { 0x20, 0x12, 14, 9, 0x02, 0x00, 45 }, + { 0x20, 0x26, 18, 19, 0x02, 0x00, 45 }, { 0x20, 0x15, 16, 9, 0x02, 0x00, 45 }, + { 0x20, 0x22, 16, 17, 0x02, 0x00, 45 }, { 0x30, 0x20, 19, 11, 0x02, 0x00, 45 }, + { 0x20, 0x11, 16, 8, 0x02, 0x00, 45 }, { 0x20, 0x11, 16, 7, 0x02, 0x00, 45 }, + { 0x20, 0x15, 16, 11, 0x02, 0x00, 45 }, { 0x20, 0x12, 16, 8, 0x02, 0x00, 45 }, + { 0x10, 0x18, 9, 15, 0x02, 0x00, 45 }, { 0x10, 0x19, 7, 16, 0x02, 0x00, 45 }, + { 0x20, 0x23, 16, 17, 0x02, 0x00, 45 }, { 0x10, 0x13, 5, 9, 0x02, 0x00, 80 }, + { 0x20, 0x1C, 17, 7, 0x02, 0x00, 66 }, { 0x20, 0x10, 16, 8, 0x02, 0x00, 66 }, + { 0x20, 0x18, 18, 11, 0x02, 0x00, 66 }, { 0x20, 0x15, 16, 10, 0x02, 0x00, 66 }, + { 0x10, 0x15, 8, 11, 0x02, 0x00, 66 }, { 0x10, 0x0A, 8, 4, 0x02, 0x00, 66 }, + { 0x10, 0x07, 8, 3, 0x02, 0x00, 66 }, { 0x20, 0x17, 13, 11, 0x02, 0x00, 66 }, + { 0x10, 0x10, 8, 8, 0x02, 0x00, 66 }, { 0x10, 0x11, 8, 7, 0x02, 0x00, 50 }, + { 0x10, 0x17, 9, 10, 0x02, 0x00, 66 }, { 0x10, 0x0F, 8, 7, 0x02, 0x00, 66 }, + { 0x20, 0x0F, 15, 7, 0x02, 0x00, 66 }, { 0x20, 0x11, 16, 8, 0x02, 0x00, 90 }, + { 0x20, 0x10, 16, 8, 0x02, 0x00, 90 }, { 0x10, 0x0A, 8, 5, 0x02, 0x00, 90 }, + { 0x10, 0x11, 8, 8, 0x02, 0x00, 90 }, { 0x20, 0x11, 17, 8, 0x02, 0x00, 90 }, + { 0x10, 0x0B, 8, 5, 0x02, 0x00, 90 }, { 0x20, 0x11, 15, 9, 0x02, 0x00, 90 }, + { 0x10, 0x0C, 8, 6, 0x02, 0x00, 90 }, { 0x10, 0x12, 9, 9, 0x02, 0x00, 90 }, + { 0x20, 0x11, 17, 8, 0x02, 0x00, 90 }, { 0x20, 0x0F, 16, 8, 0x02, 0x00, 90 }, + { 0x10, 0x12, 9, 13, 0x02, 0x00, 90 }, { 0x10, 0x10, 8, 7, 0x02, 0x00, 90 }, + { 0x10, 0x1E, 9, 8, 0x02, 0x00, 90 }, { 0x10, 0x09, 9, 4, 0x02, 0x00, 90 }, +}; +static s32 D_801BF3B4[5] = { + 0x00, 0x01, 0x02, 0x03, 0x04, +}; +static s32 D_801BF3C8[98] = { + 0x3A, 0x01, 0x02, 0x03, 0x04, 0x3A, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x3A, 0x3A, 0x3A, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x3A, + 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x3A, 0x3A, 0x27, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, + 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, + 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, +}; +// mapId +// 0-4 is gameplay_dangeon_keep +// 5-0x3A is map_i_static +// 0x100-0x162 is map_grand_static s32 func_80109A98(s32); // Get ? Color @@ -16,7 +119,7 @@ void func_801094A0(s32 arg0, Color_RGBA8* color) { *color = D_801BED40[arg0]; } -void func_801094C8(s32 arg0, s32 *arg1, s32 *arg2) { +void func_801094C8(s32 arg0, s32* arg1, s32* arg2) { *arg1 = D_801BED4C[arg0].unk4; *arg2 = D_801BED4C[arg0].unk5; } @@ -42,120 +145,120 @@ TexturePtr func_8010958C(s32 arg0) { return D_801BED4C[arg0].lmapTex; } -void func_801095AC(s32 arg0, s32 *arg1, s32 *arg2) { - *arg1 = D_801BED88[arg0-0x100].unk0; - *arg2 = D_801BED88[arg0-0x100].unk1; +void func_801095AC(s32 mapId, s32* arg1, s32* arg2) { + *arg1 = D_801BED88[mapId - 0x100].unk0; + *arg2 = D_801BED88[mapId - 0x100].unk1; } -void func_801095DC(s32 arg0, s32* arg1, s32* arg2) { - *arg1 = D_801BED88[arg0-0x100].unk2; - *arg2 = D_801BED88[arg0-0x100].unk4; +void func_801095DC(s32 mapId, s32* arg1, s32* arg2) { + *arg1 = D_801BED88[mapId - 0x100].unk2; + *arg2 = D_801BED88[mapId - 0x100].unk4; } -void func_8010960C(s32 arg0, s32* arg1) { - *arg1 = D_801BED88[arg0-0x100].unk6; +void func_8010960C(s32 mapId, s32* arg1) { + *arg1 = D_801BED88[mapId - 0x100].unk6; } -u8 func_80109630(s32 arg0) { - return D_801BED88[arg0-0x100].unk7; +u8 func_80109630(s32 mapId) { + return D_801BED88[mapId - 0x100].unk7; } -s16 func_80109650(s32 arg0) { - return D_801BED88[arg0-0x100].unk8; +s16 func_80109650(s32 mapId) { + return D_801BED88[mapId - 0x100].unk8; } -s32 func_80109670(s32 arg0) { - s32 cond = arg0 - 0x100; +s32 func_80109670(s32 mapId) { + s32 cond = mapId - 0x100; s32 var_s1 = 0; s32 i; - for(i = 1; i < cond + 1; i++) { - var_s1 += func_801096D4((i-1) + 0x100); + for (i = 1; i < cond + 1; i++) { + var_s1 += func_801096D4((i - 1) + 0x100); } return var_s1; } -s32 func_801096D4(s32 arg0) { - return (D_801BED88[arg0 - 0x100].unk0 * D_801BED88[arg0 - 0x100].unk1) / 2; +s32 func_801096D4(s32 mapId) { + return (D_801BED88[mapId - 0x100].unk0 * D_801BED88[mapId - 0x100].unk1) / 2; } -s32 func_80109714(s32 arg0) { - if ((arg0 >= 0) && (arg0 < 5)) { - return 0; +s32 func_80109714(s32 mapId) { + if ((mapId >= 0) && (mapId < 5)) { + return MAPDATA_MID_GAMEPLAY_DANGEON_KEEP; } - if ((arg0 >= 0x100) && (arg0 < 0x162)) { - return 1; + if ((mapId >= 0x100) && (mapId < 0x162)) { + return MAPDATA_MID_GRAND_MAP_STATIC; } - return 2; + return MAPDATA_MID_MAP_I_STATIC; } -void func_80109754(s32 arg0, s32 *arg1, s32 *arg2) { - switch (func_80109714(arg0)) { - case 0: - func_801094C8(arg0, arg1, arg2); - return; - case 1: - func_801095AC(arg0, arg1, arg2); - return; - default: - *arg2 = 0; - *arg1 = 0; - return; +void func_80109754(s32 mapId, s32* arg1, s32* arg2) { + switch (func_80109714(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + func_801094C8(mapId, arg1, arg2); + return; + case MAPDATA_MID_GRAND_MAP_STATIC: + func_801095AC(mapId, arg1, arg2); + return; + default: + *arg2 = 0; + *arg1 = 0; + return; } } -void func_801097C8(s32 arg0, s32* arg1, s32* arg2) { - switch (func_80109714(arg0)) { - case 0: - func_801094F8(arg0, arg1, arg2); - return; - case 1: - func_801095DC(arg0, arg1, arg2); - return; - default: - *arg2 = 0; - *arg1 = 0; - return; +void func_801097C8(s32 mapId, s32* arg1, s32* arg2) { + switch (func_80109714(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + func_801094F8(mapId, arg1, arg2); + return; + case MAPDATA_MID_GRAND_MAP_STATIC: + func_801095DC(mapId, arg1, arg2); + return; + default: + *arg2 = 0; + *arg1 = 0; + return; } } -void func_8010983C(s32 arg0, s32 *arg1) { - switch(func_80109714(arg0)){ +void MapData_GetMapScale(s32 mapId, s32* scale) { + switch (func_80109714(mapId)) { + default: + *scale = 0; + return; + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + *scale = func_8010956C(mapId); + return; + case MAPDATA_MID_GRAND_MAP_STATIC: + *scale = func_80109650(mapId); + return; + } +} + +void func_801098A0(s32 mapId, s32* arg1) { + switch (func_80109714(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + func_80109528(mapId, arg1); + return; + case MAPDATA_MID_GRAND_MAP_STATIC: + func_8010960C(mapId, arg1); + return; default: *arg1 = 0; return; - case 0: - *arg1 = func_8010956C(arg0); - return; - case 1: - *arg1 = func_80109650(arg0); - return; } } -void func_801098A0(s32 arg0, s32* arg1) { - switch (func_80109714(arg0)) { - case 0: - func_80109528(arg0, arg1); - return; - case 1: - func_8010960C(arg0, arg1); - return; - default: - *arg1 = 0; - return; - } -} - -//return some color index? -u8 func_80109908(s32 arg0) { - switch (func_80109714(arg0)) { - case 0: - return func_8010954C(arg0); - case 1: - return func_80109630(arg0); - default: - return 0; +// return some color index? +u8 func_80109908(s32 mapId) { + switch (func_80109714(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + return func_8010954C(mapId); + case MAPDATA_MID_GRAND_MAP_STATIC: + return func_80109630(mapId); + default: + return 0; } } @@ -169,8 +272,8 @@ void func_8010997C(s32 arg0, s32* arg1, s32* arg2) { } void func_801099AC(s32 arg0, s32* arg1, s32* arg2) { - *arg1 = D_801BF170[arg0].unk2; - *arg2 = D_801BF170[arg0].unk4; + *arg1 = D_801BF170[arg0].unk2; + *arg2 = D_801BF170[arg0].unk4; } void func_801099DC(s32 arg0, s32* arg1) { @@ -191,8 +294,7 @@ s32 func_80109A40(s32 arg0) { s32 var_s1; var_s1 = 0; - for (var_s0 = 1; var_s0 < arg0+1; var_s0++) - { + for (var_s0 = 1; var_s0 < arg0 + 1; var_s0++) { var_s1 += func_80109A98(var_s0 - 1); } @@ -203,177 +305,178 @@ s32 func_80109A98(s32 arg0) { return (D_801BF170[arg0].unk0 * D_801BF170[arg0].unk1) / 2; } -s32 func_80109AD8(s32 arg0) { - switch (func_80109714(arg0)) { - case 0: - return D_801BF3B4[arg0]; - case 1: - return D_801BEFC8[arg0]; - default: - return 0; +s32 func_80109AD8(s32 mapId) { + switch (func_80109714(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + return D_801BF3B4[mapId]; + case MAPDATA_MID_GRAND_MAP_STATIC: + return D_801BF3C8[mapId - 0x100]; + default: + return 0; } } -s32 func_80109B38(s32 arg0) { - if (func_80109AD8(arg0) != 0x3A) { +s32 func_80109B38(s32 mapId) { + if (func_80109AD8(mapId) != 0x3A) { return 1; } - switch (func_80109714(arg0)) { - case 0: - return 2; - case 1: - return 0; - default: - return 0; + switch (func_80109714(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + return 2; + case MAPDATA_MID_GRAND_MAP_STATIC: + return 0; + default: + return 0; } } -s32 func_80109BA0(s32 arg0) { - s32 temp_v0 = func_80109AD8(arg0); +s32 func_80109BA0(s32 mapId) { + s32 temp_v0 = func_80109AD8(mapId); if (temp_v0 != 0x3A) { return temp_v0; } - if ((arg0 >= 0x100) && (arg0 < 0x162)) { - return arg0 - 0xC6; + if ((mapId >= 0x100) && (mapId < 0x162)) { + return mapId - 0xC6; } return -1; } -s32 func_80109BF4(s32 arg0) { - if (arg0 == -1) { - return 2; +s32 func_80109BF4(s32 mapCompactId) { + if (mapCompactId == -1) { + return MAPDATA_CPID_2; } - if (arg0 < 0x3A) { - return MAPDATA_SOURCE_MAP_I_STATIC; + if (mapCompactId < 0x3A) { + return MAPDATA_CPID_MAP_I_STATIC; } - if (arg0 >= 0x3A) { - return 0; + if (mapCompactId >= 0x3A) { + return MAPDATA_CPID_GRAND_MAP_STATIC; } - return 2; + return MAPDATA_CPID_2; } -s32 func_80109C38(s32 arg0) { - if (arg0 == -1) { +s32 func_80109C38(s32 mapCompactId) { + if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(arg0)) { - case 0: - return func_80109670(arg0 + 0xC6); - case MAPDATA_SOURCE_MAP_I_STATIC: - return func_80109A40(arg0); - case 2: - return 0; - default: - return 0; + switch (func_80109BF4(mapCompactId)) { + case MAPDATA_CPID_GRAND_MAP_STATIC: + return func_80109670(mapCompactId + 0xC6); + case MAPDATA_CPID_MAP_I_STATIC: + return func_80109A40(mapCompactId); + case MAPDATA_CPID_2: + return 0; + default: + return 0; } } -s32 MapData_GetIMapSize(s32 arg0) { - if (arg0 == -1) { +s32 MapData_GetMapSize(s32 mapCompactId) { + if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(arg0)) { - case 0: - return func_801096D4(arg0 + 0xC6); - case MAPDATA_SOURCE_MAP_I_STATIC: - return func_80109A98(arg0); - case 2: - return 0; - default: - return 0; + switch (func_80109BF4(mapCompactId)) { + case MAPDATA_CPID_GRAND_MAP_STATIC: + return func_801096D4(mapCompactId + 0xC6); + case MAPDATA_CPID_MAP_I_STATIC: + return func_80109A98(mapCompactId); + case MAPDATA_CPID_2: + return 0; + default: + return 0; } } -void func_80109D40(s32 arg0, s32* arg1, s32* arg2) { - if (arg0 == -1) { +void func_80109D40(s32 mapCompactId, s32* arg1, s32* arg2) { + if (mapCompactId == -1) { *arg2 = 0; *arg1 = 0; return; } - switch (func_80109BF4(arg0)) { - case 0: - func_801095AC(arg0 + 0xC6, arg1, arg2); - return; - case MAPDATA_SOURCE_MAP_I_STATIC: - func_8010997C(arg0, arg1, arg2); - return; - case 2: - default: - *arg2 = 0; - *arg1 = 0; - return; + switch (func_80109BF4(mapCompactId)) { + case MAPDATA_CPID_GRAND_MAP_STATIC: + // id base 0x100 + func_801095AC(mapCompactId + 0xC6, arg1, arg2); + return; + case MAPDATA_CPID_MAP_I_STATIC: + func_8010997C(mapCompactId, arg1, arg2); + return; + case MAPDATA_CPID_2: + default: + *arg2 = 0; + *arg1 = 0; + return; } } -void func_80109DD8(s32 arg0, s32* arg1, s32* arg2) { +void func_80109DD8(s32 mapCompactId, s32* arg1, s32* arg2) { s32 temp_v0; - if (arg0 == -1) { + if (mapCompactId == -1) { *arg2 = 0; *arg1 = 0; return; } - switch (func_80109BF4(arg0)) { - case 0: - func_801095DC(arg0 + 0xC6, arg1, arg2); - return; - case MAPDATA_SOURCE_MAP_I_STATIC: - func_801099AC(arg0, arg1, arg2); - return; - case 2: - default: - *arg2 = 0; - *arg1 = 0; - return; + switch (func_80109BF4(mapCompactId)) { + case MAPDATA_CPID_GRAND_MAP_STATIC: + func_801095DC(mapCompactId + 0xC6, arg1, arg2); + return; + case MAPDATA_CPID_MAP_I_STATIC: + func_801099AC(mapCompactId, arg1, arg2); + return; + case MAPDATA_CPID_2: + default: + *arg2 = 0; + *arg1 = 0; + return; } } -void func_80109E70(s32 arg0, s32* arg1) { - if (arg0 == -1) { +void func_80109E70(s32 mapCompactId, s32* arg1) { + if (mapCompactId == -1) { *arg1 = 0; return; } - switch (func_80109BF4(arg0)) { - case 0: - func_8010960C(arg0 + 0xC6, arg1); - return; - case MAPDATA_SOURCE_MAP_I_STATIC: - func_801099DC(arg0, arg1); - return; - case 2: - default: - *arg1 = 0; - return; + switch (func_80109BF4(mapCompactId)) { + case MAPDATA_CPID_GRAND_MAP_STATIC: + func_8010960C(mapCompactId + 0xC6, arg1); + return; + case MAPDATA_CPID_MAP_I_STATIC: + func_801099DC(mapCompactId, arg1); + return; + case MAPDATA_CPID_2: + default: + *arg1 = 0; + return; } } -u8 func_80109EF8(s32 arg0) { - if (arg0 == -1) { +u8 func_80109EF8(s32 mapCompactId) { + if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(arg0)) { - case 0: - return func_80109630(arg0 + 0xC6); - case MAPDATA_SOURCE_MAP_I_STATIC: - return func_80109A00(arg0); - case 2: - default: - return 0; + switch (func_80109BF4(mapCompactId)) { + case MAPDATA_CPID_GRAND_MAP_STATIC: + return func_80109630(mapCompactId + 0xC6); + case MAPDATA_CPID_MAP_I_STATIC: + return func_80109A00(mapCompactId); + case MAPDATA_CPID_2: + default: + return 0; } } -s16 func_80109F78(s32 arg0) { - if (arg0 == -1) { +s16 func_80109F78(s32 mapCompactId) { + if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(arg0)) { - case 0: - return func_80109650(arg0 + 0xC6); - case MAPDATA_SOURCE_MAP_I_STATIC: - return func_80109A20(arg0); - case 2: - default: - return 0; + switch (func_80109BF4(mapCompactId)) { + case MAPDATA_CPID_GRAND_MAP_STATIC: + return func_80109650(mapCompactId + 0xC6); + case MAPDATA_CPID_MAP_I_STATIC: + return func_80109A20(mapCompactId); + case MAPDATA_CPID_2: + default: + return 0; } } diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 09c54f321..417f6aab6 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -3,40 +3,38 @@ void MapDisp_DestroyIMap(PlayState* play); void MapDisp_InitIMap(PlayState* play); -extern s32 D_801BEAD0[4]; // G_IM_SIZ -extern s32 D_801BEAE0[4]; // siz_LOAD_BLOCK -extern u32 D_801BEAF0[4]; // siz_INCR -extern s32 D_801BEB00[4]; // siz_SHIFT -extern u32 D_801BEB10[4]; // siz_BYTES -extern u32 D_801BEB20[4]; // siz_LINE_BYTES - -extern TexturePtr D_801BEB38; -extern T_801BEBB8 D_801BEBB8; -extern s16 D_801BEBFA; // D_801BEBB8.unk42 - -extern MinimapList D_801BEC14; //D_801F5130 -extern s32 D_801BEC1C; //current scene's no. of rooms -extern s32 D_801BEC20; //MinimapChest count -extern TransitionActorList D_801BEC24; -extern Color_RGBA8 D_801BEC2C[12]; // cat colors -extern T_801BEC5C D_801BEC5C[5]; -extern T_801BEC70 D_801BEC70; -extern u16 D_801BEC84[0x10]; //palette 0 -extern u16 D_801BECA4[0x10]; //palette 1 -extern u16 D_801BECC4[0x10]; //palette 2 -extern TexturePtr D_801BECE4[6]; -extern TexturePtr D_801BED00[9]; -extern T_801BED24 D_801BED24[2]; +extern s32 D_801BEAD0[4]; // G_IM_SIZ +extern s32 D_801BEAE0[4]; // siz_LOAD_BLOCK +extern u32 D_801BEAF0[4]; // siz_INCR +extern s32 D_801BEB00[4]; // siz_SHIFT +extern u32 D_801BEB10[4]; // siz_BYTES +extern u32 D_801BEB20[4]; // siz_LINE_BYTES +extern TexturePtr D_801BEB38; +extern T_801BEBB8 D_801BEBB8; +extern s16 D_801BEBFA; // D_801BEBB8.unk42 +extern MinimapList D_801BEC14; // D_801F5130 +extern s32 D_801BEC1C; // current scene's no. of rooms +extern s32 D_801BEC20; // MinimapChest count +extern TransitionActorList D_801BEC24; +extern Color_RGBA8 D_801BEC2C[12]; // cat colors +extern T_801BEC5C D_801BEC5C[5]; +extern T_801BEC70 D_801BEC70; +extern u16 D_801BEC84[0x10]; // palette 0 +extern u16 D_801BECA4[0x10]; // palette 1 +extern u16 D_801BECC4[0x10]; // palette 2 +extern TexturePtr D_801BECE4[6]; +extern TexturePtr D_801BED00[9]; +extern T_801BED24 D_801BED24[2]; extern MinimapEntry D_801F5130[0x50]; extern MinimapChest D_801F5270[32]; extern TransitionActorEntry D_801F53B0[48]; -extern T_801F56B0 D_801F56B0; +extern T_801F56B0 D_801F56B0; -extern TexturePtr D_02002460; -extern TexturePtr D_02003F20; -extern Gfx D_0401ED00[]; -extern TexturePtr D_0C000000; +extern TexturePtr D_02002460; +extern TexturePtr D_02003F20; +extern Gfx D_0401ED00[]; +extern TexturePtr D_0C000000; void MapDisp_GetIMapTexture(void* dst, s32 iMapId) { if (func_80109A98(iMapId) != 0) { @@ -49,7 +47,6 @@ void func_80102E90(PlayState* play, s16* arg1) { } void func_80102EA4(PlayState* play, s16* arg1) { - } void func_80102EB4(u32 param_1) { @@ -72,10 +69,10 @@ s32 func_80102EF0(PlayState* play) { return false; } entry = &D_801BEBB8.unk0->entry[curRoom]; - if (entry->unk0 == 0xFFFF) { + if (entry->mapId == 0xFFFF) { return false; } - if (func_80109AD8(entry->unk0) == 0x3A) { + if (func_80109AD8(entry->mapId) == 0x3A) { return false; } return true; @@ -84,8 +81,8 @@ s32 func_80102EF0(PlayState* play) { f32 func_80102F9C(f32 arg0) { s32 i; - if ((D_801BEBB8.unk48[D_801BEBB8.unk40-1] - 80.0f) < arg0) { - return D_801BEBB8.unk48[D_801BEBB8.unk40-1]; + if ((D_801BEBB8.unk48[D_801BEBB8.unk40 - 1] - 80.0f) < arg0) { + return D_801BEBB8.unk48[D_801BEBB8.unk40 - 1]; } for (i = D_801BEBB8.unk40 - 2; i >= 0; i--) { if (((D_801BEBB8.unk48[i] - 80.0f) < arg0) && (arg0 < (D_801BEBB8.unk48[i + 1] + 80.0f))) { @@ -98,14 +95,14 @@ f32 func_80102F9C(f32 arg0) { return 0.0f; } -void func_80103090(MinimapEntry* arg0, s32* out1, s32* out2){ - func_80109754(arg0->unk0, out1, out2); +void func_80103090(MinimapEntry* arg0, s32* out1, s32* out2) { + func_80109754(arg0->mapId, out1, out2); } -void func_801030B4(MinimapEntry *arg0, s32 *arg1) { - func_8010983C(arg0->unk0, arg1); - if (*arg1 == 0) { - *arg1 = 0x14; +void MapDisp_GetMapScale(MinimapEntry* arg0, s32* scale) { + MapData_GetMapScale(arg0->mapId, scale); + if (*scale == 0) { + *scale = 20; } } @@ -115,13 +112,13 @@ void func_801030F4(MinimapEntry* arg0, s32* arg1, s32* arg2) { s32 temp_v0; s32 temp_v0_2; - if (arg0->unk0 == 0xFFFF) { + if (arg0->mapId == 0xFFFF) { *arg1 = 0; *arg2 = 0; return; } func_80103090(arg0, &sp2C, &sp28); - func_801097C8(arg0->unk0, arg1, arg2); + func_801097C8(arg0->mapId, arg1, arg2); if (arg0->unk8 & 1) { temp_v0 = sp2C / 2; *arg1 = (temp_v0 - *arg1) + temp_v0; @@ -151,27 +148,32 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg s32 spA8; spCC = &D_801BEBB8.unk0->entry[arg4]; - if ((spCC->unk0 != 0xFFFF) && (arg1 != 0)) { + if ((spCC->mapId != 0xFFFF) && (arg1 != 0)) { func_80103090(spCC, &spC8, &spC4); OPEN_DISPS(play->state.gfxCtx); func_8012C654(play->state.gfxCtx); - func_801094A0(func_80109908(spCC->unk0), &spAC); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC.r, spAC.g, spAC.b, (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC.a / 255.0f)); - func_801098A0(spCC->unk0, &spA8); + func_801094A0(func_80109908(spCC->mapId), &spAC); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC.r, spAC.g, spAC.b, + (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC.a / 255.0f)); + func_801098A0(spCC->mapId, &spA8); switch (spA8) { - case 1: - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_IA, spC8, spC4, 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); - break; - case 3: - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); - break; - default: - case 0: - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); - break; + case 1: + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_IA, spC8, spC4, 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); + break; + case 3: + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, + TEXEL0); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); + break; + default: + case 0: + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); + break; } var_t1 = (spCC->unk8 & 1) ? (spC8 - 1) << 5 : 0; @@ -189,7 +191,8 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg } else { var_a0_4 = (var_v1_5 << 0xA) & 0xFFFF; } - gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (spC8 + arg2) << 2, (arg3 + spC4) << 2, G_TX_RENDERTILE, var_t1, var_t0, var_a3, var_a0_4); + gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (spC8 + arg2) << 2, (arg3 + spC4) << 2, + G_TX_RENDERTILE, var_t1, var_t0, var_a3, var_a0_4); CLOSE_DISPS(play->state.gfxCtx); } } @@ -200,7 +203,7 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg // 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) { +s32 MapDisp_IsDataRotated(PlayState* play) { if (play->sceneNum == SCENE_35TAKI) { return true; } @@ -214,30 +217,25 @@ s32 func_80103A10(PlayState* play) { return true; } -#define gDPLoadTextureBlock_TEST(pkt, timg, fmt, siz_LOAD_BLOCK, siz_INCR, siz_SHIFT, siz_BYTES, siz_LINE_BYTES, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz_INCR) >> siz_SHIFT) -1, \ - CALC_DXT(width, siz_BYTES)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, \ - (((width) * siz_LINE_BYTES)+7)>>3, 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ -}) +#define gDPLoadTextureBlock_TEST(pkt, timg, fmt, siz_LOAD_BLOCK, siz_INCR, siz_SHIFT, siz_BYTES, siz_LINE_BYTES, siz, \ + width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + _DW({ \ + gDPSetTextureImage(pkt, fmt, siz_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, (((width) * (height) + siz_INCR) >> siz_SHIFT) - 1, \ + CALC_DXT(width, siz_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width)*siz_LINE_BYTES) + 7) >> 3, 0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, \ + cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ + }) #ifdef NON_MATCHING // https://decomp.me/scratch/TR5Jq -void func_80103A58(PlayState *play, Actor *actor) { - MinimapEntry *spDC; +void func_80103A58(PlayState* play, Actor* actor) { + MinimapEntry* spDC; s32 spD8; s32 spD4; s32 spD0; @@ -247,51 +245,57 @@ void func_80103A58(PlayState *play, Actor *actor) { f32 spC0; u32 pad; s32 var_v0; - Player *spB4; + Player* spB4; u32 pad2; s32 spAC; - //GraphicsContext *spA8; - + // GraphicsContext *spA8; + spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; spB4 = GET_PLAYER(play); - if (spDC->unk0 != 0xFFFF) { + if (spDC->mapId != 0xFFFF) { func_801030F4(spDC, &spD0, &spCC); func_80103090(spDC, &spC8, &spC4); - var_v0 = D_801BEBB8.unk0->unk4; - if (D_801BEBB8.unk0->unk4 == 0) { - var_v0 = 0x14; - } else if (D_801BEBB8.unk0->unk4 == -1) { - func_801030B4(spDC, &spAC); + var_v0 = D_801BEBB8.unk0->scale; + if (D_801BEBB8.unk0->scale == 0) { + var_v0 = 20; + } else if (D_801BEBB8.unk0->scale == -1) { + MapDisp_GetMapScale(spDC, &spAC); var_v0 = spAC; } - spC0 = 1.0f / (f32) var_v0; + spC0 = 1.0f / (f32)var_v0; 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; + 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 { - 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; + 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; } if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) { s16 spA2; - func_8012C8D4(play->state.gfxCtx); + func_8012C8D4(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); - Matrix_Translate((f32) spD8 - 160.0f, 120.0f - (f32) spD4, 0.0f, MTXMODE_NEW); + 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; + spA2 = (s32)(0x7FFF - actor->focus.rot.y) / 1024; if (MapDisp_IsDataRotated(play)) { spA2 += 0x7FFF; } - Matrix_RotateYF((f32) spA2 / 10.0f, MTXMODE_APPLY); + Matrix_RotateYF((f32)spA2 / 10.0f, MTXMODE_APPLY); Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha); gSPDisplayList(OVERLAY_DISP++, &D_0401ED00); return; @@ -306,14 +310,10 @@ void func_80103A58(PlayState *play, Actor *actor) { gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); gDPPipeSync(OVERLAY_DISP++); - gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, - D_801BEAE0[2], D_801BEAF0[2], D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); + gDPLoadTextureBlock_TEST( + OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], D_801BEB00[2], + D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); // gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 1, &D_02003F20); // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 0, 0x0000, G_TX_LOADTILE, 0, @@ -326,19 +326,20 @@ void func_80103A58(PlayState *play, Actor *actor) { // gDPLoadSync(OVERLAY_DISP++); // gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0, // ((D_801BEAF8 + 0x40) >> D_801BEB08) - 1, - // (((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18) + 0x7FF) + // (((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18) + 0x7FF) // / ((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18)); - // gDPPipeSync(OVERLAY_DISP++); + // gDPPipeSync(OVERLAY_DISP++); // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAD8, // ((D_801BEB28 * 8) + 7) >> 3, 0x0000, G_TX_RENDERTILE, 0, // G_TX_NOMIRROR | G_TX_WRAP, // cmt // G_TX_NOMASK, - // G_TX_NOLOD, - // G_TX_NOMIRROR | G_TX_WRAP, - // G_TX_NOMASK, + // G_TX_NOLOD, + // G_TX_NOMIRROR | G_TX_WRAP, + // G_TX_NOMASK, // G_TX_NOLOD); // gDPSetTileSize(OVERLAY_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); - gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, (spD4 + 4) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, + (spD4 + 4) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); return; } } @@ -346,8 +347,10 @@ void func_80103A58(PlayState *play, Actor *actor) { func_8012C654(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (actor->flags & 0x80000000) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, play->interfaceCtx.minimapAlpha); - gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 1) << 2, (spD4 - 1) << 2, (spD8 + 1) << 2, (spD4 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, + D_801BEC2C[actor->category].b, play->interfaceCtx.minimapAlpha); + gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 1) << 2, (spD4 - 1) << 2, (spD8 + 1) << 2, (spD4 + 1) << 2, + G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } CLOSE_DISPS(play->state.gfxCtx); } @@ -358,25 +361,25 @@ void func_80103A58(PlayState* play, Actor* actor); #pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A58.s") #endif -void func_8010439C(PlayState *play) { - ActorContext *actorCtx; +void func_8010439C(PlayState* play) { + ActorContext* actorCtx; s32 i; if (play->roomCtx.currRoom.num != -1) { OPEN_DISPS(play->state.gfxCtx); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); actorCtx = &play->actorCtx; for (i = 0; i < ACTORCAT_MAX; i++) { - Actor *actor = actorCtx->actorLists[i].first; + Actor* actor = actorCtx->actorLists[i].first; if (actor != NULL) { do { - if ( - (actor->update != NULL) - && (actor->init == NULL) - && (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) - && ((actor->id == ACTOR_EN_BOX) || (i == ACTORCAT_PLAYER) || (actor->flags & ACTOR_FLAG_80000000)) - && ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { + if ((actor->update != NULL) && (actor->init == NULL) && + (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) && + ((actor->id == ACTOR_EN_BOX) || (i == ACTORCAT_PLAYER) || + (actor->flags & ACTOR_FLAG_80000000)) && + ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { func_80103A58(play, actor); } actor = actor->next; @@ -400,55 +403,69 @@ void func_801045AC(PlayState* play, Actor* actor) { f32 temp_fv1; s32 var_v1; f32 sp50; - + player = GET_PLAYER(play); temp_fv1 = fabsf(player->actor.world.pos.y - actor->world.pos.y); - sp50 = 1.0f - (1 / 350.0f) * temp_fv1; + sp50 = 1.0f - (1 / 350.0f) * temp_fv1; if (sp50 < 0) { sp50 = 0.0f; } sp7C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; - if (sp7C->unk0 != 0xFFFF) { + if (sp7C->mapId != 0xFFFF) { func_801030F4(sp7C, &sp70, &sp6C); func_80103090(sp7C, &sp68, &sp64); - - var_v1 = D_801BEBB8.unk0->unk4; - if (D_801BEBB8.unk0->unk4 == 0) { - var_v1 = 0x14; - } else if (D_801BEBB8.unk0->unk4 == -1) { + + var_v1 = D_801BEBB8.unk0->scale; + if (D_801BEBB8.unk0->scale == 0) { + var_v1 = 20; + } else if (D_801BEBB8.unk0->scale == -1) { s32 sp4C; - func_801030B4(sp7C, &sp4C); + MapDisp_GetMapScale(sp7C, &sp4C); var_v1 = sp4C; } sp5C = 1.0f / var_v1; 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; + 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 { - sp78 = (((D_801BEBB8.unk8 - (s32) ((actor->world.pos.x - sp7C->unk2) * sp5C)) + D_801BEBB8.unkC) - D_801BEBB8.unk8) + sp70; - sp74 = (((D_801BEBB8.unkA - (s32) ((actor->world.pos.z - sp7C->unk6) * sp5C)) + D_801BEBB8.unkE) - D_801BEBB8.unkA) + sp6C; + sp78 = (((D_801BEBB8.unk8 - (s32)((actor->world.pos.x - sp7C->unk2) * sp5C)) + D_801BEBB8.unkC) - + D_801BEBB8.unk8) + + sp70; + sp74 = (((D_801BEBB8.unkA - (s32)((actor->world.pos.z - sp7C->unk6) * sp5C)) + D_801BEBB8.unkE) - + D_801BEBB8.unkA) + + sp6C; } - if ((sp78 > 0) && (sp78 < 0x3FF) && (sp74 > 0) && (sp74 < 0x3FF) ) { + if ((sp78 > 0) && (sp78 < 0x3FF) && (sp74 > 0) && (sp74 < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); func_8012C654(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - + if ((actor->category == 0xA) && (func_80103A10(play) != 0)) { s32 pad; - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, (s32)((D_801BEC2C[actor->category].a * (1.0f - D_801BEBB8.unk24 * 0.05f) * sp50 * play->interfaceCtx.minimapAlpha) / 255.0f)); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, + D_801BEC2C[actor->category].b, + (s32)((D_801BEC2C[actor->category].a * (1.0f - D_801BEBB8.unk24 * 0.05f) * sp50 * + play->interfaceCtx.minimapAlpha) / + 255.0f)); - var_v1 = D_801BEBB8.unk0->unk4; - if (D_801BEBB8.unk0->unk4 == 0) { - var_v1 = 0x14; - } else if (D_801BEBB8.unk0->unk4 == -1) { + var_v1 = D_801BEBB8.unk0->scale; + if (D_801BEBB8.unk0->scale == 0) { + var_v1 = 20; + } else if (D_801BEBB8.unk0->scale == -1) { s32 sp34; - func_801030B4(sp7C, &sp34); + MapDisp_GetMapScale(sp7C, &sp34); var_v1 = sp34; } if (var_v1 <= 50) { - gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 2) << 2, (sp74 - 2) << 2, (sp78 + 2) << 2, (sp74 + 2) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 2) << 2, (sp74 - 2) << 2, (sp78 + 2) << 2, + (sp74 + 2) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } else { - gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 1) << 2, (sp74 - 1) << 2, (sp78 + 1) << 2, (sp74 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 1) << 2, (sp74 - 1) << 2, (sp78 + 1) << 2, + (sp74 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } } CLOSE_DISPS(play->state.gfxCtx); @@ -456,22 +473,21 @@ void func_801045AC(PlayState* play, Actor* actor) { } } -void func_80104AE8(PlayState *play) { +void func_80104AE8(PlayState* play) { s32 i; Actor* actor; if (play->roomCtx.currRoom.num != -1) { OPEN_DISPS(play->state.gfxCtx); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); actor = play->actorCtx.actorLists[ACTORCAT_DOOR].first; if (actor != NULL) { do { - if ( - (actor->update != NULL) - && (actor->init == NULL) - && Object_IsLoaded(&play->objectCtx, actor->objBankIndex) - && ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { + if ((actor->update != NULL) && (actor->init == NULL) && + Object_IsLoaded(&play->objectCtx, actor->objBankIndex) && + ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { func_801045AC(play, actor); } actor = actor->next; @@ -481,19 +497,16 @@ void func_80104AE8(PlayState *play) { } } -//Possible fakematch -//https://decomp.me/scratch/kvGBZ +// Possible fakematch +// https://decomp.me/scratch/kvGBZ void func_80104C80(PlayState* play) { s32 objBankIndex; objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP); if (objBankIndex < 0) { D_801BEBB8.unk20 |= 1; - } - else - { - do { } while (!Object_IsLoaded(&play->objectCtx, objBankIndex)); - } + } else { + do { } while (!Object_IsLoaded(&play->objectCtx, objBankIndex)); } if (&play->objectCtx) {} } @@ -513,7 +526,7 @@ void MapDisp_Init(PlayState* play) { D_801BEBB8.unk1E = 0; D_801BEBB8.unk20 = 0; D_801BEBB8.unk24 = 0; - + if (!Map_IsInBossArea(play)) { D_801BEC1C = play->numRooms; } @@ -525,8 +538,8 @@ void MapDisp_Init(PlayState* play) { D_801BEBB8.unk32 = 0; D_801BEBB8.unk34 = 0x64; D_801BEBB8.unk36 = 0x64; - D_801BEBB8.unk38 = (s16) (s32) ((f32) D_801BEBB8.unk30 + ((f32) D_801BEBB8.unk34 * 0.5f)); - D_801BEBB8.unk3A = (s16) (s32) ((f32) D_801BEBB8.unk32 + ((f32) D_801BEBB8.unk36 * 0.5f)); + D_801BEBB8.unk38 = (s16)(s32)((f32)D_801BEBB8.unk30 + ((f32)D_801BEBB8.unk34 * 0.5f)); + D_801BEBB8.unk3A = (s16)(s32)((f32)D_801BEBB8.unk32 + ((f32)D_801BEBB8.unk36 * 0.5f)); } D_801BEBB8.unk3C = THA_AllocEndAlign16(&play->state.heap, D_801BEC1C * sizeof(s16)); @@ -534,9 +547,8 @@ void MapDisp_Init(PlayState* play) { func_80102E90(play, &D_801BEBB8.unk3C[i]); } D_801BEBB8.unk48 = THA_AllocEndAlign16(&play->state.heap, 32 * sizeof(s16)); - - for (i = 0; i < 32; i++) - { + + for (i = 0; i < 32; i++) { D_801BEBB8.unk48[i] = -0x7FFF; } MapDisp_InitIMap(play); @@ -554,20 +566,20 @@ void func_80104F34(PlayState* play) { s32 i3; s32 i4; - for (i1 = 0; i1 < 32; i1++){ + for (i1 = 0; i1 < 32; i1++) { D_801BEBB8.unk48[i1] = -0x7FFF; } for (i2 = 0; i2 < D_801BEC1C; i2++) { MinimapEntry* mapEntry1 = &D_801BEBB8.unk0->entry[i2]; - - if (mapEntry1->unk0 == 0xFFFF) { + + if (mapEntry1->mapId == 0xFFFF) { continue; } for (i1 = 0; i1 < 32; i1++) { if (D_801BEBB8.unk48[i1] == -0x7FFF) { D_801BEBB8.unk48[i1] = mapEntry1->unk4; break; - } else if(fabsf((f32) D_801BEBB8.unk48[i1] - (f32) mapEntry1->unk4) < 5.0f) { + } else if (fabsf((f32)D_801BEBB8.unk48[i1] - (f32)mapEntry1->unk4) < 5.0f) { break; } } @@ -575,14 +587,14 @@ void func_80104F34(PlayState* play) { for (i2 = 0; i2 < D_801BEC1C; i2++) { if (D_801BEBB8.unk48[i2] == -0x7FFF) { break; - } - for (i3 = i2+1; i3 < D_801BEC1C; i3++) { + } + for (i3 = i2 + 1; i3 < D_801BEC1C; i3++) { if (D_801BEBB8.unk48[i3] == -0x7FFF) { break; } if (D_801BEBB8.unk48[i3] < D_801BEBB8.unk48[i2]) { s16 temp_t3 = D_801BEBB8.unk48[i2]; - + D_801BEBB8.unk48[i2] = D_801BEBB8.unk48[i3]; D_801BEBB8.unk48[i3] = temp_t3; } @@ -590,12 +602,12 @@ void func_80104F34(PlayState* play) { } for (i2 = 0; i2 < D_801BEC1C; i2++) { MinimapEntry* mapEntry2 = &D_801BEBB8.unk0->entry[i2]; - + D_801BEBB8.unk3C[i2] = -1; for (i4 = 0; i4 < D_801BEC1C; i4++) { if (D_801BEBB8.unk48[i4] != -0x7FFF) { - if (fabsf((f32) D_801BEBB8.unk48[i4] - (f32) mapEntry2->unk4) < 5.0f) { + if (fabsf((f32)D_801BEBB8.unk48[i4] - (f32)mapEntry2->unk4) < 5.0f) { D_801BEBB8.unk3C[i2] = i4; break; } @@ -618,7 +630,7 @@ void func_80104F34(PlayState* play) { s32 func_80105294(void) { T_801BEC70 sp4 = D_801BEC70; - + if ((D_801BEBB8.unk0 == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || (D_801BEC1C == 0)) { return 0x7B; } @@ -638,7 +650,7 @@ s32 func_80105328(s32 params) { } void func_8010534C(PlayState* play) { - TransitionActorList* transitionActors; + TransitionActorList* transitionActors; TransitionActorEntry* var_s0; s32 var_v0; s32 var_s2; @@ -650,13 +662,11 @@ void func_8010534C(PlayState* play) { if (ABS_ALT(D_801F53B0[var_s2].id) != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { s32 temp = (D_801BEBB8.unk48[var_v0] - 5); // needed for matching - if ( - ( (var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) ) - || ( - (var_v0 != D_801BEBB8.unk40 - 1) && - (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && - (D_801F53B0[var_s2].pos.y < (D_801BEBB8.unk48[var_v0+1] - 5)) - )) { + if (((var_v0 == D_801BEBB8.unk40 - 1) && + (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) || + ((var_v0 != D_801BEBB8.unk40 - 1) && + (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && + (D_801F53B0[var_s2].pos.y < (D_801BEBB8.unk48[var_v0 + 1] - 5)))) { D_801BEBB8.unk58 = var_v0; return; } @@ -678,11 +688,10 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) { D_801BEC14 = *temp_v0; var_v1 = Lib_SegmentedToVirtual(temp_v0->entry); - for (i = 0; i < D_801BEC1C; i++) - { + for (i = 0; i < D_801BEC1C; i++) { D_801F5130[i] = *var_v1++; } - + D_801BEC14.entry = D_801F5130; if (globalCtx->colCtx.colHeader != NULL) { D_801BEBB8.unk30 = globalCtx->colCtx.colHeader->minBounds.x; @@ -718,8 +727,7 @@ void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionAct if (Map_IsInBossArea(play) == 0) { D_801BEC24.count = num; - for (i = 0; i < num; i++) - { + for (i = 0; i < num; i++) { D_801F53B0[i] = transitionActorList[i]; } D_801BEC24.list = D_801F53B0; @@ -742,7 +750,7 @@ void MapDisp_Destroy(PlayState* play) { D_801BEBB8.unk24 = 0; D_801BEBB8.unk28 = NULL; D_801BEBB8.unk2C = NULL; - + for (i = 0; i < D_801BEC1C; i++) { func_80102EA4(play, &D_801BEBB8.unk3C[i]); } @@ -759,7 +767,6 @@ void MapDisp_Destroy(PlayState* play) { D_801BEBB8.unk5A = 0; } - void func_80105B34(PlayState* play) { s16 temp_a0; s16 temp_a0_2; @@ -775,12 +782,12 @@ void func_80105B34(PlayState* play) { temp_v1 = D_801BEBB8.unk8; temp_a0 = D_801BEBB8.unkC; if (temp_v1 != temp_a0) { - D_801BEBB8.unkC = (s16) (s32) (((f32) (temp_v1 - temp_a0) / (f32) temp_v0) + (f32) temp_a0); + D_801BEBB8.unkC = (s16)(s32)(((f32)(temp_v1 - temp_a0) / (f32)temp_v0) + (f32)temp_a0); } temp_v1_2 = D_801BEBB8.unkA; temp_a0_2 = D_801BEBB8.unkE; if (temp_v1_2 != temp_a0_2) { - D_801BEBB8.unkE = (s16) (s32) (((f32) (temp_v1_2 - temp_a0_2) / (f32) temp_v0) + (f32) temp_a0_2); + D_801BEBB8.unkE = (s16)(s32)(((f32)(temp_v1_2 - temp_a0_2) / (f32)temp_v0) + (f32)temp_a0_2); } D_801BEBB8.unk24 = temp_v0 - 1; return; @@ -795,7 +802,7 @@ void func_80105B34(PlayState* play) { } } -void func_80105C40(s16 arg0) { +void func_80105C40(s16 room) { MinimapEntry* temp_s0; MinimapEntry* sp58; s32 sp54; @@ -805,97 +812,94 @@ void func_80105C40(s16 arg0) { s32 sp44; s32 sp40; - if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (arg0 != -1)) { - temp_s0 = &D_801BEBB8.unk0->entry[arg0]; - if ( ( temp_s0->unk0 < 5) || (( temp_s0->unk0 >= 0x100) && ( temp_s0->unk0 < 0x162)) || temp_s0->unk0 == 0xFFFF) { - - D_801BEBB8.prevRoom = D_801BEBB8.curRoom; - D_801BEBB8.curRoom = arg0; - D_801BEBB8.unk24 = 0x14; + if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (room != -1)) { + temp_s0 = &D_801BEBB8.unk0->entry[room]; + if ((temp_s0->mapId < 5) || ((temp_s0->mapId >= 0x100) && (temp_s0->mapId < 0x162)) || + temp_s0->mapId == 0xFFFF) { - D_801BEBB8.unk18 = D_801BEBB8.unk10; - sp54 = D_801BEBB8.unk8; - sp50 = D_801BEBB8.unkA; + D_801BEBB8.prevRoom = D_801BEBB8.curRoom; + D_801BEBB8.curRoom = room; + D_801BEBB8.unk24 = 0x14; - temp_s0 = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; + D_801BEBB8.unk18 = D_801BEBB8.unk10; + sp54 = D_801BEBB8.unk8; + sp50 = D_801BEBB8.unkA; - if (temp_s0->unk0 == 0xFFFF) { - D_801BEBB8.unk1E = 0; - D_801BEBB8.unk8 = 0xD2; - D_801BEBB8.unkA = 0x8C; - D_801BEBB8.unkC = 0xD2; - D_801BEBB8.unkE = 0x8C; - D_801BEBB8.unk10 = NULL; - D_801BEBB8.unk1C = D_801BEBB8.unk1E; - return; - } - func_801030F4(temp_s0, &sp44, &sp40); - func_80103090(temp_s0, &sp4C, &sp48); - D_801BEBB8.unk8 = 0x127 - sp4C; - D_801BEBB8.unkA = 0xDC - sp48; - if (D_801BEBB8.prevRoom != -1) { - sp58 = &D_801BEBB8.unk0->entry[D_801BEBB8.prevRoom]; - if (sp58->unk0 == 0xFFFF) { + temp_s0 = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; + + if (temp_s0->mapId == 0xFFFF) { D_801BEBB8.unk1E = 0; + D_801BEBB8.unk8 = 0xD2; + D_801BEBB8.unkA = 0x8C; + D_801BEBB8.unkC = 0xD2; + D_801BEBB8.unkE = 0x8C; D_801BEBB8.unk10 = NULL; D_801BEBB8.unk1C = D_801BEBB8.unk1E; - D_801BEBB8.unkC = D_801BEBB8.unk8; - D_801BEBB8.unkE = D_801BEBB8.unkA; return; } - 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; + func_801030F4(temp_s0, &sp44, &sp40); + func_80103090(temp_s0, &sp4C, &sp48); + D_801BEBB8.unk8 = 0x127 - sp4C; + D_801BEBB8.unkA = 0xDC - sp48; + if (D_801BEBB8.prevRoom != -1) { + sp58 = &D_801BEBB8.unk0->entry[D_801BEBB8.prevRoom]; + if (sp58->mapId == 0xFFFF) { + D_801BEBB8.unk1E = 0; + D_801BEBB8.unk10 = NULL; + D_801BEBB8.unk1C = D_801BEBB8.unk1E; + D_801BEBB8.unkC = D_801BEBB8.unk8; + D_801BEBB8.unkE = D_801BEBB8.unkA; + return; + } else { + s32 sp3C; + s32 sp38; + s32 var_v0; + s32 pad; + func_801030F4(sp58, &sp3C, &sp38); + var_v0 = D_801BEBB8.unk0->scale; + if (D_801BEBB8.unk0->scale == 0) { + var_v0 = 20; + } else if (D_801BEBB8.unk0->scale == -1) { + s32 sp2C; + MapDisp_GetMapScale(temp_s0, &sp2C); + var_v0 = sp2C; + } + 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; - D_801BEBB8.unkC = D_801BEBB8.unk8; - D_801BEBB8.unkE = D_801BEBB8.unkA; - } - D_801BEBB8.unk10 = NULL; - - switch (func_80109714(temp_s0->unk0)) { - case 0: - D_801BEBB8.unk10 = func_8010958C(temp_s0->unk0); - return; - case 1: - if (D_801BEBB8.unk18 == D_801BEBB8.unk28) { - D_801BEBB8.unk10 = D_801BEBB8.unk2C; } else { - D_801BEBB8.unk10 = D_801BEBB8.unk28; + D_801BEBB8.unk1C = D_801BEBB8.unk1E = 0; + D_801BEBB8.unkC = D_801BEBB8.unk8; + D_801BEBB8.unkE = D_801BEBB8.unkA; } - if (func_801096D4(temp_s0->unk0) != 0) { - func_80178E3C(SEGMENT_ROM_START(map_grand_static), - temp_s0->unk0 - 0x100, - (s32) D_801BEBB8.unk10, - func_801096D4(temp_s0->unk0)); + D_801BEBB8.unk10 = NULL; + + switch (func_80109714(temp_s0->mapId)) { + case 0: + D_801BEBB8.unk10 = func_8010958C(temp_s0->mapId); + return; + case 1: + if (D_801BEBB8.unk18 == D_801BEBB8.unk28) { + D_801BEBB8.unk10 = D_801BEBB8.unk2C; + } else { + D_801BEBB8.unk10 = D_801BEBB8.unk28; + } + if (func_801096D4(temp_s0->mapId) != 0) { + func_80178E3C(SEGMENT_ROM_START(map_grand_static), temp_s0->mapId - 0x100, + (s32)D_801BEBB8.unk10, func_801096D4(temp_s0->mapId)); + } + break; } - break; } } - } } #ifdef NON_MATCHING -//https://decomp.me/scratch/WiRnZ +// https://decomp.me/scratch/WiRnZ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { MinimapEntry* sp6C; s32 sp68; @@ -907,35 +911,36 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { s32 var_v0; sp6C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; - if (sp6C->unk0 != 0xFFFF) { - f32 sp4C; + if (sp6C->mapId != 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 = D_801BEBB8.unk0->scale; + if (D_801BEBB8.unk0->scale == 0) { var_v0 = 20; - } else if (D_801BEBB8.unk0->unk4 == -1) { + } else if (D_801BEBB8.unk0->scale == -1) { s32 sp48; - func_801030B4(sp6C, &sp48); + MapDisp_GetMapScale(sp6C, &sp48); var_v0 = sp48; } sp4C = (1.0f / var_v0); 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; + 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 { - 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; + 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; } if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); func_8012C8D4(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); 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_Translate((f32)sp68 - 160.0f, 120.0f - (f32)sp64, 0.0f, MTXMODE_NEW); Matrix_RotateXFApply(-1.6f); if (MapDisp_IsDataRotated(play)) { rot += 0x7FFF; @@ -962,15 +967,16 @@ s32 func_80106408(PlayState* play) { } s32 func_80106450(PlayState* play) { - if (((func_8010A0A4(play) == 0) && (Inventory_IsMapVisible(play->sceneNum) != 0)) - || ((func_8010A0A4(play) != 0) && CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) )) { + if (((func_8010A0A4(play) == 0) && (Inventory_IsMapVisible(play->sceneNum) != 0)) || + ((func_8010A0A4(play) != 0) && CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex))) { return true; } return false; } s32 func_801064CC(PlayState* play) { - if (((play->csCtx.state != 0) && (func_80106408(play) == 0)) || (D_801BEBB8.unk20 & 2) || (Map_IsInBossArea(play) != 0)) { + if (((play->csCtx.state != 0) && (func_80106408(play) == 0)) || (D_801BEBB8.unk20 & 2) || + (Map_IsInBossArea(play) != 0)) { return true; } return false; @@ -984,38 +990,42 @@ s32 func_80106530(PlayState* play) { } s32 func_8010657C(s32 arg0, s32 arg1) { - MinimapEntry* temp_v1; + MinimapEntry* entry; s16* temp1; // Can be removed, but adds readability if ((arg0 == -1) || (arg1 == -1)) { return 0; } - temp_v1 = &D_801BEBB8.unk0->entry[arg0]; + entry = &D_801BEBB8.unk0->entry[arg0]; temp1 = D_801BEBB8.unk3C; - if ((temp1[arg0] <= temp1[arg1]) && (temp1[arg1] <= (temp1[arg0] + ((temp_v1->unk8 >> 2) & 7)))) { + if ((temp1[arg0] <= temp1[arg1]) && (temp1[arg1] <= (temp1[arg0] + ((entry->unk8 >> 2) & 7)))) { return 1; - } - temp_v1 = &D_801BEBB8.unk0->entry[arg1]; - if ((temp1[arg1] <= temp1[arg0]) && (temp1[arg0] <= (temp1[arg1] + ((temp_v1->unk8 >> 2) & 7)) )) { + } + entry = &D_801BEBB8.unk0->entry[arg1]; + if ((temp1[arg1] <= temp1[arg0]) && (temp1[arg0] <= (temp1[arg1] + ((entry->unk8 >> 2) & 7)))) { return 1; } return 0; } -void func_80106644(PlayState *play, s32 x, s32 z, s32 rot) { +void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { PauseContext* pauseCtx = &play->pauseCtx; - - if ((D_801BEBB8.unk0 != 0) && ((s32) pauseCtx->state < 4) && (XREG(95) == 0) && (play->interfaceCtx.minimapAlpha != 0)) { + + 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)); - if ((D_801BEBB8.curRoom != D_801BEBB8.prevRoom) && (func_8010657C(D_801BEBB8.curRoom, D_801BEBB8.prevRoom) != 0)) { - func_801031D0(play, D_801BEBB8.unk18, D_801BEBB8.unkC + D_801BEBB8.unk1C, D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.prevRoom, (f32) D_801BEBB8.unk24 * 0.05f); + func_801031D0(play, D_801BEBB8.unk10, D_801BEBB8.unkC, D_801BEBB8.unkE, D_801BEBB8.curRoom, + 1.0f - (D_801BEBB8.unk24 * 0.05f)); + if ((D_801BEBB8.curRoom != D_801BEBB8.prevRoom) && + (func_8010657C(D_801BEBB8.curRoom, D_801BEBB8.prevRoom) != 0)) { + func_801031D0(play, D_801BEBB8.unk18, D_801BEBB8.unkC + D_801BEBB8.unk1C, + D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.prevRoom, D_801BEBB8.unk24 * 0.05f); } func_80104AE8(play); } - if (((func_8010A0A4(play) == 0) || CHECK_DUNGEON_ITEM(1,gSaveContext.mapIndex ) ) - && ((func_8010A0A4(play) != 0) || Inventory_IsMapVisible(play->sceneNum))) { + 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); } @@ -1029,8 +1039,7 @@ void MapDisp_ResetIMap(void) { s32 i; D_801F56B0.rooms = 0; - for (i = 0; i < 32; i++) - { + for (i = 0; i < 32; i++) { D_801F56B0.unk4[i] = 0; D_801F56B0.unk84[i] = NULL; D_801F56B0.unk104[i] = NULL; @@ -1049,9 +1058,9 @@ void MapDisp_DestroyIMap(PlayState* play) { } #ifdef NON_MATCHING -//alloc pause screen dungeon map +// alloc pause screen dungeon map void* func_801068FC(PlayState* play, void* heap) { - void* heapNext; //sp3C + void* heapNext; // sp3C s32 temp_s2; s32 temp_v0; s32 var_s1; @@ -1066,14 +1075,14 @@ void* func_801068FC(PlayState* play, void* heap) { } D_801F56B0.rooms = 0; - //loop for number of rooms + // loop for number of rooms for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { var_s2 = 0; entry = &D_801BEBB8.unk0->entry[var_s4]; - if (entry->unk0 == 0xFFFF) { + if (entry->mapId == 0xFFFF) { continue; } else { - temp_v0 = func_80109BA0(entry->unk0); + temp_v0 = func_80109BA0(entry->mapId); if (temp_v0 == -1) { continue; } else { @@ -1096,18 +1105,18 @@ void* func_801068FC(PlayState* play, void* heap) { temp_s2 = D_801F56B0.unk4[var_s1]; 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)); + D_801F56B0.unk84[var_s1 + 1] = ALIGN16((intptr_t)D_801F56B0.unk84[var_s1] + MapData_GetMapSize(temp_s2)); } else { - heapNext = (intptr_t)D_801F56B0.unk84[var_s1] + MapData_GetIMapSize(temp_s2); + heapNext = (intptr_t)D_801F56B0.unk84[var_s1] + MapData_GetMapSize(temp_s2); } } for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { entry = &D_801BEBB8.unk0->entry[var_s4]; - if (entry->unk0 == 0xFFFF) { + if (entry->mapId == 0xFFFF) { D_801F56B0.unk104[var_s4] = NULL; } else { var_s3 = false; - temp_v0 = func_80109BA0(entry->unk0); + temp_v0 = func_80109BA0(entry->mapId); for (var_s1 = 0; var_s1 < D_801F56B0.rooms; var_s1++) { if (temp_v0 == D_801F56B0.unk4[var_s1]) { var_s3 = true; @@ -1128,13 +1137,11 @@ s32 func_80106BEC(s32 arg0, f32 arg1) { if ((D_801BEBB8.unk48[0] <= arg1) && ((D_801BEBB8.unk40 == 1) || (arg1 < D_801BEBB8.unk48[1]))) { return 1; } - } - else if (arg0 >= (D_801BEBB8.unk40 - 1)) { - if (D_801BEBB8.unk48[D_801BEBB8.unk40-1] <= arg1) { + } else if (arg0 >= (D_801BEBB8.unk40 - 1)) { + if (D_801BEBB8.unk48[D_801BEBB8.unk40 - 1] <= arg1) { return 1; } - } - else if ((D_801BEBB8.unk48[arg0] <= arg1) && (arg1 < D_801BEBB8.unk48[arg0+1])) { + } else if ((D_801BEBB8.unk48[arg0] <= arg1) && (arg1 < D_801BEBB8.unk48[arg0 + 1])) { return 1; } return 0; @@ -1142,30 +1149,28 @@ s32 func_80106BEC(s32 arg0, f32 arg1) { s32 func_80106D08(s32 sceneNum) { switch (sceneNum) { - case SCENE_MITURIN_BS: - return SCENE_MITURIN; - case SCENE_HAKUGIN_BS: - return SCENE_HAKUGIN; - case SCENE_SEA_BS: - return SCENE_SEA; - case SCENE_INISIE_BS: - return SCENE_INISIE_N; - default: - return sceneNum; + case SCENE_MITURIN_BS: + return SCENE_MITURIN; + case SCENE_HAKUGIN_BS: + return SCENE_HAKUGIN; + case SCENE_SEA_BS: + return SCENE_SEA; + case SCENE_INISIE_BS: + return SCENE_INISIE_N; + default: + return sceneNum; } } -#define COLOR16(r, g, b, a) (s16) \ - ( ((s32) (((r) * 31.0f) / 255.0f) << 11) \ - | ((s32) (((g) * 31.0f) / 255.0f) << 6) \ - | ((s32) (((b) * 31.0f) / 255.0f) << 1) \ - | (a)) \ +#define COLOR16(r, g, b, a) \ + (s16)(((s32)(((r)*31.0f) / 255.0f) << 11) | ((s32)(((g)*31.0f) / 255.0f) << 6) | \ + ((s32)(((b)*31.0f) / 255.0f) << 1) | (a)) #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) { PauseContext* pauseCtx = &play->pauseCtx; - //s32 var_a0; + // s32 var_a0; s32 var_a1_2; s32 var_a1_4; s32 var_a1_5; @@ -1178,14 +1183,10 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; - D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; //COLOR16(0, ((D_801F5834 * -120.0f) / 40.0f) + 200.0f, ((D_801F5834 * 115.0f) / 40.0f) + 140.0f, 1); - // ( - // 0 << 11 - // | ((s32) (((((D_801F5834 * -120.0f) / 40.0f) + 200.0f) * 31.0f) / 255.0f) << 6) - // | ((s32) (((((D_801F5834 * 115.0f) / 40.0f) + 140.0f) * 31.0f) / 255.0f) << 1) - // | 1); - if (CHECK_DUNGEON_ITEM(2, arg6)) {//*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { - //15, 15, F (172, 172, 123) + D_801BECC4[1] = + (temp1 << 6) | (temp2 << 1) | + 1; + if (CHECK_DUNGEON_ITEM(2, arg6)) { D_801BEC84[0xF] = 0xAD5F; D_801BECA4[0xF] = 0xAD5F; D_801BECC4[0xF] = 0xAD5F; @@ -1196,8 +1197,8 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } OPEN_DISPS(play->state.gfxCtx); - //temp_a0 = play->state.gfxCtx; - //sp48 = arg6 + &gSaveContext; + // temp_a0 = play->state.gfxCtx; + // sp48 = arg6 + &gSaveContext; func_8012C628(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, D_801BEC84); @@ -1221,18 +1222,18 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s32 spE8; s32 padE4; s32 padE0; - + sp108 = &D_801BEBB8.unk0->entry[var_s2]; - if ((sp108->unk0 != 0xFFFF) && (sp108->unk0 < 0x162)) { - if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) - && ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { + if ((sp108->mapId != 0xFFFF) && (sp108->mapId < 0x162)) { + if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) && + ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { temp_s1 = D_801F56B0.unk104[var_s2]; if (temp_s1 != NULL) { - spE8 = func_80109BA0(sp108->unk0); + spE8 = func_80109BA0(sp108->mapId); if (spE8 == -1) { continue; } else { - //sp3C = play + 0x18000; + // sp3C = play + 0x18000; func_80109D40(spE8, &sp118, &sp114); func_80109DD8(spE8, &sp110, &sp10C); if (sp108->unk8 & 1) { @@ -1251,24 +1252,37 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 spFC = 0; spF4 = 0x400; } - spF0 = ((sp108->unk2 - (f32) D_801BEBB8.unk38) * arg5 - sp110) + ((arg3 / 2) + arg1); - spEC = ((sp108->unk6 - (f32) D_801BEBB8.unk3A) * arg5 - sp10C) + ((arg4 / 2) + arg2); + spF0 = ((sp108->unk2 - (f32)D_801BEBB8.unk38) * arg5 - sp110) + ((arg3 / 2) + arg1); + spEC = ((sp108->unk6 - (f32)D_801BEBB8.unk3A) * arg5 - sp10C) + ((arg4 / 2) + arg2); if (var_s2 == play->roomCtx.currRoom.num) { if (Map_IsInBossArea(play) != 0) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } else { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 2, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 2, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } - } else if (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].rooms & (1 << var_s2)) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - } else if (CHECK_DUNGEON_ITEM(2, arg6)) { //*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 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); - } - else { + } else if (gSaveContext.save + .permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))] + .rooms & + (1 << var_s2)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else if (CHECK_DUNGEON_ITEM( + 2, + arg6)) { //*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 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); + } else { continue; } - gSPTextureRectangle(POLY_OPA_DISP++, (spF0 << 2), (spEC << 2), (spF0 + sp118) << 2, (spEC + sp114) << 2, 0, sp100, spFC, spF8, spF4); + gSPTextureRectangle(POLY_OPA_DISP++, (spF0 << 2), (spEC << 2), (spF0 + sp118) << 2, + (spEC + sp114) << 2, 0, sp100, spFC, spF8, spF4); gDPPipeSync(POLY_OPA_DISP++); } } @@ -1296,7 +1310,7 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s32 var_v1; s32 var_v1_2; - //temp_t0 = ; + // temp_t0 = ; if (D_801BEBB8.unk54 != NULL) { // temp_s1 = arg0->state.gfxCtx; OPEN_DISPS(arg0->state.gfxCtx); @@ -1373,38 +1387,36 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 // temp_v1_11 = temp_s1->polyOpa.p; // temp_s1->polyOpa.p = temp_v1_11 + 8; - // temp_v1_11->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) << 0x13); - // temp_v1_11->words.w1 = 0x00000000; + // temp_v1_11->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) + // << 0x13); temp_v1_11->words.w1 = 0x00000000; // temp_v1_12 = temp_s1->polyOpa.p; // temp_s1->polyOpa.p = temp_v1_12 + 8; // temp_v1_12->words.w0 = 0xF2000000; // temp_v1_12->words.w1 = 0x0001C01C; -// gDPSetTextureImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, 0x02003F20); -// gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); -// gDPLoadSync(POLY_OPA_DISP++); -// gDPLoadBlock(POLY_OPA_DISP++, G_TX_LOADTILE, 0, 0, 0, 0); -// gDPPipeSync(POLY_OPA_DISP++); -// gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); -// gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); + // gDPSetTextureImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, 0x02003F20); + // gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | + // G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + // gDPLoadSync(POLY_OPA_DISP++); + // gDPLoadBlock(POLY_OPA_DISP++, G_TX_LOADTILE, 0, 0, 0, 0); + // gDPPipeSync(POLY_OPA_DISP++); + // gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | + // G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + // gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); - gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, - D_801BEAE0[2], D_801BEAF0[2], D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); + gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], + D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); var_s3 = 0; var_s0 = D_801BEBB8.unk54; - //if (D_801BEBB8.unk50 > 0) { + // if (D_801BEBB8.unk50 > 0) { for (var_s3 = 0; var_s3 < D_801BEBB8.unk50; var_s3++) { - sp3C = var_s0[var_s3].unk0; - sp38 = &D_801BEBB8.unk0->entry[sp3C]; - switch (arg0->sceneNum) { + sp3C = var_s0[var_s3].unk0; + sp38 = &D_801BEBB8.unk0->entry[sp3C]; + switch (arg0->sceneNum) { case SCENE_MITURIN_BS: var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest & (1 << var_s0[var_s3].unk2); break; @@ -1418,31 +1430,30 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest & (1 << var_s0[var_s3].unk2); break; default: - var_v1_2 = Flags_GetTreasure(arg0, (s32) var_s0[var_s3].unk2); + var_v1_2 = Flags_GetTreasure(arg0, (s32)var_s0[var_s3].unk2); break; - } - if (( D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) || ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < (s32) D_801BEBB8.unk42) || (var_v1_2 != 0)) { - continue; - } else if (func_80106BEC((s32) D_801BEBB8.unk42, (f32) var_s0[var_s3].unk6) == 0) { - continue; - } else { - temp_ft0 = (s32) (((((f32) var_s0[var_s3].unk4 - (f32) D_801BEBB8.unk38) * arg5) - (f32) 4) + (f32) ((arg3 / 2) + arg1)); - temp_ft0_2 = (s32) (((((f32) var_s0[var_s3].unk8 - (f32) D_801BEBB8.unk3A) * arg5) - (f32) 4) + (f32) ((arg4 / 2) + arg2)); - // temp_v1_13 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_13 + 8; - // temp_v1_13->words.w1 = (((temp_ft0 * 4) & 0xFFF) << 0xC) | ((temp_ft0_2 * 4) & 0xFFF); - // temp_v1_13->words.w0 = ((((temp_ft0 + 8) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_ft0_2 + 8) * 4) & 0xFFF); - // temp_v1_14 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_14 + 8; - // temp_v1_14->words.w1 = 0; - // temp_v1_14->words.w0 = 0xE1000000; - // temp_v1_15 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_15 + 8; - // temp_v1_15->words.w1 = 0x04000400; - // temp_v1_15->words.w0 = 0xF1000000; + } + if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) || + ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < (s32)D_801BEBB8.unk42) || (var_v1_2 != 0)) { + continue; + } else if (func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[var_s3].unk6) == 0) { + continue; + } else { + temp_ft0 = (s32)(((((f32)var_s0[var_s3].unk4 - (f32)D_801BEBB8.unk38) * arg5) - (f32)4) + + (f32)((arg3 / 2) + arg1)); + temp_ft0_2 = (s32)(((((f32)var_s0[var_s3].unk8 - (f32)D_801BEBB8.unk3A) * arg5) - (f32)4) + + (f32)((arg4 / 2) + arg2)); + // temp_v1_13 = temp_s1->polyOpa.p; + // temp_s1->polyOpa.p = temp_v1_13 + 8; + // temp_v1_13->words.w1 = (((temp_ft0 * 4) & 0xFFF) << 0xC) | ((temp_ft0_2 * 4) & 0xFFF); + // temp_v1_13->words.w0 = ((((temp_ft0 + 8) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_ft0_2 + 8) * 4) + // & 0xFFF); temp_v1_14 = temp_s1->polyOpa.p; temp_s1->polyOpa.p = temp_v1_14 + 8; temp_v1_14->words.w1 + // = 0; temp_v1_14->words.w0 = 0xE1000000; temp_v1_15 = temp_s1->polyOpa.p; temp_s1->polyOpa.p = + // temp_v1_15 + 8; temp_v1_15->words.w1 = 0x04000400; temp_v1_15->words.w0 = 0xF1000000; - gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); - } + gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, + (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } } CLOSE_DISPS(arg0->state.gfxCtx); } @@ -1465,26 +1476,32 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 if (transitionActors->count != 0) { OPEN_DISPS(play->state.gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); for (i = 0; i < transitionActors->count; i++) { if (func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) { - if ((ABS_ALT(D_801F53B0[i].id) != ACTOR_EN_HOLL) - && (func_80105328(D_801F53B0[i].params) == 0)){ + if ((ABS_ALT(D_801F53B0[i].id) != ACTOR_EN_HOLL) && (func_80105328(D_801F53B0[i].params) == 0)) { roomA = D_801F53B0[i].sides[0].room; roomB = D_801F53B0[i].sides[1].room; - if (CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) - || (roomA < 0) - || (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].rooms & (1 << roomA)) - || (roomB < 0) - || (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].rooms & (1 << roomB))) { - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - - tempX = ((f32) D_801F53B0[i].pos.x - D_801BEBB8.unk38) * arg5 + ((arg3 / 2) + arg1); - tempY = ((f32) D_801F53B0[i].pos.z - D_801BEBB8.unk3A) * arg5 + ((arg4 / 2) + arg2); - gSPTextureRectangle(POLY_OPA_DISP++, ((tempX - 1) << 2), ((tempY - 1) << 2), ((tempX + 1) << 2), ((tempY + 1) << 2), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + if (CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) || (roomA < 0) || + (gSaveContext.save + .permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))] + .rooms & + (1 << roomA)) || + (roomB < 0) || + (gSaveContext.save + .permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))] + .rooms & + (1 << roomB))) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + + tempX = ((f32)D_801F53B0[i].pos.x - D_801BEBB8.unk38) * arg5 + ((arg3 / 2) + arg1); + tempY = ((f32)D_801F53B0[i].pos.z - D_801BEBB8.unk3A) * arg5 + ((arg4 / 2) + arg2); + gSPTextureRectangle(POLY_OPA_DISP++, ((tempX - 1) << 2), ((tempY - 1) << 2), ((tempX + 1) << 2), + ((tempY + 1) << 2), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } } } - } } CLOSE_DISPS(play->state.gfxCtx); } @@ -1494,7 +1511,7 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 // https://decomp.me/scratch/nHYgx void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { TransitionActorList* sp30; - //TransitionActorEntry* var_s0; + // TransitionActorEntry* var_s0; s32 temp_ft0; s32 temp_ft0_2; s32 var_s2; @@ -1508,17 +1525,20 @@ void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPPipeSync(POLY_OPA_DISP++); if (CHECK_DUNGEON_ITEM(1, arg6)) { - gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, &D_02002460, G_IM_FMT_IA, - D_801BEAE0[1], D_801BEAF0[1], D_801BEB00[1], D_801BEB10[1],D_801BEB20[1], D_801BEAD0[1], 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); + gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, &D_02002460, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1], D_801BEB00[1], + D_801BEB10[1], D_801BEB20[1], D_801BEAD0[1], 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); for (var_s2 = 0; var_s2 < sp30->count; var_s2++) { - if ((func_80105328((s32) D_801F53B0[var_s2].params) != 0) && (func_80106BEC((s32) D_801BEBB8.unk42, (f32) D_801F53B0[var_s2].pos.y) != 0)) { - if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) { - temp_ft0 = ((((f32) D_801F53B0[var_s2].pos.x - D_801BEBB8.unk38) * arg5) - 4) + ((arg3 / 2) + arg1); - temp_ft0_2 = ((((f32) D_801F53B0[var_s2].pos.z - D_801BEBB8.unk3A) * arg5) - 4) + ((arg4 / 2) + arg2); - gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); - } + if ((func_80105328((s32)D_801F53B0[var_s2].params) != 0) && + (func_80106BEC((s32)D_801BEBB8.unk42, (f32)D_801F53B0[var_s2].pos.y) != 0)) { + if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) { + temp_ft0 = ((((f32)D_801F53B0[var_s2].pos.x - D_801BEBB8.unk38) * arg5) - 4) + ((arg3 / 2) + arg1); + temp_ft0_2 = + ((((f32)D_801F53B0[var_s2].pos.z - D_801BEBB8.unk3A) * arg5) - 4) + ((arg4 / 2) + arg2); + gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, + (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); } + } } } CLOSE_DISPS(arg0->state.gfxCtx); @@ -1544,7 +1564,7 @@ s32 func_80108A64(PlayState* play) { if (pauseCtx->pageIndex != 1) { return 1; } - if ((pauseCtx->state == 7) || (( pauseCtx->state >= 8) && (pauseCtx->state < 0x13))) { + if ((pauseCtx->state == 7) || ((pauseCtx->state >= 8) && (pauseCtx->state < 0x13))) { return 1; } if ((pauseCtx->state != 6) || (pauseCtx->unk_200 != 0)) { @@ -1556,7 +1576,7 @@ s32 func_80108A64(PlayState* play) { return 0; } -//https://decomp.me/scratch/4gO7Z +// https://decomp.me/scratch/4gO7Z void func_80108AF8(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; s32 temp_a0_2; @@ -1570,18 +1590,18 @@ void func_80108AF8(PlayState* play) { if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (func_80108A64(play) == 0)) { if (Map_IsInBossArea(play) != 0) { switch (play->sceneNum) { - case SCENE_MITURIN_BS: - spB4 = 0; - break; - case SCENE_HAKUGIN_BS: - spB4 = 1; - break; - case SCENE_SEA_BS: - spB4 = 2; - break; - case SCENE_INISIE_BS: - spB4 = 3; - break; + case SCENE_MITURIN_BS: + spB4 = 0; + break; + case SCENE_HAKUGIN_BS: + spB4 = 1; + break; + case SCENE_SEA_BS: + spB4 = 2; + break; + case SCENE_INISIE_BS: + spB4 = 3; + break; } } else { spB4 = gSaveContext.mapIndex; @@ -1592,17 +1612,23 @@ void func_80108AF8(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); for (var_s1 = 0; var_s1 < D_801BEBB8.unk40; var_s1++) { - if ((gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))].unk_14 & gBitFlags[4 - var_s1]) - || CHECK_DUNGEON_ITEM2(2, spB4)) { - gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b, - 24, 16, 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(POLY_OPA_DISP++, 0x0144, (125 - var_s1 * 15) << 2, 0x01A4, ((125 - var_s1 * 15) + 16) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); - } + if ((gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneNumber(func_80106D08(play->sceneNum))] + .unk_14 & + gBitFlags[4 - var_s1]) || + CHECK_DUNGEON_ITEM2(2, spB4)) { + gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b, + 24, 16, 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(POLY_OPA_DISP++, 0x0144, (125 - var_s1 * 15) << 2, 0x01A4, + ((125 - var_s1 * 15) + 16) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + } } gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 255, pauseCtx->alpha); - gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10((D_801BEBB8.unk44 - pauseCtx->unk_256) + 8), G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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); - + gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10((D_801BEBB8.unk44 - pauseCtx->unk_256) + 8), G_IM_FMT_IA, + G_IM_SIZ_8b, 24, 16, 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); + a3 = 80; a2 = 106; temp_a0_2 = (5 + (pauseCtx->unk_256 * 0xF)); @@ -1612,9 +1638,11 @@ void func_80108AF8(PlayState* play) { a3--; temp_a2_2 += 4; temp_a0_2 -= 4; - gSPTextureRectangle(POLY_OPA_DISP++, a3 << 2, (temp_a0_2) << 2, a2 << 2, (temp_a2_2) << 2, G_TX_RENDERTILE, 0, 0, 0x036E, 0x02AA); + gSPTextureRectangle(POLY_OPA_DISP++, a3 << 2, (temp_a0_2) << 2, a2 << 2, (temp_a2_2) << 2, G_TX_RENDERTILE, + 0, 0, 0x036E, 0x02AA); } else { - gSPTextureRectangle(POLY_OPA_DISP++, (a3 + 1) << 2, temp_a0_2 << 2, (a2 - 1) << 2, temp_a2_2 << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + gSPTextureRectangle(POLY_OPA_DISP++, (a3 + 1) << 2, temp_a0_2 << 2, (a2 - 1) << 2, temp_a2_2 << 2, + G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); } func_8012C8AC(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx); @@ -1670,23 +1698,23 @@ void func_801091F0(PlayState* play) { if (func_80108A64(play) == 0) { if (Map_IsInBossArea(play) != 0) { switch (play->sceneNum) { - case SCENE_MITURIN_BS: - sp44 = 0; - break; - case SCENE_HAKUGIN_BS: - sp44 = 1; - break; - case SCENE_SEA_BS: - sp44 = 2; - break; - case SCENE_INISIE_BS: - sp44 = 3; - break; + case SCENE_MITURIN_BS: + sp44 = 0; + break; + case SCENE_HAKUGIN_BS: + sp44 = 1; + break; + case SCENE_SEA_BS: + sp44 = 2; + break; + case SCENE_INISIE_BS: + sp44 = 3; + break; } } else { sp44 = gSaveContext.mapIndex; } - temp_a0 = D_801BEBB8.unk0->entry->unk0; + temp_a0 = D_801BEBB8.unk0->entry->mapId; if ((temp_a0 != 0xFFFF) && (temp_a0 < 0x162)) { temp_v0_2 = func_80109BA0(temp_a0); if (temp_v0_2 != -1) { @@ -1694,13 +1722,13 @@ void func_801091F0(PlayState* play) { if (var_t2 == 0) { var_t2 = 0x50; } - for (var_v0 = 0; var_v0 < 2; var_v0++){ + for (var_v0 = 0; var_v0 < 2; var_v0++) { if (play->sceneNum == D_801BED24[var_v0].unk0) { sp40 = D_801BED24[var_v0].unk4; sp3C = D_801BED24[var_v0].unk8; } } - + func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index e268ed0fa..258c13377 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -255,8 +255,7 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) { if (this->actor.room >= 0) { s32 transitionActorId = DOORSHUTTER_GET_FC00(&this->actor); - play->transitionActors.list[transitionActorId].id = - -play->transitionActors.list[transitionActorId].id; + play->transitionActors.list[transitionActorId].id = -play->transitionActors.list[transitionActorId].id; } } @@ -678,8 +677,7 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) { } if (sp44->unk_04 != 0) { - TransitionActorEntry* transitionEntry = - &play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)]; + TransitionActorEntry* transitionEntry = &play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)]; if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 12befc404..1c8124afe 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1909,7 +1909,7 @@ 0x80102EF0:("func_80102EF0",), 0x80102F9C:("func_80102F9C",), 0x80103090:("func_80103090",), - 0x801030B4:("func_801030B4",), + 0x801030B4:("MapDisp_GetMapScale",), 0x801030F4:("func_801030F4",), 0x801031D0:("func_801031D0",), 0x801039EC:("MapDisp_IsDataRotated",), @@ -1972,7 +1972,7 @@ 0x80109714:("func_80109714",), 0x80109754:("func_80109754",), 0x801097C8:("func_801097C8",), - 0x8010983C:("func_8010983C",), + 0x8010983C:("MapData_GetMapScale",), 0x801098A0:("func_801098A0",), 0x80109908:("func_80109908",), 0x80109964:("func_80109964",), @@ -1988,7 +1988,7 @@ 0x80109BA0:("func_80109BA0",), 0x80109BF4:("func_80109BF4",), 0x80109C38:("func_80109C38",), - 0x80109CBC:("MapData_GetIMapSize",), + 0x80109CBC:("MapData_GetMapSize",), 0x80109D40:("func_80109D40",), 0x80109DD8:("func_80109DD8",), 0x80109E70:("func_80109E70",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index df9bc7e1c..a8944a962 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1033,10 +1033,10 @@ 0x801BED40:("D_801BED40","UNK_TYPE1","",0x1), 0x801BED4C:("D_801BED4C","UNK_TYPE1","",0x3C), 0x801BED88:("D_801BED88","UNK_TYPE1","",0x1), - 0x801BEFC8:("D_801BEFC8","UNK_TYPE1","",0x1), 0x801BF15C:("D_801BF15C","UNK_TYPE1","",0x1), 0x801BF170:("D_801BF170","UNK_TYPE1","",0x244), - 0x801BF3B4:("D_801BF3B4","UNK_TYPE1","",0x1), + 0x801BF3B4:("D_801BF3B4","s32","",0x14), + 0x801BF3C8:("D_801BF3C8","s32","",0x188), 0x801BF550:("D_801BF550","UNK_TYPE2","",0x2), 0x801BF554:("D_801BF554","UNK_TYPE2","",0x2), 0x801BF558:("D_801BF558","UNK_TYPE2","",0x2), diff --git a/tools/overlayhelpers/mapdata.py b/tools/overlayhelpers/mapdata.py new file mode 100755 index 000000000..7e17beb80 --- /dev/null +++ b/tools/overlayhelpers/mapdata.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# mzxrules 2022 +# Extracts z_map_data.c data +import argparse, os, struct, math + +D_801BF170_ROM = 0x1196B0 +CODE_START_VRAM = 0x800A5AC0 +MAP_DATA_DATA_START = 0x801BED40 +MAP_DATA_DATA_END = 0x801BF550 + +typeInfo = { + "Color_RGBA8" : [ 0x04, ">BBBB", "{{ {0}, {1}, {2}, {3} }}" ], + "T_801BED4C" : [ 0x0C, ">IBBBBBBh", "{{ D_{0:08X}, 0x{1:02X}, 0x{2:02X}, 0x{3:02X}, 0x{4:02X}, 0x{5:02X}, 0x{6:02X}, {7} }}"], + "T_801BF170" : [ 0x0A, ">BBhhBBh", "{{ 0x{0:02X}, 0x{1:02X}, {2}, {3}, 0x{4:02X}, 0x{5:02X}, {6} }}"], + "s32" : [ 0x04, ">I", "0x{0:02X}"] +} + +script_dir = os.path.dirname(os.path.realpath(__file__)) +repo = script_dir + os.sep + ".." + os.sep + ".." + os.sep + +def GetCodeOff(vram): + return vram-CODE_START_VRAM + +def GetDataOff(vram): + return vram-MAP_DATA_DATA_START + +def dumpList(data, vram, keyword, typeKey, varName, length): + if keyword is None: + keyword = "" + else: + keyword = f"{keyword} " + cstr = f"{keyword}{typeKey} {varName}[{length}] = {{\n" + + ty = typeInfo[typeKey] + off = GetDataOff(vram) + for i in range(length): + val = struct.unpack_from(ty[1], data, off) + off += ty[0] + cstr += f" {ty[2].format(*val)},\n" + cstr += "};\n" + + return cstr + + +def dump(): + data = [] + cstr = "" + with open(repo + "baserom/code","rb") as codefile: + codefile.seek(GetCodeOff(MAP_DATA_DATA_START)) + data = codefile.read(MAP_DATA_DATA_END - MAP_DATA_DATA_START) + + cstr += dumpList(data, 0x801BED40, "static", "Color_RGBA8", "D_801BED40", 3) + cstr += dumpList(data, 0x801BED4C, "static", "T_801BED4C", "D_801BED4C", 5) + cstr += dumpList(data, 0x801BED88, "static", "T_801BF170", "D_801BED88", 0x62) + cstr += dumpList(data, 0x801BF15C, "static", "s32", "D_801BF15C", 5) + cstr += dumpList(data, 0x801BF170, "static", "T_801BF170", "D_801BF170", 0x3A) + cstr += dumpList(data, 0x801BF3B4, "static", "s32", "D_801BF3B4", 5) + cstr += dumpList(data, 0x801BF3C8, "static", "s32", "D_801BF3C8", 0x62) + + print(cstr) + +parser = argparse.ArgumentParser(description="Extracts z_map_data.data") +args = parser.parse_args() + +dump() \ No newline at end of file From b78ac55648f45780ba62eccc690e36045d1493d8 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 8 Sep 2022 14:00:25 -0400 Subject: [PATCH 17/28] more function names --- assets/xml/objects/gameplay_dangeon_keep.xml | 8 +- include/z64map.h | 10 +- src/code/z_map_data.c | 189 ++++++++----------- src/code/z_map_disp.c | 51 +++-- tools/disasm/functions.txt | 8 +- tools/overlayhelpers/mapdata.py | 4 +- 6 files changed, 120 insertions(+), 150 deletions(-) diff --git a/assets/xml/objects/gameplay_dangeon_keep.xml b/assets/xml/objects/gameplay_dangeon_keep.xml index 7e4d2d201..123aebdd1 100644 --- a/assets/xml/objects/gameplay_dangeon_keep.xml +++ b/assets/xml/objects/gameplay_dangeon_keep.xml @@ -4,8 +4,12 @@ - - + + + + + + diff --git a/include/z64map.h b/include/z64map.h index d9b7ac4df..7ee0ded56 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -17,13 +17,13 @@ typedef struct { /* 0x00 */ TexturePtr lmapTex; //minimap texture - /* 0x04 */ u8 unk4; - /* 0x05 */ u8 unk5; + /* 0x04 */ u8 width; + /* 0x05 */ u8 height; /* 0x06 */ u8 unk6; /* 0x07 */ u8 unk7; /* 0x08 */ u8 unk8; /* 0x09 */ u8 unk9; - /* 0x0A */ s16 unkA; + /* 0x0A */ s16 scale; } T_801BED4C; // size 0x0C typedef struct { @@ -102,10 +102,12 @@ s16 func_80109F78(s32); s32 func_80109BA0(s32); s32 func_80109714(s32); s32 MapData_GetMapSize(s32); +void func_801098A0(s32, s32*); +s32 func_80109908(s32); s32 func_80109A98(s32); s32 func_80109AD8(s32); s32 func_801096D4(s32 arg0); -void func_80109754(s32 arg0, s32 *arg1, s32 *arg2); +void MapData_GetMapTexDim(s32 arg0, s32 *arg1, s32 *arg2); void func_801097C8(s32 arg0, s32* arg1, s32* arg2); void MapData_GetMapScale(s32 mapId, s32 *scale); void func_80109D40(s32, s32*, s32*); diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index b61f1438e..67dbe6d31 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -7,94 +7,69 @@ static Color_RGBA8 D_801BED40[3] = { { 100, 255, 255, 255 }, }; static T_801BED4C D_801BED4C[5] = { - { 0x050022C8, 0x60, 0x55, 0x30, 0x2A, 0x00, 0x00, 20 }, { 0x050042C8, 0x60, 0x55, 0x30, 0x3E, 0x00, 0x00, 20 }, - { 0x050052C8, 0x60, 0x55, 0x44, 0x2A, 0x00, 0x00, 20 }, { 0x050032C8, 0x60, 0x55, 0x30, 0x3E, 0x00, 0x00, 20 }, - { 0x050062C8, 0x60, 0x55, 0x44, 0x3E, 0x00, 0x00, 20 }, + { 0x050022C8, 96, 85, 48, 42, 0x00, 0x00, 20 }, { 0x050042C8, 96, 85, 48, 62, 0x00, 0x00, 20 }, + { 0x050052C8, 96, 85, 68, 42, 0x00, 0x00, 20 }, { 0x050032C8, 96, 85, 48, 62, 0x00, 0x00, 20 }, + { 0x050062C8, 96, 85, 68, 62, 0x00, 0x00, 20 }, }; static T_801BF170 D_801BED88[98] = { - { 0x60, 0x55, 48, 42, 0x00, 0x00, 20 }, { 0x60, 0x55, 48, 62, 0x00, 0x00, 20 }, - { 0x60, 0x55, 68, 42, 0x00, 0x00, 20 }, { 0x60, 0x55, 48, 62, 0x00, 0x00, 20 }, - { 0x60, 0x55, 68, 62, 0x00, 0x00, 20 }, { 0x50, 0x48, 40, 35, 0x01, 0x01, 52 }, - { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, - { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 49, 0x03, 0x02, 20 }, - { 0x30, 0x2C, 25, 23, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, - { 0x30, 0x2E, 25, 24, 0x03, 0x02, 20 }, { 0x40, 0x3D, 32, 31, 0x03, 0x02, 20 }, - { 0x60, 0x55, 49, 50, 0x03, 0x02, 20 }, { 0x60, 0x55, 49, 62, 0x03, 0x02, 20 }, - { 0x60, 0x55, 49, 43, 0x03, 0x02, 20 }, { 0x30, 0x50, 21, 41, 0x01, 0x01, 198 }, - { 0x20, 0x80, 17, 87, 0x01, 0x01, 138 }, { 0x50, 0x35, 40, 27, 0x01, 0x01, 54 }, - { 0x20, 0x51, 16, 15, 0x03, 0x02, 20 }, { 0x50, 0x2D, 35, 23, 0x03, 0x02, 20 }, - { 0x40, 0x57, 36, 44, 0x03, 0x02, 20 }, { 0x40, 0x33, 31, 23, 0x03, 0x02, 20 }, - { 0x50, 0x4F, 40, 40, 0x03, 0x02, 20 }, { 0x60, 0x4B, 36, 26, 0x03, 0x02, 20 }, - { 0x30, 0x29, 24, 20, 0x03, 0x02, 20 }, { 0x40, 0x2D, 31, 20, 0x03, 0x02, 20 }, - { 0x50, 0x34, 38, 28, 0x03, 0x02, 20 }, { 0x30, 0x2D, 23, 20, 0x03, 0x02, 20 }, - { 0x30, 0x3B, 25, 37, 0x03, 0x02, 20 }, { 0x30, 0x3C, 21, 38, 0x03, 0x02, 20 }, - { 0x30, 0x51, 24, 40, 0x03, 0x02, 20 }, { 0x30, 0x51, 24, 40, 0x03, 0x02, 20 }, - { 0x50, 0x59, 41, 26, 0x03, 0x02, 20 }, { 0x50, 0x35, 39, 26, 0x03, 0x02, 20 }, - { 0x40, 0x4E, 37, 36, 0x03, 0x02, 20 }, { 0x40, 0x44, 33, 33, 0x03, 0x02, 20 }, - { 0x30, 0x44, 23, 35, 0x03, 0x02, 20 }, { 0x30, 0x24, 25, 17, 0x03, 0x02, 20 }, - { 0x30, 0x19, 24, 12, 0x03, 0x02, 20 }, { 0x40, 0x4B, 24, 37, 0x03, 0x02, 20 }, - { 0x20, 0x35, 17, 26, 0x03, 0x02, 20 }, { 0x50, 0x3E, 35, 27, 0x01, 0x01, 105 }, - { 0x40, 0x4C, 31, 31, 0x01, 0x01, 133 }, { 0x60, 0x55, 47, 43, 0x03, 0x02, 20 }, - { 0x50, 0x47, 48, 33, 0x01, 0x01, 180 }, { 0x50, 0x57, 44, 44, 0x01, 0x01, 72 }, - { 0x40, 0x41, 31, 36, 0x01, 0x01, 57 }, { 0x30, 0x29, 28, 20, 0x01, 0x01, 60 }, - { 0x40, 0x4C, 17, 36, 0x01, 0x01, 58 }, { 0x50, 0x3C, 27, 22, 0x01, 0x01, 83 }, - { 0x50, 0x2F, 38, 23, 0x01, 0x01, 69 }, { 0x50, 0x3C, 40, 38, 0x01, 0x01, 29 }, - { 0x30, 0x13, 17, 8, 0x01, 0x01, 25 }, { 0x20, 0x63, 17, 16, 0x01, 0x01, 88 }, - { 0x30, 0x45, 19, 28, 0x01, 0x01, 76 }, { 0x30, 0x53, 34, 47, 0x01, 0x01, 104 }, - { 0x50, 0x36, 45, 27, 0x01, 0x01, 61 }, { 0x50, 0x5C, 35, 50, 0x01, 0x01, 60 }, - { 0x30, 0x4B, 24, 37, 0x03, 0x02, 20 }, { 0x40, 0x31, 32, 23, 0x03, 0x02, 20 }, - { 0x40, 0x31, 25, 24, 0x03, 0x02, 20 }, { 0x40, 0x34, 32, 24, 0x03, 0x02, 34 }, - { 0x40, 0x31, 31, 24, 0x03, 0x02, 34 }, { 0x20, 0x21, 18, 14, 0x03, 0x02, 34 }, - { 0x30, 0x32, 25, 25, 0x03, 0x02, 34 }, { 0x40, 0x34, 32, 25, 0x03, 0x02, 34 }, - { 0x30, 0x23, 24, 18, 0x03, 0x02, 34 }, { 0x40, 0x33, 32, 26, 0x03, 0x02, 34 }, - { 0x30, 0x23, 24, 18, 0x03, 0x02, 34 }, { 0x30, 0x35, 24, 28, 0x03, 0x02, 34 }, - { 0x40, 0x35, 33, 25, 0x03, 0x02, 34 }, { 0x40, 0x2F, 31, 24, 0x03, 0x02, 34 }, - { 0x40, 0x34, 32, 35, 0x03, 0x02, 34 }, { 0x30, 0x30, 24, 23, 0x03, 0x02, 34 }, - { 0x40, 0x57, 32, 26, 0x03, 0x02, 34 }, { 0x30, 0x1E, 24, 14, 0x03, 0x02, 34 }, - { 0x50, 0x4A, 40, 36, 0x01, 0x01, 50 }, { 0x50, 0x57, 6, 41, 0x01, 0x01, 42 }, - { 0x50, 0x38, 19, 27, 0x01, 0x01, 40 }, { 0x50, 0x41, 25, 33, 0x01, 0x01, 40 }, - { 0x10, 0x26, 8, 12, 0x01, 0x01, 47 }, { 0x50, 0x4E, 46, 33, 0x01, 0x01, 142 }, - { 0x50, 0x37, 32, 29, 0x01, 0x01, 155 }, { 0x50, 0x62, 67, 48, 0x01, 0x01, 51 }, - { 0x50, 0x3E, 47, 19, 0x01, 0x01, 55 }, { 0x20, 0x7B, 15, 83, 0x01, 0x01, 140 }, - { 0x50, 0x3C, 47, 14, 0x01, 0x01, 170 }, { 0x30, 0x4D, 18, 59, 0x01, 0x01, 79 }, - { 0x50, 0x40, 35, 30, 0x01, 0x01, 33 }, { 0x40, 0x32, 29, 22, 0x01, 0x01, 40 }, - { 0x50, 0x41, 39, 5, 0x01, 0x01, 37 }, { 0x20, 0x3D, 8, 56, 0x01, 0x01, 35 }, - { 0x50, 0x53, 37, 42, 0x01, 0x01, 95 }, { 0x50, 0x1B, 30, 21, 0x01, 0x01, 134 }, - { 0x50, 0x17, 122, -18, 0x01, 0x01, 53 }, { 0x50, 0x3C, 27, 22, 0x01, 0x01, 83 }, + { 96, 85, 48, 42, 0x00, 0x00, 20 }, { 96, 85, 48, 62, 0x00, 0x00, 20 }, { 96, 85, 68, 42, 0x00, 0x00, 20 }, + { 96, 85, 48, 62, 0x00, 0x00, 20 }, { 96, 85, 68, 62, 0x00, 0x00, 20 }, { 80, 72, 40, 35, 0x01, 0x01, 52 }, + { 96, 85, 49, 43, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, + { 96, 85, 49, 49, 0x03, 0x02, 20 }, { 48, 44, 25, 23, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, + { 48, 46, 25, 24, 0x03, 0x02, 20 }, { 64, 61, 32, 31, 0x03, 0x02, 20 }, { 96, 85, 49, 50, 0x03, 0x02, 20 }, + { 96, 85, 49, 62, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, { 48, 80, 21, 41, 0x01, 0x01, 198 }, + { 32, 128, 17, 87, 0x01, 0x01, 138 }, { 80, 53, 40, 27, 0x01, 0x01, 54 }, { 32, 81, 16, 15, 0x03, 0x02, 20 }, + { 80, 45, 35, 23, 0x03, 0x02, 20 }, { 64, 87, 36, 44, 0x03, 0x02, 20 }, { 64, 51, 31, 23, 0x03, 0x02, 20 }, + { 80, 79, 40, 40, 0x03, 0x02, 20 }, { 96, 75, 36, 26, 0x03, 0x02, 20 }, { 48, 41, 24, 20, 0x03, 0x02, 20 }, + { 64, 45, 31, 20, 0x03, 0x02, 20 }, { 80, 52, 38, 28, 0x03, 0x02, 20 }, { 48, 45, 23, 20, 0x03, 0x02, 20 }, + { 48, 59, 25, 37, 0x03, 0x02, 20 }, { 48, 60, 21, 38, 0x03, 0x02, 20 }, { 48, 81, 24, 40, 0x03, 0x02, 20 }, + { 48, 81, 24, 40, 0x03, 0x02, 20 }, { 80, 89, 41, 26, 0x03, 0x02, 20 }, { 80, 53, 39, 26, 0x03, 0x02, 20 }, + { 64, 78, 37, 36, 0x03, 0x02, 20 }, { 64, 68, 33, 33, 0x03, 0x02, 20 }, { 48, 68, 23, 35, 0x03, 0x02, 20 }, + { 48, 36, 25, 17, 0x03, 0x02, 20 }, { 48, 25, 24, 12, 0x03, 0x02, 20 }, { 64, 75, 24, 37, 0x03, 0x02, 20 }, + { 32, 53, 17, 26, 0x03, 0x02, 20 }, { 80, 62, 35, 27, 0x01, 0x01, 105 }, { 64, 76, 31, 31, 0x01, 0x01, 133 }, + { 96, 85, 47, 43, 0x03, 0x02, 20 }, { 80, 71, 48, 33, 0x01, 0x01, 180 }, { 80, 87, 44, 44, 0x01, 0x01, 72 }, + { 64, 65, 31, 36, 0x01, 0x01, 57 }, { 48, 41, 28, 20, 0x01, 0x01, 60 }, { 64, 76, 17, 36, 0x01, 0x01, 58 }, + { 80, 60, 27, 22, 0x01, 0x01, 83 }, { 80, 47, 38, 23, 0x01, 0x01, 69 }, { 80, 60, 40, 38, 0x01, 0x01, 29 }, + { 48, 19, 17, 8, 0x01, 0x01, 25 }, { 32, 99, 17, 16, 0x01, 0x01, 88 }, { 48, 69, 19, 28, 0x01, 0x01, 76 }, + { 48, 83, 34, 47, 0x01, 0x01, 104 }, { 80, 54, 45, 27, 0x01, 0x01, 61 }, { 80, 92, 35, 50, 0x01, 0x01, 60 }, + { 48, 75, 24, 37, 0x03, 0x02, 20 }, { 64, 49, 32, 23, 0x03, 0x02, 20 }, { 64, 49, 25, 24, 0x03, 0x02, 20 }, + { 64, 52, 32, 24, 0x03, 0x02, 34 }, { 64, 49, 31, 24, 0x03, 0x02, 34 }, { 32, 33, 18, 14, 0x03, 0x02, 34 }, + { 48, 50, 25, 25, 0x03, 0x02, 34 }, { 64, 52, 32, 25, 0x03, 0x02, 34 }, { 48, 35, 24, 18, 0x03, 0x02, 34 }, + { 64, 51, 32, 26, 0x03, 0x02, 34 }, { 48, 35, 24, 18, 0x03, 0x02, 34 }, { 48, 53, 24, 28, 0x03, 0x02, 34 }, + { 64, 53, 33, 25, 0x03, 0x02, 34 }, { 64, 47, 31, 24, 0x03, 0x02, 34 }, { 64, 52, 32, 35, 0x03, 0x02, 34 }, + { 48, 48, 24, 23, 0x03, 0x02, 34 }, { 64, 87, 32, 26, 0x03, 0x02, 34 }, { 48, 30, 24, 14, 0x03, 0x02, 34 }, + { 80, 74, 40, 36, 0x01, 0x01, 50 }, { 80, 87, 6, 41, 0x01, 0x01, 42 }, { 80, 56, 19, 27, 0x01, 0x01, 40 }, + { 80, 65, 25, 33, 0x01, 0x01, 40 }, { 16, 38, 8, 12, 0x01, 0x01, 47 }, { 80, 78, 46, 33, 0x01, 0x01, 142 }, + { 80, 55, 32, 29, 0x01, 0x01, 155 }, { 80, 98, 67, 48, 0x01, 0x01, 51 }, { 80, 62, 47, 19, 0x01, 0x01, 55 }, + { 32, 123, 15, 83, 0x01, 0x01, 140 }, { 80, 60, 47, 14, 0x01, 0x01, 170 }, { 48, 77, 18, 59, 0x01, 0x01, 79 }, + { 80, 64, 35, 30, 0x01, 0x01, 33 }, { 64, 50, 29, 22, 0x01, 0x01, 40 }, { 80, 65, 39, 5, 0x01, 0x01, 37 }, + { 32, 61, 8, 56, 0x01, 0x01, 35 }, { 80, 83, 37, 42, 0x01, 0x01, 95 }, { 80, 27, 30, 21, 0x01, 0x01, 134 }, + { 80, 23, 122, -18, 0x01, 0x01, 53 }, { 80, 60, 27, 22, 0x01, 0x01, 83 }, }; static s32 D_801BF15C[5] = { 0x50, 0x50, 0x8D, 0x50, 0x50, }; static T_801BF170 D_801BF170[58] = { - { 0x60, 0x55, 73, 67, 0x00, 0x00, 60 }, { 0x60, 0x55, 73, 74, 0x00, 0x00, 60 }, - { 0x60, 0x55, 80, 67, 0x00, 0x00, 60 }, { 0x60, 0x55, 73, 67, 0x00, 0x00, 60 }, - { 0x60, 0x55, 80, 74, 0x00, 0x00, 60 }, { 0x20, 0x1D, 17, 14, 0x02, 0x00, 50 }, - { 0x20, 0x1B, 16, 13, 0x02, 0x00, 50 }, { 0x20, 0x1E, 16, 15, 0x02, 0x00, 50 }, - { 0x10, 0x20, 8, 20, 0x02, 0x00, 50 }, { 0x10, 0x0C, 8, 6, 0x02, 0x00, 50 }, - { 0x20, 0x1B, 16, 13, 0x02, 0x00, 50 }, { 0x10, 0x0E, 8, 7, 0x02, 0x00, 50 }, - { 0x20, 0x13, 16, 9, 0x02, 0x00, 50 }, { 0x20, 0x1A, 16, 16, 0x02, 0x00, 50 }, - { 0x10, 0x20, 8, 22, 0x02, 0x00, 50 }, { 0x20, 0x1B, 16, 13, 0x02, 0x00, 50 }, - { 0x10, 0x23, 9, 5, 0x02, 0x00, 45 }, { 0x20, 0x12, 14, 9, 0x02, 0x00, 45 }, - { 0x20, 0x26, 18, 19, 0x02, 0x00, 45 }, { 0x20, 0x15, 16, 9, 0x02, 0x00, 45 }, - { 0x20, 0x22, 16, 17, 0x02, 0x00, 45 }, { 0x30, 0x20, 19, 11, 0x02, 0x00, 45 }, - { 0x20, 0x11, 16, 8, 0x02, 0x00, 45 }, { 0x20, 0x11, 16, 7, 0x02, 0x00, 45 }, - { 0x20, 0x15, 16, 11, 0x02, 0x00, 45 }, { 0x20, 0x12, 16, 8, 0x02, 0x00, 45 }, - { 0x10, 0x18, 9, 15, 0x02, 0x00, 45 }, { 0x10, 0x19, 7, 16, 0x02, 0x00, 45 }, - { 0x20, 0x23, 16, 17, 0x02, 0x00, 45 }, { 0x10, 0x13, 5, 9, 0x02, 0x00, 80 }, - { 0x20, 0x1C, 17, 7, 0x02, 0x00, 66 }, { 0x20, 0x10, 16, 8, 0x02, 0x00, 66 }, - { 0x20, 0x18, 18, 11, 0x02, 0x00, 66 }, { 0x20, 0x15, 16, 10, 0x02, 0x00, 66 }, - { 0x10, 0x15, 8, 11, 0x02, 0x00, 66 }, { 0x10, 0x0A, 8, 4, 0x02, 0x00, 66 }, - { 0x10, 0x07, 8, 3, 0x02, 0x00, 66 }, { 0x20, 0x17, 13, 11, 0x02, 0x00, 66 }, - { 0x10, 0x10, 8, 8, 0x02, 0x00, 66 }, { 0x10, 0x11, 8, 7, 0x02, 0x00, 50 }, - { 0x10, 0x17, 9, 10, 0x02, 0x00, 66 }, { 0x10, 0x0F, 8, 7, 0x02, 0x00, 66 }, - { 0x20, 0x0F, 15, 7, 0x02, 0x00, 66 }, { 0x20, 0x11, 16, 8, 0x02, 0x00, 90 }, - { 0x20, 0x10, 16, 8, 0x02, 0x00, 90 }, { 0x10, 0x0A, 8, 5, 0x02, 0x00, 90 }, - { 0x10, 0x11, 8, 8, 0x02, 0x00, 90 }, { 0x20, 0x11, 17, 8, 0x02, 0x00, 90 }, - { 0x10, 0x0B, 8, 5, 0x02, 0x00, 90 }, { 0x20, 0x11, 15, 9, 0x02, 0x00, 90 }, - { 0x10, 0x0C, 8, 6, 0x02, 0x00, 90 }, { 0x10, 0x12, 9, 9, 0x02, 0x00, 90 }, - { 0x20, 0x11, 17, 8, 0x02, 0x00, 90 }, { 0x20, 0x0F, 16, 8, 0x02, 0x00, 90 }, - { 0x10, 0x12, 9, 13, 0x02, 0x00, 90 }, { 0x10, 0x10, 8, 7, 0x02, 0x00, 90 }, - { 0x10, 0x1E, 9, 8, 0x02, 0x00, 90 }, { 0x10, 0x09, 9, 4, 0x02, 0x00, 90 }, + { 96, 85, 73, 67, 0x00, 0x00, 60 }, { 96, 85, 73, 74, 0x00, 0x00, 60 }, { 96, 85, 80, 67, 0x00, 0x00, 60 }, + { 96, 85, 73, 67, 0x00, 0x00, 60 }, { 96, 85, 80, 74, 0x00, 0x00, 60 }, { 32, 29, 17, 14, 0x02, 0x00, 50 }, + { 32, 27, 16, 13, 0x02, 0x00, 50 }, { 32, 30, 16, 15, 0x02, 0x00, 50 }, { 16, 32, 8, 20, 0x02, 0x00, 50 }, + { 16, 12, 8, 6, 0x02, 0x00, 50 }, { 32, 27, 16, 13, 0x02, 0x00, 50 }, { 16, 14, 8, 7, 0x02, 0x00, 50 }, + { 32, 19, 16, 9, 0x02, 0x00, 50 }, { 32, 26, 16, 16, 0x02, 0x00, 50 }, { 16, 32, 8, 22, 0x02, 0x00, 50 }, + { 32, 27, 16, 13, 0x02, 0x00, 50 }, { 16, 35, 9, 5, 0x02, 0x00, 45 }, { 32, 18, 14, 9, 0x02, 0x00, 45 }, + { 32, 38, 18, 19, 0x02, 0x00, 45 }, { 32, 21, 16, 9, 0x02, 0x00, 45 }, { 32, 34, 16, 17, 0x02, 0x00, 45 }, + { 48, 32, 19, 11, 0x02, 0x00, 45 }, { 32, 17, 16, 8, 0x02, 0x00, 45 }, { 32, 17, 16, 7, 0x02, 0x00, 45 }, + { 32, 21, 16, 11, 0x02, 0x00, 45 }, { 32, 18, 16, 8, 0x02, 0x00, 45 }, { 16, 24, 9, 15, 0x02, 0x00, 45 }, + { 16, 25, 7, 16, 0x02, 0x00, 45 }, { 32, 35, 16, 17, 0x02, 0x00, 45 }, { 16, 19, 5, 9, 0x02, 0x00, 80 }, + { 32, 28, 17, 7, 0x02, 0x00, 66 }, { 32, 16, 16, 8, 0x02, 0x00, 66 }, { 32, 24, 18, 11, 0x02, 0x00, 66 }, + { 32, 21, 16, 10, 0x02, 0x00, 66 }, { 16, 21, 8, 11, 0x02, 0x00, 66 }, { 16, 10, 8, 4, 0x02, 0x00, 66 }, + { 16, 7, 8, 3, 0x02, 0x00, 66 }, { 32, 23, 13, 11, 0x02, 0x00, 66 }, { 16, 16, 8, 8, 0x02, 0x00, 66 }, + { 16, 17, 8, 7, 0x02, 0x00, 50 }, { 16, 23, 9, 10, 0x02, 0x00, 66 }, { 16, 15, 8, 7, 0x02, 0x00, 66 }, + { 32, 15, 15, 7, 0x02, 0x00, 66 }, { 32, 17, 16, 8, 0x02, 0x00, 90 }, { 32, 16, 16, 8, 0x02, 0x00, 90 }, + { 16, 10, 8, 5, 0x02, 0x00, 90 }, { 16, 17, 8, 8, 0x02, 0x00, 90 }, { 32, 17, 17, 8, 0x02, 0x00, 90 }, + { 16, 11, 8, 5, 0x02, 0x00, 90 }, { 32, 17, 15, 9, 0x02, 0x00, 90 }, { 16, 12, 8, 6, 0x02, 0x00, 90 }, + { 16, 18, 9, 9, 0x02, 0x00, 90 }, { 32, 17, 17, 8, 0x02, 0x00, 90 }, { 32, 15, 16, 8, 0x02, 0x00, 90 }, + { 16, 18, 9, 13, 0x02, 0x00, 90 }, { 16, 16, 8, 7, 0x02, 0x00, 90 }, { 16, 30, 9, 8, 0x02, 0x00, 90 }, + { 16, 9, 9, 4, 0x02, 0x00, 90 }, }; static s32 D_801BF3B4[5] = { 0x00, 0x01, 0x02, 0x03, 0x04, @@ -119,33 +94,33 @@ void func_801094A0(s32 arg0, Color_RGBA8* color) { *color = D_801BED40[arg0]; } -void func_801094C8(s32 arg0, s32* arg1, s32* arg2) { - *arg1 = D_801BED4C[arg0].unk4; - *arg2 = D_801BED4C[arg0].unk5; +void MapData_GetMapTexDimGameplayDangeonKeep(s32 mapId, s32* width, s32* height) { + *width = D_801BED4C[mapId].width; + *height = D_801BED4C[mapId].height; } -void func_801094F8(s32 arg0, s32* arg1, s32* arg2) { - *arg1 = D_801BED4C[arg0].unk6; - *arg2 = D_801BED4C[arg0].unk7; +void func_801094F8(s32 mapId, s32* arg1, s32* arg2) { + *arg1 = D_801BED4C[mapId].unk6; + *arg2 = D_801BED4C[mapId].unk7; } -void func_80109528(s32 arg0, s32* arg1) { - *arg1 = D_801BED4C[arg0].unk8; +void func_80109528(s32 mapId, s32* arg1) { + *arg1 = D_801BED4C[mapId].unk8; } u8 func_8010954C(s32 arg0) { return D_801BED4C[arg0].unk9; } -s16 func_8010956C(s32 arg0) { - return D_801BED4C[arg0].unkA; +s16 MapData_GetMapScaleGameplayDangeonKeep(s32 mapId) { + return D_801BED4C[mapId].scale; } TexturePtr func_8010958C(s32 arg0) { return D_801BED4C[arg0].lmapTex; } -void func_801095AC(s32 mapId, s32* arg1, s32* arg2) { +void MapData_GetMapTexDimGrandMap(s32 mapId, s32* arg1, s32* arg2) { *arg1 = D_801BED88[mapId - 0x100].unk0; *arg2 = D_801BED88[mapId - 0x100].unk1; } @@ -192,17 +167,16 @@ s32 func_80109714(s32 mapId) { return MAPDATA_MID_MAP_I_STATIC; } -void func_80109754(s32 mapId, s32* arg1, s32* arg2) { +void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height) { switch (func_80109714(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - func_801094C8(mapId, arg1, arg2); + MapData_GetMapTexDimGameplayDangeonKeep(mapId, width, height); return; case MAPDATA_MID_GRAND_MAP_STATIC: - func_801095AC(mapId, arg1, arg2); + MapData_GetMapTexDimGrandMap(mapId, width, height); return; default: - *arg2 = 0; - *arg1 = 0; + *width = *height = 0; return; } } @@ -216,8 +190,7 @@ void func_801097C8(s32 mapId, s32* arg1, s32* arg2) { func_801095DC(mapId, arg1, arg2); return; default: - *arg2 = 0; - *arg1 = 0; + *arg1 = *arg2 = 0; return; } } @@ -228,7 +201,7 @@ void MapData_GetMapScale(s32 mapId, s32* scale) { *scale = 0; return; case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - *scale = func_8010956C(mapId); + *scale = MapData_GetMapScaleGameplayDangeonKeep(mapId); return; case MAPDATA_MID_GRAND_MAP_STATIC: *scale = func_80109650(mapId); @@ -251,7 +224,7 @@ void func_801098A0(s32 mapId, s32* arg1) { } // return some color index? -u8 func_80109908(s32 mapId) { +s32 func_80109908(s32 mapId) { switch (func_80109714(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: return func_8010954C(mapId); @@ -389,22 +362,20 @@ s32 MapData_GetMapSize(s32 mapCompactId) { void func_80109D40(s32 mapCompactId, s32* arg1, s32* arg2) { if (mapCompactId == -1) { - *arg2 = 0; - *arg1 = 0; + *arg1 = *arg2 = 0; return; } switch (func_80109BF4(mapCompactId)) { case MAPDATA_CPID_GRAND_MAP_STATIC: // id base 0x100 - func_801095AC(mapCompactId + 0xC6, arg1, arg2); + MapData_GetMapTexDimGrandMap(mapCompactId + 0xC6, arg1, arg2); return; case MAPDATA_CPID_MAP_I_STATIC: func_8010997C(mapCompactId, arg1, arg2); return; case MAPDATA_CPID_2: default: - *arg2 = 0; - *arg1 = 0; + *arg1 = *arg2 = 0; return; } } @@ -413,8 +384,7 @@ void func_80109DD8(s32 mapCompactId, s32* arg1, s32* arg2) { s32 temp_v0; if (mapCompactId == -1) { - *arg2 = 0; - *arg1 = 0; + *arg1 = *arg2 = 0; return; } switch (func_80109BF4(mapCompactId)) { @@ -426,8 +396,7 @@ void func_80109DD8(s32 mapCompactId, s32* arg1, s32* arg2) { return; case MAPDATA_CPID_2: default: - *arg2 = 0; - *arg1 = 0; + *arg1 = *arg2 = 0; return; } } diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 417f6aab6..026eb0a87 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -95,8 +95,8 @@ f32 func_80102F9C(f32 arg0) { return 0.0f; } -void func_80103090(MinimapEntry* arg0, s32* out1, s32* out2) { - func_80109754(arg0->mapId, out1, out2); +void MapDisp_GetMapTexDim(MinimapEntry* arg0, s32* out1, s32* out2) { + MapData_GetMapTexDim(arg0->mapId, out1, out2); } void MapDisp_GetMapScale(MinimapEntry* arg0, s32* scale) { @@ -106,32 +106,29 @@ void MapDisp_GetMapScale(MinimapEntry* arg0, s32* scale) { } } -void func_801030F4(MinimapEntry* arg0, s32* arg1, s32* arg2) { - s32 sp2C; - s32 sp28; - s32 temp_v0; - s32 temp_v0_2; +void MapDisp_GetMapPos(MinimapEntry* arg0, s32* arg1, s32* arg2) { + s32 width; + s32 height; + s32 temp; + s32 temp2; if (arg0->mapId == 0xFFFF) { *arg1 = 0; *arg2 = 0; return; } - func_80103090(arg0, &sp2C, &sp28); + MapDisp_GetMapTexDim(arg0, &width, &height); func_801097C8(arg0->mapId, arg1, arg2); if (arg0->unk8 & 1) { - temp_v0 = sp2C / 2; - *arg1 = (temp_v0 - *arg1) + temp_v0; + temp = width / 2; + *arg1 = (temp - *arg1) + temp; } if (arg0->unk8 & 2) { - temp_v0_2 = sp28 / 2; - *arg2 = (temp_v0_2 - *arg2) + temp_v0_2; + temp2 = height / 2; + *arg2 = (temp2 - *arg2) + temp2; } } -void func_801098A0(u16, s32*); -s32 func_80109908(u16); - #ifdef NON_MATCHING // https://decomp.me/scratch/XPZfI void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { @@ -149,7 +146,7 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg spCC = &D_801BEBB8.unk0->entry[arg4]; if ((spCC->mapId != 0xFFFF) && (arg1 != 0)) { - func_80103090(spCC, &spC8, &spC4); + MapDisp_GetMapTexDim(spCC, &spC8, &spC4); OPEN_DISPS(play->state.gfxCtx); func_8012C654(play->state.gfxCtx); func_801094A0(func_80109908(spCC->mapId), &spAC); @@ -253,8 +250,8 @@ void func_80103A58(PlayState* play, Actor* actor) { spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; spB4 = GET_PLAYER(play); if (spDC->mapId != 0xFFFF) { - func_801030F4(spDC, &spD0, &spCC); - func_80103090(spDC, &spC8, &spC4); + MapDisp_GetMapPos(spDC, &spD0, &spCC); + MapDisp_GetMapTexDim(spDC, &spC8, &spC4); var_v0 = D_801BEBB8.unk0->scale; if (D_801BEBB8.unk0->scale == 0) { var_v0 = 20; @@ -412,8 +409,8 @@ void func_801045AC(PlayState* play, Actor* actor) { } sp7C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; if (sp7C->mapId != 0xFFFF) { - func_801030F4(sp7C, &sp70, &sp6C); - func_80103090(sp7C, &sp68, &sp64); + MapDisp_GetMapPos(sp7C, &sp70, &sp6C); + MapDisp_GetMapTexDim(sp7C, &sp68, &sp64); var_v1 = D_801BEBB8.unk0->scale; if (D_801BEBB8.unk0->scale == 0) { @@ -837,8 +834,8 @@ void func_80105C40(s16 room) { D_801BEBB8.unk1C = D_801BEBB8.unk1E; return; } - func_801030F4(temp_s0, &sp44, &sp40); - func_80103090(temp_s0, &sp4C, &sp48); + MapDisp_GetMapPos(temp_s0, &sp44, &sp40); + MapDisp_GetMapTexDim(temp_s0, &sp4C, &sp48); D_801BEBB8.unk8 = 0x127 - sp4C; D_801BEBB8.unkA = 0xDC - sp48; if (D_801BEBB8.prevRoom != -1) { @@ -855,7 +852,7 @@ void func_80105C40(s16 room) { s32 sp38; s32 var_v0; s32 pad; - func_801030F4(sp58, &sp3C, &sp38); + MapDisp_GetMapPos(sp58, &sp3C, &sp38); var_v0 = D_801BEBB8.unk0->scale; if (D_801BEBB8.unk0->scale == 0) { var_v0 = 20; @@ -913,8 +910,8 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { sp6C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; if (sp6C->mapId != 0xFFFF) { f32 sp4C; - func_801030F4(sp6C, &sp60, &sp5C); - func_80103090(sp6C, &sp58, &sp54); + MapDisp_GetMapPos(sp6C, &sp60, &sp5C); + MapDisp_GetMapTexDim(sp6C, &sp58, &sp54); var_v0 = D_801BEBB8.unk0->scale; if (D_801BEBB8.unk0->scale == 0) { var_v0 = 20; @@ -1183,9 +1180,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; - D_801BECC4[1] = - (temp1 << 6) | (temp2 << 1) | - 1; + D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; if (CHECK_DUNGEON_ITEM(2, arg6)) { D_801BEC84[0xF] = 0xAD5F; D_801BECA4[0xF] = 0xAD5F; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1c8124afe..55f7518ce 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1908,9 +1908,9 @@ 0x80102ED0:("func_80102ED0",), 0x80102EF0:("func_80102EF0",), 0x80102F9C:("func_80102F9C",), - 0x80103090:("func_80103090",), + 0x80103090:("MapDisp_GetMapTexDim",), 0x801030B4:("MapDisp_GetMapScale",), - 0x801030F4:("func_801030F4",), + 0x801030F4:("MapDisp_GetMapPos",), 0x801031D0:("func_801031D0",), 0x801039EC:("MapDisp_IsDataRotated",), 0x80103A10:("func_80103A10",), @@ -1962,7 +1962,7 @@ 0x8010954C:("func_8010954C",), 0x8010956C:("func_8010956C",), 0x8010958C:("func_8010958C",), - 0x801095AC:("func_801095AC",), + 0x801095AC:("MapData_GetMapTexDimGrandMap",), 0x801095DC:("func_801095DC",), 0x8010960C:("func_8010960C",), 0x80109630:("func_80109630",), @@ -1970,7 +1970,7 @@ 0x80109670:("func_80109670",), 0x801096D4:("func_801096D4",), 0x80109714:("func_80109714",), - 0x80109754:("func_80109754",), + 0x80109754:("MapData_GetMapTexDim",), 0x801097C8:("func_801097C8",), 0x8010983C:("MapData_GetMapScale",), 0x801098A0:("func_801098A0",), diff --git a/tools/overlayhelpers/mapdata.py b/tools/overlayhelpers/mapdata.py index 7e17beb80..26c91dfa2 100755 --- a/tools/overlayhelpers/mapdata.py +++ b/tools/overlayhelpers/mapdata.py @@ -10,8 +10,8 @@ MAP_DATA_DATA_END = 0x801BF550 typeInfo = { "Color_RGBA8" : [ 0x04, ">BBBB", "{{ {0}, {1}, {2}, {3} }}" ], - "T_801BED4C" : [ 0x0C, ">IBBBBBBh", "{{ D_{0:08X}, 0x{1:02X}, 0x{2:02X}, 0x{3:02X}, 0x{4:02X}, 0x{5:02X}, 0x{6:02X}, {7} }}"], - "T_801BF170" : [ 0x0A, ">BBhhBBh", "{{ 0x{0:02X}, 0x{1:02X}, {2}, {3}, 0x{4:02X}, 0x{5:02X}, {6} }}"], + "T_801BED4C" : [ 0x0C, ">IBBBBBBh", "{{ D_{0:08X}, {1}, {2}, {3}, {4}, 0x{5:02X}, 0x{6:02X}, {7} }}"], + "T_801BF170" : [ 0x0A, ">BBhhBBh", "{{ {0}, {1}, {2}, {3}, 0x{4:02X}, 0x{5:02X}, {6} }}"], "s32" : [ 0x04, ">I", "0x{0:02X}"] } From 98c44d571c32e58a3a5e09feab9d7796e515dc60 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 2 Jan 2023 20:53:22 -0500 Subject: [PATCH 18/28] func_801068FC OK --- include/functions.h | 2 +- src/code/z_map_disp.c | 16 +++++++++------- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/include/functions.h b/include/functions.h index e9d0bafab..5f649ba92 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1552,7 +1552,7 @@ s32 func_80106530(PlayState* play); // void func_8010657C(void); void func_80106644(PlayState* play, s32 x, s32 z, s32 rot); // void func_8010683C(void); -void* func_801068FC(PlayState* play, void* heap, size_t size); +void* func_801068FC(PlayState* play, void* heap); // void func_80106BEC(void); // void func_80106D08(void); // void func_80106D5C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 2f446a62b..f8ec448e0 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1054,10 +1054,9 @@ void MapDisp_DestroyIMap(PlayState* play) { MapDisp_ResetIMap(); } -#ifdef NON_MATCHING // alloc pause screen dungeon map -void* func_801068FC(PlayState* play, void* heap, size_t size) { - void* heapNext; // sp3C +void* func_801068FC(PlayState* play, void* heap) { + void* heapNext; s32 temp_s2; s32 temp_v0; s32 var_s1; @@ -1120,14 +1119,17 @@ void* func_801068FC(PlayState* play, void* heap, size_t size) { break; } } - D_801F56B0.unk104[var_s4] = (!var_s3) ? NULL : D_801F56B0.unk84[var_s1]; + if (!var_s3) { + D_801F56B0.unk104[var_s4] = NULL; + } else { + void* dummy = D_801F56B0.unk84[var_s1]; //! FAKE: + + D_801F56B0.unk104[var_s4] = D_801F56B0.unk84[var_s1]; + } } } return heapNext; } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801068FC.s") -#endif s32 func_80106BEC(s32 arg0, f32 arg1) { if (arg0 == 0) { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index a56afd71b..53e993321 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -631,7 +631,7 @@ void KaleidoScope_Update(PlayState* play) { DmaMgr_SendRequest0(pauseCtx->iconItemAltSegment, SEGMENT_ROM_START(icon_item_dungeon_static), size); iconItemLangSegment = - func_801068FC(play, (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size), size); + func_801068FC(play, (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size)); sInDungeonScene = true; } else { size_t size; From 76301655f3f0971a6a744e676a060a053a4b12b9 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 5 Oct 2023 15:43:30 -0400 Subject: [PATCH 19/28] old uncommitted changes --- assets/xml/archives/map_grand_static.xml | 196 +++--- assets/xml/archives/map_i_static.xml | 116 ++-- include/functions.h | 62 +- include/variables.h | 10 +- include/z64map.h | 111 ++-- include/z64scene.h | 2 +- src/code/z_map_data.c | 562 +++++++++++------- src/code/z_map_disp.c | 517 ++++++++-------- src/code/z_map_exp.c | 4 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 3 +- src/overlays/actors/ovl_En_Door/z_en_door.h | 1 + tools/buildtools/makeyar.c | 16 +- tools/disasm/functions.txt | 72 +-- tools/disasm/variables.txt | 12 +- tools/overlayhelpers/mapdata.py | 73 ++- tools/sizes/code_functions.csv | 62 +- 16 files changed, 1020 insertions(+), 799 deletions(-) diff --git a/assets/xml/archives/map_grand_static.xml b/assets/xml/archives/map_grand_static.xml index d5d80bdd6..f9fe649af 100644 --- a/assets/xml/archives/map_grand_static.xml +++ b/assets/xml/archives/map_grand_static.xml @@ -1,102 +1,102 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/map_i_static.xml b/assets/xml/archives/map_i_static.xml index dbb64185d..3ea496aa3 100644 --- a/assets/xml/archives/map_i_static.xml +++ b/assets/xml/archives/map_i_static.xml @@ -1,62 +1,62 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/functions.h b/include/functions.h index 8bdc6c6c8..d3230e467 100644 --- a/include/functions.h +++ b/include/functions.h @@ -984,7 +984,7 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress); void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList); void MapDisp_Destroy(PlayState* play); void func_80105B34(PlayState* play); -void func_80105C40(s16 room); +void MapDisp_SwapRooms(s16 nextRoom); // void func_80105FE0(void); // void func_80106408(void); // void func_80106450(void); @@ -1007,45 +1007,45 @@ s32 func_801090B0(s32 arg0); s32 func_80109124(s16 arg0); void func_801091F0(PlayState* play); void func_80109428(PlayState* play); -void func_801094A0(s32 arg0, Color_RGBA8* color); +void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color); // void func_801094C8(void); -// void func_801094F8(void); -// void func_80109528(void); -// void func_8010954C(void); +// void MapData_GetMapTexOffsetGameplayDangeonKeep(void); +// void MapData_GetMapDrawTypeGameplayDangeonKeep(void); +// void MapData_GetMapColorIndexGameplayDangeonKeep(void); // void func_8010956C(void); -// void func_8010958C(void); +// void MapData_GetMapTexGameplayDangeonKeep(void); // void func_801095AC(void); -// void func_801095DC(void); -// void func_8010960C(void); -// void func_80109630(void); -// void func_80109650(void); -// void func_80109670(void); -// void func_801096D4(void); -// void func_80109714(void); +// void MapData_GetMapTexGameplayDangeonKeepOffset(void); +// void MapData_GetMapGrandDrawType(void); +// void MapData_GetMapGrandColorIndex(void); +// void MapData_GetMapGrandScale(void); +// void MapData_MapGrandTexSizeTest(void); +// void MapData_GetSizeOfMapGrandTex(void); +// void MapData_MID_GetType(void); // void func_80109754(void); -// void func_801097C8(void); +// void MapData_GetMapTexOffset(void); // void func_8010983C(void); -// void func_801098A0(void); -// void func_80109908(void); +// void MapData_GetDrawType(void); +// void MapData_GetMapColorIndex(void); // UNK_TYPE4 func_80109964(s32 param_1); -// void func_8010997C(void); -// void func_801099AC(void); -// void func_801099DC(void); -// void func_80109A00(void); -// void func_80109A20(void); -// void func_80109A40(void); -// void func_80109A98(void); -// void func_80109AD8(void); +// void MapData_GetMapITexDim(void); +// void MapData_GetMapITexOffset(void); +// void MapData_GetMapIDrawType(void); +// void MapData_GetMapIColorIndex(void); +// void MapData_GetMapIScale(void); +// void MapData_MapITexSizeTest(void); +// void MapDisp_GetSizeOfMapITex(void); +// void MapData_GetMapIId(void); // void func_80109B38(void); -// void func_80109BA0(void); -// void func_80109BF4(void); +// void MapData_GetMapCompactId(void); +// void MapData_CPID_GetType(void); // void func_80109C38(void); // void MapData_GetIMapSize(void); -// void func_80109D40(void); -// void func_80109DD8(void); -// void func_80109E70(void); -// void func_80109EF8(void); -// void func_80109F78(void); +// void MapData_CPID_GetTexDim(void); +// void MapData_CPID_GetTexOffset(void); +// void MapData_CPID_GetDrawType(void); +// void MapData_CPID_GetMapColorIndex(void); +// void MapData_CPID_GetMapScale(void); s32 Map_GetDungeonOrBossAreaIndex(PlayState* play); s32 Map_IsInDungeonOrBossArea(PlayState* play); s32 func_8010A0A4(PlayState* play); diff --git a/include/variables.h b/include/variables.h index 4cf303c7c..26282bb76 100644 --- a/include/variables.h +++ b/include/variables.h @@ -455,19 +455,19 @@ extern MinimapList D_801BEC14; // extern UNK_TYPE1 D_801BED00; // extern UNK_TYPE2 D_801BED24; // extern UNK_TYPE1 D_801BED3C; -// extern UNK_TYPE1 D_801BED40; -// extern UNK_TYPE1 D_801BED4C; +// extern UNK_TYPE1 mapColorTable; +// extern UNK_TYPE1 gameplay_dangeon_keep_Info; // extern UNK_TYPE1 D_801BED54; // extern UNK_TYPE1 D_801BED55; // extern UNK_TYPE1 D_801BED56; -// extern UNK_TYPE1 D_801BED88; +// extern UNK_TYPE1 map_grand_static_Info; // extern UNK_TYPE1 D_801BEFC8; // extern UNK_TYPE1 D_801BF15C; -// extern UNK_TYPE1 D_801BF170; +// extern UNK_TYPE1 map_i_static_Info; // extern UNK_TYPE1 D_801BF176; // extern UNK_TYPE1 D_801BF177; // extern UNK_TYPE1 D_801BF178; -// extern UNK_TYPE1 D_801BF3B4; +// extern UNK_TYPE1 map_i_for_gameplay_dangeon_keep; // extern UNK_TYPE2 D_801BF550; // extern UNK_TYPE2 D_801BF554; // extern UNK_TYPE2 D_801BF558; diff --git a/include/z64map.h b/include/z64map.h index 3e977ba73..2eba34577 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -2,71 +2,99 @@ #define Z64MAP_H #include "ultra64.h" #include "z64scene.h" + +/* +Handles L-minimap and pause screen dungeon minimap system. + +z_map_data.c stores MapSpriteInfo and helper functions to "simplify" accessing this data + +Two separate Id systems are used to access data + +mapId +0x000-0x004 fetches L-minimap data from gameplay_dangeon_keep +0x005-0x039 fetches dungeon minimap data from map_i_static +0x100-0x161 fetches L-minimap data from map_grand_static + +mapCompactId +0x000-0x039 fetches dungeon minimap data from map_i_static +0x03A-0x09B fetches L-minimap data from map_grand_static + +*/ + #define FLOOR_INDEX_MAX 4 /* z_map_data */ +#define MAPDATA_MAP_I_MAX 0x3A +#define MAPDATA_MAP_GRAND 0x100 +#define MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(id) (id + (MAPDATA_MAP_GRAND - MAPDATA_MAP_I_MAX)) +#define MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId) (mapId - MAPDATA_MAP_GRAND) #define MAPDATA_MID_GAMEPLAY_DANGEON_KEEP 0 -#define MAPDATA_MID_GRAND_MAP_STATIC 1 +#define MAPDATA_MID_MAP_GRAND_STATIC 1 #define MAPDATA_MID_MAP_I_STATIC 2 -#define MAPDATA_CPID_GRAND_MAP_STATIC 0 +#define MAPDATA_CPID_MAP_GRAND_STATIC 0 #define MAPDATA_CPID_MAP_I_STATIC 1 #define MAPDATA_CPID_2 2 +#define MAPDATA_DRAW_0 0 +#define MAPDATA_DRAW_1 1 +#define MAPDATA_DRAW_2 2 +#define MAPDATA_DRAW_3 3 + typedef struct { /* 0x00 */ TexturePtr lmapTex; //minimap texture /* 0x04 */ u8 width; /* 0x05 */ u8 height; - /* 0x06 */ u8 unk6; - /* 0x07 */ u8 unk7; - /* 0x08 */ u8 unk8; - /* 0x09 */ u8 unk9; + /* 0x06 */ u8 offsetX; + /* 0x07 */ u8 offsetY; + /* 0x08 */ u8 drawType; + /* 0x09 */ u8 colorIndex; /* 0x0A */ s16 scale; -} T_801BED4C; // size 0x0C +} MapSpriteInfo2; // size 0x0C typedef struct { - u8 unk0; - u8 unk1; - s16 unk2; - s16 unk4; - u8 unk6; - u8 unk7; - s16 unk8; -} T_801BF170; // size 0x0A, ident to T_801BED88 + u8 texWidth; + u8 texHeight; + s16 offsetX; + s16 offsetY; + u8 drawType; + u8 colorIndex; + s16 scale; +} MapSpriteInfo; // size 0x0A /* z_map_disp */ typedef struct { - /* 0x00 */ MinimapList* unk0; + /* 0x00 */ MinimapList* minimapList; /* 0x04 */ s32 curRoom; /* 0x08 */ s16 unk8; /* 0x0A */ s16 unkA; /* 0x0C */ s16 unkC; /* 0x0E */ s16 unkE; - /* 0x10 */ TexturePtr unk10; // gameplay cur minimap room + /* 0x10 */ TexturePtr lMapCurTex; // gameplay cur minimap room /* 0x14 */ s32 prevRoom; - /* 0x18 */ TexturePtr unk18; + /* 0x18 */ TexturePtr lMapPrevTex; /* 0x1C */ s16 unk1C; //same as 0C /* 0x1E */ s16 unk1E; //same as 0E /* 0x20 */ s32 unk20; - /* 0x24 */ s32 unk24; - /* 0x28 */ TexturePtr unk28; //unk type - /* 0x2C */ TexturePtr unk2C; //unk type - /* 0x30 */ s16 unk30; //scene minBounds.x - /* 0x32 */ s16 unk32; //scene minBounds.z - /* 0x34 */ s16 unk34; //scene boundsWidth.x - /* 0x36 */ s16 unk36; //scene boundsWidth.z - /* 0x38 */ s16 unk38; //scene boundsMidpoint.x - /* 0x3A */ s16 unk3A; //scene boundsMidpoint.z + /* 0x24 */ s32 swapAnimTimer; + /* 0x28 */ void* texBuff0; + /* 0x2C */ void* texBuff1; + /* 0x30 */ s16 sceneMinX; //scene minBounds.x + /* 0x32 */ s16 sceneMinZ; //scene minBounds.z + /* 0x34 */ s16 sceneWidth; //scene boundsWidth.x + /* 0x36 */ s16 sceneHeight; //scene boundsWidth.z + /* 0x38 */ s16 sceneMidX; //scene boundsMidpoint.x + /* 0x3A */ s16 sceneMidZ; //scene boundsMidpoint.z /* 0x3C */ s16* unk3C; /* 0x40 */ s16 unk40; /* 0x42 */ s16 unk42; /* 0x44 */ s16 unk44; /* 0x48 */ s16* unk48; /* 0x4C */ s16 unk4C; - /* 0x50 */ s32 unk50; //num chests + /* 0x50 */ s32 numChests; /* 0x54 */ MinimapChest* unk54; /* 0x58 */ s16 unk58; /* 0x5A */ s16 unk5A; @@ -96,20 +124,19 @@ typedef struct { } T_801F56B0; /* z_map_data */ -TexturePtr func_8010958C(s32); - -s16 func_80109F78(s32); -s32 func_80109BA0(s32); -s32 func_80109714(s32); -s32 MapData_GetMapSize(s32); -void func_801098A0(s32, s32*); -s32 func_80109908(s32); -s32 func_80109A98(s32); -s32 func_80109AD8(s32); -s32 func_801096D4(s32 mapId); +TexturePtr MapData_GetMapTexGameplayDangeonKeep(s32); +s32 MapData_GetMapCompactId(s32); +s32 MapData_MID_GetType(s32); +s32 MapData_CPID_GetSizeOfMapTex(s32); +void MapData_GetDrawType(s32, s32*); +s32 MapData_GetMapColorIndex(s32); +s32 MapDisp_GetSizeOfMapITex(s32); +s32 MapData_GetMapIId(s32); +s32 MapData_GetSizeOfMapGrandTex(s32 mapId); void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height); -void func_801097C8(s32 mapId, s32* arg1, s32* arg2); +void MapData_GetMapTexOffset(s32 mapId, s32* offsetX, s32* offsetY); void MapData_GetMapScale(s32 mapId, s32 *scale); -void func_80109D40(s32, s32*, s32*); -void func_80109DD8(s32, s32*, s32*); +void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height); +void MapData_CPID_GetTexOffset(s32 mapCompactId, s32* offsetX, s32* offsetY); +s16 MapData_CPID_GetMapScale(s32 mapCompactId); #endif diff --git a/include/z64scene.h b/include/z64scene.h index 440c04a94..afba71eaa 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -497,7 +497,7 @@ typedef struct { /* 0x02 */ s16 unk2; /* 0x04 */ s16 unk4; /* 0x06 */ s16 unk6; - /* 0x08 */ u16 unk8; + /* 0x08 */ u16 unk8; // flags; 1 = mirror x? 2 = mirror y? } MinimapEntry; // size = 0xA typedef struct { diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index 67dbe6d31..0dbd8d534 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -1,179 +1,302 @@ #include "global.h" #include "z64map.h" +#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" -static Color_RGBA8 D_801BED40[3] = { +static Color_RGBA8 mapColorTable[3] = { { 255, 255, 255, 255 }, - { 0, 255, 255, 160 }, + { 0, 255, 255, 160 }, // Blue { 100, 255, 255, 255 }, }; -static T_801BED4C D_801BED4C[5] = { - { 0x050022C8, 96, 85, 48, 42, 0x00, 0x00, 20 }, { 0x050042C8, 96, 85, 48, 62, 0x00, 0x00, 20 }, - { 0x050052C8, 96, 85, 68, 42, 0x00, 0x00, 20 }, { 0x050032C8, 96, 85, 48, 62, 0x00, 0x00, 20 }, - { 0x050062C8, 96, 85, 68, 62, 0x00, 0x00, 20 }, + +static MapSpriteInfo2 gameplay_dangeon_keep_Info[5] = { + { &gameplay_dangeon_keep_Tex_0022C8, 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, + { &gameplay_dangeon_keep_Tex_0042C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { &gameplay_dangeon_keep_Tex_0052C8, 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, + { &gameplay_dangeon_keep_Tex_0032C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { &gameplay_dangeon_keep_Tex_0062C8, 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, }; -static T_801BF170 D_801BED88[98] = { - { 96, 85, 48, 42, 0x00, 0x00, 20 }, { 96, 85, 48, 62, 0x00, 0x00, 20 }, { 96, 85, 68, 42, 0x00, 0x00, 20 }, - { 96, 85, 48, 62, 0x00, 0x00, 20 }, { 96, 85, 68, 62, 0x00, 0x00, 20 }, { 80, 72, 40, 35, 0x01, 0x01, 52 }, - { 96, 85, 49, 43, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, - { 96, 85, 49, 49, 0x03, 0x02, 20 }, { 48, 44, 25, 23, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, - { 48, 46, 25, 24, 0x03, 0x02, 20 }, { 64, 61, 32, 31, 0x03, 0x02, 20 }, { 96, 85, 49, 50, 0x03, 0x02, 20 }, - { 96, 85, 49, 62, 0x03, 0x02, 20 }, { 96, 85, 49, 43, 0x03, 0x02, 20 }, { 48, 80, 21, 41, 0x01, 0x01, 198 }, - { 32, 128, 17, 87, 0x01, 0x01, 138 }, { 80, 53, 40, 27, 0x01, 0x01, 54 }, { 32, 81, 16, 15, 0x03, 0x02, 20 }, - { 80, 45, 35, 23, 0x03, 0x02, 20 }, { 64, 87, 36, 44, 0x03, 0x02, 20 }, { 64, 51, 31, 23, 0x03, 0x02, 20 }, - { 80, 79, 40, 40, 0x03, 0x02, 20 }, { 96, 75, 36, 26, 0x03, 0x02, 20 }, { 48, 41, 24, 20, 0x03, 0x02, 20 }, - { 64, 45, 31, 20, 0x03, 0x02, 20 }, { 80, 52, 38, 28, 0x03, 0x02, 20 }, { 48, 45, 23, 20, 0x03, 0x02, 20 }, - { 48, 59, 25, 37, 0x03, 0x02, 20 }, { 48, 60, 21, 38, 0x03, 0x02, 20 }, { 48, 81, 24, 40, 0x03, 0x02, 20 }, - { 48, 81, 24, 40, 0x03, 0x02, 20 }, { 80, 89, 41, 26, 0x03, 0x02, 20 }, { 80, 53, 39, 26, 0x03, 0x02, 20 }, - { 64, 78, 37, 36, 0x03, 0x02, 20 }, { 64, 68, 33, 33, 0x03, 0x02, 20 }, { 48, 68, 23, 35, 0x03, 0x02, 20 }, - { 48, 36, 25, 17, 0x03, 0x02, 20 }, { 48, 25, 24, 12, 0x03, 0x02, 20 }, { 64, 75, 24, 37, 0x03, 0x02, 20 }, - { 32, 53, 17, 26, 0x03, 0x02, 20 }, { 80, 62, 35, 27, 0x01, 0x01, 105 }, { 64, 76, 31, 31, 0x01, 0x01, 133 }, - { 96, 85, 47, 43, 0x03, 0x02, 20 }, { 80, 71, 48, 33, 0x01, 0x01, 180 }, { 80, 87, 44, 44, 0x01, 0x01, 72 }, - { 64, 65, 31, 36, 0x01, 0x01, 57 }, { 48, 41, 28, 20, 0x01, 0x01, 60 }, { 64, 76, 17, 36, 0x01, 0x01, 58 }, - { 80, 60, 27, 22, 0x01, 0x01, 83 }, { 80, 47, 38, 23, 0x01, 0x01, 69 }, { 80, 60, 40, 38, 0x01, 0x01, 29 }, - { 48, 19, 17, 8, 0x01, 0x01, 25 }, { 32, 99, 17, 16, 0x01, 0x01, 88 }, { 48, 69, 19, 28, 0x01, 0x01, 76 }, - { 48, 83, 34, 47, 0x01, 0x01, 104 }, { 80, 54, 45, 27, 0x01, 0x01, 61 }, { 80, 92, 35, 50, 0x01, 0x01, 60 }, - { 48, 75, 24, 37, 0x03, 0x02, 20 }, { 64, 49, 32, 23, 0x03, 0x02, 20 }, { 64, 49, 25, 24, 0x03, 0x02, 20 }, - { 64, 52, 32, 24, 0x03, 0x02, 34 }, { 64, 49, 31, 24, 0x03, 0x02, 34 }, { 32, 33, 18, 14, 0x03, 0x02, 34 }, - { 48, 50, 25, 25, 0x03, 0x02, 34 }, { 64, 52, 32, 25, 0x03, 0x02, 34 }, { 48, 35, 24, 18, 0x03, 0x02, 34 }, - { 64, 51, 32, 26, 0x03, 0x02, 34 }, { 48, 35, 24, 18, 0x03, 0x02, 34 }, { 48, 53, 24, 28, 0x03, 0x02, 34 }, - { 64, 53, 33, 25, 0x03, 0x02, 34 }, { 64, 47, 31, 24, 0x03, 0x02, 34 }, { 64, 52, 32, 35, 0x03, 0x02, 34 }, - { 48, 48, 24, 23, 0x03, 0x02, 34 }, { 64, 87, 32, 26, 0x03, 0x02, 34 }, { 48, 30, 24, 14, 0x03, 0x02, 34 }, - { 80, 74, 40, 36, 0x01, 0x01, 50 }, { 80, 87, 6, 41, 0x01, 0x01, 42 }, { 80, 56, 19, 27, 0x01, 0x01, 40 }, - { 80, 65, 25, 33, 0x01, 0x01, 40 }, { 16, 38, 8, 12, 0x01, 0x01, 47 }, { 80, 78, 46, 33, 0x01, 0x01, 142 }, - { 80, 55, 32, 29, 0x01, 0x01, 155 }, { 80, 98, 67, 48, 0x01, 0x01, 51 }, { 80, 62, 47, 19, 0x01, 0x01, 55 }, - { 32, 123, 15, 83, 0x01, 0x01, 140 }, { 80, 60, 47, 14, 0x01, 0x01, 170 }, { 48, 77, 18, 59, 0x01, 0x01, 79 }, - { 80, 64, 35, 30, 0x01, 0x01, 33 }, { 64, 50, 29, 22, 0x01, 0x01, 40 }, { 80, 65, 39, 5, 0x01, 0x01, 37 }, - { 32, 61, 8, 56, 0x01, 0x01, 35 }, { 80, 83, 37, 42, 0x01, 0x01, 95 }, { 80, 27, 30, 21, 0x01, 0x01, 134 }, - { 80, 23, 122, -18, 0x01, 0x01, 53 }, { 80, 60, 27, 22, 0x01, 0x01, 83 }, + +static MapSpriteInfo map_grand_static_Info[98] = { + { 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, { 80, 72, 40, 35, MAPDATA_DRAW_1, 1, 52 }, + { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, + { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 49, MAPDATA_DRAW_3, 2, 20 }, + { 48, 44, 25, 23, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, + { 48, 46, 25, 24, MAPDATA_DRAW_3, 2, 20 }, { 64, 61, 32, 31, MAPDATA_DRAW_3, 2, 20 }, + { 96, 85, 49, 50, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 62, MAPDATA_DRAW_3, 2, 20 }, + { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, { 48, 80, 21, 41, MAPDATA_DRAW_1, 1, 198 }, + { 32, 128, 17, 87, MAPDATA_DRAW_1, 1, 138 }, { 80, 53, 40, 27, MAPDATA_DRAW_1, 1, 54 }, + { 32, 81, 16, 15, MAPDATA_DRAW_3, 2, 20 }, { 80, 45, 35, 23, MAPDATA_DRAW_3, 2, 20 }, + { 64, 87, 36, 44, MAPDATA_DRAW_3, 2, 20 }, { 64, 51, 31, 23, MAPDATA_DRAW_3, 2, 20 }, + { 80, 79, 40, 40, MAPDATA_DRAW_3, 2, 20 }, { 96, 75, 36, 26, MAPDATA_DRAW_3, 2, 20 }, + { 48, 41, 24, 20, MAPDATA_DRAW_3, 2, 20 }, { 64, 45, 31, 20, MAPDATA_DRAW_3, 2, 20 }, + { 80, 52, 38, 28, MAPDATA_DRAW_3, 2, 20 }, { 48, 45, 23, 20, MAPDATA_DRAW_3, 2, 20 }, + { 48, 59, 25, 37, MAPDATA_DRAW_3, 2, 20 }, { 48, 60, 21, 38, MAPDATA_DRAW_3, 2, 20 }, + { 48, 81, 24, 40, MAPDATA_DRAW_3, 2, 20 }, { 48, 81, 24, 40, MAPDATA_DRAW_3, 2, 20 }, + { 80, 89, 41, 26, MAPDATA_DRAW_3, 2, 20 }, { 80, 53, 39, 26, MAPDATA_DRAW_3, 2, 20 }, + { 64, 78, 37, 36, MAPDATA_DRAW_3, 2, 20 }, { 64, 68, 33, 33, MAPDATA_DRAW_3, 2, 20 }, + { 48, 68, 23, 35, MAPDATA_DRAW_3, 2, 20 }, { 48, 36, 25, 17, MAPDATA_DRAW_3, 2, 20 }, + { 48, 25, 24, 12, MAPDATA_DRAW_3, 2, 20 }, { 64, 75, 24, 37, MAPDATA_DRAW_3, 2, 20 }, + { 32, 53, 17, 26, MAPDATA_DRAW_3, 2, 20 }, { 80, 62, 35, 27, MAPDATA_DRAW_1, 1, 105 }, + { 64, 76, 31, 31, MAPDATA_DRAW_1, 1, 133 }, { 96, 85, 47, 43, MAPDATA_DRAW_3, 2, 20 }, + { 80, 71, 48, 33, MAPDATA_DRAW_1, 1, 180 }, { 80, 87, 44, 44, MAPDATA_DRAW_1, 1, 72 }, + { 64, 65, 31, 36, MAPDATA_DRAW_1, 1, 57 }, { 48, 41, 28, 20, MAPDATA_DRAW_1, 1, 60 }, + { 64, 76, 17, 36, MAPDATA_DRAW_1, 1, 58 }, { 80, 60, 27, 22, MAPDATA_DRAW_1, 1, 83 }, + { 80, 47, 38, 23, MAPDATA_DRAW_1, 1, 69 }, { 80, 60, 40, 38, MAPDATA_DRAW_1, 1, 29 }, + { 48, 19, 17, 8, MAPDATA_DRAW_1, 1, 25 }, { 32, 99, 17, 16, MAPDATA_DRAW_1, 1, 88 }, + { 48, 69, 19, 28, MAPDATA_DRAW_1, 1, 76 }, { 48, 83, 34, 47, MAPDATA_DRAW_1, 1, 104 }, + { 80, 54, 45, 27, MAPDATA_DRAW_1, 1, 61 }, { 80, 92, 35, 50, MAPDATA_DRAW_1, 1, 60 }, + { 48, 75, 24, 37, MAPDATA_DRAW_3, 2, 20 }, { 64, 49, 32, 23, MAPDATA_DRAW_3, 2, 20 }, + { 64, 49, 25, 24, MAPDATA_DRAW_3, 2, 20 }, { 64, 52, 32, 24, MAPDATA_DRAW_3, 2, 34 }, + { 64, 49, 31, 24, MAPDATA_DRAW_3, 2, 34 }, { 32, 33, 18, 14, MAPDATA_DRAW_3, 2, 34 }, + { 48, 50, 25, 25, MAPDATA_DRAW_3, 2, 34 }, { 64, 52, 32, 25, MAPDATA_DRAW_3, 2, 34 }, + { 48, 35, 24, 18, MAPDATA_DRAW_3, 2, 34 }, { 64, 51, 32, 26, MAPDATA_DRAW_3, 2, 34 }, + { 48, 35, 24, 18, MAPDATA_DRAW_3, 2, 34 }, { 48, 53, 24, 28, MAPDATA_DRAW_3, 2, 34 }, + { 64, 53, 33, 25, MAPDATA_DRAW_3, 2, 34 }, { 64, 47, 31, 24, MAPDATA_DRAW_3, 2, 34 }, + { 64, 52, 32, 35, MAPDATA_DRAW_3, 2, 34 }, { 48, 48, 24, 23, MAPDATA_DRAW_3, 2, 34 }, + { 64, 87, 32, 26, MAPDATA_DRAW_3, 2, 34 }, { 48, 30, 24, 14, MAPDATA_DRAW_3, 2, 34 }, + { 80, 74, 40, 36, MAPDATA_DRAW_1, 1, 50 }, { 80, 87, 6, 41, MAPDATA_DRAW_1, 1, 42 }, + { 80, 56, 19, 27, MAPDATA_DRAW_1, 1, 40 }, { 80, 65, 25, 33, MAPDATA_DRAW_1, 1, 40 }, + { 16, 38, 8, 12, MAPDATA_DRAW_1, 1, 47 }, { 80, 78, 46, 33, MAPDATA_DRAW_1, 1, 142 }, + { 80, 55, 32, 29, MAPDATA_DRAW_1, 1, 155 }, { 80, 98, 67, 48, MAPDATA_DRAW_1, 1, 51 }, + { 80, 62, 47, 19, MAPDATA_DRAW_1, 1, 55 }, { 32, 123, 15, 83, MAPDATA_DRAW_1, 1, 140 }, + { 80, 60, 47, 14, MAPDATA_DRAW_1, 1, 170 }, { 48, 77, 18, 59, MAPDATA_DRAW_1, 1, 79 }, + { 80, 64, 35, 30, MAPDATA_DRAW_1, 1, 33 }, { 64, 50, 29, 22, MAPDATA_DRAW_1, 1, 40 }, + { 80, 65, 39, 5, MAPDATA_DRAW_1, 1, 37 }, { 32, 61, 8, 56, MAPDATA_DRAW_1, 1, 35 }, + { 80, 83, 37, 42, MAPDATA_DRAW_1, 1, 95 }, { 80, 27, 30, 21, MAPDATA_DRAW_1, 1, 134 }, + { 80, 23, 122, -18, MAPDATA_DRAW_1, 1, 53 }, { 80, 60, 27, 22, MAPDATA_DRAW_1, 1, 83 }, }; + static s32 D_801BF15C[5] = { 0x50, 0x50, 0x8D, 0x50, 0x50, }; -static T_801BF170 D_801BF170[58] = { - { 96, 85, 73, 67, 0x00, 0x00, 60 }, { 96, 85, 73, 74, 0x00, 0x00, 60 }, { 96, 85, 80, 67, 0x00, 0x00, 60 }, - { 96, 85, 73, 67, 0x00, 0x00, 60 }, { 96, 85, 80, 74, 0x00, 0x00, 60 }, { 32, 29, 17, 14, 0x02, 0x00, 50 }, - { 32, 27, 16, 13, 0x02, 0x00, 50 }, { 32, 30, 16, 15, 0x02, 0x00, 50 }, { 16, 32, 8, 20, 0x02, 0x00, 50 }, - { 16, 12, 8, 6, 0x02, 0x00, 50 }, { 32, 27, 16, 13, 0x02, 0x00, 50 }, { 16, 14, 8, 7, 0x02, 0x00, 50 }, - { 32, 19, 16, 9, 0x02, 0x00, 50 }, { 32, 26, 16, 16, 0x02, 0x00, 50 }, { 16, 32, 8, 22, 0x02, 0x00, 50 }, - { 32, 27, 16, 13, 0x02, 0x00, 50 }, { 16, 35, 9, 5, 0x02, 0x00, 45 }, { 32, 18, 14, 9, 0x02, 0x00, 45 }, - { 32, 38, 18, 19, 0x02, 0x00, 45 }, { 32, 21, 16, 9, 0x02, 0x00, 45 }, { 32, 34, 16, 17, 0x02, 0x00, 45 }, - { 48, 32, 19, 11, 0x02, 0x00, 45 }, { 32, 17, 16, 8, 0x02, 0x00, 45 }, { 32, 17, 16, 7, 0x02, 0x00, 45 }, - { 32, 21, 16, 11, 0x02, 0x00, 45 }, { 32, 18, 16, 8, 0x02, 0x00, 45 }, { 16, 24, 9, 15, 0x02, 0x00, 45 }, - { 16, 25, 7, 16, 0x02, 0x00, 45 }, { 32, 35, 16, 17, 0x02, 0x00, 45 }, { 16, 19, 5, 9, 0x02, 0x00, 80 }, - { 32, 28, 17, 7, 0x02, 0x00, 66 }, { 32, 16, 16, 8, 0x02, 0x00, 66 }, { 32, 24, 18, 11, 0x02, 0x00, 66 }, - { 32, 21, 16, 10, 0x02, 0x00, 66 }, { 16, 21, 8, 11, 0x02, 0x00, 66 }, { 16, 10, 8, 4, 0x02, 0x00, 66 }, - { 16, 7, 8, 3, 0x02, 0x00, 66 }, { 32, 23, 13, 11, 0x02, 0x00, 66 }, { 16, 16, 8, 8, 0x02, 0x00, 66 }, - { 16, 17, 8, 7, 0x02, 0x00, 50 }, { 16, 23, 9, 10, 0x02, 0x00, 66 }, { 16, 15, 8, 7, 0x02, 0x00, 66 }, - { 32, 15, 15, 7, 0x02, 0x00, 66 }, { 32, 17, 16, 8, 0x02, 0x00, 90 }, { 32, 16, 16, 8, 0x02, 0x00, 90 }, - { 16, 10, 8, 5, 0x02, 0x00, 90 }, { 16, 17, 8, 8, 0x02, 0x00, 90 }, { 32, 17, 17, 8, 0x02, 0x00, 90 }, - { 16, 11, 8, 5, 0x02, 0x00, 90 }, { 32, 17, 15, 9, 0x02, 0x00, 90 }, { 16, 12, 8, 6, 0x02, 0x00, 90 }, - { 16, 18, 9, 9, 0x02, 0x00, 90 }, { 32, 17, 17, 8, 0x02, 0x00, 90 }, { 32, 15, 16, 8, 0x02, 0x00, 90 }, - { 16, 18, 9, 13, 0x02, 0x00, 90 }, { 16, 16, 8, 7, 0x02, 0x00, 90 }, { 16, 30, 9, 8, 0x02, 0x00, 90 }, - { 16, 9, 9, 4, 0x02, 0x00, 90 }, + +static MapSpriteInfo map_i_static_Info[MAPDATA_MAP_I_MAX] = { + { 96, 85, 73, 67, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 73, 74, MAPDATA_DRAW_0, 0, 60 }, + { 96, 85, 80, 67, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 73, 67, MAPDATA_DRAW_0, 0, 60 }, + { 96, 85, 80, 74, MAPDATA_DRAW_0, 0, 60 }, { 32, 29, 17, 14, MAPDATA_DRAW_2, 0, 50 }, + { 32, 27, 16, 13, MAPDATA_DRAW_2, 0, 50 }, { 32, 30, 16, 15, MAPDATA_DRAW_2, 0, 50 }, + { 16, 32, 8, 20, MAPDATA_DRAW_2, 0, 50 }, { 16, 12, 8, 6, MAPDATA_DRAW_2, 0, 50 }, + { 32, 27, 16, 13, MAPDATA_DRAW_2, 0, 50 }, { 16, 14, 8, 7, MAPDATA_DRAW_2, 0, 50 }, + { 32, 19, 16, 9, MAPDATA_DRAW_2, 0, 50 }, { 32, 26, 16, 16, MAPDATA_DRAW_2, 0, 50 }, + { 16, 32, 8, 22, MAPDATA_DRAW_2, 0, 50 }, { 32, 27, 16, 13, MAPDATA_DRAW_2, 0, 50 }, + { 16, 35, 9, 5, MAPDATA_DRAW_2, 0, 45 }, { 32, 18, 14, 9, MAPDATA_DRAW_2, 0, 45 }, + { 32, 38, 18, 19, MAPDATA_DRAW_2, 0, 45 }, { 32, 21, 16, 9, MAPDATA_DRAW_2, 0, 45 }, + { 32, 34, 16, 17, MAPDATA_DRAW_2, 0, 45 }, { 48, 32, 19, 11, MAPDATA_DRAW_2, 0, 45 }, + { 32, 17, 16, 8, MAPDATA_DRAW_2, 0, 45 }, { 32, 17, 16, 7, MAPDATA_DRAW_2, 0, 45 }, + { 32, 21, 16, 11, MAPDATA_DRAW_2, 0, 45 }, { 32, 18, 16, 8, MAPDATA_DRAW_2, 0, 45 }, + { 16, 24, 9, 15, MAPDATA_DRAW_2, 0, 45 }, { 16, 25, 7, 16, MAPDATA_DRAW_2, 0, 45 }, + { 32, 35, 16, 17, MAPDATA_DRAW_2, 0, 45 }, { 16, 19, 5, 9, MAPDATA_DRAW_2, 0, 80 }, + { 32, 28, 17, 7, MAPDATA_DRAW_2, 0, 66 }, { 32, 16, 16, 8, MAPDATA_DRAW_2, 0, 66 }, + { 32, 24, 18, 11, MAPDATA_DRAW_2, 0, 66 }, { 32, 21, 16, 10, MAPDATA_DRAW_2, 0, 66 }, + { 16, 21, 8, 11, MAPDATA_DRAW_2, 0, 66 }, { 16, 10, 8, 4, MAPDATA_DRAW_2, 0, 66 }, + { 16, 7, 8, 3, MAPDATA_DRAW_2, 0, 66 }, { 32, 23, 13, 11, MAPDATA_DRAW_2, 0, 66 }, + { 16, 16, 8, 8, MAPDATA_DRAW_2, 0, 66 }, { 16, 17, 8, 7, MAPDATA_DRAW_2, 0, 50 }, + { 16, 23, 9, 10, MAPDATA_DRAW_2, 0, 66 }, { 16, 15, 8, 7, MAPDATA_DRAW_2, 0, 66 }, + { 32, 15, 15, 7, MAPDATA_DRAW_2, 0, 66 }, { 32, 17, 16, 8, MAPDATA_DRAW_2, 0, 90 }, + { 32, 16, 16, 8, MAPDATA_DRAW_2, 0, 90 }, { 16, 10, 8, 5, MAPDATA_DRAW_2, 0, 90 }, + { 16, 17, 8, 8, MAPDATA_DRAW_2, 0, 90 }, { 32, 17, 17, 8, MAPDATA_DRAW_2, 0, 90 }, + { 16, 11, 8, 5, MAPDATA_DRAW_2, 0, 90 }, { 32, 17, 15, 9, MAPDATA_DRAW_2, 0, 90 }, + { 16, 12, 8, 6, MAPDATA_DRAW_2, 0, 90 }, { 16, 18, 9, 9, MAPDATA_DRAW_2, 0, 90 }, + { 32, 17, 17, 8, MAPDATA_DRAW_2, 0, 90 }, { 32, 15, 16, 8, MAPDATA_DRAW_2, 0, 90 }, + { 16, 18, 9, 13, MAPDATA_DRAW_2, 0, 90 }, { 16, 16, 8, 7, MAPDATA_DRAW_2, 0, 90 }, + { 16, 30, 9, 8, MAPDATA_DRAW_2, 0, 90 }, { 16, 9, 9, 4, MAPDATA_DRAW_2, 0, 90 }, }; -static s32 D_801BF3B4[5] = { + +static s32 map_i_for_gameplay_dangeon_keep[5] = { 0x00, 0x01, 0x02, 0x03, 0x04, }; -static s32 D_801BF3C8[98] = { - 0x3A, 0x01, 0x02, 0x03, 0x04, 0x3A, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x3A, 0x3A, 0x3A, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x3A, - 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x3A, 0x3A, 0x27, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, - 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, - 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, + +static s32 map_i_for_map_grand[98] = { + MAPDATA_MAP_I_MAX, + 0x01, + 0x02, + 0x03, + 0x04, + MAPDATA_MAP_I_MAX, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0A, + 0x0B, + 0x0C, + 0x0D, + 0x0E, + 0x0F, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x17, + 0x18, + 0x19, + 0x1A, + 0x1B, + 0x1C, + MAPDATA_MAP_I_MAX, + 0x1E, + 0x1F, + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + 0x27, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + 0x28, + 0x29, + 0x2A, + 0x2B, + 0x2C, + 0x2D, + 0x2E, + 0x2F, + 0x30, + 0x31, + 0x32, + 0x33, + 0x34, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, }; -// mapId -// 0-4 is gameplay_dangeon_keep -// 5-0x3A is map_i_static -// 0x100-0x162 is map_grand_static -s32 func_80109A98(s32); +s32 MapDisp_GetSizeOfMapITex(s32 mapId); -// Get ? Color -void func_801094A0(s32 arg0, Color_RGBA8* color) { - *color = D_801BED40[arg0]; +void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color) { + *color = mapColorTable[colorIndex]; } void MapData_GetMapTexDimGameplayDangeonKeep(s32 mapId, s32* width, s32* height) { - *width = D_801BED4C[mapId].width; - *height = D_801BED4C[mapId].height; + *width = gameplay_dangeon_keep_Info[mapId].width; + *height = gameplay_dangeon_keep_Info[mapId].height; } -void func_801094F8(s32 mapId, s32* arg1, s32* arg2) { - *arg1 = D_801BED4C[mapId].unk6; - *arg2 = D_801BED4C[mapId].unk7; +void MapData_GetMapTexOffsetGameplayDangeonKeep(s32 mapId, s32* offsetX, s32* offsetY) { + *offsetX = gameplay_dangeon_keep_Info[mapId].offsetX; + *offsetY = gameplay_dangeon_keep_Info[mapId].offsetY; } -void func_80109528(s32 mapId, s32* arg1) { - *arg1 = D_801BED4C[mapId].unk8; +void MapData_GetMapDrawTypeGameplayDangeonKeep(s32 mapId, s32* drawType) { + *drawType = gameplay_dangeon_keep_Info[mapId].drawType; } -u8 func_8010954C(s32 arg0) { - return D_801BED4C[arg0].unk9; +u8 MapData_GetMapColorIndexGameplayDangeonKeep(s32 mapId) { + return gameplay_dangeon_keep_Info[mapId].colorIndex; } -s16 MapData_GetMapScaleGameplayDangeonKeep(s32 mapId) { - return D_801BED4C[mapId].scale; +s16 MapData_GetMapGameplayDangeonKeepScale(s32 mapId) { + return gameplay_dangeon_keep_Info[mapId].scale; } -TexturePtr func_8010958C(s32 arg0) { - return D_801BED4C[arg0].lmapTex; +TexturePtr MapData_GetMapTexGameplayDangeonKeep(s32 mapId) { + return gameplay_dangeon_keep_Info[mapId].lmapTex; } -void MapData_GetMapTexDimGrandMap(s32 mapId, s32* arg1, s32* arg2) { - *arg1 = D_801BED88[mapId - 0x100].unk0; - *arg2 = D_801BED88[mapId - 0x100].unk1; +void MapData_GetMapTexGameplayDangeonKeepDim(s32 mapId, s32* width, s32* height) { + *width = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth; + *height = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight; } -void func_801095DC(s32 mapId, s32* arg1, s32* arg2) { - *arg1 = D_801BED88[mapId - 0x100].unk2; - *arg2 = D_801BED88[mapId - 0x100].unk4; +void MapData_GetMapTexGameplayDangeonKeepOffset(s32 mapId, s32* offsetX, s32* offsetY) { + *offsetX = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetX; + *offsetY = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetY; } -void func_8010960C(s32 mapId, s32* arg1) { - *arg1 = D_801BED88[mapId - 0x100].unk6; +void MapData_GetMapGrandDrawType(s32 mapId, s32* drawType) { + *drawType = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].drawType; } -u8 func_80109630(s32 mapId) { - return D_801BED88[mapId - 0x100].unk7; +u8 MapData_GetMapGrandColorIndex(s32 mapId) { + return map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].colorIndex; } -s16 func_80109650(s32 mapId) { - return D_801BED88[mapId - 0x100].unk8; +s16 MapData_GetMapGrandScale(s32 mapId) { + return map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].scale; } -s32 func_80109670(s32 mapId) { - s32 cond = mapId - 0x100; - s32 var_s1 = 0; +s32 MapData_MapGrandTexSizeTest(s32 mapId) { + s32 endMap = mapId - MAPDATA_MAP_GRAND; + s32 size = 0; s32 i; - for (i = 1; i < cond + 1; i++) { - var_s1 += func_801096D4((i - 1) + 0x100); + for (i = 1; i < endMap + 1; i++) { + size += MapData_GetSizeOfMapGrandTex((i - 1) + MAPDATA_MAP_GRAND); } - return var_s1; + return size; } -s32 func_801096D4(s32 mapId) { - return (D_801BED88[mapId - 0x100].unk0 * D_801BED88[mapId - 0x100].unk1) / 2; +s32 MapData_GetSizeOfMapGrandTex(s32 mapId) { + return (map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth * + map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight) / + 2; } -s32 func_80109714(s32 mapId) { +s32 MapData_MID_GetType(s32 mapId) { if ((mapId >= 0) && (mapId < 5)) { return MAPDATA_MID_GAMEPLAY_DANGEON_KEEP; } if ((mapId >= 0x100) && (mapId < 0x162)) { - return MAPDATA_MID_GRAND_MAP_STATIC; + return MAPDATA_MID_MAP_GRAND_STATIC; } return MAPDATA_MID_MAP_I_STATIC; } void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height) { - switch (func_80109714(mapId)) { + switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: MapData_GetMapTexDimGameplayDangeonKeep(mapId, width, height); return; - case MAPDATA_MID_GRAND_MAP_STATIC: - MapData_GetMapTexDimGrandMap(mapId, width, height); + case MAPDATA_MID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepDim(mapId, width, height); return; default: *width = *height = 0; @@ -181,55 +304,54 @@ void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height) { } } -void func_801097C8(s32 mapId, s32* arg1, s32* arg2) { - switch (func_80109714(mapId)) { +void MapData_GetMapTexOffset(s32 mapId, s32* offsetX, s32* offsetY) { + switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - func_801094F8(mapId, arg1, arg2); + MapData_GetMapTexOffsetGameplayDangeonKeep(mapId, offsetX, offsetY); return; - case MAPDATA_MID_GRAND_MAP_STATIC: - func_801095DC(mapId, arg1, arg2); + case MAPDATA_MID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepOffset(mapId, offsetX, offsetY); return; default: - *arg1 = *arg2 = 0; + *offsetX = *offsetY = 0; return; } } void MapData_GetMapScale(s32 mapId, s32* scale) { - switch (func_80109714(mapId)) { + switch (MapData_MID_GetType(mapId)) { default: *scale = 0; return; case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - *scale = MapData_GetMapScaleGameplayDangeonKeep(mapId); + *scale = MapData_GetMapGameplayDangeonKeepScale(mapId); return; - case MAPDATA_MID_GRAND_MAP_STATIC: - *scale = func_80109650(mapId); + case MAPDATA_MID_MAP_GRAND_STATIC: + *scale = MapData_GetMapGrandScale(mapId); return; } } -void func_801098A0(s32 mapId, s32* arg1) { - switch (func_80109714(mapId)) { +void MapData_GetDrawType(s32 mapId, s32* drawType) { + switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - func_80109528(mapId, arg1); + MapData_GetMapDrawTypeGameplayDangeonKeep(mapId, drawType); return; - case MAPDATA_MID_GRAND_MAP_STATIC: - func_8010960C(mapId, arg1); + case MAPDATA_MID_MAP_GRAND_STATIC: + MapData_GetMapGrandDrawType(mapId, drawType); return; default: - *arg1 = 0; + *drawType = 0; return; } } -// return some color index? -s32 func_80109908(s32 mapId) { - switch (func_80109714(mapId)) { +s32 MapData_GetMapColorIndex(s32 mapId) { + switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - return func_8010954C(mapId); - case MAPDATA_MID_GRAND_MAP_STATIC: - return func_80109630(mapId); + return MapData_GetMapColorIndexGameplayDangeonKeep(mapId); + case MAPDATA_MID_MAP_GRAND_STATIC: + return MapData_GetMapGrandColorIndex(mapId); default: return 0; } @@ -239,75 +361,74 @@ s32 func_80109964(s32 arg0) { return D_801BF15C[arg0]; } -void func_8010997C(s32 arg0, s32* arg1, s32* arg2) { - *arg1 = D_801BF170[arg0].unk0; - *arg2 = D_801BF170[arg0].unk1; +void MapData_GetMapITexDim(s32 mapId, s32* width, s32* height) { + *width = map_i_static_Info[mapId].texWidth; + *height = map_i_static_Info[mapId].texHeight; } -void func_801099AC(s32 arg0, s32* arg1, s32* arg2) { - *arg1 = D_801BF170[arg0].unk2; - *arg2 = D_801BF170[arg0].unk4; +void MapData_GetMapITexOffset(s32 mapId, s32* offsetX, s32* offsetY) { + *offsetX = map_i_static_Info[mapId].offsetX; + *offsetY = map_i_static_Info[mapId].offsetY; } -void func_801099DC(s32 arg0, s32* arg1) { - *arg1 = D_801BF170[arg0].unk6; +void MapData_GetMapIDrawType(s32 mapId, s32* drawType) { + *drawType = map_i_static_Info[mapId].drawType; } -u8 func_80109A00(s32 arg0) { - return D_801BF170[arg0].unk7; +u8 MapData_GetMapIColorIndex(s32 mapId) { + return map_i_static_Info[mapId].colorIndex; } -s16 func_80109A20(s32 arg0) { - return D_801BF170[arg0].unk8; +s16 MapData_GetMapIScale(s32 mapId) { + return map_i_static_Info[mapId].scale; } -s32 func_80109A40(s32 arg0) { - s32 temp_s2; - s32 var_s0; - s32 var_s1; +s32 MapData_MapITexSizeTest(s32 mapId) { + s32 i; + s32 size; - var_s1 = 0; - for (var_s0 = 1; var_s0 < arg0 + 1; var_s0++) { - var_s1 += func_80109A98(var_s0 - 1); + size = 0; + for (i = 1; i < mapId + 1; i++) { + size += MapDisp_GetSizeOfMapITex(i - 1); } - return var_s1; + return size; } -s32 func_80109A98(s32 arg0) { - return (D_801BF170[arg0].unk0 * D_801BF170[arg0].unk1) / 2; +s32 MapDisp_GetSizeOfMapITex(s32 mapId) { + return (map_i_static_Info[mapId].texWidth * map_i_static_Info[mapId].texHeight) / 2; } -s32 func_80109AD8(s32 mapId) { - switch (func_80109714(mapId)) { +s32 MapData_GetMapIId(s32 mapId) { + switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - return D_801BF3B4[mapId]; - case MAPDATA_MID_GRAND_MAP_STATIC: - return D_801BF3C8[mapId - 0x100]; + return map_i_for_gameplay_dangeon_keep[mapId]; + case MAPDATA_MID_MAP_GRAND_STATIC: + return map_i_for_map_grand[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)]; default: return 0; } } s32 func_80109B38(s32 mapId) { - if (func_80109AD8(mapId) != 0x3A) { + if (MapData_GetMapIId(mapId) != MAPDATA_MAP_I_MAX) { return 1; } - switch (func_80109714(mapId)) { + switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: return 2; - case MAPDATA_MID_GRAND_MAP_STATIC: + case MAPDATA_MID_MAP_GRAND_STATIC: return 0; default: return 0; } } -s32 func_80109BA0(s32 mapId) { - s32 temp_v0 = func_80109AD8(mapId); +s32 MapData_GetMapCompactId(s32 mapId) { + s32 mapI = MapData_GetMapIId(mapId); - if (temp_v0 != 0x3A) { - return temp_v0; + if (mapI != MAPDATA_MAP_I_MAX) { + return mapI; } if ((mapId >= 0x100) && (mapId < 0x162)) { return mapId - 0xC6; @@ -315,28 +436,29 @@ s32 func_80109BA0(s32 mapId) { return -1; } -s32 func_80109BF4(s32 mapCompactId) { +s32 MapData_CPID_GetType(s32 mapCompactId) { if (mapCompactId == -1) { return MAPDATA_CPID_2; } - if (mapCompactId < 0x3A) { + if (mapCompactId < MAPDATA_MAP_I_MAX) { return MAPDATA_CPID_MAP_I_STATIC; } - if (mapCompactId >= 0x3A) { - return MAPDATA_CPID_GRAND_MAP_STATIC; + if (mapCompactId >= MAPDATA_MAP_I_MAX) { + return MAPDATA_CPID_MAP_GRAND_STATIC; } return MAPDATA_CPID_2; } +// Unused s32 func_80109C38(s32 mapCompactId) { if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(mapCompactId)) { - case MAPDATA_CPID_GRAND_MAP_STATIC: - return func_80109670(mapCompactId + 0xC6); + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_MapGrandTexSizeTest(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); case MAPDATA_CPID_MAP_I_STATIC: - return func_80109A40(mapCompactId); + return MapData_MapITexSizeTest(mapCompactId); case MAPDATA_CPID_2: return 0; default: @@ -344,15 +466,15 @@ s32 func_80109C38(s32 mapCompactId) { } } -s32 MapData_GetMapSize(s32 mapCompactId) { +s32 MapData_CPID_GetSizeOfMapTex(s32 mapCompactId) { if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(mapCompactId)) { - case MAPDATA_CPID_GRAND_MAP_STATIC: - return func_801096D4(mapCompactId + 0xC6); + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_GetSizeOfMapGrandTex(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); case MAPDATA_CPID_MAP_I_STATIC: - return func_80109A98(mapCompactId); + return MapDisp_GetSizeOfMapITex(mapCompactId); case MAPDATA_CPID_2: return 0; default: @@ -360,90 +482,94 @@ s32 MapData_GetMapSize(s32 mapCompactId) { } } -void func_80109D40(s32 mapCompactId, s32* arg1, s32* arg2) { +// GOOD +void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height) { if (mapCompactId == -1) { - *arg1 = *arg2 = 0; + *width = *height = 0; return; } - switch (func_80109BF4(mapCompactId)) { - case MAPDATA_CPID_GRAND_MAP_STATIC: - // id base 0x100 - MapData_GetMapTexDimGrandMap(mapCompactId + 0xC6, arg1, arg2); + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepDim(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), width, + height); return; case MAPDATA_CPID_MAP_I_STATIC: - func_8010997C(mapCompactId, arg1, arg2); + MapData_GetMapITexDim(mapCompactId, width, height); return; case MAPDATA_CPID_2: default: - *arg1 = *arg2 = 0; + *width = *height = 0; return; } } -void func_80109DD8(s32 mapCompactId, s32* arg1, s32* arg2) { - s32 temp_v0; - +// GOOD +void MapData_CPID_GetTexOffset(s32 mapCompactId, s32* offsetX, s32* offsetY) { if (mapCompactId == -1) { - *arg1 = *arg2 = 0; + *offsetX = *offsetY = 0; return; } - switch (func_80109BF4(mapCompactId)) { - case MAPDATA_CPID_GRAND_MAP_STATIC: - func_801095DC(mapCompactId + 0xC6, arg1, arg2); + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepOffset(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), offsetX, + offsetY); return; case MAPDATA_CPID_MAP_I_STATIC: - func_801099AC(mapCompactId, arg1, arg2); + MapData_GetMapITexOffset(mapCompactId, offsetX, offsetY); return; case MAPDATA_CPID_2: default: - *arg1 = *arg2 = 0; + *offsetX = *offsetY = 0; return; } } -void func_80109E70(s32 mapCompactId, s32* arg1) { +// Unused +void MapData_CPID_GetDrawType(s32 mapCompactId, s32* drawType) { if (mapCompactId == -1) { - *arg1 = 0; + *drawType = MAPDATA_DRAW_0; return; } - switch (func_80109BF4(mapCompactId)) { - case MAPDATA_CPID_GRAND_MAP_STATIC: - func_8010960C(mapCompactId + 0xC6, arg1); + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + MapData_GetMapGrandDrawType(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), drawType); return; case MAPDATA_CPID_MAP_I_STATIC: - func_801099DC(mapCompactId, arg1); + MapData_GetMapIDrawType(mapCompactId, drawType); return; case MAPDATA_CPID_2: default: - *arg1 = 0; + *drawType = MAPDATA_DRAW_0; return; } } -u8 func_80109EF8(s32 mapCompactId) { +// Unused +u8 MapData_CPID_GetMapColorIndex(s32 mapCompactId) { if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(mapCompactId)) { - case MAPDATA_CPID_GRAND_MAP_STATIC: - return func_80109630(mapCompactId + 0xC6); + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_GetMapGrandColorIndex(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); case MAPDATA_CPID_MAP_I_STATIC: - return func_80109A00(mapCompactId); + return MapData_GetMapIColorIndex(mapCompactId); case MAPDATA_CPID_2: default: return 0; } } -s16 func_80109F78(s32 mapCompactId) { +// GOOD +s16 MapData_CPID_GetMapScale(s32 mapCompactId) { if (mapCompactId == -1) { return 0; } - switch (func_80109BF4(mapCompactId)) { - case MAPDATA_CPID_GRAND_MAP_STATIC: - return func_80109650(mapCompactId + 0xC6); + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_GetMapGrandScale(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); case MAPDATA_CPID_MAP_I_STATIC: - return func_80109A20(mapCompactId); + return MapData_GetMapIScale(mapCompactId); case MAPDATA_CPID_2: default: return 0; diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 7bd458870..194c8f2ef 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,8 +1,9 @@ #include "global.h" #include "gfx.h" +#include "overlays/actors/ovl_En_Door/z_en_door.h" -void MapDisp_DestroyIMap(PlayState* play); -void MapDisp_InitIMap(PlayState* play); +void MapDisp_DestroyMapI(PlayState* play); +void MapDisp_InitMapI(PlayState* play); extern s32 D_801BEAD0[4]; // G_IM_SIZ extern s32 D_801BEAE0[4]; // siz_LOAD_BLOCK @@ -37,9 +38,9 @@ extern TexturePtr D_02003F20; extern Gfx D_0401ED00[]; extern TexturePtr D_0C000000; -void MapDisp_GetIMapTexture(void* dst, s32 iMapId) { - if (func_80109A98(iMapId) != 0) { - CmpDma_LoadFile(SEGMENT_ROM_START(map_i_static), iMapId, dst, func_80109A98(iMapId)); +void MapDisp_GetMapITexture(void* dst, s32 mapId) { + if (MapDisp_GetSizeOfMapITex(mapId) != 0) { + CmpDma_LoadFile(SEGMENT_ROM_START(map_i_static), mapId, dst, MapDisp_GetSizeOfMapITex(mapId)); } } @@ -69,11 +70,11 @@ s32 func_80102EF0(PlayState* play) { if (curRoom == -1) { return false; } - entry = &D_801BEBB8.unk0->entry[curRoom]; + entry = &D_801BEBB8.minimapList->entry[curRoom]; if (entry->mapId == 0xFFFF) { return false; } - if (func_80109AD8(entry->mapId) == 0x3A) { + if (MapData_GetMapIId(entry->mapId) == MAPDATA_MAP_I_MAX) { return false; } return true; @@ -96,37 +97,37 @@ f32 func_80102F9C(f32 arg0) { return 0.0f; } -void MapDisp_GetMapTexDim(MinimapEntry* arg0, s32* out1, s32* out2) { - MapData_GetMapTexDim(arg0->mapId, out1, out2); +void MapDisp_GetMapTexDim(MinimapEntry* minimapEntry, s32* width, s32* height) { + MapData_GetMapTexDim(minimapEntry->mapId, width, height); } -void MapDisp_GetMapScale(MinimapEntry* arg0, s32* scale) { - MapData_GetMapScale(arg0->mapId, scale); +void MapDisp_GetMapScale(MinimapEntry* minimapEntry, s32* scale) { + MapData_GetMapScale(minimapEntry->mapId, scale); if (*scale == 0) { *scale = 20; } } -void MapDisp_GetMapPos(MinimapEntry* arg0, s32* arg1, s32* arg2) { +void MapDisp_GetMapPos(MinimapEntry* minimapEntry, s32* offsetX, s32* offsetY) { s32 width; s32 height; s32 temp; s32 temp2; - if (arg0->mapId == 0xFFFF) { - *arg1 = 0; - *arg2 = 0; + if (minimapEntry->mapId == 0xFFFF) { + *offsetX = 0; + *offsetY = 0; return; } - MapDisp_GetMapTexDim(arg0, &width, &height); - func_801097C8(arg0->mapId, arg1, arg2); - if (arg0->unk8 & 1) { + MapDisp_GetMapTexDim(minimapEntry, &width, &height); + MapData_GetMapTexOffset(minimapEntry->mapId, offsetX, offsetY); + if (minimapEntry->unk8 & 1) { temp = width / 2; - *arg1 = (temp - *arg1) + temp; + *offsetX = (temp - *offsetX) + temp; } - if (arg0->unk8 & 2) { + if (minimapEntry->unk8 & 2) { temp2 = height / 2; - *arg2 = (temp2 - *arg2) + temp2; + *offsetY = (temp2 - *offsetY) + temp2; } } @@ -142,32 +143,32 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg s32 var_t1; s32 var_v1_4; s32 var_v1_5; - Color_RGBA8 spAC; - s32 spA8; + Color_RGBA8 spAC_color; + s32 spA8_drawType; - spCC = &D_801BEBB8.unk0->entry[arg4]; + spCC = &D_801BEBB8.minimapList->entry[arg4]; if ((spCC->mapId != 0xFFFF) && (arg1 != 0)) { MapDisp_GetMapTexDim(spCC, &spC8, &spC4); OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL39_Overlay(play->state.gfxCtx); - func_801094A0(func_80109908(spCC->mapId), &spAC); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC.r, spAC.g, spAC.b, - (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC.a / 255.0f)); - func_801098A0(spCC->mapId, &spA8); - switch (spA8) { - case 1: + MapData_GetMapColor(MapData_GetMapColorIndex(spCC->mapId), &spAC_color); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC_color.r, spAC_color.g, spAC_color.b, + (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC_color.a / 255.0f)); + MapData_GetDrawType(spCC->mapId, &spA8_drawType); + switch (spA8_drawType) { + case MAPDATA_DRAW_1: gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_IA, spC8, spC4, 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); break; - case 3: + case MAPDATA_DRAW_3: gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); break; default: - case 0: + case MAPDATA_DRAW_0: gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); @@ -242,25 +243,25 @@ void func_80103A58(PlayState* play, Actor* actor) { s32 spC4; f32 spC0; u32 pad; - s32 var_v0; + s32 scale; Player* spB4; u32 pad2; - s32 spAC; + s32 spAC_scaleTemp; // GraphicsContext *spA8; - spDC = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; + spDC = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; spB4 = GET_PLAYER(play); if (spDC->mapId != 0xFFFF) { MapDisp_GetMapPos(spDC, &spD0, &spCC); MapDisp_GetMapTexDim(spDC, &spC8, &spC4); - var_v0 = D_801BEBB8.unk0->scale; - if (D_801BEBB8.unk0->scale == 0) { - var_v0 = 20; - } else if (D_801BEBB8.unk0->scale == -1) { - MapDisp_GetMapScale(spDC, &spAC); - var_v0 = spAC; + scale = D_801BEBB8.minimapList->scale; + if (D_801BEBB8.minimapList->scale == 0) { + scale = 20; + } else if (D_801BEBB8.minimapList->scale == -1) { + MapDisp_GetMapScale(spDC, &spAC_scaleTemp); + scale = spAC_scaleTemp; } - spC0 = 1.0f / (f32)var_v0; + spC0 = 1.0f / (f32)scale; if (!MapDisp_IsDataRotated(play)) { spD8 = (s32)((actor->world.pos.x - (f32)spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 + spD0; @@ -408,15 +409,15 @@ void func_801045AC(PlayState* play, Actor* actor) { if (sp50 < 0) { sp50 = 0.0f; } - sp7C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; + sp7C = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; if (sp7C->mapId != 0xFFFF) { MapDisp_GetMapPos(sp7C, &sp70, &sp6C); MapDisp_GetMapTexDim(sp7C, &sp68, &sp64); - var_v1 = D_801BEBB8.unk0->scale; - if (D_801BEBB8.unk0->scale == 0) { + var_v1 = D_801BEBB8.minimapList->scale; + if (D_801BEBB8.minimapList->scale == 0) { var_v1 = 20; - } else if (D_801BEBB8.unk0->scale == -1) { + } else if (D_801BEBB8.minimapList->scale == -1) { s32 sp4C; MapDisp_GetMapScale(sp7C, &sp4C); var_v1 = sp4C; @@ -446,14 +447,14 @@ void func_801045AC(PlayState* play, Actor* actor) { s32 pad; gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, - (s32)((D_801BEC2C[actor->category].a * (1.0f - D_801BEBB8.unk24 * 0.05f) * sp50 * - play->interfaceCtx.minimapAlpha) / + (s32)((D_801BEC2C[actor->category].a * (1.0f - D_801BEBB8.swapAnimTimer * 0.05f) * + sp50 * play->interfaceCtx.minimapAlpha) / 255.0f)); - var_v1 = D_801BEBB8.unk0->scale; - if (D_801BEBB8.unk0->scale == 0) { + var_v1 = D_801BEBB8.minimapList->scale; + if (D_801BEBB8.minimapList->scale == 0) { var_v1 = 20; - } else if (D_801BEBB8.unk0->scale == -1) { + } else if (D_801BEBB8.minimapList->scale == -1) { s32 sp34; MapDisp_GetMapScale(sp7C, &sp34); var_v1 = sp34; @@ -511,33 +512,33 @@ void func_80104C80(PlayState* play) { void MapDisp_Init(PlayState* play) { s32 i; - D_801BEBB8.unk0 = NULL; + D_801BEBB8.minimapList = NULL; D_801BEBB8.curRoom = -1; D_801BEBB8.unk8 = 0xD2; D_801BEBB8.unkA = 0x8C; D_801BEBB8.unkC = 0xD2; D_801BEBB8.unkE = 0x8C; - D_801BEBB8.unk10 = NULL; + D_801BEBB8.lMapCurTex = NULL; D_801BEBB8.prevRoom = -1; - D_801BEBB8.unk18 = NULL; + D_801BEBB8.lMapPrevTex = NULL; D_801BEBB8.unk1C = 0; D_801BEBB8.unk1E = 0; D_801BEBB8.unk20 = 0; - D_801BEBB8.unk24 = 0; + D_801BEBB8.swapAnimTimer = 0; if (!Map_IsInBossArea(play)) { D_801BEC1C = play->numRooms; } - D_801BEBB8.unk28 = THA_AllocTailAlign16(&play->state.heap, 0x4000); - D_801BEBB8.unk2C = THA_AllocTailAlign16(&play->state.heap, 0x4000); + D_801BEBB8.texBuff0 = THA_AllocTailAlign16(&play->state.heap, 0x4000); + D_801BEBB8.texBuff1 = THA_AllocTailAlign16(&play->state.heap, 0x4000); func_80104C80(play); if (!Map_IsInBossArea(play)) { - D_801BEBB8.unk30 = 0; - D_801BEBB8.unk32 = 0; - D_801BEBB8.unk34 = 0x64; - D_801BEBB8.unk36 = 0x64; - D_801BEBB8.unk38 = (s16)(s32)((f32)D_801BEBB8.unk30 + ((f32)D_801BEBB8.unk34 * 0.5f)); - D_801BEBB8.unk3A = (s16)(s32)((f32)D_801BEBB8.unk32 + ((f32)D_801BEBB8.unk36 * 0.5f)); + D_801BEBB8.sceneMinX = 0; + D_801BEBB8.sceneMinZ = 0; + D_801BEBB8.sceneWidth = 100; + D_801BEBB8.sceneHeight = 100; + D_801BEBB8.sceneMidX = (s16)(s32)((f32)D_801BEBB8.sceneMinX + ((f32)D_801BEBB8.sceneWidth * 0.5f)); + D_801BEBB8.sceneMidZ = (s16)(s32)((f32)D_801BEBB8.sceneMinZ + ((f32)D_801BEBB8.sceneHeight * 0.5f)); } D_801BEBB8.unk3C = THA_AllocTailAlign16(&play->state.heap, D_801BEC1C * sizeof(s16)); @@ -549,7 +550,7 @@ void MapDisp_Init(PlayState* play) { for (i = 0; i < 32; i++) { D_801BEBB8.unk48[i] = -0x7FFF; } - MapDisp_InitIMap(play); + MapDisp_InitMapI(play); D_801BEBB8.unk58 = 0; D_801BEBB8.unk5A = 0; if (Map_IsInBossArea(play) != 0) { @@ -568,7 +569,7 @@ void func_80104F34(PlayState* play) { D_801BEBB8.unk48[i1] = -0x7FFF; } for (i2 = 0; i2 < D_801BEC1C; i2++) { - MinimapEntry* mapEntry1 = &D_801BEBB8.unk0->entry[i2]; + MinimapEntry* mapEntry1 = &D_801BEBB8.minimapList->entry[i2]; if (mapEntry1->mapId == 0xFFFF) { continue; @@ -599,7 +600,7 @@ void func_80104F34(PlayState* play) { } } for (i2 = 0; i2 < D_801BEC1C; i2++) { - MinimapEntry* mapEntry2 = &D_801BEBB8.unk0->entry[i2]; + MinimapEntry* mapEntry2 = &D_801BEBB8.minimapList->entry[i2]; D_801BEBB8.unk3C[i2] = -1; @@ -629,7 +630,7 @@ void func_80104F34(PlayState* play) { s32 func_80105294(void) { T_801BEC70 sp4 = D_801BEC70; - if ((D_801BEBB8.unk0 == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || (D_801BEC1C == 0)) { return 0x7B; } return sp4.unk0[D_801BEBB8.unk58]; @@ -641,30 +642,27 @@ s16 func_80105318(void) { // TransitionActor params test s32 func_80105328(s32 params) { - if (((((u16)params) >> 7) & 7) == 5) { - return 1; + if (ENDOOR_PARAMS_GET_TYPE((u16)params) == ENDOOR_TYPE_5) { + return true; } - return 0; + return false; } void func_8010534C(PlayState* play) { - TransitionActorList* transitionActors; - TransitionActorEntry* var_s0; + TransitionActorList* transitionActors = &D_801BEC24; s32 var_v0; - s32 var_s2; + s32 i; - transitionActors = &D_801BEC24; - - for (var_s2 = 0; var_s2 < transitionActors->count; var_s2++) { - if (func_80105328(D_801F53B0[var_s2].params) != 0) { - if (ABS_ALT(D_801F53B0[var_s2].id) != 0x18) { + for (i = 0; i < transitionActors->count; i++) { + if (func_80105328(D_801F53B0[i].params) != 0) { + if (ABS_ALT(D_801F53B0[i].id) != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { s32 temp = (D_801BEBB8.unk48[var_v0] - 5); // needed for matching - if (((var_v0 == D_801BEBB8.unk40 - 1) && - (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) || - ((var_v0 != D_801BEBB8.unk40 - 1) && - (D_801F53B0[var_s2].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && - (D_801F53B0[var_s2].pos.y < (D_801BEBB8.unk48[var_v0 + 1] - 5)))) { + if (((var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) + + || + ((var_v0 != D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && + (D_801F53B0[i].pos.y < (D_801BEBB8.unk48[var_v0 + 1] - 5)))) { D_801BEBB8.unk58 = var_v0; return; } @@ -692,15 +690,15 @@ void func_8010549C(PlayState* play, void* segmentAddress) { D_801BEC14.entry = D_801F5130; if (play->colCtx.colHeader != NULL) { - D_801BEBB8.unk30 = play->colCtx.colHeader->minBounds.x; - D_801BEBB8.unk32 = play->colCtx.colHeader->minBounds.z; - D_801BEBB8.unk34 = play->colCtx.colHeader->maxBounds.x - play->colCtx.colHeader->minBounds.x; - D_801BEBB8.unk36 = play->colCtx.colHeader->maxBounds.z - play->colCtx.colHeader->minBounds.z; - D_801BEBB8.unk38 = D_801BEBB8.unk30 + (D_801BEBB8.unk34 * 0.5f); - D_801BEBB8.unk3A = D_801BEBB8.unk32 + (D_801BEBB8.unk36 * 0.5f); + D_801BEBB8.sceneMinX = play->colCtx.colHeader->minBounds.x; + D_801BEBB8.sceneMinZ = play->colCtx.colHeader->minBounds.z; + D_801BEBB8.sceneWidth = play->colCtx.colHeader->maxBounds.x - play->colCtx.colHeader->minBounds.x; + D_801BEBB8.sceneHeight = play->colCtx.colHeader->maxBounds.z - play->colCtx.colHeader->minBounds.z; + D_801BEBB8.sceneMidX = D_801BEBB8.sceneMinX + (D_801BEBB8.sceneWidth * 0.5f); + D_801BEBB8.sceneMidZ = D_801BEBB8.sceneMinZ + (D_801BEBB8.sceneHeight * 0.5f); } } - D_801BEBB8.unk0 = &D_801BEC14; + D_801BEBB8.minimapList = &D_801BEC14; func_80104F34(play); func_8010534C(play); } @@ -717,7 +715,7 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { D_801BEC20 = num; } D_801BEBB8.unk54 = D_801F5270; - D_801BEBB8.unk50 = D_801BEC20; + D_801BEBB8.numChests = D_801BEC20; } void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList) { @@ -735,19 +733,19 @@ void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionAct void MapDisp_Destroy(PlayState* play) { s32 i; - D_801BEBB8.unk0 = NULL; + D_801BEBB8.minimapList = NULL; D_801BEBB8.curRoom = -1; D_801BEBB8.unkC = 0xD2; D_801BEBB8.unkE = 0x8C; - D_801BEBB8.unk10 = NULL; + D_801BEBB8.lMapCurTex = NULL; D_801BEBB8.prevRoom = -1; - D_801BEBB8.unk18 = NULL; + D_801BEBB8.lMapPrevTex = NULL; D_801BEBB8.unk1C = 0; D_801BEBB8.unk1E = 0; D_801BEBB8.unk20 = 0; - D_801BEBB8.unk24 = 0; - D_801BEBB8.unk28 = NULL; - D_801BEBB8.unk2C = NULL; + D_801BEBB8.swapAnimTimer = 0; + D_801BEBB8.texBuff0 = NULL; + D_801BEBB8.texBuff1 = NULL; for (i = 0; i < D_801BEC1C; i++) { func_80102EA4(play, &D_801BEBB8.unk3C[i]); @@ -759,9 +757,9 @@ void MapDisp_Destroy(PlayState* play) { D_801BEBB8.unk44 = 0; D_801BEBB8.unk4C = 0; D_801BEBB8.unk48 = NULL; - D_801BEBB8.unk50 = 0; + D_801BEBB8.numChests = 0; D_801BEBB8.unk54 = NULL; - MapDisp_DestroyIMap(play); + MapDisp_DestroyMapI(play); D_801BEBB8.unk5A = 0; } @@ -770,39 +768,39 @@ void func_80105B34(PlayState* play) { s16 temp_a0_2; s16 temp_v1; s16 temp_v1_2; - s32 temp_v0; - if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0)) { + if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0)) { D_801BEBFA = 8 - play->pauseCtx.unk_256; if (D_801BEBB8.prevRoom != -1) { - temp_v0 = D_801BEBB8.unk24; - if (temp_v0 > 0) { + if (D_801BEBB8.swapAnimTimer > 0) { temp_v1 = D_801BEBB8.unk8; temp_a0 = D_801BEBB8.unkC; if (temp_v1 != temp_a0) { - D_801BEBB8.unkC = (s16)(s32)(((f32)(temp_v1 - temp_a0) / (f32)temp_v0) + (f32)temp_a0); + D_801BEBB8.unkC = + (s16)(s32)(((f32)(temp_v1 - temp_a0) / (f32)D_801BEBB8.swapAnimTimer) + (f32)temp_a0); } temp_v1_2 = D_801BEBB8.unkA; temp_a0_2 = D_801BEBB8.unkE; if (temp_v1_2 != temp_a0_2) { - D_801BEBB8.unkE = (s16)(s32)(((f32)(temp_v1_2 - temp_a0_2) / (f32)temp_v0) + (f32)temp_a0_2); + D_801BEBB8.unkE = + (s16)(s32)(((f32)(temp_v1_2 - temp_a0_2) / (f32)D_801BEBB8.swapAnimTimer) + (f32)temp_a0_2); } - D_801BEBB8.unk24 = temp_v0 - 1; - return; + D_801BEBB8.swapAnimTimer--; + } else { + D_801BEBB8.prevRoom = -1; + D_801BEBB8.swapAnimTimer = 0; + D_801BEBB8.unkC = D_801BEBB8.unk8; + D_801BEBB8.unkE = D_801BEBB8.unkA; } - D_801BEBB8.prevRoom = -1; - D_801BEBB8.unk24 = 0; - D_801BEBB8.unkC = D_801BEBB8.unk8; - D_801BEBB8.unkE = D_801BEBB8.unkA; - return; + } else { + D_801BEBB8.swapAnimTimer = 0; } - D_801BEBB8.unk24 = 0; } } -void func_80105C40(s16 room) { - MinimapEntry* temp_s0; - MinimapEntry* sp58; +void MapDisp_SwapRooms(s16 nextRoom) { + MinimapEntry* nextMinimapEntry; + MinimapEntry* prevMinimapEntry; s32 sp54; s32 sp50; s32 sp4C; @@ -810,40 +808,41 @@ void func_80105C40(s16 room) { s32 sp44; s32 sp40; - if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (room != -1)) { - temp_s0 = &D_801BEBB8.unk0->entry[room]; - if ((temp_s0->mapId < 5) || ((temp_s0->mapId >= 0x100) && (temp_s0->mapId < 0x162)) || - temp_s0->mapId == 0xFFFF) { + if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0) && (nextRoom != -1)) { + nextMinimapEntry = &D_801BEBB8.minimapList->entry[nextRoom]; + if ((nextMinimapEntry->mapId < 5) || + ((nextMinimapEntry->mapId >= 0x100) && (nextMinimapEntry->mapId < 0x162)) || + nextMinimapEntry->mapId == 0xFFFF) { D_801BEBB8.prevRoom = D_801BEBB8.curRoom; - D_801BEBB8.curRoom = room; - D_801BEBB8.unk24 = 0x14; + D_801BEBB8.curRoom = nextRoom; + D_801BEBB8.swapAnimTimer = 20; - D_801BEBB8.unk18 = D_801BEBB8.unk10; + D_801BEBB8.lMapPrevTex = D_801BEBB8.lMapCurTex; sp54 = D_801BEBB8.unk8; sp50 = D_801BEBB8.unkA; - temp_s0 = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; + nextMinimapEntry = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; - if (temp_s0->mapId == 0xFFFF) { + if (nextMinimapEntry->mapId == 0xFFFF) { D_801BEBB8.unk1E = 0; D_801BEBB8.unk8 = 0xD2; D_801BEBB8.unkA = 0x8C; D_801BEBB8.unkC = 0xD2; D_801BEBB8.unkE = 0x8C; - D_801BEBB8.unk10 = NULL; + D_801BEBB8.lMapCurTex = NULL; D_801BEBB8.unk1C = D_801BEBB8.unk1E; return; } - MapDisp_GetMapPos(temp_s0, &sp44, &sp40); - MapDisp_GetMapTexDim(temp_s0, &sp4C, &sp48); + MapDisp_GetMapPos(nextMinimapEntry, &sp44, &sp40); + MapDisp_GetMapTexDim(nextMinimapEntry, &sp4C, &sp48); D_801BEBB8.unk8 = 0x127 - sp4C; D_801BEBB8.unkA = 0xDC - sp48; if (D_801BEBB8.prevRoom != -1) { - sp58 = &D_801BEBB8.unk0->entry[D_801BEBB8.prevRoom]; - if (sp58->mapId == 0xFFFF) { + prevMinimapEntry = &D_801BEBB8.minimapList->entry[D_801BEBB8.prevRoom]; + if (prevMinimapEntry->mapId == 0xFFFF) { D_801BEBB8.unk1E = 0; - D_801BEBB8.unk10 = NULL; + D_801BEBB8.lMapCurTex = NULL; D_801BEBB8.unk1C = D_801BEBB8.unk1E; D_801BEBB8.unkC = D_801BEBB8.unk8; D_801BEBB8.unkE = D_801BEBB8.unkA; @@ -851,21 +850,23 @@ void func_80105C40(s16 room) { } else { s32 sp3C; s32 sp38; - s32 var_v0; + s32 scale; s32 pad; - MapDisp_GetMapPos(sp58, &sp3C, &sp38); - var_v0 = D_801BEBB8.unk0->scale; - if (D_801BEBB8.unk0->scale == 0) { - var_v0 = 20; - } else if (D_801BEBB8.unk0->scale == -1) { - s32 sp2C; - MapDisp_GetMapScale(temp_s0, &sp2C); - var_v0 = sp2C; + MapDisp_GetMapPos(prevMinimapEntry, &sp3C, &sp38); + scale = D_801BEBB8.minimapList->scale; + if (D_801BEBB8.minimapList->scale == 0) { + scale = 20; + } else if (D_801BEBB8.minimapList->scale == -1) { + s32 scaleTemp; + MapDisp_GetMapScale(nextMinimapEntry, &scaleTemp); + scale = scaleTemp; } D_801BEBB8.unk1C = (s16)(s32)( - ((f32)sp44 + (((f32)sp58->unk2 - (f32)temp_s0->unk2) * (1.0f / var_v0))) - (f32)sp3C); + ((f32)sp44 + (((f32)prevMinimapEntry->unk2 - (f32)nextMinimapEntry->unk2) * (1.0f / scale))) - + (f32)sp3C); D_801BEBB8.unk1E = (s16)(s32)( - ((f32)sp40 + (((f32)sp58->unk6 - (f32)temp_s0->unk6) * (1.0f / var_v0))) - (f32)sp38); + ((f32)sp40 + (((f32)prevMinimapEntry->unk6 - (f32)nextMinimapEntry->unk6) * (1.0f / scale))) - + (f32)sp38); D_801BEBB8.unkC = sp54 - D_801BEBB8.unk1C; D_801BEBB8.unkE = sp50 - D_801BEBB8.unk1E; } @@ -874,21 +875,21 @@ void func_80105C40(s16 room) { D_801BEBB8.unkC = D_801BEBB8.unk8; D_801BEBB8.unkE = D_801BEBB8.unkA; } - D_801BEBB8.unk10 = NULL; + D_801BEBB8.lMapCurTex = NULL; - switch (func_80109714(temp_s0->mapId)) { - case 0: - D_801BEBB8.unk10 = func_8010958C(temp_s0->mapId); + switch (MapData_MID_GetType(nextMinimapEntry->mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + D_801BEBB8.lMapCurTex = MapData_GetMapTexGameplayDangeonKeep(nextMinimapEntry->mapId); return; - case 1: - if (D_801BEBB8.unk18 == D_801BEBB8.unk28) { - D_801BEBB8.unk10 = D_801BEBB8.unk2C; + case MAPDATA_MID_MAP_GRAND_STATIC: + if (D_801BEBB8.lMapPrevTex == D_801BEBB8.texBuff0) { + D_801BEBB8.lMapCurTex = D_801BEBB8.texBuff1; } else { - D_801BEBB8.unk10 = D_801BEBB8.unk28; + D_801BEBB8.lMapCurTex = D_801BEBB8.texBuff0; } - if (func_801096D4(temp_s0->mapId) != 0) { - CmpDma_LoadFile(SEGMENT_ROM_START(map_grand_static), temp_s0->mapId - 0x100, - (s32)D_801BEBB8.unk10, func_801096D4(temp_s0->mapId)); + if (MapData_GetSizeOfMapGrandTex(nextMinimapEntry->mapId) != 0) { + CmpDma_LoadFile(SEGMENT_ROM_START(map_grand_static), nextMinimapEntry->mapId - 0x100, + D_801BEBB8.lMapCurTex, MapData_GetSizeOfMapGrandTex(nextMinimapEntry->mapId)); } break; } @@ -908,15 +909,15 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { s32 sp54; s32 var_v0; - sp6C = &D_801BEBB8.unk0->entry[D_801BEBB8.curRoom]; + sp6C = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; if (sp6C->mapId != 0xFFFF) { f32 sp4C; MapDisp_GetMapPos(sp6C, &sp60, &sp5C); MapDisp_GetMapTexDim(sp6C, &sp58, &sp54); - var_v0 = D_801BEBB8.unk0->scale; - if (D_801BEBB8.unk0->scale == 0) { + var_v0 = D_801BEBB8.minimapList->scale; + if (D_801BEBB8.minimapList->scale == 0) { var_v0 = 20; - } else if (D_801BEBB8.unk0->scale == -1) { + } else if (D_801BEBB8.minimapList->scale == -1) { s32 sp48; MapDisp_GetMapScale(sp6C, &sp48); var_v0 = sp48; @@ -987,20 +988,20 @@ s32 func_80106530(PlayState* play) { return false; } -s32 func_8010657C(s32 arg0, s32 arg1) { +s32 func_8010657C(s32 curRoom, s32 prevRoom) { MinimapEntry* entry; s16* temp1; // Can be removed, but adds readability - if ((arg0 == -1) || (arg1 == -1)) { + if ((curRoom == -1) || (prevRoom == -1)) { return 0; } - entry = &D_801BEBB8.unk0->entry[arg0]; + entry = &D_801BEBB8.minimapList->entry[curRoom]; temp1 = D_801BEBB8.unk3C; - if ((temp1[arg0] <= temp1[arg1]) && (temp1[arg1] <= (temp1[arg0] + ((entry->unk8 >> 2) & 7)))) { + if ((temp1[curRoom] <= temp1[prevRoom]) && (temp1[prevRoom] <= (temp1[curRoom] + ((entry->unk8 >> 2) & 7)))) { return 1; } - entry = &D_801BEBB8.unk0->entry[arg1]; - if ((temp1[arg1] <= temp1[arg0]) && (temp1[arg0] <= (temp1[arg1] + ((entry->unk8 >> 2) & 7)))) { + entry = &D_801BEBB8.minimapList->entry[prevRoom]; + if ((temp1[prevRoom] <= temp1[curRoom]) && (temp1[curRoom] <= (temp1[prevRoom] + ((entry->unk8 >> 2) & 7)))) { return 1; } return 0; @@ -1009,16 +1010,17 @@ s32 func_8010657C(s32 arg0, s32 arg1) { void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { PauseContext* pauseCtx = &play->pauseCtx; - if ((D_801BEBB8.unk0 != 0) && ((s32)pauseCtx->state < 4) && (XREG(95) == 0) && + if ((D_801BEBB8.minimapList != 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 - (D_801BEBB8.unk24 * 0.05f)); + func_801031D0(play, D_801BEBB8.lMapCurTex, D_801BEBB8.unkC, D_801BEBB8.unkE, D_801BEBB8.curRoom, + 1.0f - (D_801BEBB8.swapAnimTimer * 0.05f)); if ((D_801BEBB8.curRoom != D_801BEBB8.prevRoom) && (func_8010657C(D_801BEBB8.curRoom, D_801BEBB8.prevRoom) != 0)) { - func_801031D0(play, D_801BEBB8.unk18, D_801BEBB8.unkC + D_801BEBB8.unk1C, - D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.prevRoom, D_801BEBB8.unk24 * 0.05f); + func_801031D0(play, D_801BEBB8.lMapPrevTex, D_801BEBB8.unkC + D_801BEBB8.unk1C, + D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.prevRoom, + D_801BEBB8.swapAnimTimer * 0.05f); } func_80104AE8(play); } @@ -1047,85 +1049,84 @@ void MapDisp_ResetIMap(void) { D_801BEBB8.unk20 &= ~1; } -void MapDisp_InitIMap(PlayState* play) { +void MapDisp_InitMapI(PlayState* play) { MapDisp_ResetIMap(); } -void MapDisp_DestroyIMap(PlayState* play) { +void MapDisp_DestroyMapI(PlayState* play) { MapDisp_ResetIMap(); } // alloc pause screen dungeon map void* func_801068FC(PlayState* play, void* heap) { void* heapNext; - s32 temp_s2; - s32 temp_v0; - s32 var_s1; + s32 mapId; + s32 mapCompactId; + s32 dungeonMapRoomIter; s32 var_s2; - s32 var_s4; + s32 roomIter; MinimapEntry* entry; s32 var_s3; heapNext = heap; - if ((D_801BEBB8.unk0 == NULL) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (D_801BEC1C == 0)) { return heapNext; } D_801F56B0.rooms = 0; // loop for number of rooms - for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { - var_s2 = 0; - entry = &D_801BEBB8.unk0->entry[var_s4]; + for (roomIter = 0; roomIter < D_801BEC1C; roomIter++) { + var_s2 = false; + entry = &D_801BEBB8.minimapList->entry[roomIter]; if (entry->mapId == 0xFFFF) { continue; - } else { - temp_v0 = func_80109BA0(entry->mapId); - if (temp_v0 == -1) { - continue; - } else { - for (var_s1 = 0; var_s1 < D_801F56B0.rooms; var_s1++) { - if (temp_v0 == D_801F56B0.unk4[var_s1]) { - var_s2 = 1; - break; - } - } - if (var_s2 == 0) { - D_801F56B0.unk4[D_801F56B0.rooms] = temp_v0; - D_801F56B0.rooms += 1; - } + } + mapCompactId = MapData_GetMapCompactId(entry->mapId); + if (mapCompactId == -1) { + continue; + } + for (dungeonMapRoomIter = 0; dungeonMapRoomIter < D_801F56B0.rooms; dungeonMapRoomIter++) { + if (mapCompactId == D_801F56B0.unk4[dungeonMapRoomIter]) { + var_s2 = true; + break; } } + if (var_s2 == false) { + D_801F56B0.unk4[D_801F56B0.rooms] = mapCompactId; + D_801F56B0.rooms += 1; + } } D_801F56B0.unk84[0] = heap; - for (var_s1 = 0; var_s1 < D_801F56B0.rooms; var_s1++) { - temp_s2 = D_801F56B0.unk4[var_s1]; - 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_GetMapSize(temp_s2)); + for (dungeonMapRoomIter = 0; dungeonMapRoomIter < D_801F56B0.rooms; dungeonMapRoomIter++) { + mapId = D_801F56B0.unk4[dungeonMapRoomIter]; + MapDisp_GetMapITexture(D_801F56B0.unk84[dungeonMapRoomIter], mapId); + if (dungeonMapRoomIter + 1 < D_801F56B0.rooms) { + D_801F56B0.unk84[dungeonMapRoomIter + 1] = + ALIGN16((intptr_t)D_801F56B0.unk84[dungeonMapRoomIter] + MapData_CPID_GetSizeOfMapTex(mapId)); } else { - heapNext = (intptr_t)D_801F56B0.unk84[var_s1] + MapData_GetMapSize(temp_s2); + heapNext = (intptr_t)D_801F56B0.unk84[dungeonMapRoomIter] + MapData_CPID_GetSizeOfMapTex(mapId); } } - for (var_s4 = 0; var_s4 < D_801BEC1C; var_s4++) { - entry = &D_801BEBB8.unk0->entry[var_s4]; + for (roomIter = 0; roomIter < D_801BEC1C; roomIter++) { + entry = &D_801BEBB8.minimapList->entry[roomIter]; if (entry->mapId == 0xFFFF) { - D_801F56B0.unk104[var_s4] = NULL; + D_801F56B0.unk104[roomIter] = NULL; } else { var_s3 = false; - temp_v0 = func_80109BA0(entry->mapId); - for (var_s1 = 0; var_s1 < D_801F56B0.rooms; var_s1++) { - if (temp_v0 == D_801F56B0.unk4[var_s1]) { + mapCompactId = MapData_GetMapCompactId(entry->mapId); + for (dungeonMapRoomIter = 0; dungeonMapRoomIter < D_801F56B0.rooms; dungeonMapRoomIter++) { + if (mapCompactId == D_801F56B0.unk4[dungeonMapRoomIter]) { var_s3 = true; break; } } if (!var_s3) { - D_801F56B0.unk104[var_s4] = NULL; + D_801F56B0.unk104[roomIter] = NULL; } else { - void* dummy = D_801F56B0.unk84[var_s1]; //! FAKE: + void* dummy = D_801F56B0.unk84[dungeonMapRoomIter]; //! FAKE: - D_801F56B0.unk104[var_s4] = D_801F56B0.unk84[var_s1]; + D_801F56B0.unk104[roomIter] = D_801F56B0.unk84[dungeonMapRoomIter]; } } } @@ -1205,10 +1206,10 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); for (var_s2 = 0; var_s2 < D_801BEC1C; var_s2++) { - s32 sp118; - s32 sp114; - s32 sp110; - s32 sp10C; + s32 sp118_texWidth; + s32 sp114_texHeight; + s32 sp110_offsetX; + s32 sp10C_offsetY; MinimapEntry* sp108; s32 pad104; s32 sp100; @@ -1221,66 +1222,70 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s32 padE4; s32 padE0; - sp108 = &D_801BEBB8.unk0->entry[var_s2]; + sp108 = &D_801BEBB8.minimapList->entry[var_s2]; if ((sp108->mapId != 0xFFFF) && (sp108->mapId < 0x162)) { if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) && ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { temp_s1 = D_801F56B0.unk104[var_s2]; if (temp_s1 != NULL) { - spE8 = func_80109BA0(sp108->mapId); + spE8 = MapData_GetMapCompactId(sp108->mapId); if (spE8 == -1) { continue; } else { // sp3C = play + 0x18000; - func_80109D40(spE8, &sp118, &sp114); - func_80109DD8(spE8, &sp110, &sp10C); + MapData_CPID_GetTexDim(spE8, &sp118_texWidth, &sp114_texHeight); + MapData_CPID_GetTexOffset(spE8, &sp110_offsetX, &sp10C_offsetY); if (sp108->unk8 & 1) { - sp110 = (sp118 / 2 - sp110) + sp118 / 2; - sp100 = (sp118 - 1) << 5; + sp110_offsetX = (sp118_texWidth / 2 - sp110_offsetX) + sp118_texWidth / 2; + sp100 = (sp118_texWidth - 1) << 5; spF8 = 0xFC00; } else { sp100 = 0; spF8 = 0x400; } if (sp108->unk8 & 2) { - sp10C = (sp114 / 2 - sp10C) + sp114 / 2; - spFC = (sp114 - 1) << 5; + sp10C_offsetY = (sp114_texHeight / 2 - sp10C_offsetY) + sp114_texHeight / 2; + spFC = (sp114_texHeight - 1) << 5; spF4 = 0xFC00; } else { spFC = 0; spF4 = 0x400; } - spF0 = ((sp108->unk2 - (f32)D_801BEBB8.unk38) * arg5 - sp110) + ((arg3 / 2) + arg1); - spEC = ((sp108->unk6 - (f32)D_801BEBB8.unk3A) * arg5 - sp10C) + ((arg4 / 2) + arg2); + spF0 = ((sp108->unk2 - (f32)D_801BEBB8.sceneMidX) * arg5 - sp110_offsetX) + ((arg3 / 2) + arg1); + spEC = ((sp108->unk6 - (f32)D_801BEBB8.sceneMidZ) * arg5 - sp10C_offsetY) + ((arg4 / 2) + arg2); if (var_s2 == play->roomCtx.curRoom.num) { if (Map_IsInBossArea(play) != 0) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, + sp114_texHeight, 1, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); } else { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 2, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, + sp114_texHeight, 2, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); } } else if (gSaveContext.save.saveInfo .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] .rooms & (1 << var_s2)) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, + sp114_texHeight, 1, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); } else if (CHECK_DUNGEON_ITEM( 2, arg6)) { //*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 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); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, + sp114_texHeight, 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); } else { continue; } - gSPTextureRectangle(POLY_OPA_DISP++, (spF0 << 2), (spEC << 2), (spF0 + sp118) << 2, - (spEC + sp114) << 2, 0, sp100, spFC, spF8, spF4); + gSPTextureRectangle(POLY_OPA_DISP++, (spF0 << 2), (spEC << 2), (spF0 + sp118_texWidth) << 2, + (spEC + sp114_texHeight) << 2, 0, sp100, spFC, spF8, spF4); gDPPipeSync(POLY_OPA_DISP++); } } @@ -1410,10 +1415,10 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 var_s3 = 0; var_s0 = D_801BEBB8.unk54; - // if (D_801BEBB8.unk50 > 0) { - for (var_s3 = 0; var_s3 < D_801BEBB8.unk50; var_s3++) { + // if (D_801BEBB8.numChests > 0) { + for (var_s3 = 0; var_s3 < D_801BEBB8.numChests; var_s3++) { sp3C = var_s0[var_s3].unk0; - sp38 = &D_801BEBB8.unk0->entry[sp3C]; + sp38 = &D_801BEBB8.minimapList->entry[sp3C]; switch (arg0->sceneId) { case SCENE_MITURIN_BS: var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest & (1 << var_s0[var_s3].unk2); @@ -1437,9 +1442,9 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } else if (func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[var_s3].unk6) == 0) { continue; } else { - temp_ft0 = (s32)(((((f32)var_s0[var_s3].unk4 - (f32)D_801BEBB8.unk38) * arg5) - (f32)4) + + temp_ft0 = (s32)(((((f32)var_s0[var_s3].unk4 - (f32)D_801BEBB8.sceneMidX) * arg5) - (f32)4) + (f32)((arg3 / 2) + arg1)); - temp_ft0_2 = (s32)(((((f32)var_s0[var_s3].unk8 - (f32)D_801BEBB8.unk3A) * arg5) - (f32)4) + + temp_ft0_2 = (s32)(((((f32)var_s0[var_s3].unk8 - (f32)D_801BEBB8.sceneMidZ) * arg5) - (f32)4) + (f32)((arg4 / 2) + arg2)); // temp_v1_13 = temp_s1->polyOpa.p; // temp_s1->polyOpa.p = temp_v1_13 + 8; @@ -1482,17 +1487,19 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 roomA = D_801F53B0[i].sides[0].room; roomB = D_801F53B0[i].sides[1].room; if (CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) || (roomA < 0) || - (gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] + (gSaveContext.save.saveInfo + .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] .rooms & (1 << roomA)) || (roomB < 0) || - (gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] + (gSaveContext.save.saveInfo + .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] .rooms & (1 << roomB))) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - tempX = ((f32)D_801F53B0[i].pos.x - D_801BEBB8.unk38) * arg5 + ((arg3 / 2) + arg1); - tempY = ((f32)D_801F53B0[i].pos.z - D_801BEBB8.unk3A) * arg5 + ((arg4 / 2) + arg2); + tempX = ((f32)D_801F53B0[i].pos.x - D_801BEBB8.sceneMidX) * arg5 + ((arg3 / 2) + arg1); + tempY = ((f32)D_801F53B0[i].pos.z - D_801BEBB8.sceneMidZ) * arg5 + ((arg4 / 2) + arg2); gSPTextureRectangle(POLY_OPA_DISP++, ((tempX - 1) << 2), ((tempY - 1) << 2), ((tempX + 1) << 2), ((tempY + 1) << 2), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); } @@ -1528,9 +1535,10 @@ void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 if ((func_80105328((s32)D_801F53B0[var_s2].params) != 0) && (func_80106BEC((s32)D_801BEBB8.unk42, (f32)D_801F53B0[var_s2].pos.y) != 0)) { if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) { - temp_ft0 = ((((f32)D_801F53B0[var_s2].pos.x - D_801BEBB8.unk38) * arg5) - 4) + ((arg3 / 2) + arg1); + temp_ft0 = + ((((f32)D_801F53B0[var_s2].pos.x - D_801BEBB8.sceneMidX) * arg5) - 4) + ((arg3 / 2) + arg1); temp_ft0_2 = - ((((f32)D_801F53B0[var_s2].pos.z - D_801BEBB8.unk3A) * arg5) - 4) + ((arg4 / 2) + arg2); + ((((f32)D_801F53B0[var_s2].pos.z - D_801BEBB8.sceneMidZ) * arg5) - 4) + ((arg4 / 2) + arg2); gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); } @@ -1583,7 +1591,7 @@ void func_80108AF8(PlayState* play) { s32 var_s1; s32 spB4 = 0; - if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (func_80108A64(play) == 0)) { + if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0) && (func_80108A64(play) == 0)) { if (Map_IsInBossArea(play) != 0) { switch (play->sceneId) { case SCENE_MITURIN_BS: @@ -1608,7 +1616,8 @@ void func_80108AF8(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); for (var_s1 = 0; var_s1 < D_801BEBB8.unk40; var_s1++) { - if ((gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))].unk_14 & + if ((gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] + .unk_14 & gBitFlags[4 - var_s1]) || CHECK_DUNGEON_ITEM2(2, spB4)) { gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b, @@ -1645,7 +1654,7 @@ void func_80108AF8(PlayState* play) { } s32 func_801090B0(s32 arg0) { - if ((D_801BEBB8.unk0 == NULL) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (D_801BEC1C == 0)) { return false; } if ((arg0 < 0) || (arg0 >= 6)) { @@ -1660,7 +1669,7 @@ s32 func_801090B0(s32 arg0) { s32 func_80109124(s16 arg0) { s32 i; - if ((D_801BEBB8.unk0 == NULL) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (D_801BEC1C == 0)) { return -1; } if (D_801BEBB8.unk40 < 2) { @@ -1709,11 +1718,11 @@ void func_801091F0(PlayState* play) { } else { sp44 = gSaveContext.mapIndex; } - temp_a0 = D_801BEBB8.unk0->entry->mapId; + temp_a0 = D_801BEBB8.minimapList->entry->mapId; if ((temp_a0 != 0xFFFF) && (temp_a0 < 0x162)) { - temp_v0_2 = func_80109BA0(temp_a0); + temp_v0_2 = MapData_GetMapCompactId(temp_a0); if (temp_v0_2 != -1) { - var_t2 = func_80109F78(temp_v0_2); + var_t2 = MapData_CPID_GetMapScale(temp_v0_2); if (var_t2 == 0) { var_t2 = 0x50; } diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index 534f9b2c3..0ca5a9683 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -152,7 +152,7 @@ void Map_InitRoomData(PlayState* play, s16 room) { s32 mapIndex = gSaveContext.mapIndex; InterfaceContext* interfaceCtx = &play->interfaceCtx; - func_80105C40(room); + MapDisp_SwapRooms(room); if (room >= 0) { if (Map_IsInDungeonOrBossArea(play)) { @@ -178,7 +178,7 @@ void Map_Init(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; s32 dungeonIndex; - func_80105C40(play->roomCtx.curRoom.num); + MapDisp_SwapRooms(play->roomCtx.curRoom.num); interfaceCtx->unk_278 = -1; interfaceCtx->dungeonOrBossAreaMapIndex = -1; interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.heap, 0x1000); diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 3a64f9763..69f64156b 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -697,7 +697,8 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) { } if (sp44->unk_04 != 0) { - TransitionActorEntry* transitionEntry = &play->transitionActors.list[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)]; + TransitionActorEntry* transitionEntry = + &play->transitionActors.list[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)]; if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.h b/src/overlays/actors/ovl_En_Door/z_en_door.h index 03dc31ab6..417dc69c4 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.h +++ b/src/overlays/actors/ovl_En_Door/z_en_door.h @@ -9,6 +9,7 @@ struct EnDoor; typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*); +#define ENDOOR_PARAMS_GET_TYPE(params) ((params >> 7) & 7) #define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7) #define ENDOOR_GET_PARAM_7F(thisx) (((thisx)->params) & 0x7F) diff --git a/tools/buildtools/makeyar.c b/tools/buildtools/makeyar.c index 6a241f6f5..e064b2050 100644 --- a/tools/buildtools/makeyar.c +++ b/tools/buildtools/makeyar.c @@ -188,20 +188,26 @@ void createArchive(Bytearray *archive, const DataSection *dataSect) { offset = firstEntryOffset; for (i = 0; i < dataSect->symbols.len; i++) { const struct Elf32_Symbol *sym = &dataSect->symbols.symbols[i]; - size_t uncompressedSize = sym->size; - uint8_t *output = malloc(uncompressedSize * sizeof(uint8_t)); // assume compressed shouldn't be bigger than uncompressed + size_t realUncompressedSize = sym->size; + size_t alignedUncompressedSize = ALIGN16(realUncompressedSize); + uint8_t *inputBuf = malloc(alignedUncompressedSize* sizeof(uint8_t)); + uint8_t *output = malloc(alignedUncompressedSize * sizeof(uint8_t)); // assume compressed shouldn't be bigger than uncompressed size_t compressedSize; + memcpy(inputBuf, &dataSect->data.bytes[sym->value], realUncompressedSize); + if (realUncompressedSize < alignedUncompressedSize) { + memset(&inputBuf[realUncompressedSize], 0, alignedUncompressedSize - realUncompressedSize); + } + output[0] = 'Y'; output[1] = 'a'; output[2] = 'z'; output[3] = '0'; - util_write_uint32_be(&output[4], uncompressedSize); + util_write_uint32_be(&output[4], alignedUncompressedSize); memset(&output[8], 0, 8); compressedSize = 0x10; - assert(sym->value + uncompressedSize <= dataSect->data.size); - compressedSize += yaz0_encode(&dataSect->data.bytes[sym->value], &output[0x10], uncompressedSize); + compressedSize += yaz0_encode(inputBuf, &output[0x10], alignedUncompressedSize); // Pad to 0x10 while (compressedSize % 0x10 != 0) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 3eaeca601..0f6f573c1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1901,7 +1901,7 @@ 0x80102DBC:("ZeldaArena_Init",), 0x80102DEC:("ZeldaArena_Cleanup",), 0x80102E10:("ZeldaArena_IsInitialized",), - 0x80102E40:("MapDisp_GetIMapTexture",), + 0x80102E40:("MapDisp_GetMapITexture",), 0x80102E90:("func_80102E90",), 0x80102EA4:("func_80102EA4",), 0x80102EB4:("func_80102EB4",), @@ -1930,7 +1930,7 @@ 0x80105818:("func_80105818",), 0x80105A40:("MapDisp_Destroy",), 0x80105B34:("func_80105B34",), - 0x80105C40:("func_80105C40",), + 0x80105C40:("MapDisp_SwapRooms",), 0x80105FE0:("func_80105FE0",), 0x80106408:("func_80106408",), 0x80106450:("func_80106450",), @@ -1939,8 +1939,8 @@ 0x8010657C:("func_8010657C",), 0x80106644:("func_80106644",), 0x8010683C:("MapDisp_ResetIMap",), - 0x801068B4:("MapDisp_InitIMap",), - 0x801068D8:("MapDisp_DestroyIMap",), + 0x801068B4:("MapDisp_InitMapI",), + 0x801068D8:("MapDisp_DestroyMapI",), 0x801068FC:("func_801068FC",), 0x80106BEC:("func_80106BEC",), 0x80106D08:("func_80106D08",), @@ -1955,45 +1955,45 @@ 0x80109124:("func_80109124",), 0x801091F0:("func_801091F0",), 0x80109428:("func_80109428",), - 0x801094A0:("func_801094A0",), + 0x801094A0:("MapData_GetMapColor",), 0x801094C8:("func_801094C8",), - 0x801094F8:("func_801094F8",), - 0x80109528:("func_80109528",), - 0x8010954C:("func_8010954C",), + 0x801094F8:("MapData_GetMapTexOffsetGameplayDangeonKeep",), + 0x80109528:("MapData_GetMapDrawTypeGameplayDangeonKeep",), + 0x8010954C:("MapData_GetMapColorIndexGameplayDangeonKeep",), 0x8010956C:("func_8010956C",), - 0x8010958C:("func_8010958C",), - 0x801095AC:("MapData_GetMapTexDimGrandMap",), - 0x801095DC:("func_801095DC",), - 0x8010960C:("func_8010960C",), - 0x80109630:("func_80109630",), - 0x80109650:("func_80109650",), - 0x80109670:("func_80109670",), - 0x801096D4:("func_801096D4",), - 0x80109714:("func_80109714",), + 0x8010958C:("MapData_GetMapTexGameplayDangeonKeep",), + 0x801095AC:("MapData_GetMapTexGameplayDangeonKeepDim",), + 0x801095DC:("MapData_GetMapTexGameplayDangeonKeepOffset",), + 0x8010960C:("MapData_GetMapGrandDrawType",), + 0x80109630:("MapData_GetMapGrandColorIndex",), + 0x80109650:("MapData_GetMapGrandScale",), + 0x80109670:("MapData_MapGrandTexSizeTest",), + 0x801096D4:("MapData_GetSizeOfMapGrandTex",), + 0x80109714:("MapData_MID_GetType",), 0x80109754:("MapData_GetMapTexDim",), - 0x801097C8:("func_801097C8",), + 0x801097C8:("MapData_GetMapTexOffset",), 0x8010983C:("MapData_GetMapScale",), - 0x801098A0:("func_801098A0",), - 0x80109908:("func_80109908",), + 0x801098A0:("MapData_GetDrawType",), + 0x80109908:("MapData_GetMapColorIndex",), 0x80109964:("func_80109964",), - 0x8010997C:("func_8010997C",), - 0x801099AC:("func_801099AC",), - 0x801099DC:("func_801099DC",), - 0x80109A00:("func_80109A00",), - 0x80109A20:("func_80109A20",), - 0x80109A40:("func_80109A40",), - 0x80109A98:("func_80109A98",), - 0x80109AD8:("func_80109AD8",), + 0x8010997C:("MapData_GetMapITexDim",), + 0x801099AC:("MapData_GetMapITexOffset",), + 0x801099DC:("MapData_GetMapIDrawType",), + 0x80109A00:("MapData_GetMapIColorIndex",), + 0x80109A20:("MapData_GetMapIScale",), + 0x80109A40:("MapData_MapITexSizeTest",), + 0x80109A98:("MapDisp_GetSizeOfMapITex",), + 0x80109AD8:("MapData_GetMapIId",), 0x80109B38:("func_80109B38",), - 0x80109BA0:("func_80109BA0",), - 0x80109BF4:("func_80109BF4",), + 0x80109BA0:("MapData_GetMapCompactId",), + 0x80109BF4:("MapData_CPID_GetType",), 0x80109C38:("func_80109C38",), - 0x80109CBC:("MapData_GetMapSize",), - 0x80109D40:("func_80109D40",), - 0x80109DD8:("func_80109DD8",), - 0x80109E70:("func_80109E70",), - 0x80109EF8:("func_80109EF8",), - 0x80109F78:("func_80109F78",), + 0x80109CBC:("MapData_CPID_GetSizeOfMapTex",), + 0x80109D40:("MapData_CPID_GetTexDim",), + 0x80109DD8:("MapData_CPID_GetTexOffset",), + 0x80109E70:("MapData_CPID_GetDrawType",), + 0x80109EF8:("MapData_CPID_GetMapColorIndex",), + 0x80109F78:("MapData_CPID_GetMapScale",), 0x8010A000:("Map_GetDungeonOrBossAreaIndex",), 0x8010A074:("Map_IsInDungeonOrBossAreaArea",), 0x8010A0A4:("func_8010A0A4",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 06d554b09..99610b6c7 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1014,13 +1014,13 @@ 0x801BECE4:("D_801BECE4","UNK_TYPE1","",0x1C), 0x801BED00:("D_801BED00","UNK_TYPE1","",0x24), 0x801BED24:("D_801BED24","UNK_TYPE2","",0x18), - 0x801BED40:("D_801BED40","UNK_TYPE1","",0x1), - 0x801BED4C:("D_801BED4C","UNK_TYPE1","",0x3C), - 0x801BED88:("D_801BED88","UNK_TYPE1","",0x1), + 0x801BED40:("mapColorTable","UNK_TYPE1","",0x1), + 0x801BED4C:("gameplay_dangeon_keep_Info","UNK_TYPE1","",0x3C), + 0x801BED88:("map_grand_static_Info","UNK_TYPE1","",0x1), 0x801BF15C:("D_801BF15C","UNK_TYPE1","",0x1), - 0x801BF170:("D_801BF170","UNK_TYPE1","",0x244), - 0x801BF3B4:("D_801BF3B4","s32","",0x14), - 0x801BF3C8:("D_801BF3C8","s32","",0x188), + 0x801BF170:("map_i_static_Info","UNK_TYPE1","",0x244), + 0x801BF3B4:("map_i_for_gameplay_dangeon_keep","s32","",0x14), + 0x801BF3C8:("map_i_for_map_grand","s32","",0x188), 0x801BF550:("D_801BF550","UNK_TYPE2","",0x2), 0x801BF554:("D_801BF554","UNK_TYPE2","",0x2), 0x801BF558:("D_801BF558","UNK_TYPE2","",0x2), diff --git a/tools/overlayhelpers/mapdata.py b/tools/overlayhelpers/mapdata.py index 26c91dfa2..2799bc5f3 100755 --- a/tools/overlayhelpers/mapdata.py +++ b/tools/overlayhelpers/mapdata.py @@ -3,15 +3,15 @@ # Extracts z_map_data.c data import argparse, os, struct, math -D_801BF170_ROM = 0x1196B0 +map_i_static_Info_ROM = 0x1196B0 CODE_START_VRAM = 0x800A5AC0 MAP_DATA_DATA_START = 0x801BED40 MAP_DATA_DATA_END = 0x801BF550 typeInfo = { "Color_RGBA8" : [ 0x04, ">BBBB", "{{ {0}, {1}, {2}, {3} }}" ], - "T_801BED4C" : [ 0x0C, ">IBBBBBBh", "{{ D_{0:08X}, {1}, {2}, {3}, {4}, 0x{5:02X}, 0x{6:02X}, {7} }}"], - "T_801BF170" : [ 0x0A, ">BBhhBBh", "{{ {0}, {1}, {2}, {3}, 0x{4:02X}, 0x{5:02X}, {6} }}"], + "MapSpriteInfo2" : [ 0x0C, ">IBBBBBBh", "{{ D_{0:08X}, {1}, {2}, {3}, {4}, MAPDATA_DRAW_{5}, {6}, {7} }}"], + "MapSpriteInfo" : [ 0x0A, ">BBhhBBh", "{{ {0}, {1}, {2}, {3}, MAPDATA_DRAW_{4}, {5}, {6} }}"], "s32" : [ 0x04, ">I", "0x{0:02X}"] } @@ -27,10 +27,10 @@ def GetDataOff(vram): def dumpList(data, vram, keyword, typeKey, varName, length): if keyword is None: keyword = "" - else: + else: keyword = f"{keyword} " cstr = f"{keyword}{typeKey} {varName}[{length}] = {{\n" - + ty = typeInfo[typeKey] off = GetDataOff(vram) for i in range(length): @@ -41,6 +41,54 @@ def dumpList(data, vram, keyword, typeKey, varName, length): return cstr +def dumpMapGrandStatic(data, vram, typeKey, length): + xmlStr = "\n" + ty = typeInfo[typeKey] + off = GetDataOff(vram) + mapId = 0x100 + textureOff = 0 + + for i in range(length): + val = struct.unpack_from(ty[1], data, off) + off += ty[0] + textureWidth = val[0] + textureHeight = val[1] + + xmlStr += f' \n' + # inc cursors + + textureOff += textureWidth * textureHeight // 2 + textureOff = ((textureOff + 0xF) // 0x10) * 0x10 + mapId += 1 + + + xmlStr += "};\n" + return xmlStr + +def dumpMapIStatic(data, vram, typeKey, length): + xmlStr = "\n" + ty = typeInfo[typeKey] + off = GetDataOff(vram) + mapId = 0x0 + textureOff = 0 + + for i in range(length): + val = struct.unpack_from(ty[1], data, off) + off += ty[0] + textureWidth = val[0] + textureHeight = val[1] + + xmlStr += f' \n' + # inc cursors + + textureOff += textureWidth * textureHeight // 2 + textureOff = ((textureOff + 0xF) // 0x10) * 0x10 + mapId += 1 + + + xmlStr += "};\n" + return xmlStr + def dump(): data = [] @@ -49,13 +97,16 @@ def dump(): codefile.seek(GetCodeOff(MAP_DATA_DATA_START)) data = codefile.read(MAP_DATA_DATA_END - MAP_DATA_DATA_START) - cstr += dumpList(data, 0x801BED40, "static", "Color_RGBA8", "D_801BED40", 3) - cstr += dumpList(data, 0x801BED4C, "static", "T_801BED4C", "D_801BED4C", 5) - cstr += dumpList(data, 0x801BED88, "static", "T_801BF170", "D_801BED88", 0x62) + cstr += dumpList(data, 0x801BED40, "static", "Color_RGBA8", "mapColorTable", 3) + cstr += dumpList(data, 0x801BED4C, "static", "MapSpriteInfo2", "gameplay_dangeon_keep_Info", 5) + cstr += dumpList(data, 0x801BED88, "static", "MapSpriteInfo", "map_grand_static_Info", 98) cstr += dumpList(data, 0x801BF15C, "static", "s32", "D_801BF15C", 5) - cstr += dumpList(data, 0x801BF170, "static", "T_801BF170", "D_801BF170", 0x3A) - cstr += dumpList(data, 0x801BF3B4, "static", "s32", "D_801BF3B4", 5) - cstr += dumpList(data, 0x801BF3C8, "static", "s32", "D_801BF3C8", 0x62) + cstr += dumpList(data, 0x801BF170, "static", "MapSpriteInfo", "map_i_static_Info", 58) + cstr += dumpList(data, 0x801BF3B4, "static", "s32", "map_i_for_gameplay_dangeon_keep", 5) + cstr += dumpList(data, 0x801BF3C8, "static", "s32", "map_i_for_map_grand", 98) + + cstr += dumpMapGrandStatic(data, 0x801BED88, "MapSpriteInfo", 98) + cstr += dumpMapIStatic(data, 0x801BF170, "MapSpriteInfo", 58) print(cstr) diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 42d1e5f0b..2d023a046 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1444,7 +1444,7 @@ asm/non_matchings/code/z_map_disp/func_8010565C.s,func_8010565C,0x8010565C,0x6F asm/non_matchings/code/z_map_disp/func_80105818.s,func_80105818,0x80105818,0x8A asm/non_matchings/code/z_map_disp/func_80105A40.s,func_80105A40,0x80105A40,0x3D asm/non_matchings/code/z_map_disp/func_80105B34.s,func_80105B34,0x80105B34,0x43 -asm/non_matchings/code/z_map_disp/func_80105C40.s,func_80105C40,0x80105C40,0xE8 +asm/non_matchings/code/z_map_disp/MapDisp_SwapRooms.s,MapDisp_SwapRooms,0x80105C40,0xE8 asm/non_matchings/code/z_map_disp/func_80105FE0.s,func_80105FE0,0x80105FE0,0x10A asm/non_matchings/code/z_map_disp/func_80106408.s,func_80106408,0x80106408,0x12 asm/non_matchings/code/z_map_disp/func_80106450.s,func_80106450,0x80106450,0x1F @@ -1469,45 +1469,45 @@ asm/non_matchings/code/z_map_disp/func_801090B0.s,func_801090B0,0x801090B0,0x1D asm/non_matchings/code/z_map_disp/func_80109124.s,func_80109124,0x80109124,0x33 asm/non_matchings/code/z_map_disp/func_801091F0.s,func_801091F0,0x801091F0,0x8E asm/non_matchings/code/z_map_disp/func_80109428.s,func_80109428,0x80109428,0x1E -asm/non_matchings/code/z_map_data/func_801094A0.s,func_801094A0,0x801094A0,0xA +asm/non_matchings/code/z_map_data/MapData_GetMapColor.s,MapData_GetMapColor,0x801094A0,0xA asm/non_matchings/code/z_map_data/func_801094C8.s,func_801094C8,0x801094C8,0xC -asm/non_matchings/code/z_map_data/func_801094F8.s,func_801094F8,0x801094F8,0xC -asm/non_matchings/code/z_map_data/func_80109528.s,func_80109528,0x80109528,0x9 -asm/non_matchings/code/z_map_data/func_8010954C.s,func_8010954C,0x8010954C,0x8 +asm/non_matchings/code/z_map_data/MapData_GetMapTexOffsetGameplayDangeonKeep.s,MapData_GetMapTexOffsetGameplayDangeonKeep,0x801094F8,0xC +asm/non_matchings/code/z_map_data/MapData_GetMapDrawTypeGameplayDangeonKeep.s,MapData_GetMapDrawTypeGameplayDangeonKeep,0x80109528,0x9 +asm/non_matchings/code/z_map_data/MapData_GetMapColorIndexGameplayDangeonKeep.s,MapData_GetMapColorIndexGameplayDangeonKeep,0x8010954C,0x8 asm/non_matchings/code/z_map_data/func_8010956C.s,func_8010956C,0x8010956C,0x8 -asm/non_matchings/code/z_map_data/func_8010958C.s,func_8010958C,0x8010958C,0x8 +asm/non_matchings/code/z_map_data/MapData_GetMapTexGameplayDangeonKeep.s,MapData_GetMapTexGameplayDangeonKeep,0x8010958C,0x8 asm/non_matchings/code/z_map_data/func_801095AC.s,func_801095AC,0x801095AC,0xC -asm/non_matchings/code/z_map_data/func_801095DC.s,func_801095DC,0x801095DC,0xC -asm/non_matchings/code/z_map_data/func_8010960C.s,func_8010960C,0x8010960C,0x9 -asm/non_matchings/code/z_map_data/func_80109630.s,func_80109630,0x80109630,0x8 -asm/non_matchings/code/z_map_data/func_80109650.s,func_80109650,0x80109650,0x8 -asm/non_matchings/code/z_map_data/func_80109670.s,func_80109670,0x80109670,0x19 -asm/non_matchings/code/z_map_data/func_801096D4.s,func_801096D4,0x801096D4,0x10 -asm/non_matchings/code/z_map_data/func_80109714.s,func_80109714,0x80109714,0x10 +asm/non_matchings/code/z_map_data/MapData_GetMapTexGameplayDangeonKeepOffset.s,MapData_GetMapTexGameplayDangeonKeepOffset,0x801095DC,0xC +asm/non_matchings/code/z_map_data/MapData_GetMapGrandDrawType.s,MapData_GetMapGrandDrawType,0x8010960C,0x9 +asm/non_matchings/code/z_map_data/MapData_GetMapGrandColorIndex.s,MapData_GetMapGrandColorIndex,0x80109630,0x8 +asm/non_matchings/code/z_map_data/MapData_GetMapGrandScale.s,MapData_GetMapGrandScale,0x80109650,0x8 +asm/non_matchings/code/z_map_data/MapData_MapGrandTexSizeTest.s,MapData_MapGrandTexSizeTest,0x80109670,0x19 +asm/non_matchings/code/z_map_data/MapData_GetSizeOfMapGrandTex.s,MapData_GetSizeOfMapGrandTex,0x801096D4,0x10 +asm/non_matchings/code/z_map_data/MapData_MID_GetType.s,MapData_MID_GetType,0x80109714,0x10 asm/non_matchings/code/z_map_data/func_80109754.s,func_80109754,0x80109754,0x1D -asm/non_matchings/code/z_map_data/func_801097C8.s,func_801097C8,0x801097C8,0x1D +asm/non_matchings/code/z_map_data/MapData_GetMapTexOffset.s,MapData_GetMapTexOffset,0x801097C8,0x1D asm/non_matchings/code/z_map_data/func_8010983C.s,func_8010983C,0x8010983C,0x19 -asm/non_matchings/code/z_map_data/func_801098A0.s,func_801098A0,0x801098A0,0x1A -asm/non_matchings/code/z_map_data/func_80109908.s,func_80109908,0x80109908,0x17 +asm/non_matchings/code/z_map_data/MapData_GetDrawType.s,MapData_GetDrawType,0x801098A0,0x1A +asm/non_matchings/code/z_map_data/MapData_GetMapColorIndex.s,MapData_GetMapColorIndex,0x80109908,0x17 asm/non_matchings/code/z_map_data/func_80109964.s,func_80109964,0x80109964,0x6 -asm/non_matchings/code/z_map_data/func_8010997C.s,func_8010997C,0x8010997C,0xC -asm/non_matchings/code/z_map_data/func_801099AC.s,func_801099AC,0x801099AC,0xC -asm/non_matchings/code/z_map_data/func_801099DC.s,func_801099DC,0x801099DC,0x9 -asm/non_matchings/code/z_map_data/func_80109A00.s,func_80109A00,0x80109A00,0x8 -asm/non_matchings/code/z_map_data/func_80109A20.s,func_80109A20,0x80109A20,0x8 -asm/non_matchings/code/z_map_data/func_80109A40.s,func_80109A40,0x80109A40,0x16 -asm/non_matchings/code/z_map_data/func_80109A98.s,func_80109A98,0x80109A98,0x10 -asm/non_matchings/code/z_map_data/func_80109AD8.s,func_80109AD8,0x80109AD8,0x18 +asm/non_matchings/code/z_map_data/MapData_GetMapITexDim.s,MapData_GetMapITexDim,0x8010997C,0xC +asm/non_matchings/code/z_map_data/MapData_GetMapITexOffset.s,MapData_GetMapITexOffset,0x801099AC,0xC +asm/non_matchings/code/z_map_data/MapData_GetMapIDrawType.s,MapData_GetMapIDrawType,0x801099DC,0x9 +asm/non_matchings/code/z_map_data/MapData_GetMapIColorIndex.s,MapData_GetMapIColorIndex,0x80109A00,0x8 +asm/non_matchings/code/z_map_data/MapData_GetMapIScale.s,MapData_GetMapIScale,0x80109A20,0x8 +asm/non_matchings/code/z_map_data/MapData_MapITexSizeTest.s,MapData_MapITexSizeTest,0x80109A40,0x16 +asm/non_matchings/code/z_map_data/MapDisp_GetSizeOfMapITex.s,MapDisp_GetSizeOfMapITex,0x80109A98,0x10 +asm/non_matchings/code/z_map_data/MapData_GetMapIId.s,MapData_GetMapIId,0x80109AD8,0x18 asm/non_matchings/code/z_map_data/func_80109B38.s,func_80109B38,0x80109B38,0x1A -asm/non_matchings/code/z_map_data/func_80109BA0.s,func_80109BA0,0x80109BA0,0x15 -asm/non_matchings/code/z_map_data/func_80109BF4.s,func_80109BF4,0x80109BF4,0x11 +asm/non_matchings/code/z_map_data/MapData_GetMapCompactId.s,MapData_GetMapCompactId,0x80109BA0,0x15 +asm/non_matchings/code/z_map_data/MapData_CPID_GetType.s,MapData_CPID_GetType,0x80109BF4,0x11 asm/non_matchings/code/z_map_data/func_80109C38.s,func_80109C38,0x80109C38,0x21 asm/non_matchings/code/z_map_data/func_80109CBC.s,func_80109CBC,0x80109CBC,0x21 -asm/non_matchings/code/z_map_data/func_80109D40.s,func_80109D40,0x80109D40,0x26 -asm/non_matchings/code/z_map_data/func_80109DD8.s,func_80109DD8,0x80109DD8,0x26 -asm/non_matchings/code/z_map_data/func_80109E70.s,func_80109E70,0x80109E70,0x22 -asm/non_matchings/code/z_map_data/func_80109EF8.s,func_80109EF8,0x80109EF8,0x20 -asm/non_matchings/code/z_map_data/func_80109F78.s,func_80109F78,0x80109F78,0x22 +asm/non_matchings/code/z_map_data/MapData_CPID_GetTexDim.s,MapData_CPID_GetTexDim,0x80109D40,0x26 +asm/non_matchings/code/z_map_data/MapData_CPID_GetTexOffset.s,MapData_CPID_GetTexOffset,0x80109DD8,0x26 +asm/non_matchings/code/z_map_data/MapData_CPID_GetDrawType.s,MapData_CPID_GetDrawType,0x80109E70,0x22 +asm/non_matchings/code/z_map_data/MapData_CPID_GetMapColorIndex.s,MapData_CPID_GetMapColorIndex,0x80109EF8,0x20 +asm/non_matchings/code/z_map_data/MapData_CPID_GetMapScale.s,MapData_CPID_GetMapScale,0x80109F78,0x22 asm/non_matchings/code/z_map_exp/Map_GetDungeonOrBossAreaIndex.s,Map_GetDungeonOrBossAreaIndex,0x8010A000,0x1D asm/non_matchings/code/z_map_exp/Map_IsInDungeonOrBossArea.s,Map_IsInDungeonOrBossArea,0x8010A074,0xC asm/non_matchings/code/z_map_exp/func_8010A0A4.s,func_8010A0A4,0x8010A0A4,0x13 From fffc9d0bbb8082d532728e73fcb9282bfb809ba6 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 12 Oct 2023 21:44:01 -0400 Subject: [PATCH 20/28] minor tweaks --- include/z64map.h | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index 2eba34577..b0cde3651 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -18,7 +18,6 @@ mapId mapCompactId 0x000-0x039 fetches dungeon minimap data from map_i_static 0x03A-0x09B fetches L-minimap data from map_grand_static - */ #define FLOOR_INDEX_MAX 4 @@ -33,7 +32,6 @@ mapCompactId #define MAPDATA_MID_MAP_GRAND_STATIC 1 #define MAPDATA_MID_MAP_I_STATIC 2 - #define MAPDATA_CPID_MAP_GRAND_STATIC 0 #define MAPDATA_CPID_MAP_I_STATIC 1 #define MAPDATA_CPID_2 2 @@ -43,6 +41,16 @@ mapCompactId #define MAPDATA_DRAW_2 2 #define MAPDATA_DRAW_3 3 +typedef struct { + u8 texWidth; + u8 texHeight; + s16 offsetX; + s16 offsetY; + u8 drawType; + u8 colorIndex; + s16 scale; +} MapSpriteInfo; // size 0x0A + typedef struct { /* 0x00 */ TexturePtr lmapTex; //minimap texture /* 0x04 */ u8 width; @@ -54,16 +62,6 @@ typedef struct { /* 0x0A */ s16 scale; } MapSpriteInfo2; // size 0x0C -typedef struct { - u8 texWidth; - u8 texHeight; - s16 offsetX; - s16 offsetY; - u8 drawType; - u8 colorIndex; - s16 scale; -} MapSpriteInfo; // size 0x0A - /* z_map_disp */ typedef struct { From 3444cdbfc9fca5b8a511c8dd6b5b1e07a3527d32 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Fri, 13 Oct 2023 18:14:53 -0400 Subject: [PATCH 21/28] implement easy fixes --- src/code/z_map_data.c | 104 +++++++++++++++++++++++--------------- src/code/z_map_disp.c | 114 ++++++++++++++++++++++++++++++------------ 2 files changed, 146 insertions(+), 72 deletions(-) diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index 0dbd8d534..24a995cbb 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -2,13 +2,13 @@ #include "z64map.h" #include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" -static Color_RGBA8 mapColorTable[3] = { +static Color_RGBA8 sMapColorTable[] = { { 255, 255, 255, 255 }, { 0, 255, 255, 160 }, // Blue { 100, 255, 255, 255 }, }; -static MapSpriteInfo2 gameplay_dangeon_keep_Info[5] = { +static MapSpriteInfo2 sGameplayDangeonKeepInfo[5] = { { &gameplay_dangeon_keep_Tex_0022C8, 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, { &gameplay_dangeon_keep_Tex_0042C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, { &gameplay_dangeon_keep_Tex_0052C8, 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, @@ -16,7 +16,7 @@ static MapSpriteInfo2 gameplay_dangeon_keep_Info[5] = { { &gameplay_dangeon_keep_Tex_0062C8, 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, }; -static MapSpriteInfo map_grand_static_Info[98] = { +static MapSpriteInfo sMapGrandStaticInfo[98] = { { 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, { 80, 72, 40, 35, MAPDATA_DRAW_1, 1, 52 }, @@ -72,7 +72,7 @@ static s32 D_801BF15C[5] = { 0x50, 0x50, 0x8D, 0x50, 0x50, }; -static MapSpriteInfo map_i_static_Info[MAPDATA_MAP_I_MAX] = { +static MapSpriteInfo sMapIStaticInfo[MAPDATA_MAP_I_MAX] = { { 96, 85, 73, 67, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 73, 74, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 80, 67, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 73, 67, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 80, 74, MAPDATA_DRAW_0, 0, 60 }, { 32, 29, 17, 14, MAPDATA_DRAW_2, 0, 50 }, @@ -104,11 +104,11 @@ static MapSpriteInfo map_i_static_Info[MAPDATA_MAP_I_MAX] = { { 16, 30, 9, 8, MAPDATA_DRAW_2, 0, 90 }, { 16, 9, 9, 4, MAPDATA_DRAW_2, 0, 90 }, }; -static s32 map_i_for_gameplay_dangeon_keep[5] = { +static s32 sMapIForGameplayDangeonKeep[5] = { 0x00, 0x01, 0x02, 0x03, 0x04, }; -static s32 map_i_for_map_grand[98] = { +static s32 sMapIForMapGrand[98] = { MAPDATA_MAP_I_MAX, 0x01, 0x02, @@ -212,55 +212,55 @@ static s32 map_i_for_map_grand[98] = { s32 MapDisp_GetSizeOfMapITex(s32 mapId); void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color) { - *color = mapColorTable[colorIndex]; + *color = sMapColorTable[colorIndex]; } void MapData_GetMapTexDimGameplayDangeonKeep(s32 mapId, s32* width, s32* height) { - *width = gameplay_dangeon_keep_Info[mapId].width; - *height = gameplay_dangeon_keep_Info[mapId].height; + *width = sGameplayDangeonKeepInfo[mapId].width; + *height = sGameplayDangeonKeepInfo[mapId].height; } void MapData_GetMapTexOffsetGameplayDangeonKeep(s32 mapId, s32* offsetX, s32* offsetY) { - *offsetX = gameplay_dangeon_keep_Info[mapId].offsetX; - *offsetY = gameplay_dangeon_keep_Info[mapId].offsetY; + *offsetX = sGameplayDangeonKeepInfo[mapId].offsetX; + *offsetY = sGameplayDangeonKeepInfo[mapId].offsetY; } void MapData_GetMapDrawTypeGameplayDangeonKeep(s32 mapId, s32* drawType) { - *drawType = gameplay_dangeon_keep_Info[mapId].drawType; + *drawType = sGameplayDangeonKeepInfo[mapId].drawType; } u8 MapData_GetMapColorIndexGameplayDangeonKeep(s32 mapId) { - return gameplay_dangeon_keep_Info[mapId].colorIndex; + return sGameplayDangeonKeepInfo[mapId].colorIndex; } s16 MapData_GetMapGameplayDangeonKeepScale(s32 mapId) { - return gameplay_dangeon_keep_Info[mapId].scale; + return sGameplayDangeonKeepInfo[mapId].scale; } TexturePtr MapData_GetMapTexGameplayDangeonKeep(s32 mapId) { - return gameplay_dangeon_keep_Info[mapId].lmapTex; + return sGameplayDangeonKeepInfo[mapId].lmapTex; } void MapData_GetMapTexGameplayDangeonKeepDim(s32 mapId, s32* width, s32* height) { - *width = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth; - *height = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight; + *width = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth; + *height = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight; } void MapData_GetMapTexGameplayDangeonKeepOffset(s32 mapId, s32* offsetX, s32* offsetY) { - *offsetX = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetX; - *offsetY = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetY; + *offsetX = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetX; + *offsetY = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetY; } void MapData_GetMapGrandDrawType(s32 mapId, s32* drawType) { - *drawType = map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].drawType; + *drawType = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].drawType; } u8 MapData_GetMapGrandColorIndex(s32 mapId) { - return map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].colorIndex; + return sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].colorIndex; } s16 MapData_GetMapGrandScale(s32 mapId) { - return map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].scale; + return sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].scale; } s32 MapData_MapGrandTexSizeTest(s32 mapId) { @@ -275,8 +275,8 @@ s32 MapData_MapGrandTexSizeTest(s32 mapId) { } s32 MapData_GetSizeOfMapGrandTex(s32 mapId) { - return (map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth * - map_grand_static_Info[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight) / + return (sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth * + sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight) / 2; } @@ -295,9 +295,11 @@ void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: MapData_GetMapTexDimGameplayDangeonKeep(mapId, width, height); return; + case MAPDATA_MID_MAP_GRAND_STATIC: MapData_GetMapTexGameplayDangeonKeepDim(mapId, width, height); return; + default: *width = *height = 0; return; @@ -309,9 +311,11 @@ void MapData_GetMapTexOffset(s32 mapId, s32* offsetX, s32* offsetY) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: MapData_GetMapTexOffsetGameplayDangeonKeep(mapId, offsetX, offsetY); return; + case MAPDATA_MID_MAP_GRAND_STATIC: MapData_GetMapTexGameplayDangeonKeepOffset(mapId, offsetX, offsetY); return; + default: *offsetX = *offsetY = 0; return; @@ -323,9 +327,11 @@ void MapData_GetMapScale(s32 mapId, s32* scale) { default: *scale = 0; return; + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: *scale = MapData_GetMapGameplayDangeonKeepScale(mapId); return; + case MAPDATA_MID_MAP_GRAND_STATIC: *scale = MapData_GetMapGrandScale(mapId); return; @@ -337,9 +343,11 @@ void MapData_GetDrawType(s32 mapId, s32* drawType) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: MapData_GetMapDrawTypeGameplayDangeonKeep(mapId, drawType); return; + case MAPDATA_MID_MAP_GRAND_STATIC: MapData_GetMapGrandDrawType(mapId, drawType); return; + default: *drawType = 0; return; @@ -350,8 +358,10 @@ s32 MapData_GetMapColorIndex(s32 mapId) { switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: return MapData_GetMapColorIndexGameplayDangeonKeep(mapId); + case MAPDATA_MID_MAP_GRAND_STATIC: return MapData_GetMapGrandColorIndex(mapId); + default: return 0; } @@ -362,32 +372,31 @@ s32 func_80109964(s32 arg0) { } void MapData_GetMapITexDim(s32 mapId, s32* width, s32* height) { - *width = map_i_static_Info[mapId].texWidth; - *height = map_i_static_Info[mapId].texHeight; + *width = sMapIStaticInfo[mapId].texWidth; + *height = sMapIStaticInfo[mapId].texHeight; } void MapData_GetMapITexOffset(s32 mapId, s32* offsetX, s32* offsetY) { - *offsetX = map_i_static_Info[mapId].offsetX; - *offsetY = map_i_static_Info[mapId].offsetY; + *offsetX = sMapIStaticInfo[mapId].offsetX; + *offsetY = sMapIStaticInfo[mapId].offsetY; } void MapData_GetMapIDrawType(s32 mapId, s32* drawType) { - *drawType = map_i_static_Info[mapId].drawType; + *drawType = sMapIStaticInfo[mapId].drawType; } u8 MapData_GetMapIColorIndex(s32 mapId) { - return map_i_static_Info[mapId].colorIndex; + return sMapIStaticInfo[mapId].colorIndex; } s16 MapData_GetMapIScale(s32 mapId) { - return map_i_static_Info[mapId].scale; + return sMapIStaticInfo[mapId].scale; } s32 MapData_MapITexSizeTest(s32 mapId) { s32 i; - s32 size; + s32 size = 0; - size = 0; for (i = 1; i < mapId + 1; i++) { size += MapDisp_GetSizeOfMapITex(i - 1); } @@ -396,15 +405,17 @@ s32 MapData_MapITexSizeTest(s32 mapId) { } s32 MapDisp_GetSizeOfMapITex(s32 mapId) { - return (map_i_static_Info[mapId].texWidth * map_i_static_Info[mapId].texHeight) / 2; + return (sMapIStaticInfo[mapId].texWidth * sMapIStaticInfo[mapId].texHeight) / 2; } s32 MapData_GetMapIId(s32 mapId) { switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - return map_i_for_gameplay_dangeon_keep[mapId]; + return sMapIForGameplayDangeonKeep[mapId]; + case MAPDATA_MID_MAP_GRAND_STATIC: - return map_i_for_map_grand[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)]; + return sMapIForMapGrand[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)]; + default: return 0; } @@ -417,8 +428,10 @@ s32 func_80109B38(s32 mapId) { switch (MapData_MID_GetType(mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: return 2; + case MAPDATA_MID_MAP_GRAND_STATIC: return 0; + default: return 0; } @@ -457,10 +470,13 @@ s32 func_80109C38(s32 mapCompactId) { switch (MapData_CPID_GetType(mapCompactId)) { case MAPDATA_CPID_MAP_GRAND_STATIC: return MapData_MapGrandTexSizeTest(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + case MAPDATA_CPID_MAP_I_STATIC: return MapData_MapITexSizeTest(mapCompactId); + case MAPDATA_CPID_2: return 0; + default: return 0; } @@ -473,16 +489,18 @@ s32 MapData_CPID_GetSizeOfMapTex(s32 mapCompactId) { switch (MapData_CPID_GetType(mapCompactId)) { case MAPDATA_CPID_MAP_GRAND_STATIC: return MapData_GetSizeOfMapGrandTex(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + case MAPDATA_CPID_MAP_I_STATIC: return MapDisp_GetSizeOfMapITex(mapCompactId); + case MAPDATA_CPID_2: return 0; + default: return 0; } } -// GOOD void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height) { if (mapCompactId == -1) { *width = *height = 0; @@ -493,9 +511,11 @@ void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height) { MapData_GetMapTexGameplayDangeonKeepDim(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), width, height); return; + case MAPDATA_CPID_MAP_I_STATIC: MapData_GetMapITexDim(mapCompactId, width, height); return; + case MAPDATA_CPID_2: default: *width = *height = 0; @@ -503,7 +523,6 @@ void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height) { } } -// GOOD void MapData_CPID_GetTexOffset(s32 mapCompactId, s32* offsetX, s32* offsetY) { if (mapCompactId == -1) { *offsetX = *offsetY = 0; @@ -514,9 +533,11 @@ void MapData_CPID_GetTexOffset(s32 mapCompactId, s32* offsetX, s32* offsetY) { MapData_GetMapTexGameplayDangeonKeepOffset(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), offsetX, offsetY); return; + case MAPDATA_CPID_MAP_I_STATIC: MapData_GetMapITexOffset(mapCompactId, offsetX, offsetY); return; + case MAPDATA_CPID_2: default: *offsetX = *offsetY = 0; @@ -534,9 +555,11 @@ void MapData_CPID_GetDrawType(s32 mapCompactId, s32* drawType) { case MAPDATA_CPID_MAP_GRAND_STATIC: MapData_GetMapGrandDrawType(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), drawType); return; + case MAPDATA_CPID_MAP_I_STATIC: MapData_GetMapIDrawType(mapCompactId, drawType); return; + case MAPDATA_CPID_2: default: *drawType = MAPDATA_DRAW_0; @@ -552,15 +575,16 @@ u8 MapData_CPID_GetMapColorIndex(s32 mapCompactId) { switch (MapData_CPID_GetType(mapCompactId)) { case MAPDATA_CPID_MAP_GRAND_STATIC: return MapData_GetMapGrandColorIndex(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + case MAPDATA_CPID_MAP_I_STATIC: return MapData_GetMapIColorIndex(mapCompactId); + case MAPDATA_CPID_2: default: return 0; } } -// GOOD s16 MapData_CPID_GetMapScale(s32 mapCompactId) { if (mapCompactId == -1) { return 0; @@ -568,8 +592,10 @@ s16 MapData_CPID_GetMapScale(s32 mapCompactId) { switch (MapData_CPID_GetType(mapCompactId)) { case MAPDATA_CPID_MAP_GRAND_STATIC: return MapData_GetMapGrandScale(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + case MAPDATA_CPID_MAP_I_STATIC: return MapData_GetMapIScale(mapCompactId); + case MAPDATA_CPID_2: default: return 0; diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index ffb406e55..384ffbb75 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,6 +1,7 @@ #include "global.h" #include "gfx.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" +#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" void MapDisp_DestroyMapI(PlayState* play); void MapDisp_InitMapI(PlayState* play); @@ -150,6 +151,7 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg if ((spCC->mapId != 0xFFFF) && (arg1 != 0)) { MapDisp_GetMapTexDim(spCC, &spC8, &spC4); OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); MapData_GetMapColor(MapData_GetMapColorIndex(spCC->mapId), &spAC_color); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC_color.r, spAC_color.g, spAC_color.b, @@ -192,6 +194,7 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg } gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (spC8 + arg2) << 2, (arg3 + spC4) << 2, G_TX_RENDERTILE, var_t1, var_t0, var_a3, var_a0_4); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -275,6 +278,7 @@ void func_80103A58(PlayState* play, Actor* actor) { } if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); + if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) { s16 spA2; Gfx_SetupDL42_Overlay(play->state.gfxCtx); @@ -351,6 +355,7 @@ void func_80103A58(PlayState* play, Actor* actor) { gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 1) << 2, (spD4 - 1) << 2, (spD8 + 1) << 2, (spD4 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } + CLOSE_DISPS(play->state.gfxCtx); } } @@ -366,6 +371,7 @@ void func_8010439C(PlayState* play) { if (play->roomCtx.curRoom.num != -1) { OPEN_DISPS(play->state.gfxCtx); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); @@ -385,6 +391,7 @@ void func_8010439C(PlayState* play) { } while (actor != NULL); } } + CLOSE_DISPS(play->state.gfxCtx); } } @@ -397,15 +404,12 @@ void func_801045AC(PlayState* play, Actor* actor) { s32 sp6C; s32 sp68; s32 sp64; - Player* player; + Player* player = GET_PLAYER(play); f32 sp5C; - f32 temp_fv1; + f32 temp_fv1 = fabsf(player->actor.world.pos.y - actor->world.pos.y); s32 var_v1; - f32 sp50; + f32 sp50 = 1.0f - (1 / 350.0f) * temp_fv1; - player = GET_PLAYER(play); - temp_fv1 = fabsf(player->actor.world.pos.y - actor->world.pos.y); - sp50 = 1.0f - (1 / 350.0f) * temp_fv1; if (sp50 < 0) { sp50 = 0.0f; } @@ -419,6 +423,7 @@ void func_801045AC(PlayState* play, Actor* actor) { var_v1 = 20; } else if (D_801BEBB8.minimapList->scale == -1) { s32 sp4C; + MapDisp_GetMapScale(sp7C, &sp4C); var_v1 = sp4C; } @@ -440,11 +445,13 @@ void func_801045AC(PlayState* play, Actor* actor) { } if ((sp78 > 0) && (sp78 < 0x3FF) && (sp74 > 0) && (sp74 < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if ((actor->category == 0xA) && (func_80103A10(play) != 0)) { s32 pad; + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, (s32)((D_801BEC2C[actor->category].a * (1.0f - D_801BEBB8.swapAnimTimer * 0.05f) * @@ -456,6 +463,7 @@ void func_801045AC(PlayState* play, Actor* actor) { var_v1 = 20; } else if (D_801BEBB8.minimapList->scale == -1) { s32 sp34; + MapDisp_GetMapScale(sp7C, &sp34); var_v1 = sp34; } @@ -467,6 +475,7 @@ void func_801045AC(PlayState* play, Actor* actor) { (sp74 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } } + CLOSE_DISPS(play->state.gfxCtx); } } @@ -478,6 +487,7 @@ void func_80104AE8(PlayState* play) { if (play->roomCtx.curRoom.num != -1) { OPEN_DISPS(play->state.gfxCtx); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); @@ -492,17 +502,16 @@ void func_80104AE8(PlayState* play) { actor = actor->next; } while (actor != NULL); } + CLOSE_DISPS(play->state.gfxCtx); } } -// Possible fakematch -// https://decomp.me/scratch/kvGBZ +//! FAKE: https://decomp.me/scratch/kvGBZ void func_80104C80(PlayState* play) { - s32 objectSlot; + s32 objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP); - objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP); - if (objectSlot < 0) { + if (objectSlot <= OBJECT_SLOT_NONE) { D_801BEBB8.unk20 |= 1; } else { do { } while (!Object_IsLoaded(&play->objectCtx, objectSlot)); } @@ -553,7 +562,7 @@ void MapDisp_Init(PlayState* play) { MapDisp_InitMapI(play); D_801BEBB8.unk58 = 0; D_801BEBB8.unk5A = 0; - if (Map_IsInBossArea(play) != 0) { + if (Map_IsInBossArea(play)) { func_8010549C(play, NULL); func_8010565C(play, 0, NULL); } @@ -658,6 +667,7 @@ void func_8010534C(PlayState* play) { if (ABS_ALT(D_801F53B0[i].id) != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { s32 temp = (D_801BEBB8.unk48[var_v0] - 5); // needed for matching + if (((var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) || @@ -678,7 +688,7 @@ void func_8010549C(PlayState* play, void* segmentAddress) { MinimapList* temp_v0; s32 i; - if (Map_IsInBossArea(play) == 0) { + if (!Map_IsInBossArea(play)) { D_801BEC1C = play->numRooms; temp_v0 = Lib_SegmentedToVirtual(segmentAddress); D_801BEC14 = *temp_v0; @@ -707,7 +717,7 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { MinimapChest* var_v1; s32 var_a3; - if (Map_IsInBossArea(play) == 0) { + if (!Map_IsInBossArea(play)) { var_v1 = Lib_SegmentedToVirtual(segmentAddress); for (var_a3 = 0; var_a3 < num; var_v1++, var_a3++) { D_801F5270[var_a3] = *var_v1; @@ -721,7 +731,7 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList) { s32 i; - if (Map_IsInBossArea(play) == 0) { + if (!Map_IsInBossArea(play)) { D_801BEC24.count = num; for (i = 0; i < num; i++) { D_801F53B0[i] = transitionActorList[i]; @@ -852,12 +862,14 @@ void MapDisp_SwapRooms(s16 nextRoom) { s32 sp38; s32 scale; s32 pad; + MapDisp_GetMapPos(prevMinimapEntry, &sp3C, &sp38); scale = D_801BEBB8.minimapList->scale; if (D_801BEBB8.minimapList->scale == 0) { scale = 20; } else if (D_801BEBB8.minimapList->scale == -1) { s32 scaleTemp; + MapDisp_GetMapScale(nextMinimapEntry, &scaleTemp); scale = scaleTemp; } @@ -883,6 +895,7 @@ void MapDisp_SwapRooms(s16 nextRoom) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: D_801BEBB8.lMapCurTex = MapData_GetMapTexGameplayDangeonKeep(nextMinimapEntry->mapId); return; + case MAPDATA_MID_MAP_GRAND_STATIC: if (D_801BEBB8.lMapPrevTex == D_801BEBB8.texBuff0) { D_801BEBB8.lMapCurTex = D_801BEBB8.texBuff1; @@ -894,6 +907,9 @@ void MapDisp_SwapRooms(s16 nextRoom) { D_801BEBB8.lMapCurTex, MapData_GetSizeOfMapGrandTex(nextMinimapEntry->mapId)); } break; + + default: + break; } } } @@ -921,6 +937,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { var_v0 = 20; } else if (D_801BEBB8.minimapList->scale == -1) { s32 sp48; + MapDisp_GetMapScale(sp6C, &sp48); var_v0 = sp48; } @@ -934,6 +951,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { } if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, @@ -951,6 +969,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(OVERLAY_DISP++, 0, 0xFF, 200, 0, 0, play->interfaceCtx.minimapAlpha); gSPDisplayList(OVERLAY_DISP++, D_0401ED00); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -969,15 +988,15 @@ s32 func_80106408(PlayState* play) { s32 func_80106450(PlayState* play) { if (((func_8010A0A4(play) == 0) && (Inventory_IsMapVisible(play->sceneId) != 0)) || - ((func_8010A0A4(play) != 0) && CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex))) { + ((func_8010A0A4(play) != 0) && CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex))) { return true; } return false; } s32 func_801064CC(PlayState* play) { - if (((play->csCtx.state != 0) && (func_80106408(play) == 0)) || (D_801BEBB8.unk20 & 2) || - (Map_IsInBossArea(play) != 0)) { + if (((play->csCtx.state != CS_STATE_IDLE) && !func_80106408(play)) || (D_801BEBB8.unk20 & 2) || + Map_IsInBossArea(play)) { return true; } return false; @@ -1026,9 +1045,9 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { } func_80104AE8(play); } - if (((func_8010A0A4(play) == 0) || CHECK_DUNGEON_ITEM(1, gSaveContext.mapIndex)) && + if (((func_8010A0A4(play) == 0) || CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) && ((func_8010A0A4(play) != 0) || Inventory_IsMapVisible(play->sceneId))) { - if (play->interfaceCtx.minigameState == 0) { + if (play->interfaceCtx.minigameState == MINIGAME_STATE_NONE) { func_80105FE0(play, x, z, rot); } func_8010439C(play); @@ -1154,12 +1173,16 @@ s32 func_80106D08(s32 sceneId) { switch (sceneId) { case SCENE_MITURIN_BS: return SCENE_MITURIN; + case SCENE_HAKUGIN_BS: return SCENE_HAKUGIN; + case SCENE_SEA_BS: return SCENE_SEA; + case SCENE_INISIE_BS: return SCENE_INISIE_N; + default: return sceneId; } @@ -1187,7 +1210,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; - if (CHECK_DUNGEON_ITEM(2, arg6)) { + if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, arg6)) { D_801BEC84[0xF] = 0xAD5F; D_801BECA4[0xF] = 0xAD5F; D_801BECC4[0xF] = 0xAD5F; @@ -1198,6 +1221,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } OPEN_DISPS(play->state.gfxCtx); + // temp_a0 = play->state.gfxCtx; // sp48 = arg6 + &gSaveContext; Gfx_SetupDL39_Opa(play->state.gfxCtx); @@ -1257,7 +1281,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 spEC = ((sp108->unk6 - (f32)D_801BEBB8.sceneMidZ) * arg5 - sp10C_offsetY) + ((arg4 / 2) + arg2); if (var_s2 == play->roomCtx.curRoom.num) { - if (Map_IsInBossArea(play) != 0) { + if (Map_IsInBossArea(play)) { gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, sp114_texHeight, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, @@ -1277,7 +1301,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } else if (CHECK_DUNGEON_ITEM( - 2, + DUNGEON_MAP, arg6)) { //*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, sp114_texHeight, 0, G_TX_NOMIRROR | G_TX_WRAP, @@ -1295,6 +1319,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } } gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + CLOSE_DISPS(play->state.gfxCtx); } #else @@ -1319,6 +1344,7 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 if (D_801BEBB8.unk54 != NULL) { // temp_s1 = arg0->state.gfxCtx; OPEN_DISPS(arg0->state.gfxCtx); + // temp_v1 = temp_s1->polyOpa.p; // temp_s1->polyOpa.p = temp_v1 + 8; // temp_v1->words.w1 = 0x00000000; @@ -1425,15 +1451,19 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 case SCENE_MITURIN_BS: var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest & (1 << var_s0[var_s3].unk2); break; + case SCENE_HAKUGIN_BS: var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_HAKUGIN].chest & (1 << var_s0[var_s3].unk2); break; + case SCENE_SEA_BS: var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_SEA].chest & (1 << var_s0[var_s3].unk2); break; + case SCENE_INISIE_BS: var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest & (1 << var_s0[var_s3].unk2); break; + default: var_v1_2 = Flags_GetTreasure(arg0, (s32)var_s0[var_s3].unk2); break; @@ -1460,6 +1490,7 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); } } + CLOSE_DISPS(arg0->state.gfxCtx); } } @@ -1480,6 +1511,7 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 if (transitionActors->count != 0) { OPEN_DISPS(play->state.gfxCtx); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 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); @@ -1488,7 +1520,7 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 if ((ABS_ALT(D_801F53B0[i].id) != ACTOR_EN_HOLL) && (func_80105328(D_801F53B0[i].params) == 0)) { roomA = D_801F53B0[i].sides[0].room; roomB = D_801F53B0[i].sides[1].room; - if (CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) || (roomA < 0) || + if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex) || (roomA < 0) || (gSaveContext.save.saveInfo .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] .rooms & @@ -1508,6 +1540,7 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } } } + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1523,13 +1556,14 @@ void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 sp30 = &D_801BEC24; OPEN_DISPS(arg0->state.gfxCtx); + gDPPipeSync(POLY_OPA_DISP++); gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, arg0->pauseCtx.alpha); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPPipeSync(POLY_OPA_DISP++); - if (CHECK_DUNGEON_ITEM(1, arg6)) { + if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, arg6)) { gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, &D_02002460, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1], D_801BEB00[1], D_801BEB10[1], D_801BEB20[1], D_801BEAD0[1], 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); @@ -1547,6 +1581,7 @@ void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } } } + CLOSE_DISPS(arg0->state.gfxCtx); } #else @@ -1567,13 +1602,13 @@ TexturePtr func_80108A10(s32 arg0) { s32 func_80108A64(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; - if (pauseCtx->pageIndex != 1) { + if (pauseCtx->pageIndex != PAUSE_MAP) { return 1; } - if ((pauseCtx->state == 7) || ((pauseCtx->state >= 8) && (pauseCtx->state < 0x13))) { + if ((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) || IS_PAUSE_STATE_GAMEOVER) { return 1; } - if ((pauseCtx->state != 6) || (pauseCtx->mainState != 0)) { + if ((pauseCtx->state != PAUSE_STATE_MAIN) || (pauseCtx->mainState != PAUSE_MAIN_STATE_IDLE)) { return 1; } if (pauseCtx->alpha == 0) { @@ -1582,7 +1617,6 @@ s32 func_80108A64(PlayState* play) { return 0; } -// https://decomp.me/scratch/4gO7Z void func_80108AF8(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; s32 temp_a0_2; @@ -1594,25 +1628,32 @@ void func_80108AF8(PlayState* play) { s32 spB4 = 0; if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0) && (func_80108A64(play) == 0)) { - if (Map_IsInBossArea(play) != 0) { + if (Map_IsInBossArea(play)) { switch (play->sceneId) { case SCENE_MITURIN_BS: spB4 = 0; break; + case SCENE_HAKUGIN_BS: spB4 = 1; break; + case SCENE_SEA_BS: spB4 = 2; break; + case SCENE_INISIE_BS: spB4 = 3; break; + + default: + break; } } else { spB4 = gSaveContext.mapIndex; } OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); @@ -1621,7 +1662,7 @@ void func_80108AF8(PlayState* play) { if ((gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] .unk_14 & gBitFlags[4 - var_s1]) || - CHECK_DUNGEON_ITEM2(2, spB4)) { + CHECK_DUNGEON_ITEM2(DUNGEON_MAP, spB4)) { gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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); @@ -1651,6 +1692,7 @@ void func_80108AF8(PlayState* play) { G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); } Gfx_SetupDL42_Opa(play->state.gfxCtx); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1702,20 +1744,26 @@ void func_801091F0(PlayState* play) { sp40 = 0; sp3C = 0; if (func_80108A64(play) == 0) { - if (Map_IsInBossArea(play) != 0) { + if (Map_IsInBossArea(play)) { switch (play->sceneId) { case SCENE_MITURIN_BS: sp44 = 0; break; + case SCENE_HAKUGIN_BS: sp44 = 1; break; + case SCENE_SEA_BS: sp44 = 2; break; + case SCENE_INISIE_BS: sp44 = 3; break; + + default: + break; } } else { sp44 = gSaveContext.mapIndex; @@ -1738,7 +1786,7 @@ void func_801091F0(PlayState* play) { func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); - if (CHECK_DUNGEON_ITEM(1, sp44)) { + if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, sp44)) { func_80107B78(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2); } } From f605759ae506144bea0544eeee17f2764c4cf685 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Fri, 13 Oct 2023 21:25:54 -0400 Subject: [PATCH 22/28] more fixes --- include/z64map.h | 55 ++++++++++++++++--------------- src/code/z_map_disp.c | 67 +++++++++++++++++++------------------- tools/disasm/variables.txt | 4 +-- 3 files changed, 64 insertions(+), 62 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index b0cde3651..f4edff2c1 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -42,25 +42,25 @@ mapCompactId #define MAPDATA_DRAW_3 3 typedef struct { - u8 texWidth; - u8 texHeight; - s16 offsetX; - s16 offsetY; - u8 drawType; - u8 colorIndex; - s16 scale; -} MapSpriteInfo; // size 0x0A + /* 0x0 */ u8 texWidth; + /* 0x1 */ u8 texHeight; + /* 0x2 */ s16 offsetX; + /* 0x4 */ s16 offsetY; + /* 0x6 */ u8 drawType; + /* 0x7 */ u8 colorIndex; + /* 0x8 */ s16 scale; +} MapSpriteInfo; // size = 0xA typedef struct { - /* 0x00 */ TexturePtr lmapTex; //minimap texture - /* 0x04 */ u8 width; - /* 0x05 */ u8 height; - /* 0x06 */ u8 offsetX; - /* 0x07 */ u8 offsetY; - /* 0x08 */ u8 drawType; - /* 0x09 */ u8 colorIndex; - /* 0x0A */ s16 scale; -} MapSpriteInfo2; // size 0x0C + /* 0x0 */ TexturePtr lmapTex; //minimap texture + /* 0x4 */ u8 width; + /* 0x5 */ u8 height; + /* 0x6 */ u8 offsetX; + /* 0x7 */ u8 offsetY; + /* 0x8 */ u8 drawType; + /* 0x9 */ u8 colorIndex; + /* 0xA */ s16 scale; +} MapSpriteInfo2; // size = 0xC /* z_map_disp */ @@ -96,22 +96,22 @@ typedef struct { /* 0x54 */ MinimapChest* unk54; /* 0x58 */ s16 unk58; /* 0x5A */ s16 unk5A; -} T_801BEBB8; +} struct_801BEBB8; // size = 0x5C typedef struct { - /* 0x00 */ s16 unk0; //scene - /* 0x02 */ s16 unk2; -} T_801BEC5C; + /* 0x0 */ s16 unk0; //scene + /* 0x2 */ s16 unk2; +} struct_801BEC5C; // size = 0x4 typedef struct { /* 0x00 */ s32 unk0[5]; -} T_801BEC70; +} struct_801BEC70; // size = 0x14 typedef struct { - s16 unk0; - s32 unk4; - s32 unk8; -} T_801BED24; // size 0x0C + /* 0x0 */ s16 unk0; + /* 0x4 */ s32 unk4; + /* 0x8 */ s32 unk8; +} struct_801BED24; // size = 0xC typedef struct { /* 0x000 */ s32 rooms; @@ -119,7 +119,7 @@ typedef struct { /* 0x084 */ void* unk84[32]; /* 0x104 */ void* unk104[32]; /* 0x184 */ s32 unk184; -} T_801F56B0; +} struct_801F56B0; // size = 0x188 /* z_map_data */ TexturePtr MapData_GetMapTexGameplayDangeonKeep(s32); @@ -137,4 +137,5 @@ void MapData_GetMapScale(s32 mapId, s32 *scale); void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height); void MapData_CPID_GetTexOffset(s32 mapCompactId, s32* offsetX, s32* offsetY); s16 MapData_CPID_GetMapScale(s32 mapCompactId); + #endif diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 384ffbb75..cb960d912 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -13,26 +13,26 @@ extern s32 D_801BEB00[4]; // siz_SHIFT extern u32 D_801BEB10[4]; // siz_BYTES extern u32 D_801BEB20[4]; // siz_LINE_BYTES extern TexturePtr D_801BEB38; -extern T_801BEBB8 D_801BEBB8; +extern struct_801BEBB8 D_801BEBB8; extern s16 D_801BEBFA; // D_801BEBB8.unk42 extern MinimapList D_801BEC14; // D_801F5130 extern s32 D_801BEC1C; // current scene's no. of rooms extern s32 D_801BEC20; // MinimapChest count extern TransitionActorList D_801BEC24; extern Color_RGBA8 D_801BEC2C[12]; // cat colors -extern T_801BEC5C D_801BEC5C[5]; -extern T_801BEC70 D_801BEC70; +extern struct_801BEC5C D_801BEC5C[5]; +extern struct_801BEC70 D_801BEC70; extern u16 D_801BEC84[0x10]; // palette 0 extern u16 D_801BECA4[0x10]; // palette 1 extern u16 D_801BECC4[0x10]; // palette 2 extern TexturePtr D_801BECE4[6]; extern TexturePtr D_801BED00[9]; -extern T_801BED24 D_801BED24[2]; +extern struct_801BED24 D_801BED24[2]; extern MinimapEntry D_801F5130[0x50]; extern MinimapChest D_801F5270[32]; extern TransitionActorEntry D_801F53B0[48]; -extern T_801F56B0 D_801F56B0; +extern struct_801F56B0 D_801F56B0; extern TexturePtr D_02002460; extern TexturePtr D_02003F20; @@ -213,7 +213,7 @@ s32 MapDisp_IsDataRotated(PlayState* play) { } s32 func_80103A10(PlayState* play) { - if ((gSaveContext.save.entrance == 0x6400) && (Cutscene_GetSceneLayer(play) != 0)) { + if ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0)) { return false; } return true; @@ -378,6 +378,7 @@ void func_8010439C(PlayState* play) { actorCtx = &play->actorCtx; for (i = 0; i < ACTORCAT_MAX; i++) { Actor* actor = actorCtx->actorLists[i].first; + if (actor != NULL) { do { if ((actor->update != NULL) && (actor->init == NULL) && @@ -507,7 +508,6 @@ void func_80104AE8(PlayState* play) { } } -//! FAKE: https://decomp.me/scratch/kvGBZ void func_80104C80(PlayState* play) { s32 objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP); @@ -515,6 +515,8 @@ void func_80104C80(PlayState* play) { D_801BEBB8.unk20 |= 1; } else { do { } while (!Object_IsLoaded(&play->objectCtx, objectSlot)); } + + //! FAKE: https://decomp.me/scratch/kvGBZ if (&play->objectCtx) {} } @@ -637,7 +639,7 @@ void func_80104F34(PlayState* play) { } s32 func_80105294(void) { - T_801BEC70 sp4 = D_801BEC70; + struct_801BEC70 sp4 = D_801BEC70; if ((D_801BEBB8.minimapList == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || (D_801BEC1C == 0)) { return 0x7B; @@ -666,11 +668,10 @@ void func_8010534C(PlayState* play) { if (func_80105328(D_801F53B0[i].params) != 0) { if (ABS_ALT(D_801F53B0[i].id) != 0x18) { for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { - s32 temp = (D_801BEBB8.unk48[var_v0] - 5); // needed for matching + //! FAKE: needed for matching + s32 temp = (D_801BEBB8.unk48[var_v0] - 5); - if (((var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) - - || + if (((var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) || ((var_v0 != D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && (D_801F53B0[i].pos.y < (D_801BEBB8.unk48[var_v0 + 1] - 5)))) { D_801BEBB8.unk58 = var_v0; @@ -987,8 +988,8 @@ s32 func_80106408(PlayState* play) { } s32 func_80106450(PlayState* play) { - if (((func_8010A0A4(play) == 0) && (Inventory_IsMapVisible(play->sceneId) != 0)) || - ((func_8010A0A4(play) != 0) && CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex))) { + if ((!func_8010A0A4(play) && (Inventory_IsMapVisible(play->sceneId) != 0)) || + (func_8010A0A4(play) && CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex))) { return true; } return false; @@ -1031,10 +1032,10 @@ s32 func_8010657C(s32 curRoom, s32 prevRoom) { void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { PauseContext* pauseCtx = &play->pauseCtx; - if ((D_801BEBB8.minimapList != 0) && ((s32)pauseCtx->state < 4) && (XREG(95) == 0) && + if ((D_801BEBB8.minimapList != 0) && ((s32)pauseCtx->state <= PAUSE_STATE_OPENING_2) && (XREG(95) == 0) && (play->interfaceCtx.minimapAlpha != 0)) { - if ((func_801064CC(play) == 0) && (D_801BEC1C != 0)) { - if (func_80106450(play) != 0) { + if (!func_801064CC(play) && (D_801BEC1C != 0)) { + if (func_80106450(play)) { func_801031D0(play, D_801BEBB8.lMapCurTex, D_801BEBB8.unkC, D_801BEBB8.unkE, D_801BEBB8.curRoom, 1.0f - (D_801BEBB8.swapAnimTimer * 0.05f)); if ((D_801BEBB8.curRoom != D_801BEBB8.prevRoom) && @@ -1045,8 +1046,8 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { } func_80104AE8(play); } - if (((func_8010A0A4(play) == 0) || CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) && - ((func_8010A0A4(play) != 0) || Inventory_IsMapVisible(play->sceneId))) { + if ((!func_8010A0A4(play) || CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) && + (func_8010A0A4(play) || Inventory_IsMapVisible(play->sceneId))) { if (play->interfaceCtx.minigameState == MINIGAME_STATE_NONE) { func_80105FE0(play, x, z, rot); } @@ -1114,7 +1115,7 @@ void* func_801068FC(PlayState* play, void* heap) { } if (var_s2 == false) { D_801F56B0.unk4[D_801F56B0.rooms] = mapCompactId; - D_801F56B0.rooms += 1; + D_801F56B0.rooms++; } } @@ -1157,16 +1158,16 @@ void* func_801068FC(PlayState* play, void* heap) { s32 func_80106BEC(s32 arg0, f32 arg1) { if (arg0 == 0) { if ((D_801BEBB8.unk48[0] <= arg1) && ((D_801BEBB8.unk40 == 1) || (arg1 < D_801BEBB8.unk48[1]))) { - return 1; + return true; } } else if (arg0 >= (D_801BEBB8.unk40 - 1)) { if (D_801BEBB8.unk48[D_801BEBB8.unk40 - 1] <= arg1) { - return 1; + return true; } } else if ((D_801BEBB8.unk48[arg0] <= arg1) && (arg1 < D_801BEBB8.unk48[arg0 + 1])) { - return 1; + return true; } - return 0; + return false; } s32 func_80106D08(s32 sceneId) { @@ -1471,7 +1472,7 @@ void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) || ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < (s32)D_801BEBB8.unk42) || (var_v1_2 != 0)) { continue; - } else if (func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[var_s3].unk6) == 0) { + } else if (!func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[var_s3].unk6)) { continue; } else { temp_ft0 = (s32)(((((f32)var_s0[var_s3].unk4 - (f32)D_801BEBB8.sceneMidX) * arg5) - (f32)4) + @@ -1569,7 +1570,7 @@ void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); for (var_s2 = 0; var_s2 < sp30->count; var_s2++) { if ((func_80105328((s32)D_801F53B0[var_s2].params) != 0) && - (func_80106BEC((s32)D_801BEBB8.unk42, (f32)D_801F53B0[var_s2].pos.y) != 0)) { + func_80106BEC((s32)D_801BEBB8.unk42, (f32)D_801F53B0[var_s2].pos.y)) { if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) { temp_ft0 = ((((f32)D_801F53B0[var_s2].pos.x - D_801BEBB8.sceneMidX) * arg5) - 4) + ((arg3 / 2) + arg1); @@ -1603,18 +1604,18 @@ s32 func_80108A64(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; if (pauseCtx->pageIndex != PAUSE_MAP) { - return 1; + return true; } if ((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) || IS_PAUSE_STATE_GAMEOVER) { - return 1; + return true; } if ((pauseCtx->state != PAUSE_STATE_MAIN) || (pauseCtx->mainState != PAUSE_MAIN_STATE_IDLE)) { - return 1; + return true; } if (pauseCtx->alpha == 0) { - return 1; + return true; } - return 0; + return false; } void func_80108AF8(PlayState* play) { @@ -1627,7 +1628,7 @@ void func_80108AF8(PlayState* play) { s32 var_s1; s32 spB4 = 0; - if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0) && (func_80108A64(play) == 0)) { + if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0) && !func_80108A64(play)) { if (Map_IsInBossArea(play)) { switch (play->sceneId) { case SCENE_MITURIN_BS: @@ -1743,7 +1744,7 @@ void func_801091F0(PlayState* play) { sp44 = 0; sp40 = 0; sp3C = 0; - if (func_80108A64(play) == 0) { + if (!func_80108A64(play)) { if (Map_IsInBossArea(play)) { switch (play->sceneId) { case SCENE_MITURIN_BS: diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d3814b837..598eadbfe 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1002,7 +1002,7 @@ 0x801BEC20:("D_801BEC20","UNK_TYPE4","",0x4), 0x801BEC24:("D_801BEC24","UNK_TYPE1","",0x8), 0x801BEC2C:("D_801BEC2C","Color_RGBA8","[12]",0x30), - 0x801BEC5C:("D_801BEC5C","T_801BEC5C","[5]",0x14), + 0x801BEC5C:("D_801BEC5C","struct_801BEC5C","[5]",0x14), 0x801BEC70:("D_801BEC70","UNK_TYPE4","",0x14), 0x801BEC84:("D_801BEC84","u16","[16]",0x10), 0x801BECA4:("D_801BECA4","u16","[16]",0x10), @@ -3903,7 +3903,7 @@ 0x801F5130:("D_801F5130","UNK_TYPE1","",0x1), 0x801F5270:("D_801F5270","UNK_TYPE1","",0x140), 0x801F53B0:("D_801F53B0","UNK_TYPE1","",0x1), - 0x801F56B0:("D_801F56B0","T_801F56B0","",0x188), + 0x801F56B0:("D_801F56B0","struct_801F56B0","",0x188), 0x801F5840:("gNMIBuffer","s32*","",0x4), 0x801F5850:("sPostmanTimerInput","UNK_TYPE1","",0x1), 0x801F58B0:("D_801F58B0","struct_801F58B0","[3][3]",0xFC), From 0e374ca1a066ca57e5a862a79cf8ef604d28f32c Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 16 Oct 2023 05:07:21 -0400 Subject: [PATCH 23/28] z_map_disp OK, implement more suggestions --- assets/xml/objects/gameplay_dangeon_keep.xml | 2 +- include/functions.h | 105 -- include/variables.h | 56 +- include/z64.h | 2 +- include/z64map.h | 36 + include/z64save.h | 2 +- src/code/z_map_disp.c | 980 ++++++++----------- tools/disasm/variables.txt | 14 +- tools/namefixer.py | 5 +- tools/overlayhelpers/mapdata.py | 12 +- 10 files changed, 481 insertions(+), 733 deletions(-) diff --git a/assets/xml/objects/gameplay_dangeon_keep.xml b/assets/xml/objects/gameplay_dangeon_keep.xml index 11c36a65b..b4c92432d 100644 --- a/assets/xml/objects/gameplay_dangeon_keep.xml +++ b/assets/xml/objects/gameplay_dangeon_keep.xml @@ -4,7 +4,7 @@ - + diff --git a/include/functions.h b/include/functions.h index 865f71926..6af93fc63 100644 --- a/include/functions.h +++ b/include/functions.h @@ -588,111 +588,6 @@ s32 ZeldaArena_Check(void); void ZeldaArena_Init(void* start, size_t size); void ZeldaArena_Cleanup(void); u8 ZeldaArena_IsInitialized(void); -// void func_80102E40(void); -// void func_80102E90(void); -// void func_80102EA4(void); -void func_80102EB4(u32 param_1); -void func_80102ED0(u32 param_1); -s32 func_80102EF0(PlayState* play); -// void func_80102F9C(void); -// void func_80103090(void); -// void func_801030B4(void); -// void func_801030F4(void); -// void func_801031D0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// void func_80103A10(void); -// void func_80103A58(void); -// void func_8010439C(void); -// void func_801045AC(void); -// void func_80104AE8(void); -// void func_80104C80(void); -void MapDisp_Init(PlayState* play); -// void func_80104F34(void); -s32 func_80105294(void); -s16 func_80105318(void); -// void func_80105328(void); -// void func_8010534C(void); -void func_8010549C(PlayState* play, void* segmentAddress); -void func_8010565C(PlayState* play, s32 num, void* segmentAddress); -void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList); -void MapDisp_Destroy(PlayState* play); -void func_80105B34(PlayState* play); -void MapDisp_SwapRooms(s16 nextRoom); -// void func_80105FE0(void); -// void func_80106408(void); -// void func_80106450(void); -// void func_801064CC(void); -s32 func_80106530(PlayState* play); -// void func_8010657C(void); -void func_80106644(PlayState* play, s32 x, s32 z, s32 rot); -// void func_8010683C(void); -void* func_801068FC(PlayState* play, void* heap); -// void func_80106BEC(void); -// void func_80106D08(void); -// void func_80106D5C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); -// void func_80107B78(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// void func_80108124(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// void func_80108558(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); -// void func_80108A10(void); -// void func_80108A64(void); -void func_80108AF8(PlayState* play); -s32 func_801090B0(s32 arg0); -s32 func_80109124(s16 arg0); -void func_801091F0(PlayState* play); -void func_80109428(PlayState* play); -void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color); -// void func_801094C8(void); -// void MapData_GetMapTexOffsetGameplayDangeonKeep(void); -// void MapData_GetMapDrawTypeGameplayDangeonKeep(void); -// void MapData_GetMapColorIndexGameplayDangeonKeep(void); -// void func_8010956C(void); -// void MapData_GetMapTexGameplayDangeonKeep(void); -// void func_801095AC(void); -// void MapData_GetMapTexGameplayDangeonKeepOffset(void); -// void MapData_GetMapGrandDrawType(void); -// void MapData_GetMapGrandColorIndex(void); -// void MapData_GetMapGrandScale(void); -// void MapData_MapGrandTexSizeTest(void); -// void MapData_GetSizeOfMapGrandTex(void); -// void MapData_MID_GetType(void); -// void func_80109754(void); -// void MapData_GetMapTexOffset(void); -// void func_8010983C(void); -// void MapData_GetDrawType(void); -// void MapData_GetMapColorIndex(void); -// UNK_TYPE4 func_80109964(s32 param_1); -// void MapData_GetMapITexDim(void); -// void MapData_GetMapITexOffset(void); -// void MapData_GetMapIDrawType(void); -// void MapData_GetMapIColorIndex(void); -// void MapData_GetMapIScale(void); -// void MapData_MapITexSizeTest(void); -// void MapDisp_GetSizeOfMapITex(void); -// void MapData_GetMapIId(void); -// void func_80109B38(void); -// void MapData_GetMapCompactId(void); -// void MapData_CPID_GetType(void); -// void func_80109C38(void); -// void MapData_GetIMapSize(void); -// void MapData_CPID_GetTexDim(void); -// void MapData_CPID_GetTexOffset(void); -// void MapData_CPID_GetDrawType(void); -// void MapData_CPID_GetMapColorIndex(void); -// void MapData_CPID_GetMapScale(void); -s32 Map_GetDungeonOrBossAreaIndex(PlayState* play); -s32 Map_IsInDungeonOrBossArea(PlayState* play); -s32 func_8010A0A4(PlayState* play); -// void Map_GetDungeonAreaIndex(PlayState* play); -// void Map_IsInDungeonArea(PlayState* play); -// void Map_GetBossAreaIndex(PlayState* play); -s32 Map_IsInBossArea(PlayState* play); -// void func_8010A238(void); -// void func_8010A2AC(void); -void Minimap_SavePlayerRoomInitInfo(PlayState* play); -void Map_InitRoomData(PlayState* play, s16 room); -void Map_Destroy(PlayState* play); -void Map_Init(PlayState* play); -void Minimap_Draw(PlayState* play); -void Map_Update(PlayState* play); // void func_8010A760(void); // void func_8010A7CC(void); // void func_8010A814(void); diff --git a/include/variables.h b/include/variables.h index 866f241ba..f13fd0069 100644 --- a/include/variables.h +++ b/include/variables.h @@ -100,62 +100,8 @@ extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; extern u8 kanfontOrdering[92]; // extern actor_init_var_func sInitChainHandlers[11]; -// extern UNK_TYPE4 D_801BEAD4; -// extern UNK_TYPE4 D_801BEAD8; -// extern UNK_TYPE1 D_801BEAE0; -// extern UNK_TYPE4 D_801BEAF4; -// extern UNK_TYPE4 D_801BEAF8; -// extern UNK_TYPE4 D_801BEB04; -// extern UNK_TYPE4 D_801BEB08; -// extern UNK_TYPE4 D_801BEB14; -// extern UNK_TYPE4 D_801BEB18; -// extern UNK_TYPE4 D_801BEB24; -// extern UNK_TYPE4 D_801BEB28; -// extern UNK_TYPE1 D_801BEB38; -// extern UNK_TYPE4 D_801BEBB8; -// extern UNK_TYPE4 D_801BEBD8; -// extern UNK_TYPE2 D_801BEBF8; -// extern UNK_TYPE2 D_801BEBFA; -// extern UNK_TYPE2 D_801BEBFC; -// extern UNK_TYPE2 D_801BEC10; -extern MinimapList D_801BEC14; -// extern UNK_TYPE4 D_801BEC1C; -// extern UNK_TYPE4 D_801BEC20; -// extern UNK_TYPE1 D_801BEC24; -// extern UNK_TYPE1 D_801BEC2C; -// extern UNK_TYPE2 D_801BEC5C; -// extern UNK_TYPE2 D_801BEC5E; -// extern UNK_TYPE4 D_801BEC70; -// extern UNK_TYPE1 D_801BEC84; -// extern UNK_TYPE1 D_801BECA4; -// extern UNK_TYPE1 D_801BECC4; -// extern UNK_TYPE1 D_801BECE4; -// extern UNK_TYPE1 D_801BED00; -// extern UNK_TYPE2 D_801BED24; -// extern UNK_TYPE1 D_801BED3C; -// extern UNK_TYPE1 mapColorTable; -// extern UNK_TYPE1 gameplay_dangeon_keep_Info; -// extern UNK_TYPE1 D_801BED54; -// extern UNK_TYPE1 D_801BED55; -// extern UNK_TYPE1 D_801BED56; -// extern UNK_TYPE1 map_grand_static_Info; -// extern UNK_TYPE1 D_801BEFC8; -// extern UNK_TYPE1 D_801BF15C; -// extern UNK_TYPE1 map_i_static_Info; -// extern UNK_TYPE1 D_801BF176; -// extern UNK_TYPE1 D_801BF177; -// extern UNK_TYPE1 D_801BF178; -// extern UNK_TYPE1 map_i_for_gameplay_dangeon_keep; -// extern UNK_TYPE2 D_801BF550; -// extern UNK_TYPE2 D_801BF554; -// extern UNK_TYPE2 D_801BF558; -// extern UNK_TYPE4 D_801BF55C; -// extern UNK_TYPE4 D_801BF580; -// extern UNK_TYPE4 D_801BF594; -// extern UNK_TYPE4 D_801BF5A4; -// extern UNK_TYPE2 D_801BF5B0; + extern UNK_PTR D_801BF5C0; -// extern UNK_TYPE1 D_801BF68C; extern FlexSkeletonHeader* gPlayerSkeletons[PLAYER_FORM_MAX]; extern PlayerModelIndices gPlayerModelTypes[]; diff --git a/include/z64.h b/include/z64.h index 2a664d7d3..b9a2adf6c 100644 --- a/include/z64.h +++ b/include/z64.h @@ -47,6 +47,7 @@ #include "z64interface.h" #include "z64item.h" #include "z64light.h" +#include "z64map.h" #include "z64math.h" #include "z64message.h" #include "z64object.h" @@ -55,7 +56,6 @@ #include "z64prerender.h" #include "z64save.h" #include "z64scene.h" -#include "z64map.h" #include "z64schedule.h" #include "z64skin.h" #include "z64skybox.h" diff --git a/include/z64map.h b/include/z64map.h index f4edff2c1..c4c6ae71c 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -3,6 +3,8 @@ #include "ultra64.h" #include "z64scene.h" +struct PlayState; + /* Handles L-minimap and pause screen dungeon minimap system. @@ -121,7 +123,29 @@ typedef struct { /* 0x184 */ s32 unk184; } struct_801F56B0; // size = 0x188 +/* z_map_disp */ +void func_80102EB4(u32 param_1); +void func_80102ED0(u32 param_1); +s32 func_80102EF0(struct PlayState* play); +void MapDisp_Init(struct PlayState* play); +s32 func_80105294(void); +s16 func_80105318(void); +void func_8010549C(struct PlayState* play, void* segmentAddress); +void func_8010565C(struct PlayState* play, s32 num, void* segmentAddress); +void func_80105818(struct PlayState* play, s32 num, TransitionActorEntry* transitionActorList); +void MapDisp_Destroy(struct PlayState* play); +void func_80105B34(struct PlayState* play); +void MapDisp_SwapRooms(s16 nextRoom); +s32 func_80106530(struct PlayState* play); +void func_80106644(struct PlayState* play, s32 x, s32 z, s32 rot); +void* func_801068FC(struct PlayState* play, void* heap); +void func_80108AF8(struct PlayState* play); +s32 func_801090B0(s32 arg0); +s32 func_80109124(s16 arg0); +void func_801091F0(struct PlayState* play); + /* z_map_data */ +void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color); TexturePtr MapData_GetMapTexGameplayDangeonKeep(s32); s32 MapData_GetMapCompactId(s32); s32 MapData_MID_GetType(s32); @@ -138,4 +162,16 @@ void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height); void MapData_CPID_GetTexOffset(s32 mapCompactId, s32* offsetX, s32* offsetY); s16 MapData_CPID_GetMapScale(s32 mapCompactId); +/* z_map_exp */ +s32 Map_GetDungeonOrBossAreaIndex(struct PlayState* play); +s32 Map_IsInDungeonOrBossArea(struct PlayState* play); +s32 func_8010A0A4(struct PlayState* play); +s32 Map_IsInBossArea(struct PlayState* play); +void Minimap_SavePlayerRoomInitInfo(struct PlayState* play); +void Map_InitRoomData(struct PlayState* play, s16 room); +void Map_Destroy(struct PlayState* play); +void Map_Init(struct PlayState* play); +void Minimap_Draw(struct PlayState* play); +void Map_Update(struct PlayState* play); + #endif diff --git a/include/z64save.h b/include/z64save.h index 1af44d52a..62f482816 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -492,7 +492,7 @@ typedef enum { #define RESET_HEART_PIECE_COUNT (gSaveContext.save.saveInfo.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT)) #define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item]) -#define CHECK_DUNGEON_ITEM2(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) +#define CHECK_DUNGEON_ITEM_ALT(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) #define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item]) #define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonKeys[(void)0, dungeonIndex]) diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index cb960d912..1bfffe3b0 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,5 +1,6 @@ #include "global.h" #include "gfx.h" +#include "assets/interface/parameter_static/parameter_static.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" @@ -132,76 +133,71 @@ void MapDisp_GetMapPos(MinimapEntry* minimapEntry, s32* offsetX, s32* offsetY) { } } -#ifdef NON_MATCHING -// https://decomp.me/scratch/XPZfI -void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { - MinimapEntry* spCC; - s32 spC8; - s32 spC4; - s16 var_a0_4; - s16 var_a3; - s32 var_t0; - s32 var_t1; - s32 var_v1_4; - s32 var_v1_5; +void func_801031D0(PlayState* play, TexturePtr texture, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { + MinimapEntry* entry = &D_801BEBB8.minimapList->entry[arg4]; + s32 texWidth; + s32 texHeight; + s32 dtdy; + s32 dsdx; + s32 t; + s32 s; + s16 var_v1_4; + s16 var_v1_5; Color_RGBA8 spAC_color; s32 spA8_drawType; - spCC = &D_801BEBB8.minimapList->entry[arg4]; - if ((spCC->mapId != 0xFFFF) && (arg1 != 0)) { - MapDisp_GetMapTexDim(spCC, &spC8, &spC4); - OPEN_DISPS(play->state.gfxCtx); - - Gfx_SetupDL39_Overlay(play->state.gfxCtx); - MapData_GetMapColor(MapData_GetMapColorIndex(spCC->mapId), &spAC_color); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC_color.r, spAC_color.g, spAC_color.b, - (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC_color.a / 255.0f)); - MapData_GetDrawType(spCC->mapId, &spA8_drawType); - switch (spA8_drawType) { - case MAPDATA_DRAW_1: - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_IA, spC8, spC4, 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); - break; - case MAPDATA_DRAW_3: - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, - TEXEL0); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); - break; - default: - case MAPDATA_DRAW_0: - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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); - break; - } - - var_t1 = (spCC->unk8 & 1) ? (spC8 - 1) << 5 : 0; - var_t0 = (spCC->unk8 & 2) ? 0 : (spC4 - 1) << 5; - - var_v1_4 = (spCC->unk8 & 1) ? -1 : 1; - var_a3 = var_v1_4 << 0xA; - var_v1_5 = (spCC->unk8 & 2) ? 1 : -1; - - if ((spCC->unk8 & 1) != 0) { - var_a3 = var_a3 & 0xFFFF; - } - if ((spCC->unk8 & 2) != 0) { - var_a0_4 = var_v1_5 << 0xA; - } else { - var_a0_4 = (var_v1_5 << 0xA) & 0xFFFF; - } - gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (spC8 + arg2) << 2, (arg3 + spC4) << 2, - G_TX_RENDERTILE, var_t1, var_t0, var_a3, var_a0_4); - - CLOSE_DISPS(play->state.gfxCtx); + if ((entry->mapId == 0xFFFF) || (texture == NULL)) { + return; } + + MapDisp_GetMapTexDim(entry, &texWidth, &texHeight); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL39_Overlay(play->state.gfxCtx); + MapData_GetMapColor(MapData_GetMapColorIndex(entry->mapId), &spAC_color); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC_color.r, spAC_color.g, spAC_color.b, + (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC_color.a / 255.0f)); + MapData_GetDrawType(entry->mapId, &spA8_drawType); + + switch (spA8_drawType) { + case MAPDATA_DRAW_1: + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_IA, texWidth, texHeight, 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); + break; + + case MAPDATA_DRAW_3: + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_I, texWidth, texHeight, 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); + break; + + default: + case MAPDATA_DRAW_0: + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_I, texWidth, texHeight, 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); + break; + } + + s = (entry->unk8 & 1) ? (texWidth - 1) << 5 : 0; + t = (entry->unk8 & 2) ? 0 : (texHeight - 1) << 5; + + var_v1_4 = ((entry->unk8 & 1) ? -1 : 1) * (1 << 10); + var_v1_5 = ((entry->unk8 & 2) ? 1 : -1) * (1 << 10); + + dsdx = (entry->unk8 & 1) ? var_v1_4 & 0xFFFF : var_v1_4; + dtdy = (entry->unk8 & 2) ? var_v1_5 : var_v1_5 & 0xFFFF; + + gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (texWidth + arg2) << 2, (arg3 + texHeight) << 2, + G_TX_RENDERTILE, s, t, dsdx, dtdy); + + CLOSE_DISPS(play->state.gfxCtx); } -#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 // Tests if the map data should be rotated 180 degrees // SCENE_35TAKI is the only scene with data flipped in this manner. @@ -234,8 +230,6 @@ s32 func_80103A10(PlayState* play) { ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ }) -#ifdef NON_MATCHING -// https://decomp.me/scratch/TR5Jq void func_80103A58(PlayState* play, Actor* actor) { MinimapEntry* spDC; s32 spD8; @@ -245,125 +239,104 @@ void func_80103A58(PlayState* play, Actor* actor) { s32 spC8; s32 spC4; f32 spC0; - u32 pad; + f32 unused1; + f32 unused2; + Player* player = GET_PLAYER(play); s32 scale; - Player* spB4; - u32 pad2; - s32 spAC_scaleTemp; - // GraphicsContext *spA8; + + // inferred from `func_801045AC` + unused1 = fabsf(player->actor.world.pos.y - actor->world.pos.y); + unused2 = 1.0f - (1 / 350.0f) * unused1; + + if (unused2 < 0.0f) { + unused2 = 0.0f; + } spDC = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; - spB4 = GET_PLAYER(play); - if (spDC->mapId != 0xFFFF) { - MapDisp_GetMapPos(spDC, &spD0, &spCC); - MapDisp_GetMapTexDim(spDC, &spC8, &spC4); - scale = D_801BEBB8.minimapList->scale; - if (D_801BEBB8.minimapList->scale == 0) { - scale = 20; - } else if (D_801BEBB8.minimapList->scale == -1) { - MapDisp_GetMapScale(spDC, &spAC_scaleTemp); - scale = spAC_scaleTemp; - } - spC0 = 1.0f / (f32)scale; - 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; + if (spDC->mapId == 0xFFFF) { + return; + } + + MapDisp_GetMapPos(spDC, &spD0, &spCC); + MapDisp_GetMapTexDim(spDC, &spC8, &spC4); + + scale = D_801BEBB8.minimapList->scale; + if (D_801BEBB8.minimapList->scale == 0) { + scale = 20; + } else if (D_801BEBB8.minimapList->scale == -1) { + s32 scaleTemp; + + MapDisp_GetMapScale(spDC, &scaleTemp); + scale = scaleTemp; + } + + spC0 = 1.0f / scale; + if (!MapDisp_IsDataRotated(play)) { + spD8 = (s32)((actor->world.pos.x - spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 + + spD0; + spD4 = (s32)((actor->world.pos.z - spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE - D_801BEBB8.unkA + + spCC; + } else { + spD8 = -(s32)((actor->world.pos.x - spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 + + spD0; + spD4 = -(s32)((actor->world.pos.z - spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE - D_801BEBB8.unkA + + spCC; + } + + if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { + OPEN_DISPS(play->state.gfxCtx); + + if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & ACTOR_FLAG_80000000)) { + s16 spA2; + + Gfx_SetupDL42_Overlay(play->state.gfxCtx); + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); + + Matrix_Translate(spD8 - 160.0f, 120.0f - spD4, 0.0f, MTXMODE_NEW); + Matrix_RotateXFApply(-1.6f); + spA2 = (s32)(0x7FFF - actor->focus.rot.y) / 1024; + if (MapDisp_IsDataRotated(play)) { + spA2 += 0x7FFF; + } + Matrix_RotateYF(spA2 / 10.0f, MTXMODE_APPLY); + Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha); + gSPDisplayList(OVERLAY_DISP++, gameplay_keep_DL_01ED00); + } else if ((actor->id == ACTOR_EN_BOX) && !Flags_GetTreasure(play, actor->params & 0x1F) && + (func_80102F9C(player->actor.world.pos.y) == func_80102F9C(actor->world.pos.y))) { + Gfx_SetupDL39_Overlay(play->state.gfxCtx); + gDPPipeSync(OVERLAY_DISP++); + gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); + gDPPipeSync(OVERLAY_DISP++); + + gDPLoadTextureBlock_TEST(OVERLAY_DISP++, gMapChestIconTex, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], + D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, (spD4 + 4) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } else { - 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; - } - if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { - OPEN_DISPS(play->state.gfxCtx); - - if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) { - s16 spA2; - Gfx_SetupDL42_Overlay(play->state.gfxCtx); - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, - PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); - gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); - - 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 (MapDisp_IsDataRotated(play)) { - spA2 += 0x7FFF; - } - Matrix_RotateYF((f32)spA2 / 10.0f, MTXMODE_APPLY); - Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha); - gSPDisplayList(OVERLAY_DISP++, &D_0401ED00); - return; - } - if (actor->id == ACTOR_EN_BOX) { - if (!Flags_GetTreasure(play, actor->params & 0x1F)) { - if (func_80102F9C(spB4->actor.world.pos.y) == func_80102F9C(actor->world.pos.y)) { - Gfx_SetupDL39_Overlay(play->state.gfxCtx); - gDPPipeSync(OVERLAY_DISP++); - gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha); - gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); - gDPPipeSync(OVERLAY_DISP++); - - gDPLoadTextureBlock_TEST( - OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], D_801BEB00[2], - D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); - - // gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 1, &D_02003F20); - // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 0, 0x0000, G_TX_LOADTILE, 0, - // G_TX_NOMIRROR | G_TX_WRAP, // cmt - // G_TX_NOMASK, //maskt - // G_TX_NOLOD, //shiftt - // G_TX_NOMIRROR | G_TX_WRAP, //cms - // G_TX_NOMASK, //masks - // G_TX_NOLOD); //shifts - // gDPLoadSync(OVERLAY_DISP++); - // gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0, - // ((D_801BEAF8 + 0x40) >> D_801BEB08) - 1, - // (((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18) + 0x7FF) - // / ((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18)); - // gDPPipeSync(OVERLAY_DISP++); - // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAD8, - // ((D_801BEB28 * 8) + 7) >> 3, 0x0000, G_TX_RENDERTILE, 0, - // G_TX_NOMIRROR | G_TX_WRAP, // cmt - // G_TX_NOMASK, - // G_TX_NOLOD, - // G_TX_NOMIRROR | G_TX_WRAP, - // G_TX_NOMASK, - // G_TX_NOLOD); - // gDPSetTileSize(OVERLAY_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); - gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, - (spD4 + 4) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); - return; - } - } - } Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - if (actor->flags & 0x80000000) { + if (actor->flags & ACTOR_FLAG_80000000) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, D_801BEC2C[actor->category].b, play->interfaceCtx.minimapAlpha); gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 1) << 2, (spD4 - 1) << 2, (spD8 + 1) << 2, (spD4 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } - - CLOSE_DISPS(play->state.gfxCtx); } + CLOSE_DISPS(play->state.gfxCtx); } } -#else -void func_80103A58(PlayState* play, Actor* actor); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A58.s") -#endif void func_8010439C(PlayState* play) { ActorContext* actorCtx; @@ -916,8 +889,6 @@ void MapDisp_SwapRooms(s16 nextRoom) { } } -#ifdef NON_MATCHING -// https://decomp.me/scratch/WiRnZ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { MinimapEntry* sp6C; s32 sp68; @@ -926,59 +897,60 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { s32 sp5C; s32 sp58; s32 sp54; - s32 var_v0; + s32 scale; + f32 sp4C; sp6C = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; - if (sp6C->mapId != 0xFFFF) { - f32 sp4C; - MapDisp_GetMapPos(sp6C, &sp60, &sp5C); - MapDisp_GetMapTexDim(sp6C, &sp58, &sp54); - var_v0 = D_801BEBB8.minimapList->scale; - if (D_801BEBB8.minimapList->scale == 0) { - var_v0 = 20; - } else if (D_801BEBB8.minimapList->scale == -1) { - s32 sp48; + if (sp6C->mapId == 0xFFFF) { + return; + } - MapDisp_GetMapScale(sp6C, &sp48); - var_v0 = sp48; - } - sp4C = (1.0f / var_v0); - 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 { - 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; - } - if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) { - OPEN_DISPS(play->state.gfxCtx); + MapDisp_GetMapPos(sp6C, &sp60, &sp5C); + MapDisp_GetMapTexDim(sp6C, &sp58, &sp54); + scale = D_801BEBB8.minimapList->scale; - Gfx_SetupDL42_Overlay(play->state.gfxCtx); - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, - PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); - gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - 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 (MapDisp_IsDataRotated(play)) { - rot += 0x7FFF; - } - Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY); - Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0xFF, 200, 0, 0, play->interfaceCtx.minimapAlpha); - gSPDisplayList(OVERLAY_DISP++, D_0401ED00); + if (D_801BEBB8.minimapList->scale == 0) { + scale = 20; + } else if (D_801BEBB8.minimapList->scale == -1) { + s32 scaleTemp; - CLOSE_DISPS(play->state.gfxCtx); + MapDisp_GetMapScale(sp6C, &scaleTemp); + scale = scaleTemp; + } + + sp4C = 1.0f / scale; + 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 { + 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; + } + + if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) { + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL42_Overlay(play->state.gfxCtx); + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); + Matrix_Translate(sp68 - 160.0f, 120.0f - sp64, 0.0f, MTXMODE_NEW); + Matrix_RotateXFApply(-1.6f); + if (MapDisp_IsDataRotated(play)) { + rot += 0x7FFF; } + Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY); + Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0xFF, 200, 0, 0, play->interfaceCtx.minimapAlpha); + gSPDisplayList(OVERLAY_DISP++, gameplay_keep_DL_01ED00); + + CLOSE_DISPS(play->state.gfxCtx); } } -#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 s32 func_80106408(PlayState* play) { if ((gSaveContext.save.entrance == 0x6400) && (Cutscene_GetSceneLayer(play) != 0)) { @@ -1193,38 +1165,30 @@ s32 func_80106D08(s32 sceneId) { (s16)(((s32)(((r)*31.0f) / 255.0f) << 11) | ((s32)(((g)*31.0f) / 255.0f) << 6) | \ ((s32)(((b)*31.0f) / 255.0f) << 1) | (a)) -#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) { PauseContext* pauseCtx = &play->pauseCtx; - // s32 var_a0; s32 var_a1_2; s32 var_a1_4; s32 var_a1_5; s32 var_v1; - s32 var_s2; - TexturePtr temp_s1; - s32 temp1; - s32 temp2; - - temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; - temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; + s32 i; + s32 temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; + s32 temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; + if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, arg6)) { + s32 requiredScopeTemp; + D_801BEC84[0xF] = 0xAD5F; D_801BECA4[0xF] = 0xAD5F; D_801BECC4[0xF] = 0xAD5F; } else { - D_801BEC84[0xF] = 0; - D_801BECA4[0xF] = 0; - D_801BECC4[0xF] = 0; + D_801BECC4[0xF] = D_801BECA4[0xF] = D_801BEC84[0xF] = 0; } OPEN_DISPS(play->state.gfxCtx); - // temp_a0 = play->state.gfxCtx; - // sp48 = arg6 + &gSaveContext; Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, D_801BEC84); @@ -1232,273 +1196,175 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, D_801BECC4); gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); - for (var_s2 = 0; var_s2 < D_801BEC1C; var_s2++) { - s32 sp118_texWidth; - s32 sp114_texHeight; - s32 sp110_offsetX; - s32 sp10C_offsetY; - MinimapEntry* sp108; - s32 pad104; + for (i = 0; i < D_801BEC1C; i++) { + s32 texWidth; + s32 texHeight; + s32 offsetX; + s32 offsetY; + MinimapEntry* entry; + TexturePtr texture; s32 sp100; s32 spFC; s32 spF8; s32 spF4; - s32 spF0; - s32 spEC; + s32 texPosX; + s32 texPosY; s32 spE8; - s32 padE4; - s32 padE0; + s32 two = 2; - sp108 = &D_801BEBB8.minimapList->entry[var_s2]; - if ((sp108->mapId != 0xFFFF) && (sp108->mapId < 0x162)) { - if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) && - ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) { - temp_s1 = D_801F56B0.unk104[var_s2]; - if (temp_s1 != NULL) { - spE8 = MapData_GetMapCompactId(sp108->mapId); - if (spE8 == -1) { - continue; - } else { - // sp3C = play + 0x18000; - MapData_CPID_GetTexDim(spE8, &sp118_texWidth, &sp114_texHeight); - MapData_CPID_GetTexOffset(spE8, &sp110_offsetX, &sp10C_offsetY); - if (sp108->unk8 & 1) { - sp110_offsetX = (sp118_texWidth / 2 - sp110_offsetX) + sp118_texWidth / 2; - sp100 = (sp118_texWidth - 1) << 5; - spF8 = 0xFC00; - } else { - sp100 = 0; - spF8 = 0x400; - } - if (sp108->unk8 & 2) { - sp10C_offsetY = (sp114_texHeight / 2 - sp10C_offsetY) + sp114_texHeight / 2; - spFC = (sp114_texHeight - 1) << 5; - spF4 = 0xFC00; - } else { - spFC = 0; - spF4 = 0x400; - } - spF0 = ((sp108->unk2 - (f32)D_801BEBB8.sceneMidX) * arg5 - sp110_offsetX) + ((arg3 / 2) + arg1); - spEC = ((sp108->unk6 - (f32)D_801BEBB8.sceneMidZ) * arg5 - sp10C_offsetY) + ((arg4 / 2) + arg2); - - if (var_s2 == play->roomCtx.curRoom.num) { - if (Map_IsInBossArea(play)) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, - sp114_texHeight, 1, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, - G_TX_NOLOD); - } else { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, - sp114_texHeight, 2, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, - G_TX_NOLOD); - } - } else if (gSaveContext.save.saveInfo - .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] - .rooms & - (1 << var_s2)) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, - sp114_texHeight, 1, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, - G_TX_NOLOD); - } else if (CHECK_DUNGEON_ITEM( - DUNGEON_MAP, - arg6)) { //*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth, - sp114_texHeight, 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); - } else { - continue; - } - gSPTextureRectangle(POLY_OPA_DISP++, (spF0 << 2), (spEC << 2), (spF0 + sp118_texWidth) << 2, - (spEC + sp114_texHeight) << 2, 0, sp100, spFC, spF8, spF4); - gDPPipeSync(POLY_OPA_DISP++); - } - } - } + entry = &D_801BEBB8.minimapList->entry[i]; + if ((entry->mapId == 0xFFFF) || (entry->mapId >= 0x162)) { + continue; } + + if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[i]) || + ((D_801BEBB8.unk3C[i] + ((entry->unk8 >> 2) & 7)) < D_801BEBB8.unk42)) { + continue; + } + + texture = D_801F56B0.unk104[i]; + if (texture == NULL) { + continue; + } + + spE8 = MapData_GetMapCompactId(entry->mapId); + if (spE8 == -1) { + continue; + } + + MapData_CPID_GetTexDim(spE8, &texWidth, &texHeight); + MapData_CPID_GetTexOffset(spE8, &offsetX, &offsetY); + + if (entry->unk8 & 1) { + offsetX = (texWidth / 2 - offsetX) + texWidth / 2; + sp100 = (texWidth - 1) << 5; + spF8 = 0xFC00; + } else { + sp100 = 0; + spF8 = 0x400; + } + + if (entry->unk8 & 2) { + s32 requiredScopeTemp; + + offsetY = (texHeight / 2 - offsetY) + texHeight / 2; + spFC = (texHeight - 1) << 5; + spF4 = 0xFC00; + } else { + spFC = 0; + spF4 = 0x400; + } + + texPosX = ((entry->unk2 - (f32)D_801BEBB8.sceneMidX) * arg5 - offsetX) + ((arg3 / two) + arg1); + texPosY = ((entry->unk6 - (f32)D_801BEBB8.sceneMidZ) * arg5 - offsetY) + ((arg4 / two) + arg2); + + if (i == play->roomCtx.curRoom.num) { + if (Map_IsInBossArea(play)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 1, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + } else { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 2, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + } + } else if (((void)0, gSaveContext.save.saveInfo + .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]) + .rooms & + (1 << i)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 1, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + } else if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, arg6)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 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); + } else { + continue; + } + gSPTextureRectangle(POLY_OPA_DISP++, (texPosX << 2), (texPosY << 2), (texPosX + texWidth) << 2, + (texPosY + texHeight) << 2, 0, sp100, spFC, spF8, spF4); + gDPPipeSync(POLY_OPA_DISP++); } + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); 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 -#ifdef NON_MATCHING -// https://decomp.me/scratch/dKnQx -void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { +void func_80107B78(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { + s32 pad[23]; + MinimapChest* var_s0 = D_801BEBB8.unk54; s32 sp3C; MinimapEntry* sp38; - GraphicsContext* temp_s1; - MinimapChest* var_s0; - s32 temp_ft0; - s32 temp_ft0_2; - s32 var_s3; - s32 var_v1; + s32 posX; + s32 posZ; + s32 i; s32 var_v1_2; + s32 offsetX = 4; + s32 offsetZ = 4; - // temp_t0 = ; - if (D_801BEBB8.unk54 != NULL) { - // temp_s1 = arg0->state.gfxCtx; - OPEN_DISPS(arg0->state.gfxCtx); + if (var_s0 == NULL) { + return; + } - // temp_v1 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1 + 8; - // temp_v1->words.w1 = 0x00000000; - // temp_v1->words.w0 = 0xE7000000; + OPEN_DISPS(play->state.gfxCtx); - // temp_v1_2 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_2 + 8; - // temp_v1_2->words.w1 = 0x00000000; - // temp_v1_2->words.w0 = 0xE3001001; + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, play->pauseCtx.alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); - // temp_v1_3 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_3 + 8; - // temp_v1_3->words.w0 = 0xFA000000; - // temp_v1_3->words.w1 = (arg0->pauseCtx.alpha & 0xFF) | ~0xFF; + gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapChestIconTex, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], + D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); - // temp_v1_4 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_4 + 8; - // temp_v1_4->words.w1 = 0x000000FF; - // temp_v1_4->words.w0 = 0xFB000000; + for (i = 0; i < D_801BEBB8.numChests; i++) { + sp3C = var_s0[i].unk0; + sp38 = &D_801BEBB8.minimapList->entry[sp3C]; - // temp_v1_5 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_5 + 8; - // temp_v1_5->words.w1 = 0x00000000; - // temp_v1_5->words.w0 = 0xE7000000; + switch (play->sceneId) { + case SCENE_MITURIN_BS: + var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest) & (1 << var_s0[i].unk2); + break; - gDPPipeSync(POLY_OPA_DISP++); - gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, arg0->pauseCtx.alpha); - gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); - gDPPipeSync(POLY_OPA_DISP++); + case SCENE_HAKUGIN_BS: + var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_HAKUGIN].chest) & (1 << var_s0[i].unk2); + break; - // temp_v1_6 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_6 + 8; - // temp_v1_6->words.w1 = (u32) &D_02003F20; - // temp_v1_6->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xFD000000; + case SCENE_SEA_BS: + var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_SEA].chest) & (1 << var_s0[i].unk2); + break; - // temp_v1_7 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_7 + 8; - // var_a0 = 0x7FF; - // temp_v1_7->words.w1 = 0x07000000; - // temp_v1_7->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xF5000000; + case SCENE_INISIE_BS: + var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest) & (1 << var_s0[i].unk2); + break; - // temp_v1_8 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_8 + 8; - // temp_v1_8->words.w1 = 0x00000000; - // temp_v1_8->words.w0 = 0xE6000000; - - // temp_a1 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_a1 + 8; - // temp_a1->words.w0 = 0xF3000000; - // temp_v0 = ((u32) (D_801BEAF8 + 0x40) >> D_801BEB08) - 1; - // if (temp_v0 < 0x7FFU) { - // var_a0 = temp_v0; - // } - // temp_v1_9 = (u32) (D_801BEB18 * 8) >> 3; - // var_a2 = temp_v1_9; - // if (temp_v1_9 == 0) { - // var_a2 = 1; - // } - // if (temp_v1_9 == 0) { - // var_v0 = 1; - // } else { - // var_v0 = temp_v1_9; - // } - // temp_a1->words.w1 = (((u32) (var_a2 + 0x7FF) / var_v0) & 0xFFF) | 0x07000000U | ((var_a0 & 0xFFF) << 0xC); - - // temp_v1_10 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_10 + 8; - // temp_v1_10->words.w1 = 0x00000000; - // temp_v1_10->words.w0 = 0xE7000000; - - // temp_v1_11 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_11 + 8; - // temp_v1_11->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3) - // << 0x13); temp_v1_11->words.w1 = 0x00000000; - - // temp_v1_12 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_12 + 8; - // temp_v1_12->words.w0 = 0xF2000000; - // temp_v1_12->words.w1 = 0x0001C01C; - - // gDPSetTextureImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, 0x02003F20); - // gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | - // G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - // gDPLoadSync(POLY_OPA_DISP++); - // gDPLoadBlock(POLY_OPA_DISP++, G_TX_LOADTILE, 0, 0, 0, 0); - // gDPPipeSync(POLY_OPA_DISP++); - // gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | - // G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - // gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C); - - gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], - D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 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); - - var_s3 = 0; - var_s0 = D_801BEBB8.unk54; - // if (D_801BEBB8.numChests > 0) { - for (var_s3 = 0; var_s3 < D_801BEBB8.numChests; var_s3++) { - sp3C = var_s0[var_s3].unk0; - sp38 = &D_801BEBB8.minimapList->entry[sp3C]; - switch (arg0->sceneId) { - case SCENE_MITURIN_BS: - var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest & (1 << var_s0[var_s3].unk2); - break; - - case SCENE_HAKUGIN_BS: - var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_HAKUGIN].chest & (1 << var_s0[var_s3].unk2); - break; - - case SCENE_SEA_BS: - var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_SEA].chest & (1 << var_s0[var_s3].unk2); - break; - - case SCENE_INISIE_BS: - var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest & (1 << var_s0[var_s3].unk2); - break; - - default: - var_v1_2 = Flags_GetTreasure(arg0, (s32)var_s0[var_s3].unk2); - break; - } - if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) || - ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < (s32)D_801BEBB8.unk42) || (var_v1_2 != 0)) { - continue; - } else if (!func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[var_s3].unk6)) { - continue; - } else { - temp_ft0 = (s32)(((((f32)var_s0[var_s3].unk4 - (f32)D_801BEBB8.sceneMidX) * arg5) - (f32)4) + - (f32)((arg3 / 2) + arg1)); - temp_ft0_2 = (s32)(((((f32)var_s0[var_s3].unk8 - (f32)D_801BEBB8.sceneMidZ) * arg5) - (f32)4) + - (f32)((arg4 / 2) + arg2)); - // temp_v1_13 = temp_s1->polyOpa.p; - // temp_s1->polyOpa.p = temp_v1_13 + 8; - // temp_v1_13->words.w1 = (((temp_ft0 * 4) & 0xFFF) << 0xC) | ((temp_ft0_2 * 4) & 0xFFF); - // temp_v1_13->words.w0 = ((((temp_ft0 + 8) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_ft0_2 + 8) * 4) - // & 0xFFF); temp_v1_14 = temp_s1->polyOpa.p; temp_s1->polyOpa.p = temp_v1_14 + 8; temp_v1_14->words.w1 - // = 0; temp_v1_14->words.w0 = 0xE1000000; temp_v1_15 = temp_s1->polyOpa.p; temp_s1->polyOpa.p = - // temp_v1_15 + 8; temp_v1_15->words.w1 = 0x04000400; temp_v1_15->words.w0 = 0xF1000000; - - gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, - (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); - } + default: + var_v1_2 = Flags_GetTreasure(play, var_s0[i].unk2); + break; } - CLOSE_DISPS(arg0->state.gfxCtx); + if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) || + ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < D_801BEBB8.unk42) || (var_v1_2 != 0)) { + continue; + } + + if (!func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[i].unk6)) { + continue; + } + + posX = (s32)((((var_s0[i].unk4 - (f32)D_801BEBB8.sceneMidX) * arg5) - offsetX) + ((arg3 / 2) + arg1)); + posZ = (s32)((((var_s0[i].unk8 - (f32)D_801BEBB8.sceneMidZ) * arg5) - offsetZ) + ((arg4 / 2) + arg2)); + + gSPTextureRectangle(POLY_OPA_DISP++, posX << 2, posZ << 2, (posX + 8) << 2, (posZ + 8) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); } + + CLOSE_DISPS(play->state.gfxCtx); } -#else -void func_80107B78(PlayState*, s32, s32, s32, s32, f32); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80107B78.s") -#endif void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { PauseContext* pauseCtx = &play->pauseCtx; @@ -1546,49 +1412,49 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } } -#ifdef NON_MATCHING -// https://decomp.me/scratch/nHYgx -void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { - TransitionActorList* sp30; - // TransitionActorEntry* var_s0; - s32 temp_ft0; - s32 temp_ft0_2; - s32 var_s2; +void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { + s32 i; + TransitionActorList* sp30 = &D_801BEC24; + s32 offsetX = 4; + s32 offsetZ = 4; + s32 posX; + s32 posZ; - sp30 = &D_801BEC24; - OPEN_DISPS(arg0->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, arg0->pauseCtx.alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, play->pauseCtx.alpha); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPPipeSync(POLY_OPA_DISP++); + if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, arg6)) { - gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, &D_02002460, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1], D_801BEB00[1], - D_801BEB10[1], D_801BEB20[1], D_801BEAD0[1], 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); - for (var_s2 = 0; var_s2 < sp30->count; var_s2++) { - if ((func_80105328((s32)D_801F53B0[var_s2].params) != 0) && - func_80106BEC((s32)D_801BEBB8.unk42, (f32)D_801F53B0[var_s2].pos.y)) { - if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) { - temp_ft0 = - ((((f32)D_801F53B0[var_s2].pos.x - D_801BEBB8.sceneMidX) * arg5) - 4) + ((arg3 / 2) + arg1); - temp_ft0_2 = - ((((f32)D_801F53B0[var_s2].pos.z - D_801BEBB8.sceneMidZ) * arg5) - 4) + ((arg4 / 2) + arg2); - gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2, - (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); - } + gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapBossIconTex, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1], + D_801BEB00[1], D_801BEB10[1], D_801BEB20[1], D_801BEAD0[1], 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); + + for (i = 0; i < sp30->count; i++) { + if (!func_80105328(D_801F53B0[i].params)) { + continue; } + if (!func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) { + continue; + } + if (ABS_ALT(D_801F53B0[i].id) == ACTOR_EN_HOLL) { + continue; + } + + posX = ((((f32)D_801F53B0[i].pos.x - D_801BEBB8.sceneMidX) * arg5) - offsetX) + ((arg3 / 2) + arg1); + posZ = ((((f32)D_801F53B0[i].pos.z - D_801BEBB8.sceneMidZ) * arg5) - offsetZ) + ((arg4 / 2) + arg2); + gSPTextureRectangle(POLY_OPA_DISP++, posX << 2, posZ << 2, (posX + 8) << 2, (posZ + 8) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } } - CLOSE_DISPS(arg0->state.gfxCtx); + CLOSE_DISPS(play->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 TexturePtr func_80108A10(s32 arg0) { if ((arg0 >= 0) && (arg0 < 8)) { @@ -1663,7 +1529,7 @@ void func_80108AF8(PlayState* play) { if ((gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] .unk_14 & gBitFlags[4 - var_s1]) || - CHECK_DUNGEON_ITEM2(DUNGEON_MAP, spB4)) { + CHECK_DUNGEON_ITEM_ALT(DUNGEON_MAP, spB4)) { gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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); @@ -1731,72 +1597,76 @@ s32 func_80109124(s16 arg0) { return D_801BEBB8.unk40 - 1; } -#ifdef NON_MATCHING void func_801091F0(PlayState* play) { + MinimapEntry* entry; + f32 temp; s32 var_t2; - u16 temp_a0; - s16 sp44; - s32 sp40; - s32 sp3C; s32 var_v0; - s32 temp_v0_2; + s32 sp44 = 0; + s32 sp40 = 0; + s32 sp3C = 0; - sp44 = 0; - sp40 = 0; - sp3C = 0; - if (!func_80108A64(play)) { - if (Map_IsInBossArea(play)) { - switch (play->sceneId) { - case SCENE_MITURIN_BS: - sp44 = 0; - break; + if (func_80108A64(play)) { + return; + } - case SCENE_HAKUGIN_BS: - sp44 = 1; - break; + if (Map_IsInBossArea(play)) { + switch (play->sceneId) { + case SCENE_MITURIN_BS: + sp44 = 0; + break; - case SCENE_SEA_BS: - sp44 = 2; - break; + case SCENE_HAKUGIN_BS: + sp44 = 1; + break; - case SCENE_INISIE_BS: - sp44 = 3; - break; + case SCENE_SEA_BS: + sp44 = 2; + break; - default: - break; - } - } else { - sp44 = gSaveContext.mapIndex; + case SCENE_INISIE_BS: + sp44 = 3; + break; + + default: + break; } - temp_a0 = D_801BEBB8.minimapList->entry->mapId; - if ((temp_a0 != 0xFFFF) && (temp_a0 < 0x162)) { - temp_v0_2 = MapData_GetMapCompactId(temp_a0); - if (temp_v0_2 != -1) { - var_t2 = MapData_CPID_GetMapScale(temp_v0_2); - if (var_t2 == 0) { - var_t2 = 0x50; - } - for (var_v0 = 0; var_v0 < 2; var_v0++) { - if (play->sceneId == D_801BED24[var_v0].unk0) { - sp40 = D_801BED24[var_v0].unk4; - sp3C = D_801BED24[var_v0].unk8; - } - } + } else { + sp44 = gSaveContext.mapIndex; + } - func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); - func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); - func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44); - if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, sp44)) { - func_80107B78(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2); - } - } + entry = D_801BEBB8.minimapList->entry; + if ((entry->mapId == 0xFFFF) || (entry->mapId >= 0x162)) { + return; + } + + var_v0 = MapData_GetMapCompactId(entry->mapId); + if (var_v0 == -1) { + return; + } + + var_t2 = MapData_CPID_GetMapScale(var_v0); + if (var_t2 == 0) { + var_t2 = 0x50; + } + + for (var_v0 = 0; var_v0 < 2; var_v0++) { + if (play->sceneId == D_801BED24[var_v0].unk0) { + sp40 = D_801BED24[var_v0].unk4; + sp3C = D_801BED24[var_v0].unk8; } } + + temp = 1.0f / var_t2; + + func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); + func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); + func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); + + if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, sp44)) { + func_80107B78(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp); + } } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801091F0.s") -#endif void func_80109428(PlayState* play) { D_801BEBB8.unk4C++; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 598eadbfe..cac70d4a6 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1010,13 +1010,13 @@ 0x801BECE4:("D_801BECE4","UNK_TYPE1","",0x1C), 0x801BED00:("D_801BED00","UNK_TYPE1","",0x24), 0x801BED24:("D_801BED24","UNK_TYPE2","",0x18), - 0x801BED40:("mapColorTable","UNK_TYPE1","",0x1), - 0x801BED4C:("gameplay_dangeon_keep_Info","UNK_TYPE1","",0x3C), - 0x801BED88:("map_grand_static_Info","UNK_TYPE1","",0x1), - 0x801BF15C:("D_801BF15C","UNK_TYPE1","",0x1), - 0x801BF170:("map_i_static_Info","UNK_TYPE1","",0x244), - 0x801BF3B4:("map_i_for_gameplay_dangeon_keep","s32","",0x14), - 0x801BF3C8:("map_i_for_map_grand","s32","",0x188), + 0x801BED40:("sMapColorTable","Color_RGBA8","",0xC), + 0x801BED4C:("sGameplayDangeonKeepInfo","MapSpriteInfo2","",0x3C), + 0x801BED88:("sMapGrandStaticInfo","MapSpriteInfo","",0x3D4), + 0x801BF15C:("D_801BF15C","s32","",0x14), + 0x801BF170:("sMapIStaticInfo","MapSpriteInfo","",0x244), + 0x801BF3B4:("sMapIForGameplayDangeonKeep","s32","",0x14), + 0x801BF3C8:("sMapIForMapGrand","s32","",0x188), 0x801BF550:("D_801BF550","UNK_TYPE2","",0x2), 0x801BF554:("D_801BF554","UNK_TYPE2","",0x2), 0x801BF558:("D_801BF558","UNK_TYPE2","",0x2), diff --git a/tools/namefixer.py b/tools/namefixer.py index ea6d5e19e..698fd6950 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -12,8 +12,8 @@ simpleReplace = { # if the occurence is the whole word # for example, if there is a space before and an open parenthesis after, # like for a function call: ` func_8002E4B4(` -# -# Custom behaviour can be enabled by using a tuple as the value (see +# +# Custom behaviour can be enabled by using a tuple as the value (see # explanation in replace_single below) wordReplace = { # Functions @@ -1205,6 +1205,7 @@ wordReplace = { "play->actorCtx.targetCtx.unk4C": "play->actorCtx.targetCtx.lockOnIndex", "play->actorCtx.targetCtx.unk50": "play->actorCtx.targetCtx.lockOnTriangleSets", "play->actorCtx.targetCtx.unk8C": "play->actorCtx.targetCtx.nextTarget", + "play->doorCtx.transitionActorList": "play->transitionActors.list" "play->nextEntranceIndex": "play->nextEntrance", "play->sceneNum": "play->sceneId", "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen", diff --git a/tools/overlayhelpers/mapdata.py b/tools/overlayhelpers/mapdata.py index 2799bc5f3..6d4087a81 100755 --- a/tools/overlayhelpers/mapdata.py +++ b/tools/overlayhelpers/mapdata.py @@ -97,13 +97,13 @@ def dump(): codefile.seek(GetCodeOff(MAP_DATA_DATA_START)) data = codefile.read(MAP_DATA_DATA_END - MAP_DATA_DATA_START) - cstr += dumpList(data, 0x801BED40, "static", "Color_RGBA8", "mapColorTable", 3) - cstr += dumpList(data, 0x801BED4C, "static", "MapSpriteInfo2", "gameplay_dangeon_keep_Info", 5) - cstr += dumpList(data, 0x801BED88, "static", "MapSpriteInfo", "map_grand_static_Info", 98) + cstr += dumpList(data, 0x801BED40, "static", "Color_RGBA8", "sMapColorTable", 3) + cstr += dumpList(data, 0x801BED4C, "static", "MapSpriteInfo2", "sGameplayDangeonKeepInfo", 5) + cstr += dumpList(data, 0x801BED88, "static", "MapSpriteInfo", "sMapGrandStaticInfo", 98) cstr += dumpList(data, 0x801BF15C, "static", "s32", "D_801BF15C", 5) - cstr += dumpList(data, 0x801BF170, "static", "MapSpriteInfo", "map_i_static_Info", 58) - cstr += dumpList(data, 0x801BF3B4, "static", "s32", "map_i_for_gameplay_dangeon_keep", 5) - cstr += dumpList(data, 0x801BF3C8, "static", "s32", "map_i_for_map_grand", 98) + cstr += dumpList(data, 0x801BF170, "static", "MapSpriteInfo", "sMapIStaticInfo", 58) + cstr += dumpList(data, 0x801BF3B4, "static", "s32", "sMapIForGameplayDangeonKeep", 5) + cstr += dumpList(data, 0x801BF3C8, "static", "s32", "sMapIForMapGrand", 98) cstr += dumpMapGrandStatic(data, 0x801BED88, "MapSpriteInfo", 98) cstr += dumpMapIStatic(data, 0x801BF170, "MapSpriteInfo", 58) From 6c438d07f61159067937afc030680773c05badbd Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 16 Oct 2023 05:12:34 -0400 Subject: [PATCH 24/28] delete utility program --- tools/overlayhelpers/mapdata.py | 116 -------------------------------- 1 file changed, 116 deletions(-) delete mode 100755 tools/overlayhelpers/mapdata.py diff --git a/tools/overlayhelpers/mapdata.py b/tools/overlayhelpers/mapdata.py deleted file mode 100755 index 6d4087a81..000000000 --- a/tools/overlayhelpers/mapdata.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env python3 -# mzxrules 2022 -# Extracts z_map_data.c data -import argparse, os, struct, math - -map_i_static_Info_ROM = 0x1196B0 -CODE_START_VRAM = 0x800A5AC0 -MAP_DATA_DATA_START = 0x801BED40 -MAP_DATA_DATA_END = 0x801BF550 - -typeInfo = { - "Color_RGBA8" : [ 0x04, ">BBBB", "{{ {0}, {1}, {2}, {3} }}" ], - "MapSpriteInfo2" : [ 0x0C, ">IBBBBBBh", "{{ D_{0:08X}, {1}, {2}, {3}, {4}, MAPDATA_DRAW_{5}, {6}, {7} }}"], - "MapSpriteInfo" : [ 0x0A, ">BBhhBBh", "{{ {0}, {1}, {2}, {3}, MAPDATA_DRAW_{4}, {5}, {6} }}"], - "s32" : [ 0x04, ">I", "0x{0:02X}"] -} - -script_dir = os.path.dirname(os.path.realpath(__file__)) -repo = script_dir + os.sep + ".." + os.sep + ".." + os.sep - -def GetCodeOff(vram): - return vram-CODE_START_VRAM - -def GetDataOff(vram): - return vram-MAP_DATA_DATA_START - -def dumpList(data, vram, keyword, typeKey, varName, length): - if keyword is None: - keyword = "" - else: - keyword = f"{keyword} " - cstr = f"{keyword}{typeKey} {varName}[{length}] = {{\n" - - ty = typeInfo[typeKey] - off = GetDataOff(vram) - for i in range(length): - val = struct.unpack_from(ty[1], data, off) - off += ty[0] - cstr += f" {ty[2].format(*val)},\n" - cstr += "};\n" - - return cstr - -def dumpMapGrandStatic(data, vram, typeKey, length): - xmlStr = "\n" - ty = typeInfo[typeKey] - off = GetDataOff(vram) - mapId = 0x100 - textureOff = 0 - - for i in range(length): - val = struct.unpack_from(ty[1], data, off) - off += ty[0] - textureWidth = val[0] - textureHeight = val[1] - - xmlStr += f' \n' - # inc cursors - - textureOff += textureWidth * textureHeight // 2 - textureOff = ((textureOff + 0xF) // 0x10) * 0x10 - mapId += 1 - - - xmlStr += "};\n" - return xmlStr - -def dumpMapIStatic(data, vram, typeKey, length): - xmlStr = "\n" - ty = typeInfo[typeKey] - off = GetDataOff(vram) - mapId = 0x0 - textureOff = 0 - - for i in range(length): - val = struct.unpack_from(ty[1], data, off) - off += ty[0] - textureWidth = val[0] - textureHeight = val[1] - - xmlStr += f' \n' - # inc cursors - - textureOff += textureWidth * textureHeight // 2 - textureOff = ((textureOff + 0xF) // 0x10) * 0x10 - mapId += 1 - - - xmlStr += "};\n" - return xmlStr - - -def dump(): - data = [] - cstr = "" - with open(repo + "baserom/code","rb") as codefile: - codefile.seek(GetCodeOff(MAP_DATA_DATA_START)) - data = codefile.read(MAP_DATA_DATA_END - MAP_DATA_DATA_START) - - cstr += dumpList(data, 0x801BED40, "static", "Color_RGBA8", "sMapColorTable", 3) - cstr += dumpList(data, 0x801BED4C, "static", "MapSpriteInfo2", "sGameplayDangeonKeepInfo", 5) - cstr += dumpList(data, 0x801BED88, "static", "MapSpriteInfo", "sMapGrandStaticInfo", 98) - cstr += dumpList(data, 0x801BF15C, "static", "s32", "D_801BF15C", 5) - cstr += dumpList(data, 0x801BF170, "static", "MapSpriteInfo", "sMapIStaticInfo", 58) - cstr += dumpList(data, 0x801BF3B4, "static", "s32", "sMapIForGameplayDangeonKeep", 5) - cstr += dumpList(data, 0x801BF3C8, "static", "s32", "sMapIForMapGrand", 98) - - cstr += dumpMapGrandStatic(data, 0x801BED88, "MapSpriteInfo", 98) - cstr += dumpMapIStatic(data, 0x801BF170, "MapSpriteInfo", 58) - - print(cstr) - -parser = argparse.ArgumentParser(description="Extracts z_map_data.data") -args = parser.parse_args() - -dump() \ No newline at end of file From 9d3a447f27dac23ba952507d2725379fddf74729 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 16 Oct 2023 16:01:25 -0400 Subject: [PATCH 25/28] migrate data --- include/z64map.h | 11 +- spec | 4 +- src/code/z_map_disp.c | 298 +++++++++++------- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 1 + tools/disasm/functions.txt | 4 +- tools/disasm/variables.txt | 8 +- tools/sizes/code_functions.csv | 4 +- undefined_syms.txt | 4 + 8 files changed, 204 insertions(+), 130 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index c4c6ae71c..7fb934c43 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -91,7 +91,7 @@ typedef struct { /* 0x3C */ s16* unk3C; /* 0x40 */ s16 unk40; /* 0x42 */ s16 unk42; - /* 0x44 */ s16 unk44; + /* 0x44 */ s16 lowestFloor; /* 0x48 */ s16* unk48; /* 0x4C */ s16 unk4C; /* 0x50 */ s32 numChests; @@ -101,16 +101,16 @@ typedef struct { } struct_801BEBB8; // size = 0x5C typedef struct { - /* 0x0 */ s16 unk0; //scene - /* 0x2 */ s16 unk2; -} struct_801BEC5C; // size = 0x4 + /* 0x0 */ s16 sceneId; + /* 0x2 */ s16 lowestFloor; +} MapCustomLowestFloor; // size = 0x4 typedef struct { /* 0x00 */ s32 unk0[5]; } struct_801BEC70; // size = 0x14 typedef struct { - /* 0x0 */ s16 unk0; + /* 0x0 */ s16 sceneId; /* 0x4 */ s32 unk4; /* 0x8 */ s32 unk8; } struct_801BED24; // size = 0xC @@ -143,6 +143,7 @@ void func_80108AF8(struct PlayState* play); s32 func_801090B0(s32 arg0); s32 func_80109124(s16 arg0); void func_801091F0(struct PlayState* play); +void func_80109428(struct PlayState* play); /* z_map_data */ void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color); diff --git a/spec b/spec index 9b7dcc1fb..0ff498ee3 100644 --- a/spec +++ b/spec @@ -481,8 +481,6 @@ beginseg include "build/src/code/z_lights.o" include "build/src/code/z_malloc.o" include "build/src/code/z_map_disp.o" - include "build/data/code/z_map_disp.data.o" - include "build/data/code/z_map_disp.bss.o" include "build/src/code/z_map_data.o" include "build/src/code/z_map_exp.o" include "build/src/code/z_msgevent.o" @@ -656,7 +654,7 @@ beginseg include "build/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.o" #ifdef NON_MATCHING include "build/src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc.o" - #else + #else include "build/data/ovl_file_choose/ovl_file_choose.reloc.o" #endif endseg diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 1bfffe3b0..77bf5a91d 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -1,5 +1,6 @@ #include "global.h" #include "gfx.h" +#include "assets/interface/icon_item_dungeon_static/icon_item_dungeon_static.h" #include "assets/interface/parameter_static/parameter_static.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" @@ -7,38 +8,118 @@ void MapDisp_DestroyMapI(PlayState* play); void MapDisp_InitMapI(PlayState* play); -extern s32 D_801BEAD0[4]; // G_IM_SIZ -extern s32 D_801BEAE0[4]; // siz_LOAD_BLOCK -extern u32 D_801BEAF0[4]; // siz_INCR -extern s32 D_801BEB00[4]; // siz_SHIFT -extern u32 D_801BEB10[4]; // siz_BYTES -extern u32 D_801BEB20[4]; // siz_LINE_BYTES -extern TexturePtr D_801BEB38; -extern struct_801BEBB8 D_801BEBB8; -extern s16 D_801BEBFA; // D_801BEBB8.unk42 -extern MinimapList D_801BEC14; // D_801F5130 -extern s32 D_801BEC1C; // current scene's no. of rooms -extern s32 D_801BEC20; // MinimapChest count -extern TransitionActorList D_801BEC24; -extern Color_RGBA8 D_801BEC2C[12]; // cat colors -extern struct_801BEC5C D_801BEC5C[5]; -extern struct_801BEC70 D_801BEC70; -extern u16 D_801BEC84[0x10]; // palette 0 -extern u16 D_801BECA4[0x10]; // palette 1 -extern u16 D_801BECC4[0x10]; // palette 2 -extern TexturePtr D_801BECE4[6]; -extern TexturePtr D_801BED00[9]; -extern struct_801BED24 D_801BED24[2]; +static s32 sLoadTextureBlock_siz[4] = { + G_IM_SIZ_4b, + G_IM_SIZ_8b, + G_IM_SIZ_16b, + G_IM_SIZ_32b, +}; +static s32 sLoadTextureBlock_siz_LOAD_BLOCK[4] = { + G_IM_SIZ_4b_LOAD_BLOCK, + G_IM_SIZ_8b_LOAD_BLOCK, + G_IM_SIZ_16b_LOAD_BLOCK, + G_IM_SIZ_32b_LOAD_BLOCK, +}; +static u32 sLoadTextureBlock_siz_INCR[4] = { + G_IM_SIZ_4b_INCR, + G_IM_SIZ_8b_INCR, + G_IM_SIZ_16b_INCR, + G_IM_SIZ_32b_INCR, +}; +static s32 sLoadTextureBlock_siz_SHIFT[4] = { + G_IM_SIZ_4b_SHIFT, + G_IM_SIZ_8b_SHIFT, + G_IM_SIZ_16b_SHIFT, + G_IM_SIZ_32b_SHIFT, +}; +static u32 sLoadTextureBlock_siz_BYTES[4] = { + G_IM_SIZ_4b_BYTES, + G_IM_SIZ_8b_BYTES, + G_IM_SIZ_16b_BYTES, + G_IM_SIZ_32b_BYTES, +}; +static u32 sLoadTextureBlock_siz_LINE_BYTES[4] = { + G_IM_SIZ_4b_LINE_BYTES, + G_IM_SIZ_8b_LINE_BYTES, + G_IM_SIZ_16b_LINE_BYTES, + G_IM_SIZ_32b_LINE_BYTES, +}; -extern MinimapEntry D_801F5130[0x50]; -extern MinimapChest D_801F5270[32]; -extern TransitionActorEntry D_801F53B0[48]; -extern struct_801F56B0 D_801F56B0; +#define gDPLoadTextureBlock_TEST(pkt, timg, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + _DW({ \ + gDPSetTextureImage(pkt, fmt, sLoadTextureBlock_siz_LOAD_BLOCK[siz], 1, timg); \ + gDPSetTile(pkt, fmt, sLoadTextureBlock_siz_LOAD_BLOCK[siz], 0, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, \ + masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + sLoadTextureBlock_siz_INCR[siz]) >> sLoadTextureBlock_siz_SHIFT[siz]) - 1, \ + CALC_DXT(width, sLoadTextureBlock_siz_BYTES[siz])); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, sLoadTextureBlock_siz[siz], (((width)*sLoadTextureBlock_siz_LINE_BYTES[siz]) + 7) >> 3, \ + 0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ + }) -extern TexturePtr D_02002460; -extern TexturePtr D_02003F20; -extern Gfx D_0401ED00[]; -extern TexturePtr D_0C000000; +static UNK_TYPE4 D_801BEB30[2] = { 0, 0 }; + +static u64 sWhiteSquareTex[] = { + 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, + 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, + 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, + 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, +}; +static struct_801BEBB8 D_801BEBB8 = { + NULL, -1, 0xD2, 0x8C, 0, 0, NULL, -1, NULL, 0, 0, 0, 0, NULL, NULL, 0, + 0, 0, 0, 0, 0, NULL, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, +}; +extern s16 D_801BEBFA; // D_801BEBB8.unk42 + +static MinimapEntry D_801F5130[32]; +static MinimapChest D_801F5270[32]; + +static MinimapList D_801BEC14 = { + D_801F5130, + 80, +}; +static s32 sSceneNumRooms = 0; // current scene's no. of rooms +static s32 sNumChests = 0; // MinimapChest count +static TransitionActorList sTransitionActorList = { 0, NULL }; +static Color_RGBA8 D_801BEC2C[12] = { + { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 0, 255, 0, 255 }, { 255, 255, 255, 255 }, + { 255, 255, 255, 255 }, { 255, 0, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, + { 255, 255, 255, 255 }, { 255, 0, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, +}; // cat colors +static MapCustomLowestFloor sCustomLowestFloor[] = { + { SCENE_HAKUGIN, -1 }, { SCENE_HAKUGIN_BS, -1 }, { SCENE_SEA, -2 }, { SCENE_SEA_BS, -2 }, { SCENE_INISIE_N, -1 }, +}; +static struct_801BEC70 D_801BEC70 = { 0x43, 0x51, 0x5F, 0x6D, 0x7B }; +static u16 D_801BEC84[0x10] = { + 0x0000, 0x0000, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, + 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, +}; // palette 0 +static u16 D_801BECA4[0x10] = { + 0x0000, 0x027F, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, + 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, +}; // palette 1 +static u16 D_801BECC4[0x10] = { + 0x0000, 0x0623, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, + 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, +}; // palette 2 + +static TexturePtr sDungeonMapFloorTextures[] = { + gDungeonMap1FButtonTex, gDungeonMap2FButtonTex, gDungeonMap3FButtonTex, gDungeonMap4FButtonTex, + gDungeonMap5FButtonTex, gDungeonMap6FButtonTex, gDungeonMap7FButtonTex, gDungeonMap8FButtonTex, + gDungeonMapB1ButtonTex, gDungeonMapB2ButtonTex, gDungeonMapB3ButtonTex, gDungeonMapB4ButtonTex, + gDungeonMapB5ButtonTex, gDungeonMapB6ButtonTex, gDungeonMapB7ButtonTex, gDungeonMapB8ButtonTex, +}; +static struct_801BED24 D_801BED24[] = { + { SCENE_MITURIN, 0, -10 }, + { SCENE_MITURIN_BS, 0, -10 }, +}; + +static TransitionActorEntry D_801F53B0[48]; +static struct_801F56B0 D_801F56B0; void MapDisp_GetMapITexture(void* dst, s32 mapId) { if (MapDisp_GetSizeOfMapITex(mapId) != 0) { @@ -215,21 +296,6 @@ s32 func_80103A10(PlayState* play) { return true; } -#define gDPLoadTextureBlock_TEST(pkt, timg, fmt, siz_LOAD_BLOCK, siz_INCR, siz_SHIFT, siz_BYTES, siz_LINE_BYTES, siz, \ - width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ - _DW({ \ - gDPSetTextureImage(pkt, fmt, siz_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, (((width) * (height) + siz_INCR) >> siz_SHIFT) - 1, \ - CALC_DXT(width, siz_BYTES)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width)*siz_LINE_BYTES) + 7) >> 3, 0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, \ - cms, masks, shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ - }) - void func_80103A58(PlayState* play, Actor* actor) { MinimapEntry* spDC; s32 spD8; @@ -317,8 +383,7 @@ void func_80103A58(PlayState* play, Actor* actor) { gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha); gDPPipeSync(OVERLAY_DISP++); - gDPLoadTextureBlock_TEST(OVERLAY_DISP++, gMapChestIconTex, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], - D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 8, 8, 0, + gDPLoadTextureBlock_TEST(OVERLAY_DISP++, gMapChestIconTex, 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); @@ -345,7 +410,7 @@ void func_8010439C(PlayState* play) { if (play->roomCtx.curRoom.num != -1) { OPEN_DISPS(play->state.gfxCtx); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &sWhiteSquareTex, G_IM_FMT_I, 16, 16, 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); actorCtx = &play->actorCtx; @@ -462,7 +527,7 @@ void func_80104AE8(PlayState* play) { if (play->roomCtx.curRoom.num != -1) { OPEN_DISPS(play->state.gfxCtx); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + gDPLoadTextureBlock_4b(OVERLAY_DISP++, &sWhiteSquareTex, G_IM_FMT_I, 16, 16, 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); actor = play->actorCtx.actorLists[ACTORCAT_DOOR].first; @@ -511,7 +576,7 @@ void MapDisp_Init(PlayState* play) { D_801BEBB8.swapAnimTimer = 0; if (!Map_IsInBossArea(play)) { - D_801BEC1C = play->numRooms; + sSceneNumRooms = play->numRooms; } D_801BEBB8.texBuff0 = THA_AllocTailAlign16(&play->state.tha, 0x4000); D_801BEBB8.texBuff1 = THA_AllocTailAlign16(&play->state.tha, 0x4000); @@ -524,9 +589,9 @@ void MapDisp_Init(PlayState* play) { D_801BEBB8.sceneMidX = (s16)(s32)((f32)D_801BEBB8.sceneMinX + ((f32)D_801BEBB8.sceneWidth * 0.5f)); D_801BEBB8.sceneMidZ = (s16)(s32)((f32)D_801BEBB8.sceneMinZ + ((f32)D_801BEBB8.sceneHeight * 0.5f)); } - D_801BEBB8.unk3C = THA_AllocTailAlign16(&play->state.tha, D_801BEC1C * sizeof(s16)); + D_801BEBB8.unk3C = THA_AllocTailAlign16(&play->state.tha, sSceneNumRooms * sizeof(s16)); - for (i = 0; i < D_801BEC1C; i++) { + for (i = 0; i < sSceneNumRooms; i++) { func_80102E90(play, &D_801BEBB8.unk3C[i]); } D_801BEBB8.unk48 = THA_AllocTailAlign16(&play->state.tha, 32 * sizeof(s16)); @@ -552,7 +617,7 @@ void func_80104F34(PlayState* play) { for (i1 = 0; i1 < 32; i1++) { D_801BEBB8.unk48[i1] = -0x7FFF; } - for (i2 = 0; i2 < D_801BEC1C; i2++) { + for (i2 = 0; i2 < sSceneNumRooms; i2++) { MinimapEntry* mapEntry1 = &D_801BEBB8.minimapList->entry[i2]; if (mapEntry1->mapId == 0xFFFF) { @@ -567,11 +632,11 @@ void func_80104F34(PlayState* play) { } } } - for (i2 = 0; i2 < D_801BEC1C; i2++) { + for (i2 = 0; i2 < sSceneNumRooms; i2++) { if (D_801BEBB8.unk48[i2] == -0x7FFF) { break; } - for (i3 = i2 + 1; i3 < D_801BEC1C; i3++) { + for (i3 = i2 + 1; i3 < sSceneNumRooms; i3++) { if (D_801BEBB8.unk48[i3] == -0x7FFF) { break; } @@ -583,12 +648,12 @@ void func_80104F34(PlayState* play) { } } } - for (i2 = 0; i2 < D_801BEC1C; i2++) { + for (i2 = 0; i2 < sSceneNumRooms; i2++) { MinimapEntry* mapEntry2 = &D_801BEBB8.minimapList->entry[i2]; D_801BEBB8.unk3C[i2] = -1; - for (i4 = 0; i4 < D_801BEC1C; i4++) { + for (i4 = 0; i4 < sSceneNumRooms; i4++) { if (D_801BEBB8.unk48[i4] != -0x7FFF) { if (fabsf((f32)D_801BEBB8.unk48[i4] - (f32)mapEntry2->unk4) < 5.0f) { D_801BEBB8.unk3C[i2] = i4; @@ -598,15 +663,15 @@ void func_80104F34(PlayState* play) { } } D_801BEBB8.unk40 = 0; - for (i2 = 0; i2 < D_801BEC1C; i2++) { + for (i2 = 0; i2 < sSceneNumRooms; i2++) { if (D_801BEBB8.unk48[i2] != -0x7FFF) { D_801BEBB8.unk40++; } } - D_801BEBB8.unk44 = 0; - for (i2 = 0; i2 < 5; i2++) { - if (play->sceneId == D_801BEC5C[i2].unk0) { - D_801BEBB8.unk44 = D_801BEC5C[i2].unk2; + D_801BEBB8.lowestFloor = 0; + for (i2 = 0; i2 < ARRAY_COUNT(sCustomLowestFloor); i2++) { + if (play->sceneId == sCustomLowestFloor[i2].sceneId) { + D_801BEBB8.lowestFloor = sCustomLowestFloor[i2].lowestFloor; } } } @@ -614,7 +679,8 @@ void func_80104F34(PlayState* play) { s32 func_80105294(void) { struct_801BEC70 sp4 = D_801BEC70; - if ((D_801BEBB8.minimapList == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || + (sSceneNumRooms == 0)) { return 0x7B; } return sp4.unk0[D_801BEBB8.unk58]; @@ -633,7 +699,7 @@ s32 func_80105328(s32 params) { } void func_8010534C(PlayState* play) { - TransitionActorList* transitionActors = &D_801BEC24; + TransitionActorList* transitionActors = &sTransitionActorList; s32 var_v0; s32 i; @@ -663,12 +729,12 @@ void func_8010549C(PlayState* play, void* segmentAddress) { s32 i; if (!Map_IsInBossArea(play)) { - D_801BEC1C = play->numRooms; + sSceneNumRooms = play->numRooms; temp_v0 = Lib_SegmentedToVirtual(segmentAddress); D_801BEC14 = *temp_v0; var_v1 = Lib_SegmentedToVirtual(temp_v0->entry); - for (i = 0; i < D_801BEC1C; i++) { + for (i = 0; i < sSceneNumRooms; i++) { D_801F5130[i] = *var_v1++; } @@ -696,21 +762,21 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { for (var_a3 = 0; var_a3 < num; var_v1++, var_a3++) { D_801F5270[var_a3] = *var_v1; } - D_801BEC20 = num; + sNumChests = num; } D_801BEBB8.unk54 = D_801F5270; - D_801BEBB8.numChests = D_801BEC20; + D_801BEBB8.numChests = sNumChests; } void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList) { s32 i; if (!Map_IsInBossArea(play)) { - D_801BEC24.count = num; + sTransitionActorList.count = num; for (i = 0; i < num; i++) { D_801F53B0[i] = transitionActorList[i]; } - D_801BEC24.list = D_801F53B0; + sTransitionActorList.list = D_801F53B0; } } @@ -731,14 +797,14 @@ void MapDisp_Destroy(PlayState* play) { D_801BEBB8.texBuff0 = NULL; D_801BEBB8.texBuff1 = NULL; - for (i = 0; i < D_801BEC1C; i++) { + for (i = 0; i < sSceneNumRooms; i++) { func_80102EA4(play, &D_801BEBB8.unk3C[i]); } D_801BEBB8.unk3C = NULL; D_801BEBB8.unk40 = 0; D_801BEBB8.unk42 = 0; - D_801BEBB8.unk44 = 0; + D_801BEBB8.lowestFloor = 0; D_801BEBB8.unk4C = 0; D_801BEBB8.unk48 = NULL; D_801BEBB8.numChests = 0; @@ -753,7 +819,8 @@ void func_80105B34(PlayState* play) { s16 temp_v1; s16 temp_v1_2; - if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0)) { + if ((D_801BEBB8.minimapList != NULL) && (sSceneNumRooms != 0)) { + //! FAKE: D_801BEBFA should be D_801BEBB8.unk42 D_801BEBFA = 8 - play->pauseCtx.unk_256; if (D_801BEBB8.prevRoom != -1) { if (D_801BEBB8.swapAnimTimer > 0) { @@ -792,7 +859,7 @@ void MapDisp_SwapRooms(s16 nextRoom) { s32 sp44; s32 sp40; - if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0) && (nextRoom != -1)) { + if ((D_801BEBB8.minimapList != NULL) && (sSceneNumRooms != 0) && (nextRoom != -1)) { nextMinimapEntry = &D_801BEBB8.minimapList->entry[nextRoom]; if ((nextMinimapEntry->mapId < 5) || ((nextMinimapEntry->mapId >= 0x100) && (nextMinimapEntry->mapId < 0x162)) || @@ -1006,7 +1073,7 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { if ((D_801BEBB8.minimapList != 0) && ((s32)pauseCtx->state <= PAUSE_STATE_OPENING_2) && (XREG(95) == 0) && (play->interfaceCtx.minimapAlpha != 0)) { - if (!func_801064CC(play) && (D_801BEC1C != 0)) { + if (!func_801064CC(play) && (sSceneNumRooms != 0)) { if (func_80106450(play)) { func_801031D0(play, D_801BEBB8.lMapCurTex, D_801BEBB8.unkC, D_801BEBB8.unkE, D_801BEBB8.curRoom, 1.0f - (D_801BEBB8.swapAnimTimer * 0.05f)); @@ -1063,13 +1130,13 @@ void* func_801068FC(PlayState* play, void* heap) { s32 var_s3; heapNext = heap; - if ((D_801BEBB8.minimapList == NULL) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (sSceneNumRooms == 0)) { return heapNext; } D_801F56B0.rooms = 0; // loop for number of rooms - for (roomIter = 0; roomIter < D_801BEC1C; roomIter++) { + for (roomIter = 0; roomIter < sSceneNumRooms; roomIter++) { var_s2 = false; entry = &D_801BEBB8.minimapList->entry[roomIter]; if (entry->mapId == 0xFFFF) { @@ -1102,7 +1169,7 @@ void* func_801068FC(PlayState* play, void* heap) { heapNext = (intptr_t)D_801F56B0.unk84[dungeonMapRoomIter] + MapData_CPID_GetSizeOfMapTex(mapId); } } - for (roomIter = 0; roomIter < D_801BEC1C; roomIter++) { + for (roomIter = 0; roomIter < sSceneNumRooms; roomIter++) { entry = &D_801BEBB8.minimapList->entry[roomIter]; if (entry->mapId == 0xFFFF) { D_801F56B0.unk104[roomIter] = NULL; @@ -1142,7 +1209,7 @@ s32 func_80106BEC(s32 arg0, f32 arg1) { return false; } -s32 func_80106D08(s32 sceneId) { +s32 MapDisp_ConvertBossSceneToDungeonScene(s32 sceneId) { switch (sceneId) { case SCENE_MITURIN_BS: return SCENE_MITURIN; @@ -1196,7 +1263,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, D_801BECC4); gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); - for (i = 0; i < D_801BEC1C; i++) { + for (i = 0; i < sSceneNumRooms; i++) { s32 texWidth; s32 texHeight; s32 offsetX; @@ -1268,8 +1335,8 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } - } else if (((void)0, gSaveContext.save.saveInfo - .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]) + } else if (((void)0, gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId( + MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))]) .rooms & (1 << i)) { gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 1, @@ -1316,8 +1383,7 @@ void func_80107B78(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPPipeSync(POLY_OPA_DISP++); - gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapChestIconTex, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], - D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 8, 8, 0, + gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapChestIconTex, 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); @@ -1368,7 +1434,7 @@ void func_80107B78(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { PauseContext* pauseCtx = &play->pauseCtx; - TransitionActorList* transitionActors = &D_801BEC24; + TransitionActorList* transitionActors = &sTransitionActorList; TransitionActorEntry* var_s1; s32 tempX; s32 tempY; @@ -1380,7 +1446,7 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 OPEN_DISPS(play->state.gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &D_801BEB38, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &sWhiteSquareTex, G_IM_FMT_I, 16, 16, 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); for (i = 0; i < transitionActors->count; i++) { if (func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) { @@ -1389,12 +1455,14 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 roomB = D_801F53B0[i].sides[1].room; if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex) || (roomA < 0) || (gSaveContext.save.saveInfo - .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] + .permanentSceneFlags[Play_GetOriginalSceneId( + MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))] .rooms & (1 << roomA)) || (roomB < 0) || (gSaveContext.save.saveInfo - .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] + .permanentSceneFlags[Play_GetOriginalSceneId( + MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))] .rooms & (1 << roomB))) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -1414,7 +1482,7 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { s32 i; - TransitionActorList* sp30 = &D_801BEC24; + TransitionActorList* sp30 = &sTransitionActorList; s32 offsetX = 4; s32 offsetZ = 4; s32 posX; @@ -1430,8 +1498,7 @@ void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPPipeSync(POLY_OPA_DISP++); if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, arg6)) { - gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapBossIconTex, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1], - D_801BEB00[1], D_801BEB10[1], D_801BEB20[1], D_801BEAD0[1], 8, 8, 0, + gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapBossIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 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); @@ -1456,14 +1523,14 @@ void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 CLOSE_DISPS(play->state.gfxCtx); } -TexturePtr func_80108A10(s32 arg0) { - if ((arg0 >= 0) && (arg0 < 8)) { - return D_801BECE4[arg0]; +TexturePtr MapDisp_GetDungeonMapFloorTexture(s32 floorNumber) { + if ((floorNumber >= 0) && (floorNumber < 8)) { + return sDungeonMapFloorTextures[floorNumber]; } - if ((arg0 >= -8) && (arg0 < 0)) { - return D_801BED00[-arg0]; + if ((floorNumber >= -8) && (floorNumber < 0)) { + return sDungeonMapFloorTextures[7 + -floorNumber]; } - return &D_0C000000; + return gDungeonMapBlankFloorButtonTex; } s32 func_80108A64(PlayState* play) { @@ -1494,7 +1561,7 @@ void func_80108AF8(PlayState* play) { s32 var_s1; s32 spB4 = 0; - if ((D_801BEBB8.minimapList != NULL) && (D_801BEC1C != 0) && !func_80108A64(play)) { + if ((D_801BEBB8.minimapList != NULL) && (sSceneNumRooms != 0) && !func_80108A64(play)) { if (Map_IsInBossArea(play)) { switch (play->sceneId) { case SCENE_MITURIN_BS: @@ -1526,22 +1593,25 @@ void func_80108AF8(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); for (var_s1 = 0; var_s1 < D_801BEBB8.unk40; var_s1++) { - if ((gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))] + if ((gSaveContext.save.saveInfo + .permanentSceneFlags[Play_GetOriginalSceneId( + MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))] .unk_14 & gBitFlags[4 - var_s1]) || CHECK_DUNGEON_ITEM_ALT(DUNGEON_MAP, spB4)) { - gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b, - 24, 16, 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); + gDPLoadTextureBlock(POLY_OPA_DISP++, MapDisp_GetDungeonMapFloorTexture(D_801BEBB8.lowestFloor + var_s1), + G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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(POLY_OPA_DISP++, 0x0144, (125 - var_s1 * 15) << 2, 0x01A4, ((125 - var_s1 * 15) + 16) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); } } gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 255, pauseCtx->alpha); - gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10((D_801BEBB8.unk44 - pauseCtx->unk_256) + 8), G_IM_FMT_IA, - G_IM_SIZ_8b, 24, 16, 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); + gDPLoadTextureBlock(POLY_OPA_DISP++, + MapDisp_GetDungeonMapFloorTexture((D_801BEBB8.lowestFloor - pauseCtx->unk_256) + 8), + G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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); a3 = 80; a2 = 106; @@ -1565,7 +1635,7 @@ void func_80108AF8(PlayState* play) { } s32 func_801090B0(s32 arg0) { - if ((D_801BEBB8.minimapList == NULL) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (sSceneNumRooms == 0)) { return false; } if ((arg0 < 0) || (arg0 >= 6)) { @@ -1580,7 +1650,7 @@ s32 func_801090B0(s32 arg0) { s32 func_80109124(s16 arg0) { s32 i; - if ((D_801BEBB8.minimapList == NULL) || (D_801BEC1C == 0)) { + if ((D_801BEBB8.minimapList == NULL) || (sSceneNumRooms == 0)) { return -1; } if (D_801BEBB8.unk40 < 2) { @@ -1600,7 +1670,7 @@ s32 func_80109124(s16 arg0) { void func_801091F0(PlayState* play) { MinimapEntry* entry; f32 temp; - s32 var_t2; + s32 scale; s32 var_v0; s32 sp44 = 0; s32 sp40 = 0; @@ -1645,19 +1715,19 @@ void func_801091F0(PlayState* play) { return; } - var_t2 = MapData_CPID_GetMapScale(var_v0); - if (var_t2 == 0) { - var_t2 = 0x50; + scale = MapData_CPID_GetMapScale(var_v0); + if (scale == 0) { + scale = 80; } - for (var_v0 = 0; var_v0 < 2; var_v0++) { - if (play->sceneId == D_801BED24[var_v0].unk0) { + for (var_v0 = 0; var_v0 < ARRAY_COUNT(D_801BED24); var_v0++) { + if (play->sceneId == D_801BED24[var_v0].sceneId) { sp40 = D_801BED24[var_v0].unk4; sp3C = D_801BED24[var_v0].unk8; } } - temp = 1.0f / var_t2; + temp = 1.0f / scale; func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 1fe56b871..b21492fbd 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -5,6 +5,7 @@ */ #include "z_kaleido_scope.h" +#include "z64map.h" #include "z64view.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "archives/icon_item_static/icon_item_static_yar.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index da0b7359b..6c4c6af13 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1943,12 +1943,12 @@ 0x801068D8:("MapDisp_DestroyMapI",), 0x801068FC:("func_801068FC",), 0x80106BEC:("func_80106BEC",), - 0x80106D08:("func_80106D08",), + 0x80106D08:("MapDisp_ConvertBossSceneToDungeonScene",), 0x80106D5C:("func_80106D5C",), 0x80107B78:("func_80107B78",), 0x80108124:("func_80108124",), 0x80108558:("func_80108558",), - 0x80108A10:("func_80108A10",), + 0x80108A10:("MapDisp_GetDungeonMapFloorTexture",), 0x80108A64:("func_80108A64",), 0x80108AF8:("func_80108AF8",), 0x801090B0:("func_801090B0",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index cac70d4a6..e827800d2 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -992,17 +992,17 @@ 0x801BEB00:("D_801BEB00","s32","[4]",0x10), 0x801BEB10:("D_801BEB10","u32","[4]",0x10), 0x801BEB20:("D_801BEB20","u32","[4]",0x10), - 0x801BEB38:("D_801BEB38","UNK_TYPE1","",0x1), + 0x801BEB38:("sWhiteSquareTex","UNK_TYPE1","",0x1), 0x801BEBB8:("D_801BEBB8","UNK_TYPE4","",0x40), 0x801BEBF8:("D_801BEBF8","UNK_TYPE2","",0x2), 0x801BEBFA:("D_801BEBFA","UNK_TYPE2","",0x2), 0x801BEBFC:("D_801BEBFC","UNK_TYPE2","",0x18), 0x801BEC14:("D_801BEC14","MinimapList","",0x8), - 0x801BEC1C:("D_801BEC1C","UNK_TYPE4","",0x4), - 0x801BEC20:("D_801BEC20","UNK_TYPE4","",0x4), + 0x801BEC1C:("sSceneNumRooms","s32","",0x4), + 0x801BEC20:("sNumChests","s32","",0x4), 0x801BEC24:("D_801BEC24","UNK_TYPE1","",0x8), 0x801BEC2C:("D_801BEC2C","Color_RGBA8","[12]",0x30), - 0x801BEC5C:("D_801BEC5C","struct_801BEC5C","[5]",0x14), + 0x801BEC5C:("sCustomLowestFloor","MapCustomLowestFloor","[5]",0x14), 0x801BEC70:("D_801BEC70","UNK_TYPE4","",0x14), 0x801BEC84:("D_801BEC84","u16","[16]",0x10), 0x801BECA4:("D_801BECA4","u16","[16]",0x10), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 9243bb341..247eee68a 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1457,12 +1457,12 @@ asm/non_matchings/code/z_map_disp/MapDisp_InitMapI.s,MapDisp_InitMapI,0x801068B4 asm/non_matchings/code/z_map_disp/MapDisp_DestroyMapI.s,MapDisp_DestroyMapI,0x801068D8,0x9 asm/non_matchings/code/z_map_disp/func_801068FC.s,func_801068FC,0x801068FC,0xBC asm/non_matchings/code/z_map_disp/func_80106BEC.s,func_80106BEC,0x80106BEC,0x47 -asm/non_matchings/code/z_map_disp/func_80106D08.s,func_80106D08,0x80106D08,0x15 +asm/non_matchings/code/z_map_disp/MapDisp_ConvertBossSceneToDungeonScene.s,MapDisp_ConvertBossSceneToDungeonScene,0x80106D08,0x15 asm/non_matchings/code/z_map_disp/func_80106D5C.s,func_80106D5C,0x80106D5C,0x387 asm/non_matchings/code/z_map_disp/func_80107B78.s,func_80107B78,0x80107B78,0x16B asm/non_matchings/code/z_map_disp/func_80108124.s,func_80108124,0x80108124,0x10D asm/non_matchings/code/z_map_disp/func_80108558.s,func_80108558,0x80108558,0x12E -asm/non_matchings/code/z_map_disp/func_80108A10.s,func_80108A10,0x80108A10,0x15 +asm/non_matchings/code/z_map_disp/MapDisp_GetDungeonMapFloorTexture.s,MapDisp_GetDungeonMapFloorTexture,0x80108A10,0x15 asm/non_matchings/code/z_map_disp/func_80108A64.s,func_80108A64,0x80108A64,0x25 asm/non_matchings/code/z_map_disp/func_80108AF8.s,func_80108AF8,0x80108AF8,0x16E asm/non_matchings/code/z_map_disp/func_801090B0.s,func_801090B0,0x801090B0,0x1D diff --git a/undefined_syms.txt b/undefined_syms.txt index 010f94c05..47434ee04 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -630,3 +630,7 @@ D_0E0002C8 = 0x0E0002C8; // segment 0x0F D_0F000000 = 0x0F000000; + +// z_map_disp +// fake symbol +D_801BEBFA = 0x801BEBFA; \ No newline at end of file From 396379a4ef36b6fc0727a5583c708c15f5999112 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 16 Oct 2023 16:44:21 -0400 Subject: [PATCH 26/28] TransiActor ->TransitionActor --- include/z64scene.h | 68 +++++++++++++++++----------------- src/code/z_play.c | 2 +- src/code/z_scene.c | 10 ++--- tools/disasm/functions.txt | 4 +- tools/sizes/code_functions.csv | 2 +- 5 files changed, 44 insertions(+), 42 deletions(-) diff --git a/include/z64scene.h b/include/z64scene.h index edb99fb68..e91b25777 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -111,7 +111,9 @@ typedef struct { /* 0x0 */ u8 code; /* 0x1 */ u8 num; /* 0x4 */ void* segment; -} SCmdTransiActorList; // size = 0x8 +} SCmdTransitionActorList; // size = 0x8 + +#define SCmdTransiActorList SCmdTransitionActorList typedef struct { /* 0x0 */ u8 code; @@ -525,38 +527,38 @@ typedef struct { typedef ActorCsCamInfo CsCameraEntry; // TODO: Remove once ZAPD updates its structs typedef union { - /* Command: N/A */ SCmdBase base; - /* Command: 0x00 */ SCmdSpawnList spawnList; - /* Command: 0x01 */ SCmdActorList actorList; - /* Command: 0x02 */ SCmdCsCameraList actorCsCamList; - /* Command: 0x03 */ SCmdColHeader colHeader; - /* Command: 0x04 */ SCmdRoomList roomList; - /* Command: 0x05 */ SCmdWindSettings windSettings; - /* Command: 0x06 */ SCmdEntranceList entranceList; - /* Command: 0x07 */ SCmdSpecialFiles specialFiles; - /* Command: 0x08 */ SCmdRoomBehavior roomBehavior; + /* Command: N/A */ SCmdBase base; + /* Command: 0x00 */ SCmdSpawnList spawnList; + /* Command: 0x01 */ SCmdActorList actorList; + /* Command: 0x02 */ SCmdCsCameraList actorCsCamList; + /* Command: 0x03 */ SCmdColHeader colHeader; + /* Command: 0x04 */ SCmdRoomList roomList; + /* Command: 0x05 */ SCmdWindSettings windSettings; + /* Command: 0x06 */ SCmdEntranceList entranceList; + /* Command: 0x07 */ SCmdSpecialFiles specialFiles; + /* Command: 0x08 */ SCmdRoomBehavior roomBehavior; /* Command: 0x09 */ // Unused - /* Command: 0x0A */ SCmdMesh mesh; - /* Command: 0x0B */ SCmdObjectList objectList; - /* Command: 0x0C */ SCmdLightList lightList; - /* Command: 0x0D */ SCmdPathList pathList; - /* Command: 0x0E */ SCmdTransiActorList transiActorList; - /* Command: 0x0F */ SCmdLightSettingList lightSettingList; - /* Command: 0x10 */ SCmdTimeSettings timeSettings; - /* Command: 0x11 */ SCmdSkyboxSettings skyboxSettings; - /* Command: 0x12 */ SCmdSkyboxDisables skyboxDisables; - /* Command: 0x13 */ SCmdExitList exitList; - /* Command: 0x14 */ SCmdEndMarker endMarker; - /* Command: 0x15 */ SCmdSoundSettings soundSettings; - /* Command: 0x16 */ SCmdEchoSettings echoSettings; - /* Command: 0x17 */ SCmdCsScriptList scriptList; - /* Command: 0x18 */ SCmdAltHeaders altHeaders; - /* Command: 0x19 */ SCmdRegionVisited regionVisited; - /* Command: 0x1A */ SCmdTextureAnimations textureAnimations; - /* Command: 0x1B */ SCmdCutsceneList cutsceneList; - /* Command: 0x1C */ SCmdMinimapSettings minimapSettings; + /* Command: 0x0A */ SCmdMesh mesh; + /* Command: 0x0B */ SCmdObjectList objectList; + /* Command: 0x0C */ SCmdLightList lightList; + /* Command: 0x0D */ SCmdPathList pathList; + /* Command: 0x0E */ SCmdTransitionActorList transitionActorList; + /* Command: 0x0F */ SCmdLightSettingList lightSettingList; + /* Command: 0x10 */ SCmdTimeSettings timeSettings; + /* Command: 0x11 */ SCmdSkyboxSettings skyboxSettings; + /* Command: 0x12 */ SCmdSkyboxDisables skyboxDisables; + /* Command: 0x13 */ SCmdExitList exitList; + /* Command: 0x14 */ SCmdEndMarker endMarker; + /* Command: 0x15 */ SCmdSoundSettings soundSettings; + /* Command: 0x16 */ SCmdEchoSettings echoSettings; + /* Command: 0x17 */ SCmdCsScriptList scriptList; + /* Command: 0x18 */ SCmdAltHeaders altHeaders; + /* Command: 0x19 */ SCmdRegionVisited regionVisited; + /* Command: 0x1A */ SCmdTextureAnimations textureAnimations; + /* Command: 0x1B */ SCmdCutsceneList cutsceneList; + /* Command: 0x1C */ SCmdMinimapSettings minimapSettings; /* Command: 0x1D */ // Unused - /* Command: 0x1E */ SCmdMinimapChests minimapChests; + /* Command: 0x1E */ SCmdMinimapChests minimapChests; } SceneCmd; // size = 0x8 // Sets cursor point options on the world map @@ -920,8 +922,8 @@ void Scene_CommandMesh(struct PlayState* play, SceneCmd* cmd); void Scene_CommandObjectList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandLightList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandPathList(struct PlayState* play, SceneCmd* cmd); -void Scene_CommandTransiActorList(struct PlayState* play, SceneCmd* cmd); -void Scene_ResetTransiActorList(GameState* gameState, TransitionActorList* transitionActors); +void Scene_CommandTransitionActorList(struct PlayState* play, SceneCmd* cmd); +void Scene_ResetTransitionActorList(GameState* gameState, TransitionActorList* transitionActors); void Scene_CommandEnvLightSettings(struct PlayState* play, SceneCmd* cmd); void Scene_LoadAreaTextures(struct PlayState* play, s32 fileIndex); void Scene_CommandSkyboxSettings(struct PlayState* play, SceneCmd* cmd); diff --git a/src/code/z_play.c b/src/code/z_play.c index d2c4510b3..1c47a7002 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1587,7 +1587,7 @@ void Play_InitScene(PlayState* this, s32 spawn) { this->numSetupActors = 0; Object_InitContext(&this->state, &this->objectCtx); LightContext_Init(this, &this->lightCtx); - Scene_ResetTransiActorList(&this->state, &this->transitionActors); + Scene_ResetTransitionActorList(&this->state, &this->transitionActors); Room_Init(this, &this->roomCtx); gSaveContext.worldMapArea = 0; Scene_ExecuteCommands(this, this->sceneSegment); diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 2890797c5..059fbfb0d 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -333,14 +333,14 @@ void Scene_CommandPathList(PlayState* play, SceneCmd* cmd) { } // SceneTableEntry Header Command 0x0E: Transition Actor List -void Scene_CommandTransiActorList(PlayState* play, SceneCmd* cmd) { - play->transitionActors.count = cmd->transiActorList.num; - play->transitionActors.list = Lib_SegmentedToVirtual(cmd->transiActorList.segment); +void Scene_CommandTransitionActorList(PlayState* play, SceneCmd* cmd) { + play->transitionActors.count = cmd->transitionActorList.num; + play->transitionActors.list = Lib_SegmentedToVirtual(cmd->transitionActorList.segment); func_80105818(play, play->transitionActors.count, play->transitionActors.list); } // Init function for the transition system. -void Scene_ResetTransiActorList(GameState* state, TransitionActorList* transitionActors) { +void Scene_ResetTransitionActorList(GameState* state, TransitionActorList* transitionActors) { transitionActors->count = 0; } @@ -564,7 +564,7 @@ void (*sSceneCmdHandlers[SCENE_CMD_MAX])(PlayState*, SceneCmd*) = { Scene_CommandObjectList, // SCENE_CMD_ID_OBJECT_LIST Scene_CommandLightList, // SCENE_CMD_ID_LIGHT_LIST Scene_CommandPathList, // SCENE_CMD_ID_PATH_LIST - Scene_CommandTransiActorList, // SCENE_CMD_ID_TRANSI_ACTOR_LIST + Scene_CommandTransitionActorList, // SCENE_CMD_ID_TRANSI_ACTOR_LIST Scene_CommandEnvLightSettings, // SCENE_CMD_ID_ENV_LIGHT_SETTINGS Scene_CommandTimeSettings, // SCENE_CMD_ID_TIME_SETTINGS Scene_CommandSkyboxSettings, // SCENE_CMD_ID_SKYBOX_SETTINGS diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 6c4c6af13..c978a43d4 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2434,8 +2434,8 @@ 0x8012FC18:("Scene_CommandObjectList",), 0x8012FDA4:("Scene_CommandLightList",), 0x8012FE2C:("Scene_CommandPathList",), - 0x8012FE5C:("Scene_CommandTransiActorList",), - 0x8012FEBC:("Scene_ResetTransiActorList",), + 0x8012FE5C:("Scene_CommandTransitionActorList",), + 0x8012FEBC:("Scene_ResetTransitionActorList",), 0x8012FECC:("Scene_CommandEnvLightSettings",), 0x8012FF10:("Scene_LoadAreaTextures",), 0x8012FF8C:("Scene_CommandSkyboxSettings",), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 247eee68a..0b55a55d7 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1948,7 +1948,7 @@ asm/non_matchings/code/z_scene/Scene_CommandMesh.s,Scene_CommandMesh,0x8012FBE8, asm/non_matchings/code/z_scene/Scene_CommandObjectList.s,Scene_CommandObjectList,0x8012FC18,0x63 asm/non_matchings/code/z_scene/Scene_CommandLightList.s,Scene_CommandLightList,0x8012FDA4,0x22 asm/non_matchings/code/z_scene/Scene_CommandPathList.s,Scene_CommandPathList,0x8012FE2C,0xC -asm/non_matchings/code/z_scene/Scene_CommandTransiActorList.s,Scene_CommandTransiActorList,0x8012FE5C,0x18 +asm/non_matchings/code/z_scene/Scene_CommandTransitionActorList.s,Scene_CommandTransitionActorList,0x8012FE5C,0x18 asm/non_matchings/code/z_scene/Door_InitContext.s,Door_InitContext,0x8012FEBC,0x4 asm/non_matchings/code/z_scene/Scene_CommandEnvLightSettings.s,Scene_CommandEnvLightSettings,0x8012FECC,0x11 asm/non_matchings/code/z_scene/Scene_LoadAreaTextures.s,Scene_LoadAreaTextures,0x8012FF10,0x1F From b89b64d1f5a24f0a163560fbf0cc092fc252a5df Mon Sep 17 00:00:00 2001 From: mzxrules Date: Tue, 24 Oct 2023 22:33:44 -0400 Subject: [PATCH 27/28] Major documentation pass --- assets/xml/objects/gameplay_keep.xml | 14 +- include/regs.h | 2 +- include/variables.h | 7 - include/z64.h | 2 +- include/z64map.h | 138 +- include/z64save.h | 6 + include/z64scene.h | 50 +- src/code/title_setup.c | 2 +- src/code/z_kaleido_setup.c | 6 +- src/code/z_map_data.c | 29 +- src/code/z_map_disp.c | 1639 +++++++++-------- src/code/z_map_exp.c | 142 +- src/code/z_message.c | 4 +- src/code/z_message_nes.c | 2 +- src/code/z_parameter.c | 2 +- src/code/z_room.c | 2 +- src/code/z_scene.c | 10 +- .../actors/ovl_player_actor/z_player.c | 6 +- .../ovl_kaleido_scope/z_kaleido_map.c | 35 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 24 +- tools/disasm/functions.txt | 94 +- tools/disasm/variables.txt | 12 +- tools/namefixer.py | 3 + tools/sizes/code_functions.csv | 94 +- 24 files changed, 1232 insertions(+), 1093 deletions(-) diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 37fb3fc61..5c076b109 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -880,7 +880,7 @@ - + @@ -908,7 +908,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1315,12 +1315,12 @@ - + - + @@ -1403,7 +1403,7 @@ - + diff --git a/include/regs.h b/include/regs.h index 2d113ea48..66f043bf1 100644 --- a/include/regs.h +++ b/include/regs.h @@ -145,7 +145,7 @@ extern RegEditor* gRegEditor; #define R_MOON_CRASH_TIMER_X XREG(81) #define R_PAUSE_OWLWARP_ALPHA XREG(87) #define R_STORY_FILL_SCREEN_ALPHA XREG(91) -#define R_REVERSE_FLOOR_INDEX XREG(94) +#define R_PLAYER_FLOOR_REVERSE_INDEX XREG(94) // stores what floor the player is on #define R_MINIMAP_DISABLED XREG(95) #define R_TRANS_FADE_FLASH_ALPHA_STEP iREG(50) // Set to a negative number to start the flash diff --git a/include/variables.h b/include/variables.h index f13fd0069..1c4127f61 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1610,13 +1610,6 @@ extern SaveContext gSaveContext; // extern UNK_TYPE1 D_801F4F68; // extern UNK_TYPE1 D_801F4F6A; // extern LightsBuffer sLightsBuffer; -// extern UNK_TYPE1 D_801F5130; -// extern UNK_TYPE1 D_801F5270; -// extern UNK_TYPE1 D_801F53B0; -// extern UNK_TYPE1 D_801F56B0; -// extern UNK_TYPE1 D_801F5730; -// extern UNK_TYPE1 D_801F57B4; -// extern UNK_TYPE1 D_801F5834; // extern UNK_TYPE1 sSkyboxDrawMatrix; // extern UNK_TYPE1 D_801F6AF0; diff --git a/include/z64.h b/include/z64.h index b9a2adf6c..670e50868 100644 --- a/include/z64.h +++ b/include/z64.h @@ -113,7 +113,7 @@ typedef struct PauseContext { /* 0x238 */ s16 cursorPoint[5]; /* 0x242 */ s16 cursorXIndex[5]; /* 0x24C */ s16 cursorYIndex[5]; - /* 0x256 */ s16 unk_256; // Uses DungeonItem enum + /* 0x256 */ s16 cursorMapDungeonItem; // Uses DungeonItem enum /* 0x258 */ s16 cursorSpecialPos; /* 0x25A */ s16 pageSwitchInputTimer; // Used to introduce a delay before switching page when arriving on the "scroll left/right" positions while holding stick left/right. /* 0x25C */ u16 namedItem; diff --git a/include/z64map.h b/include/z64map.h index 7fb934c43..e91b53666 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -6,23 +6,24 @@ struct PlayState; /* -Handles L-minimap and pause screen dungeon minimap system. +Handles the minimap and pause screen dungeon map system. z_map_data.c stores MapSpriteInfo and helper functions to "simplify" accessing this data Two separate Id systems are used to access data mapId -0x000-0x004 fetches L-minimap data from gameplay_dangeon_keep -0x005-0x039 fetches dungeon minimap data from map_i_static -0x100-0x161 fetches L-minimap data from map_grand_static +0x000-0x004 fetches minimap sprite data from gameplay_dangeon_keep +0x005-0x039 fetches dungeon map sprite data from map_i_static +0x100-0x161 fetches minimap sprite data from map_grand_static mapCompactId -0x000-0x039 fetches dungeon minimap data from map_i_static -0x03A-0x09B fetches L-minimap data from map_grand_static +0x000-0x039 fetches dungeon map sprite data from map_i_static +0x03A-0x09B fetches minimap sprite data from map_grand_static */ #define FLOOR_INDEX_MAX 4 +#define FLOOR_MIN_Y -32767 /* z_map_data */ #define MAPDATA_MAP_I_MAX 0x3A @@ -43,41 +44,19 @@ mapCompactId #define MAPDATA_DRAW_2 2 #define MAPDATA_DRAW_3 3 -typedef struct { - /* 0x0 */ u8 texWidth; - /* 0x1 */ u8 texHeight; - /* 0x2 */ s16 offsetX; - /* 0x4 */ s16 offsetY; - /* 0x6 */ u8 drawType; - /* 0x7 */ u8 colorIndex; - /* 0x8 */ s16 scale; -} MapSpriteInfo; // size = 0xA - -typedef struct { - /* 0x0 */ TexturePtr lmapTex; //minimap texture - /* 0x4 */ u8 width; - /* 0x5 */ u8 height; - /* 0x6 */ u8 offsetX; - /* 0x7 */ u8 offsetY; - /* 0x8 */ u8 drawType; - /* 0x9 */ u8 colorIndex; - /* 0xA */ s16 scale; -} MapSpriteInfo2; // size = 0xC - /* z_map_disp */ - typedef struct { - /* 0x00 */ MinimapList* minimapList; + /* 0x00 */ MapDataScene* mapDataScene; /* 0x04 */ s32 curRoom; - /* 0x08 */ s16 unk8; - /* 0x0A */ s16 unkA; - /* 0x0C */ s16 unkC; - /* 0x0E */ s16 unkE; - /* 0x10 */ TexturePtr lMapCurTex; // gameplay cur minimap room + /* 0x08 */ s16 minimapBaseX; + /* 0x0A */ s16 minimapBaseY; + /* 0x0C */ s16 minimapCurX; + /* 0x0E */ s16 minimapCurY; + /* 0x10 */ TexturePtr minimapCurTex; // gameplay cur minimap room /* 0x14 */ s32 prevRoom; - /* 0x18 */ TexturePtr lMapPrevTex; - /* 0x1C */ s16 unk1C; //same as 0C - /* 0x1E */ s16 unk1E; //same as 0E + /* 0x18 */ TexturePtr minimapPrevTex; + /* 0x1C */ s16 minimapPrevX; // for room swap animation + /* 0x1E */ s16 minimapPrevY; // for room swap animation /* 0x20 */ s32 unk20; /* 0x24 */ s32 swapAnimTimer; /* 0x28 */ void* texBuff0; @@ -88,62 +67,47 @@ typedef struct { /* 0x36 */ s16 sceneHeight; //scene boundsWidth.z /* 0x38 */ s16 sceneMidX; //scene boundsMidpoint.x /* 0x3A */ s16 sceneMidZ; //scene boundsMidpoint.z - /* 0x3C */ s16* unk3C; - /* 0x40 */ s16 unk40; - /* 0x42 */ s16 unk42; - /* 0x44 */ s16 lowestFloor; - /* 0x48 */ s16* unk48; - /* 0x4C */ s16 unk4C; + /* 0x3C */ s16* roomStoreyList; // list of lowest storey each room crosses + /* 0x40 */ s16 numStoreys; // number of distinct storeys + /* 0x42 */ s16 pauseMapCurStorey; + /* 0x44 */ s16 bottomStorey; // configures what storey 0 is displayed as + /* 0x48 */ s16* storeyYList; // list of min Ys for each storey + /* 0x4C */ s16 timer; /* 0x50 */ s32 numChests; - /* 0x54 */ MinimapChest* unk54; - /* 0x58 */ s16 unk58; + /* 0x54 */ MapDataChest* mapDataChests; + /* 0x58 */ s16 bossRoomStorey; /* 0x5A */ s16 unk5A; -} struct_801BEBB8; // size = 0x5C +} MapDisp; // size = 0x5C typedef struct { - /* 0x0 */ s16 sceneId; - /* 0x2 */ s16 lowestFloor; -} MapCustomLowestFloor; // size = 0x4 - -typedef struct { - /* 0x00 */ s32 unk0[5]; -} struct_801BEC70; // size = 0x14 - -typedef struct { - /* 0x0 */ s16 sceneId; - /* 0x4 */ s32 unk4; - /* 0x8 */ s32 unk8; -} struct_801BED24; // size = 0xC - -typedef struct { - /* 0x000 */ s32 rooms; - /* 0x004 */ s32 unk4[32]; - /* 0x084 */ void* unk84[32]; - /* 0x104 */ void* unk104[32]; - /* 0x184 */ s32 unk184; -} struct_801F56B0; // size = 0x188 + /* 0x000 */ s32 textureCount; + /* 0x004 */ s32 mapI_mapCompactId[ROOM_MAX]; + /* 0x084 */ void* mapI_roomTextures[ROOM_MAX]; + /* 0x104 */ void* roomSprite[ROOM_MAX]; + /* 0x184 */ s32 animTimer; +} PauseDungeonMap; // size = 0x188 /* z_map_disp */ void func_80102EB4(u32 param_1); void func_80102ED0(u32 param_1); -s32 func_80102EF0(struct PlayState* play); +s32 MapDisp_CurRoomHasMapI(struct PlayState* play); void MapDisp_Init(struct PlayState* play); -s32 func_80105294(void); -s16 func_80105318(void); -void func_8010549C(struct PlayState* play, void* segmentAddress); -void func_8010565C(struct PlayState* play, s32 num, void* segmentAddress); -void func_80105818(struct PlayState* play, s32 num, TransitionActorEntry* transitionActorList); +s32 MapDisp_GetBossIconY(void); +s16 MapDisp_GetBossRoomStorey(void); +void MapDisp_InitMapData(struct PlayState* play, void* segmentAddress); +void MapDisp_InitChestData(struct PlayState* play, s32 num, void* segmentAddress); +void MapDisp_InitTransitionActorData(struct PlayState* play, s32 num, TransitionActorEntry* transitionActorList); void MapDisp_Destroy(struct PlayState* play); -void func_80105B34(struct PlayState* play); +void MapDisp_Update(struct PlayState* play); void MapDisp_SwapRooms(s16 nextRoom); -s32 func_80106530(struct PlayState* play); -void func_80106644(struct PlayState* play, s32 x, s32 z, s32 rot); -void* func_801068FC(struct PlayState* play, void* heap); -void func_80108AF8(struct PlayState* play); -s32 func_801090B0(s32 arg0); -s32 func_80109124(s16 arg0); -void func_801091F0(struct PlayState* play); -void func_80109428(struct PlayState* play); +s32 MapDisp_IsMinimapToggleBlocked(struct PlayState* play); +void MapDisp_DrawMinimap(struct PlayState* play, s32 playerInitX, s32 playerInitZ, s32 playerInitDir); +void* MapDisp_AllocDungeonMap(struct PlayState* play, void* heap); +void MapDisp_DrawDungeonFloorSelect(struct PlayState* play); +s32 MapDisp_IsValidStorey(s32 storey); +s32 MapDisp_GetPlayerStorey(s16 checkY); +void MapDisp_DrawDungeonMap(struct PlayState* play); +void MapDisp_UpdateDungeonMap(struct PlayState* play); /* z_map_data */ void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color); @@ -153,7 +117,7 @@ s32 MapData_MID_GetType(s32); s32 MapData_CPID_GetSizeOfMapTex(s32); void MapData_GetDrawType(s32, s32*); s32 MapData_GetMapColorIndex(s32); -s32 MapDisp_GetSizeOfMapITex(s32); +s32 MapDisp_GetSizeOfMapITex(s32 mapCompactId); s32 MapData_GetMapIId(s32); s32 MapData_GetSizeOfMapGrandTex(s32 mapId); void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height); @@ -166,13 +130,13 @@ s16 MapData_CPID_GetMapScale(s32 mapCompactId); /* z_map_exp */ s32 Map_GetDungeonOrBossAreaIndex(struct PlayState* play); s32 Map_IsInDungeonOrBossArea(struct PlayState* play); -s32 func_8010A0A4(struct PlayState* play); -s32 Map_IsInBossArea(struct PlayState* play); -void Minimap_SavePlayerRoomInitInfo(struct PlayState* play); +s32 MapExp_CurRoomHasMapI(struct PlayState* play); +s32 Map_IsInBossScene(struct PlayState* play); +void Map_SetAreaEntrypoint(struct PlayState* play); void Map_InitRoomData(struct PlayState* play, s16 room); void Map_Destroy(struct PlayState* play); void Map_Init(struct PlayState* play); -void Minimap_Draw(struct PlayState* play); +void Map_DrawMinimap(struct PlayState* play); void Map_Update(struct PlayState* play); #endif diff --git a/include/z64save.h b/include/z64save.h index 62f482816..7f80a1f9f 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -495,6 +495,12 @@ typedef enum { #define CHECK_DUNGEON_ITEM_ALT(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) #define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item]) #define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonKeys[(void)0, dungeonIndex]) +#define GET_DUNGEON_FLOOR_VISITED(sceneId, floor) (gSaveContext.save.saveInfo.permanentSceneFlags[(sceneId)].unk_14 & gBitFlags[floor]) +#define SET_DUNGEON_FLOOR_VISITED(sceneId, floor) (gSaveContext.save.saveInfo.permanentSceneFlags[(sceneId)].unk_14 |= gBitFlags[floor]) +#define GET_ROOM_VISITED(sceneId, room) (((void)0, gSaveContext.save.saveInfo.permanentSceneFlags[(sceneId)].rooms) & (1 << (room))) +#define SET_ROOM_VISITED(sceneId, room) (gSaveContext.save.saveInfo.permanentSceneFlags[(sceneId)].rooms |= gBitFlags[room]) +#define GET_CYCLE_CHEST_OPENED(sceneId, chestFlagId) ((void)0, gSaveContext.cycleSceneFlags[(sceneId)].chest) & (1 << (chestFlagId)); + #define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn))) #define GET_CUR_FORM_BTN_SLOT(btn) ((u8)((btn) == EQUIP_SLOT_B ? C_SLOT_EQUIP(CUR_FORM, btn) : C_SLOT_EQUIP(0, btn))) diff --git a/include/z64scene.h b/include/z64scene.h index e91b25777..f7709aa88 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -9,6 +9,9 @@ struct GameState; struct PlayState; +#define ROOM_MAX 32 // maximum number of rooms in a scene +#define ROOM_TRANSITION_MAX 48 // maximum number of transition actors in a scene + #define SPAWN_ROT_FLAGS(rotation, flags) (((rotation) << 7) | (flags)) typedef struct { @@ -213,13 +216,13 @@ typedef struct { /* 0x0 */ u8 code; /* 0x1 */ u8 data1; /* 0x4 */ void* segment; -} SCmdMinimapSettings; // size = 0x8 +} SCmdMapData; // size = 0x8 typedef struct { /* 0x0 */ u8 code; /* 0x1 */ u8 num; /* 0x4 */ void* segment; -} SCmdMinimapChests; // size = 0x8 +} SCmdMapDataChests; // size = 0x8 typedef enum { /* 0 */ ROOM_SHAPE_TYPE_NORMAL, @@ -497,25 +500,34 @@ typedef struct { } Path; // size = 0x8 typedef struct { - /* 0x00 */ u16 mapId; - /* 0x02 */ s16 unk2; - /* 0x04 */ s16 unk4; - /* 0x06 */ s16 unk6; - /* 0x08 */ u16 unk8; // flags; 1 = mirror x? 2 = mirror y? -} MinimapEntry; // size = 0xA + /* 0x0 */ u16 mapId; + /* 0x2 */ s16 centerX; + /* 0x4 */ s16 floorY; + /* 0x6 */ s16 centerZ; + /* 0x8 */ u16 flags; // 1 = mirror x, 2 = mirror y +} MapDataRoom; // size = 0xA + +#define MAP_DATA_ROOM_GET_EXTRA_STOREYS(e) ((((e)->flags) >> 2) & 7) typedef struct { - /* 0x00 */ MinimapEntry* entry; - /* 0x04 */ s16 scale; -} MinimapList; // size = 0x8 + /* 0x0 */ MapDataRoom* rooms; + /* 0x4 */ s16 scale; +} MapDataScene; // size = 0x8 typedef struct { - /* 0x00 */ UNK_TYPE2 unk0; - /* 0x02 */ UNK_TYPE2 unk2; - /* 0x04 */ UNK_TYPE2 unk4; - /* 0x06 */ UNK_TYPE2 unk6; - /* 0x08 */ UNK_TYPE2 unk8; -} MinimapChest; // size = 0xA + /* 0x0 */ s16 room; + /* 0x2 */ s16 chestFlagId; + /* 0x4 */ s16 x; + /* 0x6 */ s16 y; + /* 0x8 */ s16 z; +} MapDataChest; // size = 0xA + +// TODO: ZAPD updates +#define SCmdMinimapSettings SCmdMapData +#define SCmdMinimapChests SCmdMapDataChests +#define MinimapEntry MapDataRoom +#define MinimapList MapDataScene +#define MinimapChest MapDataChest // TODO: consider merging with bgCamInfo? typedef struct { @@ -556,9 +568,9 @@ typedef union { /* Command: 0x19 */ SCmdRegionVisited regionVisited; /* Command: 0x1A */ SCmdTextureAnimations textureAnimations; /* Command: 0x1B */ SCmdCutsceneList cutsceneList; - /* Command: 0x1C */ SCmdMinimapSettings minimapSettings; + /* Command: 0x1C */ SCmdMapData mapData; /* Command: 0x1D */ // Unused - /* Command: 0x1E */ SCmdMinimapChests minimapChests; + /* Command: 0x1E */ SCmdMapDataChests mapDataChests; } SceneCmd; // size = 0x8 // Sets cursor point options on the world map diff --git a/src/code/title_setup.c b/src/code/title_setup.c index 841c301e2..e8aa68c44 100644 --- a/src/code/title_setup.c +++ b/src/code/title_setup.c @@ -30,7 +30,7 @@ void Setup_SetRegs(void) { XREG(90) = 0x1C2; R_STORY_FILL_SCREEN_ALPHA = 0; - R_REVERSE_FLOOR_INDEX = 0; + R_PLAYER_FLOOR_REVERSE_INDEX = 0; R_MINIMAP_DISABLED = false; R_PICTO_FOCUS_BORDER_TOPLEFT_X = 80; diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 1b3aa49d7..160dc9494 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -142,18 +142,18 @@ void KaleidoSetup_Init(PlayState* play) { pauseCtx->unk_20C = 936.0f; pauseCtx->roll = -314.0f; - pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); + pauseCtx->cursorPoint[PAUSE_MAP] = R_PLAYER_FLOOR_REVERSE_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; pauseCtx->pageSwitchInputTimer = 0; pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE; - pauseCtx->cursorItem[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); + pauseCtx->cursorItem[PAUSE_MAP] = R_PLAYER_FLOOR_REVERSE_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); pauseCtx->cursorItem[PAUSE_QUEST] = PAUSE_ITEM_NONE; pauseCtx->cursorItem[PAUSE_MASK] = PAUSE_ITEM_NONE; pauseCtx->cursorSlot[PAUSE_ITEM] = 0; - pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); + pauseCtx->cursorSlot[PAUSE_MAP] = R_PLAYER_FLOOR_REVERSE_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW; pauseCtx->ocarinaSongIndex = -1; diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index 24a995cbb..3d09648ce 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -2,6 +2,27 @@ #include "z64map.h" #include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" +typedef struct { + /* 0x0 */ u8 texWidth; + /* 0x1 */ u8 texHeight; + /* 0x2 */ s16 offsetX; + /* 0x4 */ s16 offsetY; + /* 0x6 */ u8 drawType; + /* 0x7 */ u8 colorIndex; + /* 0x8 */ s16 scale; +} MapSpriteInfo; // size = 0xA + +typedef struct { + /* 0x0 */ TexturePtr spriteTex; + /* 0x4 */ u8 width; + /* 0x5 */ u8 height; + /* 0x6 */ u8 offsetX; + /* 0x7 */ u8 offsetY; + /* 0x8 */ u8 drawType; + /* 0x9 */ u8 colorIndex; + /* 0xA */ s16 scale; +} MapSpriteInfo2; // size = 0xC + static Color_RGBA8 sMapColorTable[] = { { 255, 255, 255, 255 }, { 0, 255, 255, 160 }, // Blue @@ -209,7 +230,7 @@ static s32 sMapIForMapGrand[98] = { MAPDATA_MAP_I_MAX, }; -s32 MapDisp_GetSizeOfMapITex(s32 mapId); +s32 MapDisp_GetSizeOfMapITex(s32 mapCompactId); void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color) { *color = sMapColorTable[colorIndex]; @@ -238,7 +259,7 @@ s16 MapData_GetMapGameplayDangeonKeepScale(s32 mapId) { } TexturePtr MapData_GetMapTexGameplayDangeonKeep(s32 mapId) { - return sGameplayDangeonKeepInfo[mapId].lmapTex; + return sGameplayDangeonKeepInfo[mapId].spriteTex; } void MapData_GetMapTexGameplayDangeonKeepDim(s32 mapId, s32* width, s32* height) { @@ -404,8 +425,8 @@ s32 MapData_MapITexSizeTest(s32 mapId) { return size; } -s32 MapDisp_GetSizeOfMapITex(s32 mapId) { - return (sMapIStaticInfo[mapId].texWidth * sMapIStaticInfo[mapId].texHeight) / 2; +s32 MapDisp_GetSizeOfMapITex(s32 mapCompactId) { + return (sMapIStaticInfo[mapCompactId].texWidth * sMapIStaticInfo[mapCompactId].texHeight) / 2; } s32 MapData_GetMapIId(s32 mapId) { diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 77bf5a91d..423252675 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -69,179 +69,155 @@ static u64 sWhiteSquareTex[] = { 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, }; -static struct_801BEBB8 D_801BEBB8 = { - NULL, -1, 0xD2, 0x8C, 0, 0, NULL, -1, NULL, 0, 0, 0, 0, NULL, NULL, 0, - 0, 0, 0, 0, 0, NULL, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, +static MapDisp sMapDisp = { + NULL, -1, 210, 140, 0, 0, NULL, -1, NULL, 0, 0, 0, 0, NULL, NULL, 0, + 0, 0, 0, 0, 0, NULL, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, }; -extern s16 D_801BEBFA; // D_801BEBB8.unk42 +extern s16 D_801BEBFA; // sMapDisp.pauseMapCurStorey -static MinimapEntry D_801F5130[32]; -static MinimapChest D_801F5270[32]; - -static MinimapList D_801BEC14 = { - D_801F5130, +static MapDataRoom sMapDataRooms[ROOM_MAX]; +static MapDataChest sMapDataChests[32]; +static MapDataScene sMapDataScene = { + sMapDataRooms, 80, }; static s32 sSceneNumRooms = 0; // current scene's no. of rooms static s32 sNumChests = 0; // MinimapChest count static TransitionActorList sTransitionActorList = { 0, NULL }; -static Color_RGBA8 D_801BEC2C[12] = { +static Color_RGBA8 sMinimapActorColors[12] = { { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 0, 255, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 255, 0, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 255, 0, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, }; // cat colors -static MapCustomLowestFloor sCustomLowestFloor[] = { - { SCENE_HAKUGIN, -1 }, { SCENE_HAKUGIN_BS, -1 }, { SCENE_SEA, -2 }, { SCENE_SEA_BS, -2 }, { SCENE_INISIE_N, -1 }, -}; -static struct_801BEC70 D_801BEC70 = { 0x43, 0x51, 0x5F, 0x6D, 0x7B }; -static u16 D_801BEC84[0x10] = { - 0x0000, 0x0000, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, - 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, -}; // palette 0 -static u16 D_801BECA4[0x10] = { - 0x0000, 0x027F, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, - 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, -}; // palette 1 -static u16 D_801BECC4[0x10] = { - 0x0000, 0x0623, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, - 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, -}; // palette 2 -static TexturePtr sDungeonMapFloorTextures[] = { - gDungeonMap1FButtonTex, gDungeonMap2FButtonTex, gDungeonMap3FButtonTex, gDungeonMap4FButtonTex, - gDungeonMap5FButtonTex, gDungeonMap6FButtonTex, gDungeonMap7FButtonTex, gDungeonMap8FButtonTex, - gDungeonMapB1ButtonTex, gDungeonMapB2ButtonTex, gDungeonMapB3ButtonTex, gDungeonMapB4ButtonTex, - gDungeonMapB5ButtonTex, gDungeonMapB6ButtonTex, gDungeonMapB7ButtonTex, gDungeonMapB8ButtonTex, -}; -static struct_801BED24 D_801BED24[] = { - { SCENE_MITURIN, 0, -10 }, - { SCENE_MITURIN_BS, 0, -10 }, -}; +static TransitionActorEntry sTransitionActors[ROOM_TRANSITION_MAX]; +static PauseDungeonMap sPauseDungeonMap; -static TransitionActorEntry D_801F53B0[48]; -static struct_801F56B0 D_801F56B0; - -void MapDisp_GetMapITexture(void* dst, s32 mapId) { - if (MapDisp_GetSizeOfMapITex(mapId) != 0) { - CmpDma_LoadFile(SEGMENT_ROM_START(map_i_static), mapId, dst, MapDisp_GetSizeOfMapITex(mapId)); +void MapDisp_GetMapITexture(void* dst, s32 mapCompactId) { + if (MapDisp_GetSizeOfMapITex(mapCompactId) != 0) { + CmpDma_LoadFile(SEGMENT_ROM_START(map_i_static), mapCompactId, dst, MapDisp_GetSizeOfMapITex(mapCompactId)); } } -void func_80102E90(PlayState* play, s16* arg1) { - *arg1 = -1; +void MapDisp_InitRoomStoreyRecord(PlayState* play, s16* roomStorey) { + *roomStorey = -1; } -void func_80102EA4(PlayState* play, s16* arg1) { +void MapDisp_DestroyRoomStoreyRecord(PlayState* play, s16* roomStory) { } void func_80102EB4(u32 param_1) { - D_801BEBB8.unk20 |= param_1; + sMapDisp.unk20 |= param_1; } void func_80102ED0(u32 param_1) { - D_801BEBB8.unk20 &= ~param_1; + sMapDisp.unk20 &= ~param_1; } -s32 func_80102EF0(PlayState* play) { - MinimapEntry* entry; +s32 MapDisp_CurRoomHasMapI(PlayState* play) { + MapDataRoom* mapDataRoom; s8 curRoom; - if (Map_IsInBossArea(play) == true) { + if (Map_IsInBossScene(play) == true) { return true; } curRoom = play->roomCtx.curRoom.num; if (curRoom == -1) { return false; } - entry = &D_801BEBB8.minimapList->entry[curRoom]; - if (entry->mapId == 0xFFFF) { + mapDataRoom = &sMapDisp.mapDataScene->rooms[curRoom]; + if (mapDataRoom->mapId == 0xFFFF) { return false; } - if (MapData_GetMapIId(entry->mapId) == MAPDATA_MAP_I_MAX) { + if (MapData_GetMapIId(mapDataRoom->mapId) == MAPDATA_MAP_I_MAX) { return false; } return true; } -f32 func_80102F9C(f32 arg0) { +/** + * Computes the storey containing checkY and returns the floor Y value. + * @note Only used to check if a chest is on the same storey as the player. + */ +f32 MapDisp_GetStoreyY(f32 checkY) { s32 i; - if ((D_801BEBB8.unk48[D_801BEBB8.unk40 - 1] - 80.0f) < arg0) { - return D_801BEBB8.unk48[D_801BEBB8.unk40 - 1]; + if ((sMapDisp.storeyYList[sMapDisp.numStoreys - 1] - 80.0f) < checkY) { + return sMapDisp.storeyYList[sMapDisp.numStoreys - 1]; } - for (i = D_801BEBB8.unk40 - 2; i >= 0; i--) { - if (((D_801BEBB8.unk48[i] - 80.0f) < arg0) && (arg0 < (D_801BEBB8.unk48[i + 1] + 80.0f))) { - return D_801BEBB8.unk48[i]; + for (i = sMapDisp.numStoreys - 2; i >= 0; i--) { + if (((sMapDisp.storeyYList[i] - 80.0f) < checkY) && (checkY < (sMapDisp.storeyYList[i + 1] + 80.0f))) { + return sMapDisp.storeyYList[i]; } } - if (arg0 < (D_801BEBB8.unk48[0] + 80.0f)) { - return D_801BEBB8.unk48[0]; + if (checkY < (sMapDisp.storeyYList[0] + 80.0f)) { + return sMapDisp.storeyYList[0]; } return 0.0f; } -void MapDisp_GetMapTexDim(MinimapEntry* minimapEntry, s32* width, s32* height) { - MapData_GetMapTexDim(minimapEntry->mapId, width, height); +void MapDisp_GetMapTexDim(MapDataRoom* mapDataRoom, s32* width, s32* height) { + MapData_GetMapTexDim(mapDataRoom->mapId, width, height); } -void MapDisp_GetMapScale(MinimapEntry* minimapEntry, s32* scale) { - MapData_GetMapScale(minimapEntry->mapId, scale); +void MapDisp_GetMapScale(MapDataRoom* mapDataRoom, s32* scale) { + MapData_GetMapScale(mapDataRoom->mapId, scale); if (*scale == 0) { *scale = 20; } } -void MapDisp_GetMapPos(MinimapEntry* minimapEntry, s32* offsetX, s32* offsetY) { +void MapDisp_GetMapOffset(MapDataRoom* mapDataRoom, s32* offsetX, s32* offsetY) { s32 width; s32 height; - s32 temp; - s32 temp2; - if (minimapEntry->mapId == 0xFFFF) { + if (mapDataRoom->mapId == 0xFFFF) { *offsetX = 0; *offsetY = 0; return; } - MapDisp_GetMapTexDim(minimapEntry, &width, &height); - MapData_GetMapTexOffset(minimapEntry->mapId, offsetX, offsetY); - if (minimapEntry->unk8 & 1) { - temp = width / 2; - *offsetX = (temp - *offsetX) + temp; + MapDisp_GetMapTexDim(mapDataRoom, &width, &height); + MapData_GetMapTexOffset(mapDataRoom->mapId, offsetX, offsetY); + if (mapDataRoom->flags & 1) { + s32 temp = (width / 2); + + *offsetX = ((width / 2) - *offsetX) + (width / 2); } - if (minimapEntry->unk8 & 2) { - temp2 = height / 2; - *offsetY = (temp2 - *offsetY) + temp2; + if (mapDataRoom->flags & 2) { + s32 temp = (height / 2); + + *offsetY = (temp - *offsetY) + temp; } } -void func_801031D0(PlayState* play, TexturePtr texture, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { - MinimapEntry* entry = &D_801BEBB8.minimapList->entry[arg4]; +void MapDisp_DrawMinimapRoom(PlayState* play, TexturePtr texture, s32 x, s32 y, s32 room, f32 intensity) { + MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[room]; s32 texWidth; s32 texHeight; s32 dtdy; s32 dsdx; s32 t; s32 s; - s16 var_v1_4; - s16 var_v1_5; - Color_RGBA8 spAC_color; - s32 spA8_drawType; + s16 dsdx_temp; + s16 dtdy_temp; + Color_RGBA8 color; + s32 drawType; - if ((entry->mapId == 0xFFFF) || (texture == NULL)) { + if ((mapDataRoom->mapId == 0xFFFF) || (texture == NULL)) { return; } - MapDisp_GetMapTexDim(entry, &texWidth, &texHeight); + MapDisp_GetMapTexDim(mapDataRoom, &texWidth, &texHeight); OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL39_Overlay(play->state.gfxCtx); - MapData_GetMapColor(MapData_GetMapColorIndex(entry->mapId), &spAC_color); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC_color.r, spAC_color.g, spAC_color.b, - (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC_color.a / 255.0f)); - MapData_GetDrawType(entry->mapId, &spA8_drawType); + MapData_GetMapColor(MapData_GetMapColorIndex(mapDataRoom->mapId), &color); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, color.r, color.g, color.b, + (s32)(play->interfaceCtx.minimapAlpha * intensity * color.a / 255.0f)); + MapData_GetDrawType(mapDataRoom->mapId, &drawType); - switch (spA8_drawType) { + switch (drawType) { case MAPDATA_DRAW_1: gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_IA, texWidth, texHeight, 0, @@ -265,17 +241,17 @@ void func_801031D0(PlayState* play, TexturePtr texture, s32 arg2, s32 arg3, s32 break; } - s = (entry->unk8 & 1) ? (texWidth - 1) << 5 : 0; - t = (entry->unk8 & 2) ? 0 : (texHeight - 1) << 5; + s = (mapDataRoom->flags & 1) ? (texWidth - 1) << 5 : 0; + t = (mapDataRoom->flags & 2) ? 0 : (texHeight - 1) << 5; - var_v1_4 = ((entry->unk8 & 1) ? -1 : 1) * (1 << 10); - var_v1_5 = ((entry->unk8 & 2) ? 1 : -1) * (1 << 10); + dsdx_temp = ((mapDataRoom->flags & 1) ? -1 : 1) * (1 << 10); + dtdy_temp = ((mapDataRoom->flags & 2) ? 1 : -1) * (1 << 10); - dsdx = (entry->unk8 & 1) ? var_v1_4 & 0xFFFF : var_v1_4; - dtdy = (entry->unk8 & 2) ? var_v1_5 : var_v1_5 & 0xFFFF; + dsdx = (mapDataRoom->flags & 1) ? dsdx_temp & 0xFFFF : dsdx_temp; + dtdy = (mapDataRoom->flags & 2) ? dtdy_temp : dtdy_temp & 0xFFFF; - gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (texWidth + arg2) << 2, (arg3 + texHeight) << 2, - G_TX_RENDERTILE, s, t, dsdx, dtdy); + gSPTextureRectangle(OVERLAY_DISP++, x << 2, y << 2, (texWidth + x) << 2, (y + texHeight) << 2, G_TX_RENDERTILE, s, + t, dsdx, dtdy); CLOSE_DISPS(play->state.gfxCtx); } @@ -289,28 +265,28 @@ s32 MapDisp_IsDataRotated(PlayState* play) { return false; } -s32 func_80103A10(PlayState* play) { +s32 MapDisp_CanDrawDoors(PlayState* play) { if ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0)) { return false; } return true; } -void func_80103A58(PlayState* play, Actor* actor) { - MinimapEntry* spDC; - s32 spD8; - s32 spD4; - s32 spD0; - s32 spCC; - s32 spC8; - s32 spC4; - f32 spC0; +void MapDisp_Minimap_DrawActorIcon(PlayState* play, Actor* actor) { + MapDataRoom* mapDataRoom; + s32 posX; + s32 posY; + s32 texOffsetX; + s32 texOffsetY; + s32 texWidth; + s32 texHeight; + f32 scaleFrac; f32 unused1; f32 unused2; Player* player = GET_PLAYER(play); s32 scale; - // inferred from `func_801045AC` + // inferred from `MapDisp_Minimap_DrawDoorActor` unused1 = fabsf(player->actor.world.pos.y - actor->world.pos.y); unused2 = 1.0f - (1 / 350.0f) * unused1; @@ -318,42 +294,42 @@ void func_80103A58(PlayState* play, Actor* actor) { unused2 = 0.0f; } - spDC = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; - if (spDC->mapId == 0xFFFF) { + mapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; + if (mapDataRoom->mapId == 0xFFFF) { return; } - MapDisp_GetMapPos(spDC, &spD0, &spCC); - MapDisp_GetMapTexDim(spDC, &spC8, &spC4); + MapDisp_GetMapOffset(mapDataRoom, &texOffsetX, &texOffsetY); + MapDisp_GetMapTexDim(mapDataRoom, &texWidth, &texHeight); - scale = D_801BEBB8.minimapList->scale; - if (D_801BEBB8.minimapList->scale == 0) { + scale = sMapDisp.mapDataScene->scale; + if (sMapDisp.mapDataScene->scale == 0) { scale = 20; - } else if (D_801BEBB8.minimapList->scale == -1) { + } else if (sMapDisp.mapDataScene->scale == -1) { s32 scaleTemp; - MapDisp_GetMapScale(spDC, &scaleTemp); + MapDisp_GetMapScale(mapDataRoom, &scaleTemp); scale = scaleTemp; } - spC0 = 1.0f / scale; + scaleFrac = 1.0f / scale; if (!MapDisp_IsDataRotated(play)) { - spD8 = (s32)((actor->world.pos.x - spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 + - spD0; - spD4 = (s32)((actor->world.pos.z - spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE - D_801BEBB8.unkA + - spCC; + posX = (s32)((actor->world.pos.x - mapDataRoom->centerX) * scaleFrac) + sMapDisp.minimapBaseX + + sMapDisp.minimapCurX - sMapDisp.minimapBaseX + texOffsetX; + posY = (s32)((actor->world.pos.z - mapDataRoom->centerZ) * scaleFrac) + sMapDisp.minimapBaseY + + sMapDisp.minimapCurY - sMapDisp.minimapBaseY + texOffsetY; } else { - spD8 = -(s32)((actor->world.pos.x - spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 + - spD0; - spD4 = -(s32)((actor->world.pos.z - spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE - D_801BEBB8.unkA + - spCC; + posX = -(s32)((actor->world.pos.x - mapDataRoom->centerX) * scaleFrac) + sMapDisp.minimapBaseX + + sMapDisp.minimapCurX - sMapDisp.minimapBaseX + texOffsetX; + posY = -(s32)((actor->world.pos.z - mapDataRoom->centerZ) * scaleFrac) + sMapDisp.minimapBaseY + + sMapDisp.minimapCurY - sMapDisp.minimapBaseY + texOffsetY; } - if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) { + if ((posX > 0) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & ACTOR_FLAG_80000000)) { - s16 spA2; + s16 compassRot; Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -363,19 +339,19 @@ void func_80103A58(PlayState* play, Actor* actor) { gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); - Matrix_Translate(spD8 - 160.0f, 120.0f - spD4, 0.0f, MTXMODE_NEW); + Matrix_Translate(posX - 160.0f, 120.0f - posY, 0.0f, MTXMODE_NEW); Matrix_RotateXFApply(-1.6f); - spA2 = (s32)(0x7FFF - actor->focus.rot.y) / 1024; + compassRot = (s32)(0x7FFF - actor->focus.rot.y) / 1024; if (MapDisp_IsDataRotated(play)) { - spA2 += 0x7FFF; + compassRot += 0x7FFF; } - Matrix_RotateYF(spA2 / 10.0f, MTXMODE_APPLY); + Matrix_RotateYF(compassRot / 10.0f, MTXMODE_APPLY); Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha); - gSPDisplayList(OVERLAY_DISP++, gameplay_keep_DL_01ED00); + gSPDisplayList(OVERLAY_DISP++, gCompassArrowDL); } else if ((actor->id == ACTOR_EN_BOX) && !Flags_GetTreasure(play, actor->params & 0x1F) && - (func_80102F9C(player->actor.world.pos.y) == func_80102F9C(actor->world.pos.y))) { + (MapDisp_GetStoreyY(player->actor.world.pos.y) == MapDisp_GetStoreyY(actor->world.pos.y))) { Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPPipeSync(OVERLAY_DISP++); gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE); @@ -387,15 +363,16 @@ void func_80103A58(PlayState* play, Actor* actor) { 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(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, (spD4 + 4) << 2, + gSPTextureRectangle(OVERLAY_DISP++, (posX - 4) << 2, (posY - 4) << 2, (posX + 4) << 2, (posY + 4) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } else { Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (actor->flags & ACTOR_FLAG_80000000) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, - D_801BEC2C[actor->category].b, play->interfaceCtx.minimapAlpha); - gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 1) << 2, (spD4 - 1) << 2, (spD8 + 1) << 2, (spD4 + 1) << 2, + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMinimapActorColors[actor->category].r, + sMinimapActorColors[actor->category].g, sMinimapActorColors[actor->category].b, + play->interfaceCtx.minimapAlpha); + gSPTextureRectangle(OVERLAY_DISP++, (posX - 1) << 2, (posY - 1) << 2, (posX + 1) << 2, (posY + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } } @@ -403,7 +380,7 @@ void func_80103A58(PlayState* play, Actor* actor) { } } -void func_8010439C(PlayState* play) { +void MapDisp_Minimap_DrawActors(PlayState* play) { ActorContext* actorCtx; s32 i; @@ -420,11 +397,11 @@ void func_8010439C(PlayState* play) { if (actor != NULL) { do { if ((actor->update != NULL) && (actor->init == NULL) && - (Object_IsLoaded(&play->objectCtx, actor->objectSlot)) && + Object_IsLoaded(&play->objectCtx, actor->objectSlot) && ((actor->id == ACTOR_EN_BOX) || (i == ACTORCAT_PLAYER) || (actor->flags & ACTOR_FLAG_80000000)) && - ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { - func_80103A58(play, actor); + ((sMapDisp.curRoom == actor->room) || (actor->room == -1))) { + MapDisp_Minimap_DrawActorIcon(play, actor); } actor = actor->next; } while (actor != NULL); @@ -435,83 +412,88 @@ void func_8010439C(PlayState* play) { } } -void func_801045AC(PlayState* play, Actor* actor) { - MinimapEntry* sp7C; - s32 sp78; - s32 sp74; - s32 sp70; - s32 sp6C; - s32 sp68; - s32 sp64; +void MapDisp_Minimap_DrawDoorActor(PlayState* play, Actor* actor) { + MapDataRoom* mapDataRoom; + s32 posX; + s32 posY; + s32 texOffsetX; + s32 texOffsetY; + s32 texWidth; + s32 texHeight; Player* player = GET_PLAYER(play); - f32 sp5C; - f32 temp_fv1 = fabsf(player->actor.world.pos.y - actor->world.pos.y); - s32 var_v1; - f32 sp50 = 1.0f - (1 / 350.0f) * temp_fv1; + f32 scaleFrac; + f32 yDistFromPlayer = fabsf(player->actor.world.pos.y - actor->world.pos.y); + s32 scale; + f32 yDistAlpha = 1.0f - (1.0f / 350.0f) * yDistFromPlayer; - if (sp50 < 0) { - sp50 = 0.0f; + if (yDistAlpha < 0.0f) { + yDistAlpha = 0.0f; } - sp7C = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; - if (sp7C->mapId != 0xFFFF) { - MapDisp_GetMapPos(sp7C, &sp70, &sp6C); - MapDisp_GetMapTexDim(sp7C, &sp68, &sp64); + mapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; + if (mapDataRoom->mapId != 0xFFFF) { + MapDisp_GetMapOffset(mapDataRoom, &texOffsetX, &texOffsetY); + MapDisp_GetMapTexDim(mapDataRoom, &texWidth, &texHeight); - var_v1 = D_801BEBB8.minimapList->scale; - if (D_801BEBB8.minimapList->scale == 0) { - var_v1 = 20; - } else if (D_801BEBB8.minimapList->scale == -1) { - s32 sp4C; + scale = sMapDisp.mapDataScene->scale; + if (sMapDisp.mapDataScene->scale == 0) { + scale = 20; + } else if (sMapDisp.mapDataScene->scale == -1) { + s32 scaleTemp; - MapDisp_GetMapScale(sp7C, &sp4C); - var_v1 = sp4C; + MapDisp_GetMapScale(mapDataRoom, &scaleTemp); + scale = scaleTemp; } - sp5C = 1.0f / var_v1; + scaleFrac = 1.0f / scale; 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; + posX = (((s32)((actor->world.pos.x - mapDataRoom->centerX) * scaleFrac) + sMapDisp.minimapBaseX + + sMapDisp.minimapCurX) - + sMapDisp.minimapBaseX) + + texOffsetX; + posY = (((s32)((actor->world.pos.z - mapDataRoom->centerZ) * scaleFrac) + sMapDisp.minimapBaseY + + sMapDisp.minimapCurY) - + sMapDisp.minimapBaseY) + + texOffsetY; } else { - sp78 = (((D_801BEBB8.unk8 - (s32)((actor->world.pos.x - sp7C->unk2) * sp5C)) + D_801BEBB8.unkC) - - D_801BEBB8.unk8) + - sp70; - sp74 = (((D_801BEBB8.unkA - (s32)((actor->world.pos.z - sp7C->unk6) * sp5C)) + D_801BEBB8.unkE) - - D_801BEBB8.unkA) + - sp6C; + posX = (((sMapDisp.minimapBaseX - (s32)((actor->world.pos.x - mapDataRoom->centerX) * scaleFrac)) + + sMapDisp.minimapCurX) - + sMapDisp.minimapBaseX) + + texOffsetX; + posY = (((sMapDisp.minimapBaseY - (s32)((actor->world.pos.z - mapDataRoom->centerZ) * scaleFrac)) + + sMapDisp.minimapCurY) - + sMapDisp.minimapBaseY) + + texOffsetY; } - if ((sp78 > 0) && (sp78 < 0x3FF) && (sp74 > 0) && (sp74 < 0x3FF)) { + if ((posX > 0) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - if ((actor->category == 0xA) && (func_80103A10(play) != 0)) { + if ((actor->category == ACTORCAT_DOOR) && MapDisp_CanDrawDoors(play)) { s32 pad; - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g, - D_801BEC2C[actor->category].b, - (s32)((D_801BEC2C[actor->category].a * (1.0f - D_801BEBB8.swapAnimTimer * 0.05f) * - sp50 * play->interfaceCtx.minimapAlpha) / - 255.0f)); + gDPSetPrimColor( + OVERLAY_DISP++, 0, 0, sMinimapActorColors[actor->category].r, + sMinimapActorColors[actor->category].g, sMinimapActorColors[actor->category].b, + (s32)((sMinimapActorColors[actor->category].a * (1.0f - sMapDisp.swapAnimTimer * 0.05f) * + yDistAlpha * play->interfaceCtx.minimapAlpha) / + 255.0f)); - var_v1 = D_801BEBB8.minimapList->scale; - if (D_801BEBB8.minimapList->scale == 0) { - var_v1 = 20; - } else if (D_801BEBB8.minimapList->scale == -1) { - s32 sp34; + scale = sMapDisp.mapDataScene->scale; + if (sMapDisp.mapDataScene->scale == 0) { + scale = 20; + } else if (sMapDisp.mapDataScene->scale == -1) { + s32 scaleTemp; - MapDisp_GetMapScale(sp7C, &sp34); - var_v1 = sp34; + MapDisp_GetMapScale(mapDataRoom, &scaleTemp); + scale = scaleTemp; } - if (var_v1 <= 50) { - gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 2) << 2, (sp74 - 2) << 2, (sp78 + 2) << 2, - (sp74 + 2) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + if (scale <= 50) { + gSPTextureRectangle(OVERLAY_DISP++, (posX - 2) << 2, (posY - 2) << 2, (posX + 2) << 2, + (posY + 2) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } else { - gSPTextureRectangle(OVERLAY_DISP++, (sp78 - 1) << 2, (sp74 - 1) << 2, (sp78 + 1) << 2, - (sp74 + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); + gSPTextureRectangle(OVERLAY_DISP++, (posX - 1) << 2, (posY - 1) << 2, (posX + 1) << 2, + (posY + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } } @@ -520,7 +502,7 @@ void func_801045AC(PlayState* play, Actor* actor) { } } -void func_80104AE8(PlayState* play) { +void MapDisp_Minimap_DrawDoorActors(PlayState* play) { s32 i; Actor* actor; @@ -535,8 +517,8 @@ void func_80104AE8(PlayState* play) { do { if ((actor->update != NULL) && (actor->init == NULL) && Object_IsLoaded(&play->objectCtx, actor->objectSlot) && - ((D_801BEBB8.curRoom == actor->room) || (actor->room == -1))) { - func_801045AC(play, actor); + ((sMapDisp.curRoom == actor->room) || (actor->room == -1))) { + MapDisp_Minimap_DrawDoorActor(play, actor); } actor = actor->next; } while (actor != NULL); @@ -546,11 +528,16 @@ void func_80104AE8(PlayState* play) { } } -void func_80104C80(PlayState* play) { +/** + * @brief Waits for GAMEPLAY_DANGEON_KEEP to load, if it is a current object depenency + * + * @param play + */ +void MapDisp_AwaitGameplayDangeonKeep(PlayState* play) { s32 objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP); if (objectSlot <= OBJECT_SLOT_NONE) { - D_801BEBB8.unk20 |= 1; + sMapDisp.unk20 |= 1; } else { do { } while (!Object_IsLoaded(&play->objectCtx, objectSlot)); } @@ -561,391 +548,436 @@ void func_80104C80(PlayState* play) { void MapDisp_Init(PlayState* play) { s32 i; - D_801BEBB8.minimapList = NULL; - D_801BEBB8.curRoom = -1; - D_801BEBB8.unk8 = 0xD2; - D_801BEBB8.unkA = 0x8C; - D_801BEBB8.unkC = 0xD2; - D_801BEBB8.unkE = 0x8C; - D_801BEBB8.lMapCurTex = NULL; - D_801BEBB8.prevRoom = -1; - D_801BEBB8.lMapPrevTex = NULL; - D_801BEBB8.unk1C = 0; - D_801BEBB8.unk1E = 0; - D_801BEBB8.unk20 = 0; - D_801BEBB8.swapAnimTimer = 0; + sMapDisp.mapDataScene = NULL; + sMapDisp.curRoom = -1; + sMapDisp.minimapBaseX = 210; + sMapDisp.minimapBaseY = 140; + sMapDisp.minimapCurX = 210; + sMapDisp.minimapCurY = 140; + sMapDisp.minimapCurTex = NULL; + sMapDisp.prevRoom = -1; + sMapDisp.minimapPrevTex = NULL; + sMapDisp.minimapPrevX = 0; + sMapDisp.minimapPrevY = 0; + sMapDisp.unk20 = 0; + sMapDisp.swapAnimTimer = 0; - if (!Map_IsInBossArea(play)) { + if (!Map_IsInBossScene(play)) { sSceneNumRooms = play->numRooms; } - D_801BEBB8.texBuff0 = THA_AllocTailAlign16(&play->state.tha, 0x4000); - D_801BEBB8.texBuff1 = THA_AllocTailAlign16(&play->state.tha, 0x4000); - func_80104C80(play); - if (!Map_IsInBossArea(play)) { - D_801BEBB8.sceneMinX = 0; - D_801BEBB8.sceneMinZ = 0; - D_801BEBB8.sceneWidth = 100; - D_801BEBB8.sceneHeight = 100; - D_801BEBB8.sceneMidX = (s16)(s32)((f32)D_801BEBB8.sceneMinX + ((f32)D_801BEBB8.sceneWidth * 0.5f)); - D_801BEBB8.sceneMidZ = (s16)(s32)((f32)D_801BEBB8.sceneMinZ + ((f32)D_801BEBB8.sceneHeight * 0.5f)); + sMapDisp.texBuff0 = THA_AllocTailAlign16(&play->state.tha, 0x4000); + sMapDisp.texBuff1 = THA_AllocTailAlign16(&play->state.tha, 0x4000); + MapDisp_AwaitGameplayDangeonKeep(play); + if (!Map_IsInBossScene(play)) { + sMapDisp.sceneMinX = 0; + sMapDisp.sceneMinZ = 0; + sMapDisp.sceneWidth = 100; + sMapDisp.sceneHeight = 100; + sMapDisp.sceneMidX = TRUNCF_BINANG((f32)sMapDisp.sceneMinX + ((f32)sMapDisp.sceneWidth * 0.5f)); + sMapDisp.sceneMidZ = TRUNCF_BINANG((f32)sMapDisp.sceneMinZ + ((f32)sMapDisp.sceneHeight * 0.5f)); } - D_801BEBB8.unk3C = THA_AllocTailAlign16(&play->state.tha, sSceneNumRooms * sizeof(s16)); + sMapDisp.roomStoreyList = THA_AllocTailAlign16(&play->state.tha, sSceneNumRooms * sizeof(s16)); for (i = 0; i < sSceneNumRooms; i++) { - func_80102E90(play, &D_801BEBB8.unk3C[i]); + MapDisp_InitRoomStoreyRecord(play, &sMapDisp.roomStoreyList[i]); } - D_801BEBB8.unk48 = THA_AllocTailAlign16(&play->state.tha, 32 * sizeof(s16)); + sMapDisp.storeyYList = THA_AllocTailAlign16(&play->state.tha, ROOM_MAX * sizeof(s16)); - for (i = 0; i < 32; i++) { - D_801BEBB8.unk48[i] = -0x7FFF; + for (i = 0; i < ROOM_MAX; i++) { + sMapDisp.storeyYList[i] = FLOOR_MIN_Y; } MapDisp_InitMapI(play); - D_801BEBB8.unk58 = 0; - D_801BEBB8.unk5A = 0; - if (Map_IsInBossArea(play)) { - func_8010549C(play, NULL); - func_8010565C(play, 0, NULL); + sMapDisp.bossRoomStorey = 0; + sMapDisp.unk5A = 0; + if (Map_IsInBossScene(play)) { + MapDisp_InitMapData(play, NULL); + MapDisp_InitChestData(play, 0, NULL); } } -void func_80104F34(PlayState* play) { +typedef struct { + /* 0x0 */ s16 sceneId; + /* 0x2 */ s16 bottomStorey; +} MapCustomBottomStorey; // size = 0x4 + +void MapDisp_InitSceneFloorData(PlayState* play) { + static MapCustomBottomStorey sCustomBottomStorey[] = { + { SCENE_HAKUGIN, -1 }, { SCENE_HAKUGIN_BS, -1 }, { SCENE_SEA, -2 }, + { SCENE_SEA_BS, -2 }, { SCENE_INISIE_N, -1 }, + }; s32 i1; s32 i2; s32 i3; - s32 i4; + s32 storey; - for (i1 = 0; i1 < 32; i1++) { - D_801BEBB8.unk48[i1] = -0x7FFF; + // init table + for (i1 = 0; i1 < ROOM_MAX; i1++) { + sMapDisp.storeyYList[i1] = FLOOR_MIN_Y; } - for (i2 = 0; i2 < sSceneNumRooms; i2++) { - MinimapEntry* mapEntry1 = &D_801BEBB8.minimapList->entry[i2]; - if (mapEntry1->mapId == 0xFFFF) { + // for all rooms in scene + for (i2 = 0; i2 < sSceneNumRooms; i2++) { + MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[i2]; + + if (mapDataRoom->mapId == 0xFFFF) { continue; } - for (i1 = 0; i1 < 32; i1++) { - if (D_801BEBB8.unk48[i1] == -0x7FFF) { - D_801BEBB8.unk48[i1] = mapEntry1->unk4; + // add item to the table if it is a newish value + for (i1 = 0; i1 < ROOM_MAX; i1++) { + if (sMapDisp.storeyYList[i1] == FLOOR_MIN_Y) { + sMapDisp.storeyYList[i1] = mapDataRoom->floorY; break; - } else if (fabsf((f32)D_801BEBB8.unk48[i1] - (f32)mapEntry1->unk4) < 5.0f) { + } else if (fabsf((f32)sMapDisp.storeyYList[i1] - (f32)mapDataRoom->floorY) < 5.0f) { break; } } } + + // sort the table in ascending order for (i2 = 0; i2 < sSceneNumRooms; i2++) { - if (D_801BEBB8.unk48[i2] == -0x7FFF) { + if (sMapDisp.storeyYList[i2] == FLOOR_MIN_Y) { break; } for (i3 = i2 + 1; i3 < sSceneNumRooms; i3++) { - if (D_801BEBB8.unk48[i3] == -0x7FFF) { + if (sMapDisp.storeyYList[i3] == FLOOR_MIN_Y) { break; } - if (D_801BEBB8.unk48[i3] < D_801BEBB8.unk48[i2]) { - s16 temp_t3 = D_801BEBB8.unk48[i2]; + if (sMapDisp.storeyYList[i3] < sMapDisp.storeyYList[i2]) { + s16 swap = sMapDisp.storeyYList[i2]; - D_801BEBB8.unk48[i2] = D_801BEBB8.unk48[i3]; - D_801BEBB8.unk48[i3] = temp_t3; + sMapDisp.storeyYList[i2] = sMapDisp.storeyYList[i3]; + sMapDisp.storeyYList[i3] = swap; } } } + for (i2 = 0; i2 < sSceneNumRooms; i2++) { - MinimapEntry* mapEntry2 = &D_801BEBB8.minimapList->entry[i2]; + MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[i2]; - D_801BEBB8.unk3C[i2] = -1; + sMapDisp.roomStoreyList[i2] = -1; - for (i4 = 0; i4 < sSceneNumRooms; i4++) { - if (D_801BEBB8.unk48[i4] != -0x7FFF) { - if (fabsf((f32)D_801BEBB8.unk48[i4] - (f32)mapEntry2->unk4) < 5.0f) { - D_801BEBB8.unk3C[i2] = i4; + for (storey = 0; storey < sSceneNumRooms; storey++) { + if (sMapDisp.storeyYList[storey] != FLOOR_MIN_Y) { + if (fabsf((f32)sMapDisp.storeyYList[storey] - (f32)mapDataRoom->floorY) < 5.0f) { + sMapDisp.roomStoreyList[i2] = storey; break; } } } } - D_801BEBB8.unk40 = 0; + sMapDisp.numStoreys = 0; for (i2 = 0; i2 < sSceneNumRooms; i2++) { - if (D_801BEBB8.unk48[i2] != -0x7FFF) { - D_801BEBB8.unk40++; + if (sMapDisp.storeyYList[i2] != FLOOR_MIN_Y) { + sMapDisp.numStoreys++; } } - D_801BEBB8.lowestFloor = 0; - for (i2 = 0; i2 < ARRAY_COUNT(sCustomLowestFloor); i2++) { - if (play->sceneId == sCustomLowestFloor[i2].sceneId) { - D_801BEBB8.lowestFloor = sCustomLowestFloor[i2].lowestFloor; + sMapDisp.bottomStorey = 0; + for (i2 = 0; i2 < ARRAY_COUNT(sCustomBottomStorey); i2++) { + if (play->sceneId == sCustomBottomStorey[i2].sceneId) { + sMapDisp.bottomStorey = sCustomBottomStorey[i2].bottomStorey; } } } -s32 func_80105294(void) { - struct_801BEC70 sp4 = D_801BEC70; +/** + * Unused result + * @returns the y position to place the boss room skull icon on the pause map. + * The result position is the inverse of what it should be, stacking lower rooms above higher ones + */ +s32 MapDisp_GetBossIconY(void) { + s32 dungeonMapFloorIconPosY[5] = { 67, 81, 95, 109, 123 }; - if ((D_801BEBB8.minimapList == NULL) || (D_801BEBB8.unk58 < 0) || (D_801BEBB8.unk58 >= 5) || + if ((sMapDisp.mapDataScene == NULL) || (sMapDisp.bossRoomStorey < 0) || (sMapDisp.bossRoomStorey >= 5) || (sSceneNumRooms == 0)) { - return 0x7B; + return 123; } - return sp4.unk0[D_801BEBB8.unk58]; + return dungeonMapFloorIconPosY[sMapDisp.bossRoomStorey]; } -s16 func_80105318(void) { - return D_801BEBB8.unk58; +s16 MapDisp_GetBossRoomStorey(void) { + return sMapDisp.bossRoomStorey; } // TransitionActor params test -s32 func_80105328(s32 params) { +s32 MapDisp_IsBossDoor(s32 params) { if (ENDOOR_PARAMS_GET_TYPE((u16)params) == ENDOOR_TYPE_5) { return true; } return false; } -void func_8010534C(PlayState* play) { +void MapDisp_InitBossRoomStorey(PlayState* play) { TransitionActorList* transitionActors = &sTransitionActorList; - s32 var_v0; + s32 storey; s32 i; for (i = 0; i < transitionActors->count; i++) { - if (func_80105328(D_801F53B0[i].params) != 0) { - if (ABS_ALT(D_801F53B0[i].id) != 0x18) { - for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) { + if (MapDisp_IsBossDoor(sTransitionActors[i].params)) { + if (ABS_ALT(sTransitionActors[i].id) != ACTOR_EN_HOLL) { + for (storey = 0; storey < sMapDisp.numStoreys; storey++) { //! FAKE: needed for matching - s32 temp = (D_801BEBB8.unk48[var_v0] - 5); + s32 temp = (sMapDisp.storeyYList[storey] - 5); - if (((var_v0 == D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5))) || - ((var_v0 != D_801BEBB8.unk40 - 1) && (D_801F53B0[i].pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) && - (D_801F53B0[i].pos.y < (D_801BEBB8.unk48[var_v0 + 1] - 5)))) { - D_801BEBB8.unk58 = var_v0; + if (((storey == sMapDisp.numStoreys - 1) && + (sTransitionActors[i].pos.y >= (sMapDisp.storeyYList[storey] - 5))) || + ((storey != sMapDisp.numStoreys - 1) && + (sTransitionActors[i].pos.y >= (sMapDisp.storeyYList[storey] - 5)) && + (sTransitionActors[i].pos.y < (sMapDisp.storeyYList[storey + 1] - 5)))) { + sMapDisp.bossRoomStorey = storey; return; } } } } } - D_801BEBB8.unk58 = 0; + sMapDisp.bossRoomStorey = 0; } -void func_8010549C(PlayState* play, void* segmentAddress) { - MinimapEntry* var_v1; - MinimapList* temp_v0; +/** + * @brief Initializes the MapData for the current scene + * + * @param play + * @param segmentAddress + */ +void MapDisp_InitMapData(PlayState* play, void* segmentAddress) { + MapDataScene* mapDataScene; + MapDataRoom* mapDataRooms; s32 i; - if (!Map_IsInBossArea(play)) { + if (!Map_IsInBossScene(play)) { sSceneNumRooms = play->numRooms; - temp_v0 = Lib_SegmentedToVirtual(segmentAddress); - D_801BEC14 = *temp_v0; - var_v1 = Lib_SegmentedToVirtual(temp_v0->entry); + mapDataScene = Lib_SegmentedToVirtual(segmentAddress); + sMapDataScene = *mapDataScene; + mapDataRooms = Lib_SegmentedToVirtual(mapDataScene->rooms); for (i = 0; i < sSceneNumRooms; i++) { - D_801F5130[i] = *var_v1++; + sMapDataRooms[i] = *mapDataRooms++; } - D_801BEC14.entry = D_801F5130; + sMapDataScene.rooms = sMapDataRooms; if (play->colCtx.colHeader != NULL) { - D_801BEBB8.sceneMinX = play->colCtx.colHeader->minBounds.x; - D_801BEBB8.sceneMinZ = play->colCtx.colHeader->minBounds.z; - D_801BEBB8.sceneWidth = play->colCtx.colHeader->maxBounds.x - play->colCtx.colHeader->minBounds.x; - D_801BEBB8.sceneHeight = play->colCtx.colHeader->maxBounds.z - play->colCtx.colHeader->minBounds.z; - D_801BEBB8.sceneMidX = D_801BEBB8.sceneMinX + (D_801BEBB8.sceneWidth * 0.5f); - D_801BEBB8.sceneMidZ = D_801BEBB8.sceneMinZ + (D_801BEBB8.sceneHeight * 0.5f); + sMapDisp.sceneMinX = play->colCtx.colHeader->minBounds.x; + sMapDisp.sceneMinZ = play->colCtx.colHeader->minBounds.z; + sMapDisp.sceneWidth = play->colCtx.colHeader->maxBounds.x - play->colCtx.colHeader->minBounds.x; + sMapDisp.sceneHeight = play->colCtx.colHeader->maxBounds.z - play->colCtx.colHeader->minBounds.z; + sMapDisp.sceneMidX = sMapDisp.sceneMinX + (sMapDisp.sceneWidth * 0.5f); + sMapDisp.sceneMidZ = sMapDisp.sceneMinZ + (sMapDisp.sceneHeight * 0.5f); } } - D_801BEBB8.minimapList = &D_801BEC14; - func_80104F34(play); - func_8010534C(play); + sMapDisp.mapDataScene = &sMapDataScene; + MapDisp_InitSceneFloorData(play); + MapDisp_InitBossRoomStorey(play); } -void func_8010565C(PlayState* play, s32 num, void* segmentAddress) { - MinimapChest* var_v1; - s32 var_a3; +/** + * @brief Creates a deep copy of chest data from the scene data. + * + * @param play + * @param num + * @param segmentAddress + * @note If a boss scene is loaded, no data is copied. This allows the scene to borrow the main dungeon scene data + * instead. + */ +void MapDisp_InitChestData(PlayState* play, s32 num, void* segmentAddress) { + MapDataChest* mapDataChests; + s32 i; - if (!Map_IsInBossArea(play)) { - var_v1 = Lib_SegmentedToVirtual(segmentAddress); - for (var_a3 = 0; var_a3 < num; var_v1++, var_a3++) { - D_801F5270[var_a3] = *var_v1; + if (!Map_IsInBossScene(play)) { + mapDataChests = Lib_SegmentedToVirtual(segmentAddress); + for (i = 0; i < num; mapDataChests++, i++) { + sMapDataChests[i] = *mapDataChests; } sNumChests = num; } - D_801BEBB8.unk54 = D_801F5270; - D_801BEBB8.numChests = sNumChests; + sMapDisp.mapDataChests = sMapDataChests; + sMapDisp.numChests = sNumChests; } -void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList) { +/** + * @brief Creates a deep copy of transition actors from the scene data. + * + * @param play + * @param num number of transition actors within the list + * @param transitionActorList pointer to the list of transition actors + * @note If a boss scene is loaded, no data is copied. This allows the scene to borrow the main dungeon scene data + * instead. + */ +void MapDisp_InitTransitionActorData(PlayState* play, s32 num, TransitionActorEntry* transitionActorList) { s32 i; - if (!Map_IsInBossArea(play)) { + if (!Map_IsInBossScene(play)) { sTransitionActorList.count = num; for (i = 0; i < num; i++) { - D_801F53B0[i] = transitionActorList[i]; + sTransitionActors[i] = transitionActorList[i]; } - sTransitionActorList.list = D_801F53B0; + sTransitionActorList.list = sTransitionActors; } } void MapDisp_Destroy(PlayState* play) { s32 i; - D_801BEBB8.minimapList = NULL; - D_801BEBB8.curRoom = -1; - D_801BEBB8.unkC = 0xD2; - D_801BEBB8.unkE = 0x8C; - D_801BEBB8.lMapCurTex = NULL; - D_801BEBB8.prevRoom = -1; - D_801BEBB8.lMapPrevTex = NULL; - D_801BEBB8.unk1C = 0; - D_801BEBB8.unk1E = 0; - D_801BEBB8.unk20 = 0; - D_801BEBB8.swapAnimTimer = 0; - D_801BEBB8.texBuff0 = NULL; - D_801BEBB8.texBuff1 = NULL; + sMapDisp.mapDataScene = NULL; + sMapDisp.curRoom = -1; + sMapDisp.minimapCurX = 210; + sMapDisp.minimapCurY = 140; + sMapDisp.minimapCurTex = NULL; + sMapDisp.prevRoom = -1; + sMapDisp.minimapPrevTex = NULL; + sMapDisp.minimapPrevX = 0; + sMapDisp.minimapPrevY = 0; + sMapDisp.unk20 = 0; + sMapDisp.swapAnimTimer = 0; + sMapDisp.texBuff0 = NULL; + sMapDisp.texBuff1 = NULL; for (i = 0; i < sSceneNumRooms; i++) { - func_80102EA4(play, &D_801BEBB8.unk3C[i]); + MapDisp_DestroyRoomStoreyRecord(play, &sMapDisp.roomStoreyList[i]); } - D_801BEBB8.unk3C = NULL; - D_801BEBB8.unk40 = 0; - D_801BEBB8.unk42 = 0; - D_801BEBB8.lowestFloor = 0; - D_801BEBB8.unk4C = 0; - D_801BEBB8.unk48 = NULL; - D_801BEBB8.numChests = 0; - D_801BEBB8.unk54 = NULL; + sMapDisp.roomStoreyList = NULL; + sMapDisp.numStoreys = 0; + sMapDisp.pauseMapCurStorey = 0; + sMapDisp.bottomStorey = 0; + sMapDisp.timer = 0; + sMapDisp.storeyYList = NULL; + sMapDisp.numChests = 0; + sMapDisp.mapDataChests = NULL; MapDisp_DestroyMapI(play); - D_801BEBB8.unk5A = 0; + sMapDisp.unk5A = 0; } -void func_80105B34(PlayState* play) { - s16 temp_a0; - s16 temp_a0_2; - s16 temp_v1; - s16 temp_v1_2; +void MapDisp_Update(PlayState* play) { + s16 currentX; + s16 currentY; + s16 targetX; + s16 targetY; - if ((D_801BEBB8.minimapList != NULL) && (sSceneNumRooms != 0)) { - //! FAKE: D_801BEBFA should be D_801BEBB8.unk42 - D_801BEBFA = 8 - play->pauseCtx.unk_256; - if (D_801BEBB8.prevRoom != -1) { - if (D_801BEBB8.swapAnimTimer > 0) { - temp_v1 = D_801BEBB8.unk8; - temp_a0 = D_801BEBB8.unkC; - if (temp_v1 != temp_a0) { - D_801BEBB8.unkC = - (s16)(s32)(((f32)(temp_v1 - temp_a0) / (f32)D_801BEBB8.swapAnimTimer) + (f32)temp_a0); + if ((sMapDisp.mapDataScene != NULL) && (sSceneNumRooms != 0)) { + //! FAKE: D_801BEBFA should be sMapDisp.pauseMapCurStorey + D_801BEBFA = DUNGEON_FLOOR_INDEX_0 - play->pauseCtx.cursorMapDungeonItem; + if (sMapDisp.prevRoom != -1) { + if (sMapDisp.swapAnimTimer > 0) { + targetX = sMapDisp.minimapBaseX; + currentX = sMapDisp.minimapCurX; + if (targetX != currentX) { + sMapDisp.minimapCurX = + TRUNCF_BINANG(((f32)(targetX - currentX) / (f32)sMapDisp.swapAnimTimer) + (f32)currentX); } - temp_v1_2 = D_801BEBB8.unkA; - temp_a0_2 = D_801BEBB8.unkE; - if (temp_v1_2 != temp_a0_2) { - D_801BEBB8.unkE = - (s16)(s32)(((f32)(temp_v1_2 - temp_a0_2) / (f32)D_801BEBB8.swapAnimTimer) + (f32)temp_a0_2); + targetY = sMapDisp.minimapBaseY; + currentY = sMapDisp.minimapCurY; + if (targetY != currentY) { + sMapDisp.minimapCurY = + TRUNCF_BINANG(((f32)(targetY - currentY) / (f32)sMapDisp.swapAnimTimer) + (f32)currentY); } - D_801BEBB8.swapAnimTimer--; + sMapDisp.swapAnimTimer--; } else { - D_801BEBB8.prevRoom = -1; - D_801BEBB8.swapAnimTimer = 0; - D_801BEBB8.unkC = D_801BEBB8.unk8; - D_801BEBB8.unkE = D_801BEBB8.unkA; + sMapDisp.prevRoom = -1; + sMapDisp.swapAnimTimer = 0; + sMapDisp.minimapCurX = sMapDisp.minimapBaseX; + sMapDisp.minimapCurY = sMapDisp.minimapBaseY; } } else { - D_801BEBB8.swapAnimTimer = 0; + sMapDisp.swapAnimTimer = 0; } } } void MapDisp_SwapRooms(s16 nextRoom) { - MinimapEntry* nextMinimapEntry; - MinimapEntry* prevMinimapEntry; - s32 sp54; - s32 sp50; - s32 sp4C; - s32 sp48; - s32 sp44; - s32 sp40; + MapDataRoom* nextMapDataRoom; + MapDataRoom* prevMapDataRoom; + s32 minimapBaseX; + s32 minimapBaseY; + s32 width; + s32 height; + s32 offsetX; + s32 offsetY; - if ((D_801BEBB8.minimapList != NULL) && (sSceneNumRooms != 0) && (nextRoom != -1)) { - nextMinimapEntry = &D_801BEBB8.minimapList->entry[nextRoom]; - if ((nextMinimapEntry->mapId < 5) || - ((nextMinimapEntry->mapId >= 0x100) && (nextMinimapEntry->mapId < 0x162)) || - nextMinimapEntry->mapId == 0xFFFF) { + if ((sMapDisp.mapDataScene != NULL) && (sSceneNumRooms != 0) && (nextRoom != -1)) { + nextMapDataRoom = &sMapDisp.mapDataScene->rooms[nextRoom]; + if ((nextMapDataRoom->mapId < 5) || ((nextMapDataRoom->mapId >= 0x100) && (nextMapDataRoom->mapId < 0x162)) || + nextMapDataRoom->mapId == 0xFFFF) { - D_801BEBB8.prevRoom = D_801BEBB8.curRoom; - D_801BEBB8.curRoom = nextRoom; - D_801BEBB8.swapAnimTimer = 20; + sMapDisp.prevRoom = sMapDisp.curRoom; + sMapDisp.curRoom = nextRoom; + sMapDisp.swapAnimTimer = 20; - D_801BEBB8.lMapPrevTex = D_801BEBB8.lMapCurTex; - sp54 = D_801BEBB8.unk8; - sp50 = D_801BEBB8.unkA; + sMapDisp.minimapPrevTex = sMapDisp.minimapCurTex; + minimapBaseX = sMapDisp.minimapBaseX; + minimapBaseY = sMapDisp.minimapBaseY; - nextMinimapEntry = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; + nextMapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; - if (nextMinimapEntry->mapId == 0xFFFF) { - D_801BEBB8.unk1E = 0; - D_801BEBB8.unk8 = 0xD2; - D_801BEBB8.unkA = 0x8C; - D_801BEBB8.unkC = 0xD2; - D_801BEBB8.unkE = 0x8C; - D_801BEBB8.lMapCurTex = NULL; - D_801BEBB8.unk1C = D_801BEBB8.unk1E; + if (nextMapDataRoom->mapId == 0xFFFF) { + sMapDisp.minimapPrevY = 0; + sMapDisp.minimapBaseX = 210; + sMapDisp.minimapBaseY = 140; + sMapDisp.minimapCurX = 210; + sMapDisp.minimapCurY = 140; + sMapDisp.minimapCurTex = NULL; + sMapDisp.minimapPrevX = sMapDisp.minimapPrevY; return; } - MapDisp_GetMapPos(nextMinimapEntry, &sp44, &sp40); - MapDisp_GetMapTexDim(nextMinimapEntry, &sp4C, &sp48); - D_801BEBB8.unk8 = 0x127 - sp4C; - D_801BEBB8.unkA = 0xDC - sp48; - if (D_801BEBB8.prevRoom != -1) { - prevMinimapEntry = &D_801BEBB8.minimapList->entry[D_801BEBB8.prevRoom]; - if (prevMinimapEntry->mapId == 0xFFFF) { - D_801BEBB8.unk1E = 0; - D_801BEBB8.lMapCurTex = NULL; - D_801BEBB8.unk1C = D_801BEBB8.unk1E; - D_801BEBB8.unkC = D_801BEBB8.unk8; - D_801BEBB8.unkE = D_801BEBB8.unkA; + MapDisp_GetMapOffset(nextMapDataRoom, &offsetX, &offsetY); + MapDisp_GetMapTexDim(nextMapDataRoom, &width, &height); + sMapDisp.minimapBaseX = 295 - width; + sMapDisp.minimapBaseY = 220 - height; + if (sMapDisp.prevRoom != -1) { + prevMapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.prevRoom]; + if (prevMapDataRoom->mapId == 0xFFFF) { + sMapDisp.minimapCurTex = NULL; + sMapDisp.minimapPrevX = sMapDisp.minimapPrevY = 0; + sMapDisp.minimapCurX = sMapDisp.minimapBaseX; + sMapDisp.minimapCurY = sMapDisp.minimapBaseY; return; } else { - s32 sp3C; - s32 sp38; + s32 prevOffsetX; + s32 prevOffsetY; s32 scale; s32 pad; - MapDisp_GetMapPos(prevMinimapEntry, &sp3C, &sp38); - scale = D_801BEBB8.minimapList->scale; - if (D_801BEBB8.minimapList->scale == 0) { + MapDisp_GetMapOffset(prevMapDataRoom, &prevOffsetX, &prevOffsetY); + scale = sMapDisp.mapDataScene->scale; + if (sMapDisp.mapDataScene->scale == 0) { scale = 20; - } else if (D_801BEBB8.minimapList->scale == -1) { + } else if (sMapDisp.mapDataScene->scale == -1) { s32 scaleTemp; - MapDisp_GetMapScale(nextMinimapEntry, &scaleTemp); + MapDisp_GetMapScale(nextMapDataRoom, &scaleTemp); scale = scaleTemp; } - D_801BEBB8.unk1C = - (s16)(s32)(((f32)sp44 + - (((f32)prevMinimapEntry->unk2 - (f32)nextMinimapEntry->unk2) * (1.0f / scale))) - - (f32)sp3C); - D_801BEBB8.unk1E = - (s16)(s32)(((f32)sp40 + - (((f32)prevMinimapEntry->unk6 - (f32)nextMinimapEntry->unk6) * (1.0f / scale))) - - (f32)sp38); - D_801BEBB8.unkC = sp54 - D_801BEBB8.unk1C; - D_801BEBB8.unkE = sp50 - D_801BEBB8.unk1E; + sMapDisp.minimapPrevX = + TRUNCF_BINANG(((f32)offsetX + (((f32)prevMapDataRoom->centerX - (f32)nextMapDataRoom->centerX) * + (1.0f / scale))) - + (f32)prevOffsetX); + sMapDisp.minimapPrevY = + TRUNCF_BINANG(((f32)offsetY + (((f32)prevMapDataRoom->centerZ - (f32)nextMapDataRoom->centerZ) * + (1.0f / scale))) - + (f32)prevOffsetY); + sMapDisp.minimapCurX = minimapBaseX - sMapDisp.minimapPrevX; + sMapDisp.minimapCurY = minimapBaseY - sMapDisp.minimapPrevY; } } else { - D_801BEBB8.unk1C = D_801BEBB8.unk1E = 0; - D_801BEBB8.unkC = D_801BEBB8.unk8; - D_801BEBB8.unkE = D_801BEBB8.unkA; + sMapDisp.minimapPrevX = sMapDisp.minimapPrevY = 0; + sMapDisp.minimapCurX = sMapDisp.minimapBaseX; + sMapDisp.minimapCurY = sMapDisp.minimapBaseY; } - D_801BEBB8.lMapCurTex = NULL; + sMapDisp.minimapCurTex = NULL; - switch (MapData_MID_GetType(nextMinimapEntry->mapId)) { + switch (MapData_MID_GetType(nextMapDataRoom->mapId)) { case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: - D_801BEBB8.lMapCurTex = MapData_GetMapTexGameplayDangeonKeep(nextMinimapEntry->mapId); + sMapDisp.minimapCurTex = MapData_GetMapTexGameplayDangeonKeep(nextMapDataRoom->mapId); return; case MAPDATA_MID_MAP_GRAND_STATIC: - if (D_801BEBB8.lMapPrevTex == D_801BEBB8.texBuff0) { - D_801BEBB8.lMapCurTex = D_801BEBB8.texBuff1; + if (sMapDisp.minimapPrevTex == sMapDisp.texBuff0) { + sMapDisp.minimapCurTex = sMapDisp.texBuff1; } else { - D_801BEBB8.lMapCurTex = D_801BEBB8.texBuff0; + sMapDisp.minimapCurTex = sMapDisp.texBuff0; } - if (MapData_GetSizeOfMapGrandTex(nextMinimapEntry->mapId) != 0) { - CmpDma_LoadFile(SEGMENT_ROM_START(map_grand_static), nextMinimapEntry->mapId - 0x100, - D_801BEBB8.lMapCurTex, MapData_GetSizeOfMapGrandTex(nextMinimapEntry->mapId)); + if (MapData_GetSizeOfMapGrandTex(nextMapDataRoom->mapId) != 0) { + CmpDma_LoadFile(SEGMENT_ROM_START(map_grand_static), nextMapDataRoom->mapId - 0x100, + sMapDisp.minimapCurTex, MapData_GetSizeOfMapGrandTex(nextMapDataRoom->mapId)); } break; @@ -956,45 +988,49 @@ void MapDisp_SwapRooms(s16 nextRoom) { } } -void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { - MinimapEntry* sp6C; - s32 sp68; - s32 sp64; - s32 sp60; - s32 sp5C; - s32 sp58; - s32 sp54; +void MapDisp_Minimap_DrawRedCompassIcon(PlayState* play, s32 x, s32 z, s32 rot) { + MapDataRoom* mapDataRoom; + s32 posX; + s32 posY; + s32 texOffsetX; + s32 texOffsetY; + s32 texWidth; + s32 texHeight; s32 scale; - f32 sp4C; + f32 scaleFrac; - sp6C = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom]; - if (sp6C->mapId == 0xFFFF) { + mapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; + if (mapDataRoom->mapId == 0xFFFF) { return; } - MapDisp_GetMapPos(sp6C, &sp60, &sp5C); - MapDisp_GetMapTexDim(sp6C, &sp58, &sp54); - scale = D_801BEBB8.minimapList->scale; + MapDisp_GetMapOffset(mapDataRoom, &texOffsetX, &texOffsetY); + MapDisp_GetMapTexDim(mapDataRoom, &texWidth, &texHeight); + scale = sMapDisp.mapDataScene->scale; - if (D_801BEBB8.minimapList->scale == 0) { + if (sMapDisp.mapDataScene->scale == 0) { scale = 20; - } else if (D_801BEBB8.minimapList->scale == -1) { + } else if (sMapDisp.mapDataScene->scale == -1) { s32 scaleTemp; - MapDisp_GetMapScale(sp6C, &scaleTemp); + MapDisp_GetMapScale(mapDataRoom, &scaleTemp); scale = scaleTemp; } - sp4C = 1.0f / scale; + scaleFrac = 1.0f / scale; 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; + posX = (s32)((x - (f32)mapDataRoom->centerX) * scaleFrac) + sMapDisp.minimapBaseX + + (sMapDisp.minimapCurX - sMapDisp.minimapBaseX) + texOffsetX; + posY = (s32)((z - (f32)mapDataRoom->centerZ) * scaleFrac) + sMapDisp.minimapBaseY + + (sMapDisp.minimapCurY - sMapDisp.minimapBaseY) + texOffsetY; } else { - 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; + posX = -(s32)((x - (f32)mapDataRoom->centerX) * scaleFrac) + sMapDisp.minimapBaseX + + (sMapDisp.minimapCurX - sMapDisp.minimapBaseX) + texOffsetX; + posY = -(s32)((z - (f32)mapDataRoom->centerZ) * scaleFrac) + sMapDisp.minimapBaseY + + (sMapDisp.minimapCurY - sMapDisp.minimapBaseY) + texOffsetY; } - if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) { + if ((posX > 0) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL42_Overlay(play->state.gfxCtx); @@ -1004,7 +1040,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2); - Matrix_Translate(sp68 - 160.0f, 120.0f - sp64, 0.0f, MTXMODE_NEW); + Matrix_Translate(posX - 160.0f, 120.0f - posY, 0.0f, MTXMODE_NEW); Matrix_RotateXFApply(-1.6f); if (MapDisp_IsDataRotated(play)) { rot += 0x7FFF; @@ -1012,85 +1048,87 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) { Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY); Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0xFF, 200, 0, 0, play->interfaceCtx.minimapAlpha); - gSPDisplayList(OVERLAY_DISP++, gameplay_keep_DL_01ED00); + gDPSetPrimColor(OVERLAY_DISP++, 0, 255, 200, 0, 0, play->interfaceCtx.minimapAlpha); + gSPDisplayList(OVERLAY_DISP++, gCompassArrowDL); CLOSE_DISPS(play->state.gfxCtx); } } -s32 func_80106408(PlayState* play) { - if ((gSaveContext.save.entrance == 0x6400) && (Cutscene_GetSceneLayer(play) != 0)) { +s32 MapDisp_IsLocationRomaniRanchCutscene(PlayState* play) { + if ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0)) { return true; } return false; } -s32 func_80106450(PlayState* play) { - if ((!func_8010A0A4(play) && (Inventory_IsMapVisible(play->sceneId) != 0)) || - (func_8010A0A4(play) && CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex))) { +s32 MapDisp_CanDisplayMinimap(PlayState* play) { + if ((!MapExp_CurRoomHasMapI(play) && Inventory_IsMapVisible(play->sceneId)) || + (MapExp_CurRoomHasMapI(play) && CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex))) { return true; } return false; } -s32 func_801064CC(PlayState* play) { - if (((play->csCtx.state != CS_STATE_IDLE) && !func_80106408(play)) || (D_801BEBB8.unk20 & 2) || - Map_IsInBossArea(play)) { +s32 MapDisp_IsLocationMinimapBlocked(PlayState* play) { + if (((play->csCtx.state != CS_STATE_IDLE) && !MapDisp_IsLocationRomaniRanchCutscene(play)) || + (sMapDisp.unk20 & 2) || Map_IsInBossScene(play)) { return true; } return false; } -s32 func_80106530(PlayState* play) { - if ((func_801064CC(play) == true) || !func_80106450(play)) { +s32 MapDisp_IsMinimapToggleBlocked(PlayState* play) { + if ((MapDisp_IsLocationMinimapBlocked(play) == true) || !MapDisp_CanDisplayMinimap(play)) { return true; } return false; } -s32 func_8010657C(s32 curRoom, s32 prevRoom) { - MinimapEntry* entry; - s16* temp1; // Can be removed, but adds readability +s32 MapDisp_AreRoomsSameStorey(s32 curRoom, s32 prevRoom) { + MapDataRoom* mapDataRoom; + s16* roomStoreyList; // Can be removed, but adds readability if ((curRoom == -1) || (prevRoom == -1)) { - return 0; + return false; } - entry = &D_801BEBB8.minimapList->entry[curRoom]; - temp1 = D_801BEBB8.unk3C; - if ((temp1[curRoom] <= temp1[prevRoom]) && (temp1[prevRoom] <= (temp1[curRoom] + ((entry->unk8 >> 2) & 7)))) { - return 1; + mapDataRoom = &sMapDisp.mapDataScene->rooms[curRoom]; + roomStoreyList = sMapDisp.roomStoreyList; + if ((roomStoreyList[curRoom] <= roomStoreyList[prevRoom]) && + (roomStoreyList[prevRoom] <= (roomStoreyList[curRoom] + MAP_DATA_ROOM_GET_EXTRA_STOREYS(mapDataRoom)))) { + return true; } - entry = &D_801BEBB8.minimapList->entry[prevRoom]; - if ((temp1[prevRoom] <= temp1[curRoom]) && (temp1[curRoom] <= (temp1[prevRoom] + ((entry->unk8 >> 2) & 7)))) { - return 1; + mapDataRoom = &sMapDisp.mapDataScene->rooms[prevRoom]; + if ((roomStoreyList[prevRoom] <= roomStoreyList[curRoom]) && + (roomStoreyList[curRoom] <= (roomStoreyList[prevRoom] + MAP_DATA_ROOM_GET_EXTRA_STOREYS(mapDataRoom)))) { + return true; } - return 0; + return false; } -void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { +void MapDisp_DrawMinimap(PlayState* play, s32 playerInitX, s32 playerInitZ, s32 playerInitDir) { PauseContext* pauseCtx = &play->pauseCtx; - if ((D_801BEBB8.minimapList != 0) && ((s32)pauseCtx->state <= PAUSE_STATE_OPENING_2) && (XREG(95) == 0) && + if ((sMapDisp.mapDataScene != NULL) && ((s32)pauseCtx->state <= PAUSE_STATE_OPENING_2) && !R_MINIMAP_DISABLED && (play->interfaceCtx.minimapAlpha != 0)) { - if (!func_801064CC(play) && (sSceneNumRooms != 0)) { - if (func_80106450(play)) { - func_801031D0(play, D_801BEBB8.lMapCurTex, D_801BEBB8.unkC, D_801BEBB8.unkE, D_801BEBB8.curRoom, - 1.0f - (D_801BEBB8.swapAnimTimer * 0.05f)); - if ((D_801BEBB8.curRoom != D_801BEBB8.prevRoom) && - (func_8010657C(D_801BEBB8.curRoom, D_801BEBB8.prevRoom) != 0)) { - func_801031D0(play, D_801BEBB8.lMapPrevTex, D_801BEBB8.unkC + D_801BEBB8.unk1C, - D_801BEBB8.unkE + D_801BEBB8.unk1E, D_801BEBB8.prevRoom, - D_801BEBB8.swapAnimTimer * 0.05f); + if (!MapDisp_IsLocationMinimapBlocked(play) && (sSceneNumRooms != 0)) { + if (MapDisp_CanDisplayMinimap(play)) { + MapDisp_DrawMinimapRoom(play, sMapDisp.minimapCurTex, sMapDisp.minimapCurX, sMapDisp.minimapCurY, + sMapDisp.curRoom, 1.0f - (sMapDisp.swapAnimTimer * 0.05f)); + if ((sMapDisp.curRoom != sMapDisp.prevRoom) && + MapDisp_AreRoomsSameStorey(sMapDisp.curRoom, sMapDisp.prevRoom)) { + MapDisp_DrawMinimapRoom(play, sMapDisp.minimapPrevTex, sMapDisp.minimapCurX + sMapDisp.minimapPrevX, + sMapDisp.minimapCurY + sMapDisp.minimapPrevY, sMapDisp.prevRoom, + sMapDisp.swapAnimTimer * 0.05f); } - func_80104AE8(play); + MapDisp_Minimap_DrawDoorActors(play); } - if ((!func_8010A0A4(play) || CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) && - (func_8010A0A4(play) || Inventory_IsMapVisible(play->sceneId))) { + if ((!MapExp_CurRoomHasMapI(play) || CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) && + (MapExp_CurRoomHasMapI(play) || Inventory_IsMapVisible(play->sceneId))) { if (play->interfaceCtx.minigameState == MINIGAME_STATE_NONE) { - func_80105FE0(play, x, z, rot); + MapDisp_Minimap_DrawRedCompassIcon(play, playerInitX, playerInitZ, playerInitDir); } - func_8010439C(play); + MapDisp_Minimap_DrawActors(play); } } } @@ -1099,15 +1137,15 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) { void MapDisp_ResetIMap(void) { s32 i; - D_801F56B0.rooms = 0; - for (i = 0; i < 32; i++) { - D_801F56B0.unk4[i] = 0; - D_801F56B0.unk84[i] = NULL; - D_801F56B0.unk104[i] = NULL; + sPauseDungeonMap.textureCount = 0; + for (i = 0; i < ROOM_MAX; i++) { + sPauseDungeonMap.mapI_mapCompactId[i] = 0; + sPauseDungeonMap.mapI_roomTextures[i] = NULL; + sPauseDungeonMap.roomSprite[i] = NULL; } - D_801F56B0.unk184 = 0; - D_801BEBB8.unk20 &= ~1; + sPauseDungeonMap.animTimer = 0; + sMapDisp.unk20 &= ~1; } void MapDisp_InitMapI(PlayState* play) { @@ -1119,91 +1157,96 @@ void MapDisp_DestroyMapI(PlayState* play) { } // alloc pause screen dungeon map -void* func_801068FC(PlayState* play, void* heap) { +void* MapDisp_AllocDungeonMap(PlayState* play, void* heap) { void* heapNext; - s32 mapId; - s32 mapCompactId; s32 dungeonMapRoomIter; - s32 var_s2; - s32 roomIter; - MinimapEntry* entry; - s32 var_s3; + s32 sceneRoomIter; heapNext = heap; - if ((D_801BEBB8.minimapList == NULL) || (sSceneNumRooms == 0)) { + if ((sMapDisp.mapDataScene == NULL) || (sSceneNumRooms == 0)) { return heapNext; } - D_801F56B0.rooms = 0; + sPauseDungeonMap.textureCount = 0; // loop for number of rooms - for (roomIter = 0; roomIter < sSceneNumRooms; roomIter++) { - var_s2 = false; - entry = &D_801BEBB8.minimapList->entry[roomIter]; - if (entry->mapId == 0xFFFF) { + for (sceneRoomIter = 0; sceneRoomIter < sSceneNumRooms; sceneRoomIter++) { + s32 mapCompactId; + MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[sceneRoomIter]; + s32 isDuplicateTexture = false; + + if (mapDataRoom->mapId == 0xFFFF) { continue; } - mapCompactId = MapData_GetMapCompactId(entry->mapId); + mapCompactId = MapData_GetMapCompactId(mapDataRoom->mapId); if (mapCompactId == -1) { continue; } - for (dungeonMapRoomIter = 0; dungeonMapRoomIter < D_801F56B0.rooms; dungeonMapRoomIter++) { - if (mapCompactId == D_801F56B0.unk4[dungeonMapRoomIter]) { - var_s2 = true; + // test if the texture reference already exists + for (dungeonMapRoomIter = 0; dungeonMapRoomIter < sPauseDungeonMap.textureCount; dungeonMapRoomIter++) { + if (mapCompactId == sPauseDungeonMap.mapI_mapCompactId[dungeonMapRoomIter]) { + isDuplicateTexture = true; break; } } - if (var_s2 == false) { - D_801F56B0.unk4[D_801F56B0.rooms] = mapCompactId; - D_801F56B0.rooms++; + if (isDuplicateTexture == false) { + sPauseDungeonMap.mapI_mapCompactId[sPauseDungeonMap.textureCount] = mapCompactId; + sPauseDungeonMap.textureCount++; } } - D_801F56B0.unk84[0] = heap; - for (dungeonMapRoomIter = 0; dungeonMapRoomIter < D_801F56B0.rooms; dungeonMapRoomIter++) { - mapId = D_801F56B0.unk4[dungeonMapRoomIter]; - MapDisp_GetMapITexture(D_801F56B0.unk84[dungeonMapRoomIter], mapId); - if (dungeonMapRoomIter + 1 < D_801F56B0.rooms) { - D_801F56B0.unk84[dungeonMapRoomIter + 1] = - ALIGN16((intptr_t)D_801F56B0.unk84[dungeonMapRoomIter] + MapData_CPID_GetSizeOfMapTex(mapId)); + // fetch all textures from rom + sPauseDungeonMap.mapI_roomTextures[0] = heap; + for (dungeonMapRoomIter = 0; dungeonMapRoomIter < sPauseDungeonMap.textureCount; dungeonMapRoomIter++) { + s32 mapCompactId = sPauseDungeonMap.mapI_mapCompactId[dungeonMapRoomIter]; + + MapDisp_GetMapITexture(sPauseDungeonMap.mapI_roomTextures[dungeonMapRoomIter], mapCompactId); + if (dungeonMapRoomIter + 1 < sPauseDungeonMap.textureCount) { + sPauseDungeonMap.mapI_roomTextures[dungeonMapRoomIter + 1] = + ALIGN16((intptr_t)sPauseDungeonMap.mapI_roomTextures[dungeonMapRoomIter] + + MapData_CPID_GetSizeOfMapTex(mapCompactId)); } else { - heapNext = (intptr_t)D_801F56B0.unk84[dungeonMapRoomIter] + MapData_CPID_GetSizeOfMapTex(mapId); + heapNext = (intptr_t)sPauseDungeonMap.mapI_roomTextures[dungeonMapRoomIter] + + MapData_CPID_GetSizeOfMapTex(mapCompactId); } } - for (roomIter = 0; roomIter < sSceneNumRooms; roomIter++) { - entry = &D_801BEBB8.minimapList->entry[roomIter]; - if (entry->mapId == 0xFFFF) { - D_801F56B0.unk104[roomIter] = NULL; + + for (sceneRoomIter = 0; sceneRoomIter < sSceneNumRooms; sceneRoomIter++) { + MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[sceneRoomIter]; + s32 foundTexture = false; + s32 mapCompactId; + + if (mapDataRoom->mapId == 0xFFFF) { + sPauseDungeonMap.roomSprite[sceneRoomIter] = NULL; } else { - var_s3 = false; - mapCompactId = MapData_GetMapCompactId(entry->mapId); - for (dungeonMapRoomIter = 0; dungeonMapRoomIter < D_801F56B0.rooms; dungeonMapRoomIter++) { - if (mapCompactId == D_801F56B0.unk4[dungeonMapRoomIter]) { - var_s3 = true; + mapCompactId = MapData_GetMapCompactId(mapDataRoom->mapId); + for (dungeonMapRoomIter = 0; dungeonMapRoomIter < sPauseDungeonMap.textureCount; dungeonMapRoomIter++) { + if (mapCompactId == sPauseDungeonMap.mapI_mapCompactId[dungeonMapRoomIter]) { + foundTexture = true; break; } } - if (!var_s3) { - D_801F56B0.unk104[roomIter] = NULL; + if (!foundTexture) { + sPauseDungeonMap.roomSprite[sceneRoomIter] = NULL; } else { - void* dummy = D_801F56B0.unk84[dungeonMapRoomIter]; //! FAKE: + void* dummy = sPauseDungeonMap.mapI_roomTextures[dungeonMapRoomIter]; //! FAKE: - D_801F56B0.unk104[roomIter] = D_801F56B0.unk84[dungeonMapRoomIter]; + sPauseDungeonMap.roomSprite[sceneRoomIter] = sPauseDungeonMap.mapI_roomTextures[dungeonMapRoomIter]; } } } return heapNext; } -s32 func_80106BEC(s32 arg0, f32 arg1) { - if (arg0 == 0) { - if ((D_801BEBB8.unk48[0] <= arg1) && ((D_801BEBB8.unk40 == 1) || (arg1 < D_801BEBB8.unk48[1]))) { +s32 MapDisp_IsOnStorey(s32 storey, f32 checkY) { + if (storey == 0) { + if ((sMapDisp.storeyYList[0] <= checkY) && ((sMapDisp.numStoreys == 1) || (checkY < sMapDisp.storeyYList[1]))) { return true; } - } else if (arg0 >= (D_801BEBB8.unk40 - 1)) { - if (D_801BEBB8.unk48[D_801BEBB8.unk40 - 1] <= arg1) { + } else if (storey >= (sMapDisp.numStoreys - 1)) { + if (sMapDisp.storeyYList[sMapDisp.numStoreys - 1] <= checkY) { return true; } - } else if ((D_801BEBB8.unk48[arg0] <= arg1) && (arg1 < D_801BEBB8.unk48[arg0 + 1])) { + } else if ((sMapDisp.storeyYList[storey] <= checkY) && (checkY < sMapDisp.storeyYList[storey + 1])) { return true; } return false; @@ -1228,39 +1271,56 @@ s32 MapDisp_ConvertBossSceneToDungeonScene(s32 sceneId) { } } -#define COLOR16(r, g, b, a) \ - (s16)(((s32)(((r)*31.0f) / 255.0f) << 11) | ((s32)(((g)*31.0f) / 255.0f) << 6) | \ - ((s32)(((b)*31.0f) / 255.0f) << 1) | (a)) - -void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { +/** + * @brief Draws the dungeon room sprites for the pause menu dungeon map + * + * @param play + * @param viewX top left x position of the dungeon map view window + * @param viewY top left y posiiton of the dungeon map view window + * @param viewWidth width in pixels of the dungeon map view window + * @param viewHeight height in pixels of the dungeon map view window + * @param scaleFrac ratio to convert world space coordinates to map coordinates + * @param dungeonIndex enum DungeonIndex for retrieving map/compass data + */ +void MapDisp_DrawRooms(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32 viewHeight, f32 scaleFrac, + s32 dungeonIndex) { + static u16 sUnvisitedRoomPal[0x10] = { + 0x0000, 0x0000, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, + 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, + }; // palette 0 + static u16 sVisitedRoomPal[0x10] = { + 0x0000, 0x027F, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, + 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, + }; // palette 1 + static u16 sCurrentRoomPal[0x10] = { + 0x0000, 0x0623, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305, + 0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001, + }; // palette 2 PauseContext* pauseCtx = &play->pauseCtx; - s32 var_a1_2; - s32 var_a1_4; - s32 var_a1_5; - s32 var_v1; + s32 pad[4]; s32 i; - s32 temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; - s32 temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; + s32 green = ((sPauseDungeonMap.animTimer * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f; + s32 blue = ((sPauseDungeonMap.animTimer * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f; - D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; + sCurrentRoomPal[1] = (green << 6) | (blue << 1) | 1; - if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, arg6)) { + if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, dungeonIndex)) { s32 requiredScopeTemp; - D_801BEC84[0xF] = 0xAD5F; - D_801BECA4[0xF] = 0xAD5F; - D_801BECC4[0xF] = 0xAD5F; + sUnvisitedRoomPal[0xF] = 0xAD5F; + sVisitedRoomPal[0xF] = 0xAD5F; + sCurrentRoomPal[0xF] = 0xAD5F; } else { - D_801BECC4[0xF] = D_801BECA4[0xF] = D_801BEC84[0xF] = 0; + sCurrentRoomPal[0xF] = sVisitedRoomPal[0xF] = sUnvisitedRoomPal[0xF] = 0; } OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL39_Opa(play->state.gfxCtx); 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); + gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, sUnvisitedRoomPal); + gDPLoadTLUT_pal16(POLY_OPA_DISP++, 1, sVisitedRoomPal); + gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, sCurrentRoomPal); gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); for (i = 0; i < sSceneNumRooms; i++) { @@ -1268,33 +1328,34 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 s32 texHeight; s32 offsetX; s32 offsetY; - MinimapEntry* entry; - TexturePtr texture; - s32 sp100; - s32 spFC; - s32 spF8; - s32 spF4; + MapDataRoom* mapDataRoom; + TexturePtr roomTexture; + s32 s; + s32 t; + s32 dsdx; + s32 dtdy; s32 texPosX; s32 texPosY; s32 spE8; s32 two = 2; - entry = &D_801BEBB8.minimapList->entry[i]; - if ((entry->mapId == 0xFFFF) || (entry->mapId >= 0x162)) { + mapDataRoom = &sMapDisp.mapDataScene->rooms[i]; + if ((mapDataRoom->mapId == 0xFFFF) || (mapDataRoom->mapId >= 0x162)) { continue; } - if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[i]) || - ((D_801BEBB8.unk3C[i] + ((entry->unk8 >> 2) & 7)) < D_801BEBB8.unk42)) { + if ((sMapDisp.pauseMapCurStorey < sMapDisp.roomStoreyList[i]) || + ((sMapDisp.roomStoreyList[i] + MAP_DATA_ROOM_GET_EXTRA_STOREYS(mapDataRoom)) < + sMapDisp.pauseMapCurStorey)) { continue; } - texture = D_801F56B0.unk104[i]; - if (texture == NULL) { + roomTexture = sPauseDungeonMap.roomSprite[i]; + if (roomTexture == NULL) { continue; } - spE8 = MapData_GetMapCompactId(entry->mapId); + spE8 = MapData_GetMapCompactId(mapDataRoom->mapId); if (spE8 == -1) { continue; } @@ -1302,55 +1363,55 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 MapData_CPID_GetTexDim(spE8, &texWidth, &texHeight); MapData_CPID_GetTexOffset(spE8, &offsetX, &offsetY); - if (entry->unk8 & 1) { - offsetX = (texWidth / 2 - offsetX) + texWidth / 2; - sp100 = (texWidth - 1) << 5; - spF8 = 0xFC00; + if (mapDataRoom->flags & 1) { + offsetX = ((texWidth / 2) - offsetX) + (texWidth / 2); + s = (texWidth - 1) << 5; + dsdx = 0xFC00; } else { - sp100 = 0; - spF8 = 0x400; + s = 0; + dsdx = 0x400; } - if (entry->unk8 & 2) { + if (mapDataRoom->flags & 2) { s32 requiredScopeTemp; - offsetY = (texHeight / 2 - offsetY) + texHeight / 2; - spFC = (texHeight - 1) << 5; - spF4 = 0xFC00; + offsetY = ((texHeight / 2) - offsetY) + (texHeight / 2); + t = (texHeight - 1) << 5; + dtdy = 0xFC00; } else { - spFC = 0; - spF4 = 0x400; + t = 0; + dtdy = 0x400; } - texPosX = ((entry->unk2 - (f32)D_801BEBB8.sceneMidX) * arg5 - offsetX) + ((arg3 / two) + arg1); - texPosY = ((entry->unk6 - (f32)D_801BEBB8.sceneMidZ) * arg5 - offsetY) + ((arg4 / two) + arg2); + texPosX = + ((mapDataRoom->centerX - (f32)sMapDisp.sceneMidX) * scaleFrac - offsetX) + ((viewWidth / two) + viewX); + texPosY = + ((mapDataRoom->centerZ - (f32)sMapDisp.sceneMidZ) * scaleFrac - offsetY) + ((viewHeight / two) + viewY); if (i == play->roomCtx.curRoom.num) { - if (Map_IsInBossArea(play)) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 1, + if (Map_IsInBossScene(play)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, roomTexture, G_IM_FMT_CI, texWidth, texHeight, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } else { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 2, + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, roomTexture, G_IM_FMT_CI, texWidth, texHeight, 2, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } - } else if (((void)0, gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId( - MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))]) - .rooms & - (1 << i)) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 1, + } else if (GET_ROOM_VISITED(Play_GetOriginalSceneId(MapDisp_ConvertBossSceneToDungeonScene(play->sceneId)), + i)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, roomTexture, G_IM_FMT_CI, texWidth, texHeight, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - } else if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, arg6)) { - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 0, + } else if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, dungeonIndex)) { + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, roomTexture, G_IM_FMT_CI, texWidth, texHeight, 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); } else { continue; } gSPTextureRectangle(POLY_OPA_DISP++, (texPosX << 2), (texPosY << 2), (texPosX + texWidth) << 2, - (texPosY + texHeight) << 2, 0, sp100, spFC, spF8, spF4); + (texPosY + texHeight) << 2, 0, s, t, dsdx, dtdy); gDPPipeSync(POLY_OPA_DISP++); } @@ -1359,19 +1420,30 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 CLOSE_DISPS(play->state.gfxCtx); } -void func_80107B78(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) { +/** + * @brief Draws the chests for the pause menu dungeon map + * + * @param play + * @param viewX top left x position of the dungeon map view window + * @param viewY top left y posiiton of the dungeon map view window + * @param viewWidth width in pixels of the dungeon map view window + * @param viewHeight height in pixels of the dungeon map view window + * @param scaleFrac ratio to convert world space coordinates to map coordinates + * @param dungeonIndex enum DungeonIndex for retrieving map/compass data + */ +void MapDisp_DrawChests(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32 viewHeight, f32 scaleFrac) { s32 pad[23]; - MinimapChest* var_s0 = D_801BEBB8.unk54; - s32 sp3C; - MinimapEntry* sp38; - s32 posX; - s32 posZ; + MapDataChest* mapDataChests = sMapDisp.mapDataChests; + s32 room; + MapDataRoom* mapDataRoom; + s32 texPosX; + s32 texPosY; s32 i; - s32 var_v1_2; + s32 isChestOpen; s32 offsetX = 4; s32 offsetZ = 4; - if (var_s0 == NULL) { + if (mapDataChests == NULL) { return; } @@ -1387,57 +1459,72 @@ void func_80107B78(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - for (i = 0; i < D_801BEBB8.numChests; i++) { - sp3C = var_s0[i].unk0; - sp38 = &D_801BEBB8.minimapList->entry[sp3C]; + for (i = 0; i < sMapDisp.numChests; i++) { + room = mapDataChests[i].room; + mapDataRoom = &sMapDisp.mapDataScene->rooms[room]; switch (play->sceneId) { case SCENE_MITURIN_BS: - var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest) & (1 << var_s0[i].unk2); + isChestOpen = GET_CYCLE_CHEST_OPENED(SCENE_MITURIN, mapDataChests[i].chestFlagId); break; case SCENE_HAKUGIN_BS: - var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_HAKUGIN].chest) & (1 << var_s0[i].unk2); + isChestOpen = GET_CYCLE_CHEST_OPENED(SCENE_HAKUGIN, mapDataChests[i].chestFlagId); break; case SCENE_SEA_BS: - var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_SEA].chest) & (1 << var_s0[i].unk2); + isChestOpen = GET_CYCLE_CHEST_OPENED(SCENE_SEA, mapDataChests[i].chestFlagId); break; case SCENE_INISIE_BS: - var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest) & (1 << var_s0[i].unk2); + isChestOpen = GET_CYCLE_CHEST_OPENED(SCENE_INISIE_N, mapDataChests[i].chestFlagId); break; default: - var_v1_2 = Flags_GetTreasure(play, var_s0[i].unk2); + isChestOpen = Flags_GetTreasure(play, mapDataChests[i].chestFlagId); break; } - if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) || - ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < D_801BEBB8.unk42) || (var_v1_2 != 0)) { + if ((sMapDisp.pauseMapCurStorey < sMapDisp.roomStoreyList[room]) || + ((sMapDisp.roomStoreyList[room] + MAP_DATA_ROOM_GET_EXTRA_STOREYS(mapDataRoom)) < + sMapDisp.pauseMapCurStorey) || + (isChestOpen != 0)) { continue; } - if (!func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[i].unk6)) { + if (!MapDisp_IsOnStorey((s32)sMapDisp.pauseMapCurStorey, (f32)mapDataChests[i].y)) { continue; } - posX = (s32)((((var_s0[i].unk4 - (f32)D_801BEBB8.sceneMidX) * arg5) - offsetX) + ((arg3 / 2) + arg1)); - posZ = (s32)((((var_s0[i].unk8 - (f32)D_801BEBB8.sceneMidZ) * arg5) - offsetZ) + ((arg4 / 2) + arg2)); + texPosX = + (s32)((((mapDataChests[i].x - (f32)sMapDisp.sceneMidX) * scaleFrac) - offsetX) + ((viewWidth / 2) + viewX)); + texPosY = (s32)((((mapDataChests[i].z - (f32)sMapDisp.sceneMidZ) * scaleFrac) - offsetZ) + + ((viewHeight / 2) + viewY)); - gSPTextureRectangle(POLY_OPA_DISP++, posX << 2, posZ << 2, (posX + 8) << 2, (posZ + 8) << 2, G_TX_RENDERTILE, 0, - 0, 1 << 10, 1 << 10); + gSPTextureRectangle(POLY_OPA_DISP++, texPosX << 2, texPosY << 2, (texPosX + 8) << 2, (texPosY + 8) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } CLOSE_DISPS(play->state.gfxCtx); } -void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { +/** + * @brief Draws the room exit points for the pause menu dungeon map + * + * @param play + * @param viewX top left x position of the dungeon map view window + * @param viewY top left y posiiton of the dungeon map view window + * @param viewWidth width in pixels of the dungeon map view window + * @param viewHeight height in pixels of the dungeon map view window + * @param scaleFrac ratio to convert world space coordinates to map coordinates + * @param dungeonIndex enum DungeonIndex for retrieving map/compass data + */ +void MapDisp_DrawRoomExits(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32 viewHeight, f32 scaleFrac, + s32 dungeonIndex) { PauseContext* pauseCtx = &play->pauseCtx; TransitionActorList* transitionActors = &sTransitionActorList; - TransitionActorEntry* var_s1; - s32 tempX; - s32 tempY; + s32 texPosX; + s32 texPosY; s32 i; s8 roomA; s8 roomB; @@ -1449,28 +1536,26 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPLoadTextureBlock_4b(POLY_OPA_DISP++, &sWhiteSquareTex, G_IM_FMT_I, 16, 16, 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); for (i = 0; i < transitionActors->count; i++) { - if (func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) { - if ((ABS_ALT(D_801F53B0[i].id) != ACTOR_EN_HOLL) && (func_80105328(D_801F53B0[i].params) == 0)) { - roomA = D_801F53B0[i].sides[0].room; - roomB = D_801F53B0[i].sides[1].room; + if (MapDisp_IsOnStorey(sMapDisp.pauseMapCurStorey, sTransitionActors[i].pos.y)) { + if ((ABS_ALT(sTransitionActors[i].id) != ACTOR_EN_HOLL) && + !MapDisp_IsBossDoor(sTransitionActors[i].params)) { + roomA = sTransitionActors[i].sides[0].room; + roomB = sTransitionActors[i].sides[1].room; if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex) || (roomA < 0) || - (gSaveContext.save.saveInfo - .permanentSceneFlags[Play_GetOriginalSceneId( - MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))] - .rooms & - (1 << roomA)) || + GET_ROOM_VISITED(Play_GetOriginalSceneId(MapDisp_ConvertBossSceneToDungeonScene(play->sceneId)), + roomA) || (roomB < 0) || - (gSaveContext.save.saveInfo - .permanentSceneFlags[Play_GetOriginalSceneId( - MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))] - .rooms & - (1 << roomB))) { + GET_ROOM_VISITED(Play_GetOriginalSceneId(MapDisp_ConvertBossSceneToDungeonScene(play->sceneId)), + roomB)) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - tempX = ((f32)D_801F53B0[i].pos.x - D_801BEBB8.sceneMidX) * arg5 + ((arg3 / 2) + arg1); - tempY = ((f32)D_801F53B0[i].pos.z - D_801BEBB8.sceneMidZ) * arg5 + ((arg4 / 2) + arg2); - gSPTextureRectangle(POLY_OPA_DISP++, ((tempX - 1) << 2), ((tempY - 1) << 2), ((tempX + 1) << 2), - ((tempY + 1) << 2), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + texPosX = ((f32)sTransitionActors[i].pos.x - sMapDisp.sceneMidX) * scaleFrac + + ((viewWidth / 2) + viewX); + texPosY = ((f32)sTransitionActors[i].pos.z - sMapDisp.sceneMidZ) * scaleFrac + + ((viewHeight / 2) + viewY); + gSPTextureRectangle(POLY_OPA_DISP++, ((texPosX - 1) << 2), ((texPosY - 1) << 2), + ((texPosX + 1) << 2), ((texPosY + 1) << 2), G_TX_RENDERTILE, 0, 0, 1 << 10, + 1 << 10); } } } @@ -1480,13 +1565,25 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } } -void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) { +/** + * @brief Draws the boss room icon for the pause menu dungeon map. + * + * @param play + * @param viewX top left x position of the dungeon map view window + * @param viewY top left y posiiton of the dungeon map view window + * @param viewWidth width in pixels of the dungeon map view window + * @param viewHeight height in pixels of the dungeon map view window + * @param scaleFrac ratio to convert world space coordinates to map coordinates + * @param dungeonIndex enum DungeonIndex for retrieving map/compass data + */ +void MapDisp_DrawBossIcon(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32 viewHeight, f32 scaleFrac, + s32 dungeonIndex) { s32 i; - TransitionActorList* sp30 = &sTransitionActorList; + TransitionActorList* transitionActorList = &sTransitionActorList; s32 offsetX = 4; s32 offsetZ = 4; - s32 posX; - s32 posZ; + s32 texPosX; + s32 texPosY; OPEN_DISPS(play->state.gfxCtx); @@ -1497,25 +1594,27 @@ void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPPipeSync(POLY_OPA_DISP++); - if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, arg6)) { + if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, dungeonIndex)) { gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapBossIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 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); - for (i = 0; i < sp30->count; i++) { - if (!func_80105328(D_801F53B0[i].params)) { + for (i = 0; i < transitionActorList->count; i++) { + if (!MapDisp_IsBossDoor(sTransitionActors[i].params)) { continue; } - if (!func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) { + if (!MapDisp_IsOnStorey(sMapDisp.pauseMapCurStorey, sTransitionActors[i].pos.y)) { continue; } - if (ABS_ALT(D_801F53B0[i].id) == ACTOR_EN_HOLL) { + if (ABS_ALT(sTransitionActors[i].id) == ACTOR_EN_HOLL) { continue; } - posX = ((((f32)D_801F53B0[i].pos.x - D_801BEBB8.sceneMidX) * arg5) - offsetX) + ((arg3 / 2) + arg1); - posZ = ((((f32)D_801F53B0[i].pos.z - D_801BEBB8.sceneMidZ) * arg5) - offsetZ) + ((arg4 / 2) + arg2); - gSPTextureRectangle(POLY_OPA_DISP++, posX << 2, posZ << 2, (posX + 8) << 2, (posZ + 8) << 2, + texPosX = ((((f32)sTransitionActors[i].pos.x - sMapDisp.sceneMidX) * scaleFrac) - offsetX) + + ((viewWidth / 2) + viewX); + texPosY = ((((f32)sTransitionActors[i].pos.z - sMapDisp.sceneMidZ) * scaleFrac) - offsetZ) + + ((viewHeight / 2) + viewY); + gSPTextureRectangle(POLY_OPA_DISP++, texPosX << 2, texPosY << 2, (texPosX + 8) << 2, (texPosY + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } } @@ -1524,6 +1623,12 @@ void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 } TexturePtr MapDisp_GetDungeonMapFloorTexture(s32 floorNumber) { + static TexturePtr sDungeonMapFloorTextures[] = { + gDungeonMap1FButtonTex, gDungeonMap2FButtonTex, gDungeonMap3FButtonTex, gDungeonMap4FButtonTex, + gDungeonMap5FButtonTex, gDungeonMap6FButtonTex, gDungeonMap7FButtonTex, gDungeonMap8FButtonTex, + gDungeonMapB1ButtonTex, gDungeonMapB2ButtonTex, gDungeonMapB3ButtonTex, gDungeonMapB4ButtonTex, + gDungeonMapB5ButtonTex, gDungeonMapB6ButtonTex, gDungeonMapB7ButtonTex, gDungeonMapB8ButtonTex, + }; if ((floorNumber >= 0) && (floorNumber < 8)) { return sDungeonMapFloorTextures[floorNumber]; } @@ -1533,7 +1638,13 @@ TexturePtr MapDisp_GetDungeonMapFloorTexture(s32 floorNumber) { return gDungeonMapBlankFloorButtonTex; } -s32 func_80108A64(PlayState* play) { +/** + * @brief Tests if the dungeon map on the Map screen should be drawn. + * + * @param play + * @return true if the map should be drawn, else false. + */ +s32 MapDisp_SkipDrawDungeonMap(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; if (pauseCtx->pageIndex != PAUSE_MAP) { @@ -1551,40 +1662,40 @@ s32 func_80108A64(PlayState* play) { return false; } -void func_80108AF8(PlayState* play) { +void MapDisp_DrawDungeonFloorSelect(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; - s32 temp_a0_2; - s32 temp_a2_2; - s16 a3; - s16 a2; + s32 texULY; + s32 texLRY; + s16 texULX; + s16 texLRX; s32 pad; - s32 var_s1; - s32 spB4 = 0; + s32 storey; + s32 dungeonIndex = 0; - if ((D_801BEBB8.minimapList != NULL) && (sSceneNumRooms != 0) && !func_80108A64(play)) { - if (Map_IsInBossArea(play)) { + if ((sMapDisp.mapDataScene != NULL) && (sSceneNumRooms != 0) && !MapDisp_SkipDrawDungeonMap(play)) { + if (Map_IsInBossScene(play)) { switch (play->sceneId) { case SCENE_MITURIN_BS: - spB4 = 0; + dungeonIndex = DUNGEON_INDEX_WOODFALL_TEMPLE; break; case SCENE_HAKUGIN_BS: - spB4 = 1; + dungeonIndex = DUNGEON_INDEX_SNOWHEAD_TEMPLE; break; case SCENE_SEA_BS: - spB4 = 2; + dungeonIndex = DUNGEON_INDEX_GREAT_BAY_TEMPLE; break; case SCENE_INISIE_BS: - spB4 = 3; + dungeonIndex = DUNGEON_INDEX_STONE_TOWER_TEMPLE; break; default: break; } } else { - spB4 = gSaveContext.mapIndex; + dungeonIndex = gSaveContext.mapIndex; } OPEN_DISPS(play->state.gfxCtx); @@ -1592,41 +1703,42 @@ void func_80108AF8(PlayState* play) { gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); - for (var_s1 = 0; var_s1 < D_801BEBB8.unk40; var_s1++) { - if ((gSaveContext.save.saveInfo - .permanentSceneFlags[Play_GetOriginalSceneId( - MapDisp_ConvertBossSceneToDungeonScene(play->sceneId))] - .unk_14 & - gBitFlags[4 - var_s1]) || - CHECK_DUNGEON_ITEM_ALT(DUNGEON_MAP, spB4)) { - gDPLoadTextureBlock(POLY_OPA_DISP++, MapDisp_GetDungeonMapFloorTexture(D_801BEBB8.lowestFloor + var_s1), + // Draw unlocked storeys + for (storey = 0; storey < sMapDisp.numStoreys; storey++) { + if (GET_DUNGEON_FLOOR_VISITED( + Play_GetOriginalSceneId(MapDisp_ConvertBossSceneToDungeonScene(play->sceneId)), 4 - storey) || + CHECK_DUNGEON_ITEM_ALT(DUNGEON_MAP, dungeonIndex)) { + gDPLoadTextureBlock(POLY_OPA_DISP++, MapDisp_GetDungeonMapFloorTexture(sMapDisp.bottomStorey + storey), G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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(POLY_OPA_DISP++, 0x0144, (125 - var_s1 * 15) << 2, 0x01A4, - ((125 - var_s1 * 15) + 16) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + gSPTextureRectangle(POLY_OPA_DISP++, 81 << 2, (125 - storey * 15) << 2, 105 << 2, + ((125 - storey * 15) + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } } gDPPipeSync(POLY_OPA_DISP++); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 255, pauseCtx->alpha); - gDPLoadTextureBlock(POLY_OPA_DISP++, - MapDisp_GetDungeonMapFloorTexture((D_801BEBB8.lowestFloor - pauseCtx->unk_256) + 8), - G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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); - a3 = 80; - a2 = 106; - temp_a0_2 = (5 + (pauseCtx->unk_256 * 0xF)); - temp_a2_2 = temp_a0_2 + 0x10; + // Draw currently selected storey + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 255, pauseCtx->alpha); + gDPLoadTextureBlock( + POLY_OPA_DISP++, + MapDisp_GetDungeonMapFloorTexture((sMapDisp.bottomStorey - pauseCtx->cursorMapDungeonItem) + 8), + G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 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); + + texULX = 80; + texLRX = 106; + texULY = (5 + (pauseCtx->cursorMapDungeonItem * 0xF)); + texLRY = texULY + 16; if ((pauseCtx->cursorSpecialPos == 0) && (pauseCtx->cursorXIndex[1] == 0)) { - a2++; - a3--; - temp_a2_2 += 4; - temp_a0_2 -= 4; - gSPTextureRectangle(POLY_OPA_DISP++, a3 << 2, (temp_a0_2) << 2, a2 << 2, (temp_a2_2) << 2, G_TX_RENDERTILE, + texLRX++; + texULX--; + texLRY += 4; + texULY -= 4; + gSPTextureRectangle(POLY_OPA_DISP++, texULX << 2, texULY << 2, texLRX << 2, (texLRY) << 2, G_TX_RENDERTILE, 0, 0, 0x036E, 0x02AA); } else { - gSPTextureRectangle(POLY_OPA_DISP++, (a3 + 1) << 2, temp_a0_2 << 2, (a2 - 1) << 2, temp_a2_2 << 2, - G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); + gSPTextureRectangle(POLY_OPA_DISP++, (texULX + 1) << 2, texULY << 2, (texLRX - 1) << 2, texLRY << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } Gfx_SetupDL42_Opa(play->state.gfxCtx); @@ -1634,83 +1746,98 @@ void func_80108AF8(PlayState* play) { } } -s32 func_801090B0(s32 arg0) { - if ((D_801BEBB8.minimapList == NULL) || (sSceneNumRooms == 0)) { +s32 MapDisp_IsValidStorey(s32 storey) { + if ((sMapDisp.mapDataScene == NULL) || (sSceneNumRooms == 0)) { return false; } - if ((arg0 < 0) || (arg0 >= 6)) { + if ((storey < 0) || (storey > 5)) { return false; } - if (D_801BEBB8.unk48[arg0] != -0x7FFF) { + if (sMapDisp.storeyYList[storey] != FLOOR_MIN_Y) { return true; } return false; } -s32 func_80109124(s16 arg0) { +s32 MapDisp_GetPlayerStorey(s16 checkY) { s32 i; - if ((D_801BEBB8.minimapList == NULL) || (sSceneNumRooms == 0)) { + if ((sMapDisp.mapDataScene == NULL) || (sSceneNumRooms == 0)) { return -1; } - if (D_801BEBB8.unk40 < 2) { + if (sMapDisp.numStoreys <= 1) { return 0; } - if ((D_801BEBB8.unk48[1] - 5) >= arg0) { + if ((sMapDisp.storeyYList[1] - 5) >= checkY) { return 0; } - for (i = 1; i < D_801BEBB8.unk40; i++) { - if (((D_801BEBB8.unk48[i] - 5) < arg0) && ((D_801BEBB8.unk48[i + 1] - 5) >= arg0)) { + for (i = 1; i < sMapDisp.numStoreys; i++) { + if (((sMapDisp.storeyYList[i] - 5) < checkY) && ((sMapDisp.storeyYList[i + 1] - 5) >= checkY)) { return i; } } - return D_801BEBB8.unk40 - 1; + return sMapDisp.numStoreys - 1; } -void func_801091F0(PlayState* play) { - MinimapEntry* entry; - f32 temp; +typedef struct { + /* 0x0 */ s16 sceneId; + /* 0x4 */ s32 offsetX; + /* 0x8 */ s32 offsetY; +} MapCustomPosOffset; // size = 0xC + +/** + * Draws the dungeon map within the pause menu's Map screen. + * + * @param play + */ +void MapDisp_DrawDungeonMap(PlayState* play) { + static MapCustomPosOffset sCustomMapOffset[] = { + { SCENE_MITURIN, 0, -10 }, + { SCENE_MITURIN_BS, 0, -10 }, + }; + MapDataRoom* mapDataRoom; + f32 scaleFrac; s32 scale; s32 var_v0; - s32 sp44 = 0; - s32 sp40 = 0; - s32 sp3C = 0; + s32 dungeonIndex = 0; + s32 offsetX = 0; + s32 offsetY = 0; - if (func_80108A64(play)) { + if (MapDisp_SkipDrawDungeonMap(play)) { return; } - if (Map_IsInBossArea(play)) { + if (Map_IsInBossScene(play)) { switch (play->sceneId) { case SCENE_MITURIN_BS: - sp44 = 0; + dungeonIndex = DUNGEON_INDEX_WOODFALL_TEMPLE; break; case SCENE_HAKUGIN_BS: - sp44 = 1; + dungeonIndex = DUNGEON_INDEX_SNOWHEAD_TEMPLE; break; case SCENE_SEA_BS: - sp44 = 2; + dungeonIndex = DUNGEON_INDEX_GREAT_BAY_TEMPLE; break; case SCENE_INISIE_BS: - sp44 = 3; + dungeonIndex = DUNGEON_INDEX_STONE_TOWER_TEMPLE; break; default: break; } } else { - sp44 = gSaveContext.mapIndex; + dungeonIndex = gSaveContext.mapIndex; } - entry = D_801BEBB8.minimapList->entry; - if ((entry->mapId == 0xFFFF) || (entry->mapId >= 0x162)) { + mapDataRoom = sMapDisp.mapDataScene->rooms; + if ((mapDataRoom->mapId == 0xFFFF) || (mapDataRoom->mapId >= 0x162)) { return; } - var_v0 = MapData_GetMapCompactId(entry->mapId); + var_v0 = MapData_GetMapCompactId(mapDataRoom->mapId); if (var_v0 == -1) { return; } @@ -1720,35 +1847,35 @@ void func_801091F0(PlayState* play) { scale = 80; } - for (var_v0 = 0; var_v0 < ARRAY_COUNT(D_801BED24); var_v0++) { - if (play->sceneId == D_801BED24[var_v0].sceneId) { - sp40 = D_801BED24[var_v0].unk4; - sp3C = D_801BED24[var_v0].unk8; + for (var_v0 = 0; var_v0 < ARRAY_COUNT(sCustomMapOffset); var_v0++) { + if (play->sceneId == sCustomMapOffset[var_v0].sceneId) { + offsetX = sCustomMapOffset[var_v0].offsetX; + offsetY = sCustomMapOffset[var_v0].offsetY; } } - temp = 1.0f / scale; + scaleFrac = 1.0f / scale; - func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); - func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); - func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44); + MapDisp_DrawRooms(play, offsetX + 144, offsetY + 85, 120, 100, scaleFrac, dungeonIndex); + MapDisp_DrawRoomExits(play, offsetX + 144, offsetY + 85, 120, 100, scaleFrac, dungeonIndex); + MapDisp_DrawBossIcon(play, offsetX + 144, offsetY + 85, 120, 100, scaleFrac, dungeonIndex); - if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, sp44)) { - func_80107B78(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp); + if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, dungeonIndex)) { + MapDisp_DrawChests(play, offsetX + 144, offsetY + 85, 120, 100, scaleFrac); } } -void func_80109428(PlayState* play) { - D_801BEBB8.unk4C++; - if (!(D_801BEBB8.unk20 & 1)) { - D_801F56B0.unk184++; - if (D_801F56B0.unk184 > 40) { - D_801BEBB8.unk20 |= 1; +void MapDisp_UpdateDungeonMap(PlayState* play) { + sMapDisp.timer++; + if (!(sMapDisp.unk20 & 1)) { + sPauseDungeonMap.animTimer++; + if (sPauseDungeonMap.animTimer > 40) { + sMapDisp.unk20 |= 1; } } else { - D_801F56B0.unk184--; - if (D_801F56B0.unk184 < 0) { - D_801BEBB8.unk20 &= ~1; + sPauseDungeonMap.animTimer--; + if (sPauseDungeonMap.animTimer < 0) { + sMapDisp.unk20 &= ~1; } } } diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index 89f83f390..0e4849f3a 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -1,20 +1,23 @@ #include "global.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -s16 sMinimapInitPosX = 0; -s16 sMinimapInitPosZ = 0; -s16 sMinimapInitDir = 0; - -s32 sDungeonAndBossSceneIds[] = { - SCENE_MITURIN, SCENE_HAKUGIN, SCENE_SEA, SCENE_INISIE_N, SCENE_INISIE_R, - SCENE_MITURIN_BS, SCENE_HAKUGIN_BS, SCENE_SEA_BS, SCENE_INISIE_BS, -}; +s16 sPlayerInitPosX = 0; +s16 sPlayerInitPosZ = 0; +s16 sPlayerInitDir = 0; /** - * If the current scene is a dungeon or boss scene, this function returns an index - * indicating which one it is. Otherwise, it returns -1. + * Gets the mapIndex for the current dungeon or boss scene + * @return the current scene's mapIndex, or -1 if it isn't a dungeon or boss scene. */ s32 Map_GetDungeonOrBossAreaIndex(PlayState* play) { + static s32 sDungeonAndBossSceneIds[] = { + SCENE_MITURIN, // DUNGEON_INDEX_WOODFALL_TEMPLE + SCENE_HAKUGIN, // DUNGEON_INDEX_SNOWHEAD_TEMPLE + SCENE_SEA, // DUNGEON_INDEX_GREAT_BAY_TEMPLE + SCENE_INISIE_N, // DUNGEON_INDEX_STONE_TOWER_TEMPLE + SCENE_INISIE_R, // DUNGEON_INDEX_STONE_TOWER_TEMPLE + SCENE_MITURIN_BS, SCENE_HAKUGIN_BS, SCENE_SEA_BS, SCENE_INISIE_BS, + }; s32 i; for (i = 0; i < ARRAY_COUNT(sDungeonAndBossSceneIds); i++) { @@ -27,7 +30,8 @@ s32 Map_GetDungeonOrBossAreaIndex(PlayState* play) { } /** - * Returns true if the current scene is a dungeon or boss scene, false otherwise. + * Tests if the current scene is in a dungeon or boss scene. + * @return true if the current scene is a dungeon or boss scene, false otherwise. */ s32 Map_IsInDungeonOrBossArea(PlayState* play) { if (Map_GetDungeonOrBossAreaIndex(play) == -1) { @@ -37,23 +41,26 @@ s32 Map_IsInDungeonOrBossArea(PlayState* play) { return true; } -s32 func_8010A0A4(PlayState* play) { - if ((Map_GetDungeonOrBossAreaIndex(play) == -1) || !func_80102EF0(play)) { +s32 MapExp_CurRoomHasMapI(PlayState* play) { + if ((Map_GetDungeonOrBossAreaIndex(play) == -1) || !MapDisp_CurRoomHasMapI(play)) { return false; } return true; } -s32 sDungeonSceneIds[] = { - SCENE_MITURIN, SCENE_HAKUGIN, SCENE_SEA, SCENE_INISIE_N, SCENE_INISIE_R, -}; - /** - * If the current scene is a dungeon scene, this function returns an index - * indicating which one it is. Otherwise, it returns -1. + * Tests if the current scene is a dungeon scene, excluding boss scenes. + * @return -1 if not a dungeon scene, else returns the dungeonIndex of the dungeon scene */ s32 Map_GetDungeonAreaIndex(PlayState* play) { + static s32 sDungeonSceneIds[] = { + SCENE_MITURIN, // DUNGEON_INDEX_WOODFALL_TEMPLE + SCENE_HAKUGIN, // DUNGEON_INDEX_SNOWHEAD_TEMPLE + SCENE_SEA, // DUNGEON_INDEX_GREAT_BAY_TEMPLE + SCENE_INISIE_N, // DUNGEON_INDEX_STONE_TOWER_TEMPLE + SCENE_INISIE_R, // DUNGEON_INDEX_STONE_TOWER_TEMPLE + }; s32 i; for (i = 0; i < ARRAY_COUNT(sDungeonSceneIds); i++) { @@ -66,9 +73,10 @@ s32 Map_GetDungeonAreaIndex(PlayState* play) { } /** - * Returns true if the current scene is a dungeon scene, false otherwise. + * Test if the current scene is a dungeon scene, excluding boss rooms + * @return true if the current scene is a dungeon scene, false otherwise. */ -s32 Map_IsInDungeonArea(PlayState* play) { +s32 Map_IsInDungeonScene(PlayState* play) { if (Map_GetDungeonAreaIndex(play) == -1) { return false; } @@ -76,18 +84,17 @@ s32 Map_IsInDungeonArea(PlayState* play) { return true; } -s32 sBossSceneIds[] = { - SCENE_MITURIN_BS, // DUNGEON_INDEX_WOODFALL_TEMPLE - SCENE_HAKUGIN_BS, // DUNGEON_INDEX_SNOWHEAD_TEMPLE - SCENE_SEA_BS, // DUNGEON_INDEX_GREAT_BAY_TEMPLE - SCENE_INISIE_BS, // DUNGEON_INDEX_STONE_TOWER_TEMPLE -}; - /** - * If the current scene is a boss scene, this function returns an index - * indicating which one it is. Otherwise, it returns -1. + * Tests if the current scene is a boss scene. + * @return -1 if not a boss scene, else returns the dungeonIndex of the boss scene */ s32 Map_GetBossAreaIndex(PlayState* play) { + static s32 sBossSceneIds[] = { + SCENE_MITURIN_BS, // DUNGEON_INDEX_WOODFALL_TEMPLE + SCENE_HAKUGIN_BS, // DUNGEON_INDEX_SNOWHEAD_TEMPLE + SCENE_SEA_BS, // DUNGEON_INDEX_GREAT_BAY_TEMPLE + SCENE_INISIE_BS, // DUNGEON_INDEX_STONE_TOWER_TEMPLE + }; s32 i; for (i = 0; i < ARRAY_COUNT(sBossSceneIds); i++) { @@ -100,9 +107,10 @@ s32 Map_GetBossAreaIndex(PlayState* play) { } /** - * Returns true if the current scene is a boss scene, false otherwise. + * Checks if the current scene is a boss scene. + * @return true if the current scene is a boss scene, false otherwise. */ -s32 Map_IsInBossArea(PlayState* play) { +s32 Map_IsInBossScene(PlayState* play) { if (Map_GetBossAreaIndex(play) == -1) { return false; } @@ -110,13 +118,16 @@ s32 Map_IsInBossArea(PlayState* play) { return true; } -s32 D_801BF5A4[] = { - SCENE_22DEKUCITY, - SCENE_KOEPONARACE, - SCENE_F01, -}; - -s32 func_8010A238(PlayState* play) { +/** + * Test if the current scene is in a set of overworld scenes. + * @return -1 if not in the set, else returns the mapIndex of the overworld scene + */ +s32 Map_GetUnkOverworldAreaIndex(PlayState* play) { + static s32 D_801BF5A4[] = { + SCENE_22DEKUCITY, + SCENE_KOEPONARACE, + SCENE_F01, + }; s32 i; for (i = 0; i < ARRAY_COUNT(D_801BF5A4); i++) { @@ -128,8 +139,12 @@ s32 func_8010A238(PlayState* play) { return -1; } -s32 func_8010A2AC(PlayState* play) { - if (func_8010A238(play) == -1) { +/** + * Checks if the current scene is in a set of overworld scenes. + * @return true if the current scene is in the set, false otherwise. + */ +s32 Map_IsInUnkOverworldArea(PlayState* play) { + if (Map_GetUnkOverworldAreaIndex(play) == -1) { return false; } @@ -137,15 +152,15 @@ s32 func_8010A2AC(PlayState* play) { } /** - * When a room is loaded, this function is used to save the player's position and rotation - * so that the red arrow on the minimap can be drawn correctly. + * Sets the position and rotation of where the player has entered the area. + * Used to draw the red marker on the minimap. */ -void Minimap_SavePlayerRoomInitInfo(PlayState* play) { +void Map_SetAreaEntrypoint(PlayState* play) { Player* player = GET_PLAYER(play); - sMinimapInitPosX = player->actor.world.pos.x; - sMinimapInitPosZ = player->actor.world.pos.z; - sMinimapInitDir = (0x7FFF - player->actor.shape.rot.y) / 0x400; + sPlayerInitPosX = player->actor.world.pos.x; + sPlayerInitPosZ = player->actor.world.pos.z; + sPlayerInitDir = (0x7FFF - player->actor.shape.rot.y) / 0x400; } void Map_InitRoomData(PlayState* play, s16 room) { @@ -156,8 +171,7 @@ void Map_InitRoomData(PlayState* play, s16 room) { if (room >= 0) { if (Map_IsInDungeonOrBossArea(play)) { - gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].rooms |= - gBitFlags[room]; + SET_ROOM_VISITED(Play_GetOriginalSceneId(play->sceneId), room); interfaceCtx->mapRoomNum = room; interfaceCtx->dungeonOrBossAreaMapIndex = mapIndex; } @@ -182,14 +196,13 @@ void Map_Init(PlayState* play) { interfaceCtx->unk_278 = -1; interfaceCtx->dungeonOrBossAreaMapIndex = -1; interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.tha, 0x1000); - if (func_8010A2AC(play)) { - gSaveContext.mapIndex = func_8010A238(play); + if (Map_IsInUnkOverworldArea(play)) { + gSaveContext.mapIndex = Map_GetUnkOverworldAreaIndex(play); return; } if (Map_IsInDungeonOrBossArea(play)) { - dungeonIndex = Map_GetDungeonOrBossAreaIndex(play); - gSaveContext.mapIndex = dungeonIndex; + gSaveContext.mapIndex = dungeonIndex = Map_GetDungeonOrBossAreaIndex(play); switch (play->sceneId) { case SCENE_MITURIN_BS: dungeonIndex = DUNGEON_INDEX_WOODFALL_TEMPLE; @@ -213,8 +226,8 @@ void Map_Init(PlayState* play) { } } -void Minimap_Draw(PlayState* play) { - func_80106644(play, sMinimapInitPosX, sMinimapInitPosZ, sMinimapInitDir); +void Map_DrawMinimap(PlayState* play) { + MapDisp_DrawMinimap(play, sPlayerInitPosX, sPlayerInitPosZ, sPlayerInitDir); } s16 sLastRoomNum = 99; @@ -228,7 +241,7 @@ void Map_Update(PlayState* play) { s32 pad2; if ((play->pauseCtx.state <= PAUSE_STATE_OPENING_2) && (CHECK_BTN_ALL(controller->press.button, BTN_L)) && - !Play_InCsMode(play) && !func_80106530(play)) { + !Play_InCsMode(play) && !MapDisp_IsMinimapToggleBlocked(play)) { if (!R_MINIMAP_DISABLED) { Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); } else { @@ -238,22 +251,21 @@ void Map_Update(PlayState* play) { R_MINIMAP_DISABLED ^= 1; } - func_80105B34(play); + MapDisp_Update(play); if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { - if (Map_IsInDungeonArea(play)) { - floor = func_80109124(player->actor.world.pos.y); + if (Map_IsInDungeonScene(play)) { + floor = MapDisp_GetPlayerStorey(player->actor.world.pos.y); if (floor != -1) { - gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].unk_14 |= - gBitFlags[FLOOR_INDEX_MAX - floor]; - R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - floor; + SET_DUNGEON_FLOOR_VISITED(Play_GetOriginalSceneId(play->sceneId), FLOOR_INDEX_MAX - floor); + R_PLAYER_FLOOR_REVERSE_INDEX = FLOOR_INDEX_MAX - floor; if (interfaceCtx->mapRoomNum != sLastRoomNum) { sLastRoomNum = interfaceCtx->mapRoomNum; } } - } else if (Map_IsInBossArea(play)) { - func_80105294(); - R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - func_80105318(); + } else if (Map_IsInBossScene(play)) { + MapDisp_GetBossIconY(); + R_PLAYER_FLOOR_REVERSE_INDEX = FLOOR_INDEX_MAX - MapDisp_GetBossRoomStorey(); } } } diff --git a/src/code/z_message.c b/src/code/z_message.c index 3fb8f5bac..02a70b27a 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -2118,7 +2118,7 @@ void Message_LoadOwlWarpText(PlayState* play, s32* offset, f32* arg2, s16* decod s16 owlWarpId; s16 i; - if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) { + if (MapExp_CurRoomHasMapI(play) || (play->sceneId == SCENE_SECOM)) { owlWarpId = OWL_WARP_ENTRANCE; } else { owlWarpId = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; @@ -5679,7 +5679,7 @@ void Message_Update(PlayState* play) { if (sLastPlayedSong == OCARINA_SONG_SOARING) { if (interfaceCtx->restrictions.songOfSoaring == 0) { - if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) { + if (MapExp_CurRoomHasMapI(play) || (play->sceneId == SCENE_SECOM)) { Message_StartTextbox(play, 0x1B93, NULL); play->msgCtx.ocarinaMode = OCARINA_MODE_1B; sLastPlayedSong = 0xFF; diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index 3775b5b26..2b6afbb68 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -280,7 +280,7 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de s16 owlWarpId; s16 stringLimit; - if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) { + if (MapExp_CurRoomHasMapI(play) || (play->sceneId == SCENE_SECOM)) { owlWarpId = OWL_WARP_ENTRANCE; } else { owlWarpId = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP]; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index cbfcd0481..4f553860b 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -6398,7 +6398,7 @@ void Interface_Draw(PlayState* play) { } Magic_DrawMeter(play); - Minimap_Draw(play); + Map_DrawMinimap(play); if ((R_PAUSE_BG_PRERENDER_STATE != 2) && (R_PAUSE_BG_PRERENDER_STATE != 3)) { Target_Draw(&play->actorCtx.targetCtx, play); diff --git a/src/code/z_room.c b/src/code/z_room.c index 30e1154d1..23670affb 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -618,7 +618,7 @@ void func_8012EBF8(PlayState* play, RoomContext* roomCtx) { Actor_SpawnTransitionActors(play, &play->actorCtx); if (roomCtx->curRoom.num > -1) { Map_InitRoomData(play, roomCtx->curRoom.num); - Minimap_SavePlayerRoomInitInfo(play); + Map_SetAreaEntrypoint(play); } func_801A3CD8(play->roomCtx.curRoom.echo); } diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 059fbfb0d..074a4891a 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -336,7 +336,7 @@ void Scene_CommandPathList(PlayState* play, SceneCmd* cmd) { void Scene_CommandTransitionActorList(PlayState* play, SceneCmd* cmd) { play->transitionActors.count = cmd->transitionActorList.num; play->transitionActors.list = Lib_SegmentedToVirtual(cmd->transitionActorList.segment); - func_80105818(play, play->transitionActors.count, play->transitionActors.list); + MapDisp_InitTransitionActorData(play, play->transitionActors.count, play->transitionActors.list); } // Init function for the transition system. @@ -494,19 +494,19 @@ void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd) { CutsceneManager_Init(play, Lib_SegmentedToVirtual(cmd->cutsceneList.segment), cmd->cutsceneList.num); } -// SceneTableEntry Header Command 0x1C: Mini Maps +// SceneTableEntry Header Command 0x1C: Map Data void Scene_CommandMiniMap(PlayState* play, SceneCmd* cmd) { MapDisp_Init(play); - func_8010549C(play, cmd->minimapSettings.segment); + MapDisp_InitMapData(play, cmd->mapData.segment); } // SceneTableEntry Header Command 0x1D: Undefined void Scene_Command1D(PlayState* play, SceneCmd* cmd) { } -// SceneTableEntry Header Command 0x1E: Minimap Compass Icon Info +// SceneTableEntry Header Command 0x1E: Map Data Chests void Scene_CommandMiniMapCompassInfo(PlayState* play, SceneCmd* cmd) { - func_8010565C(play, cmd->minimapChests.num, cmd->minimapChests.segment); + MapDisp_InitChestData(play, cmd->mapDataChests.num, cmd->mapDataChests.segment); } // SceneTableEntry Header Command 0x19: Sets Region Visited Flag diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index eff3968da..cface01f5 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -10876,7 +10876,7 @@ void Player_Init(Actor* thisx, PlayState* play) { } } - Minimap_SavePlayerRoomInitInfo(play); + Map_SetAreaEntrypoint(play); func_80841A50(play, this); this->unk_3CF = 0; R_PLAY_FILL_SCREEN_ON = 0; @@ -13719,7 +13719,7 @@ void Player_Action_1(Player* this, PlayState* play) { } else if (this->actionVar2 < 0) { if (Room_StartRoomTransition(play, &play->roomCtx, this->actionVar1)) { Map_InitRoomData(play, play->roomCtx.curRoom.num); - Minimap_SavePlayerRoomInitInfo(play); + Map_SetAreaEntrypoint(play); this->actionVar2 = 5; } } else if (this->actionVar2 > 0) { @@ -15248,7 +15248,7 @@ void Player_Action_35(Player* this, PlayState* play) { (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) { if (this->unk_397 == 4) { Map_InitRoomData(play, play->roomCtx.curRoom.num); - Minimap_SavePlayerRoomInitInfo(play); + Map_SetAreaEntrypoint(play); } R_PLAY_FILL_SCREEN_ON = 0; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c index ec1ca83ec..9209510a8 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c @@ -268,7 +268,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { } } - func_80108AF8(play); + MapDisp_DrawDungeonFloorSelect(play); if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { // If (pauseCtx->state == PAUSE_STATE_MAIN), then the other conditions are redundant and always return @@ -283,12 +283,13 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { // Draw Player's face next to the dungeon floor icon currently in. POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, gQuestIconLinkHumanFaceTex, 16, 16, 62, - sDungeonMapFloorIconPosY[R_REVERSE_FLOOR_INDEX], 16, 16, 1 << 10, 1 << 10); + sDungeonMapFloorIconPosY[R_PLAYER_FLOOR_REVERSE_INDEX], 16, 16, 1 << 10, 1 << 10); + // Draw skull face next to the dungeon floor icon the boss is located at. if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.dungeonIndex)) { - POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, gDungeonMapSkullTex, 16, 16, 108, - sDungeonMapFloorIconPosY[FLOOR_INDEX_MAX - func_80105318()], 16, - 16, 1 << 10, 1 << 10); + POLY_OPA_DISP = Gfx_DrawTexRectRGBA16( + POLY_OPA_DISP, gDungeonMapSkullTex, 16, 16, 108, + sDungeonMapFloorIconPosY[FLOOR_INDEX_MAX - MapDisp_GetBossRoomStorey()], 16, 16, 1 << 10, 1 << 10); } gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -320,8 +321,8 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorXIndex[PAUSE_MAP] = 0; - pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256; - pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256; + pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem; + pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem; } else if (pauseCtx->cursorSpecialPos == 0) { if (pauseCtx->cursorXIndex[PAUSE_MAP] == 0) { pauseCtx->cursorXIndex[PAUSE_MAP] = 1; @@ -366,8 +367,8 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT); } else if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES) { pauseCtx->cursorXIndex[PAUSE_MAP] = 0; - pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256; - pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256; + pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem; + pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem; } else { while (true) { pauseCtx->cursorPoint[PAUSE_MAP]--; @@ -385,9 +386,8 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { } else if ((pauseCtx->cursorSpecialPos == 0) && (pauseCtx->stickAdjY > 30)) { if (pauseCtx->cursorPoint[PAUSE_MAP] >= DUNGEON_FLOOR_INDEX_4) { for (i = pauseCtx->cursorPoint[PAUSE_MAP] - (DUNGEON_FLOOR_INDEX_4 + 1); i >= 0; i--) { - if ((gSaveContext.save.saveInfo.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 & - gBitFlags[i]) || - func_801090B0(FLOOR_INDEX_MAX - i)) { + if (GET_DUNGEON_FLOOR_VISITED(((void)0, gSaveContext.dungeonIndex), i) || + MapDisp_IsValidStorey(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; pauseCtx->cursorShrinkRate = 4.0f; break; @@ -395,8 +395,8 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { } } else if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES) { pauseCtx->cursorXIndex[PAUSE_MAP] = 0; - pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256; - pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256; + pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem; + pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem; } else { pauseCtx->cursorSlot[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES; pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES; @@ -406,9 +406,8 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { (pauseCtx->cursorPoint[PAUSE_MAP] <= DUNGEON_FLOOR_INDEX_1)) { for (i = pauseCtx->cursorPoint[PAUSE_MAP] - (DUNGEON_FLOOR_INDEX_4 - 1); i <= DUNGEON_FLOOR_INDEX_0; i++) { - if ((gSaveContext.save.saveInfo.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 & - gBitFlags[i]) || - func_801090B0(FLOOR_INDEX_MAX - i)) { + if (GET_DUNGEON_FLOOR_VISITED(((void)0, gSaveContext.dungeonIndex), i) || + MapDisp_IsValidStorey(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; pauseCtx->cursorShrinkRate = 4.0f; break; @@ -448,7 +447,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { } if ((pauseCtx->cursorXIndex[PAUSE_MAP] == 0) && (pauseCtx->cursorSpecialPos == 0)) { - pauseCtx->unk_256 = pauseCtx->cursorPoint[PAUSE_MAP]; + pauseCtx->cursorMapDungeonItem = pauseCtx->cursorPoint[PAUSE_MAP]; } if (pauseCtx->cursorSpecialPos == 0) { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index b21492fbd..65d662c3a 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -561,7 +561,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { KaleidoScope_DrawDungeonMap(play); Gfx_SetupDL42_Opa(gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - func_801091F0(play); + MapDisp_DrawDungeonMap(play); } else { KaleidoScope_DrawWorldMap(play); } @@ -658,7 +658,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - func_801091F0(play); + MapDisp_DrawDungeonMap(play); } else { Matrix_RotateYF(R_PAUSE_WORLD_MAP_YAW / 1000.0f, MTXMODE_NEW); @@ -2833,7 +2833,7 @@ void KaleidoScope_Update(PlayState* play) { s16 stepA; s16 stickAdjX = input->rel.stick_x; - func_80109428(play); + MapDisp_UpdateDungeonMap(play); pauseCtx->stickAdjX = input->rel.stick_x; pauseCtx->stickAdjY = input->rel.stick_y; @@ -2850,8 +2850,9 @@ void KaleidoScope_Update(PlayState* play) { sUnpausedButtonStatus[EQUIP_SLOT_A] = gSaveContext.buttonStatus[EQUIP_SLOT_A]; pauseCtx->cursorXIndex[PAUSE_MAP] = 0; - pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4; - pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256 = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4; + pauseCtx->cursorSlot[PAUSE_MAP] = R_PLAYER_FLOOR_REVERSE_INDEX + DUNGEON_FLOOR_INDEX_4; + pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem = + R_PLAYER_FLOOR_REVERSE_INDEX + DUNGEON_FLOOR_INDEX_4; sPauseCursorLeftX = -175; sPauseCursorRightX = 155; @@ -2875,12 +2876,12 @@ void KaleidoScope_Update(PlayState* play) { size1); pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1); - if (func_8010A0A4(play)) { + if (MapExp_CurRoomHasMapI(play)) { size_t size = SEGMENT_ROM_SIZE(icon_item_dungeon_static); DmaMgr_SendRequest0(pauseCtx->iconItemAltSegment, SEGMENT_ROM_START(icon_item_dungeon_static), size); iconItemLangSegment = - func_801068FC(play, (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size)); + MapDisp_AllocDungeonMap(play, (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size)); sInDungeonScene = true; } else { size_t size; @@ -3178,8 +3179,8 @@ void KaleidoScope_Update(PlayState* play) { break; case PAUSE_STATE_GAMEOVER_2: - pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4; - pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4; + pauseCtx->cursorSlot[PAUSE_MAP] = R_PLAYER_FLOOR_REVERSE_INDEX + DUNGEON_FLOOR_INDEX_4; + pauseCtx->cursorPoint[PAUSE_MAP] = R_PLAYER_FLOOR_REVERSE_INDEX + DUNGEON_FLOOR_INDEX_4; sPauseCursorLeftX = -175; sPauseCursorRightX = 155; pauseCtx->roll = -434.0f; @@ -3428,8 +3429,9 @@ void KaleidoScope_Update(PlayState* play) { sUnpausedButtonStatus[EQUIP_SLOT_A] = gSaveContext.buttonStatus[EQUIP_SLOT_A]; pauseCtx->cursorXIndex[PAUSE_MAP] = 0; - pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4; - pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256 = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4; + pauseCtx->cursorSlot[PAUSE_MAP] = R_PLAYER_FLOOR_REVERSE_INDEX + DUNGEON_FLOOR_INDEX_4; + pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->cursorMapDungeonItem = + R_PLAYER_FLOOR_REVERSE_INDEX + DUNGEON_FLOOR_INDEX_4; sPauseCursorLeftX = -175; sPauseCursorRightX = 155; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c978a43d4..7cfeca2dc 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1902,59 +1902,59 @@ 0x80102DEC:("ZeldaArena_Cleanup",), 0x80102E10:("ZeldaArena_IsInitialized",), 0x80102E40:("MapDisp_GetMapITexture",), - 0x80102E90:("func_80102E90",), - 0x80102EA4:("func_80102EA4",), + 0x80102E90:("MapDisp_InitRoomStoreyRecord",), + 0x80102EA4:("MapDisp_DestroyRoomStoreyRecord",), 0x80102EB4:("func_80102EB4",), 0x80102ED0:("func_80102ED0",), - 0x80102EF0:("func_80102EF0",), - 0x80102F9C:("func_80102F9C",), + 0x80102EF0:("MapDisp_CurRoomHasMapI",), + 0x80102F9C:("MapDisp_GetStoreyY",), 0x80103090:("MapDisp_GetMapTexDim",), 0x801030B4:("MapDisp_GetMapScale",), - 0x801030F4:("MapDisp_GetMapPos",), - 0x801031D0:("func_801031D0",), + 0x801030F4:("MapDisp_GetMapOffset",), + 0x801031D0:("MapDisp_DrawMinimapRoom",), 0x801039EC:("MapDisp_IsDataRotated",), - 0x80103A10:("func_80103A10",), - 0x80103A58:("func_80103A58",), - 0x8010439C:("func_8010439C",), - 0x801045AC:("func_801045AC",), - 0x80104AE8:("func_80104AE8",), - 0x80104C80:("func_80104C80",), + 0x80103A10:("MapDisp_CanDrawDoors",), + 0x80103A58:("MapDisp_Minimap_DrawActorIcon",), + 0x8010439C:("MapDisp_Minimap_DrawActors",), + 0x801045AC:("MapDisp_Minimap_DrawDoorActor",), + 0x80104AE8:("MapDisp_Minimap_DrawDoorActors",), + 0x80104C80:("MapDisp_AwaitGameplayDangeonKeep",), 0x80104CF4:("MapDisp_Init",), - 0x80104F34:("func_80104F34",), - 0x80105294:("func_80105294",), - 0x80105318:("func_80105318",), - 0x80105328:("func_80105328",), - 0x8010534C:("func_8010534C",), - 0x8010549C:("func_8010549C",), - 0x8010565C:("func_8010565C",), - 0x80105818:("func_80105818",), + 0x80104F34:("MapDisp_InitSceneFloorData",), + 0x80105294:("MapDisp_GetBossIconY",), + 0x80105318:("MapDisp_GetBossRoomStorey",), + 0x80105328:("MapDisp_IsBossDoor",), + 0x8010534C:("MapDisp_InitBossRoomStorey",), + 0x8010549C:("MapDisp_InitMapData",), + 0x8010565C:("MapDisp_InitChestData",), + 0x80105818:("MapDisp_InitTransitionActorData",), 0x80105A40:("MapDisp_Destroy",), - 0x80105B34:("func_80105B34",), + 0x80105B34:("MapDisp_Update",), 0x80105C40:("MapDisp_SwapRooms",), - 0x80105FE0:("func_80105FE0",), - 0x80106408:("func_80106408",), - 0x80106450:("func_80106450",), - 0x801064CC:("func_801064CC",), - 0x80106530:("func_80106530",), - 0x8010657C:("func_8010657C",), - 0x80106644:("func_80106644",), + 0x80105FE0:("MapDisp_Minimap_DrawRedCompassIcon",), + 0x80106408:("MapDisp_IsLocationRomaniRanchCutscene",), + 0x80106450:("MapDisp_CanDisplayMinimap",), + 0x801064CC:("MapDisp_IsLocationMinimapBlocked",), + 0x80106530:("MapDisp_IsMinimapToggleBlocked",), + 0x8010657C:("MapDisp_AreRoomsSameStorey",), + 0x80106644:("MapDisp_DrawMinimap",), 0x8010683C:("MapDisp_ResetIMap",), 0x801068B4:("MapDisp_InitMapI",), 0x801068D8:("MapDisp_DestroyMapI",), - 0x801068FC:("func_801068FC",), - 0x80106BEC:("func_80106BEC",), + 0x801068FC:("MapDisp_AllocDungeonMap",), + 0x80106BEC:("MapDisp_IsOnStorey",), 0x80106D08:("MapDisp_ConvertBossSceneToDungeonScene",), - 0x80106D5C:("func_80106D5C",), - 0x80107B78:("func_80107B78",), - 0x80108124:("func_80108124",), - 0x80108558:("func_80108558",), + 0x80106D5C:("MapDisp_DrawRooms",), + 0x80107B78:("MapDisp_DrawChests",), + 0x80108124:("MapDisp_DrawRoomExits",), + 0x80108558:("MapDisp_DrawBossIcon",), 0x80108A10:("MapDisp_GetDungeonMapFloorTexture",), - 0x80108A64:("func_80108A64",), - 0x80108AF8:("func_80108AF8",), - 0x801090B0:("func_801090B0",), - 0x80109124:("func_80109124",), - 0x801091F0:("func_801091F0",), - 0x80109428:("func_80109428",), + 0x80108A64:("MapDisp_SkipDrawDungeonMap",), + 0x80108AF8:("MapDisp_DrawDungeonFloorSelect",), + 0x801090B0:("MapDisp_IsValidStorey",), + 0x80109124:("MapDisp_GetPlayerStorey",), + 0x801091F0:("MapDisp_DrawDungeonMap",), + 0x80109428:("MapDisp_UpdateDungeonMap",), 0x801094A0:("MapData_GetMapColor",), 0x801094C8:("func_801094C8",), 0x801094F8:("MapData_GetMapTexOffsetGameplayDangeonKeep",), @@ -1996,18 +1996,18 @@ 0x80109F78:("MapData_CPID_GetMapScale",), 0x8010A000:("Map_GetDungeonOrBossAreaIndex",), 0x8010A074:("Map_IsInDungeonOrBossAreaArea",), - 0x8010A0A4:("func_8010A0A4",), + 0x8010A0A4:("MapExp_CurRoomHasMapI",), 0x8010A0F0:("Map_GetDungeonAreaIndex",), - 0x8010A164:("Map_IsInDungeonArea",), + 0x8010A164:("Map_IsInDungeonScene",), 0x8010A194:("Map_GetBossAreaIndex",), - 0x8010A208:("Map_IsInBossArea",), - 0x8010A238:("func_8010A238",), - 0x8010A2AC:("func_8010A2AC",), - 0x8010A2DC:("Minimap_SavePlayerRoomInitInfo",), + 0x8010A208:("Map_IsInBossScene",), + 0x8010A238:("Map_GetUnkOverworldAreaIndex",), + 0x8010A2AC:("Map_IsInUnkOverworldArea",), + 0x8010A2DC:("Map_SetAreaEntrypoint",), 0x8010A33C:("Map_InitRoomData",), 0x8010A410:("Map_Destroy",), 0x8010A430:("Map_Init",), - 0x8010A54C:("Minimap_Draw",), + 0x8010A54C:("Map_DrawMinimap",), 0x8010A580:("Map_Update",), 0x8010A760:("func_8010A760",), 0x8010A7CC:("func_8010A7CC",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index e827800d2..f9a855b5a 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -993,11 +993,11 @@ 0x801BEB10:("D_801BEB10","u32","[4]",0x10), 0x801BEB20:("D_801BEB20","u32","[4]",0x10), 0x801BEB38:("sWhiteSquareTex","UNK_TYPE1","",0x1), - 0x801BEBB8:("D_801BEBB8","UNK_TYPE4","",0x40), + 0x801BEBB8:("sMapDisp","UNK_TYPE4","",0x40), 0x801BEBF8:("D_801BEBF8","UNK_TYPE2","",0x2), 0x801BEBFA:("D_801BEBFA","UNK_TYPE2","",0x2), 0x801BEBFC:("D_801BEBFC","UNK_TYPE2","",0x18), - 0x801BEC14:("D_801BEC14","MinimapList","",0x8), + 0x801BEC14:("sMapDataScene","MinimapList","",0x8), 0x801BEC1C:("sSceneNumRooms","s32","",0x4), 0x801BEC20:("sNumChests","s32","",0x4), 0x801BEC24:("D_801BEC24","UNK_TYPE1","",0x8), @@ -3900,10 +3900,10 @@ 0x801F4F6A:("D_801F4F6A","UNK_TYPE1","",0x1), 0x801F4F70:("sLightsBuffer","LightsBuffer","",0x188), 0x801F5100:("sZeldaArena","Arena","",0x24), - 0x801F5130:("D_801F5130","UNK_TYPE1","",0x1), - 0x801F5270:("D_801F5270","UNK_TYPE1","",0x140), - 0x801F53B0:("D_801F53B0","UNK_TYPE1","",0x1), - 0x801F56B0:("D_801F56B0","struct_801F56B0","",0x188), + 0x801F5130:("sMapDataRooms","UNK_TYPE1","",0x1), + 0x801F5270:("sMapDataChests","UNK_TYPE1","",0x140), + 0x801F53B0:("sTransitionActors","UNK_TYPE1","",0x1), + 0x801F56B0:("sPauseDungeonMap","PauseDungeonMap","",0x188), 0x801F5840:("gNMIBuffer","s32*","",0x4), 0x801F5850:("sPostmanTimerInput","UNK_TYPE1","",0x1), 0x801F58B0:("D_801F58B0","struct_801F58B0","[3][3]",0xFC), diff --git a/tools/namefixer.py b/tools/namefixer.py index 698fd6950..8de24f974 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -852,13 +852,16 @@ wordReplace = { "func_8010A074": "Map_IsInDungeonOrBossArea", "func_8010A0F0": "Map_GetDungeonAreaIndex", "func_8010A164": "Map_IsInDungeonArea", + "Map_IsInDungeonArea": "Map_IsInDungeonScene", "func_8010A194": "Map_GetBossAreaIndex", "func_8010A208": "Map_IsInBossArea", + "Map_IsInBossArea": "Map_IsInBossScene", "func_8010A2DC": "Minimap_SavePlayerRoomInitInfo", "func_8010A33C": "Map_InitRoomData", "func_8010A410": "Map_Destroy", "func_8010A430": "Map_Init", "func_8010A54C": "Minimap_Draw", + "Minimap_Draw": "Map_DrawMinimap", "func_8010A580": "Map_Update", "Entrance_CreateIndex": "Entrance_Create", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 0b55a55d7..8bcd16927 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1416,59 +1416,59 @@ asm/non_matchings/code/z_malloc/ZeldaArena_Init.s,ZeldaArena_Init,0x80102DBC,0xC asm/non_matchings/code/z_malloc/ZeldaArena_Cleanup.s,ZeldaArena_Cleanup,0x80102DEC,0x9 asm/non_matchings/code/z_malloc/ZeldaArena_IsInitialized.s,ZeldaArena_IsInitialized,0x80102E10,0xC asm/non_matchings/code/z_map_disp/MapDisp_GetMapITexture.s,MapDisp_GetMapITexture,0x80102E40,0x14 -asm/non_matchings/code/z_map_disp/func_80102E90.s,func_80102E90,0x80102E90,0x5 -asm/non_matchings/code/z_map_disp/func_80102EA4.s,func_80102EA4,0x80102EA4,0x4 +asm/non_matchings/code/z_map_disp/MapDisp_InitRoomStoreyRecord.s,MapDisp_InitRoomStoreyRecord,0x80102E90,0x5 +asm/non_matchings/code/z_map_disp/MapDisp_DestroyRoomStoreyRecord.s,MapDisp_DestroyRoomStoreyRecord,0x80102EA4,0x4 asm/non_matchings/code/z_map_disp/func_80102EB4.s,func_80102EB4,0x80102EB4,0x7 asm/non_matchings/code/z_map_disp/func_80102ED0.s,func_80102ED0,0x80102ED0,0x8 -asm/non_matchings/code/z_map_disp/func_80102EF0.s,func_80102EF0,0x80102EF0,0x2B -asm/non_matchings/code/z_map_disp/func_80102F9C.s,func_80102F9C,0x80102F9C,0x3D +asm/non_matchings/code/z_map_disp/MapDisp_CurRoomHasMapI.s,MapDisp_CurRoomHasMapI,0x80102EF0,0x2B +asm/non_matchings/code/z_map_disp/MapDisp_GetStoreyY.s,MapDisp_GetStoreyY,0x80102F9C,0x3D asm/non_matchings/code/z_map_disp/MapDisp_GetMapTexDim.s,MapDisp_GetMapTexDim,0x80103090,0x9 asm/non_matchings/code/z_map_disp/MapDisp_GetMapScale.s,MapDisp_GetMapScale,0x801030B4,0x10 -asm/non_matchings/code/z_map_disp/MapDisp_GetMapPos.s,MapDisp_GetMapPos,0x801030F4,0x37 -asm/non_matchings/code/z_map_disp/func_801031D0.s,func_801031D0,0x801031D0,0x207 +asm/non_matchings/code/z_map_disp/MapDisp_GetMapOffset.s,MapDisp_GetMapOffset,0x801030F4,0x37 +asm/non_matchings/code/z_map_disp/MapDisp_DrawMinimapRoom.s,MapDisp_DrawMinimapRoom,0x801031D0,0x207 asm/non_matchings/code/z_map_disp/MapDisp_IsDataRotated.s,MapDisp_IsDataRotated,0x801039EC,0x9 -asm/non_matchings/code/z_map_disp/func_80103A10.s,func_80103A10,0x80103A10,0x12 -asm/non_matchings/code/z_map_disp/func_80103A58.s,func_80103A58,0x80103A58,0x251 -asm/non_matchings/code/z_map_disp/func_8010439C.s,func_8010439C,0x8010439C,0x84 -asm/non_matchings/code/z_map_disp/func_801045AC.s,func_801045AC,0x801045AC,0x14F -asm/non_matchings/code/z_map_disp/func_80104AE8.s,func_80104AE8,0x80104AE8,0x66 -asm/non_matchings/code/z_map_disp/func_80104C80.s,func_80104C80,0x80104C80,0x1D +asm/non_matchings/code/z_map_disp/MapDisp_CanDrawDoors.s,MapDisp_CanDrawDoors,0x80103A10,0x12 +asm/non_matchings/code/z_map_disp/MapDisp_Minimap_DrawActorIcon.s,MapDisp_Minimap_DrawActorIcon,0x80103A58,0x251 +asm/non_matchings/code/z_map_disp/MapDisp_Minimap_DrawActors.s,MapDisp_Minimap_DrawActors,0x8010439C,0x84 +asm/non_matchings/code/z_map_disp/MapDisp_Minimap_DrawDoorActor.s,MapDisp_Minimap_DrawDoorActor,0x801045AC,0x14F +asm/non_matchings/code/z_map_disp/MapDisp_Minimap_DrawDoorActors.s,MapDisp_Minimap_DrawDoorActors,0x80104AE8,0x66 +asm/non_matchings/code/z_map_disp/MapDisp_AwaitGameplayDangeonKeep.s,MapDisp_AwaitGameplayDangeonKeep,0x80104C80,0x1D asm/non_matchings/code/z_map_disp/MapDisp_Init.s,MapDisp_Init,0x80104CF4,0x90 -asm/non_matchings/code/z_map_disp/func_80104F34.s,func_80104F34,0x80104F34,0xD8 -asm/non_matchings/code/z_map_disp/func_80105294.s,func_80105294,0x80105294,0x21 -asm/non_matchings/code/z_map_disp/func_80105318.s,func_80105318,0x80105318,0x4 -asm/non_matchings/code/z_map_disp/func_80105328.s,func_80105328,0x80105328,0x9 -asm/non_matchings/code/z_map_disp/func_8010534C.s,func_8010534C,0x8010534C,0x54 -asm/non_matchings/code/z_map_disp/func_8010549C.s,func_8010549C,0x8010549C,0x70 -asm/non_matchings/code/z_map_disp/func_8010565C.s,func_8010565C,0x8010565C,0x6F -asm/non_matchings/code/z_map_disp/func_80105818.s,func_80105818,0x80105818,0x8A +asm/non_matchings/code/z_map_disp/MapDisp_InitSceneFloorData.s,MapDisp_InitSceneFloorData,0x80104F34,0xD8 +asm/non_matchings/code/z_map_disp/MapDisp_GetBossIconY.s,MapDisp_GetBossIconY,0x80105294,0x21 +asm/non_matchings/code/z_map_disp/MapDisp_GetBossRoomStorey.s,MapDisp_GetBossRoomStorey,0x80105318,0x4 +asm/non_matchings/code/z_map_disp/MapDisp_IsBossDoor.s,MapDisp_IsBossDoor,0x80105328,0x9 +asm/non_matchings/code/z_map_disp/MapDisp_InitBossRoomStorey.s,MapDisp_InitBossRoomStorey,0x8010534C,0x54 +asm/non_matchings/code/z_map_disp/MapDisp_InitMapData.s,MapDisp_InitMapData,0x8010549C,0x70 +asm/non_matchings/code/z_map_disp/MapDisp_InitChestData.s,MapDisp_InitChestData,0x8010565C,0x6F +asm/non_matchings/code/z_map_disp/MapDisp_InitTransitionActorData.s,MapDisp_InitTransitionActorData,0x80105818,0x8A asm/non_matchings/code/z_map_disp/MapDisp_Destroy.s,MapDisp_Destroy,0x80105A40,0x3D -asm/non_matchings/code/z_map_disp/func_80105B34.s,func_80105B34,0x80105B34,0x43 +asm/non_matchings/code/z_map_disp/MapDisp_Update.s,MapDisp_Update,0x80105B34,0x43 asm/non_matchings/code/z_map_disp/MapDisp_SwapRooms.s,MapDisp_SwapRooms,0x80105C40,0xE8 -asm/non_matchings/code/z_map_disp/func_80105FE0.s,func_80105FE0,0x80105FE0,0x10A -asm/non_matchings/code/z_map_disp/func_80106408.s,func_80106408,0x80106408,0x12 -asm/non_matchings/code/z_map_disp/func_80106450.s,func_80106450,0x80106450,0x1F -asm/non_matchings/code/z_map_disp/func_801064CC.s,func_801064CC,0x801064CC,0x19 -asm/non_matchings/code/z_map_disp/func_80106530.s,func_80106530,0x80106530,0x13 -asm/non_matchings/code/z_map_disp/func_8010657C.s,func_8010657C,0x8010657C,0x32 -asm/non_matchings/code/z_map_disp/func_80106644.s,func_80106644,0x80106644,0x7E +asm/non_matchings/code/z_map_disp/MapDisp_Minimap_DrawRedCompassIcon.s,MapDisp_Minimap_DrawRedCompassIcon,0x80105FE0,0x10A +asm/non_matchings/code/z_map_disp/MapDisp_IsLocationRomaniRanchCutscene.s,MapDisp_IsLocationRomaniRanchCutscene,0x80106408,0x12 +asm/non_matchings/code/z_map_disp/MapDisp_CanDisplayMinimap.s,MapDisp_CanDisplayMinimap,0x80106450,0x1F +asm/non_matchings/code/z_map_disp/MapDisp_IsLocationMinimapBlocked.s,MapDisp_IsLocationMinimapBlocked,0x801064CC,0x19 +asm/non_matchings/code/z_map_disp/MapDisp_IsMinimapToggleBlocked.s,MapDisp_IsMinimapToggleBlocked,0x80106530,0x13 +asm/non_matchings/code/z_map_disp/MapDisp_AreRoomsSameStorey.s,MapDisp_AreRoomsSameStorey,0x8010657C,0x32 +asm/non_matchings/code/z_map_disp/MapDisp_DrawMinimap.s,MapDisp_DrawMinimap,0x80106644,0x7E asm/non_matchings/code/z_map_disp/MapDisp_ResetIMap.s,MapDisp_ResetIMap,0x8010683C,0x1E asm/non_matchings/code/z_map_disp/MapDisp_InitMapI.s,MapDisp_InitMapI,0x801068B4,0x9 asm/non_matchings/code/z_map_disp/MapDisp_DestroyMapI.s,MapDisp_DestroyMapI,0x801068D8,0x9 -asm/non_matchings/code/z_map_disp/func_801068FC.s,func_801068FC,0x801068FC,0xBC -asm/non_matchings/code/z_map_disp/func_80106BEC.s,func_80106BEC,0x80106BEC,0x47 +asm/non_matchings/code/z_map_disp/MapDisp_AllocDungeonMap.s,MapDisp_AllocDungeonMap,0x801068FC,0xBC +asm/non_matchings/code/z_map_disp/MapDisp_IsOnStorey.s,MapDisp_IsOnStorey,0x80106BEC,0x47 asm/non_matchings/code/z_map_disp/MapDisp_ConvertBossSceneToDungeonScene.s,MapDisp_ConvertBossSceneToDungeonScene,0x80106D08,0x15 -asm/non_matchings/code/z_map_disp/func_80106D5C.s,func_80106D5C,0x80106D5C,0x387 -asm/non_matchings/code/z_map_disp/func_80107B78.s,func_80107B78,0x80107B78,0x16B -asm/non_matchings/code/z_map_disp/func_80108124.s,func_80108124,0x80108124,0x10D -asm/non_matchings/code/z_map_disp/func_80108558.s,func_80108558,0x80108558,0x12E +asm/non_matchings/code/z_map_disp/MapDisp_DrawRooms.s,MapDisp_DrawRooms,0x80106D5C,0x387 +asm/non_matchings/code/z_map_disp/MapDisp_DrawChests.s,MapDisp_DrawChests,0x80107B78,0x16B +asm/non_matchings/code/z_map_disp/MapDisp_DrawRoomExits.s,MapDisp_DrawRoomExits,0x80108124,0x10D +asm/non_matchings/code/z_map_disp/MapDisp_DrawBossIcon.s,MapDisp_DrawBossIcon,0x80108558,0x12E asm/non_matchings/code/z_map_disp/MapDisp_GetDungeonMapFloorTexture.s,MapDisp_GetDungeonMapFloorTexture,0x80108A10,0x15 -asm/non_matchings/code/z_map_disp/func_80108A64.s,func_80108A64,0x80108A64,0x25 -asm/non_matchings/code/z_map_disp/func_80108AF8.s,func_80108AF8,0x80108AF8,0x16E -asm/non_matchings/code/z_map_disp/func_801090B0.s,func_801090B0,0x801090B0,0x1D -asm/non_matchings/code/z_map_disp/func_80109124.s,func_80109124,0x80109124,0x33 -asm/non_matchings/code/z_map_disp/func_801091F0.s,func_801091F0,0x801091F0,0x8E -asm/non_matchings/code/z_map_disp/func_80109428.s,func_80109428,0x80109428,0x1E +asm/non_matchings/code/z_map_disp/MapDisp_SkipDrawDungeonMap.s,MapDisp_SkipDrawDungeonMap,0x80108A64,0x25 +asm/non_matchings/code/z_map_disp/MapDisp_DrawDungeonFloorSelect.s,MapDisp_DrawDungeonFloorSelect,0x80108AF8,0x16E +asm/non_matchings/code/z_map_disp/MapDisp_IsValidStorey.s,MapDisp_IsValidStorey,0x801090B0,0x1D +asm/non_matchings/code/z_map_disp/MapDisp_GetPlayerStorey.s,MapDisp_GetPlayerStorey,0x80109124,0x33 +asm/non_matchings/code/z_map_disp/MapDisp_DrawDungeonMap.s,MapDisp_DrawDungeonMap,0x801091F0,0x8E +asm/non_matchings/code/z_map_disp/MapDisp_UpdateDungeonMap.s,MapDisp_UpdateDungeonMap,0x80109428,0x1E asm/non_matchings/code/z_map_data/MapData_GetMapColor.s,MapData_GetMapColor,0x801094A0,0xA asm/non_matchings/code/z_map_data/func_801094C8.s,func_801094C8,0x801094C8,0xC asm/non_matchings/code/z_map_data/MapData_GetMapTexOffsetGameplayDangeonKeep.s,MapData_GetMapTexOffsetGameplayDangeonKeep,0x801094F8,0xC @@ -1510,18 +1510,18 @@ asm/non_matchings/code/z_map_data/MapData_CPID_GetMapColorIndex.s,MapData_CPID_G asm/non_matchings/code/z_map_data/MapData_CPID_GetMapScale.s,MapData_CPID_GetMapScale,0x80109F78,0x22 asm/non_matchings/code/z_map_exp/Map_GetDungeonOrBossAreaIndex.s,Map_GetDungeonOrBossAreaIndex,0x8010A000,0x1D asm/non_matchings/code/z_map_exp/Map_IsInDungeonOrBossArea.s,Map_IsInDungeonOrBossArea,0x8010A074,0xC -asm/non_matchings/code/z_map_exp/func_8010A0A4.s,func_8010A0A4,0x8010A0A4,0x13 +asm/non_matchings/code/z_map_exp/MapExp_CurRoomHasMapI.s,MapExp_CurRoomHasMapI,0x8010A0A4,0x13 asm/non_matchings/code/z_map_exp/Map_GetDungeonAreaIndex.s,Map_GetDungeonAreaIndex,0x8010A0F0,0x1D -asm/non_matchings/code/z_map_exp/Map_IsInDungeonArea.s,Map_IsInDungeonArea,0x8010A164,0xC +asm/non_matchings/code/z_map_exp/Map_IsInDungeonScene.s,Map_IsInDungeonScene,0x8010A164,0xC asm/non_matchings/code/z_map_exp/Map_GetBossAreaIndex.s,Map_GetBossAreaIndex,0x8010A194,0x1D -asm/non_matchings/code/z_map_exp/Map_IsInBossArea.s,Map_IsInBossArea,0x8010A208,0xC -asm/non_matchings/code/z_map_exp/func_8010A238.s,func_8010A238,0x8010A238,0x1D -asm/non_matchings/code/z_map_exp/func_8010A2AC.s,func_8010A2AC,0x8010A2AC,0xC -asm/non_matchings/code/z_map_exp/Minimap_SavePlayerRoomInitInfo.s,Minimap_SavePlayerRoomInitInfo,0x8010A2DC,0x18 +asm/non_matchings/code/z_map_exp/Map_IsInBossScene.s,Map_IsInBossScene,0x8010A208,0xC +asm/non_matchings/code/z_map_exp/Map_GetUnkOverworldAreaIndex.s,Map_GetUnkOverworldAreaIndex,0x8010A238,0x1D +asm/non_matchings/code/z_map_exp/Map_IsInUnkOverworldArea.s,Map_IsInUnkOverworldArea,0x8010A2AC,0xC +asm/non_matchings/code/z_map_exp/Map_SetAreaEntrypoint.s,Map_SetAreaEntrypoint,0x8010A2DC,0x18 asm/non_matchings/code/z_map_exp/Map_InitRoomData.s,Map_InitRoomData,0x8010A33C,0x35 asm/non_matchings/code/z_map_exp/Map_Destroy.s,Map_Destroy,0x8010A410,0x8 asm/non_matchings/code/z_map_exp/Map_Init.s,Map_Init,0x8010A430,0x47 -asm/non_matchings/code/z_map_exp/Minimap_Draw.s,Minimap_Draw,0x8010A54C,0xD +asm/non_matchings/code/z_map_exp/Map_DrawMinimap.s,Map_DrawMinimap,0x8010A54C,0xD asm/non_matchings/code/z_map_exp/Map_Update.s,Map_Update,0x8010A580,0x78 asm/non_matchings/code/z_msgevent/func_8010A760.s,func_8010A760,0x8010A760,0x1B asm/non_matchings/code/z_msgevent/func_8010A7CC.s,func_8010A7CC,0x8010A7CC,0x12 From 1d0257c284f41f03670b3d1326aa300db9d6098a Mon Sep 17 00:00:00 2001 From: mzxrules Date: Tue, 31 Oct 2023 14:35:39 -0400 Subject: [PATCH 28/28] first pass of changes --- include/z64map.h | 6 +- include/z64scene.h | 38 +++++----- src/code/z_map_data.c | 12 ++-- src/code/z_map_disp.c | 128 ++++++++++++++++----------------- src/code/z_scene.c | 8 +-- tools/disasm/functions.txt | 4 +- tools/disasm/variables.txt | 5 +- tools/sizes/code_functions.csv | 4 +- undefined_syms.txt | 6 +- 9 files changed, 102 insertions(+), 109 deletions(-) diff --git a/include/z64map.h b/include/z64map.h index e91b53666..3b3d35004 100644 --- a/include/z64map.h +++ b/include/z64map.h @@ -26,8 +26,10 @@ mapCompactId #define FLOOR_MIN_Y -32767 /* z_map_data */ +#define MAPDATA_GAMEPLAY_DANGEON_KEEP_MAX 5 #define MAPDATA_MAP_I_MAX 0x3A #define MAPDATA_MAP_GRAND 0x100 +#define MAPDATA_MAP_GRAND_MAX 0x162 #define MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(id) (id + (MAPDATA_MAP_GRAND - MAPDATA_MAP_I_MAX)) #define MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId) (mapId - MAPDATA_MAP_GRAND) @@ -88,8 +90,8 @@ typedef struct { } PauseDungeonMap; // size = 0x188 /* z_map_disp */ -void func_80102EB4(u32 param_1); -void func_80102ED0(u32 param_1); +void func_80102EB4(u32 flag); +void func_80102ED0(u32 flag); s32 MapDisp_CurRoomHasMapI(struct PlayState* play); void MapDisp_Init(struct PlayState* play); s32 MapDisp_GetBossIconY(void); diff --git a/include/z64scene.h b/include/z64scene.h index f7709aa88..6562d3261 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -116,8 +116,6 @@ typedef struct { /* 0x4 */ void* segment; } SCmdTransitionActorList; // size = 0x8 -#define SCmdTransiActorList SCmdTransitionActorList - typedef struct { /* 0x0 */ u8 code; /* 0x1 */ u8 num; @@ -504,10 +502,13 @@ typedef struct { /* 0x2 */ s16 centerX; /* 0x4 */ s16 floorY; /* 0x6 */ s16 centerZ; - /* 0x8 */ u16 flags; // 1 = mirror x, 2 = mirror y + /* 0x8 */ u16 flags; } MapDataRoom; // size = 0xA -#define MAP_DATA_ROOM_GET_EXTRA_STOREYS(e) ((((e)->flags) >> 2) & 7) +#define MAP_DATA_NO_MAP 0xFFFF +#define MAP_DATA_ROOM_FLIP_X 1 +#define MAP_DATA_ROOM_FLIP_Y 2 +#define MAP_DATA_ROOM_GET_EXTRA_STOREYS(mapDataRoom) ((((mapDataRoom)->flags) >> 2) & 7) typedef struct { /* 0x0 */ MapDataRoom* rooms; @@ -523,11 +524,12 @@ typedef struct { } MapDataChest; // size = 0xA // TODO: ZAPD updates -#define SCmdMinimapSettings SCmdMapData -#define SCmdMinimapChests SCmdMapDataChests -#define MinimapEntry MapDataRoom -#define MinimapList MapDataScene -#define MinimapChest MapDataChest +typedef SCmdMapData SCmdMinimapSettings; +typedef SCmdMapDataChests SCmdMinimapChests; +typedef MapDataRoom MinimapEntry; +typedef MapDataScene MinimapList; +typedef MapDataChest MinimapChest; +typedef SCmdTransitionActorList SCmdTransiActorList; // TODO: consider merging with bgCamInfo? typedef struct { @@ -810,9 +812,9 @@ typedef enum { /* 0x19 */ SCENE_CMD_ID_SET_REGION_VISITED, /* 0x1A */ SCENE_CMD_ID_ANIMATED_MATERIAL_LIST, /* 0x1B */ SCENE_CMD_ID_ACTOR_CUTSCENE_LIST, - /* 0x1C */ SCENE_CMD_ID_MINIMAP_INFO, + /* 0x1C */ SCENE_CMD_ID_MAP_DATA, /* 0x1D */ SCENE_CMD_ID_UNUSED_1D, - /* 0x1E */ SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO, + /* 0x1E */ SCENE_CMD_ID_MAP_DATA_CHESTS, /* 0x1F */ SCENE_CMD_MAX } SceneCommandTypeId; @@ -905,15 +907,17 @@ typedef enum { #define SCENE_CMD_ACTOR_CUTSCENE_LIST(numEntries, actorCutsceneList) \ { SCENE_CMD_ID_ACTOR_CUTSCENE_LIST, numEntries, CMD_PTR(actorCutsceneList) } -#define SCENE_CMD_MINIMAP_INFO(minimapInfo) \ - { SCENE_CMD_ID_MINIMAP_INFO, 0, CMD_PTR(minimapInfo) } +#define SCENE_CMD_MAP_DATA(mapData) \ + { SCENE_CMD_ID_MAP_DATA, 0, CMD_PTR(mapData) } -#define SCENE_CMD_MINIMAP_COMPASS_ICON_INFO(compassIconCount, compassIconInfo) \ - { SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO, compassIconCount, CMD_PTR(compassIconInfo) } +#define SCENE_CMD_MAP_DATA_CHESTS(chestCount, chestInfo) \ + { SCENE_CMD_ID_MAP_DATA_CHESTS, chestCount, CMD_PTR(chestInfo) } // TODO: ZAPD Capatability #define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED #define SCENE_CMD_CUTSCENE_LIST SCENE_CMD_CUTSCENE_SCRIPT_LIST +#define SCENE_CMD_MINIMAP_INFO SCENE_CMD_MAP_DATA +#define SCENE_CMD_MINIMAP_COMPASS_ICON_INFO SCENE_CMD_MAP_DATA_CHESTS s32 Object_SpawnPersistent(ObjectContext* objectCtx, s16 id); void Object_InitContext(struct GameState* gameState, ObjectContext* objectCtx); @@ -949,9 +953,9 @@ void Scene_CommandEchoSetting(struct PlayState* play, SceneCmd* cmd); void Scene_CommandAltHeaderList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandCutsceneScriptList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandCutsceneList(struct PlayState* play, SceneCmd* cmd); -void Scene_CommandMiniMap(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandMapData(struct PlayState* play, SceneCmd* cmd); void Scene_Command1D(struct PlayState* play, SceneCmd* cmd); -void Scene_CommandMiniMapCompassInfo(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandMapDataChests(struct PlayState* play, SceneCmd* cmd); void Scene_CommandSetRegionVisitedFlag(struct PlayState* play, SceneCmd* cmd); void Scene_CommandAnimatedMaterials(struct PlayState* play, SceneCmd* cmd); void Scene_SetExitFade(struct PlayState* play); diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index 3d09648ce..571613a0d 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -30,11 +30,11 @@ static Color_RGBA8 sMapColorTable[] = { }; static MapSpriteInfo2 sGameplayDangeonKeepInfo[5] = { - { &gameplay_dangeon_keep_Tex_0022C8, 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, - { &gameplay_dangeon_keep_Tex_0042C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, - { &gameplay_dangeon_keep_Tex_0052C8, 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, - { &gameplay_dangeon_keep_Tex_0032C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, - { &gameplay_dangeon_keep_Tex_0062C8, 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0022C8, 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0042C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0052C8, 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0032C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0062C8, 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, }; static MapSpriteInfo sMapGrandStaticInfo[98] = { @@ -230,8 +230,6 @@ static s32 sMapIForMapGrand[98] = { MAPDATA_MAP_I_MAX, }; -s32 MapDisp_GetSizeOfMapITex(s32 mapCompactId); - void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color) { *color = sMapColorTable[colorIndex]; } diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c index 423252675..8d6694295 100644 --- a/src/code/z_map_disp.c +++ b/src/code/z_map_disp.c @@ -73,10 +73,9 @@ static MapDisp sMapDisp = { NULL, -1, 210, 140, 0, 0, NULL, -1, NULL, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, NULL, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, }; -extern s16 D_801BEBFA; // sMapDisp.pauseMapCurStorey -static MapDataRoom sMapDataRooms[ROOM_MAX]; -static MapDataChest sMapDataChests[32]; +MapDataRoom sMapDataRooms[ROOM_MAX]; +MapDataChest sMapDataChests[32]; static MapDataScene sMapDataScene = { sMapDataRooms, 80, @@ -84,14 +83,14 @@ static MapDataScene sMapDataScene = { static s32 sSceneNumRooms = 0; // current scene's no. of rooms static s32 sNumChests = 0; // MinimapChest count static TransitionActorList sTransitionActorList = { 0, NULL }; -static Color_RGBA8 sMinimapActorColors[12] = { +static Color_RGBA8 sMinimapActorCategoryColors[12] = { { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 0, 255, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 255, 0, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 255, 0, 0, 255 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, -}; // cat colors +}; -static TransitionActorEntry sTransitionActors[ROOM_TRANSITION_MAX]; -static PauseDungeonMap sPauseDungeonMap; +TransitionActorEntry sTransitionActors[ROOM_TRANSITION_MAX]; +PauseDungeonMap sPauseDungeonMap; void MapDisp_GetMapITexture(void* dst, s32 mapCompactId) { if (MapDisp_GetSizeOfMapITex(mapCompactId) != 0) { @@ -106,12 +105,12 @@ void MapDisp_InitRoomStoreyRecord(PlayState* play, s16* roomStorey) { void MapDisp_DestroyRoomStoreyRecord(PlayState* play, s16* roomStory) { } -void func_80102EB4(u32 param_1) { - sMapDisp.unk20 |= param_1; +void func_80102EB4(u32 flag) { + sMapDisp.unk20 |= flag; } -void func_80102ED0(u32 param_1) { - sMapDisp.unk20 &= ~param_1; +void func_80102ED0(u32 flag) { + sMapDisp.unk20 &= ~flag; } s32 MapDisp_CurRoomHasMapI(PlayState* play) { @@ -126,7 +125,7 @@ s32 MapDisp_CurRoomHasMapI(PlayState* play) { return false; } mapDataRoom = &sMapDisp.mapDataScene->rooms[curRoom]; - if (mapDataRoom->mapId == 0xFFFF) { + if (mapDataRoom->mapId == MAP_DATA_NO_MAP) { return false; } if (MapData_GetMapIId(mapDataRoom->mapId) == MAPDATA_MAP_I_MAX) { @@ -171,19 +170,19 @@ void MapDisp_GetMapOffset(MapDataRoom* mapDataRoom, s32* offsetX, s32* offsetY) s32 width; s32 height; - if (mapDataRoom->mapId == 0xFFFF) { + if (mapDataRoom->mapId == MAP_DATA_NO_MAP) { *offsetX = 0; *offsetY = 0; return; } MapDisp_GetMapTexDim(mapDataRoom, &width, &height); MapData_GetMapTexOffset(mapDataRoom->mapId, offsetX, offsetY); - if (mapDataRoom->flags & 1) { + if (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) { s32 temp = (width / 2); *offsetX = ((width / 2) - *offsetX) + (width / 2); } - if (mapDataRoom->flags & 2) { + if (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) { s32 temp = (height / 2); *offsetY = (temp - *offsetY) + temp; @@ -203,7 +202,7 @@ void MapDisp_DrawMinimapRoom(PlayState* play, TexturePtr texture, s32 x, s32 y, Color_RGBA8 color; s32 drawType; - if ((mapDataRoom->mapId == 0xFFFF) || (texture == NULL)) { + if ((mapDataRoom->mapId == MAP_DATA_NO_MAP) || (texture == NULL)) { return; } @@ -241,14 +240,14 @@ void MapDisp_DrawMinimapRoom(PlayState* play, TexturePtr texture, s32 x, s32 y, break; } - s = (mapDataRoom->flags & 1) ? (texWidth - 1) << 5 : 0; - t = (mapDataRoom->flags & 2) ? 0 : (texHeight - 1) << 5; + s = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) ? (texWidth - 1) << 5 : 0; + t = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) ? 0 : (texHeight - 1) << 5; - dsdx_temp = ((mapDataRoom->flags & 1) ? -1 : 1) * (1 << 10); - dtdy_temp = ((mapDataRoom->flags & 2) ? 1 : -1) * (1 << 10); + dsdx_temp = ((mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) ? -1 : 1) * (1 << 10); + dtdy_temp = ((mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) ? 1 : -1) * (1 << 10); - dsdx = (mapDataRoom->flags & 1) ? dsdx_temp & 0xFFFF : dsdx_temp; - dtdy = (mapDataRoom->flags & 2) ? dtdy_temp : dtdy_temp & 0xFFFF; + dsdx = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) ? dsdx_temp & 0xFFFF : dsdx_temp; + dtdy = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) ? dtdy_temp : dtdy_temp & 0xFFFF; gSPTextureRectangle(OVERLAY_DISP++, x << 2, y << 2, (texWidth + x) << 2, (y + texHeight) << 2, G_TX_RENDERTILE, s, t, dsdx, dtdy); @@ -295,7 +294,7 @@ void MapDisp_Minimap_DrawActorIcon(PlayState* play, Actor* actor) { } mapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; - if (mapDataRoom->mapId == 0xFFFF) { + if (mapDataRoom->mapId == MAP_DATA_NO_MAP) { return; } @@ -369,9 +368,9 @@ void MapDisp_Minimap_DrawActorIcon(PlayState* play, Actor* actor) { Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (actor->flags & ACTOR_FLAG_80000000) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMinimapActorColors[actor->category].r, - sMinimapActorColors[actor->category].g, sMinimapActorColors[actor->category].b, - play->interfaceCtx.minimapAlpha); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMinimapActorCategoryColors[actor->category].r, + sMinimapActorCategoryColors[actor->category].g, + sMinimapActorCategoryColors[actor->category].b, play->interfaceCtx.minimapAlpha); gSPTextureRectangle(OVERLAY_DISP++, (posX - 1) << 2, (posY - 1) << 2, (posX + 1) << 2, (posY + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001); } @@ -394,17 +393,14 @@ void MapDisp_Minimap_DrawActors(PlayState* play) { for (i = 0; i < ACTORCAT_MAX; i++) { Actor* actor = actorCtx->actorLists[i].first; - if (actor != NULL) { - do { - if ((actor->update != NULL) && (actor->init == NULL) && - Object_IsLoaded(&play->objectCtx, actor->objectSlot) && - ((actor->id == ACTOR_EN_BOX) || (i == ACTORCAT_PLAYER) || - (actor->flags & ACTOR_FLAG_80000000)) && - ((sMapDisp.curRoom == actor->room) || (actor->room == -1))) { - MapDisp_Minimap_DrawActorIcon(play, actor); - } - actor = actor->next; - } while (actor != NULL); + while (actor != NULL) { + if ((actor->update != NULL) && (actor->init == NULL) && + Object_IsLoaded(&play->objectCtx, actor->objectSlot) && + ((actor->id == ACTOR_EN_BOX) || (i == ACTORCAT_PLAYER) || (actor->flags & ACTOR_FLAG_80000000)) && + ((sMapDisp.curRoom == actor->room) || (actor->room == -1))) { + MapDisp_Minimap_DrawActorIcon(play, actor); + } + actor = actor->next; } } @@ -430,7 +426,7 @@ void MapDisp_Minimap_DrawDoorActor(PlayState* play, Actor* actor) { yDistAlpha = 0.0f; } mapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; - if (mapDataRoom->mapId != 0xFFFF) { + if (mapDataRoom->mapId != MAP_DATA_NO_MAP) { MapDisp_GetMapOffset(mapDataRoom, &texOffsetX, &texOffsetY); MapDisp_GetMapTexDim(mapDataRoom, &texWidth, &texHeight); @@ -473,9 +469,9 @@ void MapDisp_Minimap_DrawDoorActor(PlayState* play, Actor* actor) { s32 pad; gDPSetPrimColor( - OVERLAY_DISP++, 0, 0, sMinimapActorColors[actor->category].r, - sMinimapActorColors[actor->category].g, sMinimapActorColors[actor->category].b, - (s32)((sMinimapActorColors[actor->category].a * (1.0f - sMapDisp.swapAnimTimer * 0.05f) * + OVERLAY_DISP++, 0, 0, sMinimapActorCategoryColors[actor->category].r, + sMinimapActorCategoryColors[actor->category].g, sMinimapActorCategoryColors[actor->category].b, + (s32)((sMinimapActorCategoryColors[actor->category].a * (1.0f - sMapDisp.swapAnimTimer * 0.05f) * yDistAlpha * play->interfaceCtx.minimapAlpha) / 255.0f)); @@ -513,15 +509,13 @@ void MapDisp_Minimap_DrawDoorActors(PlayState* play) { G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); actor = play->actorCtx.actorLists[ACTORCAT_DOOR].first; - if (actor != NULL) { - do { - if ((actor->update != NULL) && (actor->init == NULL) && - Object_IsLoaded(&play->objectCtx, actor->objectSlot) && - ((sMapDisp.curRoom == actor->room) || (actor->room == -1))) { - MapDisp_Minimap_DrawDoorActor(play, actor); - } - actor = actor->next; - } while (actor != NULL); + while (actor != NULL) { + if ((actor->update != NULL) && (actor->init == NULL) && + Object_IsLoaded(&play->objectCtx, actor->objectSlot) && + ((sMapDisp.curRoom == actor->room) || (actor->room == -1))) { + MapDisp_Minimap_DrawDoorActor(play, actor); + } + actor = actor->next; } CLOSE_DISPS(play->state.gfxCtx); @@ -619,7 +613,7 @@ void MapDisp_InitSceneFloorData(PlayState* play) { for (i2 = 0; i2 < sSceneNumRooms; i2++) { MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[i2]; - if (mapDataRoom->mapId == 0xFFFF) { + if (mapDataRoom->mapId == MAP_DATA_NO_MAP) { continue; } // add item to the table if it is a newish value @@ -848,14 +842,14 @@ void MapDisp_Destroy(PlayState* play) { } void MapDisp_Update(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; s16 currentX; s16 currentY; s16 targetX; s16 targetY; if ((sMapDisp.mapDataScene != NULL) && (sSceneNumRooms != 0)) { - //! FAKE: D_801BEBFA should be sMapDisp.pauseMapCurStorey - D_801BEBFA = DUNGEON_FLOOR_INDEX_0 - play->pauseCtx.cursorMapDungeonItem; + sMapDisp.pauseMapCurStorey = DUNGEON_FLOOR_INDEX_0 - pauseCtx->cursorMapDungeonItem; if (sMapDisp.prevRoom != -1) { if (sMapDisp.swapAnimTimer > 0) { targetX = sMapDisp.minimapBaseX; @@ -895,8 +889,9 @@ void MapDisp_SwapRooms(s16 nextRoom) { if ((sMapDisp.mapDataScene != NULL) && (sSceneNumRooms != 0) && (nextRoom != -1)) { nextMapDataRoom = &sMapDisp.mapDataScene->rooms[nextRoom]; - if ((nextMapDataRoom->mapId < 5) || ((nextMapDataRoom->mapId >= 0x100) && (nextMapDataRoom->mapId < 0x162)) || - nextMapDataRoom->mapId == 0xFFFF) { + if ((nextMapDataRoom->mapId < MAPDATA_GAMEPLAY_DANGEON_KEEP_MAX) || + ((nextMapDataRoom->mapId >= MAPDATA_MAP_GRAND) && (nextMapDataRoom->mapId < MAPDATA_MAP_GRAND_MAX)) || + nextMapDataRoom->mapId == MAP_DATA_NO_MAP) { sMapDisp.prevRoom = sMapDisp.curRoom; sMapDisp.curRoom = nextRoom; @@ -908,7 +903,7 @@ void MapDisp_SwapRooms(s16 nextRoom) { nextMapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; - if (nextMapDataRoom->mapId == 0xFFFF) { + if (nextMapDataRoom->mapId == MAP_DATA_NO_MAP) { sMapDisp.minimapPrevY = 0; sMapDisp.minimapBaseX = 210; sMapDisp.minimapBaseY = 140; @@ -924,7 +919,7 @@ void MapDisp_SwapRooms(s16 nextRoom) { sMapDisp.minimapBaseY = 220 - height; if (sMapDisp.prevRoom != -1) { prevMapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.prevRoom]; - if (prevMapDataRoom->mapId == 0xFFFF) { + if (prevMapDataRoom->mapId == MAP_DATA_NO_MAP) { sMapDisp.minimapCurTex = NULL; sMapDisp.minimapPrevX = sMapDisp.minimapPrevY = 0; sMapDisp.minimapCurX = sMapDisp.minimapBaseX; @@ -976,7 +971,8 @@ void MapDisp_SwapRooms(s16 nextRoom) { sMapDisp.minimapCurTex = sMapDisp.texBuff0; } if (MapData_GetSizeOfMapGrandTex(nextMapDataRoom->mapId) != 0) { - CmpDma_LoadFile(SEGMENT_ROM_START(map_grand_static), nextMapDataRoom->mapId - 0x100, + CmpDma_LoadFile(SEGMENT_ROM_START(map_grand_static), + MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(nextMapDataRoom->mapId), sMapDisp.minimapCurTex, MapData_GetSizeOfMapGrandTex(nextMapDataRoom->mapId)); } break; @@ -1000,7 +996,7 @@ void MapDisp_Minimap_DrawRedCompassIcon(PlayState* play, s32 x, s32 z, s32 rot) f32 scaleFrac; mapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom]; - if (mapDataRoom->mapId == 0xFFFF) { + if (mapDataRoom->mapId == MAP_DATA_NO_MAP) { return; } @@ -1087,7 +1083,7 @@ s32 MapDisp_IsMinimapToggleBlocked(PlayState* play) { s32 MapDisp_AreRoomsSameStorey(s32 curRoom, s32 prevRoom) { MapDataRoom* mapDataRoom; - s16* roomStoreyList; // Can be removed, but adds readability + s16* roomStoreyList; if ((curRoom == -1) || (prevRoom == -1)) { return false; @@ -1174,7 +1170,7 @@ void* MapDisp_AllocDungeonMap(PlayState* play, void* heap) { MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[sceneRoomIter]; s32 isDuplicateTexture = false; - if (mapDataRoom->mapId == 0xFFFF) { + if (mapDataRoom->mapId == MAP_DATA_NO_MAP) { continue; } mapCompactId = MapData_GetMapCompactId(mapDataRoom->mapId); @@ -1215,7 +1211,7 @@ void* MapDisp_AllocDungeonMap(PlayState* play, void* heap) { s32 foundTexture = false; s32 mapCompactId; - if (mapDataRoom->mapId == 0xFFFF) { + if (mapDataRoom->mapId == MAP_DATA_NO_MAP) { sPauseDungeonMap.roomSprite[sceneRoomIter] = NULL; } else { mapCompactId = MapData_GetMapCompactId(mapDataRoom->mapId); @@ -1340,7 +1336,7 @@ void MapDisp_DrawRooms(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32 s32 two = 2; mapDataRoom = &sMapDisp.mapDataScene->rooms[i]; - if ((mapDataRoom->mapId == 0xFFFF) || (mapDataRoom->mapId >= 0x162)) { + if ((mapDataRoom->mapId == MAP_DATA_NO_MAP) || (mapDataRoom->mapId >= MAPDATA_MAP_GRAND_MAX)) { continue; } @@ -1363,7 +1359,7 @@ void MapDisp_DrawRooms(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32 MapData_CPID_GetTexDim(spE8, &texWidth, &texHeight); MapData_CPID_GetTexOffset(spE8, &offsetX, &offsetY); - if (mapDataRoom->flags & 1) { + if (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) { offsetX = ((texWidth / 2) - offsetX) + (texWidth / 2); s = (texWidth - 1) << 5; dsdx = 0xFC00; @@ -1372,7 +1368,7 @@ void MapDisp_DrawRooms(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32 dsdx = 0x400; } - if (mapDataRoom->flags & 2) { + if (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) { s32 requiredScopeTemp; offsetY = ((texHeight / 2) - offsetY) + (texHeight / 2); @@ -1833,7 +1829,7 @@ void MapDisp_DrawDungeonMap(PlayState* play) { } mapDataRoom = sMapDisp.mapDataScene->rooms; - if ((mapDataRoom->mapId == 0xFFFF) || (mapDataRoom->mapId >= 0x162)) { + if ((mapDataRoom->mapId == MAP_DATA_NO_MAP) || (mapDataRoom->mapId >= MAPDATA_MAP_GRAND_MAX)) { return; } diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 074a4891a..bb284aede 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -495,7 +495,7 @@ void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd) { } // SceneTableEntry Header Command 0x1C: Map Data -void Scene_CommandMiniMap(PlayState* play, SceneCmd* cmd) { +void Scene_CommandMapData(PlayState* play, SceneCmd* cmd) { MapDisp_Init(play); MapDisp_InitMapData(play, cmd->mapData.segment); } @@ -505,7 +505,7 @@ void Scene_Command1D(PlayState* play, SceneCmd* cmd) { } // SceneTableEntry Header Command 0x1E: Map Data Chests -void Scene_CommandMiniMapCompassInfo(PlayState* play, SceneCmd* cmd) { +void Scene_CommandMapDataChests(PlayState* play, SceneCmd* cmd) { MapDisp_InitChestData(play, cmd->mapDataChests.num, cmd->mapDataChests.segment); } @@ -578,9 +578,9 @@ void (*sSceneCmdHandlers[SCENE_CMD_MAX])(PlayState*, SceneCmd*) = { Scene_CommandSetRegionVisitedFlag, // SCENE_CMD_ID_SET_REGION_VISITED Scene_CommandAnimatedMaterials, // SCENE_CMD_ID_ANIMATED_MATERIAL_LIST Scene_CommandCutsceneList, // SCENE_CMD_ID_ACTOR_CUTSCENE_LIST - Scene_CommandMiniMap, // SCENE_CMD_ID_MINIMAP_INFO + Scene_CommandMapData, // SCENE_CMD_ID_MAP_DATA Scene_Command1D, // SCENE_CMD_ID_UNUSED_1D - Scene_CommandMiniMapCompassInfo, // SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO + Scene_CommandMapDataChests, // SCENE_CMD_ID_MAP_DATA_CHESTS }; /** diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 7cfeca2dc..8eecd7f07 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2449,9 +2449,9 @@ 0x80130454:("Scene_CommandAltHeaderList",), 0x801304CC:("Scene_CommandCutsceneScriptList",), 0x80130500:("Scene_CommandCutsceneList",), - 0x80130540:("Scene_CommandMiniMap",), + 0x80130540:("Scene_CommandMapData",), 0x80130578:("Scene_Command1D",), - 0x80130588:("Scene_CommandMiniMapCompassInfo",), + 0x80130588:("Scene_CommandMapDataChests",), 0x801305B0:("Scene_CommandSetRegionVisitedFlag",), 0x80130674:("Scene_CommandAnimatedMaterials",), 0x801306A4:("Scene_SetExitFade",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f9a855b5a..c13eedca6 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -993,10 +993,7 @@ 0x801BEB10:("D_801BEB10","u32","[4]",0x10), 0x801BEB20:("D_801BEB20","u32","[4]",0x10), 0x801BEB38:("sWhiteSquareTex","UNK_TYPE1","",0x1), - 0x801BEBB8:("sMapDisp","UNK_TYPE4","",0x40), - 0x801BEBF8:("D_801BEBF8","UNK_TYPE2","",0x2), - 0x801BEBFA:("D_801BEBFA","UNK_TYPE2","",0x2), - 0x801BEBFC:("D_801BEBFC","UNK_TYPE2","",0x18), + 0x801BEBB8:("sMapDisp","MapDisp","",0x5C), 0x801BEC14:("sMapDataScene","MinimapList","",0x8), 0x801BEC1C:("sSceneNumRooms","s32","",0x4), 0x801BEC20:("sNumChests","s32","",0x4), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 8bcd16927..462c3611b 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1963,9 +1963,9 @@ asm/non_matchings/code/z_scene/Scene_CommandEchoSetting.s,Scene_CommandEchoSetti asm/non_matchings/code/z_scene/Scene_CommandAltHeaderList.s,Scene_CommandAltHeaderList,0x80130454,0x1E asm/non_matchings/code/z_scene/Scene_CommandCutsceneScriptList.s,Scene_CommandCutsceneScriptList,0x801304CC,0xD asm/non_matchings/code/z_scene/Scene_CommandCutsceneList.s,Scene_CommandCutsceneList,0x80130500,0x10 -asm/non_matchings/code/z_scene/Scene_CommandMiniMap.s,Scene_CommandMiniMap,0x80130540,0xE +asm/non_matchings/code/z_scene/Scene_CommandMapData.s,Scene_CommandMapData,0x80130540,0xE asm/non_matchings/code/z_scene/Scene_Command1D.s,Scene_Command1D,0x80130578,0x4 -asm/non_matchings/code/z_scene/Scene_CommandMiniMapCompassInfo.s,Scene_CommandMiniMapCompassInfo,0x80130588,0xA +asm/non_matchings/code/z_scene/Scene_CommandMapDataChests.s,Scene_CommandMapDataChests,0x80130588,0xA asm/non_matchings/code/z_scene/Scene_CommandSetRegionVisitedFlag.s,Scene_CommandSetRegionVisitedFlag,0x801305B0,0x31 asm/non_matchings/code/z_scene/Scene_CommandAnimatedMaterials.s,Scene_CommandAnimatedMaterials,0x80130674,0xC asm/non_matchings/code/z_scene/Scene_SetExitFade.s,Scene_SetExitFade,0x801306A4,0x11 diff --git a/undefined_syms.txt b/undefined_syms.txt index 47434ee04..5741567fc 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -629,8 +629,4 @@ D_0E0002C8 = 0x0E0002C8; // segment 0x0F -D_0F000000 = 0x0F000000; - -// z_map_disp -// fake symbol -D_801BEBFA = 0x801BEBFA; \ No newline at end of file +D_0F000000 = 0x0F000000; \ No newline at end of file