diff --git a/include/global.h b/include/global.h index c993374..30930bd 100644 --- a/include/global.h +++ b/include/global.h @@ -18,6 +18,15 @@ typedef unsigned int uintptr_t; struct unk_D_86002F58_004_000_00C; +typedef union arg1_func_80010CA8 { + struct { + /* 0x00 */ s16 unk_00; + /* 0x02 */ s8 unk_02; + /* 0x03 */ s8 unk_03; + }; + u32 raw; +} arg1_func_80010CA8; // size = 0x4 + typedef struct unk_D_86002F58_004_000_00C_028 { /* 0x00 */ char pad0[4]; /* 0x04 */ u8 unk_04; @@ -29,14 +38,6 @@ typedef struct unk_D_86002F58_004_000_00C_028 { typedef unk_D_86002F58_004_000_00C_028* (*unk_D_86002F58_004_000_00C_028_func)(s32, s32); -typedef union unk_D_86002F58_004_000_010_02C { - struct { - u16 unk_00; - u16 unk_02; - }; - u32 raw; -} unk_D_86002F58_004_000_010_02C; // size = 0x4 - typedef struct unk_D_86002F58_004_000_010_024 { /* 0x00 */ u16 unk_00; /* 0x02 */ char unk02[0x6]; @@ -54,7 +55,7 @@ typedef struct unk_D_86002F58_004_000_010 { /* 0x20 */ s32 unk_20; /* 0x24 */ unk_D_86002F58_004_000_010_024* unk_24; /* 0x28 */ s32 unk_28; - /* 0x2C */ unk_D_86002F58_004_000_010_02C unk_2C; + /* 0x2C */ arg1_func_80010CA8 unk_2C; /* 0x30 */ OSMesgQueue unk_30; /* 0x48 */ OSMesg unk_48; /* 0x4C */ char pad4C[0x4]; diff --git a/src/17300.c b/src/17300.c index 75ad7c9..54ca7de 100644 --- a/src/17300.c +++ b/src/17300.c @@ -192,18 +192,18 @@ f32 func_80016F20(unk_D_800ABCC0* arg0, s32 arg1) { return var_fv1; } -typedef union unk_D_86002F58_004_000_010_02C_test { +typedef union arg1_func_80010CA8_test { struct { s16 unk_00; s16 unk_02; }; s32 raw; -} unk_D_86002F58_004_000_010_02C_test; // size = 0x4 +} arg1_func_80010CA8_test; // size = 0x4 typedef struct unk_D_86002F58_004_000_040_test { /* 0x00 */ s16 unk_00; /* 0x04 */ unk_D_86002F58_004_000_040_004* unk_04; - /* 0x08 */ unk_D_86002F58_004_000_010_02C_test unk_08; + /* 0x08 */ arg1_func_80010CA8_test unk_08; /* 0x0C */ s32 unk_0C; /* 0x10 */ char unk10[0x2]; /* 0x12 */ u16 unk_12; @@ -211,8 +211,8 @@ typedef struct unk_D_86002F58_004_000_040_test { #ifdef NON_MATCHING s32 func_80016FBC(unk_D_86002F58_004_000_040_test* arg0, u16 arg1) { - unk_D_86002F58_004_000_010_02C_test spC; - unk_D_86002F58_004_000_010_02C_test* ptr; + arg1_func_80010CA8_test spC; + arg1_func_80010CA8_test* ptr; unk_D_86002F58_004_000_040_004* temp_v0; spC = arg0->unk_08; diff --git a/src/19840.c b/src/19840.c index 7f56148..36757e8 100644 --- a/src/19840.c +++ b/src/19840.c @@ -342,7 +342,7 @@ void func_8001987C(void) { D_800ABE10.unk_A04.unk_08 = main_pool_alloc(0x28000, 1); } -s32 func_800198E4(unk_D_86002F58_004_000_010* arg0, u16 arg1, unk_D_86002F58_004_000_010_02C arg2) { +s32 func_800198E4(unk_D_86002F58_004_000_010* arg0, u16 arg1, arg1_func_80010CA8 arg2) { s32 sp1C; sp18_func_800198E4* sp18; s32 var_v1; @@ -379,7 +379,7 @@ s32 func_800198E4(unk_D_86002F58_004_000_010* arg0, u16 arg1, unk_D_86002F58_004 return sp1C; } -s32 func_80019A1C(unk_D_86002F58_004_000_010* arg0, u16 arg1, unk_D_86002F58_004_000_010_02C arg2, s16 arg3) { +s32 func_80019A1C(unk_D_86002F58_004_000_010* arg0, u16 arg1, arg1_func_80010CA8 arg2, s16 arg3) { if ((arg0->unk_00 & 8) && !(arg0->unk_01 & 1)) { arg0->unk_02 = arg3; func_800198E4(arg0, arg1, arg2); diff --git a/src/19840.h b/src/19840.h index b2601bb..13d6248 100644 --- a/src/19840.h +++ b/src/19840.h @@ -26,7 +26,7 @@ typedef struct sp18_func_800198E4 { /* 0x0C */ s32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; - /* 0x18 */ unk_D_86002F58_004_000_010_02C unk_18; + /* 0x18 */ arg1_func_80010CA8 unk_18; } sp18_func_800198E4; // size = 0x1C typedef struct unk_D_800ABE10_A04 { @@ -68,8 +68,8 @@ void func_80019600(UNUSED void* arg0); void func_800196DC(void); unk_D_86002F58_004_000_010* func_80019760(u32 arg0); void func_8001987C(void); -s32 func_800198E4(unk_D_86002F58_004_000_010* arg0, u16 arg1, unk_D_86002F58_004_000_010_02C arg2); -s32 func_80019A1C(unk_D_86002F58_004_000_010* arg0, u16 arg1, unk_D_86002F58_004_000_010_02C arg2, s16 arg3); +s32 func_800198E4(unk_D_86002F58_004_000_010* arg0, u16 arg1, arg1_func_80010CA8 arg2); +s32 func_80019A1C(unk_D_86002F58_004_000_010* arg0, u16 arg1, arg1_func_80010CA8 arg2, s16 arg3); s32 func_80019A7C(unk_D_86002F58_004_000_010* arg0, s32 arg1, s32 arg2); s32 func_80019B48(unk_D_86002F58_004_000_010* arg0, sp18_func_800198E4* arg1); s32 func_80019C08(unk_D_86002F58_004_000_010* arg0); diff --git a/src/1AB70.c b/src/1AB70.c index 54ebe52..3785ad1 100644 --- a/src/1AB70.c +++ b/src/1AB70.c @@ -155,7 +155,40 @@ void func_8001A324(unk_func_8001A024* arg0, s32 arg1, s32 arg2, u16 arg3) { #pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_8001A324.s") #endif +#ifdef NON_MATCHING +void func_8001A46C(unk_func_8001A024* arg0, s32 arg1, unk_func_80026268_arg0* arg2, u16 arg3) { + s32 w; + s32 h; + + if (arg1 >= arg0->unk_01) { + return; + } + w = arg0->unk_08[arg1].unk_0C->width; + h = arg0->unk_08[arg1].unk_0C->height; + bzero(arg0->unk_08[arg1].unk_0C->img_p, w * h * 2); + if (((s32) arg2->unk_00.unk_00 > 0) && ((s32) arg2->unk_00.unk_00 < 0x98)) { + arg0->unk_08[arg1].unk_00 = 3; + arg0->unk_08[arg1].unk_14.raw = arg2;; + arg0->unk_08[arg1].unk_02 = arg3 & ~1; + arg0->unk_08[arg1].unk_08 = arg0->unk_18[arg2->unk_00.unk_00 - 1].unk_02 / 100.0f; + func_8001BEE8(&arg0->unk_08[arg1].unk_10, arg2); + if (arg0->unk_18[arg2->unk_00.unk_00 - 1].name == NULL) { + arg0->unk_08[arg1].unk_04 = arg0->unk_18[arg2->unk_00.unk_00 - 1].unk_08 - 0xE38;; + return; + } + arg0->unk_08[arg1].unk_04 = -0xE38; + return; + } + arg0->unk_08[arg1].unk_00 = 1; + arg0->unk_08[arg1].unk_02 = arg3 & ~1; + arg0->unk_08[arg1].unk_14.raw = 0x98; + arg0->unk_08[arg1].unk_08 = (f32) ((f32) arg0->unk_18[151].unk_02 / 100.0f); + arg0->unk_08[arg1].unk_10.raw = 0; + arg0->unk_08[arg1].unk_04 = -0xE38; +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_8001A46C.s") +#endif void func_8001A654(u16* arg0, s32 a1, arg1_func_80010CA8 arg2) { s32 cond; @@ -224,11 +257,58 @@ void func_8001A714(unk_func_8001A024* arg0, s32 arg1) { func_80015094(arg0->unk_0C); } -#pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_8001AA18.s") +s32 func_8001AA18(unk_func_8001A024* arg0, s32 arg1) { + s32 i; + s32 var_v0; + s32 sp24; + s32 sp20; + unk_func_8001A024_008* temp_v0_2; + + sp24 = -1; + sp20 = arg0->unk_02; + if (arg0->unk_00 & 1) { + if (arg1 == 1) { + var_v0 = func_80019CA8(arg0->unk_04); + } else { + var_v0 = func_80019C08(arg0->unk_04); + } + if (var_v0 != 0) { + arg0->unk_00 &= 0xFFFE; + arg0->unk_08[sp20].unk_00 &= 0xFFFE; + func_8001A714(arg0, sp20); + arg0->unk_03 = sp20; + sp24 = sp20; + arg0->unk_02++; + if (arg0->unk_02 >= arg0->unk_01) { + arg0->unk_02 = 0; + } + } + } else { + for (i = 0; i < arg0->unk_01; i++) { + temp_v0_2 = &arg0->unk_08[sp20]; + if (temp_v0_2->unk_00 & 1) { + arg0->unk_00 |= 1; + if (temp_v0_2->unk_00 & 2) { + func_800198E4(arg0->unk_04, *temp_v0_2->unk_14.ptr, temp_v0_2->unk_10); + } else { + func_800198E4(arg0->unk_04, temp_v0_2->unk_14.unk_02, temp_v0_2->unk_10); + } + arg0->unk_02 = sp20; + break; + } else { + sp20 += 1; + if (sp20 >= arg0->unk_01) { + sp20 = 0; + } + } + } + } + return sp24; +} s32 func_8001ABAC(unk_func_8001A024* arg0, s32 arg1) { UNUSED s32 pad; - unk_D_86002F58_004_000_010_02C sp48; + arg1_func_80010CA8 sp48; s32 sp44; s32 var_s1; unk_func_8001A024_008* temp_s0; @@ -284,13 +364,87 @@ s32 func_8001ABAC(unk_func_8001A024* arg0, s32 arg1) { return sp44; } -#pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_8001AD90.s") +s32 func_8001AD90(unk_func_8001A024* arg0, s32 arg1) { + s32 i; + s32 var_a2; + s32 var_s0; + unk_func_8001A024_008* temp_a0; + unk_func_8001A024_008* temp_s1; + + var_a2 = -1; + var_s0 = arg0->unk_02; + temp_a0 = arg0->unk_08; + + for (i = 0; i < arg0->unk_01; i++) { + temp_s1 = &arg0->unk_08[var_s0]; + if (temp_s1->unk_00 & 1) { + while (func_80001C90() == 0) {} + + if (temp_s1->unk_00 & 2) { + func_800198E4(arg0->unk_04, *temp_s1->unk_14.ptr, temp_s1->unk_10); + } else { + func_800198E4(arg0->unk_04, temp_s1->unk_14.unk_02, temp_s1->unk_10); + } + func_80019CA8(arg0->unk_04); + arg0->unk_08[var_s0].unk_00 &= ~1; + func_8001A714(arg0, var_s0); + arg0->unk_02 = var_s0; + var_a2 = var_s0; + arg0->unk_02++; + arg0->unk_03 = var_s0; + if (arg0->unk_02 >= arg0->unk_01) { + arg0->unk_02 = 0; + } + break; + } else { + var_s0 += 1; + if (var_s0 >= arg0->unk_01) { + var_s0 = 0; + } + } + } + return var_a2; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_8001AEEC.s") +void func_8001AEEC(unk_func_8001A024* arg0, s32 arg1) { + s32 i; + + if (arg1 == arg0->unk_03) { + func_80006498(&gDisplayListHead, arg0->unk_08[arg1].unk_0C); + func_8000699C(&gDisplayListHead, arg0->unk_08[arg1].unk_02); + func_8001533C(1); + func_80015094(arg0->unk_0C); + return; + } + for (i = arg0->unk_01; i > 0; i--) { + if (arg0->unk_08[i - 1].unk_00 & 1) { + break; + } + } + if (i == 0) { + arg0->unk_08[arg1].unk_00 |= 1; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_8001AFD8.s") +u8* func_8001AFD8(unk_func_8001A024* arg0, s32 arg1) { + u8* image; + image = NULL; + if (arg1 < (s32)arg0->unk_01) { + image = arg0->unk_08[arg1].unk_0C->img_p; + } + return image; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_8001B010.s") +s32 func_8001B010(unk_func_8001A024* arg0) { + s32 i; + + for (i = 0; i < arg0->unk_01; i++) { + if (arg0->unk_08[i].unk_00 & 5) { + return 0; + } + } + return 1; +} void func_8001B058(void) { D_800ABE10.unk_A04.unk_10 = func_800044F4(0x820000, NULL, 1, 1); @@ -367,7 +521,7 @@ unk_func_8001B1FC* func_8001B1FC(unk_D_86002F58_004_000_010* arg0, s16 arg1, s16 } void func_8001B2D8(unk_func_8001B1FC* arg0, unk_func_80026268_arg0* arg1, u16 arg2) { - unk_D_86002F58_004_000_010_02C sp2C; + arg1_func_80010CA8 sp2C; s16 tmp1 = (s16)(D_8006FF00[arg1->unk_00.unk_00 - 1].unk_14 >> 0x10) >> 6; s16 tmp2 = (s16)(D_8006FF00[arg1->unk_00.unk_00 - 1].unk_14 >> 6) >> 4; s16 tmp3 = (s16)(D_8006FF00[arg1->unk_00.unk_00 - 1].unk_14 << 6) >> 6; @@ -395,7 +549,7 @@ void func_8001B2D8(unk_func_8001B1FC* arg0, unk_func_80026268_arg0* arg1, u16 ar } void func_8001B480(unk_func_8001B1FC* arg0, s32 arg1, u16 arg2) { - unk_D_86002F58_004_000_010_02C sp34; + arg1_func_80010CA8 sp34; s16 tmp1 = (s16)(D_8006FF00[arg1 - 1].unk_14 >> 0x10) >> 6; s16 tmp2 = (s16)(D_8006FF00[arg1 - 1].unk_14 >> 6) >> 4; s16 tmp3 = (s16)(D_8006FF00[arg1 - 1].unk_14 << 6) >> 6; diff --git a/src/1AB70.h b/src/1AB70.h index 45912e3..2409709 100644 --- a/src/1AB70.h +++ b/src/1AB70.h @@ -79,10 +79,11 @@ void func_8001A1D0(unk_func_8001A024*, unk_D_86002F58_004_000_010*, unk_D_80068B void func_8001A250(unk_func_8001A024*, unk_D_8006FF00*); void func_8001A258(unk_func_8001A024*); void func_8001A324(unk_func_8001A024*, s32, s32, u16); -void func_8001A46C(unk_func_8001A024*, s32, unk_func_80026268_arg0*, s32); -void func_8001AA18(unk_func_8001A024*, s32, unk_D_84B25A28*); +void func_8001A46C(unk_func_8001A024*, s32, unk_func_80026268_arg0*, u16); +s32 func_8001AA18(unk_func_8001A024*, s32); s32 func_8001ABAC(unk_func_8001A024*, s32); -void* func_8001AFD8(unk_func_8001A024*, s32); +s32 func_8001AD90(unk_func_8001A024*, s32); +u8* func_8001AFD8(unk_func_8001A024*, s32); s32 func_8001B010(unk_func_8001A024*); void func_8001B058(void); void func_8001B0DC(u16*, s32, unk_func_80026268_arg0*); diff --git a/src/1C720.c b/src/1C720.c index 07acc05..5262ce0 100644 --- a/src/1C720.c +++ b/src/1C720.c @@ -120,10 +120,10 @@ unk_D_86002F58_004_000_00C_028* func_8001BE90(unk_D_86002F58_004_000* arg0, s32 return var_v1; } -unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* arg0, unk_func_80026268_arg0* arg1) { +arg1_func_80010CA8* func_8001BEE8(arg1_func_80010CA8* arg0, unk_func_80026268_arg0* arg1) { UNUSED s32 pad; char sp38[0xB]; - unk_D_86002F58_004_000_010_02C sp34; + arg1_func_80010CA8 sp34; unk_D_8006FF00* sp30; UNUSED s32 pad2; u8 var_a0; @@ -158,7 +158,7 @@ unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* ar return arg0; } -void func_8001C014(unk_D_86002F58_004_000_010_02C* arg0, unk_func_8001C014* arg1, u16 arg2) { +void func_8001C014(arg1_func_80010CA8* arg0, unk_func_8001C014* arg1, u16 arg2) { unk_func_80026268_arg0 stack; stack.unk_00.unk_00 = arg2; @@ -171,10 +171,10 @@ void func_8001C014(unk_D_86002F58_004_000_010_02C* arg0, unk_func_8001C014* arg1 #ifdef NON_MATCHING typedef struct stack_func_8001C07C { - /* 0x00 */ unk_D_86002F58_004_000_010_02C unk_00; + /* 0x00 */ arg1_func_80010CA8 unk_00; /* 0x06 */ s16 unk_06; /* 0x08 */ s16 unk_08; - /* 0x0C */ unk_D_86002F58_004_000_010_02C unk_0C; + /* 0x0C */ arg1_func_80010CA8 unk_0C; } stack_func_8001C07C; // size == 0x30 void func_8001C07C(unk_func_8001C07C_arg0* arg0) { diff --git a/src/1C720.h b/src/1C720.h index 8e189a5..6bb5569 100644 --- a/src/1C720.h +++ b/src/1C720.h @@ -42,8 +42,8 @@ void func_8001BE34(unk_D_86002F58_004_000* arg0, u8 arg1, u8 arg2, u8 arg3, u8 a void func_8001BE78(unk_D_86002F58_004_000* arg0, u8 arg1); void func_8001BE84(unk_D_86002F58_004_000* arg0, u8 arg1); unk_D_86002F58_004_000_00C_028* func_8001BE90(unk_D_86002F58_004_000* arg0, s32 arg1); -unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* arg0, unk_func_80026268_arg0* arg1); -void func_8001C014(unk_D_86002F58_004_000_010_02C* arg0, unk_func_8001C014* arg1, u16 arg2); +arg1_func_80010CA8* func_8001BEE8(arg1_func_80010CA8* arg0, unk_func_80026268_arg0* arg1); +void func_8001C014(arg1_func_80010CA8* arg0, unk_func_8001C014* arg1, u16 arg2); void func_8001C07C(unk_func_8001C07C_arg0* arg0); void func_8001C198(unk_func_8001C248* arg0); void func_8001C1E8(unk_func_8001C248* arg0); diff --git a/src/F420.h b/src/F420.h index 965e842..3b7b8dc 100644 --- a/src/F420.h +++ b/src/F420.h @@ -3,15 +3,6 @@ #include "global.h" -typedef union arg1_func_80010CA8 { - struct { - /* 0x00 */ s16 unk_00; - /* 0x02 */ s8 unk_02; - /* 0x03 */ s8 unk_03; - }; - u32 raw; -} arg1_func_80010CA8; // size = 0x4 - extern Vec3f D_8006F050; extern Vec3s D_8006F05C; extern Vec3f D_8006F064; diff --git a/src/fragments/15/fragment15_14CA70.c b/src/fragments/15/fragment15_14CA70.c index 088da09..df3da36 100644 --- a/src/fragments/15/fragment15_14CA70.c +++ b/src/fragments/15/fragment15_14CA70.c @@ -409,7 +409,7 @@ void func_86900188(void) { } unk_D_86002F58_004_000_010_024* func_86900244(unk_func_80026268_arg0* arg0) { - unk_D_86002F58_004_000_010_02C sp1C; + arg1_func_80010CA8 sp1C; unk_D_86002F58_004_000_010* sp18; arg0->unk_00.unk_00 = 25; diff --git a/src/fragments/50/fragment50.c b/src/fragments/50/fragment50.c index 63018a5..50ff19c 100644 --- a/src/fragments/50/fragment50.c +++ b/src/fragments/50/fragment50.c @@ -2144,7 +2144,7 @@ void func_82602578(s16 arg0) { } void func_82602614(s16 arg0) { - unk_D_86002F58_004_000_010_02C sp24; + arg1_func_80010CA8 sp24; s16 idx = ((D_82607B54 + arg0 + D_8267E4F0) % D_8267E4F0) + 1; D_82607B52 = (D_82607B50 + arg0 + 5) % 5; @@ -2154,7 +2154,7 @@ void func_82602614(s16 arg0) { } void func_826026D4(s16 arg0) { - unk_D_86002F58_004_000_010_02C sp54; + arg1_func_80010CA8 sp54; s16 temp_s1 = ((D_82607B54 + arg0 + D_8267E4F0) % D_8267E4F0) + 1; unk_func_800228F0 sp2C; diff --git a/src/fragments/63/fragment63_39AC50.c b/src/fragments/63/fragment63_39AC50.c index 071b12f..0ea1ae8 100644 --- a/src/fragments/63/fragment63_39AC50.c +++ b/src/fragments/63/fragment63_39AC50.c @@ -803,7 +803,7 @@ void func_84B07294(unk_D_84B25A28* arg0) { } void func_84B07370(unk_D_84B25A28* arg0) { - func_8001AA18(arg0->unk_20, 0, arg0); + func_8001AA18(arg0->unk_20, 0); arg0->unk_01++; if ((arg0->unk_01 >= 0x1E) && (func_8001B010(arg0->unk_20) != 0)) { diff --git a/src/fragments/63/fragment63_39BFB0.c b/src/fragments/63/fragment63_39BFB0.c index 512a0c5..f07b8de 100644 --- a/src/fragments/63/fragment63_39BFB0.c +++ b/src/fragments/63/fragment63_39BFB0.c @@ -1016,7 +1016,7 @@ void func_84B09F60(unk_D_84B25A58* arg0) { } void func_84B0A18C(unk_D_84B25A58* arg0) { - func_8001AA18(arg0->unk_1C, 0, arg0); + func_8001AA18(arg0->unk_1C, 0); arg0->unk_01++; if ((arg0->unk_01 >= 0x1E) && (func_8001B010(arg0->unk_1C) != 0)) { diff --git a/tools/data2c.py b/tools/data2c.py index 41c6b9d..2800567 100755 --- a/tools/data2c.py +++ b/tools/data2c.py @@ -67,7 +67,7 @@ def calc_size(name, data): max_rounding = 0 testMe = False - #if name == "unk_D_86002F58_004_000_010_02C": + #if name == "arg1_func_80010CA8": # testMe = True #print(data)