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;