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