summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_0205FA2C.c543
-rw-r--r--arm9/src/unk_0206BB28.c6
2 files changed, 546 insertions, 3 deletions
diff --git a/arm9/src/unk_0205FA2C.c b/arm9/src/unk_0205FA2C.c
new file mode 100644
index 00000000..7bcdf950
--- /dev/null
+++ b/arm9/src/unk_0205FA2C.c
@@ -0,0 +1,543 @@
+#include "unk_0205FA2C.h"
+
+extern void *UNK_020F96DC;
+extern void *UNK_020FA6E8;
+extern u32 FUN_02079C70(struct SaveBlock2 *sav2);
+extern void FUN_0207B000(struct UnkPlayerStruct2_0205FA2C *ptr, const u8 param1[12]);
+extern void FUN_0207C2A4(struct UnkPlayerStruct2_0205FA2C *ptr, struct PlayerData *player_data);
+extern u32 FUN_0203384C(u32 *param0);
+extern u32 *FUN_02038790(struct UnkStruct_0204639C *param0, u16 param1, u16 param2);
+extern u16 *GetVarPointer(struct UnkSavStruct80 *arg, u16);
+extern u32 FUN_02031190();
+extern u32 FUN_020316E0(u32 param0);
+extern u16 MOD06_02244660(struct UnkStruct_0204639C *param0, u32 param1);
+extern u16 MOD06_022446BC(struct UnkStruct_0204639C *param0, u32 param1);
+extern u16 MOD06_022446E0(struct UnkStruct_0204639C *param0, u32 param1);
+extern void FUN_0202A5CC(u32 param0, u32 param1);
+extern u32 FUN_0202A5D0(u32 param0);
+extern u32 FUN_0202A150(struct UnkStruct_02029FB0 *param0, u32 param1);
+extern u32 FUN_0202A8D8(struct SaveBlock2 *sav2);
+extern u32 FUN_0202A578(u32 param0, u32 param1, u32 param2);
+extern u32 FUN_02026CC4(struct SaveBlock2 *sav2);
+extern u32 FUN_02025D94(u32 param0, u32 param1);
+extern u32 FUN_0202A8CC(struct SaveBlock2 *sav2);
+extern void FUN_0202A2C4(u32 param0, u32 param1, u32 *param2);
+extern u32 FUN_0202A240(u32 param0, u32 param1, u32 param2);
+extern int FUN_0202A538(u32 param0, u16 param1, u32 param2);
+
+const u8 UNK_020F7454[] = {
+ 0x00,
+ 0x01,
+ 0x02,
+ 0x04,
+ 0x03,
+ 0x05,
+ 0x06,
+ 0x07,
+ 0x08,
+};
+
+THUMB_FUNC u32 FUN_0205FA2C(
+ struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1, u32 heap_id)
+{
+ struct UnkPlayerStruct1_0205FA2C *ptr = (struct UnkPlayerStruct1_0205FA2C *)AllocFromHeapAtEnd(
+ heap_id, sizeof(struct UnkPlayerStruct1_0205FA2C));
+
+ struct SaveBlock2 *sav2 = (struct SaveBlock2 *)(param1->unkC);
+ MI_CpuFill8(ptr, 0, sizeof(struct UnkPlayerStruct1_0205FA2C));
+
+ ptr->options = Sav2_PlayerData_GetOptionsAddr(sav2);
+
+ ptr->player_party = SavArray_PlayerParty_get(sav2);
+
+ ptr->bag = Sav2_Bag_get(sav2);
+
+ ptr->unk21 = 0;
+ ptr->unk20 = param0->unk08;
+ ptr->unk32 = param0->unk0a;
+ ptr->unk322 = param0->unk0b;
+ ptr->unk33 = param0->unk0c;
+ ptr->unk22 = param0->unk0d;
+
+ for (u8 i = 0; i < 6; i++)
+ {
+ ptr->unk2c[i] = param0->unk0e[i];
+ }
+
+ FUN_020373D4(param1, (u32)&UNK_020F96DC, (u32)ptr);
+
+ *param0->unk14 = ptr;
+
+ return 1;
+}
+
+THUMB_FUNC u32 FUN_0205FAD8(
+ struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1)
+{
+ if (FUN_0204647C(param1))
+ {
+ return 1;
+ }
+
+ struct UnkPlayerStruct1_0205FA2C *ptr = (struct UnkPlayerStruct1_0205FA2C *)*param0->unk14;
+
+ u8 r1 = ptr->unk22;
+ if (r1 != 6)
+ {
+ if (r1 == 7)
+ {
+ param0->unk00 = 0;
+ return 4;
+ }
+ }
+ else
+ {
+ param0->unk00 = 1;
+ return 4;
+ }
+
+ MI_CpuCopy8(ptr->unk2c, param0->unk0e, 6);
+
+ param0->unk0d = ptr->unk22;
+ FreeToHeap(ptr);
+
+ *param0->unk14 = NULL;
+
+ return 2;
+}
+
+THUMB_FUNC u32 FUN_0205FB34(
+ struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1, u32 heap_id)
+{
+ struct SaveBlock2 *sav2 = (struct SaveBlock2 *)(param1->unkC);
+
+ struct UnkPlayerStruct2_0205FA2C *ptr = (struct UnkPlayerStruct2_0205FA2C *)AllocFromHeapAtEnd(
+ heap_id, sizeof(struct UnkPlayerStruct2_0205FA2C));
+ MI_CpuFill8(ptr, 0, sizeof(struct UnkPlayerStruct2_0205FA2C));
+
+ ptr->options = Sav2_PlayerData_GetOptionsAddr(sav2);
+ ptr->player_party = SavArray_PlayerParty_get(sav2);
+ ptr->IsNatDex = SavArray_IsNatDexEnabled(sav2);
+ ptr->unk2c = FUN_02079C70(sav2);
+
+ ptr->unk11 = 1;
+ ptr->unk14 = param0->unk0d;
+
+ ptr->party_count = (u8)GetPartyCount(ptr->player_party);
+
+ ptr->unk18 = 0;
+ ptr->unk12 = param0->unk09;
+
+ ptr->unk20 = FUN_0202A918(sav2);
+
+ FUN_0207B000(ptr, UNK_020F7454);
+
+ FUN_0207C2A4(ptr, Sav2_PlayerData_GetProfileAddr(sav2));
+
+ FUN_020373D4(param1, (u32)&UNK_020FA6E8, (u32)ptr);
+
+ *param0->unk14 = ptr;
+
+ return 3;
+}
+
+THUMB_FUNC u32 FUN_0205FBC0(
+ struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1)
+{
+ if (FUN_0204647C(param1))
+ {
+ return 3;
+ }
+
+ struct UnkPlayerStruct2_0205FA2C *ptr = (struct UnkPlayerStruct2_0205FA2C *)*param0->unk14;
+ param0->unk0d = ptr->unk14;
+ FreeToHeap(ptr);
+
+ *param0->unk14 = NULL;
+
+ return 0;
+}
+
+THUMB_FUNC int FUN_0205FBE8(struct UnkStruct_0204639C *param0)
+{
+ struct UnkStruct_0204639C *res = FUN_02046528(param0);
+ struct UnkCallbackStruct1_0205FA2C *res2 =
+ (struct UnkCallbackStruct1_0205FA2C *)FUN_0204652C(param0);
+ switch (res2->unk04)
+ {
+ case 0:
+ res2->unk04 = FUN_0205FA2C(res2, res, 0xb);
+ break;
+ case 1:
+ res2->unk04 = FUN_0205FAD8(res2, res);
+ break;
+ case 2:
+ res2->unk04 = FUN_0205FB34(res2, res, 0xb);
+ break;
+ case 3:
+ res2->unk04 = FUN_0205FBC0(res2, res);
+ break;
+ case 4:
+ FreeToHeap(res2);
+ return 1;
+ }
+
+ return 0;
+}
+
+THUMB_FUNC void FUN_0205FC50(struct UnkStruct_0204639C *param0,
+ void **param1,
+ u8 param2,
+ u8 param3,
+ u8 param4,
+ u8 param5,
+ u8 param6,
+ u8 param7)
+{
+ struct UnkStruct_0204639C *res = FUN_02046528(param0);
+
+ struct UnkCallbackStruct1_0205FA2C *ptr = (struct UnkCallbackStruct1_0205FA2C *)AllocFromHeap(
+ 0xb, sizeof(struct UnkCallbackStruct1_0205FA2C));
+ MI_CpuFill8(ptr, 0, sizeof(struct UnkCallbackStruct1_0205FA2C));
+
+ ptr->unk08 = param2;
+ ptr->unk09 = param3;
+ ptr->unk0a = param4;
+ ptr->unk0b = param5;
+ ptr->unk0c = param6;
+ ptr->unk0d = param7;
+ ptr->unk14 = param1;
+
+ FUN_0204640C(res->unk10, &FUN_0205FBE8, (u32 *)ptr);
+}
+
+THUMB_FUNC u32 FUN_0205FC9C(
+ struct UnkCallbackStruct2_0205FA2C *param0, struct UnkStruct_0204639C *param1)
+{
+ if (FUN_0203384C(param1->unkC))
+ {
+
+ param0->unk08 = FUN_02038790(param1, param0->unk12, param0->unk14);
+ return 1;
+ }
+
+ param0->unk00 = 1;
+ return 2;
+}
+
+THUMB_FUNC u32 FUN_0205FCC4(
+ struct UnkCallbackStruct2_0205FA2C *param0, struct UnkStruct_0204639C *param1)
+{
+ if (FUN_0204647C(param1))
+ {
+ return 1;
+ }
+
+ param0->unk00 = param0->unk08[8];
+ FreeToHeap(param0->unk08);
+
+ return 2;
+}
+
+THUMB_FUNC int FUN_0205FCE8(struct UnkStruct_0204639C *param0)
+{
+ struct UnkStruct_0204639C *res = FUN_02046528(param0);
+ struct UnkCallbackStruct2_0205FA2C *res2 =
+ (struct UnkCallbackStruct2_0205FA2C *)FUN_0204652C(param0);
+
+ switch (res2->unk04)
+ {
+ case 0:
+ res2->unk04 = FUN_0205FC9C(res2, res);
+ break;
+ case 1:
+ res2->unk04 = FUN_0205FCC4(res2, res);
+ break;
+ case 2:
+ u16 *var = GetVarPointer((struct UnkSavStruct80 *)res, res2->unk10);
+ *var = (u16)res2->unk00;
+ FreeToHeap(res2);
+
+ return 1;
+ }
+
+ return 0;
+}
+
+THUMB_FUNC void FUN_0205FD38(struct UnkStruct_0204639C *param0, u16 param1, u16 param2, u16 param3)
+{
+ struct UnkStruct_0204639C *res = FUN_02046528(param0);
+ struct UnkCallbackStruct2_0205FA2C *ptr = (struct UnkCallbackStruct2_0205FA2C *)AllocFromHeap(
+ 0xb, sizeof(struct UnkCallbackStruct2_0205FA2C));
+ MI_CpuFill8(ptr, 0, sizeof(struct UnkCallbackStruct2_0205FA2C));
+
+ ptr->unk12 = param1;
+ ptr->unk14 = param3;
+ ptr->unk10 = param2;
+
+ FUN_0204640C(res->unk10, &FUN_0205FCE8, (u32 *)ptr);
+}
+
+THUMB_FUNC int FUN_0205FD70(struct UnkStruct_0204639C *param0)
+{
+ struct UnkStruct_0204639C *res = FUN_02046528(param0);
+ u16 *res2 = (u16 *)FUN_0204652C(param0);
+ u32 res3 = FUN_020316E0(1 - FUN_02031190());
+ if (res3 == 0)
+ {
+ return 0;
+ }
+
+ u16 *var = GetVarPointer((struct UnkSavStruct80 *)res, res2[1]);
+ switch (res2[0])
+ {
+ case 0:
+ *var = MOD06_02244660(res, res3);
+ break;
+ case 1:
+ *var = MOD06_022446BC(res, res3);
+
+ break;
+ case 2:
+ *var = MOD06_022446E0(res, res3);
+
+ break;
+ }
+
+ FreeToHeap(res2);
+
+ return 1;
+}
+
+THUMB_FUNC void FUN_0205FDDC(struct UnkStruct_0204639C *param0, u16 param1, u16 param2)
+{
+ struct UnkStruct_0204639C *res = FUN_02046528(param0);
+
+ u16 *ptr = AllocFromHeap(0xb, 2 * sizeof(u16));
+ MI_CpuFill8(ptr, 0, 2 * sizeof(u16));
+
+ ptr[0] = param1;
+ ptr[1] = param2;
+
+ FUN_0204640C(res->unk10, &FUN_0205FD70, (u32 *)ptr);
+}
+
+THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2)
+{
+
+ u16 res = (u16)FUN_0202A150(FUN_02029FC8(sav2), 0x35);
+ if (res < 20)
+ {
+ return 0;
+ }
+
+ u32 res2 = FUN_0202A8D8(sav2);
+
+ u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0);
+ u8 res4 = (u8)FUN_0202A578(res2, 0, 0);
+ u8 res5 = (u8)FUN_0202A578(res2, 1, 0);
+
+ u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0);
+ u8 res7 = (u8)FUN_0202A578(res2, 2, 0);
+ u8 res8 = (u8)FUN_0202A578(res2, 3, 0);
+
+ if (res3 != 0 && res4 != 0 && res5 != 0)
+ {
+ return 0;
+ }
+
+ u32 res9 = FUN_02026CC4(sav2);
+ if (res3 == 0)
+ {
+ if (FUN_02025D94(res9, 0x55) != 0)
+ {
+ FUN_0202A578(res2, 0xd, 1);
+ return 1;
+ }
+
+ if (res6 == 0)
+ {
+ FUN_0202A578(res2, 0xe, 1);
+ }
+
+ return 4;
+ }
+
+ if (res < 50)
+ {
+ return 0;
+ }
+
+ if (res4 == 0)
+ {
+ if (FUN_02025D94(res9, 0x56) != 0)
+ {
+ FUN_0202A578(res2, 0, 1);
+ return 2;
+ }
+
+ if (res7 == 0)
+ {
+ FUN_0202A578(res2, 2, 1);
+ }
+
+ return 4;
+ }
+
+ if (res < 100 || res5 != 0)
+ {
+ return 0;
+ }
+
+ if (FUN_02025D94(res9, 0x57) != 0)
+ {
+ FUN_0202A578(res2, 1, 1);
+ return 3;
+ }
+
+ if (res8 == 0)
+ {
+ FUN_0202A578(res2, 3, 1);
+ }
+
+ return 4;
+}
+
+THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2)
+{
+ u16 res = (u16)FUN_0202A150(FUN_02029FC8(sav2), 0x35);
+ if (res < 20)
+ {
+ return 0;
+ }
+
+ u32 res2 = FUN_0202A8D8(sav2);
+
+ u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0);
+ u8 res4 = (u8)FUN_0202A578(res2, 0, 0);
+ u8 res5 = (u8)FUN_0202A578(res2, 1, 0);
+
+ u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0);
+ u8 res7 = (u8)FUN_0202A578(res2, 2, 0);
+ u8 res8 = (u8)FUN_0202A578(res2, 3, 0);
+
+ if (res3 != 0 && res4 != 0 && res5 != 0)
+ {
+ return 0;
+ }
+
+ if (res3 == 0)
+ {
+ if (res6 != 0)
+ {
+ return 4;
+ }
+
+ return 1;
+ }
+
+ if (res < 50)
+ {
+ return 0;
+ }
+
+ if (res4 == 0)
+ {
+ if (res7 != 0)
+ {
+ return 5;
+ }
+
+ return 2;
+ }
+
+ if (res < 100)
+ {
+ return 0;
+ }
+
+ if (res5 != 0)
+ {
+ return 0;
+ }
+
+ if (res8 != 0)
+ {
+ return 6;
+ }
+
+ return 3;
+}
+
+THUMB_FUNC void FUN_02060044(u16 **param0, u32 *param1)
+{
+ u16 *ptr = param0[42];
+
+ ptr[18] += param1[0];
+ ptr[20] += param1[1];
+ ptr[19] += param1[2];
+}
+
+THUMB_FUNC u32 FUN_02060064(u32 param0)
+{
+ return param0 * 0x02E90EDD + 1;
+}
+
+THUMB_FUNC u32 FUN_02060070(u32 param0)
+{
+ return param0 * 0x5D588B65 + 1;
+}
+
+THUMB_FUNC u32 FUN_0206007C(struct SaveBlock2 *sav2)
+{
+ u32 res = FUN_02060070(FUN_020287A4(FUN_0202881C(sav2)));
+
+ FUN_0202A5CC(FUN_0202A8D8(sav2), res);
+
+ return res;
+}
+
+THUMB_FUNC u32 FUN_020600A0(struct SaveBlock2 *sav2)
+{
+ u32 res = FUN_0202A8D8(sav2);
+
+ u32 res2 = FUN_02060070(FUN_0202A5D0(res));
+
+ FUN_0202A5CC(res, res2);
+ u32 res3 = FUN_02060064(res2);
+
+ FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3);
+
+ return res3;
+}
+
+THUMB_FUNC u32 FUN_020600DC(struct SaveBlock2 *sav2)
+{
+ u32 res = FUN_0202A8D8(sav2);
+
+ u32 res2 = FUN_0202A8CC(sav2);
+
+ u32 res3 = FUN_02060064(FUN_0202A5D0(res));
+
+ int i = 0;
+ int res4 = FUN_0202A538(res, (u16)FUN_0202A240(res2, 0, 0), 0) * 0x18;
+
+ for (i = 0; i < res4; i++)
+ {
+ res3 = FUN_02060064(res3);
+ }
+
+ FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3);
+
+ return res3;
+}
+
+THUMB_FUNC BOOL FUN_02060144(u32 **param0)
+{
+ if (param0[7][0] == SPECIES_ARCEUS)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/arm9/src/unk_0206BB28.c b/arm9/src/unk_0206BB28.c
index baaecc6a..e7c12793 100644
--- a/arm9/src/unk_0206BB28.c
+++ b/arm9/src/unk_0206BB28.c
@@ -6,12 +6,12 @@
#pragma thumb on
-BOOL FUN_0206BB28(struct SaveBlock2 * sav2)
+BOOL SavArray_IsNatDexEnabled(struct SaveBlock2 * sav2)
{
- return FUN_0206BB34(Sav2_Pokedex_get(sav2));
+ return Pokedex_IsNatDexEnabled(Sav2_Pokedex_get(sav2));
}
-BOOL FUN_0206BB34(struct Pokedex * pokedex)
+BOOL Pokedex_IsNatDexEnabled(struct Pokedex * pokedex)
{
return Pokedex_GetNatDexFlag(pokedex) == TRUE;
}