summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_02008AA4.c257
-rw-r--r--arm9/src/unk_0200BB14.c60
2 files changed, 275 insertions, 42 deletions
diff --git a/arm9/src/unk_02008AA4.c b/arm9/src/unk_02008AA4.c
new file mode 100644
index 00000000..2d7fb77d
--- /dev/null
+++ b/arm9/src/unk_02008AA4.c
@@ -0,0 +1,257 @@
+#include "global.h"
+#include "unk_02008AA4.h"
+#include "GX_vramcnt.h"
+#include "heap.h"
+#include "unk_0200BB14.h"
+
+extern u32 FUN_020094F0(u32 param0, s32 param1);
+extern u32 FUN_02009C80(u32, u32);
+extern u32 FUN_02009544(u32);
+extern u32 FUN_02009E54(u32 param0, u32 param1);
+extern u32 FUN_02009C5C(u32);
+extern u32 FUN_02009574(u32);
+extern u32 FUN_0200958C(u32);
+extern u32 FUN_020095A4(u32);
+extern u32 FUN_020095BC(u32);
+extern void FUN_0202134C(void *, u32);
+extern void FUN_02009FD8(void *param0, u32 *param1, u32 param2, u32 param3);
+extern u32 FUN_0201FCB0(u32 *);
+extern void FUN_02021390(u32, u32 *);
+extern void FUN_0201D194(u32, u32, u32);
+extern void FUN_0201E068(u32, u32);
+
+THUMB_FUNC void FUN_02008AA4(struct UnkStruct_0200BB14_sub *param0,
+ s32 param1,
+ s32 param2,
+ s32 param3,
+ s32 param4,
+ s32 param5,
+ s32 param6,
+ u32 param7,
+ u32 param8,
+ u32 param9,
+ u32 param10,
+ u32 param11,
+ u32 param12,
+ u32 param13,
+ u32 param14)
+{
+ u32 r7;
+ u32 st14;
+ u32 st10;
+
+ u32 stc = 0;
+ u32 r4 = 0;
+ u32 st8 = 0;
+
+ GF_ASSERT(param9);
+ GF_ASSERT(param10);
+ GF_ASSERT(param12);
+ GF_ASSERT(param11);
+ GF_ASSERT(param0);
+
+ r7 = FUN_020094F0(param9, param1);
+ GF_ASSERT(r7);
+
+ st14 = FUN_020094F0(param10, param2);
+ GF_ASSERT(st14);
+
+ st10 = FUN_020094F0(param11, param3);
+ GF_ASSERT(st10);
+
+ if (param12 != 0 && param4 != -1)
+ {
+ stc = FUN_020094F0(param12, param4);
+ GF_ASSERT(stc);
+ }
+
+ if (param13 != 0)
+ {
+ if (param5 != -1)
+ {
+ r4 = FUN_020094F0(param13, param5);
+ }
+
+ if (param6 != -1)
+ {
+ st8 = FUN_020094F0(param14, param6);
+ }
+ }
+
+ u32 r6;
+ if (param7 != 0)
+ {
+ r6 = FUN_02009C80(r7, st10);
+ GF_ASSERT(r6);
+
+ param0->unk04 = FUN_02009544(r7);
+ }
+ else
+ {
+ r6 = FUN_02009C5C(r7);
+ GF_ASSERT(r6);
+
+ param0->unk04 = 0;
+ }
+
+ param0->unk08 = FUN_02009E54(st14, r6);
+ param0->unk00 = r6;
+ param0->unk0C = FUN_02009574(st10);
+
+ if (stc != 0)
+ {
+ param0->unk10 = FUN_0200958C(stc);
+ }
+ else
+ {
+ param0->unk10 = 0;
+ }
+
+ if (r4 != 0)
+ {
+ param0->unk14 = FUN_020095A4(r4);
+ param0->unk18 = FUN_020095BC(st8);
+ }
+ else
+ {
+ param0->unk14 = 0;
+ param0->unk18 = 0;
+ }
+
+ param0->unk1C = param7;
+ param0->unk20 = (u8)param8;
+}
+
+THUMB_FUNC struct UnkStruct_02008AA4_1 *FUN_02008BE0(struct UnkStruct_02008AA4_2 *param0,
+ u32 param1,
+ u32 param2,
+ u32 param3,
+ u32 param4,
+ u32 param5,
+ u32 param6,
+ u32 param7)
+{
+
+ s32 r4 = 0;
+ while (param0[r4].unk00 != -2)
+ {
+ r4++;
+ }
+
+ struct UnkStruct_02008AA4_1 *r6 = AllocFromHeap(param1, sizeof(struct UnkStruct_02008AA4_1));
+ r6->unk00 = AllocFromHeap(param1, r4 * sizeof(struct UnkStruct_0200BB14_sub));
+ r6->unk04 = r4;
+
+ for (int r7 = 0; r7 < r6->unk04; r7++)
+ {
+ FUN_02008AA4(&r6->unk00[r7],
+ param0[r7].unk00,
+ param0[r7].unk04,
+ param0[r7].unk08,
+ param0[r7].unk0C,
+ param0[r7].unk10,
+ param0[r7].unk14,
+ param0[r7].unk18,
+ param0[r7].unk1C,
+ param2,
+ param3,
+ param4,
+ param5,
+ param6,
+ param7);
+ }
+
+ return r6;
+}
+
+THUMB_FUNC void FUN_02008C80(struct UnkStruct_02008AA4_1 *param0)
+{
+ GF_ASSERT(param0);
+
+ if (param0->unk00 != NULL)
+ {
+ FreeToHeap(param0->unk00);
+ }
+ FreeToHeap(param0);
+}
+
+THUMB_FUNC u32 FUN_02008C9C(u32 param0, void *param1, u32 param2)
+{
+ FUN_0202134C(param1, 0xFFFFF000);
+
+ u32 st10[3];
+ u32 st0[4];
+
+ st0[0] = 0;
+ st0[1] = 0;
+ st0[2] = 0xFF000;
+ st0[3] = 0xC0000;
+ FUN_02009FD8(param1 + 0x98, st0, 1, param1);
+
+ st0[0] = 0;
+ st0[1] = 0xC0000;
+ st0[2] = 0xFF000;
+ st0[3] = 0xC0000;
+
+ FUN_02009FD8(param1 + 0xe0, st0, 2, param1);
+
+ st10[0] = param0;
+ st10[1] = (u32)param1;
+ st10[2] = param2;
+
+ return FUN_0201FCB0(st10);
+}
+
+THUMB_FUNC void FUN_02008D04(u32 param0, u32 param1, u32 param2)
+{
+ u32 st0[4];
+ st0[0] = param1;
+ st0[2] = 0xFF000;
+ st0[3] = 0xC0000;
+ st0[1] = param2;
+ FUN_02021390(param0 + 0x98, st0);
+}
+
+THUMB_FUNC void FUN_02008D24(u32 param0, u32 param1, u32 param2)
+{
+ u32 st0[4];
+ st0[0] = param1;
+ st0[2] = 0xFF000;
+ st0[3] = 0xC0000;
+ st0[1] = param2;
+ FUN_02021390(param0 + 0xe0, st0);
+}
+
+THUMB_FUNC void FUN_02008D44(u32 param0, u32 param1)
+{
+ switch (param1)
+ {
+ case 0x10:
+ if (GX_GetBankForOBJ() == 0x40 || GX_GetBankForOBJ() == 0x20)
+ {
+ FUN_0201D194(0x3E00, 0x200, param0);
+ return;
+ }
+
+ FUN_0201D194(0x7E00, 0x200, param0);
+ return;
+ case 0x00100010:
+ FUN_0201D194(0xfe00, 0x200, param0);
+ return;
+ case 0x00200010:
+ if (GX_GetBankForOBJ() == 0x30 || GX_GetBankForOBJ() == 0x50)
+ {
+ FUN_0201D194(0x13E00, 0x200, param0);
+ return;
+ }
+ FUN_0201D194(0x1FE00, 0x200, param0);
+ return;
+ }
+
+ GF_AssertFail();
+}
+
+THUMB_FUNC void FUN_02008DDC(u32 param0)
+{
+ FUN_0201E068(0xC000, param0);
+}
diff --git a/arm9/src/unk_0200BB14.c b/arm9/src/unk_0200BB14.c
index 4ed957d6..ac8d048e 100644
--- a/arm9/src/unk_0200BB14.c
+++ b/arm9/src/unk_0200BB14.c
@@ -2,6 +2,7 @@
#include "unk_0200BB14.h"
#include "game_init.h"
#include "heap.h"
+#include "unk_02008AA4.h"
extern void FUN_0201D060(u32 *param0, u32 param1, u32 param2);
extern void FUN_0201E00C(u32 param0, u32 param1);
@@ -18,13 +19,11 @@ extern void FUN_02009EAC(u32 param0,
extern u32 FUN_0201C328(u32 param0, u32 param1);
extern void FUN_0201D168();
extern void FUN_0201E0BC();
-extern u32 FUN_02008C9C(u32 param0, void *param1, u32 param2);
extern void FUN_0201FFC8(u32 param0);
extern void FUN_0201FDEC(u32 param0);
extern void FUN_02009F80();
extern void FUN_0201C348();
extern void FUN_0201FD58(u32 param0);
-extern void FUN_02008C80(u32 param0);
extern u32 FUN_02009660(u32 *param0, s32 param1);
extern void FUN_020096B4(u32 param0);
extern void FUN_02009C30(u32 *param0);
@@ -43,14 +42,6 @@ extern u32 *FUN_02009424(u32 param0, u32 param1);
extern u32 FUN_020093A8(u32 param0, u32 param1, u32 *param2, u32 param3);
extern void FUN_02009A90(u32 *param0);
extern void FUN_02009D34(u32 *param0);
-extern u32 FUN_02008BE0(void *param0,
- u32 param1,
- u32 param2,
- u32 param3,
- u32 param4,
- u32 param5,
- u32 param6,
- u32 param7);
extern u32 FUN_0201FE94(struct UnkStruct_0200BB14_4 *param0);
extern void FUN_02020130(u32 param0, u32 param1);
extern void FUN_02020248(u32 param0, u32 param1);
@@ -63,21 +54,6 @@ extern u32 FUN_02008FEC(
extern u32 FUN_02009D68(u32 param0);
extern u32 FUN_02009E88(u32 param0, u32 param1);
extern void FUN_02003108(u32 param0, u32 param1, u16 param2, u32 param3);
-extern void FUN_02008AA4(struct UnkStruct_0200BB14_sub *param0,
- s32 param1,
- s32 param2,
- s32 param3,
- s32 param4,
- s32 param5,
- s32 param6,
- u32 param7,
- u32 param8,
- u32 param9,
- u32 param10,
- u32 param11,
- u32 param12,
- u32 param13,
- u32 param14);
extern u8 FUN_020202A0(u32 param0);
extern u32 FUN_020094F0(u32 param0, u32 param1);
extern u32 FUN_02009E54(u32 param0, u32 param1);
@@ -344,7 +320,7 @@ THUMB_FUNC BOOL FUN_0200BD20(
FUN_02009A90(param1->unk24[0]);
FUN_02009D34(param1->unk24[1]);
- void *r6 = AllocAndReadFile(param0->unk000, st10[6]);
+ struct UnkStruct_02008AA4_2 *r6 = AllocAndReadFile(param0->unk000, st10[6]);
param1->unk04 = FUN_02008BE0(r6,
param0->unk000,
param1->unk0c[0],
@@ -568,7 +544,7 @@ THUMB_FUNC u8 FUN_0200C0DC(u32 param0,
return (u8)r4;
}
-THUMB_FUNC u32 FUN_0200C124(u32 *param0,
+THUMB_FUNC BOOL FUN_0200C124(u32 *param0,
struct UnkStruct_0200BB14_2 *param1,
u32 param2,
u32 param3,
@@ -578,7 +554,7 @@ THUMB_FUNC u32 FUN_0200C124(u32 *param0,
return FUN_0200C404(param0, param1, param2, param3, param4, 2, param5);
}
-THUMB_FUNC u32 FUN_0200C13C(u32 *param0,
+THUMB_FUNC BOOL FUN_0200C13C(u32 *param0,
struct UnkStruct_0200BB14_2 *param1,
u32 param2,
u32 param3,
@@ -732,22 +708,22 @@ THUMB_FUNC u32 FUN_0200C344(u32 *param0, u32 param1, u32 param2)
return FUN_02009E88(FUN_020094F0(param0[4], param1), param2);
}
-THUMB_FUNC u32 FUN_0200C358(struct UnkStruct_0200BB14_2 *param0, u32 param1)
+THUMB_FUNC BOOL FUN_0200C358(struct UnkStruct_0200BB14_2 *param0, u32 param1)
{
return FUN_0200C4F4(param0->unk0c[0], param0->unk24[0], param1);
}
-THUMB_FUNC u32 FUN_0200C368(struct UnkStruct_0200BB14_2 *param0, u32 param1)
+THUMB_FUNC BOOL FUN_0200C368(struct UnkStruct_0200BB14_2 *param0, u32 param1)
{
return FUN_0200C548(param0->unk0c[1], param0->unk24[1], param1);
}
-THUMB_FUNC u32 FUN_0200C378(struct UnkStruct_0200BB14_2 *param0, u32 param1)
+THUMB_FUNC BOOL FUN_0200C378(struct UnkStruct_0200BB14_2 *param0, u32 param1)
{
return FUN_0200C4A8(param0->unk0c[2], param0->unk24[2], param1);
}
-THUMB_FUNC u32 FUN_0200C388(struct UnkStruct_0200BB14_2 *param0, u32 param1)
+THUMB_FUNC BOOL FUN_0200C388(struct UnkStruct_0200BB14_2 *param0, u32 param1)
{
return FUN_0200C4A8(param0->unk0c[3], param0->unk24[3], param1);
}
@@ -796,8 +772,8 @@ THUMB_FUNC BOOL FUN_0200C404(u32 *param0,
u32 r5 = FUN_020090AC(param1->unk0c[param5], param2, param3, param4, param6, param5, param0[0]);
if (r5 != 0)
{
- u32 r4 = FUN_0200C474(param1->unk24[param5], r5);
- GF_ASSERT(r4 == 1);
+ BOOL r4 = FUN_0200C474(param1->unk24[param5], r5);
+ GF_ASSERT(r4 == TRUE);
return r4;
}
GF_ASSERT(0);
@@ -1085,18 +1061,18 @@ THUMB_FUNC void FUN_0200C75C(u32 param0, u16 *param1, u16 *param2)
{
s32 *r4 = FUN_0202011C(param0, param1, param2);
- param1[0] = r4[0] / 0x1000;
+ param1[0] = (u16)(r4[0] / 0x1000);
if (FUN_02020380(param0) == 2)
{
s32 r1 = r4[1] - 0xc0000;
- param2[0] = r1 / 0x1000;
+ param2[0] = (u16)(r1 / 0x1000);
return;
}
- param2[0] = r4[1] / 0x1000;
+ param2[0] = (u16)(r4[1] / 0x1000);
}
THUMB_FUNC void FUN_0200C7A0(u32 *param0, u16 *param1, u16 *param2)
@@ -1104,25 +1080,25 @@ THUMB_FUNC void FUN_0200C7A0(u32 *param0, u16 *param1, u16 *param2)
FUN_0200C75C(*param0, param1, param2);
}
-THUMB_FUNC void FUN_0200C7AC(u32 param0, u16 *param1, u16 *param2, u32 param3)
+THUMB_FUNC void FUN_0200C7AC(u32 param0, u16 *param1, u16 *param2, s32 param3)
{
s32 *r4 = FUN_0202011C(param0, param1, param2);
- param1[0] = r4[0] / 0x1000;
+ param1[0] = (u16)(r4[0] / 0x1000);
if (FUN_02020380(param0) == 2)
{
s32 r1 = r4[1] - param3;
- param2[0] = r1 / 0x1000;
+ param2[0] = (u16)(r1 / 0x1000);
return;
}
- param2[0] = r4[1] / 0x1000;
+ param2[0] = (u16)(r4[1] / 0x1000);
}
-THUMB_FUNC void FUN_0200C7F0(u32 *param0, u16 *param1, u16 *param2, u32 param3)
+THUMB_FUNC void FUN_0200C7F0(u32 *param0, u16 *param1, u16 *param2, s32 param3)
{
FUN_0200C7AC(*param0, param1, param2, param3);
}