summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_0201E7D8.c139
1 files changed, 125 insertions, 14 deletions
diff --git a/arm9/src/unk_0201E7D8.c b/arm9/src/unk_0201E7D8.c
index 5915c4f5..3860e89d 100644
--- a/arm9/src/unk_0201E7D8.c
+++ b/arm9/src/unk_0201E7D8.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "fx.h"
+#include "heap.h"
+#include "NNS_g3d.h"
struct UnkStruct_0201E7D8_64
{
@@ -11,7 +13,7 @@ struct UnkStruct_0201E7D8_64
s32 unk_14;
s32 unk_18;
s32 unk_1C;
- struct Vecx32 * unk_20;
+ VecFx32 * unk_20;
};
struct UnkStruct_0201E7D8
@@ -21,18 +23,16 @@ struct UnkStruct_0201E7D8
fx32 unk_08;
fx32 unk_0C;
fx32 unk_10;
- struct Vecx32 unk_14;
- struct Vecx32 unk_20;
- fx32 unk_2C;
- fx32 unk_30;
- fx32 unk_34;
+ VecFx32 unk_14;
+ VecFx32 unk_20;
+ VecFx32 unk_2C;
fx32 unk_38;
u16 unk_3C;
u16 unk_3E;
u8 filler_40[6];
u16 unk_46;
- u8 filler_48[12];
- u32 unk_54;
+ VecFx32 unk_48;
+ VecFx32 * unk_54;
u32 unk_58;
u32 unk_5C;
u32 unk_60;
@@ -40,7 +40,9 @@ struct UnkStruct_0201E7D8
};
BOOL UNK_02105BB8 = TRUE;
-void * UNK_021C59A4;
+struct UnkStruct_0201E7D8 * UNK_021C59A4;
+
+void FUN_0201EF70(VecFx32 * a0, struct UnkStruct_0201E7D8 * a1);
THUMB_FUNC void FUN_0201E7D8(struct UnkStruct_0201E7D8 * a0)
{
@@ -68,9 +70,9 @@ THUMB_FUNC void FUN_0201E99C(u16 a0, struct UnkStruct_0201E7D8 * a1)
a1->unk_08 = FX32_CONST(1.33333333);
a1->unk_0C = FX32_CONST(150);
a1->unk_10 = FX32_CONST(900);
- a1->unk_2C = 0;
- a1->unk_30 = FX32_ONE;
- a1->unk_34 = 0;
+ a1->unk_2C.x = 0;
+ a1->unk_2C.y = FX32_ONE;
+ a1->unk_2C.z = 0;
a1->unk_54 = 0;
a1->unk_58 = 0;
a1->unk_5C = 0;
@@ -78,7 +80,7 @@ THUMB_FUNC void FUN_0201E99C(u16 a0, struct UnkStruct_0201E7D8 * a1)
a1->unk_64 = NULL;
}
-THUMB_FUNC void FUN_0201E9E8(struct UnkStruct_0201E7D8 * a0, struct Vecx32 * a1)
+THUMB_FUNC void FUN_0201E9E8(struct UnkStruct_0201E7D8 * a0, VecFx32 * a1)
{
if (a0->unk_58 == 0)
a1->x = 0;
@@ -88,7 +90,7 @@ THUMB_FUNC void FUN_0201E9E8(struct UnkStruct_0201E7D8 * a0, struct Vecx32 * a1)
a1->z = 0;
}
-THUMB_FUNC void FUN_0201EA08(struct UnkStruct_0201E7D8 * a0, struct Vecx32 * a1, struct Vecx32 * a2)
+THUMB_FUNC void FUN_0201EA08(struct UnkStruct_0201E7D8 * a0, VecFx32 * a1, VecFx32 * a2)
{
s32 * r7;
s32 * sp0;
@@ -121,3 +123,112 @@ THUMB_FUNC void FUN_0201EA08(struct UnkStruct_0201E7D8 * a0, struct Vecx32 * a1,
a2->z = a1->z;
}
}
+
+THUMB_FUNC void FUN_0201EABC(s32 r5, s32 r7, s32 r6, s32 sp0, struct UnkStruct_0201E7D8 * sp18)
+{
+ s32 i;
+ struct UnkStruct_0201E7D8_64 * r4;
+
+ if (sp18->unk_54 != 0)
+ {
+ GF_ASSERT(r7 + 1 <= r5);
+ r4 = AllocFromHeap(sp0, sizeof(struct UnkStruct_0201E7D8_64));
+ r4->unk_20 = AllocFromHeap(sp0, sizeof(VecFx32) * r5);
+ for (i = 0; i < r5; i++)
+ {
+ r4->unk_20[i].x = 0;
+ r4->unk_20[i].y = 0;
+ r4->unk_20[i].z = 0;
+ }
+ r4->unk_00 = r5;
+ r4->unk_04 = 0;
+ r4->unk_08 = r7;
+ r4->unk_0C = r7;
+ r4->unk_10 = 0;
+ r4->unk_14 = 0;
+ r4->unk_18 = 0;
+ r4->unk_1C = 0;
+ if (r6 & 1)
+ r4->unk_14 = 1;
+ if (r6 & 2)
+ r4->unk_18 = 1;
+ if (r6 & 4)
+ r4->unk_1C = 1;
+ sp18->unk_64 = r4;
+ }
+}
+
+THUMB_FUNC void FUN_0201EB48(struct UnkStruct_0201E7D8 * a0)
+{
+ if (a0->unk_64 != NULL)
+ {
+ FreeToHeap(a0->unk_64->unk_20);
+ FreeToHeap(a0->unk_64);
+ a0->unk_64 = NULL;
+ }
+}
+
+THUMB_FUNC struct UnkStruct_0201E7D8 * FUN_0201EB64(u32 heap_id)
+{
+ return AllocFromHeap(heap_id, sizeof(struct UnkStruct_0201E7D8));
+}
+
+THUMB_FUNC void FUN_0201EB70(struct UnkStruct_0201E7D8 * a0)
+{
+ FreeToHeap(a0);
+}
+
+THUMB_FUNC void FUN_0201EB78(struct UnkStruct_0201E7D8 * a0, struct UnkStruct_0201E7D8 * a1)
+{
+ *a1 = *a0;
+}
+
+THUMB_FUNC void FUN_0201EB8C(struct UnkStruct_0201E7D8 * a0)
+{
+ UNK_021C59A4 = a0;
+}
+
+THUMB_FUNC void FUN_0201EB98(void)
+{
+ UNK_021C59A4 = NULL;
+}
+
+THUMB_FUNC void FUN_0201EBA4(void)
+{
+ VecFx32 sp10;
+ VecFx32 sp4;
+ if (UNK_021C59A4 != NULL)
+ {
+ if (UNK_021C59A4->unk_54 != NULL)
+ {
+ VEC_Subtract(UNK_021C59A4->unk_54, &UNK_021C59A4->unk_48, &sp10);
+ FUN_0201E9E8(UNK_021C59A4, &sp10);
+ FUN_0201EA08(UNK_021C59A4, &sp10, &sp4);
+ FUN_0201EF70(&sp4, UNK_021C59A4);
+ UNK_021C59A4->unk_48 = *UNK_021C59A4->unk_54;
+ }
+ NNS_G3dGlbLookAt(&UNK_021C59A4->unk_14, &UNK_021C59A4->unk_2C, &UNK_021C59A4->unk_20);
+ }
+}
+
+THUMB_FUNC void FUN_0201EC58(VecFx32 * a, struct UnkStruct_0201E7D8 * b)
+{
+ b->unk_2C = *a;
+}
+
+THUMB_FUNC void FUN_0201EC68(VecFx32 * a, struct UnkStruct_0201E7D8 * b)
+{
+ b->unk_54 = a;
+ b->unk_48 = *a;
+ b->unk_58 = 1;
+ b->unk_5C = 1;
+ b->unk_60 = 1;
+}
+
+THUMB_FUNC void FUN_0201EC88(struct UnkStruct_0201E7D8 * a0)
+{
+ a0->unk_54 = NULL;
+ a0->unk_58 = 0;
+ a0->unk_5C = 0;
+ a0->unk_60 = 0;
+}