summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_0202E29C.c1110
-rw-r--r--arm9/src/unk_0202F150.c34
-rw-r--r--arm9/src/unk_02031734.c49
3 files changed, 1139 insertions, 54 deletions
diff --git a/arm9/src/unk_0202E29C.c b/arm9/src/unk_0202E29C.c
new file mode 100644
index 00000000..36c18b16
--- /dev/null
+++ b/arm9/src/unk_0202E29C.c
@@ -0,0 +1,1110 @@
+#include "global.h"
+#include "unk_0202E29C.h"
+#include "MI_memory.h"
+#include "OS_cache.h"
+#include "game_init.h"
+#include "heap.h"
+#include "mail_message.h"
+#include "player_data.h"
+#include "unk_0202D858.h"
+#include "unk_0202F150.h"
+#include "unk_02031734.h"
+
+struct UnkStruct_0202E29C_const
+{
+ u8 unk0[6];
+};
+
+const struct UnkStruct_0202E29C_const UNK_020EEC40 = { { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } };
+
+struct
+{
+ u16 unk0;
+ u32 unk4;
+ struct UnkStruct_0202E29C *unk8;
+
+} UNK_021C59E8;
+
+extern u32 FUN_0202CEEC();
+extern u32 FUN_02023AC4();
+extern u32 FUN_02090DB8(u32 param0, void (*param1)(u32, u32), u32 param2);
+extern void FUN_02090CC8(void (*param0)(), u32 param1);
+extern void FUN_0202CE64(void *param0);
+extern void FUN_0202CB70(u32 param0);
+extern void FUN_0202D2F4();
+extern void FUN_0202D0A0(void (*param0)(u32, u8 *, u32), u32 param1);
+extern u32 FUN_0202CBD4();
+extern u32 FUN_0202CBFC();
+extern u32 FUN_0202C570(void (*param0)(struct UnkStruct_0202E29C_sub *, u32), u8 *param1, u32 param2);
+extern u32 FUN_0202D21C();
+extern void FUN_0202C770();
+extern u32 FUN_0202D1E4();
+extern void FUN_0202D100();
+extern u32 FUN_0202D1C8();
+extern u32 FUN_0202D200();
+extern void FUN_0202C4D8(u32 param0, u8 *param1, u32 param2);
+extern void FUN_0202D034(u32 param0, struct UnkStruct_0202E29C_sub *param1);
+extern u32 FUN_0202D358();
+extern void FUN_0202CB7C(void *param0, u32 param1);
+extern void FUN_0202D240(void *param0, u32 size, u32 param2, u32 param3);
+extern void FUN_0202DF54();
+extern u16 FUN_0202D19C();
+extern u32 FUN_0202CBE8();
+extern u32 FUN_0202D178();
+extern u16 FUN_0202CDA4();
+extern void FUN_0202CF84(u32 param0, u16 param1, u16 param2, u32 param3, u32 param4, u32 param5);
+extern u32 FUN_0202CB8C();
+extern u16 WM_GetDispersionBeaconPeriod();
+extern BOOL FUN_0202D2D0();
+
+THUMB_FUNC void FUN_0202E29C(struct PlayerData *player_data)
+{
+ if (UNK_021C59E8.unk8 == NULL)
+ {
+ UNK_021C59E8.unk8 = AllocFromHeap(0xf, sizeof(struct UnkStruct_0202E29C));
+ MI_CpuFill8(UNK_021C59E8.unk8, 0, sizeof(struct UnkStruct_0202E29C));
+
+ UNK_021C59E8.unk8->unkCA4 = AllocFromHeap(0xf, FUN_0202CEEC());
+ MI_CpuFill8(UNK_021C59E8.unk8->unkCA4, 0, FUN_0202CEEC());
+
+ UNK_021C59E8.unk8->unkCBC = AllocFromHeap(0xf, FUN_02023AC4());
+ MI_CpuFill8(UNK_021C59E8.unk8->unkCBC, 0, FUN_02023AC4());
+
+ UNK_021C59E8.unk8->unkCC0 = 0x333;
+ UNK_021C59E8.unk8->unkCB8 = player_data;
+
+ MailMsg_init(&UNK_021C59E8.unk8->unkCA8);
+ FUN_0202E500();
+ }
+}
+
+THUMB_FUNC BOOL FUN_0202E344()
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL FUN_0202E358(u8 *param0, u8 *param1, s32 param2)
+{
+ int i = 0;
+ while (i < param2)
+ {
+ if (*param0 != *param1)
+ {
+ return FALSE;
+ }
+
+ i++;
+ param0++;
+ param1++;
+ }
+
+ return TRUE;
+}
+
+THUMB_FUNC void FUN_0202E380(struct UnkStruct_0202E29C_sub *param0, u32 param1)
+{
+#pragma unused(param1)
+ s32 r5 = FUN_02033534();
+ u8 r6 = FUN_0203354C();
+ struct UnkStruct_0202E29C_sub4 *r4 = &param0->unk50;
+
+ if (r5 != 0xe)
+ {
+ if (FUN_0202D8B0(r4->unk04) == 0 || FUN_0202D8B0(r5) == 0)
+ {
+ if (r4->unk30[0x24] != 0)
+ {
+ if (r4->unk04 == 0xa)
+ {
+ return;
+ }
+ }
+
+ if (r4->unk04 != r5)
+ {
+ return;
+ }
+ }
+ }
+
+ if (r5 != 0xe)
+ {
+ if (r4->unk05 != r6)
+ {
+ return;
+ }
+ }
+
+ for (int i = 0; i < 0x10; i++)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] == 0)
+ {
+ continue;
+ }
+
+ if (!FUN_0202E358(UNK_021C59E8.unk8->unk054[i].unk04, param0->unk04, 6))
+ {
+ continue;
+ }
+
+ UNK_021C59E8.unk8->unkC84[i] = 0x96;
+
+ MI_CpuCopy8(param0, &UNK_021C59E8.unk8->unk054[i], sizeof(struct UnkStruct_0202E29C_sub));
+ return;
+ }
+
+ int i;
+ for (i = 0; i < 0x10; i++)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] == 0)
+ {
+ break;
+ }
+ }
+
+ if (i < 0x10)
+ {
+ UNK_021C59E8.unk8->unkC84[i] = 0x96;
+ MI_CpuCopy8(param0, &UNK_021C59E8.unk8->unk054[i], sizeof(struct UnkStruct_0202E29C_sub));
+ UNK_021C59E8.unk8->unkCB4 = 1;
+ }
+}
+
+THUMB_FUNC void FUN_0202E470(u32 param0, u32 param1)
+{
+#pragma unused(param0)
+ if (param1 != 0)
+ {
+ OS_Terminate();
+ }
+
+ UNK_021C59E8.unk4 = 2;
+}
+
+THUMB_FUNC void FUN_0202E488()
+{
+ UNK_021C59E8.unk4 = 0;
+ FUN_02016454(4);
+}
+
+THUMB_FUNC void FUN_0202E49C()
+{
+ FUN_02016444(4);
+ UNK_021C59E8.unk4 = 1;
+ if (FUN_02090DB8(8, FUN_0202E470, 0) != 1)
+ {
+ OS_Terminate();
+ }
+}
+
+THUMB_FUNC BOOL FUN_0202E4C8()
+{
+ if (UNK_021C59E8.unk4 == 2)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL FUN_0202E4DC()
+{
+ if (UNK_021C59E8.unk4 != 0)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC void FUN_0202E4F0()
+{
+ FUN_02090CC8(FUN_0202E488, 0);
+}
+
+THUMB_FUNC void FUN_0202E500()
+{
+ UNK_021C59E8.unk8->unkCB0 = 0;
+ FUN_0202CE64(UNK_021C59E8.unk8->unkCA4 + (32 - (u32)(UNK_021C59E8.unk8->unkCA4) % 32));
+
+ FUN_0202CB70(UNK_021C59E8.unk8->unkCC0);
+}
+
+THUMB_FUNC void FUN_0202E538()
+{
+ for (int i = 0; i < 0x10; i++)
+ {
+ UNK_021C59E8.unk8->unkC84[i] = 0;
+ }
+
+ MI_CpuFill8(UNK_021C59E8.unk8->unk054, 0, 0xC00);
+}
+
+THUMB_FUNC void FUN_0202E56C(u32 param0)
+{
+ UNK_021C59E8.unk8->unkDAD =
+ (UNK_021C59E8.unk8->unkDAD & ~8 | (u32)((u8)param0 << 0x1f) >> 0x1c);
+}
+
+THUMB_FUNC void FUN_0202E594()
+{
+ UNK_021C59E8.unk8->unkCB4 = 0;
+
+ UNK_021C59E8.unk8->unkDAD &= ~1;
+
+ UNK_021C59E8.unk8->unkDAD &= ~4;
+
+ UNK_021C59E8.unk8->unkDAA = 0;
+
+ UNK_021C59E8.unk8->unkDAD &= ~0x10;
+
+ UNK_021C59E8.unk8->unkDAC = 0;
+
+ UNK_021C59E8.unk8->unkDAB = 0;
+}
+
+THUMB_FUNC BOOL FUN_0202E5F8(u32 param0, u32 param1, u32 param2)
+{
+#pragma unused(param0)
+ FUN_0202E594();
+ FUN_0202E56C(param1);
+ FUN_0202D2F4();
+
+ if (UNK_021C59E8.unk8->unkDAB == 0)
+ {
+ FUN_0202D0A0(FUN_020303BC, 0xe);
+ UNK_021C59E8.unk8->unkDAB = 1;
+ }
+
+ UNK_021C59E8.unk8->unkDAD =
+ (UNK_021C59E8.unk8->unkDAD & ~0x20 | (u32)((u8)param2 << 0x1f) >> 0x1a);
+ if (FUN_0202CBD4() == 1 && FUN_0202CBFC() != 0)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC u32 FUN_0202E66C(u32 param0, u32 param1)
+{
+#pragma unused(param0)
+ FUN_0202E594();
+ if (param1 != 0)
+ {
+ FUN_0202E538();
+ }
+
+ if (UNK_021C59E8.unk8->unkDAB == 0)
+ {
+ FUN_0202D0A0(FUN_02030238, 0xe);
+ UNK_021C59E8.unk8->unkDAB = 1;
+ }
+
+ if (FUN_0202CBD4() == 1)
+ {
+ struct UnkStruct_0202E29C_const st0 = UNK_020EEC40;
+
+ if (FUN_0202C570(FUN_0202E380, st0.unk0, 0) != 0)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+THUMB_FUNC u32 FUN_0202E6F0()
+{
+ if (UNK_021C59E8.unk8 == NULL)
+ {
+ return 1;
+ }
+
+ switch (UNK_021C59E8.unk8->unkDAC)
+ {
+ case 0:
+ if (FUN_0202D21C() != 0)
+ {
+ FUN_0202C770();
+ UNK_021C59E8.unk8->unkDAC = 1;
+ }
+ else if (FUN_0202D1E4() == 0)
+ {
+ FUN_0202D100();
+ UNK_021C59E8.unk8->unkDAC = 2;
+ }
+ break;
+
+ case 1:
+ if (FUN_0202D1E4() == 0)
+ {
+ FUN_0202D100();
+ UNK_021C59E8.unk8->unkDAC = 2;
+ }
+ break;
+ case 2:
+ if (FUN_0202D1C8() != 0)
+ {
+ return 1;
+ }
+
+ if (FUN_0202D200() != 0)
+ {
+ UNK_021C59E8.unk8->unkDAC = 1;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+THUMB_FUNC BOOL FUN_0202E784()
+{
+ if (UNK_021C59E8.unk8 != NULL && UNK_021C59E8.unk8->unkDAA == 0)
+ {
+ UNK_021C59E8.unk8->unkDAA = 1;
+ FUN_0202D100();
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC void FUN_0202E7B0(u32 param0)
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ if (param0 != 0)
+ {
+ UNK_021C59E8.unk8->unkDAA = 2;
+ return;
+ }
+
+ UNK_021C59E8.unk8->unkDAA = 0;
+ FUN_0202E500();
+ }
+}
+
+THUMB_FUNC void FUN_0202E7D8()
+{
+ FreeToHeap(UNK_021C59E8.unk8->unkCBC);
+ FreeToHeap(UNK_021C59E8.unk8->unkCA4);
+ FreeToHeap(UNK_021C59E8.unk8);
+
+ UNK_021C59E8.unk8 = NULL;
+}
+
+THUMB_FUNC u32 FUN_0202E810()
+{
+ if (FUN_02030F40() == 0)
+ {
+ return 0;
+ }
+
+ u32 count = 0;
+ for (int i = 0; i < 0x10; i++)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] != 0)
+ {
+ count++;
+ }
+ }
+
+ return count;
+}
+
+THUMB_FUNC s32 FUN_0202E844(u32 param0)
+{
+ int i;
+ u32 count = 0;
+ for (i = 0; i < 0x10; i++)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] == 0)
+ {
+ continue;
+ }
+
+ if (count == param0)
+ {
+ return i;
+ }
+
+ count++;
+ }
+
+ ErrorHandling();
+ return 0;
+}
+
+THUMB_FUNC u8 FUN_0202E878()
+{
+ return UNK_021C59E8.unk8->unkCB4;
+}
+
+THUMB_FUNC void FUN_0202E88C()
+{
+ UNK_021C59E8.unk8->unkCB4 = 0;
+}
+
+THUMB_FUNC s32 FUN_0202E8A0(s32 param0)
+{
+ if (UNK_021C59E8.unk8->unkC84[param0] != 0)
+ {
+ if (UNK_021C59E8.unk8->unk054[param0].unk50.unk06 == 0)
+ {
+ return 1;
+ }
+ else
+ {
+ return UNK_021C59E8.unk8->unk054[param0].unk50.unk06;
+ }
+ }
+
+ return 0;
+}
+
+THUMB_FUNC s32 FUN_0202E8D0(s32 param0)
+{
+ for (int i = 0xf; i >= 0; i--)
+ {
+ s32 ret = FUN_0202E8A0(i);
+ if (ret > param0 && 8 > ret)
+ {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+THUMB_FUNC s32 FUN_0202E8F4()
+{
+ if (FUN_0202E810() == 0)
+ {
+ return -1;
+ }
+
+ for (int i = 0xf; i >= 0; i--)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] != 0 && FUN_0202EFE4(UNK_021C59E8.unk8->unk054[i].unk04))
+ {
+ s32 ret2 = FUN_0202E8A0(i);
+ if (ret2 > 1 && ret2 < 8)
+ {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+}
+
+THUMB_FUNC s32 FUN_0202E950()
+{
+ if (FUN_0202E810() == 0)
+ {
+ return -1;
+ }
+
+ for (int i = 0xf; i >= 0; i--)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] != 0 && FUN_0202EFE4(UNK_021C59E8.unk8->unk054[i].unk04))
+ {
+
+ return i;
+ }
+ }
+
+ s32 ret = FUN_0202E8D0(1);
+ if (ret == -1)
+ {
+ return FUN_0202E8D0(0);
+ }
+
+ return ret;
+}
+
+THUMB_FUNC void FUN_0202E9AC(u32 param0, struct PlayerData *player_data)
+{
+ int i;
+ u32 count = 0;
+ for (i = 0; i < 0x10; i++)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] == 0)
+ {
+ continue;
+ }
+
+ if (param0 == count)
+ {
+
+ PlayerProfile_Copy(FUN_0202EF84(i), player_data);
+ return;
+ }
+
+ count++;
+ }
+}
+
+THUMB_FUNC u32 FUN_0202E9E8(u32 param0)
+{
+ if (FUN_0202CBD4() == 2)
+ {
+ FUN_0202C770();
+ return 0;
+ }
+
+ if (FUN_0202CBD4() == 1)
+ {
+ s32 ret = FUN_02033534();
+ UNK_021C59E8.unk8->unkDA8 = (u8)UNK_021C59E8.unk8->unk054[param0].unk36;
+ if (FUN_0202D8B0(ret) != 0)
+ {
+ FUN_0202C4D8(1, UNK_021C59E8.unk8->unk054[param0].unk04, 0);
+ }
+ else
+ {
+ FUN_0202D034(1, &UNK_021C59E8.unk8->unk054[param0]);
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
+
+THUMB_FUNC void FUN_0202EA54()
+{
+ for (int i = 0; i < 0x10; i++)
+ {
+ if (UNK_021C59E8.unk8->unkC84[i] == 0)
+ {
+ continue;
+ }
+ if (UNK_021C59E8.unk8->unkC84[i] == 0)
+ {
+ continue;
+ }
+
+ UNK_021C59E8.unk8->unkC84[i]--;
+
+ if (UNK_021C59E8.unk8->unkC84[i] == 0)
+ {
+ UNK_021C59E8.unk8->unkCB4 = 1;
+ }
+ }
+}
+
+THUMB_FUNC void FUN_0202EA9C()
+{
+ s32 res = FUN_02033534();
+ struct PlayerData *player_data = FUN_0202EF70();
+
+ if (res != 0xf)
+ {
+ struct UnkStruct_0202E29C_sub2 *res = &UNK_021C59E8.unk8->unkCC4;
+ GF_ASSERT((s32)FUN_02023AC4() <= 0x20);
+ GF_ASSERT(PlayerProfile_sizeof() == 0x20);
+
+ MI_CpuCopy8(player_data, &res->unk08.unk08, PlayerProfile_sizeof());
+
+ MI_CpuCopy8(UNK_021C59E8.unk8->unkCBC, res->unk08.unk28, FUN_02023AC4());
+
+ res->unk00 = PlayerProfile_GetTrainerID(player_data);
+ res->unk04 = (u8)FUN_02033534();
+ res->unk05 = FUN_0203354C();
+
+ MI_CpuCopy8(&UNK_021C59E8.unk8->unkCA8, &res->unk08.unk00, sizeof(struct MailMessage));
+ res->unk08.unk4C = (u8)FUN_0202D358();
+ }
+ else
+ {
+ struct UnkStruct_0202E29C_sub2 *res = &UNK_021C59E8.unk8->unkCC4;
+ res->unk00 = PlayerProfile_GetTrainerID(player_data);
+ res->unk04 = (u8)FUN_02033534();
+ res->unk05 = FUN_0203354C();
+
+ MI_CpuCopy8(&UNK_021C59E8.unk8->unk000, &res->unk08, sizeof(struct UnkStruct_0202E29C_sub3));
+ }
+
+ DC_FlushRange(&UNK_021C59E8.unk8->unkCC4, sizeof(struct UnkStruct_0202E29C_sub2));
+ FUN_0202CB7C(&UNK_021C59E8.unk8->unkCC4, sizeof(struct UnkStruct_0202E29C_sub2));
+}
+
+THUMB_FUNC void FUN_0202EB7C()
+{
+ struct UnkStruct_0202E29C_sub2 *r4 = &UNK_021C59E8.unk8->unkCC4;
+ if (r4->unk06 != FUN_0202EDB8())
+ {
+ r4->unk06 = (u8)FUN_0202EDB8();
+ DC_FlushRange(&UNK_021C59E8.unk8->unkCC4, sizeof(struct UnkStruct_0202E29C_sub2));
+ FUN_0202CB7C(&UNK_021C59E8.unk8->unkCC4, sizeof(struct UnkStruct_0202E29C_sub2));
+
+ FUN_0202D240(&UNK_021C59E8.unk8->unkCC4,
+ sizeof(struct UnkStruct_0202E29C_sub2),
+ UNK_021C59E8.unk8->unkCC0,
+ UNK_021C59E8.unk0);
+ }
+}
+
+THUMB_FUNC void FUN_0202EBD0(u16 param0)
+{
+ u32 r5 = FUN_0202CBD4();
+ FUN_0202DF54();
+ FUN_0202EB7C();
+
+ if (FUN_0202D19C() == 0 && FUN_0202EE24() == 0 &&
+ ((u32)(UNK_021C59E8.unk8->unkDAD << 0x1d) >> 0x1f) != 0)
+ {
+ UNK_021C59E8.unk8->unkDAD = (UNK_021C59E8.unk8->unkDAD & ~1) | 1;
+ }
+
+ if (UNK_021C59E8.unk8->unkDA6 == 0xFFFF)
+ {
+ UNK_021C59E8.unk8->unkDA6 = param0;
+ }
+
+ if (((u32)(UNK_021C59E8.unk8->unkDAD << 0x1e) >> 0x1f) != 0 &&
+ UNK_021C59E8.unk8->unkDA6 > param0)
+ {
+ UNK_021C59E8.unk8->unkDAD = (UNK_021C59E8.unk8->unkDAD & ~1) | 1;
+ }
+
+ if (FUN_0202CBE8() == 25)
+ {
+ FUN_020335D0(0);
+ }
+
+ switch (r5)
+ {
+ case 0:
+ if (UNK_021C59E8.unk8->unkDAA == 1)
+ {
+ FUN_0202E7D8();
+ return;
+ }
+ else if (UNK_021C59E8.unk8->unkDAA == 2)
+ {
+ UNK_021C59E8.unk8->unkDAA = 3;
+ }
+ break;
+
+ case 1:
+ if (UNK_021C59E8.unk8->unkDAA == 1 && FUN_0202D178() != 0)
+ {
+ return;
+ }
+
+ if (UNK_021C59E8.unk8->unkDAA == 2 && FUN_0202D178() != 0)
+ {
+ return;
+ }
+
+ break;
+
+ case 8:
+ case 9:
+
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ UNK_021C59E8.unk8->unkDAD = (UNK_021C59E8.unk8->unkDAD & ~1) | 1;
+ return;
+ }
+ break;
+
+ case 7:
+ u16 r0 = FUN_0202CDA4();
+ if (UNK_021C59E8.unk8->unkDA9 == 0)
+ {
+ UNK_021C59E8.unk8->unkDA4 = r0;
+ UNK_021C59E8.unk8->unkDA9 = 5;
+ }
+ else
+ {
+ UNK_021C59E8.unk8->unkDA9--;
+ }
+
+ u16 r5 = UNK_021C59E8.unk8->unkDA4;
+ if ((u32)(UNK_021C59E8.unk8->unkDAD << 0x1c) >> 0x1f != 0)
+ {
+ UNK_021C59E8.unk0++;
+ }
+
+ FUN_0202EA9C();
+
+ FUN_0202CF84(0,
+ UNK_021C59E8.unk0,
+ r5,
+ FUN_0202D858((u16)FUN_02033534()),
+ FUN_0202EEE8((u16)FUN_02033534()),
+ (u32)(UNK_021C59E8.unk8->unkDAD << 0x1a) >> 0x1f);
+
+ UNK_021C59E8.unk8->unkDA8 = (u8)r5;
+
+ break;
+ }
+}
+
+THUMB_FUNC void FUN_0202ED70(u16 param0)
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ FUN_0202EBD0(param0);
+ }
+}
+
+THUMB_FUNC u32 FUN_0202ED84(u16 param0)
+{
+ if (UNK_021C59E8.unk8 == NULL)
+ {
+ return 0;
+ }
+
+ if (FUN_0202CBD4() != 4)
+ {
+ return 0;
+ }
+
+ if ((FUN_0202CB8C() & (1 << param0)) == 0)
+ {
+ return 0;
+ }
+
+ return 1;
+}
+
+THUMB_FUNC u32 FUN_0202EDB8()
+{
+ u32 count = 0;
+ for (int i = 0; i < 8; i++)
+ {
+ if (FUN_0202ED84((u16)i) != 0)
+ {
+ count++;
+ }
+ }
+
+ return count;
+}
+
+THUMB_FUNC BOOL FUN_0202EDD8()
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ if (UNK_021C59E8.unk8->unkDAA == 3)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL FUN_0202EDF8()
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC u32 FUN_0202EE0C()
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ return FUN_0202D1C8();
+ }
+
+ return 1;
+}
+
+THUMB_FUNC u32 FUN_0202EE24()
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ return FUN_0202CB8C() & 0xFFFE;
+ }
+
+ return 0;
+}
+
+THUMB_FUNC BOOL FUN_0202EE44()
+{
+ if (FUN_0202EE60() && FUN_0202CBE8() == 0x14)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL FUN_0202EE60()
+{
+ if (UNK_021C59E8.unk8 != NULL && (u32)(UNK_021C59E8.unk8->unkDAD << 0x1f) >> 0x1f != 0)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC void FUN_0202EE84(u32 param0)
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ UNK_021C59E8.unk8->unkDAD =
+ (UNK_021C59E8.unk8->unkDAD & ~4) | (u32)((u8)param0 << 0x1f) >> 0x1d;
+ }
+}
+
+THUMB_FUNC void FUN_0202EEB0(u32 param0)
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ UNK_021C59E8.unk8->unkDAD =
+ (UNK_021C59E8.unk8->unkDAD & ~2) | (u32)((u8)param0 << 0x1f) >> 0x1e;
+
+ UNK_021C59E8.unk8->unkDA6 = 0xFFFF;
+ }
+}
+
+THUMB_FUNC u32 FUN_0202EEE8(u16 param0)
+{
+ u16 r4 = WM_GetDispersionBeaconPeriod();
+ GF_ASSERT(param0 < 0x1a);
+
+ if (param0 == 0xa)
+ {
+ return (u32)(r4 << 0xe) >> 0x10;
+ }
+
+ if (param0 == 9 || param0 == 0xd)
+ {
+ return (u32)(r4 << 0xe) >> 0x10;
+ }
+
+ return r4;
+}
+
+THUMB_FUNC struct UnkStruct_0202E29C_sub *FUN_0202EF18(u32 param0)
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ if (UNK_021C59E8.unk8->unkC84[param0] != 0)
+ {
+ return &UNK_021C59E8.unk8->unk054[param0];
+ }
+ }
+
+ return NULL;
+}
+
+THUMB_FUNC struct UnkStruct_0202E29C_sub4 *FUN_0202EF44(s32 param0)
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ if (UNK_021C59E8.unk8->unkC84[param0] != 0)
+ {
+ return &UNK_021C59E8.unk8->unk054[param0].unk50;
+ }
+ }
+
+ return NULL;
+}
+
+THUMB_FUNC struct PlayerData *FUN_0202EF70()
+{
+ return UNK_021C59E8.unk8->unkCB8;
+}
+
+THUMB_FUNC struct PlayerData *FUN_0202EF84(int param0)
+{
+ if (UNK_021C59E8.unk8->unkC84[param0] == 0)
+ {
+ return NULL;
+ }
+
+ struct UnkStruct_0202E29C_sub4 *r0 = &UNK_021C59E8.unk8->unk054[param0].unk50;
+
+ return &r0->unk10;
+}
+
+THUMB_FUNC void FUN_0202EFAC(u8 *param0, s32 param1)
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ GF_ASSERT(param1 < 8);
+
+ MI_CpuCopy8(param0, UNK_021C59E8.unk8->unkC54[param1], 6);
+ }
+}
+
+#ifdef NONMATCHING
+THUMB_FUNC BOOL FUN_0202EFE4(u8 *param0)
+{
+
+ for (int i = 0; i < 8; i++)
+ {
+ if (UNK_021C59E8.unk8->unkC54[i][0] != param0[0])
+ {
+ continue;
+ }
+
+ if (UNK_021C59E8.unk8->unkC54[i][1] != param0[1])
+ {
+ continue;
+ }
+ if (UNK_021C59E8.unk8->unkC54[i][2] != param0[2])
+ {
+ continue;
+ }
+ if (UNK_021C59E8.unk8->unkC54[i][3] != param0[3])
+ {
+ continue;
+ }
+ if (UNK_021C59E8.unk8->unkC54[i][4] != param0[4])
+ {
+ continue;
+ }
+ if (UNK_021C59E8.unk8->unkC54[i][5] != param0[5])
+ {
+ continue;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+#else
+THUMB_FUNC asm BOOL FUN_0202EFE4(u8 *param0)
+{
+ // clang-format off
+ push {r4-r5}
+ ldr r2, =UNK_021C59E8
+ mov r1, #0x0
+ ldr r3, [r2, #0x8]
+ ldr r2, =0x00000C54
+ add r2, r3, r2
+ ldrb r3, [r0, #0x0]
+_0202EFF2:
+ ldrb r4, [r2, #0x0]
+ cmp r4, r3
+ bne _0202F026
+ ldrb r5, [r2, #0x1]
+ ldrb r4, [r0, #0x1]
+ cmp r5, r4
+ bne _0202F026
+ ldrb r5, [r2, #0x2]
+ ldrb r4, [r0, #0x2]
+ cmp r5, r4
+ bne _0202F026
+ ldrb r5, [r2, #0x3]
+ ldrb r4, [r0, #0x3]
+ cmp r5, r4
+ bne _0202F026
+ ldrb r5, [r2, #0x4]
+ ldrb r4, [r0, #0x4]
+ cmp r5, r4
+ bne _0202F026
+ ldrb r5, [r2, #0x5]
+ ldrb r4, [r0, #0x5]
+ cmp r5, r4
+ bne _0202F026
+ mov r0, #0x1
+ pop {r4-r5}
+ bx lr
+_0202F026:
+ add r1, r1, #0x1
+ add r2, r2, #0x6
+ cmp r1, #0x8
+ blt _0202EFF2
+ mov r0, #0x0
+ pop {r4-r5}
+ bx lr
+ // clang-format on
+}
+#endif
+
+THUMB_FUNC u32 FUN_0202F03C()
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ return (u32)(UNK_021C59E8.unk8->unkDAD << 0x1b) >> 0x1f;
+ }
+
+ return 0;
+}
+
+THUMB_FUNC void FUN_0202F05C()
+{
+ if (UNK_021C59E8.unk8 != NULL)
+ {
+ UNK_021C59E8.unk8->unkDAD |= 0x10;
+ }
+}
+
+THUMB_FUNC void FUN_0202F078(struct MailMessage *mail_message)
+{
+ MI_CpuCopy8(mail_message, &UNK_021C59E8.unk8->unkCA8, sizeof(struct MailMessage));
+}
+
+THUMB_FUNC void FUN_0202F094(void *param0)
+{
+ MI_CpuCopy8(param0, UNK_021C59E8.unk8->unkCBC, FUN_02023AC4());
+}
+
+THUMB_FUNC void FUN_0202F0B8()
+{
+ FUN_0202EA9C();
+ FUN_0202D240(&UNK_021C59E8.unk8->unkCC4,
+ sizeof(struct UnkStruct_0202E29C_sub2),
+ UNK_021C59E8.unk8->unkCC0,
+ UNK_021C59E8.unk0);
+}
+
+THUMB_FUNC u32 FUN_0202F0DC(u8 param0)
+{
+ int i;
+ u32 r5 = 0;
+ for (i = 0; i < 0x10; i++)
+ {
+ struct UnkStruct_0202E29C_sub4 *res = FUN_0202EF44(i);
+ if (res != 0 && res->unk04 == param0)
+ {
+ r5 += res->unk06;
+ }
+ }
+
+ return r5;
+}
+
+THUMB_FUNC BOOL FUN_0202F104()
+{
+ return FUN_0202D2D0();
+}
+
+THUMB_FUNC void FUN_0202F10C(struct UnkStruct_0202E29C_sub3 *param0)
+{
+ MI_CpuCopy8(param0, &UNK_021C59E8.unk8->unk000, sizeof(struct UnkStruct_0202E29C_sub3));
+ FUN_0202F0B8();
+}
+
+THUMB_FUNC u8 *FUN_0202F124(u32 param0)
+{
+ if (UNK_021C59E8.unk8 != NULL && UNK_021C59E8.unk8->unkC84[param0] != 0)
+ {
+ struct UnkStruct_0202E29C_sub4 *r0 = &UNK_021C59E8.unk8->unk054[param0].unk50;
+ return r0->unk08;
+ }
+
+ return NULL;
+}
diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c
index b8a42687..d52857c1 100644
--- a/arm9/src/unk_0202F150.c
+++ b/arm9/src/unk_0202F150.c
@@ -1,6 +1,8 @@
#include "unk_0202F150.h"
#include "unk_02031480.h"
#include "unk_02031734.h"
+#include "unk_0202E29C.h"
+
struct
{
@@ -15,20 +17,11 @@ extern void FUN_0202D7D8(u8 *param0, u32 param1, struct UnkStruct0202F150_sub1 *
extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2);
extern void FUN_0202D394(struct UnkStruct0202F150_sub1 *param0, u8 *param1, u32 param2);
extern void FUN_0202D804(u8 *param0);
-extern u32 FUN_0202E5F8(u32 param0, u32 param1, u32 param2);
extern void FUN_0202D330(void (*param0)(int));
-extern u32 FUN_0202E66C(u32 param0, u32 param1);
extern void MOD04_021D83C0();
-extern u32 FUN_0202E784();
extern void FUN_0202DBA4();
extern void FUN_0200CAB4(u32 param0);
extern void FUN_0202D824(u8 *param0);
-extern u32 FUN_0202E9E8(u32 param0);
-extern u32 FUN_0202F03C();
-extern u32 FUN_0202EE24();
-extern void FUN_0202EBD0(u16 param0);
-extern void FUN_0202ED70(u32 param0);
-extern void FUN_0202E538();
extern u32 MOD04_021D78FC(void *param0, u32 param1);
extern u32 FUN_0202CBD4();
extern void FUN_0202D4BC(void *param0);
@@ -49,10 +42,7 @@ extern s16 FUN_0202D9A0(u32 param0);
extern u32 FUN_0202DA04(u32 param0);
extern void *FUN_0202DA40(u32 param0, u32 param1, u16 param2);
extern u32 MOD04_021D8018();
-extern u32 FUN_0202EDF8();
extern u16 FUN_0202D19C();
-extern u32 FUN_0202EE60();
-extern void FUN_0202F05C();
extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *);
extern void FUN_0202D830(u8 *param0, u32 param1);
extern u32 MOD04_021D8624();
@@ -472,7 +462,7 @@ THUMB_FUNC void FUN_0202FA5C()
}
else
{
- if (FUN_0202E784() != 0)
+ if (FUN_0202E784())
{
r4 = 1;
}
@@ -1044,7 +1034,7 @@ THUMB_FUNC void FUN_02030074()
}
}
-THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2)
+THUMB_FUNC void FUN_02030238(u32 param0, u8 *param1, u32 param2)
{
if (UNK_021C59F4.unk04->unk66F[0] != 0)
{
@@ -1143,7 +1133,7 @@ THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2)
FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1 + 4, param1[3], 0x5FF);
}
-THUMB_FUNC void FUN_020303BC(u32 param0, u8 *param1, u16 param2)
+THUMB_FUNC void FUN_020303BC(u32 param0, u8 *param1, u32 param2)
{
if (UNK_021C59F4.unk04->unk66F[param0] != 0)
{
@@ -1156,7 +1146,7 @@ THUMB_FUNC void FUN_020303BC(u32 param0, u8 *param1, u16 param2)
FUN_020303F4(param0, param1, param2);
}
-THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2)
+THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u32 param2)
{
#pragma unused(param2)
UNK_021C59F4.unk04->unk638[param0]--;
@@ -2033,11 +2023,11 @@ THUMB_FUNC s32 FUN_02030F20()
return r4;
}
-THUMB_FUNC u32 FUN_02030F40()
+THUMB_FUNC BOOL FUN_02030F40()
{
if (UNK_021C59F4.unk04 != NULL && FUN_02033534() >= 0x13)
{
- return 1;
+ return TRUE;
}
return FUN_0202EDF8();
@@ -2221,17 +2211,17 @@ THUMB_FUNC u32 FUN_020311E8()
return FUN_0202EE24();
}
-THUMB_FUNC u32 FUN_020311F0()
+THUMB_FUNC BOOL FUN_020311F0()
{
if (FUN_02031280() != 0)
{
- return 0;
+ return FALSE;
}
if (UNK_021C59F4.unk04 != NULL && UNK_021C59F4.unk04->unk689 != 0)
{
FUN_020334E8(1, 1);
- return 1;
+ return TRUE;
}
return FUN_0202EE60();
@@ -2469,4 +2459,4 @@ THUMB_FUNC void FUN_02031468()
{
UNK_021C59F4.unk04->unk68A = 1;
}
-} \ No newline at end of file
+}
diff --git a/arm9/src/unk_02031734.c b/arm9/src/unk_02031734.c
index 3222232c..65ed3bc4 100644
--- a/arm9/src/unk_02031734.c
+++ b/arm9/src/unk_02031734.c
@@ -5,6 +5,8 @@
#include "heap.h"
#include "player_data.h"
#include "unk_0202F150.h"
+#include "unk_0202E29C.h"
+
const struct UnkStruct_02031734_const2 UNK_020EEC48 = { { (u32)FUN_02032B84, 0 } };
@@ -24,33 +26,19 @@ char UNK_02105D64[] = " FULL";
struct UnkStruct_02031734 *UNK_021C5A00;
-extern void FUN_0202E49C();
extern void FUN_0202D8D0(u32 param0, u32 param1, u32 param2);
extern void FUN_02033E74();
extern void FUN_0202D918();
extern void FUN_02033ED0();
-extern void FUN_0202E4F0();
extern void FUN_0202D298();
extern void FUN_0202D344(u32 param0);
extern void FUN_0202D1B0(u8 param0);
extern void FUN_0202D36C(u32 param0);
extern u32 MOD04_021DDB08();
extern void FUN_02033EEC(u32 param0);
-extern u32 FUN_0202EDF8();
extern u32 WM_GetLinkLevel();
-extern u32 FUN_0202E4C8();
-extern void FUN_0202E29C(struct PlayerData *player_data);
extern void FUN_0202DB14(struct SaveBlock2 *sav2, u32 param1);
extern s64 _ll_mul(s64, s64);
-extern u32 FUN_0202EE0C();
-extern void FUN_0202EA54();
-extern s32 FUN_0202E8F4();
-extern s32 FUN_0202E950();
-extern u32 FUN_0202E8A0(u8 param0);
-extern u32 FUN_0202E6F0();
-extern void FUN_0202EE84(u8 param0);
-extern void FUN_0202E7B0(u32 param0);
-extern u32 FUN_0202F104();
extern void FUN_0202DBE0();
extern void FUN_0202DDE8();
extern void FUN_0202D308(void (*param0)(u32, u32));
@@ -58,7 +46,7 @@ extern void MOD04_021D83C0();
extern s32 MOD04_021D7F8C();
extern s32 MOD04_021D7800(u32 param0);
extern u32 MOD04_021D8494(s32 param0);
-extern void MOD04_021D77C4(void (*param0)(u32, u8 *, u16), void (*param1)(u32, void *, u32));
+extern void MOD04_021D77C4(void (*param0)(u32, u8 *, u32), void (*param1)(u32, u8 *, u32));
extern u32 MOD04_021D82BC(u8 param0);
extern void MOD04_021D836C();
extern u32 MOD04_021DD718(u32 *param0, u32 *param1);
@@ -66,11 +54,8 @@ extern void MOD04_021DD6F0();
extern s32 MOD04_021D76AC();
extern MOD05_021D74E0(struct SaveBlock2 *sav2, u32 param1);
extern void MOD04_021D83A8(void (*param0)(s32));
-extern void FUN_0202EEB0(u8 param0);
extern void FUN_02033F70(int, int, int);
extern void FUN_0200541C();
-extern u32 FUN_0202EDD8();
-extern u32 FUN_0202E344();
THUMB_FUNC void FUN_02031734(struct SaveBlock2 *sav2, u8 param1)
{
@@ -451,7 +436,7 @@ THUMB_FUNC void FUN_02031CDC()
return;
}
- if (FUN_0202EDF8() != 0)
+ if (FUN_0202EDF8())
{
FUN_02033EEC(3 - WM_GetLinkLevel());
}
@@ -471,7 +456,7 @@ THUMB_FUNC void FUN_02031D30()
return;
}
- if (FUN_0202E4C8() == 0)
+ if (!FUN_0202E4C8())
{
return;
}
@@ -726,7 +711,7 @@ THUMB_FUNC void FUN_02032178()
THUMB_FUNC void FUN_02032194()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E7B0(0);
FUN_0202FC60();
@@ -744,7 +729,7 @@ THUMB_FUNC void FUN_020321B8()
THUMB_FUNC void FUN_020321D0()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E29C(UNK_021C5A00->unk2C);
FUN_0202DB14(UNK_021C5A00->unk28, UNK_021C5A00->unk30);
@@ -774,7 +759,7 @@ THUMB_FUNC void FUN_02032234()
THUMB_FUNC void FUN_0203224C()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E29C(UNK_021C5A00->unk2C);
FUN_0202DB14(UNK_021C5A00->unk28, UNK_021C5A00->unk30);
@@ -925,7 +910,7 @@ THUMB_FUNC void FUN_02032440()
THUMB_FUNC void FUN_02032478()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E29C(UNK_021C5A00->unk2C);
FUN_0202D1B0(UNK_021C5A00->unk3C);
@@ -978,7 +963,7 @@ THUMB_FUNC void FUN_02032510()
THUMB_FUNC void FUN_02032578()
{
- if (FUN_0202F104() == 0)
+ if (!FUN_0202F104())
{
if (FUN_020311E8() != 0)
{
@@ -1394,7 +1379,7 @@ THUMB_FUNC void FUN_02032B84()
THUMB_FUNC void FUN_02032B8C()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E29C(UNK_021C5A00->unk2C);
FUN_0202DB14(UNK_021C5A00->unk28, 0);
@@ -1479,7 +1464,7 @@ THUMB_FUNC void FUN_02032C6C(u32 param0, u32 param1)
THUMB_FUNC void FUN_02032CF4()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E29C(UNK_021C5A00->unk2C);
FUN_0202DB14(UNK_021C5A00->unk28, 0);
@@ -1545,7 +1530,7 @@ THUMB_FUNC BOOL FUN_02032DAC()
THUMB_FUNC void FUN_02032E00()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E29C(UNK_021C5A00->unk2C);
FUN_0202DB14(UNK_021C5A00->unk28, 0);
@@ -1559,7 +1544,7 @@ THUMB_FUNC void FUN_02032E00()
THUMB_FUNC void FUN_02032E48()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_0202E29C(UNK_021C5A00->unk2C);
FUN_0202DB14(UNK_021C5A00->unk28, 0);
@@ -1981,7 +1966,7 @@ THUMB_FUNC void FUN_020333F0()
THUMB_FUNC void FUN_0203341C()
{
- if (FUN_0202E4C8() != 0)
+ if (FUN_0202E4C8())
{
FUN_02016828(3, 0x31, 0x31000);
if (FUN_0202F918(1, 1, 0x200, 1) != 0)
@@ -2164,12 +2149,12 @@ THUMB_FUNC void FUN_020335F4()
THUMB_FUNC BOOL FUN_02033678()
{
- if (FUN_0202EDD8() != 0 || !FUN_02031810())
+ if (FUN_0202EDD8() || !FUN_02031810())
{
return TRUE;
}
- if (FUN_0202E344() == 0)
+ if (!FUN_0202E344())
{
return TRUE;
}