From 026d2cec0ecb18c2bcd60ff742258588d2a9ef9e Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Thu, 4 Aug 2022 15:34:05 -0500 Subject: [PATCH] core2 .bss fully defined, core2/code_CD6E0.c done --- progress/progress_core2.svg | 6 +- progress/progress_total.svg | 4 +- src/core1/code_136D0.c | 6 +- src/core2/code_94A20.c | 347 +------ src/core2/code_98CB0.c | 297 ++++++ src/core2/code_99860.c | 2 +- src/core2/code_999A0.c | 2 + src/core2/code_9A320.c | 2 +- src/core2/code_9A580.c | 2 +- src/core2/code_9A740.c | 4 +- src/core2/code_9A9D0.c | 4 +- src/core2/code_9B180.c | 4 +- src/core2/code_9B650.c | 5 +- src/core2/code_9B990.c | 2 +- src/core2/code_9C170.c | 3 +- src/core2/code_9E370.c | 6 +- src/core2/code_A4D00.c | 1601 +------------------------------ src/core2/code_A5BC0.c | 1621 ++++++++++++++++++++++++++++++++ src/core2/code_ABC00.c | 8 +- src/core2/code_AC520.c | 4 +- src/core2/code_AD5B0.c | 11 +- src/core2/code_AE290.c | 9 +- src/core2/code_AEDA0.c | 12 +- src/core2/code_B1400.c | 102 +- src/core2/code_B3A80.c | 23 +- src/core2/code_B5040.c | 24 +- src/core2/code_B5E00.c | 7 +- src/core2/code_B62B0.c | 6 +- src/core2/code_B6C60.c | 2 +- src/core2/code_B6CE0.c | 4 +- src/core2/code_B6EA0.c | 8 +- src/core2/code_B8020.c | 3 + src/core2/code_B8860.c | 2 +- src/core2/code_B9770.c | 3 +- src/core2/code_BD100.c | 20 +- src/core2/code_BDCC0.c | 2 +- src/core2/code_BEF20.c | 19 +- src/core2/code_C0E60.c | 36 +- src/core2/code_C2F30.c | 10 +- src/core2/code_C4320.c | 14 +- src/core2/code_C4F40.c | 2 +- src/core2/code_C5440.c | 4 +- src/core2/code_C89C0.c | 2 +- src/core2/code_C97F0.c | 4 +- src/core2/code_C9F00.c | 4 +- src/core2/code_CBBF0.c | 2 +- src/core2/code_CD0A0.c | 2 +- src/core2/code_CD6E0.c | 9 - src/core2/jiggyscore.c | 4 +- src/core2/levelspecificflags.c | 6 +- src/core2/rand.c | 25 +- src/core2/timedfuncqueue.c | 2 +- subyaml/core2.us.v10.yaml | 59 +- 53 files changed, 2258 insertions(+), 2114 deletions(-) create mode 100644 src/core2/code_98CB0.c create mode 100644 src/core2/code_A5BC0.c diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index 72c26a96..b9156c87 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core2 - 77.4315% - 77.4315% + 77.5826% + 77.5826% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index e9b9f689..567b518c 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 81.8431% - 81.8431% + 81.9298% + 81.9298% \ No newline at end of file diff --git a/src/core1/code_136D0.c b/src/core1/code_136D0.c index f69cfef1..87caf96a 100644 --- a/src/core1/code_136D0.c +++ b/src/core1/code_136D0.c @@ -18,8 +18,7 @@ typedef struct struct_2a_s{ extern u8 D_80363590; extern u8 D_80379B90; -extern u8 D_80286F90; -extern u8 D_803863F0; + extern u8 D_803A5D00; extern u8 D_F55960; extern u8 D_1048560; @@ -42,10 +41,13 @@ extern struct2As D_802762D0[] = { {"witch", 0x803863F0, 0x80395470, 0x01098070, 0x010A6FD0, 0x803863F0, 0x80392CB0, 0x80392CB0, 0x80395350, 0x80395350, 0x80395470}, {"battle", 0x803863F0, 0x80392930, 0x010A6FD0, 0x010B3320, 0x803863F0, 0x80391380, 0x80391380, 0x80392740, 0x80392740, 0x80392930}, }; +extern u8 D_80286F90; extern s32 D_80276564 = 15; enum overlay_e D_80282800; +extern u8 D_803863F0; + void func_802513A4(void); /* .code */ diff --git a/src/core2/code_94A20.c b/src/core2/code_94A20.c index a904ec9e..bcc472cd 100644 --- a/src/core2/code_94A20.c +++ b/src/core2/code_94A20.c @@ -7,17 +7,52 @@ void *func_80309B48(f32 *, f32 *, f32 *, u32); void *func_80309B98(f32 *, f32 *, f32 *, u32); - +s32 func_8031FF1C(s32); +void func_8031FFAC(void); +void func_80320004(s32 index, s32 set); +s32 func_803200A4(u8 *array, s32 index); +s32 func_803200E4(u8 *array, s32 offset, s32 numBits); +void func_8032015C(u8 *array, s32 index, s32 set); +void func_803201C8(u8 *array, s32 startIndex, s32 set, s32 length); +void func_8032048C(void); +void func_803204E4(s32 arg0, s32 arg1); +s32 func_8031FF44(s32 offset, s32 numBits); +void func_8031CE70(f32 *arg0, s32 arg1, s32 arg2); +void ml_vec3h_to_vec3f(f32 *, s32); +void func_8028F3D8(f32 *, f32, void(*)(ActorMarker *), ActorMarker *); +struct unkfunc_80304ED0 *func_80304ED0(void*, f32 *); +void func_8031CD44(s32, s32, f32, f32, s32); +void func_80256E24(f32 *, f32, f32, f32, f32, f32); void func_8031C608(struct0 *this); void *func_8031BABC(f32 *, f32, f32, u32, void*); void func_8031BD98(struct0 *, f32, s32, s32, f32 *, void *, s32); void func_8031BE98(struct0*, f32, s32); -extern f32 D_8036DDC0[]; + + +// Struct pointer returned by func_80304ED0 +struct unkfunc_80304ED0 { + s16 unk0[3]; + u16 unk6; + u16 unk8; + u16 unkA; + u32 unkC; +}; + +/* .data */ +extern u8 D_8036DDC0[0x14]; +extern u32 D_8036DDD4; + +/* .rodata */ extern f32 D_80378D30; extern f32 D_80378D34; +extern f32 D_80378D40; +extern f32 D_80378D44; + +/* .bss */ +u8 D_80383190; void func_8031B9B0(struct0 *this, s32 arg1){ if(arg1 == 1) @@ -160,7 +195,7 @@ void func_8031BD98(struct0 *this, f32 arg1, s32 arg2, s32 arg3, f32 *normPtr, vo void func_8031BE58(struct0 *this){ - func_8031BD98(this, -9000.0f, 0, 0, D_8036DDC0, 0, 0); + func_8031BD98(this, -9000.0f, 0, 0, &D_8036DDC0, 0, 0); } void func_8031BE98(struct0 *this, f32 arg1, s32 arg2){ @@ -299,57 +334,22 @@ s32 func_8031C880(void){ return 0; } -// Struct pointer returned by func_80304ED0 -struct unkfunc_80304ED0 { - s16 unk0[3]; - u16 unk6; - u16 unk8; - u16 unkA; - u32 unkC; -}; - -s32 func_8031FF1C(s32); -void func_8031FFAC(void); -void func_80320004(s32 index, s32 set); -s32 func_803200A4(u8 *array, s32 index); -s32 func_803200E4(u8 *array, s32 offset, s32 numBits); -void func_8032015C(u8 *array, s32 index, s32 set); -void func_803201C8(u8 *array, s32 startIndex, s32 set, s32 length); -void func_8032048C(void); -void func_803204E4(s32 arg0, s32 arg1); -s32 func_8031FF44(s32 offset, s32 numBits); -void func_8031CE70(f32 *arg0, s32 arg1, s32 arg2); -void ml_vec3h_to_vec3f(f32 *, s32); -void func_8028F3D8(f32 *, f32, void(*)(ActorMarker *), ActorMarker *); -struct unkfunc_80304ED0 *func_80304ED0(void*, f32 *); -void func_8031CD44(s32, s32, f32, f32, s32); -void func_80256E24(f32 *, f32, f32, f32, f32, f32); - -extern u32 D_8036DDD4; - -// probably rodata -extern f32 D_80378D40; -extern f32 D_80378D44; - -/* .bss */ -extern u8 D_80383190; - -void func_8031CB50(enum map_e map_id, s32 arg1, s32 arg2) { +void func_8031CB50(enum map_e map_id, s32 exit_id, s32 arg2) { s32 sp1C; - if ((D_80383190 == 0) && (getGameMode() != 8) && (getGameMode() != 7)) { + if ((D_80383190 == 0) && (getGameMode() != GAME_MODE_8_BOTTLES_BONUS) && (getGameMode() != GAME_MODE_7_ATTRACT_DEMO)) { sp1C = func_803226E8(map_get()); if ((func_803226E8(map_id) != sp1C) && (func_80322914() == 0)) { func_8025A388(0, 0x4E2); func_8025AB00(); func_8024BD08(0); } - if (func_802E4A08() != 0) { - func_802E40D0(map_id, arg1); + if (func_802E4A08()) { + func_802E40D0(map_id, exit_id); func_802E40E8(1); func_802E40C4(0xB); } else { - func_802E4078(map_id, arg1, 1); + func_802E4078(map_id, exit_id, 1); } func_80335110(arg2); } @@ -1661,264 +1661,3 @@ void func_8031FBF8(void) { func_8029A890(); func_802C5A48(); } - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_94A20/func_8031FC40.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_94A20/func_8031FE40.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_94A20/func_8031FEC0.s") - -struct { - s32 unk0; - s32 unk4; - u8 unk8[37]; -} D_803831A0; - -s32 func_8031FF1C(s32 index) { - return func_803200A4(D_803831A0.unk8, index); -} - -s32 func_8031FF44(s32 offset, s32 numBits) { - return func_803200E4(D_803831A0.unk8, offset, numBits); -} - -s32 func_8031FF74(s32 index, s32 set) { - s32 ret; - - ret = func_8031FF1C(index); - func_80320004(index, set); - return ret; -} - -void func_8031FFAC(void) { - s32 i; - - for (i = 0; i < 37; i++) { - D_803831A0.unk8[i] = 0; - } - func_8031FC40(); - func_8031FEC0(); -} - -void func_80320004(s32 index, s32 set) { - func_8032015C(D_803831A0.unk8, index, set); - func_8031FC40(); - func_8031FEC0(); -} - -void func_80320044(s32 startIndex, s32 set, s32 length) { - func_803201C8(D_803831A0.unk8, startIndex, set, length); - func_8031FC40(); - func_8031FEC0(); -} - -void func_8032008C(s32 *arg0, u8 **arg1) { - *arg0 = 0x25; - *arg1 = D_803831A0.unk8; -} - -// Returns a single bit from a byte array -s32 func_803200A4(u8 *array, s32 index) { - s32 ret; - if (array[index / 8] & (1 << (index & 7))) { - ret = 1; - } else { - ret = 0; - } - return ret; -} - -// Extracts an integer of the given number of bits from a byte array at the starting bit offset -s32 func_803200E4(u8 *array, s32 offset, s32 numBits) { - s32 ret = 0; - s32 i; - - for (i = 0; i < numBits; i++) { - ret |= (func_803200A4(array, offset + i) << i); - } - return ret; -} - -// Sets or clears a single bit in a byte array -void func_8032015C(u8 *array, s32 index, s32 set) { - if (set) { - array[index / 8] |= (1 << (index & 7)); - } else { - array[index / 8] &= ~(1 << (index & 7)); - } -} - -// Sets or clears a range of bits in a byte array -void func_803201C8(u8 *array, s32 startIndex, s32 set, s32 length) { - s32 i; - - for (i = 0; i < length; i++) { - func_8032015C(array, startIndex + i, (1 << i) & set); - } -} - -s32 func_80320240(void){return 1;} - -s32 func_80320248(void){return 1;} - -struct { - s32 unk0; - s32 unk4; - u8 unk8[25]; -} D_803831D0; - -// regalloc -// s32 func_80320250(void) { -// s32 addr = (s32) &D_803831D0.unk8[0]; -// u32 checksum = 0x6CE9E91F; -// s32 len = 25; -// s32 scrambled; -// u32 i; - -// // Scrambles the input address -// scrambled = (addr ^ 0x746DF219) & 0xFF; // scrambled = (low byte of addr) ^ 0x19 -// scrambled += (addr >> 0x18) << 0x18; // scrambled = (high byte of addr | low byte of addr) ^ 0x19 -// scrambled += ((addr >> 8) & 0xFFFF) << 8; // scrambled = addr ^ 0x19 -// // Unscrambles the input address - -// for (i = 0; i < len; i++) { -// s32 val = ((u8*)(scrambled ^ 0x19))[i]; -// checksum = val ^ (((checksum + val & 0xF) << 0x18) ^ (checksum >> 3)); -// } - -// return checksum; -// } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_94A20/func_80320250.s") - -extern s32 D_8036DDF0; - -void func_803202D0(void) { - s32 addr = (s32) &D_803831D0.unk0; - addr ^= 0x7EDDF5F4; - addr ^= 0x7BEF9D80; - addr ^= 0x5326874; - *(s32*)(addr) = func_80320250(); -} - -s32 func_80320320(void) { - s32 addr = (s32) &D_803831D0.unk8[0]; - s32 checksum = 0x281E421C; - s32 len = 25; - s32 scrambled; - u32 i; - - // Scrambles the address of D_803831D8 - scrambled = (addr >> 8) & 0xFF0000; - scrambled += (addr & 0xFF) << 8; - scrambled = addr ^ scrambled; - // Unscrambles the address of D_803831D8 - addr = (scrambled & 0xFF000000) >> 8; - addr += (scrambled << 8) & 0xFF00; - addr ^= scrambled; - - for (i = 0; i < len; i++) { - checksum += (1 + i) * ((u8*)addr)[i]; - } - - return checksum; -} - -// regalloc -// void func_803203A0(void) { -// s32 addr = (s32) &D_803831D0.unk4; -// s32 scrambled; -// scrambled = (addr ^ 0x746DF219) & 0xFF; // scrambled = (low byte of addr) ^ 0x19 -// scrambled += (addr >> 0x18) << 0x18; // scrambled = (high byte of addr | low byte of addr) ^ 0x19 -// scrambled += ((addr >> 8) & 0xFFFF) << 8; // scrambled = addr ^ 0x19 -// *(s32*)(scrambled ^ 0x19) = func_80320320(); -// } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_94A20/func_803203A0.s") - -s32 func_803203FC(s32 index) { - return func_803200A4(D_803831D0.unk8, index); -} - -void func_80320424(s32 index, s32 numBits) { - func_803200E4(D_803831D0.unk8, index, numBits); -} - -s32 func_80320454(s32 index, s32 arg1) { - s32 temp_v0; - - temp_v0 = func_803203FC(index); - func_803204E4(index, arg1); - return temp_v0; -} - -void func_8032048C(void) { - s32 i; - for (i = 0; i < 25; i++) { - D_803831D0.unk8[i] = 0; - } - func_803202D0(); - func_803203A0(); -} - -void func_803204E4(s32 index, s32 set) { - func_8032015C(D_803831D0.unk8, index, set); - func_803202D0(); - func_803203A0(); -} - -void func_80320524(s32 startIndex, s32 set, s32 length) { - func_803201C8(D_803831D0.unk8, startIndex, set, length); - func_803202D0(); - func_803203A0(); -} - -s32 func_8032056C(void) { - s32 temp_a0; - s32 temp_a1; - s32 temp_a1_2; - s32 phi_t9; - s32 addr = (s32)&D_803831D0; - s32 temp_v1; - - temp_v1 = ((addr & 0xE0000000) >> 15) + - ((addr & 0x1FC00000) >> 22) + - ((addr & 0x00300000) << 10) + - ((addr & 0x000F0000) << 7) + - ((addr & 0x0000E000) << 14) + - ((addr & 0x00001800) >> 4) + - ((addr & 0x00000780) << 10) + - ((addr & 0x00000060) << 4) + - ((addr & 0x00000018) << 18) + - ((addr & 0x00000007) << 11); - phi_t9 = (temp_v1 & 0x38000000) / (1 << 24); - temp_a0 = ((temp_v1 & 0x1E0600) << 0xB) | ((s32) (temp_v1 & 0x603800) / 8); - temp_a1 = (((temp_v1 & 0x1C07F) << 15) + ((temp_v1 & 0xC7800000) >> 17)) | - (phi_t9 + ((s32) (temp_v1 & 0x180) >> 6)); - temp_a1 = ((temp_a1 & 0x3FE000) << 7) | - (((temp_a0 >> 8) & 7) + ((temp_a1 << 0xA) & 0xFF800)) | - ((((u32) (temp_a0 & 0xF0000000) >> 0x15) + (temp_a1 & 0xE0000000)) ^ ((s32) ((temp_a0 / 0x40) & 0xF000) >> 9)); - return func_80320250() == *(s32*)temp_a1; -} - -s32 func_80320708(void) { - u16 temp_t6; - s32 addr; - - temp_t6 = ((s32) &D_803831D0.unk4 >> 0x10); - addr = (s32) &D_803831D0.unk4 ^ temp_t6; - return func_80320320() == *(s32*)(addr ^ temp_t6); -} - -extern u8 D_803831F8[]; - -// regalloc -// void func_80320748(void) { -// s32 *addr = &D_8036DDF0; -// s32 phi_v0; - -// for (phi_v0 = 0; phi_v0 < *addr; phi_v0++) { -// *(D_803831F8 + phi_v0) = *((u8*)&D_803831D0 + phi_v0); -// } -// } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_94A20/func_80320748.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_94A20/func_80320798.s") diff --git a/src/core2/code_98CB0.c b/src/core2/code_98CB0.c new file mode 100644 index 00000000..b43588af --- /dev/null +++ b/src/core2/code_98CB0.c @@ -0,0 +1,297 @@ +#include +#include "functions.h" +#include "variables.h" + +s32 func_8031FF1C(s32); +void func_8031FFAC(void); +void func_80320004(s32 index, s32 set); +s32 func_803200A4(u8 *array, s32 index); +s32 func_803200E4(u8 *array, s32 offset, s32 numBits); +void func_8032015C(u8 *array, s32 index, s32 set); +void func_803201C8(u8 *array, s32 startIndex, s32 set, s32 length); +void func_8032048C(void); +void func_803204E4(s32 arg0, s32 arg1); +s32 func_8031FF44(s32 offset, s32 numBits); +void func_8031CE70(f32 *arg0, s32 arg1, s32 arg2); +void ml_vec3h_to_vec3f(f32 *, s32); +void func_8028F3D8(f32 *, f32, void(*)(ActorMarker *), ActorMarker *); +struct unkfunc_80304ED0 *func_80304ED0(void*, f32 *); +void func_8031CD44(s32, s32, f32, f32, s32); +void func_80256E24(f32 *, f32, f32, f32, f32, f32); + +/* .data */ +extern s32 D_8036DDF0; + + +/* .bss */ +struct { + s32 unk0; + s32 unk4; + u8 unk8[0x25]; +} D_803831A0; + +struct { + s32 unk0; + s32 unk4; + u8 unk8[0x19]; +} D_803831D0; + +u8 D_803831F8[0x21]; //copy of D_803831D0 + +/* .code */ +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_8031FC40.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_8031FE40.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_8031FEC0.s") + +s32 func_8031FF1C(s32 index) { + return func_803200A4(D_803831A0.unk8, index); +} + +s32 func_8031FF44(s32 offset, s32 numBits) { + return func_803200E4(D_803831A0.unk8, offset, numBits); +} + +s32 func_8031FF74(s32 index, s32 set) { + s32 ret; + + ret = func_8031FF1C(index); + func_80320004(index, set); + return ret; +} + +void func_8031FFAC(void) { + s32 i; + + for (i = 0; i < 37; i++) { + D_803831A0.unk8[i] = 0; + } + func_8031FC40(); + func_8031FEC0(); +} + +void func_80320004(s32 index, s32 set) { + func_8032015C(D_803831A0.unk8, index, set); + func_8031FC40(); + func_8031FEC0(); +} + +void func_80320044(s32 startIndex, s32 set, s32 length) { + func_803201C8(D_803831A0.unk8, startIndex, set, length); + func_8031FC40(); + func_8031FEC0(); +} + +void func_8032008C(s32 *arg0, u8 **arg1) { + *arg0 = 0x25; + *arg1 = D_803831A0.unk8; +} + +// Returns a single bit from a byte array +s32 func_803200A4(u8 *array, s32 index) { + s32 ret; + if (array[index / 8] & (1 << (index & 7))) { + ret = 1; + } else { + ret = 0; + } + return ret; +} + +// Extracts an integer of the given number of bits from a byte array at the starting bit offset +s32 func_803200E4(u8 *array, s32 offset, s32 numBits) { + s32 ret = 0; + s32 i; + + for (i = 0; i < numBits; i++) { + ret |= (func_803200A4(array, offset + i) << i); + } + return ret; +} + +// Sets or clears a single bit in a byte array +void func_8032015C(u8 *array, s32 index, s32 set) { + if (set) { + array[index / 8] |= (1 << (index & 7)); + } else { + array[index / 8] &= ~(1 << (index & 7)); + } +} + +// Sets or clears a range of bits in a byte array +void func_803201C8(u8 *array, s32 startIndex, s32 set, s32 length) { + s32 i; + + for (i = 0; i < length; i++) { + func_8032015C(array, startIndex + i, (1 << i) & set); + } +} + +s32 func_80320240(void){return 1;} + +s32 func_80320248(void){return 1;} + +// regalloc +// s32 func_80320250(void) { +// s32 addr = (s32) &D_803831D0.unk8[0]; +// u32 checksum = 0x6CE9E91F; +// s32 len = 25; +// s32 scrambled; +// u32 i; + +// // Scrambles the input address +// scrambled = (addr ^ 0x746DF219) & 0xFF; // scrambled = (low byte of addr) ^ 0x19 +// scrambled += (addr >> 0x18) << 0x18; // scrambled = (high byte of addr | low byte of addr) ^ 0x19 +// scrambled += ((addr >> 8) & 0xFFFF) << 8; // scrambled = addr ^ 0x19 +// // Unscrambles the input address + +// for (i = 0; i < len; i++) { +// s32 val = ((u8*)(scrambled ^ 0x19))[i]; +// checksum = val ^ (((checksum + val & 0xF) << 0x18) ^ (checksum >> 3)); +// } + +// return checksum; +// } +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_80320250.s") + + +void func_803202D0(void) { + s32 addr = (s32) &D_803831D0.unk0; + addr ^= 0x7EDDF5F4; + addr ^= 0x7BEF9D80; + addr ^= 0x5326874; + *(s32*)(addr) = func_80320250(); +} + +s32 func_80320320(void) { + s32 addr = (s32) &D_803831D0.unk8[0]; + s32 checksum = 0x281E421C; + s32 len = 25; + s32 scrambled; + u32 i; + + // Scrambles the address of D_803831D8 + scrambled = (addr >> 8) & 0xFF0000; + scrambled += (addr & 0xFF) << 8; + scrambled = addr ^ scrambled; + // Unscrambles the address of D_803831D8 + addr = (scrambled & 0xFF000000) >> 8; + addr += (scrambled << 8) & 0xFF00; + addr ^= scrambled; + + for (i = 0; i < len; i++) { + checksum += (1 + i) * ((u8*)addr)[i]; + } + + return checksum; +} + +// regalloc +// void func_803203A0(void) { +// s32 addr = (s32) &D_803831D0.unk4; +// s32 scrambled; +// scrambled = (addr ^ 0x746DF219) & 0xFF; // scrambled = (low byte of addr) ^ 0x19 +// scrambled += (addr >> 0x18) << 0x18; // scrambled = (high byte of addr | low byte of addr) ^ 0x19 +// scrambled += ((addr >> 8) & 0xFFFF) << 8; // scrambled = addr ^ 0x19 +// *(s32*)(scrambled ^ 0x19) = func_80320320(); +// } +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_803203A0.s") + +s32 func_803203FC(s32 index) { + return func_803200A4(D_803831D0.unk8, index); +} + +void func_80320424(s32 index, s32 numBits) { + func_803200E4(D_803831D0.unk8, index, numBits); +} + +s32 func_80320454(s32 index, s32 arg1) { + s32 temp_v0; + + temp_v0 = func_803203FC(index); + func_803204E4(index, arg1); + return temp_v0; +} + +void func_8032048C(void) { + s32 i; + for (i = 0; i < 25; i++) { + D_803831D0.unk8[i] = 0; + } + func_803202D0(); + func_803203A0(); +} + +void func_803204E4(s32 index, s32 set) { + func_8032015C(D_803831D0.unk8, index, set); + func_803202D0(); + func_803203A0(); +} + +void func_80320524(s32 startIndex, s32 set, s32 length) { + func_803201C8(D_803831D0.unk8, startIndex, set, length); + func_803202D0(); + func_803203A0(); +} + +s32 func_8032056C(void) { + s32 temp_a0; + s32 temp_a1; + s32 temp_a1_2; + s32 phi_t9; + s32 addr = (s32)&D_803831D0; + s32 temp_v1; + + temp_v1 = ((addr & 0xE0000000) >> 15) + + ((addr & 0x1FC00000) >> 22) + + ((addr & 0x00300000) << 10) + + ((addr & 0x000F0000) << 7) + + ((addr & 0x0000E000) << 14) + + ((addr & 0x00001800) >> 4) + + ((addr & 0x00000780) << 10) + + ((addr & 0x00000060) << 4) + + ((addr & 0x00000018) << 18) + + ((addr & 0x00000007) << 11); + phi_t9 = (temp_v1 & 0x38000000) / (1 << 24); + temp_a0 = ((temp_v1 & 0x1E0600) << 0xB) | ((s32) (temp_v1 & 0x603800) / 8); + temp_a1 = (((temp_v1 & 0x1C07F) << 15) + ((temp_v1 & 0xC7800000) >> 17)) | + (phi_t9 + ((s32) (temp_v1 & 0x180) >> 6)); + temp_a1 = ((temp_a1 & 0x3FE000) << 7) | + (((temp_a0 >> 8) & 7) + ((temp_a1 << 0xA) & 0xFF800)) | + ((((u32) (temp_a0 & 0xF0000000) >> 0x15) + (temp_a1 & 0xE0000000)) ^ ((s32) ((temp_a0 / 0x40) & 0xF000) >> 9)); + return func_80320250() == *(s32*)temp_a1; +} + +s32 func_80320708(void) { + u16 temp_t6; + s32 addr; + + temp_t6 = ((s32) &D_803831D0.unk4 >> 0x10); + addr = (s32) &D_803831D0.unk4 ^ temp_t6; + return func_80320320() == *(s32*)(addr ^ temp_t6); +} + +void func_80320748(void) { + s32 var_v0; + u8 *var_a0; + u8 *var_a1; + + var_a1 = &D_803831D0; + var_a0 = D_803831F8; + for(var_v0 = 0; var_v0 < D_8036DDF0; var_v0++){ + var_a0[var_v0] = var_a1[var_v0]; + } +} + +void func_80320798(void) { + s32 var_v0; + u8 *var_a0; + u8 *var_a1; + + var_a1 = D_803831F8; + var_a0 = &D_803831D0; + for(var_v0 = 0; var_v0 < D_8036DDF0; var_v0++){ + var_a0[var_v0] = var_a1[var_v0]; + } +} diff --git a/src/core2/code_99860.c b/src/core2/code_99860.c index ed8c0459..1cda5428 100644 --- a/src/core2/code_99860.c +++ b/src/core2/code_99860.c @@ -5,7 +5,7 @@ #define CORE2_99860_ARRAY_SIZE 0x33 /* .bss */ -extern u8* D_80383220; +u8* D_80383220; /* .code */ bool func_803207F0(s32 index){ diff --git a/src/core2/code_999A0.c b/src/core2/code_999A0.c index 6dcbaf22..69a538db 100644 --- a/src/core2/code_999A0.c +++ b/src/core2/code_999A0.c @@ -17,12 +17,14 @@ typedef struct { Method_Core2_999A0_3 unkC; } Struct_core2_999A0_0; +/* .bss */ struct { Struct_core2_999A0_0 unk0[0x8]; Struct_core2_999A0_0 *unk80; void *unk84; }D_80383230; +/* .public */ Struct66s *func_80320B98(f32 arg0[3], f32 arg1[3], f32 arg2[3], u32 arg3); void func_80320B44(Method_Core2_999A0_0 arg0, Method_Core2_999A0_1 arg1, Method_Core2_999A0_2 arg2, Method_Core2_999A0_3 arg3); diff --git a/src/core2/code_9A320.c b/src/core2/code_9A320.c index ff084b91..b682cc0a 100644 --- a/src/core2/code_9A320.c +++ b/src/core2/code_9A320.c @@ -9,7 +9,7 @@ void honeycombscore_debug(void); void honeycombscore_clear(void); /* .bss */ -extern u8 sHoneycombScore[3]; +u8 sHoneycombScore[3]; /* .code */ void func_803212B0(void){ diff --git a/src/core2/code_9A580.c b/src/core2/code_9A580.c index 7e27f13f..614cd8db 100644 --- a/src/core2/code_9A580.c +++ b/src/core2/code_9A580.c @@ -8,7 +8,7 @@ void mumboscore_debug(void); void mumboscore_clear(void); -extern u8 sMumboTokenScore[MUMBOSCORE_SIZE]; +u8 sMumboTokenScore[MUMBOSCORE_SIZE]; void func_80321510(void){ mumboscore_debug(); diff --git a/src/core2/code_9A740.c b/src/core2/code_9A740.c index d573eb32..6709fa0e 100644 --- a/src/core2/code_9A740.c +++ b/src/core2/code_9A740.c @@ -9,11 +9,13 @@ typedef struct { u8 unk1; } struct_9A740; -extern struct { +/* .bss */ +struct { u8 unk0; u8 unk1; }D_80383300; +/* .code */ void func_803216D0(enum map_e map){ s32 prev_lvl = D_80383300.unk1; D_80383300.unk1 = map_getLevel(map); diff --git a/src/core2/code_9A9D0.c b/src/core2/code_9A9D0.c index 4f7708f3..06f08eaf 100644 --- a/src/core2/code_9A9D0.c +++ b/src/core2/code_9A9D0.c @@ -5,8 +5,8 @@ void func_803219F4(s32 arg0); /* .bss */ -extern u8 D_80383310; -extern s32 D_80383314; +u8 D_80383310; +s32 D_80383314; /* .code */ s32 func_80321960(void){ diff --git a/src/core2/code_9B180.c b/src/core2/code_9B180.c index 90beaf26..f8c7f30b 100644 --- a/src/core2/code_9B180.c +++ b/src/core2/code_9B180.c @@ -24,8 +24,8 @@ extern Struct_core2_9B180_0 D_8036DE00[6]; extern u8 D_8036DE78; /* .bss */ -extern u8 D_80383330; -extern f32 D_80383334; +u8 D_80383330; +f32 D_80383334; /* .code */ void func_80322110(Struct_core2_9B180_0 *arg0) { diff --git a/src/core2/code_9B650.c b/src/core2/code_9B650.c index e67204e4..ce29a963 100644 --- a/src/core2/code_9B650.c +++ b/src/core2/code_9B650.c @@ -31,12 +31,13 @@ extern Struct_Core2_9B650_1s D_8036DE80[] = { {0} }; -extern struct { +/* .bss */ +struct { s16 unk0; s16 unk2; s16 unk4; } D_80383340; -extern int D_80383348; +int D_80383348; #ifndef NONMATCHING #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_9B650/func_803225E0.s") diff --git a/src/core2/code_9B990.c b/src/core2/code_9B990.c index 55d1e24b..e4f9e151 100644 --- a/src/core2/code_9B990.c +++ b/src/core2/code_9B990.c @@ -121,7 +121,7 @@ level_overlay_update_struct D_8036E2F8[] = { }; /* .bss */ -extern struct { +struct { u8 unk0; u8 unk1; u8 pad2[2]; diff --git a/src/core2/code_9C170.c b/src/core2/code_9C170.c index 34534680..ccf8a176 100644 --- a/src/core2/code_9C170.c +++ b/src/core2/code_9C170.c @@ -2,7 +2,8 @@ #include "functions.h" #include "variables.h" -extern u8 D_80383370; +/* .bss */ +u8 D_80383370; /* .code */ void func_80323100(void){ diff --git a/src/core2/code_9E370.c b/src/core2/code_9E370.c index d4dea95a..6ee360f3 100644 --- a/src/core2/code_9E370.c +++ b/src/core2/code_9E370.c @@ -71,9 +71,9 @@ extern f64 D_80378E60; extern f64 D_80378E68; /* .bss */ -extern Actor *D_80383390; -extern s32 D_80383394; -extern Actor *D_80383398[]; //array of jiggy actor ptrs +Actor *D_80383390; +s32 D_80383394; +Actor *D_80383398[14]; //array of jiggy actor ptrs //marker_getActorAndRotation diff --git a/src/core2/code_A4D00.c b/src/core2/code_A4D00.c index 14da77d6..d2018d38 100644 --- a/src/core2/code_A4D00.c +++ b/src/core2/code_A4D00.c @@ -3,55 +3,13 @@ #include "variables.h" #include "structs.h" -extern f32 func_8030A590(void); -extern void func_8030A5EC(Prop *, f32); -Prop *func_80303F7C(s32, f32, s32, s32); -s32 func_8032D9C0(Cube*, Prop*); -void func_80332B2C(ActorMarker * arg0); -s32 func_803058C0(f32); -void func_80305CD8(s32, s32); -void func_80330104(Cube*); -ActorMarker * func_80332A60(void); -extern void func_8032F3D4(s32 [3], ActorMarker *, s32); -extern void func_8030A350(Gfx **, Mtx **, Vtx **, f32[3], f32, s32, Cube*,s32 ,s32, s32, s32, s32); -extern void func_8030A2D0(Gfx **, Mtx **, Vtx **, f32[3], f32[3], f32, s32, Cube*); - -typedef union{ - struct{ - u32 pad31: 27; - u32 unk4: 1; - u32 pad3: 1; - u32 unk2: 1; - u32 unk1: 1; - u32 unk0: 1; - }; - u32 word; -} tmp_bitfield; - -s32 func_80320DB0(f32[3], f32, f32[3], u32); -extern void func_80320EB0(ActorMarker *, f32, s32); -extern void func_80320ED8(ActorMarker *, f32, s32); -f32 func_8033229C(ActorMarker *marker); -s32 func_803327A8(s32 arg0); -void func_8032CD60(Prop *); -f32 func_8033A244(f32); -void func_8032F64C(f32 *pos, ActorMarker * marker); - -/* .data */ -extern s32 D_8036E7B0; - -/* .rodata */ -extern f32 D_80378EA0; -extern f32 D_80378EA4; +extern s32 func_80320DB0(f32[3], f32, f32[3], u32); +extern f32 func_8033229C(ActorMarker *marker); /* .bss */ -extern f32 D_803833D8[3]; -extern ModelCache *modelCache; //model pointer array pointer -extern u32 D_80383444; -extern int D_80383448; -vector(ActorMarker *) *D_80383550; -vector(ActorMarker *) *D_80383554; +s32 D_803833D0; +f32 D_803833D8[3]; /* .code */ bool func_8032BC90(Actor *actor, s32 arg1, s32 arg2, s32 arg3) { @@ -104,1554 +62,3 @@ void func_8032BD64(f32 arg0[3]){ #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032CA40.s") #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032CA80.s") - -extern int func_802E74A0(f32[3], f32, s32, s32); -extern f32 func_802EC920(BKVertexList *); -extern void func_802C39D4(void); -extern bool func_80340020(s32, f32[3], f32[3], f32, s32, BKVertexList *, f32[3], f32[3]); -extern void func_80340200(s32, f32[3], f32[3], f32, s32, s32, BKVertexList *, s32); - -extern f64 D_80378EB0; - - -extern f32 D_80383410[3]; -extern ActorMarker *D_8038341C; -extern s32 D_80383420; - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032CB50.s") -// extern s32 D_80383450[]; - -// void func_8032CB50(Cube *cube, s32 arg1) { -// s32 sp4C[3]; -// // ? *temp_a0; -// s32 temp_a1; -// s32 temp_a1_2; -// s32 temp_a2; -// s32 temp_a2_2; -// s32 temp_t6; -// s32 temp_t7; -// s32 temp_v0; -// s32 temp_v0_2; -// u32 temp_t2; -// u32 temp_t4; -// u32 temp_t5; -// void *temp_v1; -// Prop *phi_v1; -// // ? *phi_a0; -// u32 phi_t2; -// Prop *phi_a3; -// Prop *phi_t0; -// s32 *phi_a0_2; -// u32 phi_a3_2; -// Prop *phi_v1_2; -// u32 phi_a3_3; -// u32 phi_t1; -// u32 phi_a3_4; -// u32 phi_t0_2; -// s32 i; -// Prop tmp; - -// if (cube->prop2Cnt < 2U) -// return; -// if (arg1 == 0) { -// func_8024C5F0(sp4C); -// } else { -// sp4C[0] = 0; -// sp4C[1] = 0; -// sp4C[2] = 0; -// } -// phi_v1 = cube->prop2Ptr; -// phi_t2 = 0U; -// phi_t1 = cube->prop2Cnt; -// for(phi_t2 = 0; phi_t2 < cube->prop2Cnt; phi_t2++){ -// temp_v0 = cube->prop2Ptr[phi_t2].actorProp.x - sp4C[0]; -// temp_a1 = cube->prop2Ptr[phi_t2].actorProp.y - sp4C[1]; -// temp_a2 = cube->prop2Ptr[phi_t2].actorProp.z - sp4C[2]; -// D_80383450[phi_t2] = temp_v0*temp_v0 + temp_a1*temp_a1 + temp_a2*temp_a2; -// } -// phi_a3 = cube->prop2Ptr; -// phi_t0 = &cube->prop2Ptr[cube->prop2Cnt - 1]; -// do { -// phi_a3_2 = 0U; -// // phi_t0_2 = phi_t0; -// for(phi_v1_2 = phi_a3; phi_v1_2 < phi_t0; phi_v1_2++){ -// phi_a0_2 = &D_80383450[phi_v1_2 - cube->prop2Ptr]; -// temp_a1_2 = phi_a0_2[0]; -// temp_a2_2 = phi_a0_2[1]; -// // phi_a3_4 = phi_a3_2; -// // phi_a3_4 = phi_a3_2; -// if (phi_a0_2[0] < phi_a0_2[1]) { -// phi_t0 = phi_v1_2 + 1; -// if (phi_a3_2 != 0) { -// phi_t0_2 = (u32) phi_v1_2; -// } else { -// phi_a3_2 = phi_v1_2 - 1; -// if (phi_v1_2 == cube->prop2Ptr) { -// phi_a3_4 = (u32) phi_v1_2; -// } -// } -// phi_a0_2[0] = temp_a2_2; -// phi_a0_2[0] = temp_a1_2; - -// tmp = phi_v1_2[0]; -// phi_v1_2[0] = phi_v1_2[1]; -// phi_v1_2[1] = tmp; -// } -// // temp_v1 = phi_v1_2 + 0xC; -// // phi_a0_2 += 4; -// // phi_a3_2 = phi_a3_4; -// // phi_v1_2 = temp_v1; -// // phi_a3_3 = phi_a3_4; -// // phi_t0 = phi_t0_2; -// } - -// phi_a3 = phi_a3_3; -// } while (phi_a3_3 != 0); -// func_80330104(cube); -// } - - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032CD60.s") -// void func_8032CD60(Prop *prop){ -// s32 tmp_v0; -// if(prop->markerFlag){ -// tmp_v0 = func_80330F50(prop->actorProp.marker); -// } -// else{ -// tmp_v0 = func_8030A55C(prop->propProp.unk0_31); -// } - -// if(tmp_v0 == 0) return; - -// } - -void func_8032D120(Cube *cube){ - if(cube->prop2Cnt >= 2) - func_8032CB50(cube, 1); -} - -void func_8032D158(Cube *cube){ - if(cube->prop2Cnt >= 2) - func_8032CB50(cube, 0); -} - -void __marker_draw(ActorMarker *this, Gfx **gfx, Mtx **mtx, Vtx **vtx){ - Actor *actor; - u32 draw_dist; - f32 draw_dist_f; - f32 percentage; - if(!this->unk3E_0){ - this->unk8(this, gfx, mtx, vtx); - return; - } - actor = marker_getActor(this); - func_8033A28C(actor->unk58_2); - if( actor->unk58_2 && !this->unk40_23 && !this->unk40_21 && !D_8036E7B0){ - func_8033A244(D_80378EA0); - } - - if(actor->unk124_7 && !actor->despawn_flag && actor->unk58_0){ - draw_dist = actor->actor_info->draw_distance; - if(draw_dist != 0){ - percentage = (f32)draw_dist*(1/(f64)0x400); - } - else if(this->unk40_21){ - percentage = 2.0f; - } - else{ - percentage = 1.0f; - } - func_8033A280(percentage); - this->unk8(this, gfx, mtx, vtx); - }//L8032D300 - func_8033A244(D_80378EA4); - func_8033A280(1.0f); -} - -void func_8032D330(void){ - D_80383550 = vector_new(sizeof(ActorMarker *),2); - D_80383554 = vector_new(sizeof(u32),2); -} - -void func_8032D36C(void){ - vector_free(D_80383550); - D_80383550 = NULL; - vector_free(D_80383554); - D_80383554 = NULL; -} - -void func_8032D3A8(void){ - vector_clear(D_80383550); - vector_clear(D_80383554); -} - -void func_8032D3D8(Gfx **gdl, Mtx **mptr, Vtx **vptr){ - int i; - for(i = 0; i < vector_size(D_80383550); i++){ - __marker_draw(*(u32*) vector_at(D_80383550, i), gdl, mptr, vptr); - } -} - -void func_8032D474(Gfx **gdl, Mtx **mptr, Vtx **vptr){ - int i; - for(i = 0; i < vector_size(D_80383554); i++){ - __marker_draw(*(u32*) vector_at(D_80383554, i), gdl, mptr, vptr); - } -} - -void func_8032D510(Cube *cube, Gfx **gfx, Mtx **mtx, Vtx **vtx){ - Prop *iProp; - int i; - f32 sp94[3]; - f32 sp88[3]; - tmp_bitfield tmp_v0; - int iOffset; - ActorMarker **markerPtr; - - if(cube->prop2Cnt == 0 ) return; - - func_8032CB50(cube, 0); - iOffset = 0; - for(i = 0; i < cube->prop2Cnt; i++){//L8032D5A0 - iOffset = i*0xC; - iProp = ((s32)cube->prop2Ptr + iOffset); - tmp_v0.word = *(u32 *)((s32)iProp + 0x8); - if(!tmp_v0.unk4){ - - }else{ - if(!tmp_v0.unk1){ - func_8032CD60(iProp); - } - tmp_v0.word = *(u32 *)((s32)iProp + 0x8); - if(tmp_v0.unk0){//actorProp; - if(iProp->actorProp.marker->unk40_22){ - markerPtr = (ActorMarker **)vector_pushBackNew(&D_80383550); - *markerPtr = iProp->actorProp.marker; - } - else if(iProp->actorProp.marker->unk40_19){ - markerPtr = (ActorMarker **)vector_pushBackNew(&D_80383554); - *markerPtr = iProp->actorProp.marker; - } - else{ - __marker_draw(iProp->actorProp.marker, gfx, mtx, vtx); - }//L8032D62C - } - else{//L8032D640 - sp94[0] = (f32)iProp->propProp.unk4[0]; - sp94[1] = (f32)iProp->propProp.unk4[1]; - sp94[2] = (f32)iProp->propProp.unk4[2]; - if(iProp->unk8_1){ - sp88[0] = 0.0f; - sp88[1] = (f32)((s32)iProp->propProp.unk0_15*2); - sp88[2] = (f32)((s32)iProp->propProp.unk0_7*2); - func_8030A2D0(gfx, mtx, vtx, - sp94, sp88, (f32)iProp->propProp.unkA/100.0, - iProp->propProp.unk0_31, cube - ); - } - else{//L8032D72C - func_8030A350( gfx, mtx, vtx, - sp94, (f32)iProp->spriteProp.unk0_9/100.0, iProp->spriteProp.unk0_31, cube, - iProp->spriteProp.unk0_18, iProp->spriteProp.unk0_15, iProp->spriteProp.unk0_12, - iProp->spriteProp.unk0_1, iProp->spriteProp.unk8_15 - ); - } - }//L8032D7C4 - } - iOffset+=0xC; - }//L8032D7D4 -} - -ActorProp *func_8032D80C(Cube *cube) { - ActorProp *sp1C; - - if (cube->prop2Ptr != NULL) { - cube->prop2Cnt++; - cube->prop2Ptr = realloc(cube->prop2Ptr, cube->prop2Cnt * sizeof(Prop)); - } else { - cube->prop2Cnt = 1; - cube->prop2Ptr = malloc(sizeof(Prop)); - } - sp1C = &cube->prop2Ptr[cube->prop2Cnt-1]; - sp1C->unk8_0 = FALSE; - func_80330104(cube); - return sp1C; -} - -NodeProp *func_8032D8F0(Cube *cube) { - if (cube->prop1Ptr != 0) { - cube->prop1Cnt++; - cube->prop1Ptr = realloc(cube->prop1Ptr, cube->prop1Cnt * sizeof(NodeProp)); - } else { - cube->prop1Cnt = 1; - cube->prop1Ptr = malloc(sizeof(NodeProp)); - } - return &cube->prop1Ptr[cube->prop1Cnt - 1]; -} - -//cube_removeProp -s32 func_8032D9C0(Cube *cube, Prop* prop){ - s32 sp24; - s32 tmp; - - sp24 = 0; - if(cube->prop2Cnt != 0){ - sp24 = prop->unk8_1; - if(func_80305D14()){ - func_80305CD8(func_803058C0(prop->unk4[1]), -1); - } - if((prop - cube->prop2Ptr) < (cube->prop2Cnt - 1)){ - memcpy(prop, prop + 1, (s32)(&cube->prop2Ptr[cube->prop2Cnt-1]) - (s32)(prop)); - } - cube->prop2Cnt--; - if(cube->prop2Cnt){ - cube->prop2Ptr = realloc(cube->prop2Ptr, cube->prop2Cnt*sizeof(Prop)); - func_80330104(cube); - }else{ - free(cube->prop2Ptr); - cube->prop2Ptr = NULL; - } - return sp24; - } - return 0; -} - -void func_8032DB2C(Cube *cube, NodeProp *arg1) { - s32 sp24; - - if(cube->prop1Cnt == NULL) - return; - - sp24 = arg1 - cube->prop1Ptr; - if (sp24 < cube->prop1Cnt - 1) { - memcpy(arg1, arg1 + 1, (s32)&cube->prop1Ptr[cube->prop1Cnt] - (s32)arg1 - sizeof(NodeProp)); - } - if (sp24 < cube->unk0_4) { - cube->unk0_4--; - } - - cube->prop1Cnt--; - if (cube->prop1Cnt != 0) { - cube->prop1Ptr = realloc(cube->prop1Ptr, cube->prop1Cnt * sizeof(NodeProp)); - } - else{ - free(cube->prop1Ptr); - cube->prop1Ptr = NULL; - cube->unk0_4 = 0; - } -} - -void func_8032DC70(void) { - NodeProp *sp1C; - s32 temp_v0; - - sp1C = func_803080C8(); - if (sp1C != NULL) { - func_8032DB2C(func_80308224(), sp1C); - } -} - -ActorMarker *func_8032DCAC(void){ - return D_8038341C; -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DCB8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DDD8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DE2C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DE48.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DE5C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DE78.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DE8C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DEA0.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DECC.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DEE0.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DEFC.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DF04.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DF10.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DF24.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DF40.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DF4C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DF60.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DFA0.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DFBC.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DFD8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032DFF4.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E010.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E02C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E070.s") - -void cube_free(Cube *cube){ - Prop *iProp; - - if(cube->prop2Ptr){ - for(iProp = cube->prop2Ptr; iProp < cube->prop2Ptr +cube->prop2Cnt; iProp++){ - if(iProp->markerFlag){ - func_80332B2C(iProp->actorProp.marker); - } - } - free(cube->prop2Ptr); - cube->prop2Ptr = NULL; - } - if(cube->prop1Ptr){ - free(cube->prop1Ptr); - cube->prop1Ptr = NULL; - } - cube->prop2Cnt = 0; - cube->prop1Cnt = 0; - cube->unk0_4 = 0; -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E178.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E230.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E2D4.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E398.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E49C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E5A8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E6CC.s") - -void func_8032E784(Cube *cube, s32 cnt){ - if(cube->prop1Ptr != NULL){ - free(cube->prop1Ptr); - } - cube->prop1Cnt = cnt; - cube->unk0_4 = 0; -} - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032E7E8.s") -#else -void func_8032E7E8(NodeProp *node, Cube *cube, s32 cnt) { - s32 temp_a0; - s32 temp_s2; - s32 temp_s2_2; - s32 actor; - s32 model_cache_ptr; - u32 temp_t8; - void *actor_2; - void *actor_3; - void *actor_4; - void *actor_5; - void *model_cache_ptr_2; - void *phi_s0; - NodeProp *iPtr; - s32 phi_s3; - s32 phi_s2; - s32 phi_a0; - s32 phi_s2_2; - s32 phi_a0_2; - void *i; - void *i_2; - void *i_3; - s32 phi_s2_3; - s32 i; - s32 val; - - cube->unk0_4 = 0; - phi_s3 = cnt - 1; - for(i = 0; i < cnt; i++){ - if( (node[i].unk4_6 == 6) - || (node[i].unk4_6 == 8) - || (node[i].unk4_6 == 7) - || (node[i].unk4_6 == 9) - || (node[i].unk4_6 == 0xA) - || (node[i].unk4_0 == 1) - ){ - memcpy(&cube->prop1Ptr[phi_s3], &node[i], sizeof(NodeProp)); - phi_s3--; - } else { - memcpy(&cube->prop1Ptr[cube->prop1Cnt], &node[i], sizeof(NodeProp)); - cube->unk0_4++; - } - } - free(node); - - for(i = 0; i < cnt; i++){ - iPtr = &cube->prop1Ptr[i]; - if(!iPtr->unk4_0){ - iPtr->unk10_6 = TRUE; - } - } -} -#endif - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032EA24.s") -#else -void func_8032EA24(Struct61s *file_ptr, Cube *cube) { - u8 sp47; - u8 sp46; - s32 sp34; - s32 sp2C; - s32 temp_s0_3; - s32 actor_4; - s32 actor_5; - u8 temp_t1; - NodeProp *temp_a0; - NodeProp *temp_s0; - NodeProp *i; - Prop *i_2; - - cube_free(cube); - if (func_8034B040(file_ptr, 0xA, sp46)) { - func_8032E784(cube, sp46); - cube->prop1Ptr = malloc(sp46 *sizeof(NodeProp)); - temp_s0 = malloc(sp46*sizeof(NodeProp)); - func_8034B080(file_ptr, 0xB, temp_s0, cube->prop1Cnt * sizeof(NodeProp)); - func_8032E7E8(temp_s0, cube, sp46); - } else if (func_8034B040(file_ptr, 6, sp46)) { - func_8032E784(cube, sp46); - cube->prop1Ptr = malloc(sp46 *sizeof(NodeProp)); - temp_s0 = malloc(sp46*sizeof(NodeProp)); - func_8034B080(file_ptr, 7, temp_s0, cube->prop1Cnt * sizeof(NodeProp)); - for(i = temp_s0; i < temp_s0 + sp46; i++){ - if (i->unk4_0 && !i->unkC_0) { - i->unk4_17 = 0; - i->unk10_4 = 0; - } - } - func_8032E7E8(temp_s0, cube, sp46); - } - if (func_8034B040(file_ptr, 8, &sp47)) { - temp_s0_3 = func_803203FC(2); - sp2C = func_803203FC(1); - sp34 = func_803203FC(0x1F) + sp2C + temp_s0_3; - if (sp34 != 0) { - if (func_8031B4CC() != 0) { - sp34 = 0; - } - } - if (cube->prop2Ptr != 0) { - free(cube->prop2Ptr); - } - cube->prop2Cnt = sp47; - cube->prop2Ptr = (Prop *) malloc(sp47 * sizeof(Prop)); - func_8034B080(file_ptr, 9, cube->prop2Ptr, cube->prop2Cnt * sizeof(Prop)); - for(i_2 = cube->prop2Ptr; i_2 < cube->prop2Ptr + sp47; i_2++){ - i_2->unk8_4 = 1; - if(i_2->unk8_1){ - i_2->actorProp.unk8_5 = 0; - } - if(sp34){ - if(!i_2->markerFlag && !i_2->unk8_1){ - switch(i_2->spriteProp.unk0_31 + 0x572){ - case 0x580: - case 0x6D1: - case 0x6D6: - case 0x6D7: - i_2->spriteProp.unk8_4 = 0; - break; - } - } - } - } - - } - - if ((cube->prop2Ptr != NULL) && (cube->prop2Cnt == 0)) { - free(cube->prop2Ptr); - cube->prop2Ptr = NULL; - } - - if ((cube->prop1Ptr != NULL) && (cube->prop1Cnt == 0)) { - free(cube->prop1Ptr); - cube->prop1Ptr = NULL; - cube->unk0_4 = 0; - } -} -#endif - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032EE0C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032EE20.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032EE2C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032EE80.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032F170.s") - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032F194.s") -#else -void func_8032F194(ActorMarker *marker, s32 position[3], Cube *cube) { - ActorProp sp24; - - ((s32*)&sp24)[2] = ((s32*)marker->propPtr)[2]; - sp24.x = (s16) position[0]; - sp24.y = (s16) position[1]; - sp24.z = (s16) position[2]; - func_8032F21C(cube, position, marker, func_8032D9C0(marker->cubePtr, marker->propPtr)); - ((s32*)marker->propPtr)[1] = ((s32*)&sp24)[1]; - ((s32*)marker->propPtr)[2] = ((s32*)&sp24)[2]; -} -#endif - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032F21C.s") -#else -void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3) { - ActorProp *sp1C; - u8 temp_t0; - u8 temp_t2; - u8 temp_t6; - u8 temp_t8; - - sp1C = func_8032D80C(cube); - sp1C->unk8_0 = TRUE; - sp1C->x = (s16) position[0]; - sp1C->y = (s16) position[1]; - sp1C->z = (s16) position[2]; - sp1C->marker = marker; - sp1C->unk8_15 = 0; - sp1C->unk8_1 = arg3; - sp1C->unk8_5 = FALSE; - - sp1C->unk8_10 = (func_802E4A08(position)) ? 0xF : (u8)(randf() * 32); - sp1C->unk8_3 = FALSE; - sp1C->unk8_2 = FALSE; - sp1C->unk8_4 = TRUE; - marker->propPtr = sp1C; - marker->cubePtr = cube; - if (func_80305D14()) { - func_80305CD8(func_803058C0((f32)position[1]), 1); - } -} -#endif - -void func_8032F3D4(s32 arg0[3], ActorMarker *marker, s32 arg2){ - func_8032F21C((marker->unk40_23)? func_8030364C() : cube_atPosition_s32(arg0), arg0, marker, arg2); -} - -void marker_free(ActorMarker *this){ - func_8032D9C0(this->cubePtr, (Prop *)this->propPtr); - func_80332B2C(this); -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8032F464.s") - -void func_8032F470(s32 *pos, ActorMarker *arg1){ - Cube *cubePtr; - - cubePtr = (arg1->unk40_23)? func_8030364C(): cube_atPosition_s32(pos); - - if(cubePtr == arg1->cubePtr){ - arg1->propPtr->x = pos[0]; - arg1->propPtr->y = pos[1]; - arg1->propPtr->z = pos[2]; - } - else{ - func_8032F194(arg1, pos, cubePtr); - } - - if(arg1->unk2C_1) - func_80307CA0(arg1); -} - -Prop *func_8032F528(void){ - Prop * prop = func_80303F7C(0, 0, 0, 1); - if(prop != NULL){ - D_80383448 = TRUE; - } - else{ - D_80383448 = FALSE; - } - return prop; -} - -void func_8032F578(f32 position[3], ActorMarker *marker, f32 arg2, s32 arg3) { - func_8032F64C(position, marker); - func_80320ED8(marker, arg2, arg3); -} - -void func_8032F5B0(f32 position[3], ActorMarker *marker, f32 arg2, s32 arg3) { - func_8032F64C(position, marker); - func_80320EB0(marker, arg2, arg3); -} - -void func_8032F5E8(s32 arg0[3], s32 arg1, f32 arg2, s32 arg3) { - f32 sp1C[3]; - - sp1C[0] = arg0[0]; - sp1C[1] = arg0[1]; - sp1C[2] = arg0[2]; - func_8032F5B0(sp1C, arg1, arg2, arg3); -} - -void func_8032F64C(f32 *pos, ActorMarker * marker){ - s32 pos_w[3]; - - pos_w[0] = pos[0]; - pos_w[1] = pos[1]; - pos_w[2] = pos[2]; - func_8032F470(pos_w, marker); -} - -void func_8032F6A4(s32 *pos, ActorMarker * marker, s32 *rot){ - s32 rot_w[3]; - - rot_w[0] = (s32)rot[0] % 360; - if(rot_w[0] < 0) - rot_w[0] += 360; - - rot_w[1] = (s32)rot[1] % 360; - if(rot_w[1] < 0) - rot_w[1] += 360; - - rot_w[2] = (s32)rot[2] % 360; - if(rot_w[2] < 0) - rot_w[2] += 360; - - marker->yaw = rot_w[1]; - marker->pitch = rot_w[0]; - marker->roll = rot_w[2]; - func_8032F470(pos, marker); -} - -void func_8032F7EC(f32 position[3], ActorMarker *marker, f32 rotation[3]) { - marker->yaw = rotation[1]; - marker->pitch = rotation[0]; - marker->roll = rotation[2]; - func_8032F64C(position, marker); -} - -ActorMarker * func_8032F9DC(s32 *pos, MarkerDrawFunc arg1, int arg2, int arg3, int arg4){ - ActorMarker * marker = func_80332A60(); - marker->propPtr = NULL; - marker->cubePtr = NULL; - marker->unk8 = arg1; - marker->unk14_20 = arg3; - marker->unk40_23 = arg4; - func_8032F3D4(pos, marker, arg2); - marker->actrArrayIdx = 0; - marker->unk14_10 = 0; - marker->modelId = 0; - marker->unk3E_1 = 0; - marker->unk14_22 = 0; - marker->unk14_21 = 0; - marker->yaw = 0; - marker->pitch = 0; - marker->roll = 0; - marker->unk2C_2 = 0; - marker->unk2C_1 = 0; - marker->collidable = 1; - marker->unk3E_0 = 0; - marker->unk40_22 = 0; - marker->unk40_19 = 0; - marker->unk40_21 = 0; - marker->unkC = NULL; - marker->unk10 = NULL; - marker->unk1C = NULL; - marker->unk54 = NULL; - marker->unk58 = 0; - marker->unk18 = 0; - marker->unk24 = 0; - marker->unk30 = NULL; - marker->unk28 = 0; - marker->unk34 = 0; - marker->unk38[0] = 0; - marker->unk38[1] = 0; - marker->unk38[2] = 0; - marker->unk44 = 0; - marker->unk20 = 0; - marker->unk50 = 0; - marker->unk48 = 0; - marker->unk4C = 0; - marker->unk40_20 = 0; - marker->unk40_31 = 0; - return marker; -} - -ActorMarker * func_8032FB80(f32 *pos, MarkerDrawFunc arg1, int arg2, enum asset_e model_id, int arg4){ - s32 sp24[3]; - sp24[0] = pos[0]; - sp24[1] = pos[1]; - sp24[2] = pos[2]; - func_8032F9DC(sp24, arg1, arg2, model_id, arg4); -} - -ActorMarker * func_8032FBE4(f32 *pos, MarkerDrawFunc arg1, int arg2, enum asset_e model_id){ - return func_8032FB80(pos, arg1, arg2, model_id, 0); -} - -void func_8032FC04(ActorMarker *marker, f32 rotation[3]) { - marker->pitch = rotation[0]; - marker->yaw = rotation[1]; - marker->roll = rotation[2]; -} - -void func_8032FDDC(f32 rotation[3], ActorMarker *marker) { - marker->pitch = rotation[0]; - marker->yaw = rotation[1]; - marker->roll = rotation[2]; -} - -int func_8032FFB4(ActorMarker *this, s32 arg1){ - this->unk14_20 = arg1; -} - -//marker_setActorArrayIndex -void func_8032FFD4(ActorMarker *this, s32 arg1){ - this->actrArrayIdx = arg1; -} - -void func_8032FFEC(ActorMarker *this, s32 arg1){ - this->unk28 = arg1; -} - -void func_8032FFF4(ActorMarker *this, ActorMarker *other, s32 type){ - switch(type){ - case 0: //ow - if(this->unkC) - this->unkC(this, other); - break; - case 1: - if(this->unk10) - this->unk10(this, other); - break; - case 2: //die - if(this->unk1C) - this->unk1C(this, other); - break; - } -} - -void func_80330078(ActorMarker *marker, ActorMarker *other_marker, s16 *arg2){ - if(marker != NULL && marker->unk54 != NULL){ - marker->unk54(marker, other_marker, arg2); - } -} - -//marker_setCollisionMethods -void marker_setCollisionScripts(ActorMarker *this, MarkerCollisionFunc ow_func, MarkerCollisionFunc arg2, MarkerCollisionFunc die_func){ - this->unkC = ow_func; - this->unk10 = arg2; - this->unk1C = die_func; -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803300B8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803300C0.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803300C8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803300D0.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803300D8.s") - -#define AssetCacheSize 0x3D5 - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803300E0.s") - -void marker_setModelId(ActorMarker *this, enum asset_e modelIndex){ - this->modelId = modelIndex; -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330104.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330208.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803303B8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330534.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_8033056C.s") - -//modelCache_Init -void func_803305AC(void){ - s32 i; - - modelCache = (ModelCache *)malloc(AssetCacheSize * sizeof(ModelCache)); - for(i = 0; ipropPtr->x; - position[1] = (f32) marker->propPtr->y; - position[2] = (f32) marker->propPtr->z; - - rotation[0] = (f32)marker->pitch; - rotation[1] = (f32)marker->yaw; - rotation[2] = (f32)marker->roll; - - scale = (marker->unk3E_0) ? marker_getActor(marker)->scale : 1.0f; - if (func_802EA190(marker->unk20)) { - return func_802EBAE0(sp58, position, rotation, scale, 0, marker->unk20, arg1, arg2, arg3); - } - return 0; -} - - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330B10.s") - -//marker_loadModelBin -BKModelBin *func_80330B1C(ActorMarker *this){ - Actor* thisActor; - BKModelBin * model; - ModelCache *modelInfo; - - if(this->modelId == 0) - return NULL; - - thisActor = marker_getActor(this); - if((modelInfo = &modelCache[thisActor->modelCacheIndex])->modelPtr == NULL){ - model = assetcache_get(this->modelId); - modelInfo->modelPtr = model; - if(func_8033A110(model)){ - modelInfo->unkC = func_80349C3C(); - func_80349D00(modelInfo->unkC, func_8033A110(modelInfo->modelPtr)); - } - func_8032ACA8(thisActor); - } - func_8032AB84(thisActor); - if(!this->unk18 && this->propPtr->unk8_1 && modelInfo->modelPtr && func_8033A12C(modelInfo->modelPtr)){ - this->unk18 = func_80330B10(); - } - modelInfo->unk10 = func_8023DB5C(); - return modelInfo->modelPtr; -} - -s32 func_80330C48(Actor *actor){ - ModelCache *model_cache_ptr = &modelCache[actor->modelCacheIndex]; - return model_cache_ptr->unkC; -} - -BKVertexList *func_80330C74(Actor *actor){ - ModelCache *model_cache_ptr; - model_cache_ptr = &modelCache[actor->modelCacheIndex]; - if(model_cache_ptr->modelPtr == NULL) - return NULL; - - if(actor->unkF4_30 && actor->unk14C[actor->unkF4_29]){ - return actor->unk14C[actor->unkF4_29]; - }else{ - return func_8033A148(model_cache_ptr->modelPtr); - } -} - -BKVertexList *func_80330CFC(Actor *this, s32 arg1){ - ModelCache *model_cache_ptr; - model_cache_ptr = &modelCache[this->modelCacheIndex]; - if(model_cache_ptr->modelPtr == NULL){ - func_80330B1C(this->marker); - } - if(this->unkF4_30 && this->unk14C[this->unkF4_29 ^ arg1] != NULL) - return this->unk14C[this->unkF4_29 ^ arg1]; - return func_8033A148(model_cache_ptr->modelPtr); -} - -BKVertexList * func_80330DA4(Actor *this){ - return func_80330CFC(this, 0); -} - -BKVertexList * func_80330DC4(Actor *this){ - return func_80330CFC(this, 1); -} - -BKModelBin *func_80330DE4(ActorMarker *this){ - Actor *thisActor = marker_getActor(this); - return (modelCache + thisActor->modelCacheIndex)->modelPtr; -} - -BKModelBin *func_80330E28(Actor* this){ - return (modelCache + this->modelCacheIndex)->modelPtr; -} - -BKSpriteDisplayData *func_80330E54(ActorMarker *marker, BKSprite **sprite_ptr) { - ModelCache *model_cache_ptr; - - if (marker->modelId == 0) { - if (*sprite_ptr != NULL) { - *sprite_ptr = NULL; - } - return 0; - } - model_cache_ptr = &modelCache[marker_getActor(marker)->modelCacheIndex]; - if (model_cache_ptr->unk4 == 0) { - model_cache_ptr->unk4 = func_8033B6C4(marker->modelId, &model_cache_ptr->unk8); - } - model_cache_ptr->unk10 = func_8023DB5C(); - if (sprite_ptr != NULL) { - *sprite_ptr = model_cache_ptr->unk4; - } - return model_cache_ptr->unk8; -} - -BKSpriteDisplayData *func_80330F30(ActorMarker *marker){ - return func_80330E54(marker, NULL); -} - -BKSprite *func_80330F50(ActorMarker * marker){ - BKSprite *sp1C; - func_80330E54(marker, &sp1C); - return sp1C; -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330F74.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330F7C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330F8C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330F94.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330FBC.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80330FC4.s") - -void func_80330FCC(ActorMarker *marker, s32 arg1[3]){ - arg1[0] = marker->propPtr->x; - arg1[1] = marker->propPtr->y; - arg1[2] = marker->propPtr->z; -} - -void func_80330FF4(void){ - Actor *phi_s0; - f32 sp48[3]; - f32 scale[3]; - - if(func_80334904() == 1) - return; - - if(D_8038341C != NULL){ - phi_s0 = marker_getActor(D_8038341C); - player_getPosition(sp48); - scale[0] = phi_s0->pitch; - scale[1] = phi_s0->yaw; - scale[2] = phi_s0->roll; - func_80340200(D_8038341C->unk50, phi_s0->position, scale, 1.0f, NULL, D_80383420, func_80330DA4(phi_s0), D_80383410); - }//L8033108C - - func_802C39D4(); - if(D_8038341C != NULL){ - phi_s0 = marker_getActor(D_8038341C); - player_getPosition(sp48); - scale[0] = phi_s0->pitch;\ - scale[1] = phi_s0->yaw;\ - scale[2] = phi_s0->roll; - if(func_80340020(D_8038341C->unk50, phi_s0->position, scale, 1.0f, NULL, func_80330DC4(phi_s0), sp48, sp48)){ - sp48[1] -= 10.0f; - func_8028FAB0(sp48); - } - } - if(D_8038341C != NULL){ - D_8038341C = NULL; - } - //L80331144 -} - -bool func_80331158(ActorMarker *arg0, s32 arg1, s32 arg2) { - Actor *actor; - u32 temp_a0; - - actor = marker_getActor(arg0); - if ((actor->unk3C & 0x400) && ((s32)actor->unk3C << 4) >= 0){ - return func_802E74A0(actor->position, actor->unk178 * D_80378EB0, arg1, arg2) == 0; - } - return FALSE; -} - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803311D4.s") -#else -extern int func_802E805C(BKCollisionList *, BKVertexList *, f32[3], f32[3], f32, f32[3], f32[3], f32[3], u32); -s32 func_803311D4(Cube *arg0, f32 *arg1, f32 *arg2, f32 *arg3, u32 arg4) { - f32 spAC[3]; - f32 spA0[3]; - f32 sp88[3]; - f32 sp7C[3]; - Actor *temp_s2_2; - Actor *temp_v0_6; - ActorMarker *temp_a0; - ActorMarker *temp_a0_2; - BKModelBin *temp_v0_2; - BKModelBin *temp_v0_3; - BKModelBin *var_a0; - BKModelBin *var_s0; - BKModelBin *var_v0_2; - BKVertexList *temp_a1; - Prop *var_s1; - Struct6Cs *temp_v0_8; - f32 var_f10; - f32 var_f4; - f32 var_f6; - s32 (*temp_v1_2)(struct actor_marker_s *, f32 [3], f32, f32 [3], s32); - s32 temp_s0; - s32 temp_s0_2; - BKCollisionList *temp_s2; - s32 temp_v0; - s32 temp_v0_4; - s32 temp_v0_5; - s32 temp_v0_7; - s32 temp_v1; - s32 var_s6; - s32 var_v0; - u32 temp_t3; - u32 temp_t6; - u32 temp_t9; - u32 var_s5; - - var_s5 = arg0->prop2Cnt; - var_s6 = 0; - var_s1 = arg0->prop2Ptr; - for(var_s5 = arg0->prop2Cnt; var_s5 > 0; var_s5--) { - if (!var_s1->markerFlag && var_s1->unk8_1 && var_s1->unk8_4) { //propProp - var_s0 = func_8030A4B4(var_s1->propProp.unk0_31); - if ((var_s0 != NULL) || (func_8028F280() && ((var_s0 = func_8030A428(var_s1->propProp.unk0_31)) != NULL))) { - temp_s2 = func_8033A084(var_s0); - if (temp_s2 != 0) { - spAC[0] = (f32) var_s1->propProp.unk4[0]; - spAC[1] = (f32) var_s1->propProp.unk4[1]; - spAC[2] = (f32) var_s1->propProp.unk4[2]; - spA0[0] = 0.0f; - spA0[1] = (f32) (var_s1->propProp.unk0_15 * 2); - spA0[2] = (f32) (var_s1->propProp.unk0_7 * 2); - var_v0 = func_802E805C(temp_s2, func_8033A148(var_s0), spAC, spA0, var_s1->propProp.unkA / 100.0, arg1, arg2, arg3, arg4); - if (var_v0 != 0) { - var_s6 = var_v0; - } - } - } - } else if (var_s1->markerFlag && var_s1->unk8_3 && var_s1->unk8_4 && !func_80331158(var_s1->actorProp.marker, arg1, arg2)) { - temp_a0 = var_s1->actorProp.marker; - if (temp_a0->collidable && (marker_getActor(temp_a0)->unk3C & 0x000010000)) { - var_a0 = func_80330B1C(var_s1->actorProp.marker); - } else { - var_a0 = func_80330DE4(var_s1->actorProp.marker); - } - if (var_a0 == NULL && func_8028F280(var_a0)) { - var_a0 = func_80330B1C(var_s1->actorProp.marker); - } - temp_s0 = func_8033A084(var_a0); - if (temp_s0 != 0) { - temp_s2_2 = marker_getActor(var_s1->actorProp.marker); - temp_a1 = func_80330C74(temp_s2_2); - sp88[0] = (f32) var_s1->actorProp.x; - sp88[1] = (f32) var_s1->actorProp.y; - sp88[2] = (f32) var_s1->actorProp.z; - sp7C[0] = (f32) var_s1->actorProp.marker->pitch; - sp7C[1] = (f32) var_s1->actorProp.marker->yaw; - sp7C[2] = (f32) var_s1->actorProp.marker->roll; - temp_s0_2 = func_802E805C(temp_s0, temp_a1, &sp88, &sp7C, temp_s2_2->scale, arg1, arg2, arg3, arg4); - if ((temp_s0_2 != 0) && (func_8029453C() != 0)) { - func_80330B1C(var_s1->actorProp.marker); - if (var_s1->actorProp.marker->unk50 != 0) { - D_80383410[0] = (f32) arg2[0]; - D_80383410[1] = (f32) arg2[1]; - D_80383410[2] = (f32) arg2[2]; - D_8038341C = var_s1->actorProp.marker; - D_80383420 = temp_s0_2; - } - } - if (temp_s0_2 != 0) { - var_s6 = temp_s0_2; - } - } - } else if (var_s1->markerFlag) { - temp_a0_2 = var_s1->actorProp.marker; - if (temp_a0_2->unk18 != NULL) { - if (temp_a0_2->unk18->unk0 != NULL) { - var_v0 = temp_a0_2->unk18->unk0(temp_a0_2, arg1, arg2, arg3, arg4); - if (var_v0 != 0) { - var_s6 = var_v0; - } - } - } - } - var_s1++; - } - return var_s6; -} -#endif - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_80331638.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A4D00/func_803319C0.s") - -f32 func_80331D20(BKSprite *sprite) { - BKSpriteFrame *frame; - s32 temp_lo; - s32 temp_lo_2; - s32 phi_v0; - - if (sprite == 0) { - return 1.0f; - } - frame = spriteGetFramePtr(sprite, 0); - temp_lo = (s32) (((frame->unk10 - frame->unkC) + 1) * sprite->unk8) / (s32) frame->w; - temp_lo_2 = (s32) (((frame->unk12 - frame->unkE) + 1) * sprite->unkA) / (s32) frame->h; - phi_v0 = (temp_lo_2 < temp_lo) ? temp_lo : temp_lo_2; - return (phi_v0 <= 0) ? 1 : phi_v0; -} - - -f32 func_80331E34(Prop *arg0){ - return func_80331D20(func_8030A55C(arg0->spriteProp.unk0_31)); -} - -f32 func_80331E64(ActorMarker *marker) { - f32 sp24; - - if (marker->modelId == 0) { - return 0.0f; - } - sp24 = func_80331D20(func_80330F50(marker)); - marker->unk38[1] = (s16) (sp24 / 2); - if (marker->unk3E_0) { - marker->unk38[1] *= marker_getActor(marker)->scale; - } - return sp24; -} - - -f32 func_80331F1C(Prop *arg0){ - return func_802EC920(func_8033A148(func_8030A428(arg0->propProp.unk0_31))); -} - -f32 func_80331F54(ActorMarker *marker) { - f32 sp34; - f32 sp28[3]; - BKModelBin *model; - - model = func_80330B1C(marker); - if (model == NULL) { - return 1.0f; - } - func_802EC930(func_8033A148(model), sp28, &sp34); - if (marker->unk3E_0) { - sp28[0] = sp28[0] * marker_getActor(marker)->scale;\ - sp28[1] = sp28[1] * marker_getActor(marker)->scale;\ - sp28[2] = sp28[2] * marker_getActor(marker)->scale; - } - marker->unk38[0] = (s16) sp28[0];\ - marker->unk38[1] = (s16) sp28[1];\ - marker->unk38[2] = (s16) sp28[2]; - return sp34 * 2; -} - -f32 func_80332050(Prop *prop, ActorMarker *marker, s32 arg2) { - ActorMarker * phi_v0; - f32 phi_f2; - - phi_v0 =(prop->markerFlag) ? prop->actorProp.marker : NULL; - phi_f2 = prop->unk4[arg2] - (&marker->propPtr->x)[arg2] - marker->unk38[arg2]; - if (phi_v0 != NULL) { - phi_f2 += phi_v0->unk38[arg2]; - } - return phi_f2; -} - - -f32 func_803320BC(ActorProp *prop, f32 (*arg1)(ActorMarker *)) { - ActorMarker *marker; - f32 sp18; - - marker = prop->marker; - sp18 = (f32)marker->unk14_10; - if (sp18 == 0.0f) { - sp18 = marker->unk14_10 = arg1(marker) * 0.5; - } - if (marker->unk3E_0) { - sp18 *= marker_getActor(marker)->scale; - } - return sp18; -} - -f32 func_80332220(Prop * prop, f32 (*arg1)(Prop *)) { - f32 phi_f12; - - phi_f12 = func_8030A590(); - if (phi_f12 == 0.0f) { - func_8030A5EC(prop, phi_f12 = arg1(prop) * 0.5); - } - return phi_f12; -} - - -f32 func_8033229C(ActorMarker *marker) { - ActorProp *prop; - - prop = marker->propPtr; - if (prop->unk8_1) { - return func_803320BC(prop, func_80331F54); - } - else{ - return func_803320BC(prop, func_80331E64); - } -} - -extern u8 *D_8036E7C4; -extern ActorMarker *D_8036E7C8; -extern s16 D_8036E7E0[]; -extern s16 D_8036E7FC[]; -//extern s32 D_8036E800; -// extern u32 D_8036E804[8]; - -extern u8 D_80383428[0x1C]; - -Prop *func_803322F0(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *arg4) { - Prop *phi_s1; - f32 phi_f24; - f32 phi_f20; - f32 phi_f22; - f32 phi_f2; - s32 phi_s3; - f32 sp74[3]; - f32 sp68[3]; - - phi_s3 = cube->prop2Cnt - *arg4; - if (marker->collidable) { - phi_s1 = &cube->prop2Ptr[(*arg4)++]; - for(phi_s3 = phi_s3; phi_s3 != 0; phi_s3--){ - if (phi_s1->unk8_4) { - if( phi_s1->markerFlag && (!phi_s1->actorProp.marker->unk3E_0 || !marker_getActor(phi_s1->actorProp.marker)->despawn_flag)){ - if (phi_s1->actorProp.marker->collidable && (marker != phi_s1->actorProp.marker)) { - if( (phi_s1->actorProp.marker->modelId) - && (func_803327A8(phi_s1->actorProp.marker->modelId) & arg3) - ) { - if( phi_s1->actorProp.unk8_1 - && (phi_s1->actorProp.marker->unk18 != NULL) - && (phi_s1->actorProp.marker->unk18->unkC != NULL) - ) { - func_803320BC(phi_s1, &func_80331F54); - sp68[0] = (f32) (marker->unk38[0] + marker->propPtr->x); - sp68[1] = (f32) (marker->unk38[1] + marker->propPtr->y); - sp68[2] = (f32) (marker->unk38[2] + marker->propPtr->z); - if ((phi_s1->actorProp.marker->unk40_31 = phi_s1->actorProp.marker->unk18->unkC(phi_s1->actorProp.marker, sp68, arg2, sp74, 0)) != 0) { - return phi_s1; - } - } else{ - phi_f24 = func_80332050(phi_s1, marker, 0); - phi_f22 = func_80332050(phi_s1, marker, 2); - if (phi_s1->actorProp.unk8_1) { - phi_f20 = func_80332050(phi_s1, marker, 1); - phi_f2 = func_803320BC(phi_s1, func_80331F54); - } else { - phi_f20 = func_80332050(phi_s1, marker, 1); - phi_f2 = func_803320BC(phi_s1, &func_80331E64); - } - phi_f2 = phi_f2 + arg2; - if ((phi_f24*phi_f24 + phi_f20*phi_f20 + phi_f22*phi_f22) < phi_f2*phi_f2) { - return phi_s1; - } - } - } - } - } - else if (phi_s1->unk8_1) {//PropProp - if (func_803327A8(phi_s1->propProp.unk0_31 + 0x2D1) & arg3) { - phi_f24 = func_80332050(phi_s1, marker, 0); - phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331F1C); - phi_f22 = func_80332050(phi_s1, marker, 2); - phi_f2 = func_80332220(phi_s1, &func_80331F1C) + arg2; - if (( (phi_f24 * phi_f24) + (phi_f20 * phi_f20) + (phi_f22 * phi_f22)) < (phi_f2 * phi_f2)) { - return phi_s1; - } - } - } - else{ - if (func_803327A8(phi_s1->spriteProp.unk0_31 + 0x572) & arg3) { - phi_f24 = func_80332050(phi_s1, marker, 0);\ - phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331E34);\ - phi_f22 = func_80332050(phi_s1, marker, 2); - phi_f2 = func_80332220(phi_s1, &func_80331E34) + arg2; - if (((phi_f24 * phi_f24) + (phi_f20 * phi_f20) + (phi_f22 * phi_f22)) < (phi_f2 * phi_f2)) { - return phi_s1; - } - } - } - } - phi_s1++; - (*arg4)++; - } - } - *arg4 = -1; - return NULL; -} - - -void func_80332764(s32 arg0, s32 arg1) { - u8 *actor; - - D_8036E7C4[arg0 >> 2] |= arg1 << ((arg0 & 3) * 2); -} - -void func_80332790(s32 arg0){ - D_8036E7C4[arg0 >> 2] = 0; -} - -s32 func_803327A8(s32 arg0) { - return ((s32) D_8036E7C4[arg0 >> 2] >> ((arg0 & 3) * 2)) & 3; -} - -void func_803327D4(s16 *arg0, s32 arg1) { - s32 i; - - for(i = 0; arg0[i] != -1; i++){ - func_80332764(arg0[i], arg1); - } -} - -void func_8033283C(s32 arg0, s32 arg1, s32 arg2) { - s32 i; - - for(i = arg0; i < arg1; i++){ - func_80332764(i, arg2); - } -} - -void func_80332894(void) { - s32 size; - s32 i; - - size = 0x579; - D_8036E7C4 = malloc(size); - i = 0; - do{ - D_8036E7C4[i] = 0; - i++; - }while(i != size); - func_8033283C(0x34D, 0x3A6, 3); - func_8033283C(0x3A6, 0x572, 3); - func_803327D4(&D_8036E7E0, 1); - func_803327D4(&D_8036E7FC, 2); - func_8032D330(); -} - -void func_8033297C(void){ - free(D_8036E7C4); - D_8036E7C4 = NULL; - func_8032D36C(); -} - -//MarkerList_Init -void func_803329AC(void){ - s32 i; - - D_8036E7C8 = (ActorMarker *)malloc(0xE0*sizeof(ActorMarker)); - - for( i = 0; i < 0x1C; i++){ - D_80383428[i] = 0; - } - - for(i =0; i<0xE0; i++){ - D_8036E7C8[i].unk5C = 0; - } -} - -void func_80332A38(void){ - free(D_8036E7C8); - D_8036E7C8 = NULL; -} - -//MarkerList_getFreeMarker -ActorMarker * func_80332A60(void){ - static s32 D_8036E800 = 0x387FB; - int i; - int j; - int tmp_a2; - ActorMarker *marker; - - for(i = 0; i < 0x1C && D_80383428[i] == 0xff; i++); - if(i == 0x1C) - return NULL; - - tmp_a2 = 0x80; - for(j = 0; D_80383428[i] & tmp_a2; j++){tmp_a2 >>= 1;} - D_80383428[i] |= tmp_a2; - marker = D_8036E7C8 + 8*i + j; - marker->unk5C = D_8036E800; - D_8036E800++; - return marker; -} - -void func_80332B2C(ActorMarker * arg0){ - static s32 D_8036E804[8] = {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE}; - - s32 index = (arg0 - D_8036E7C8); - arg0->unk5C = 0; - D_80383428[index >> 3] = D_80383428[index >> 3] & D_8036E804[index & 7]; -} - -void func_80332B7C(void){ - return; -} diff --git a/src/core2/code_A5BC0.c b/src/core2/code_A5BC0.c new file mode 100644 index 00000000..39c29967 --- /dev/null +++ b/src/core2/code_A5BC0.c @@ -0,0 +1,1621 @@ +#include +#include "functions.h" +#include "variables.h" + + +extern int func_802E74A0(f32[3], f32, s32, s32); +extern f32 func_802EC920(BKVertexList *); +extern void func_802C39D4(void); +extern bool func_80340020(s32, f32[3], f32[3], f32, s32, BKVertexList *, f32[3], f32[3]); +extern void func_80340200(s32, f32[3], f32[3], f32, s32, s32, BKVertexList *, s32); + +extern f32 func_8030A590(void); +extern void func_8030A5EC(Prop *, f32); + +Prop *func_80303F7C(s32, f32, s32, s32); +s32 func_8032D9C0(Cube*, Prop*); +void func_80332B2C(ActorMarker * arg0); +s32 func_803058C0(f32); +void func_80305CD8(s32, s32); +void func_80330104(Cube*); +ActorMarker * func_80332A60(void); +extern void func_8032F3D4(s32 [3], ActorMarker *, s32); +extern void func_8030A350(Gfx **, Mtx **, Vtx **, f32[3], f32, s32, Cube*,s32 ,s32, s32, s32, s32); +extern void func_8030A2D0(Gfx **, Mtx **, Vtx **, f32[3], f32[3], f32, s32, Cube*); + +typedef union{ + struct{ + u32 pad31: 27; + u32 unk4: 1; + u32 pad3: 1; + u32 unk2: 1; + u32 unk1: 1; + u32 unk0: 1; + }; + u32 word; +} tmp_bitfield; + +s32 func_80320DB0(f32[3], f32, f32[3], u32); +extern void func_80320EB0(ActorMarker *, f32, s32); +extern void func_80320ED8(ActorMarker *, f32, s32); +f32 func_8033229C(ActorMarker *marker); +s32 func_803327A8(s32 arg0); +void func_8032CD60(Prop *); +f32 func_8033A244(f32); +void func_8032F64C(f32 *pos, ActorMarker * marker); + +/* .data */ +extern s32 D_8036E7B0; +extern ModelCache *modelCache; //D_8036E7C0 //model pointer array pointer +extern u8 *D_8036E7C4; +extern ActorMarker *D_8036E7C8; +extern s16 D_8036E7E0[]; +extern s16 D_8036E7FC[]; +//extern s32 D_8036E800; +// extern u32 D_8036E804[8]; + +/* .rodata */ +extern f32 D_80378EA0; +extern f32 D_80378EA4; + +extern f64 D_80378EB0; + +/* .bss */ +s32 D_803833F0[3]; +s32 D_803833FC; +s32 D_80383400; +s32 D_80383404; +s32 D_80383408; +s32 D_8038340C; +f32 D_80383410[3]; +ActorMarker *D_8038341C; +s32 D_80383420; +u8 D_80383428[0x1C]; +u32 D_80383444; +int D_80383448; +s32 D_80383450[0x40]; +vector(ActorMarker *) *D_80383550; +vector(ActorMarker *) *D_80383554; +UNK_TYPE(s32) D_80383558; +UNK_TYPE(s32) D_8038355C; + +/* .code */ +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032CB50.s") + +// void func_8032CB50(Cube *cube, s32 arg1) { +// s32 sp4C[3]; +// // ? *temp_a0; +// s32 temp_a1; +// s32 temp_a1_2; +// s32 temp_a2; +// s32 temp_a2_2; +// s32 temp_t6; +// s32 temp_t7; +// s32 temp_v0; +// s32 temp_v0_2; +// u32 temp_t2; +// u32 temp_t4; +// u32 temp_t5; +// void *temp_v1; +// Prop *phi_v1; +// // ? *phi_a0; +// u32 phi_t2; +// Prop *phi_a3; +// Prop *phi_t0; +// s32 *phi_a0_2; +// u32 phi_a3_2; +// Prop *phi_v1_2; +// u32 phi_a3_3; +// u32 phi_t1; +// u32 phi_a3_4; +// u32 phi_t0_2; +// s32 i; +// Prop tmp; + +// if (cube->prop2Cnt < 2U) +// return; +// if (arg1 == 0) { +// func_8024C5F0(sp4C); +// } else { +// sp4C[0] = 0; +// sp4C[1] = 0; +// sp4C[2] = 0; +// } +// phi_v1 = cube->prop2Ptr; +// phi_t2 = 0U; +// phi_t1 = cube->prop2Cnt; +// for(phi_t2 = 0; phi_t2 < cube->prop2Cnt; phi_t2++){ +// temp_v0 = cube->prop2Ptr[phi_t2].actorProp.x - sp4C[0]; +// temp_a1 = cube->prop2Ptr[phi_t2].actorProp.y - sp4C[1]; +// temp_a2 = cube->prop2Ptr[phi_t2].actorProp.z - sp4C[2]; +// D_80383450[phi_t2] = temp_v0*temp_v0 + temp_a1*temp_a1 + temp_a2*temp_a2; +// } +// phi_a3 = cube->prop2Ptr; +// phi_t0 = &cube->prop2Ptr[cube->prop2Cnt - 1]; +// do { +// phi_a3_2 = 0U; +// // phi_t0_2 = phi_t0; +// for(phi_v1_2 = phi_a3; phi_v1_2 < phi_t0; phi_v1_2++){ +// phi_a0_2 = &D_80383450[phi_v1_2 - cube->prop2Ptr]; +// temp_a1_2 = phi_a0_2[0]; +// temp_a2_2 = phi_a0_2[1]; +// // phi_a3_4 = phi_a3_2; +// // phi_a3_4 = phi_a3_2; +// if (phi_a0_2[0] < phi_a0_2[1]) { +// phi_t0 = phi_v1_2 + 1; +// if (phi_a3_2 != 0) { +// phi_t0_2 = (u32) phi_v1_2; +// } else { +// phi_a3_2 = phi_v1_2 - 1; +// if (phi_v1_2 == cube->prop2Ptr) { +// phi_a3_4 = (u32) phi_v1_2; +// } +// } +// phi_a0_2[0] = temp_a2_2; +// phi_a0_2[0] = temp_a1_2; + +// tmp = phi_v1_2[0]; +// phi_v1_2[0] = phi_v1_2[1]; +// phi_v1_2[1] = tmp; +// } +// // temp_v1 = phi_v1_2 + 0xC; +// // phi_a0_2 += 4; +// // phi_a3_2 = phi_a3_4; +// // phi_v1_2 = temp_v1; +// // phi_a3_3 = phi_a3_4; +// // phi_t0 = phi_t0_2; +// } + +// phi_a3 = phi_a3_3; +// } while (phi_a3_3 != 0); +// func_80330104(cube); +// } + + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032CD60.s") +// void func_8032CD60(Prop *prop){ +// s32 tmp_v0; +// if(prop->markerFlag){ +// tmp_v0 = func_80330F50(prop->actorProp.marker); +// } +// else{ +// tmp_v0 = func_8030A55C(prop->propProp.unk0_31); +// } + +// if(tmp_v0 == 0) return; + +// } + +void func_8032D120(Cube *cube){ + if(cube->prop2Cnt >= 2) + func_8032CB50(cube, 1); +} + +void func_8032D158(Cube *cube){ + if(cube->prop2Cnt >= 2) + func_8032CB50(cube, 0); +} + +void __marker_draw(ActorMarker *this, Gfx **gfx, Mtx **mtx, Vtx **vtx){ + Actor *actor; + u32 draw_dist; + f32 draw_dist_f; + f32 percentage; + if(!this->unk3E_0){ + this->unk8(this, gfx, mtx, vtx); + return; + } + actor = marker_getActor(this); + func_8033A28C(actor->unk58_2); + if( actor->unk58_2 && !this->unk40_23 && !this->unk40_21 && !D_8036E7B0){ + func_8033A244(D_80378EA0); + } + + if(actor->unk124_7 && !actor->despawn_flag && actor->unk58_0){ + draw_dist = actor->actor_info->draw_distance; + if(draw_dist != 0){ + percentage = (f32)draw_dist*(1/(f64)0x400); + } + else if(this->unk40_21){ + percentage = 2.0f; + } + else{ + percentage = 1.0f; + } + func_8033A280(percentage); + this->unk8(this, gfx, mtx, vtx); + }//L8032D300 + func_8033A244(D_80378EA4); + func_8033A280(1.0f); +} + +void func_8032D330(void){ + D_80383550 = vector_new(sizeof(ActorMarker *),2); + D_80383554 = vector_new(sizeof(u32),2); +} + +void func_8032D36C(void){ + vector_free(D_80383550); + D_80383550 = NULL; + vector_free(D_80383554); + D_80383554 = NULL; +} + +void func_8032D3A8(void){ + vector_clear(D_80383550); + vector_clear(D_80383554); +} + +void func_8032D3D8(Gfx **gdl, Mtx **mptr, Vtx **vptr){ + int i; + for(i = 0; i < vector_size(D_80383550); i++){ + __marker_draw(*(u32*) vector_at(D_80383550, i), gdl, mptr, vptr); + } +} + +void func_8032D474(Gfx **gdl, Mtx **mptr, Vtx **vptr){ + int i; + for(i = 0; i < vector_size(D_80383554); i++){ + __marker_draw(*(u32*) vector_at(D_80383554, i), gdl, mptr, vptr); + } +} + +void func_8032D510(Cube *cube, Gfx **gfx, Mtx **mtx, Vtx **vtx){ + Prop *iProp; + int i; + f32 sp94[3]; + f32 sp88[3]; + tmp_bitfield tmp_v0; + int iOffset; + ActorMarker **markerPtr; + + if(cube->prop2Cnt == 0 ) return; + + func_8032CB50(cube, 0); + iOffset = 0; + for(i = 0; i < cube->prop2Cnt; i++){//L8032D5A0 + iOffset = i*0xC; + iProp = ((s32)cube->prop2Ptr + iOffset); + tmp_v0.word = *(u32 *)((s32)iProp + 0x8); + if(!tmp_v0.unk4){ + + }else{ + if(!tmp_v0.unk1){ + func_8032CD60(iProp); + } + tmp_v0.word = *(u32 *)((s32)iProp + 0x8); + if(tmp_v0.unk0){//actorProp; + if(iProp->actorProp.marker->unk40_22){ + markerPtr = (ActorMarker **)vector_pushBackNew(&D_80383550); + *markerPtr = iProp->actorProp.marker; + } + else if(iProp->actorProp.marker->unk40_19){ + markerPtr = (ActorMarker **)vector_pushBackNew(&D_80383554); + *markerPtr = iProp->actorProp.marker; + } + else{ + __marker_draw(iProp->actorProp.marker, gfx, mtx, vtx); + }//L8032D62C + } + else{//L8032D640 + sp94[0] = (f32)iProp->propProp.unk4[0]; + sp94[1] = (f32)iProp->propProp.unk4[1]; + sp94[2] = (f32)iProp->propProp.unk4[2]; + if(iProp->unk8_1){ + sp88[0] = 0.0f; + sp88[1] = (f32)((s32)iProp->propProp.unk0_15*2); + sp88[2] = (f32)((s32)iProp->propProp.unk0_7*2); + func_8030A2D0(gfx, mtx, vtx, + sp94, sp88, (f32)iProp->propProp.unkA/100.0, + iProp->propProp.unk0_31, cube + ); + } + else{//L8032D72C + func_8030A350( gfx, mtx, vtx, + sp94, (f32)iProp->spriteProp.unk0_9/100.0, iProp->spriteProp.unk0_31, cube, + iProp->spriteProp.unk0_18, iProp->spriteProp.unk0_15, iProp->spriteProp.unk0_12, + iProp->spriteProp.unk0_1, iProp->spriteProp.unk8_15 + ); + } + }//L8032D7C4 + } + iOffset+=0xC; + }//L8032D7D4 +} + +ActorProp *func_8032D80C(Cube *cube) { + ActorProp *sp1C; + + if (cube->prop2Ptr != NULL) { + cube->prop2Cnt++; + cube->prop2Ptr = realloc(cube->prop2Ptr, cube->prop2Cnt * sizeof(Prop)); + } else { + cube->prop2Cnt = 1; + cube->prop2Ptr = malloc(sizeof(Prop)); + } + sp1C = &cube->prop2Ptr[cube->prop2Cnt-1]; + sp1C->unk8_0 = FALSE; + func_80330104(cube); + return sp1C; +} + +NodeProp *func_8032D8F0(Cube *cube) { + if (cube->prop1Ptr != 0) { + cube->prop1Cnt++; + cube->prop1Ptr = realloc(cube->prop1Ptr, cube->prop1Cnt * sizeof(NodeProp)); + } else { + cube->prop1Cnt = 1; + cube->prop1Ptr = malloc(sizeof(NodeProp)); + } + return &cube->prop1Ptr[cube->prop1Cnt - 1]; +} + +//cube_removeProp +s32 func_8032D9C0(Cube *cube, Prop* prop){ + s32 sp24; + s32 tmp; + + sp24 = 0; + if(cube->prop2Cnt != 0){ + sp24 = prop->unk8_1; + if(func_80305D14()){ + func_80305CD8(func_803058C0(prop->unk4[1]), -1); + } + if((prop - cube->prop2Ptr) < (cube->prop2Cnt - 1)){ + memcpy(prop, prop + 1, (s32)(&cube->prop2Ptr[cube->prop2Cnt-1]) - (s32)(prop)); + } + cube->prop2Cnt--; + if(cube->prop2Cnt){ + cube->prop2Ptr = realloc(cube->prop2Ptr, cube->prop2Cnt*sizeof(Prop)); + func_80330104(cube); + }else{ + free(cube->prop2Ptr); + cube->prop2Ptr = NULL; + } + return sp24; + } + return 0; +} + +void func_8032DB2C(Cube *cube, NodeProp *arg1) { + s32 sp24; + + if(cube->prop1Cnt == NULL) + return; + + sp24 = arg1 - cube->prop1Ptr; + if (sp24 < cube->prop1Cnt - 1) { + memcpy(arg1, arg1 + 1, (s32)&cube->prop1Ptr[cube->prop1Cnt] - (s32)arg1 - sizeof(NodeProp)); + } + if (sp24 < cube->unk0_4) { + cube->unk0_4--; + } + + cube->prop1Cnt--; + if (cube->prop1Cnt != 0) { + cube->prop1Ptr = realloc(cube->prop1Ptr, cube->prop1Cnt * sizeof(NodeProp)); + } + else{ + free(cube->prop1Ptr); + cube->prop1Ptr = NULL; + cube->unk0_4 = 0; + } +} + +void func_8032DC70(void) { + NodeProp *sp1C; + s32 temp_v0; + + sp1C = func_803080C8(); + if (sp1C != NULL) { + func_8032DB2C(func_80308224(), sp1C); + } +} + +ActorMarker *func_8032DCAC(void){ + return D_8038341C; +} + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DCB8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DDD8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DE2C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DE48.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DE5C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DE78.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DE8C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DEA0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DECC.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DEE0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DEFC.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DF04.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DF10.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DF24.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DF40.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DF4C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DF60.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DFA0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DFBC.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DFD8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032DFF4.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E010.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E02C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E070.s") + +void cube_free(Cube *cube){ + Prop *iProp; + + if(cube->prop2Ptr){ + for(iProp = cube->prop2Ptr; iProp < cube->prop2Ptr +cube->prop2Cnt; iProp++){ + if(iProp->markerFlag){ + func_80332B2C(iProp->actorProp.marker); + } + } + free(cube->prop2Ptr); + cube->prop2Ptr = NULL; + } + if(cube->prop1Ptr){ + free(cube->prop1Ptr); + cube->prop1Ptr = NULL; + } + cube->prop2Cnt = 0; + cube->prop1Cnt = 0; + cube->unk0_4 = 0; +} + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E178.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E230.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E2D4.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E398.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E49C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E5A8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E6CC.s") + +void func_8032E784(Cube *cube, s32 cnt){ + if(cube->prop1Ptr != NULL){ + free(cube->prop1Ptr); + } + cube->prop1Cnt = cnt; + cube->unk0_4 = 0; +} + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032E7E8.s") +#else +void func_8032E7E8(NodeProp *node, Cube *cube, s32 cnt) { + s32 temp_a0; + s32 temp_s2; + s32 temp_s2_2; + s32 actor; + s32 model_cache_ptr; + u32 temp_t8; + void *actor_2; + void *actor_3; + void *actor_4; + void *actor_5; + void *model_cache_ptr_2; + void *phi_s0; + NodeProp *iPtr; + s32 phi_s3; + s32 phi_s2; + s32 phi_a0; + s32 phi_s2_2; + s32 phi_a0_2; + void *i; + void *i_2; + void *i_3; + s32 phi_s2_3; + s32 i; + s32 val; + + cube->unk0_4 = 0; + phi_s3 = cnt - 1; + for(i = 0; i < cnt; i++){ + if( (node[i].unk4_6 == 6) + || (node[i].unk4_6 == 8) + || (node[i].unk4_6 == 7) + || (node[i].unk4_6 == 9) + || (node[i].unk4_6 == 0xA) + || (node[i].unk4_0 == 1) + ){ + memcpy(&cube->prop1Ptr[phi_s3], &node[i], sizeof(NodeProp)); + phi_s3--; + } else { + memcpy(&cube->prop1Ptr[cube->prop1Cnt], &node[i], sizeof(NodeProp)); + cube->unk0_4++; + } + } + free(node); + + for(i = 0; i < cnt; i++){ + iPtr = &cube->prop1Ptr[i]; + if(!iPtr->unk4_0){ + iPtr->unk10_6 = TRUE; + } + } +} +#endif + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032EA24.s") +#else +void func_8032EA24(Struct61s *file_ptr, Cube *cube) { + u8 sp47; + u8 sp46; + s32 sp34; + s32 sp2C; + s32 temp_s0_3; + s32 actor_4; + s32 actor_5; + u8 temp_t1; + NodeProp *temp_a0; + NodeProp *temp_s0; + NodeProp *i; + Prop *i_2; + + cube_free(cube); + if (func_8034B040(file_ptr, 0xA, sp46)) { + func_8032E784(cube, sp46); + cube->prop1Ptr = malloc(sp46 *sizeof(NodeProp)); + temp_s0 = malloc(sp46*sizeof(NodeProp)); + func_8034B080(file_ptr, 0xB, temp_s0, cube->prop1Cnt * sizeof(NodeProp)); + func_8032E7E8(temp_s0, cube, sp46); + } else if (func_8034B040(file_ptr, 6, sp46)) { + func_8032E784(cube, sp46); + cube->prop1Ptr = malloc(sp46 *sizeof(NodeProp)); + temp_s0 = malloc(sp46*sizeof(NodeProp)); + func_8034B080(file_ptr, 7, temp_s0, cube->prop1Cnt * sizeof(NodeProp)); + for(i = temp_s0; i < temp_s0 + sp46; i++){ + if (i->unk4_0 && !i->unkC_0) { + i->unk4_17 = 0; + i->unk10_4 = 0; + } + } + func_8032E7E8(temp_s0, cube, sp46); + } + if (func_8034B040(file_ptr, 8, &sp47)) { + temp_s0_3 = func_803203FC(2); + sp2C = func_803203FC(1); + sp34 = func_803203FC(0x1F) + sp2C + temp_s0_3; + if (sp34 != 0) { + if (func_8031B4CC() != 0) { + sp34 = 0; + } + } + if (cube->prop2Ptr != 0) { + free(cube->prop2Ptr); + } + cube->prop2Cnt = sp47; + cube->prop2Ptr = (Prop *) malloc(sp47 * sizeof(Prop)); + func_8034B080(file_ptr, 9, cube->prop2Ptr, cube->prop2Cnt * sizeof(Prop)); + for(i_2 = cube->prop2Ptr; i_2 < cube->prop2Ptr + sp47; i_2++){ + i_2->unk8_4 = 1; + if(i_2->unk8_1){ + i_2->actorProp.unk8_5 = 0; + } + if(sp34){ + if(!i_2->markerFlag && !i_2->unk8_1){ + switch(i_2->spriteProp.unk0_31 + 0x572){ + case 0x580: + case 0x6D1: + case 0x6D6: + case 0x6D7: + i_2->spriteProp.unk8_4 = 0; + break; + } + } + } + } + + } + + if ((cube->prop2Ptr != NULL) && (cube->prop2Cnt == 0)) { + free(cube->prop2Ptr); + cube->prop2Ptr = NULL; + } + + if ((cube->prop1Ptr != NULL) && (cube->prop1Cnt == 0)) { + free(cube->prop1Ptr); + cube->prop1Ptr = NULL; + cube->unk0_4 = 0; + } +} +#endif + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032EE0C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032EE20.s") + +void func_8032EE2C(s32 arg0[3], s32 arg1, s32 arg2) { + D_803833F0[0] = (s32) arg0[0]; + D_803833F0[1] = (s32) arg0[1]; + D_803833F0[2] = (s32) arg0[2]; + D_80383400 = arg1; + D_803833FC = arg2 * arg2; + D_80383404 = 0; + D_80383408 = 0; + D_8038340C = 0; +} + + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032EE80.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032F170.s") + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032F194.s") +#else +void func_8032F194(ActorMarker *marker, s32 position[3], Cube *cube) { + ActorProp sp24; + + ((s32*)&sp24)[2] = ((s32*)marker->propPtr)[2]; + sp24.x = (s16) position[0]; + sp24.y = (s16) position[1]; + sp24.z = (s16) position[2]; + func_8032F21C(cube, position, marker, func_8032D9C0(marker->cubePtr, marker->propPtr)); + ((s32*)marker->propPtr)[1] = ((s32*)&sp24)[1]; + ((s32*)marker->propPtr)[2] = ((s32*)&sp24)[2]; +} +#endif + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032F21C.s") +#else +void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3) { + ActorProp *sp1C; + u8 temp_t0; + u8 temp_t2; + u8 temp_t6; + u8 temp_t8; + + sp1C = func_8032D80C(cube); + sp1C->unk8_0 = TRUE; + sp1C->x = (s16) position[0]; + sp1C->y = (s16) position[1]; + sp1C->z = (s16) position[2]; + sp1C->marker = marker; + sp1C->unk8_15 = 0; + sp1C->unk8_1 = arg3; + sp1C->unk8_5 = FALSE; + + sp1C->unk8_10 = (func_802E4A08(position)) ? 0xF : (u8)(randf() * 32); + sp1C->unk8_3 = FALSE; + sp1C->unk8_2 = FALSE; + sp1C->unk8_4 = TRUE; + marker->propPtr = sp1C; + marker->cubePtr = cube; + if (func_80305D14()) { + func_80305CD8(func_803058C0((f32)position[1]), 1); + } +} +#endif + +void func_8032F3D4(s32 arg0[3], ActorMarker *marker, s32 arg2){ + func_8032F21C((marker->unk40_23)? func_8030364C() : cube_atPosition_s32(arg0), arg0, marker, arg2); +} + +void marker_free(ActorMarker *this){ + func_8032D9C0(this->cubePtr, (Prop *)this->propPtr); + func_80332B2C(this); +} + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032F464.s") + +void func_8032F470(s32 *pos, ActorMarker *arg1){ + Cube *cubePtr; + + cubePtr = (arg1->unk40_23)? func_8030364C(): cube_atPosition_s32(pos); + + if(cubePtr == arg1->cubePtr){ + arg1->propPtr->x = pos[0]; + arg1->propPtr->y = pos[1]; + arg1->propPtr->z = pos[2]; + } + else{ + func_8032F194(arg1, pos, cubePtr); + } + + if(arg1->unk2C_1) + func_80307CA0(arg1); +} + +Prop *func_8032F528(void){ + Prop * prop = func_80303F7C(0, 0, 0, 1); + if(prop != NULL){ + D_80383448 = TRUE; + } + else{ + D_80383448 = FALSE; + } + return prop; +} + +void func_8032F578(f32 position[3], ActorMarker *marker, f32 arg2, s32 arg3) { + func_8032F64C(position, marker); + func_80320ED8(marker, arg2, arg3); +} + +void func_8032F5B0(f32 position[3], ActorMarker *marker, f32 arg2, s32 arg3) { + func_8032F64C(position, marker); + func_80320EB0(marker, arg2, arg3); +} + +void func_8032F5E8(s32 arg0[3], s32 arg1, f32 arg2, s32 arg3) { + f32 sp1C[3]; + + sp1C[0] = arg0[0]; + sp1C[1] = arg0[1]; + sp1C[2] = arg0[2]; + func_8032F5B0(sp1C, arg1, arg2, arg3); +} + +void func_8032F64C(f32 *pos, ActorMarker * marker){ + s32 pos_w[3]; + + pos_w[0] = pos[0]; + pos_w[1] = pos[1]; + pos_w[2] = pos[2]; + func_8032F470(pos_w, marker); +} + +void func_8032F6A4(s32 *pos, ActorMarker * marker, s32 *rot){ + s32 rot_w[3]; + + rot_w[0] = (s32)rot[0] % 360; + if(rot_w[0] < 0) + rot_w[0] += 360; + + rot_w[1] = (s32)rot[1] % 360; + if(rot_w[1] < 0) + rot_w[1] += 360; + + rot_w[2] = (s32)rot[2] % 360; + if(rot_w[2] < 0) + rot_w[2] += 360; + + marker->yaw = rot_w[1]; + marker->pitch = rot_w[0]; + marker->roll = rot_w[2]; + func_8032F470(pos, marker); +} + +void func_8032F7EC(f32 position[3], ActorMarker *marker, f32 rotation[3]) { + marker->yaw = rotation[1]; + marker->pitch = rotation[0]; + marker->roll = rotation[2]; + func_8032F64C(position, marker); +} + +ActorMarker * func_8032F9DC(s32 *pos, MarkerDrawFunc arg1, int arg2, int arg3, int arg4){ + ActorMarker * marker = func_80332A60(); + marker->propPtr = NULL; + marker->cubePtr = NULL; + marker->unk8 = arg1; + marker->unk14_20 = arg3; + marker->unk40_23 = arg4; + func_8032F3D4(pos, marker, arg2); + marker->actrArrayIdx = 0; + marker->unk14_10 = 0; + marker->modelId = 0; + marker->unk3E_1 = 0; + marker->unk14_22 = 0; + marker->unk14_21 = 0; + marker->yaw = 0; + marker->pitch = 0; + marker->roll = 0; + marker->unk2C_2 = 0; + marker->unk2C_1 = 0; + marker->collidable = 1; + marker->unk3E_0 = 0; + marker->unk40_22 = 0; + marker->unk40_19 = 0; + marker->unk40_21 = 0; + marker->unkC = NULL; + marker->unk10 = NULL; + marker->unk1C = NULL; + marker->unk54 = NULL; + marker->unk58 = 0; + marker->unk18 = 0; + marker->unk24 = 0; + marker->unk30 = NULL; + marker->unk28 = 0; + marker->unk34 = 0; + marker->unk38[0] = 0; + marker->unk38[1] = 0; + marker->unk38[2] = 0; + marker->unk44 = 0; + marker->unk20 = 0; + marker->unk50 = 0; + marker->unk48 = 0; + marker->unk4C = 0; + marker->unk40_20 = 0; + marker->unk40_31 = 0; + return marker; +} + +ActorMarker * func_8032FB80(f32 *pos, MarkerDrawFunc arg1, int arg2, enum asset_e model_id, int arg4){ + s32 sp24[3]; + sp24[0] = pos[0]; + sp24[1] = pos[1]; + sp24[2] = pos[2]; + func_8032F9DC(sp24, arg1, arg2, model_id, arg4); +} + +ActorMarker * func_8032FBE4(f32 *pos, MarkerDrawFunc arg1, int arg2, enum asset_e model_id){ + return func_8032FB80(pos, arg1, arg2, model_id, 0); +} + +void func_8032FC04(ActorMarker *marker, f32 rotation[3]) { + marker->pitch = rotation[0]; + marker->yaw = rotation[1]; + marker->roll = rotation[2]; +} + +void func_8032FDDC(f32 rotation[3], ActorMarker *marker) { + marker->pitch = rotation[0]; + marker->yaw = rotation[1]; + marker->roll = rotation[2]; +} + +int func_8032FFB4(ActorMarker *this, s32 arg1){ + this->unk14_20 = arg1; +} + +//marker_setActorArrayIndex +void func_8032FFD4(ActorMarker *this, s32 arg1){ + this->actrArrayIdx = arg1; +} + +void func_8032FFEC(ActorMarker *this, s32 arg1){ + this->unk28 = arg1; +} + +void func_8032FFF4(ActorMarker *this, ActorMarker *other, s32 type){ + switch(type){ + case 0: //ow + if(this->unkC) + this->unkC(this, other); + break; + case 1: + if(this->unk10) + this->unk10(this, other); + break; + case 2: //die + if(this->unk1C) + this->unk1C(this, other); + break; + } +} + +void func_80330078(ActorMarker *marker, ActorMarker *other_marker, s16 *arg2){ + if(marker != NULL && marker->unk54 != NULL){ + marker->unk54(marker, other_marker, arg2); + } +} + +//marker_setCollisionMethods +void marker_setCollisionScripts(ActorMarker *this, MarkerCollisionFunc ow_func, MarkerCollisionFunc arg2, MarkerCollisionFunc die_func){ + this->unkC = ow_func; + this->unk10 = arg2; + this->unk1C = die_func; +} + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803300B8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803300C0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803300C8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803300D0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803300D8.s") + +#define AssetCacheSize 0x3D5 + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803300E0.s") + +void marker_setModelId(ActorMarker *this, enum asset_e modelIndex){ + this->modelId = modelIndex; +} + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330104.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330208.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803303B8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330534.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8033056C.s") + +//modelCache_Init +void func_803305AC(void){ + s32 i; + + modelCache = (ModelCache *)malloc(AssetCacheSize * sizeof(ModelCache)); + for(i = 0; ipropPtr->x; + position[1] = (f32) marker->propPtr->y; + position[2] = (f32) marker->propPtr->z; + + rotation[0] = (f32)marker->pitch; + rotation[1] = (f32)marker->yaw; + rotation[2] = (f32)marker->roll; + + scale = (marker->unk3E_0) ? marker_getActor(marker)->scale : 1.0f; + if (func_802EA190(marker->unk20)) { + return func_802EBAE0(sp58, position, rotation, scale, 0, marker->unk20, arg1, arg2, arg3); + } + return 0; +} + + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330B10.s") + +//marker_loadModelBin +BKModelBin *func_80330B1C(ActorMarker *this){ + Actor* thisActor; + BKModelBin * model; + ModelCache *modelInfo; + + if(this->modelId == 0) + return NULL; + + thisActor = marker_getActor(this); + if((modelInfo = &modelCache[thisActor->modelCacheIndex])->modelPtr == NULL){ + model = assetcache_get(this->modelId); + modelInfo->modelPtr = model; + if(func_8033A110(model)){ + modelInfo->unkC = func_80349C3C(); + func_80349D00(modelInfo->unkC, func_8033A110(modelInfo->modelPtr)); + } + func_8032ACA8(thisActor); + } + func_8032AB84(thisActor); + if(!this->unk18 && this->propPtr->unk8_1 && modelInfo->modelPtr && func_8033A12C(modelInfo->modelPtr)){ + this->unk18 = func_80330B10(); + } + modelInfo->unk10 = func_8023DB5C(); + return modelInfo->modelPtr; +} + +s32 func_80330C48(Actor *actor){ + ModelCache *model_cache_ptr = &modelCache[actor->modelCacheIndex]; + return model_cache_ptr->unkC; +} + +BKVertexList *func_80330C74(Actor *actor){ + ModelCache *model_cache_ptr; + model_cache_ptr = &modelCache[actor->modelCacheIndex]; + if(model_cache_ptr->modelPtr == NULL) + return NULL; + + if(actor->unkF4_30 && actor->unk14C[actor->unkF4_29]){ + return actor->unk14C[actor->unkF4_29]; + }else{ + return func_8033A148(model_cache_ptr->modelPtr); + } +} + +BKVertexList *func_80330CFC(Actor *this, s32 arg1){ + ModelCache *model_cache_ptr; + model_cache_ptr = &modelCache[this->modelCacheIndex]; + if(model_cache_ptr->modelPtr == NULL){ + func_80330B1C(this->marker); + } + if(this->unkF4_30 && this->unk14C[this->unkF4_29 ^ arg1] != NULL) + return this->unk14C[this->unkF4_29 ^ arg1]; + return func_8033A148(model_cache_ptr->modelPtr); +} + +BKVertexList * func_80330DA4(Actor *this){ + return func_80330CFC(this, 0); +} + +BKVertexList * func_80330DC4(Actor *this){ + return func_80330CFC(this, 1); +} + +BKModelBin *func_80330DE4(ActorMarker *this){ + Actor *thisActor = marker_getActor(this); + return (modelCache + thisActor->modelCacheIndex)->modelPtr; +} + +BKModelBin *func_80330E28(Actor* this){ + return (modelCache + this->modelCacheIndex)->modelPtr; +} + +BKSpriteDisplayData *func_80330E54(ActorMarker *marker, BKSprite **sprite_ptr) { + ModelCache *model_cache_ptr; + + if (marker->modelId == 0) { + if (*sprite_ptr != NULL) { + *sprite_ptr = NULL; + } + return 0; + } + model_cache_ptr = &modelCache[marker_getActor(marker)->modelCacheIndex]; + if (model_cache_ptr->unk4 == 0) { + model_cache_ptr->unk4 = func_8033B6C4(marker->modelId, &model_cache_ptr->unk8); + } + model_cache_ptr->unk10 = func_8023DB5C(); + if (sprite_ptr != NULL) { + *sprite_ptr = model_cache_ptr->unk4; + } + return model_cache_ptr->unk8; +} + +BKSpriteDisplayData *func_80330F30(ActorMarker *marker){ + return func_80330E54(marker, NULL); +} + +BKSprite *func_80330F50(ActorMarker * marker){ + BKSprite *sp1C; + func_80330E54(marker, &sp1C); + return sp1C; +} + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330F74.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330F7C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330F8C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330F94.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330FBC.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330FC4.s") + +void func_80330FCC(ActorMarker *marker, s32 arg1[3]){ + arg1[0] = marker->propPtr->x; + arg1[1] = marker->propPtr->y; + arg1[2] = marker->propPtr->z; +} + +void func_80330FF4(void){ + Actor *phi_s0; + f32 sp48[3]; + f32 scale[3]; + + if(func_80334904() == 1) + return; + + if(D_8038341C != NULL){ + phi_s0 = marker_getActor(D_8038341C); + player_getPosition(sp48); + scale[0] = phi_s0->pitch; + scale[1] = phi_s0->yaw; + scale[2] = phi_s0->roll; + func_80340200(D_8038341C->unk50, phi_s0->position, scale, 1.0f, NULL, D_80383420, func_80330DA4(phi_s0), D_80383410); + }//L8033108C + + func_802C39D4(); + if(D_8038341C != NULL){ + phi_s0 = marker_getActor(D_8038341C); + player_getPosition(sp48); + scale[0] = phi_s0->pitch;\ + scale[1] = phi_s0->yaw;\ + scale[2] = phi_s0->roll; + if(func_80340020(D_8038341C->unk50, phi_s0->position, scale, 1.0f, NULL, func_80330DC4(phi_s0), sp48, sp48)){ + sp48[1] -= 10.0f; + func_8028FAB0(sp48); + } + } + if(D_8038341C != NULL){ + D_8038341C = NULL; + } + //L80331144 +} + +bool func_80331158(ActorMarker *arg0, s32 arg1, s32 arg2) { + Actor *actor; + u32 temp_a0; + + actor = marker_getActor(arg0); + if ((actor->unk3C & 0x400) && ((s32)actor->unk3C << 4) >= 0){ + return func_802E74A0(actor->position, actor->unk178 * D_80378EB0, arg1, arg2) == 0; + } + return FALSE; +} + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803311D4.s") +#else +extern int func_802E805C(BKCollisionList *, BKVertexList *, f32[3], f32[3], f32, f32[3], f32[3], f32[3], u32); +s32 func_803311D4(Cube *arg0, f32 *arg1, f32 *arg2, f32 *arg3, u32 arg4) { + f32 spAC[3]; + f32 spA0[3]; + f32 sp88[3]; + f32 sp7C[3]; + Actor *temp_s2_2; + Actor *temp_v0_6; + ActorMarker *temp_a0; + ActorMarker *temp_a0_2; + BKModelBin *temp_v0_2; + BKModelBin *temp_v0_3; + BKModelBin *var_a0; + BKModelBin *var_s0; + BKModelBin *var_v0_2; + BKVertexList *temp_a1; + Prop *var_s1; + Struct6Cs *temp_v0_8; + f32 var_f10; + f32 var_f4; + f32 var_f6; + s32 (*temp_v1_2)(struct actor_marker_s *, f32 [3], f32, f32 [3], s32); + s32 temp_s0; + s32 temp_s0_2; + BKCollisionList *temp_s2; + s32 temp_v0; + s32 temp_v0_4; + s32 temp_v0_5; + s32 temp_v0_7; + s32 temp_v1; + s32 var_s6; + s32 var_v0; + u32 temp_t3; + u32 temp_t6; + u32 temp_t9; + u32 var_s5; + + var_s5 = arg0->prop2Cnt; + var_s6 = 0; + var_s1 = arg0->prop2Ptr; + for(var_s5 = arg0->prop2Cnt; var_s5 > 0; var_s5--) { + if (!var_s1->markerFlag && var_s1->unk8_1 && var_s1->unk8_4) { //propProp + var_s0 = func_8030A4B4(var_s1->propProp.unk0_31); + if ((var_s0 != NULL) || (func_8028F280() && ((var_s0 = func_8030A428(var_s1->propProp.unk0_31)) != NULL))) { + temp_s2 = func_8033A084(var_s0); + if (temp_s2 != 0) { + spAC[0] = (f32) var_s1->propProp.unk4[0]; + spAC[1] = (f32) var_s1->propProp.unk4[1]; + spAC[2] = (f32) var_s1->propProp.unk4[2]; + spA0[0] = 0.0f; + spA0[1] = (f32) (var_s1->propProp.unk0_15 * 2); + spA0[2] = (f32) (var_s1->propProp.unk0_7 * 2); + var_v0 = func_802E805C(temp_s2, func_8033A148(var_s0), spAC, spA0, var_s1->propProp.unkA / 100.0, arg1, arg2, arg3, arg4); + if (var_v0 != 0) { + var_s6 = var_v0; + } + } + } + } else if (var_s1->markerFlag && var_s1->unk8_3 && var_s1->unk8_4 && !func_80331158(var_s1->actorProp.marker, arg1, arg2)) { + temp_a0 = var_s1->actorProp.marker; + if (temp_a0->collidable && (marker_getActor(temp_a0)->unk3C & 0x000010000)) { + var_a0 = func_80330B1C(var_s1->actorProp.marker); + } else { + var_a0 = func_80330DE4(var_s1->actorProp.marker); + } + if (var_a0 == NULL && func_8028F280(var_a0)) { + var_a0 = func_80330B1C(var_s1->actorProp.marker); + } + temp_s0 = func_8033A084(var_a0); + if (temp_s0 != 0) { + temp_s2_2 = marker_getActor(var_s1->actorProp.marker); + temp_a1 = func_80330C74(temp_s2_2); + sp88[0] = (f32) var_s1->actorProp.x; + sp88[1] = (f32) var_s1->actorProp.y; + sp88[2] = (f32) var_s1->actorProp.z; + sp7C[0] = (f32) var_s1->actorProp.marker->pitch; + sp7C[1] = (f32) var_s1->actorProp.marker->yaw; + sp7C[2] = (f32) var_s1->actorProp.marker->roll; + temp_s0_2 = func_802E805C(temp_s0, temp_a1, &sp88, &sp7C, temp_s2_2->scale, arg1, arg2, arg3, arg4); + if ((temp_s0_2 != 0) && (func_8029453C() != 0)) { + func_80330B1C(var_s1->actorProp.marker); + if (var_s1->actorProp.marker->unk50 != 0) { + D_80383410[0] = (f32) arg2[0]; + D_80383410[1] = (f32) arg2[1]; + D_80383410[2] = (f32) arg2[2]; + D_8038341C = var_s1->actorProp.marker; + D_80383420 = temp_s0_2; + } + } + if (temp_s0_2 != 0) { + var_s6 = temp_s0_2; + } + } + } else if (var_s1->markerFlag) { + temp_a0_2 = var_s1->actorProp.marker; + if (temp_a0_2->unk18 != NULL) { + if (temp_a0_2->unk18->unk0 != NULL) { + var_v0 = temp_a0_2->unk18->unk0(temp_a0_2, arg1, arg2, arg3, arg4); + if (var_v0 != 0) { + var_s6 = var_v0; + } + } + } + } + var_s1++; + } + return var_s6; +} +#endif + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80331638.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_803319C0.s") + +f32 func_80331D20(BKSprite *sprite) { + BKSpriteFrame *frame; + s32 temp_lo; + s32 temp_lo_2; + s32 phi_v0; + + if (sprite == 0) { + return 1.0f; + } + frame = spriteGetFramePtr(sprite, 0); + temp_lo = (s32) (((frame->unk10 - frame->unkC) + 1) * sprite->unk8) / (s32) frame->w; + temp_lo_2 = (s32) (((frame->unk12 - frame->unkE) + 1) * sprite->unkA) / (s32) frame->h; + phi_v0 = (temp_lo_2 < temp_lo) ? temp_lo : temp_lo_2; + return (phi_v0 <= 0) ? 1 : phi_v0; +} + + +f32 func_80331E34(Prop *arg0){ + return func_80331D20(func_8030A55C(arg0->spriteProp.unk0_31)); +} + +f32 func_80331E64(ActorMarker *marker) { + f32 sp24; + + if (marker->modelId == 0) { + return 0.0f; + } + sp24 = func_80331D20(func_80330F50(marker)); + marker->unk38[1] = (s16) (sp24 / 2); + if (marker->unk3E_0) { + marker->unk38[1] *= marker_getActor(marker)->scale; + } + return sp24; +} + + +f32 func_80331F1C(Prop *arg0){ + return func_802EC920(func_8033A148(func_8030A428(arg0->propProp.unk0_31))); +} + +f32 func_80331F54(ActorMarker *marker) { + f32 sp34; + f32 sp28[3]; + BKModelBin *model; + + model = func_80330B1C(marker); + if (model == NULL) { + return 1.0f; + } + func_802EC930(func_8033A148(model), sp28, &sp34); + if (marker->unk3E_0) { + sp28[0] = sp28[0] * marker_getActor(marker)->scale;\ + sp28[1] = sp28[1] * marker_getActor(marker)->scale;\ + sp28[2] = sp28[2] * marker_getActor(marker)->scale; + } + marker->unk38[0] = (s16) sp28[0];\ + marker->unk38[1] = (s16) sp28[1];\ + marker->unk38[2] = (s16) sp28[2]; + return sp34 * 2; +} + +f32 func_80332050(Prop *prop, ActorMarker *marker, s32 arg2) { + ActorMarker * phi_v0; + f32 phi_f2; + + phi_v0 =(prop->markerFlag) ? prop->actorProp.marker : NULL; + phi_f2 = prop->unk4[arg2] - (&marker->propPtr->x)[arg2] - marker->unk38[arg2]; + if (phi_v0 != NULL) { + phi_f2 += phi_v0->unk38[arg2]; + } + return phi_f2; +} + + +f32 func_803320BC(ActorProp *prop, f32 (*arg1)(ActorMarker *)) { + ActorMarker *marker; + f32 sp18; + + marker = prop->marker; + sp18 = (f32)marker->unk14_10; + if (sp18 == 0.0f) { + sp18 = marker->unk14_10 = arg1(marker) * 0.5; + } + if (marker->unk3E_0) { + sp18 *= marker_getActor(marker)->scale; + } + return sp18; +} + +f32 func_80332220(Prop * prop, f32 (*arg1)(Prop *)) { + f32 phi_f12; + + phi_f12 = func_8030A590(); + if (phi_f12 == 0.0f) { + func_8030A5EC(prop, phi_f12 = arg1(prop) * 0.5); + } + return phi_f12; +} + + +f32 func_8033229C(ActorMarker *marker) { + ActorProp *prop; + + prop = marker->propPtr; + if (prop->unk8_1) { + return func_803320BC(prop, func_80331F54); + } + else{ + return func_803320BC(prop, func_80331E64); + } +} + + + +Prop *func_803322F0(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *arg4) { + Prop *phi_s1; + f32 phi_f24; + f32 phi_f20; + f32 phi_f22; + f32 phi_f2; + s32 phi_s3; + f32 sp74[3]; + f32 sp68[3]; + + phi_s3 = cube->prop2Cnt - *arg4; + if (marker->collidable) { + phi_s1 = &cube->prop2Ptr[(*arg4)++]; + for(phi_s3 = phi_s3; phi_s3 != 0; phi_s3--){ + if (phi_s1->unk8_4) { + if( phi_s1->markerFlag && (!phi_s1->actorProp.marker->unk3E_0 || !marker_getActor(phi_s1->actorProp.marker)->despawn_flag)){ + if (phi_s1->actorProp.marker->collidable && (marker != phi_s1->actorProp.marker)) { + if( (phi_s1->actorProp.marker->modelId) + && (func_803327A8(phi_s1->actorProp.marker->modelId) & arg3) + ) { + if( phi_s1->actorProp.unk8_1 + && (phi_s1->actorProp.marker->unk18 != NULL) + && (phi_s1->actorProp.marker->unk18->unkC != NULL) + ) { + func_803320BC(phi_s1, &func_80331F54); + sp68[0] = (f32) (marker->unk38[0] + marker->propPtr->x); + sp68[1] = (f32) (marker->unk38[1] + marker->propPtr->y); + sp68[2] = (f32) (marker->unk38[2] + marker->propPtr->z); + if ((phi_s1->actorProp.marker->unk40_31 = phi_s1->actorProp.marker->unk18->unkC(phi_s1->actorProp.marker, sp68, arg2, sp74, 0)) != 0) { + return phi_s1; + } + } else{ + phi_f24 = func_80332050(phi_s1, marker, 0); + phi_f22 = func_80332050(phi_s1, marker, 2); + if (phi_s1->actorProp.unk8_1) { + phi_f20 = func_80332050(phi_s1, marker, 1); + phi_f2 = func_803320BC(phi_s1, func_80331F54); + } else { + phi_f20 = func_80332050(phi_s1, marker, 1); + phi_f2 = func_803320BC(phi_s1, &func_80331E64); + } + phi_f2 = phi_f2 + arg2; + if ((phi_f24*phi_f24 + phi_f20*phi_f20 + phi_f22*phi_f22) < phi_f2*phi_f2) { + return phi_s1; + } + } + } + } + } + else if (phi_s1->unk8_1) {//PropProp + if (func_803327A8(phi_s1->propProp.unk0_31 + 0x2D1) & arg3) { + phi_f24 = func_80332050(phi_s1, marker, 0); + phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331F1C); + phi_f22 = func_80332050(phi_s1, marker, 2); + phi_f2 = func_80332220(phi_s1, &func_80331F1C) + arg2; + if (( (phi_f24 * phi_f24) + (phi_f20 * phi_f20) + (phi_f22 * phi_f22)) < (phi_f2 * phi_f2)) { + return phi_s1; + } + } + } + else{ + if (func_803327A8(phi_s1->spriteProp.unk0_31 + 0x572) & arg3) { + phi_f24 = func_80332050(phi_s1, marker, 0);\ + phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331E34);\ + phi_f22 = func_80332050(phi_s1, marker, 2); + phi_f2 = func_80332220(phi_s1, &func_80331E34) + arg2; + if (((phi_f24 * phi_f24) + (phi_f20 * phi_f20) + (phi_f22 * phi_f22)) < (phi_f2 * phi_f2)) { + return phi_s1; + } + } + } + } + phi_s1++; + (*arg4)++; + } + } + *arg4 = -1; + return NULL; +} + + +void func_80332764(s32 arg0, s32 arg1) { + u8 *actor; + + D_8036E7C4[arg0 >> 2] |= arg1 << ((arg0 & 3) * 2); +} + +void func_80332790(s32 arg0){ + D_8036E7C4[arg0 >> 2] = 0; +} + +s32 func_803327A8(s32 arg0) { + return ((s32) D_8036E7C4[arg0 >> 2] >> ((arg0 & 3) * 2)) & 3; +} + +void func_803327D4(s16 *arg0, s32 arg1) { + s32 i; + + for(i = 0; arg0[i] != -1; i++){ + func_80332764(arg0[i], arg1); + } +} + +void func_8033283C(s32 arg0, s32 arg1, s32 arg2) { + s32 i; + + for(i = arg0; i < arg1; i++){ + func_80332764(i, arg2); + } +} + +void func_80332894(void) { + s32 size; + s32 i; + + size = 0x579; + D_8036E7C4 = malloc(size); + i = 0; + do{ + D_8036E7C4[i] = 0; + i++; + }while(i != size); + func_8033283C(0x34D, 0x3A6, 3); + func_8033283C(0x3A6, 0x572, 3); + func_803327D4(&D_8036E7E0, 1); + func_803327D4(&D_8036E7FC, 2); + func_8032D330(); +} + +void func_8033297C(void){ + free(D_8036E7C4); + D_8036E7C4 = NULL; + func_8032D36C(); +} + +//MarkerList_Init +void func_803329AC(void){ + s32 i; + + D_8036E7C8 = (ActorMarker *)malloc(0xE0*sizeof(ActorMarker)); + + for( i = 0; i < 0x1C; i++){ + D_80383428[i] = 0; + } + + for(i =0; i<0xE0; i++){ + D_8036E7C8[i].unk5C = 0; + } +} + +void func_80332A38(void){ + free(D_8036E7C8); + D_8036E7C8 = NULL; +} + +//MarkerList_getFreeMarker +ActorMarker * func_80332A60(void){ + static s32 D_8036E800 = 0x387FB; + int i; + int j; + int tmp_a2; + ActorMarker *marker; + + for(i = 0; i < 0x1C && D_80383428[i] == 0xff; i++); + if(i == 0x1C) + return NULL; + + tmp_a2 = 0x80; + for(j = 0; D_80383428[i] & tmp_a2; j++){tmp_a2 >>= 1;} + D_80383428[i] |= tmp_a2; + marker = D_8036E7C8 + 8*i + j; + marker->unk5C = D_8036E800; + D_8036E800++; + return marker; +} + +void func_80332B2C(ActorMarker * arg0){ + static s32 D_8036E804[8] = {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE}; + + s32 index = (arg0 - D_8036E7C8); + arg0->unk5C = 0; + D_80383428[index >> 3] = D_80383428[index >> 3] & D_8036E804[index & 7]; +} + +void func_80332B7C(void){ + return; +} diff --git a/src/core2/code_ABC00.c b/src/core2/code_ABC00.c index a47fee47..f7e560d3 100644 --- a/src/core2/code_ABC00.c +++ b/src/core2/code_ABC00.c @@ -29,10 +29,10 @@ extern u8 D_8036E830; extern Struct_core2_ABC00_0 D_8036E834[]; /* .bss */ -extern s32 D_80383560; -extern s32 D_80383564; -extern s32 D_80383568; -extern s32 D_8038356C; +s32 D_80383560; +s32 D_80383564; +s32 D_80383568; +s32 D_8038356C; /* .code */ void func_80332B90(void){ diff --git a/src/core2/code_AC520.c b/src/core2/code_AC520.c index 6bb7fb53..30be88ed 100644 --- a/src/core2/code_AC520.c +++ b/src/core2/code_AC520.c @@ -20,9 +20,11 @@ typedef struct struct_22_s{ u8 pad35[0x3]; } Struct_core2_AC520_0;//size 0x38 +/* .data */ extern s32 D_8036F970[3]; -extern struct { +/* .bss */ +struct { vector(Struct_core2_AC520_0) *unk0; Struct_core2_AC520_0 *unk4[0x10]; Struct_core2_AC520_0 **unk44; diff --git a/src/core2/code_AD5B0.c b/src/core2/code_AD5B0.c index fde47e56..5b6f4224 100644 --- a/src/core2/code_AD5B0.c +++ b/src/core2/code_AD5B0.c @@ -2,21 +2,26 @@ #include "functions.h" #include "variables.h" +/* .data */ extern u8 D_80370250; -extern struct { + +/* .bss */ +struct { s32 unk0; s32 map_4; s32 unk8; }D_803835D0; -extern s32 D_803835DC; -extern u32 D_803835E0; +s32 D_803835DC; +u32 D_803835E0; +/* public */ void func_80335110(s32); void func_80335128(s32); void func_8024CE60(f32, f32); void func_80335140(enum map_e); void func_8033520C(s32); +/* .code */ void func_80334540(Gfx** gdl, Mtx **mptr, Vtx **vptr) { f32 sp44; f32 sp40; diff --git a/src/core2/code_AE290.c b/src/core2/code_AE290.c index 344db62a..660e2009 100644 --- a/src/core2/code_AE290.c +++ b/src/core2/code_AE290.c @@ -5,16 +5,17 @@ extern ALBank *func_8024F758(void); -extern struct { +extern u8 D_D846C0; +extern u8 D_D954B0; + +struct { s32 unk0; //sound state cnt s32 unk4; s32 unk8; //maxSounds ALHeap *unkC; //heap s16 unk10; } D_803835F0; -extern ALBank * D_80383604; -extern u8 D_D846C0; -extern u8 D_D954B0; +ALBank * D_80383604; /* .code */ void func_80335220(void){ diff --git a/src/core2/code_AEDA0.c b/src/core2/code_AEDA0.c index cc295ea8..a474e514 100644 --- a/src/core2/code_AEDA0.c +++ b/src/core2/code_AEDA0.c @@ -4,11 +4,13 @@ extern u8 D_80370338[]; -extern u32 D_80383634; -extern u32 D_80383638; -extern s32 D_8038363C; -extern s32 D_80383640; -extern s32 D_80383644; +/* .bss */ +u8 pad_80383610[0x24]; +u32 D_80383634; +u32 D_80383638; +s32 D_8038363C; +s32 D_80383640; +s32 D_80383644; /* .code */ #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_AEDA0/func_80335D30.s") diff --git a/src/core2/code_B1400.c b/src/core2/code_B1400.c index 9016f821..aed93461 100644 --- a/src/core2/code_B1400.c +++ b/src/core2/code_B1400.c @@ -378,63 +378,61 @@ extern f32 D_80378F48; extern f32 D_80378F4C; /* .bss */ -extern s32 D_80383650; -extern s32 D_80383658[0x2A]; -extern s32 D_80383700; -extern bool D_80383704; -extern f32 D_80383708; -extern f32 D_8038370C; -extern s32 D_80383710; -extern s32 D_80383714; -extern BKGfxList *D_80383718; -extern struct58s *D_8038371C; -extern BKTextureList *D_80383720; -extern s32 D_80383724; -extern BKVertexList *D_80383728; -extern s32 D_8038372C; -extern struct58s *D_80383730; -extern f32 D_80383734; -extern Struct_Core2_B1400_0 D_80383738; -extern s32 D_80383754; -extern Struct_Core2_B1400_2 D_80383758; -extern s32 D_80383770; -extern f32 D_80383774[3]; -extern f32 D_80383780[3]; -extern struct{ +s32 D_80383650; +s32 D_80383658[0x2A]; +s32 D_80383700; +bool D_80383704; +f32 D_80383708; +f32 D_8038370C; +s32 D_80383710; +s32 D_80383714; +BKGfxList *D_80383718; +struct58s *D_8038371C; +BKTextureList *D_80383720; +s32 D_80383724; +BKVertexList *D_80383728; +s32 D_8038372C; +struct58s *D_80383730; +f32 D_80383734; +Struct_Core2_B1400_0 D_80383738; +Struct_Core2_B1400_2 D_80383758; +struct{ void (* unk0)(Actor *); Actor *unk4; void (* unk8)(ActorMarker *); ActorMarker *unkC; } D_80383790; -extern Struct_Core2_B1400_0 D_803837A0; -extern struct { +s32 D_803837A0[4]; +struct { s32 unk0; f32 unk4[3]; }D_803837B0; -extern u8 D_803837C0; -extern struct { +u8 D_803837C0; +struct { s32 unk0; //model_asset_index f32 unk4; f32 unk8; + u8 padC[0x4] } D_803837C8; -extern s32 D_803837D8; -extern struct { +s32 D_803837D8; +struct { LookAt unk0[32]; LookAt *unk400; LookAt *unk404; f32 unk408[3]; } D_803837E0; -extern Mtx D_80383BF8; -extern f32 D_80383C38[3]; -extern f32 D_80383C48[3]; -extern BKModelBin *D_80383C54; -extern f32 D_80383C58[3]; -extern f32 D_80383C64; -extern f32 D_80383C68[3]; -extern f32 D_80383C78[3]; -extern f32 D_80383C88[3]; -extern f32 D_80383C98[3]; +Mtx D_80383BF8; +f32 D_80383C38[3]; +f32 D_80383C48[3]; +BKModelBin *D_80383C54; +f32 D_80383C58[3]; +f32 D_80383C64; +f32 D_80383C68[3]; +f32 D_80383C78[3]; +f32 D_80383C88[3]; +f32 D_80383C98[3]; +/* .code */ void func_80338390(void){ D_80383700 = 0; D_80383708 = D_80378F40; @@ -456,9 +454,9 @@ void func_80338390(void){ D_803837D8 = 0; func_8033A45C(1,1); func_8033A45C(2,0); - if(D_80383770){ - func_8024CD88(D_80383774); - func_8024CE18(D_80383780); + if(D_80383758.unk18){ + func_8024CD88(D_80383758.unk1C); + func_8024CE18(D_80383758.unk28); func_8024CFD4(); } } @@ -898,7 +896,7 @@ int func_803391A4(Gfx **gfx, Mtx **mtx, f32 position[3], f32 arg3[3], f32 scale, D_80383738.prim[3] = (D_80383738.prim[3] * alpha) / 0xff; } else if(D_80383714 == 1){//L803396DC - D_803837A0.env[3] = (D_803837A0.env[3] * alpha)/0xff; + D_803837A0[3] = (D_803837A0[3] * alpha)/0xff; } else if(D_80383714 == 2){//L80339710 func_8033A410(alpha); @@ -956,8 +954,8 @@ int func_803391A4(Gfx **gfx, Mtx **mtx, f32 position[3], f32 arg3[3], f32 scale, } else if(D_80383714 == 1){//L80339AC0 gSPDisplayList((*gfx)++, D_80370368); - gDPSetEnvColor((*gfx)++, D_803837A0.env[0], D_803837A0.env[1], D_803837A0.env[2], D_803837A0.env[3]); - if(D_803837A0.env[3] == 0xFF){ + gDPSetEnvColor((*gfx)++, D_803837A0[0], D_803837A0[1], D_803837A0[2], D_803837A0[3]); + if(D_803837A0[3] == 0xFF){ gSPSegment((*gfx)++, 0x03, osVirtualToPhysical(spDC)); } else{ @@ -1012,8 +1010,8 @@ int func_803391A4(Gfx **gfx, Mtx **mtx, f32 position[3], f32 arg3[3], f32 scale, }//L80339EAC mlMtxIdent(); - if(D_80383770){ - func_80252AF0(&D_80383774, spE0, arg3, scale, arg5); + if(D_80383758.unk18){ + func_80252AF0(D_80383758.unk1C, spE0, arg3, scale, arg5); } else{ func_80252AF0(D_80383C38, spE0, arg3, scale, arg5); @@ -1130,7 +1128,7 @@ void func_8033A17C(void){ void func_8033A1A4(void){ func_80338390(); - D_80383770 = 0; + D_80383758.unk18 = 0; D_803837E0.unk400 = &D_803837E0.unk0[0]; D_803837E0.unk404 = D_803837E0.unk400 + 32; D_803837E0.unk408[0] = D_803837E0.unk408[1] = D_803837E0.unk408[2] = 0.0f; @@ -1216,10 +1214,10 @@ void func_8033A334(s32 env[4], s32 prim[4]){ void func_8033A388(s32 r, s32 g, s32 b, s32 a){ D_80383714 = 1; - D_803837A0.env[0] = MIN(0xFF, r); - D_803837A0.env[1] = MIN(0xFF, g); - D_803837A0.env[2] = MIN(0xFF, b); - D_803837A0.env[3] = MIN(0xFF, a); + D_803837A0[0] = MIN(0xFF, r); + D_803837A0[1] = MIN(0xFF, g); + D_803837A0[2] = MIN(0xFF, b); + D_803837A0[3] = MIN(0xFF, a); } void func_8033A410(s32 a){ diff --git a/src/core2/code_B3A80.c b/src/core2/code_B3A80.c index 32f1dee8..0e0a843b 100644 --- a/src/core2/code_B3A80.c +++ b/src/core2/code_B3A80.c @@ -15,17 +15,20 @@ extern s32 D_80370A10; extern f32 D_80378F50; -extern s32 D_80383CB0; -extern AssetROMHead *D_80383CC0; -extern AssetFileMeta *D_80383CC4; -extern u32 D_80383CC8; -extern s32 D_80383CCC; //asset_data_rom_offset -extern void** D_80383CD0; //assetCache_ptrs; -extern BKSpriteDisplayData **D_80383CD4; -extern u8* assetCache_depCount; //assetCache_dependencies; -extern s16 *D_80383CDC; //assetCache_indexs +/* .bss */ +s32 D_80383CB0; +u8 pad_80383CB8[0x8]; +AssetROMHead *D_80383CC0; +AssetFileMeta *D_80383CC4; +u32 D_80383CC8; +s32 D_80383CCC; //asset_data_rom_offset +void** D_80383CD0; //assetCache_ptrs; +BKSpriteDisplayData **D_80383CD4; +u8* assetCache_depCount; //assetCache_dependencies; +s16 *D_80383CDC; //assetCache_indexs +vector(struct21s) *D_80383CE0[2]; -extern vector(struct21s) *D_80383CE0[2]; +/* .public */ s32 assetcache_release(void * arg0); f32 func_8033ABA0(AnimationFile *anim_file, f32 arg1); diff --git a/src/core2/code_B5040.c b/src/core2/code_B5040.c index fa9cc65e..b993586a 100644 --- a/src/core2/code_B5040.c +++ b/src/core2/code_B5040.c @@ -12,19 +12,21 @@ typedef struct { void savedata_clear(u8 *savedata); s32 savedata_verify(s32 arg0, SaveData *savedata); +/* .data */ extern Struct_B5040 D_80370A20[]; -extern s32 D_80383CF0; -extern s32 D_80383CF4; //jiggy_offset -extern s32 D_80383CF8; //honeycomb_offset -extern s32 D_80383CFC; //mumbotoken_offset -extern s32 D_80383D00; //notescores_offset -extern s32 D_80383D04; //timescores_offset -extern s32 D_80383D08; //savedata_jiggy_offset -extern s32 D_80383D0C; //saved_item_offset -extern s32 D_80383D10; //abilities_offset -extern s32 D_80383D14; //end_offset -extern u8 D_80383D18; +/* .bss */ +s32 D_80383CF0; +s32 D_80383CF4; //jiggy_offset +s32 D_80383CF8; //honeycomb_offset +s32 D_80383CFC; //mumbotoken_offset +s32 D_80383D00; //notescores_offset +s32 D_80383D04; //timescores_offset +s32 D_80383D08; //savedata_jiggy_offset +s32 D_80383D0C; //saved_item_offset +s32 D_80383D10; //abilities_offset +s32 D_80383D14; //end_offset +u8 D_80383D18; /* .code */ void savedata_update_crc(s32 buffer, s32 size){ diff --git a/src/core2/code_B5E00.c b/src/core2/code_B5E00.c index 2a6329b8..b7a6e974 100644 --- a/src/core2/code_B5E00.c +++ b/src/core2/code_B5E00.c @@ -4,9 +4,10 @@ #include "save.h" -extern SaveData D_80383D20[4]; //save_data -extern s8 D_80383F00[4]; //gamenum to filenum -extern s32 D_80383F04; +/* .bss */ +SaveData D_80383D20[4]; //save_data +s8 D_80383F00[4]; //gamenum to filenum +s32 D_80383F04; /* .code */ int func_8033CD90(s32 filenum){ diff --git a/src/core2/code_B62B0.c b/src/core2/code_B62B0.c index 3edce061..3d5d98f0 100644 --- a/src/core2/code_B62B0.c +++ b/src/core2/code_B62B0.c @@ -13,12 +13,14 @@ typedef struct{ s32 unk4; } Struct_core2_B62B0_1; +/* .data */ extern Struct_core2_B62B0_0 D_80370AC0[]; extern Struct_core2_B62B0_1 D_80371DC0[]; -extern s16 D_80383F10[]; - +/* .bss */ +s16 D_80383F10[0x2A9]; +/* .code */ s32 func_8033D240(ActorMarker *arg0, ActorMarker *arg1){ if(arg0){ if(!arg0->unk14_20 && player_getActiveHitbox(arg1) == HITBOX_6_WONDERWING) diff --git a/src/core2/code_B6C60.c b/src/core2/code_B6C60.c index 784313ad..a02aeb4e 100644 --- a/src/core2/code_B6C60.c +++ b/src/core2/code_B6C60.c @@ -6,7 +6,7 @@ extern f64 D_80378F80; /* .bss */ -extern s32 D_80384470; +s32 D_80384470; /* .code */ f32 func_8033DBF0(void){ diff --git a/src/core2/code_B6CE0.c b/src/core2/code_B6CE0.c index 6421f56a..815e00af 100644 --- a/src/core2/code_B6CE0.c +++ b/src/core2/code_B6CE0.c @@ -6,8 +6,8 @@ f32 D_80371E20 = 1.0f; /* .bss */ -extern f32 D_80384480; -extern s32 D_80384484; +f32 D_80384480; +s32 D_80384484; /* .code */ void func_8033DC70(void){ diff --git a/src/core2/code_B6EA0.c b/src/core2/code_B6EA0.c index beb8ba37..4afb40fd 100644 --- a/src/core2/code_B6EA0.c +++ b/src/core2/code_B6EA0.c @@ -84,13 +84,13 @@ Struct_Core2_B6CE0_1 D_80371E30[] ={ }; /* .bss */ -extern ParticleStruct0s D_80384490[]; -extern s32 D_80384FD0; -extern struct { +ParticleStruct0s D_80384490[40]; +s32 D_80384FD0; +struct { s32 unk0; s32 unk4; } D_80384FD8; -extern u8 D_80384FE0; +u8 D_80384FE0; /* .code */ f32 func_8033DE30(s32 arg0){ diff --git a/src/core2/code_B8020.c b/src/core2/code_B8020.c index 9e320956..3737e27b 100644 --- a/src/core2/code_B8020.c +++ b/src/core2/code_B8020.c @@ -2,5 +2,8 @@ #include "functions.h" #include "variables.h" +/* .bss */ +UNK_TYPE(void *)D_80384FF0; +/* .code */ #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B8020/func_8033EFB0.s") diff --git a/src/core2/code_B8860.c b/src/core2/code_B8860.c index 5249df55..3a66a950 100644 --- a/src/core2/code_B8860.c +++ b/src/core2/code_B8860.c @@ -27,7 +27,7 @@ f32 func_8033FE9C(u8 arg0); void func_8033FB64(u8 arg0); /* .bss */ -extern Struct_B8860_0s D_80385000[]; +Struct_B8860_0s D_80385000[0x32]; /* .code */ void func_8033F7F0(u8 arg0, Gfx **gfx, Mtx **mtx, Vtx **vtx){ diff --git a/src/core2/code_B9770.c b/src/core2/code_B9770.c index 9e4960f3..e00d4f45 100644 --- a/src/core2/code_B9770.c +++ b/src/core2/code_B9770.c @@ -14,7 +14,8 @@ extern void **D_80371E74; extern s32 D_80371E78; extern s32 D_80371E7C; -extern s16 *D_803858A0; +/* .bss */ +s16 *D_803858A0; f32 func_80340700(f32, f32, f32); diff --git a/src/core2/code_BD100.c b/src/core2/code_BD100.c index 749ad0d8..59cd15e5 100644 --- a/src/core2/code_BD100.c +++ b/src/core2/code_BD100.c @@ -4,6 +4,17 @@ void func_80336924(Gfx*, Vtx*, BKSprite *, s32, s32); +extern f32 D_80379080; +extern f32 D_80379084; +extern struct { + void (*unk0)(void *); + void *unk4; +}D_80371EC0; +extern f32 D_80371ECC; + +/* .bss */ +u8 D_803858B0; + #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BD100/func_80344090.s") #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BD100/func_80344124.s") @@ -11,14 +22,7 @@ void func_80336924(Gfx*, Vtx*, BKSprite *, s32, s32); #ifndef NONMATCHING #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BD100/func_80344138.s") #else -extern f32 D_80379080; -extern f32 D_80379084; -extern struct { - void (*unk0)(void *); - void *unk4; -}D_80371EC0; -extern f32 D_80371ECC; -extern u8 D_803858B0; + extern void func_80252330(f32, f32, f32); diff --git a/src/core2/code_BDCC0.c b/src/core2/code_BDCC0.c index 845172f5..5cb45f7d 100644 --- a/src/core2/code_BDCC0.c +++ b/src/core2/code_BDCC0.c @@ -20,7 +20,7 @@ typedef struct struct_core2_bd100_0_s{ void func_80344D70(u8 index); /* .bss */ -Struct_Core2_BD100_0 D_803858C0[42]; +Struct_Core2_BD100_0 D_803858C0[41]; /* .code */ void func_80344C50(void){ diff --git a/src/core2/code_BEF20.c b/src/core2/code_BEF20.c index 2534689c..ca239ab9 100644 --- a/src/core2/code_BEF20.c +++ b/src/core2/code_BEF20.c @@ -11,18 +11,19 @@ void itemscore_noteScores_clear(void); s32 itemscore_noteScores_get(enum level_e lvl_id); void itemscore_timeScores_clear(void); +/* .bss */ s32 D_80385F30[0x2C]; -extern s32 D_80385FE0; -extern s32 D_80385FE4; -extern s32 D_80385FE8; -extern f32 D_80385FEC; +s32 D_80385FE0; +s32 D_80385FE4; +s32 D_80385FE8; +f32 D_80385FEC; u8 D_80385FF0[0xB]; f32 D_80386000[0xE]; //timescores -extern s32 D_80386038; -extern u64 D_80386040; -extern u16 D_80386048[]; //timescores_truncated -extern u8 D_80386060[]; //saved item array -extern s32 D_80386068; +s32 D_80386038; +u64 D_80386040; +u16 D_80386048[0xB]; //timescores_truncated +u8 D_80386060[5]; //saved item array +s32 D_80386068; void func_80345EB0(enum item_e item){ if(func_802FAFE8(item)){ diff --git a/src/core2/code_C0E60.c b/src/core2/code_C0E60.c index 7e53335c..eb3d8d95 100644 --- a/src/core2/code_C0E60.c +++ b/src/core2/code_C0E60.c @@ -54,24 +54,24 @@ void func_80348044(Gfx **gfx, BKSprite* sprite, s32 frame, s32 tmem, s32 rtile, extern f64 D_80379140; /* .bss */ -extern s32 D_80386070; -extern s32 D_80386074; -extern s32 D_80386078; -extern s32 D_8038607C; -extern s32 D_80386080; -extern s32 D_80386084; -extern s32 D_80386088; -extern s32 D_8038608C; -extern s32 D_80386090; -extern s32 D_80386094; -extern s32 D_80386098; -extern s32 D_8038609C; -extern s32 D_803860A0; -extern s32 D_803860A4; -extern s32 D_803860A8; -extern s32 D_803860AC; -extern s32 D_803860B0; -extern s32 D_803860B4; +s32 D_80386070; +s32 D_80386074; +s32 D_80386078; +s32 D_8038607C; +s32 D_80386080; +s32 D_80386084; +s32 D_80386088; +s32 D_8038608C; +s32 D_80386090; +s32 D_80386094; +s32 D_80386098; +s32 D_8038609C; +s32 D_803860A0; +s32 D_803860A4; +s32 D_803860A8; +s32 D_803860AC; +s32 D_803860B0; +s32 D_803860B4; /* .code */ void func_80347DF0(Struct81s *arg0){ diff --git a/src/core2/code_C2F30.c b/src/core2/code_C2F30.c index bc1686a0..e664df60 100644 --- a/src/core2/code_C2F30.c +++ b/src/core2/code_C2F30.c @@ -27,11 +27,11 @@ void demo_free(void); extern DemoInput D_80371EF0; -extern DemoInput *D_803860D0; //demo_input_ptr -extern DemoFileHeader * D_803860D4; //demo_file_ptr - -extern s32 D_803860D8;//current_input -extern s32 D_803860DC;//total_inputs +/* .bss */ +DemoInput *D_803860D0; //demo_input_ptr +DemoFileHeader * D_803860D4; //demo_file_ptr +s32 D_803860D8;//current_input +s32 D_803860DC;//total_inputs /* .code */ s32 func_80349EC0(s32 arg0){ diff --git a/src/core2/code_C4320.c b/src/core2/code_C4320.c index 15e45ce2..37b1f4a4 100644 --- a/src/core2/code_C4320.c +++ b/src/core2/code_C4320.c @@ -58,13 +58,13 @@ extern u16 D_80371FA0[] = { 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC }; //EB030: /* .bss */ -extern s32 D_80386110; //current attract demo index -extern Struct_core2_C4320_0 *D_80386114; //current attract demo ptr -extern s32 D_80386118; -extern s32 D_8038611C; -extern bool D_80386120; -extern s32 D_80386124; -extern f32 D_80386128; +s32 D_80386110; //current attract demo index +Struct_core2_C4320_0 *D_80386114; //current attract demo ptr +s32 D_80386118; +s32 D_8038611C; +bool D_80386120; +s32 D_80386124; +f32 D_80386128; /* .code */ void func_8034B2B0(s32 arg0) { diff --git a/src/core2/code_C4F40.c b/src/core2/code_C4F40.c index 4a901a40..6bb54bc8 100644 --- a/src/core2/code_C4F40.c +++ b/src/core2/code_C4F40.c @@ -48,7 +48,7 @@ Struct_core2_C4F40_1 D_80371FC0[] = { }; /* .bss */ -extern vector(Struct6Es) *D_80386130; +vector(Struct6Es) *D_80386130; /* .code */ Struct6Es *func_8034BED0(ActorMarker *marker, s32 arg1, s32 arg2, s32 arg3) { diff --git a/src/core2/code_C5440.c b/src/core2/code_C5440.c index c009fb40..3cde7c71 100644 --- a/src/core2/code_C5440.c +++ b/src/core2/code_C5440.c @@ -44,11 +44,13 @@ struct1Es D_80372030[] = { {func_8034F570, func_8034F5B0, func_8034F568}, //lightning? }; -extern struct { +/* .bss */ +struct { u8 unk0; vector(struct1Ds) *unk4; } D_80386140; +/* .public */ void func_8034C9B0(int arg0); //.code diff --git a/src/core2/code_C89C0.c b/src/core2/code_C89C0.c index 8a8e6971..68a51fdc 100644 --- a/src/core2/code_C89C0.c +++ b/src/core2/code_C89C0.c @@ -46,7 +46,7 @@ extern f32 D_8037932C; extern f32 D_80379330; /* .bss */ -extern struct { +struct { void *unk0; //2D_fish_bin void *unk4; //green_ball_bin Struct_core2_C89C0_1 *unk8; diff --git a/src/core2/code_C97F0.c b/src/core2/code_C97F0.c index de035130..3cce2aed 100644 --- a/src/core2/code_C97F0.c +++ b/src/core2/code_C97F0.c @@ -31,12 +31,12 @@ extern Struct_core2_C97F0_0 D_803724F4[]; extern s32 D_803725A8[4]; /* .bss */ -extern struct{ +struct{ Struct_core2_C97F0_1 *unk0; Struct_core2_C97F0_0 *unk4; void *unk8; } D_80386170; -extern struct { +struct { u8 unk0; u8 unk1; }D_8038617C; diff --git a/src/core2/code_C9F00.c b/src/core2/code_C9F00.c index d6486a40..973eb5d2 100644 --- a/src/core2/code_C9F00.c +++ b/src/core2/code_C9F00.c @@ -56,7 +56,7 @@ extern f64 D_80379370; extern f64 D_80379378; /* .bss */ -extern struct { +struct { Struct68s *unk0; Struct6Cs unk4; f32 unk14[3]; @@ -64,7 +64,7 @@ extern struct { Struct68s *unk2C; }D_80386180; -extern struct { +struct { s32 unk0; Struct68s *unk4; //start Struct68s *unk8; //end diff --git a/src/core2/code_CBBF0.c b/src/core2/code_CBBF0.c index 71df3c86..2c13d9f1 100644 --- a/src/core2/code_CBBF0.c +++ b/src/core2/code_CBBF0.c @@ -14,7 +14,7 @@ typedef struct{ void commonParticleType_set(enum common_particle_e arg0, GenMethod_0 init_method, s32 update_method, GenMethod_0 free_method, s32 arg4, s32 arg5); /* .bss */ -extern CommonParticleType D_80386260[]; +CommonParticleType D_80386260[0x12]; /* .code */ diff --git a/src/core2/code_CD0A0.c b/src/core2/code_CD0A0.c index 6292006d..09173bd5 100644 --- a/src/core2/code_CD0A0.c +++ b/src/core2/code_CD0A0.c @@ -4,7 +4,7 @@ #include "code_B6EA0.h" -extern struct{ +struct{ s32 unk0; s32 unk4; } D_803863D0; diff --git a/src/core2/code_CD6E0.c b/src/core2/code_CD6E0.c index 44bd682c..0aaf3746 100644 --- a/src/core2/code_CD6E0.c +++ b/src/core2/code_CD6E0.c @@ -357,8 +357,6 @@ void func_803553E8(void) { void func_80355548(void){} -//matching but require .bss defined -#ifdef NON_MATCHING void func_80355550(void) { static s32 D_803863E0; u8 sp3F; @@ -400,9 +398,6 @@ void func_80355550(void) { sp30->unk20 = 0x14; func_80354670(sp3F, 0x14); } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_CD6E0/func_80355550.s") -#endif void func_8035570C(void) { ParticleStruct0s* temp_s0; @@ -441,9 +436,6 @@ void func_8035570C(void) { void func_8035585C(void){} -#ifndef NONMATCHING //matching but require .bss defined -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_CD6E0/func_80355864.s") -#else void func_80355864(void) { u8 sp5F; struct54s *sp58; @@ -491,7 +483,6 @@ void func_80355864(void) { sp48->unk28 = 1; func_80354670(sp5F, 0x14); } -#endif; void func_80355B00(void) { ParticleStruct0s *sp44; diff --git a/src/core2/jiggyscore.c b/src/core2/jiggyscore.c index 2b36e74a..d40cd555 100644 --- a/src/core2/jiggyscore.c +++ b/src/core2/jiggyscore.c @@ -7,11 +7,13 @@ void jiggyscore_debug(void); void jiggyscore_clearAll(void); void jiggyscore_setSpawned(s32, s32); -extern struct { +/* .bss */ +struct { u8 D_803832C0[0xD]; u8 D_803832CD[0xD]; }jiggyscore; +/* .code */ void jiggyscore_clearAll_debug(void){ //jiggyscore_clearAll jiggyscore_debug(); jiggyscore_clearAll(); diff --git a/src/core2/levelspecificflags.c b/src/core2/levelspecificflags.c index 85c165db..f487ee57 100644 --- a/src/core2/levelspecificflags.c +++ b/src/core2/levelspecificflags.c @@ -6,9 +6,9 @@ void levelSpecificFlags_set(arg0, arg1); //levelSpecificFlags -extern u32 D_80383320; -extern u32 D_80383324; -extern u8 D_80383328[]; +u32 D_80383320; +u32 D_80383324; +u8 D_80383328[8]; #pragma GLOBAL_ASM("asm/nonmatchings/core2/levelspecificflags/_levelSpecificFlags_calcCRC1.s") diff --git a/src/core2/rand.c b/src/core2/rand.c index 8d701e6a..27587384 100644 --- a/src/core2/rand.c +++ b/src/core2/rand.c @@ -3,19 +3,18 @@ #include "variables.h" /* .bss */ -extern s32 D_803860E0; -extern s32 D_803860E4; -extern s32 D_803860E8; -extern s32 D_803860EC; -extern s32 D_803860F0; -extern s32 D_803860F4; - -extern s32 D_803860F8; -extern s32 D_803860FC; -extern s32 D_80386100; -extern s32 D_80386104; -extern s32 D_80386108; -extern s32 D_8038610C; +s32 D_803860E0; +s32 D_803860E4; +s32 D_803860E8; +s32 D_803860EC; +s32 D_803860F0; +s32 D_803860F4; +s32 D_803860F8; +s32 D_803860FC; +s32 D_80386100; +s32 D_80386104; +s32 D_80386108; +s32 D_8038610C; /* .code */ f32 randf(void){ diff --git a/src/core2/timedfuncqueue.c b/src/core2/timedfuncqueue.c index ce294fcd..dc2c9bc4 100644 --- a/src/core2/timedfuncqueue.c +++ b/src/core2/timedfuncqueue.c @@ -59,7 +59,7 @@ void func_80324BA0(s32); void func_802BE720(void); /* .bss */ -extern TimedFunctionArray D_80383380; +TimedFunctionArray D_80383380; /* .code */ TimedFunction* __timedFuncQueue_insert(f32 time, s32 cnt, void *funcPtr, s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4){ diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml index 0b5cab9f..667a5e42 100644 --- a/subyaml/core2.us.v10.yaml +++ b/subyaml/core2.us.v10.yaml @@ -303,6 +303,7 @@ segments: - [0x94620, c, code_94620] #DONE - [0x94780, c, code_94780] #DONE - [0x94A20, c, code_94A20] + - [0x98CB0, c, code_98CB0] - [0x99860, c, code_99860] #DONE - [0x999A0, c, code_999A0] #DONE - [0x99F80, c, jiggyscore] #DONE @@ -320,6 +321,7 @@ segments: - [0x9D860, c, timedfuncqueue] #DONE - [0x9E370, c, code_9E370] - [0xA4D00, c, code_A4D00] + - [0xA5BC0, c, code_A5BC0] - [0xABC00, c, code_ABC00] - [0xAC520, c, code_AC520] - [0xAD110, c, code_AD110] #DONE @@ -384,7 +386,7 @@ segments: - [0xCC1E0, c, code_CC1E0] #DONE - [0xCD0A0, c, code_CD0A0] #DONE - [0xCD3F0, c, code_CD3F0] #DONE - - [0xCD6E0, c, code_CD6E0] + - [0xCD6E0, c, code_CD6E0] #DONE - [0xCECD0, c, code_CECD0] #DONE - [0xCF090, c, code_CF090] #DONE - [0xCF3E0, c, code_CF3E0] #DONE @@ -539,7 +541,7 @@ segments: - [0xE7330, .data, code_9B990] - [0xE7490, .data, code_9D640] - [0xE75D0, bin, data_E75D0] - - [0xE7870, .data, code_A4D00] + - [0xE7870, .data, code_A5BC0] - [0xE78A0, bin, data_E78A0] - [0xE89F0, bin, data_E89F0] # .data, code_AD110] - [0xE92C0, bin, data_E92C0] @@ -1017,5 +1019,56 @@ segments: - [0xf2c00, .bss, code_93C10] - [0xf2c00, .bss, code_94620] - [0xf2c00, .bss, code_94780] - # - [0xf2c00, .bss, code_CD6E0] # D_803863E0 + - [0xf2c00, .bss, code_94A20] + - [0xf2c00, .bss, code_98CB0] + - [0xf2c00, .bss, code_99860] + - [0xf2c00, .bss, code_999A0] + - [0xf2c00, .bss, jiggyscore] + - [0xf2c00, .bss, code_9A320] + - [0xf2c00, .bss, code_9A580] + - [0xf2c00, .bss, code_9A740] + - [0xf2c00, .bss, code_9A9D0] + - [0xf2c00, .bss, levelspecificflags] + - [0xf2c00, .bss, code_9B180] + - [0xf2c00, .bss, code_9B650] + - [0xf2c00, .bss, code_9B990] + - [0xf2c00, .bss, code_9C170] + - [0xf2c00, .bss, timedfuncqueue] + - [0xf2c00, .bss, code_9E370] + - [0xf2c00, .bss, code_A4D00] + - [0xf2c00, .bss, code_A5BC0] + - [0xf2c00, .bss, code_ABC00] + - [0xf2c00, .bss, code_AC520] + - [0xf2c00, .bss, code_AD110] + - [0xf2c00, .bss, code_AD5B0] + - [0xf2c00, .bss, code_AE290] + - [0xf2c00, .bss, code_AEDA0] + - [0xf2c00, .bss, code_B1400] + - [0xf2c00, .bss, code_B3A80] + - [0xf2c00, .bss, code_B5040] + - [0xf2c00, .bss, code_B5E00] + - [0xf2c00, .bss, code_B62B0] + - [0xf2c00, .bss, code_B6C60] + - [0xf2c00, .bss, code_B6CE0] + - [0xf2c00, .bss, code_B6EA0] + - [0xf2c00, .bss, code_B8020] + - [0xf2c00, .bss, code_B8860] + - [0xf2c00, .bss, code_B9770] + - [0xf2c00, .bss, code_BD100] + - [0xf2c00, .bss, code_BDCC0] + - [0xf2c00, .bss, code_BEF20] + - [0xf2c00, .bss, code_C0E60] + - [0xf2c00, .bss, code_C2C20] + - [0xf2c00, .bss, code_C2F30] + - [0xf2c00, .bss, rand] + - [0xf2c00, .bss, code_C4320] + - [0xf2c00, .bss, code_C4F40] + - [0xf2c00, .bss, code_C5440] + - [0xf2c00, .bss, code_C89C0] + - [0xf2c00, .bss, code_C97F0] + - [0xf2c00, .bss, code_C9F00] + - [0xf2c00, .bss, code_CB8A0] + - [0xf2c00, .bss, code_CBBF0] + - [0xf2c00, .bss, code_CD0A0] + - [0xf2c00, .bss, code_CD6E0] - [0xf2c00] # core2 end