From a4a5cc6169360abd5687cbf39b9fa6bd3fb7ca5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Wed, 7 Apr 2021 21:47:39 +0200 Subject: decomp start of unk_0202F150.s --- arm9/src/unk_0202F150_c.c | 417 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 417 insertions(+) create mode 100644 arm9/src/unk_0202F150_c.c (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150_c.c b/arm9/src/unk_0202F150_c.c new file mode 100644 index 00000000..e618469a --- /dev/null +++ b/arm9/src/unk_0202F150_c.c @@ -0,0 +1,417 @@ +#include "global.h" +#include "MI_memory.h" +#include "heap.h" + +struct +{ + u8 unk00; + struct UnkStruct1 *unk04; +} UNK_021C59F4; + +// struct UnkStruct2 { +// u8 unk00; +// u8 unk01; +// }; + +u8 UNK_02105D58 = 4; +u8 UNK_02105D59 = 4; + +extern int FUN_02033534(); +extern u32 FUN_0202D858(u16 param0); +extern void FUN_02031480(u32 param0); +extern void FUN_0202D7D8(u32 *param0, u32 param1, u32 param2); +extern void FUN_0202F2F0(); +extern void FUN_020312BC(u32 param0); +extern void FUN_0202FB20(); + +extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2); +extern void FUN_0202D394(u32 param0, u32 param1, u32 param2); + +extern void FUN_0202D804(u32 *param0); +extern u32 FUN_02030E7C(u16 param0); + +struct UnkStruct1 +{ + u8 unk000[38]; + u8 unk026[38]; + u8 unk04c[264]; + u8 unk154[192]; + u8 unk214[192]; + u8 unk2D4[384]; + u32 unk454; + u32 unk458; + u32 unk45C; + u32 unk460; + u32 unk464; + u8 unk468[0x8]; + u32 unk470; + u8 unk474[0x8]; + struct + { + u32 unk00; + u32 unk04; + u32 unk08; + } unk47C[8]; + u32 unk4DC; + u8 unk4E0[0x8]; + struct + { + u32 unk00; + u32 unk04; + u32 unk08; + } unk4E8[8]; + u32 unk548; + u8 unk54C[32]; + u8 unk56C[32]; + struct + { + u32 unk00; + u32 unk04; + u16 unk08; + u8 unk0a; + u8 unk0b; + } unk58C[8]; + u32 unk5EC; + u32 unk5F0; + u16 unk5F4; + u8 unk5F6; + u8 unk5F7; + u32 unk5F8; + u8 unk5FC[0x14]; + u16 unk610[8]; + u8 unk620[0xc]; + u8 unk62C; + u8 unk62D; + u8 unk62E[0x2]; + u32 unk630; + u32 unk634; + u32 unk638[8]; + u32 unk658; + u16 unk65C; + u8 unk65E; + u8 unk65F[8]; + u8 unk667[8]; + u8 unk66F[8]; + u8 unk677[4]; + u8 unk67B[0x2]; + u8 unk67D; + u8 unk67E; + u8 unk67F; + u8 unk680; + u8 unk681; + u8 unk682; + u8 unk683; + u8 unk684; + u8 unk685; + u8 unk686; + u8 unk687; + u8 unk688; + u8 unk689[0x3]; +}; + +THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) +{ + u32 r4 = 0; + UNK_021C59F4.unk00 = 0; + if (param0 != 0) + { + u32 res = FUN_0202D858(FUN_02033534()) + 1; + + if (UNK_021C59F4.unk04 != 0) + { + return 1; + } + + FUN_02031480(0xf); + struct UnkStruct1 *ptr = (struct UnkStruct1 *)AllocFromHeap(0xf, 0x68C); + UNK_021C59F4.unk04 = ptr; + MI_CpuFill8(ptr, 0, 0x68C); + + UNK_021C59F4.unk04->unk658 = param1 + 0x40; + UNK_021C59F4.unk04->unk67D = 0; + UNK_021C59F4.unk04->unk67E = 0x1b; + + UNK_021C59F4.unk04->unk45C = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658 << 1); + + UNK_021C59F4.unk04->unk460 = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk458 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk454 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); + + if (FUN_02033534() == 0xa) + { + FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x64, &UNK_021C59F4.unk04->unk464); + FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x32 << 4, &UNK_021C59F4.unk04->unk4DC); + } + else + { + FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x14, &UNK_021C59F4.unk04->unk464); + FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x1b + 0xfd, &UNK_021C59F4.unk04->unk4DC); + } + } + else + { + + r4 = 1; + if (UNK_021C59F4.unk04 == 0) + { + ErrorHandling(); + } + } + + UNK_021C59F4.unk04->unk65C = 0; + + for (int i = 0; i < 4; i++) + { + UNK_021C59F4.unk04->unk677[i] = 0xff; + } + + if (r4 == 0) + { + FUN_0202F2F0(); + } + + FUN_020312BC(&UNK_021C59F4.unk04->unk5F8); + + if (r4 == 0) + { + u32 res2 = FUN_0200CA60(FUN_0202FB20, 0, 0); + + UNK_021C59F4.unk04->unk548 = res2; + } + + UNK_021C59F4.unk04->unk687 = 0; + + return 1; +} + +THUMB_FUNC void FUN_0202F2F0() +{ + UNK_021C59F4.unk04->unk62C = 0; + UNK_021C59F4.unk04->unk62D = 0; + UNK_021C59F4.unk04->unk67F = 0; + UNK_021C59F4.unk04->unk680 = 0; + + s32 res = FUN_0202D858(FUN_02033534()) + 1; + + MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); + + int i; + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], + UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); + + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], + UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); + + for (i = 0; i < 0xc0; i++) + { + UNK_021C59F4.unk04->unk154[i] = 0xee; + UNK_021C59F4.unk04->unk214[i] = 0xee; + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); + + UNK_021C59F4.unk04->unk000[0] = 0xff; + UNK_021C59F4.unk04->unk026[0] = 0xff; + + for (i = 1; i < 0x26; i++) + { + UNK_021C59F4.unk04->unk000[i] = 0xee; + UNK_021C59F4.unk04->unk026[i] = 0xee; + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); + + FUN_0202D394( + &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); + + UNK_021C59F4.unk04->unk684 = 0; + UNK_021C59F4.unk04->unk685 = 0; + + for (i = 0; i < 8; i++) + { + UNK_021C59F4.unk04->unk65F[i] = 0; + UNK_021C59F4.unk04->unk667[i] = 1; + UNK_021C59F4.unk04->unk66F[i] = 1; + UNK_021C59F4.unk04->unk610[i] = 0; + + UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[i].unk04 = 0; + UNK_021C59F4.unk04->unk58C[i].unk00 = 0; + + UNK_021C59F4.unk04->unk638[i] = 0; + } + + UNK_021C59F4.unk04->unk634 = 0; + UNK_021C59F4.unk04->unk630 = 1; + UNK_021C59F4.unk04->unk5F6 = 0xee; + UNK_021C59F4.unk04->unk5F4 = 0xffff; + UNK_021C59F4.unk04->unk5F0 = 0; + UNK_021C59F4.unk04->unk5EC = 0; + UNK_021C59F4.unk04->unk682 = 1; + UNK_021C59F4.unk04->unk683 = 1; + + UNK_02105D59 = 4; + UNK_02105D58 = 4; + + FUN_0202D804(UNK_021C59F4.unk04->unk54C); + FUN_0202D804(UNK_021C59F4.unk04->unk56C); + + UNK_021C59F4.unk04->unk688 = 0; +} + +THUMB_FUNC void FUN_0202F5A4() +{ + UNK_021C59F4.unk04->unk62C = 0; + UNK_021C59F4.unk04->unk62D = 0; + + s32 res = FUN_0202D858(FUN_02033534()) + 1; + + MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); + + int i; + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], + UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); + + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], + UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); + + for (i = 0; i < 0xc0; i++) + { + UNK_021C59F4.unk04->unk154[i] = 0xee; + UNK_021C59F4.unk04->unk214[i] = 0xee; + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); + + UNK_021C59F4.unk04->unk000[0] = 0xff; + UNK_021C59F4.unk04->unk026[0] = 0xff; + + for (i = 1; i < 0x26; i++) + { + UNK_021C59F4.unk04->unk000[i] = 0xee; + UNK_021C59F4.unk04->unk026[i] = 0xee; + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); + FUN_0202D394( + &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); + + UNK_021C59F4.unk04->unk684 = 0; + UNK_021C59F4.unk04->unk685 = 0; + + for (i = 0; i < 8; i++) + { + UNK_021C59F4.unk04->unk65F[i] = 0; + UNK_021C59F4.unk04->unk667[i] = 1; + UNK_021C59F4.unk04->unk66F[i] = 1; + UNK_021C59F4.unk04->unk610[i] = 0; + + UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[i].unk04 = 0; + UNK_021C59F4.unk04->unk58C[i].unk00 = 0; + } + + UNK_021C59F4.unk04->unk630 = 1; + UNK_021C59F4.unk04->unk5F6 = 0xee; + UNK_021C59F4.unk04->unk5F4 = 0xffff; + UNK_021C59F4.unk04->unk5F0 = 0; + UNK_021C59F4.unk04->unk5EC = 0; + UNK_021C59F4.unk04->unk682 = 1; + UNK_021C59F4.unk04->unk683 = 1; + + FUN_0202D804(UNK_021C59F4.unk04->unk54C); + FUN_0202D804(UNK_021C59F4.unk04->unk56C); + + UNK_021C59F4.unk04->unk688 = 0; +} + +THUMB_FUNC void FUN_0202F820(u32 param0) +{ + UNK_021C59F4.unk04->unk65F[param0] = 0; + + UNK_021C59F4.unk04->unk667[param0] = 1; + + UNK_021C59F4.unk04->unk638[param0] = 0; + + UNK_021C59F4.unk04->unk66F[param0] = 1; + + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[param0], + UNK_021C59F4.unk04->unk454 + param0 * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[param0], + UNK_021C59F4.unk04->unk458 + param0 * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk58C[param0].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[param0].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[param0].unk04 = 0; + UNK_021C59F4.unk04->unk58C[param0].unk00 = 0; +} + +extern u32 FUN_02031280(); + +THUMB_FUNC void FUN_0202F8D4() +{ + for (int i = 1; i < 8; i++) + { + if (FUN_02030E7C(i) == 0 && UNK_021C59F4.unk04->unk667[i] == 0 && FUN_02031280() == 0) + { + FUN_0202F820(i); + } + } +} + +THUMB_FUNC void FUN_0202F910(u32 param0) +{ + FUN_0202F820(param0); +} + +extern u32 FUN_0202E5F8(u32 param0, u32 param1, u32 param2); +extern void FUN_0202D330(void (*param0)(u32)); + +THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) +{ + u32 ret = 1; + if (FUN_02033534() < 0x13) + { + ret = FUN_0202E5F8(param0, param1, param3); + FUN_0202D330(FUN_0202F910); + } + + FUN_0202F150(param0, param2); + + return ret; +} \ No newline at end of file -- cgit v1.2.3 From c0dc03771119177fed8cf15d12bebcc1b3aa9206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Thu, 8 Apr 2021 22:26:10 +0200 Subject: first nonmatching --- arm9/src/unk_0202F150_c.c | 549 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 529 insertions(+), 20 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150_c.c b/arm9/src/unk_0202F150_c.c index e618469a..b0a249cf 100644 --- a/arm9/src/unk_0202F150_c.c +++ b/arm9/src/unk_0202F150_c.c @@ -1,6 +1,7 @@ #include "global.h" #include "MI_memory.h" #include "heap.h" +#include "main.h" struct { @@ -17,7 +18,7 @@ u8 UNK_02105D58 = 4; u8 UNK_02105D59 = 4; extern int FUN_02033534(); -extern u32 FUN_0202D858(u16 param0); +extern int FUN_0202D858(u16 param0); extern void FUN_02031480(u32 param0); extern void FUN_0202D7D8(u32 *param0, u32 param1, u32 param2); extern void FUN_0202F2F0(); @@ -32,11 +33,11 @@ extern u32 FUN_02030E7C(u16 param0); struct UnkStruct1 { - u8 unk000[38]; - u8 unk026[38]; + u8 unk000[2][38]; + // u8 unk026[38]; u8 unk04c[264]; - u8 unk154[192]; - u8 unk214[192]; + u8 unk154[2][192]; + // u8 unk214[192]; u8 unk2D4[384]; u32 unk454; u32 unk458; @@ -79,7 +80,9 @@ struct UnkStruct1 u32 unk5F8; u8 unk5FC[0x14]; u16 unk610[8]; - u8 unk620[0xc]; + u8 unk620[0x8]; + u16 unk628; + u8 unk62A[0x2]; u8 unk62C; u8 unk62D; u8 unk62E[0x2]; @@ -106,7 +109,9 @@ struct UnkStruct1 u8 unk686; u8 unk687; u8 unk688; - u8 unk689[0x3]; + u8 unk689; + u8 unk68A; + u8 unk68B; }; THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) @@ -219,20 +224,20 @@ THUMB_FUNC void FUN_0202F2F0() for (i = 0; i < 0xc0; i++) { - UNK_021C59F4.unk04->unk154[i] = 0xee; - UNK_021C59F4.unk04->unk214[i] = 0xee; + UNK_021C59F4.unk04->unk154[0][i] = 0xee; + UNK_021C59F4.unk04->unk154[1][i] = 0xee; } MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); - UNK_021C59F4.unk04->unk000[0] = 0xff; - UNK_021C59F4.unk04->unk026[0] = 0xff; + UNK_021C59F4.unk04->unk000[0][0] = 0xff; + UNK_021C59F4.unk04->unk000[1][0] = 0xff; for (i = 1; i < 0x26; i++) { - UNK_021C59F4.unk04->unk000[i] = 0xee; - UNK_021C59F4.unk04->unk026[i] = 0xee; + UNK_021C59F4.unk04->unk000[0][i] = 0xee; + UNK_021C59F4.unk04->unk000[1][i] = 0xee; } MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); @@ -307,20 +312,20 @@ THUMB_FUNC void FUN_0202F5A4() for (i = 0; i < 0xc0; i++) { - UNK_021C59F4.unk04->unk154[i] = 0xee; - UNK_021C59F4.unk04->unk214[i] = 0xee; + UNK_021C59F4.unk04->unk154[0][i] = 0xee; + UNK_021C59F4.unk04->unk154[1][i] = 0xee; } MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); - UNK_021C59F4.unk04->unk000[0] = 0xff; - UNK_021C59F4.unk04->unk026[0] = 0xff; + UNK_021C59F4.unk04->unk000[0][0] = 0xff; + UNK_021C59F4.unk04->unk000[1][0] = 0xff; for (i = 1; i < 0x26; i++) { - UNK_021C59F4.unk04->unk000[i] = 0xee; - UNK_021C59F4.unk04->unk026[i] = 0xee; + UNK_021C59F4.unk04->unk000[0][i] = 0xee; + UNK_021C59F4.unk04->unk000[1][i] = 0xee; } MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); @@ -414,4 +419,508 @@ THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) FUN_0202F150(param0, param2); return ret; -} \ No newline at end of file +} + +extern u32 FUN_0202E66C(u32 param0, u32 param1); + +THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) { + u32 ret = 1; + if (FUN_02033534() < 0x13) + { + ret = FUN_0202E66C(param0, param1); + } + + FUN_0202F150(param0, param2); + + UNK_02105D58 = 4; + + return ret; +} + +extern u16 FUN_02031190(); +extern void FUN_02031088(); + + + + + +THUMB_FUNC void FUN_0202F984() { + u32 r4 = 0; + if (FUN_02031190() == 0 ) { + if (UNK_02105D59 != 4) { + return; + } + } else { + if (UNK_02105D58 != 4) { + return; + } + } + + if (UNK_021C59F4.unk04->unk67D == 2) { + UNK_021C59F4.unk04->unk67D = 0; + r4 = 1; + } + + if (UNK_021C59F4.unk04->unk67D == 3) { + UNK_021C59F4.unk04->unk67D = 1; + r4 = 1; + } + + if (r4 != 0) { + FUN_0202F5A4(); + } + FUN_02031088(); +} + + + + +THUMB_FUNC void FUN_0202F9E0(u32 param0) { + u8 r2 = UNK_021C59F4.unk04->unk67D; + if (r2 == 0 && param0 == 1) { + UNK_021C59F4.unk04->unk67D = 3; + } else if (r2 == 1 && param0 == 0) { + UNK_021C59F4.unk04->unk67D = 2; + } +} + + +THUMB_FUNC void FUN_0202FA10() { + FUN_0202F9E0(1); +} + + +THUMB_FUNC void FUN_0202FA1C() { + FUN_0202F9E0(0); +} + + + +THUMB_FUNC u8 FUN_0202FA28() { + u8 ret = UNK_021C59F4.unk04->unk67D; + if (ret == 2){ + return 1; + } else if (ret == 3) { + return 0; + } + + return ret; +} + +THUMB_FUNC u32 FUN_0202FA48() { + if (FUN_0202FA28() == 1) { + return 1; + } + + return 0; +} + +extern void MOD04_021D83C0(); +extern u32 FUN_0202E784(); +extern void FUN_020314D0(); +extern void FUN_0202DBA4(); +extern void FUN_0200CAB4(u32 param0); +extern void FUN_0202D824(u32 *param0); + +THUMB_FUNC void FUN_0202FA5C() { + u32 r4 = 0; + if (UNK_021C59F4.unk04 != 0) { + if (FUN_02033534() >= 0x13) { + MOD04_021D83C0(); + r4 = 1; + } else { + if (FUN_0202E784() != 0) { + r4 = 1; + } + } + } + + if (r4 != 0) { + FUN_020314D0(); + FUN_0202DBA4(); + UNK_021C59F4.unk00 = 0; + + FUN_0200CAB4(UNK_021C59F4.unk04->unk548); + UNK_021C59F4.unk04->unk548 = 0; + FreeToHeap(UNK_021C59F4.unk04->unk45C); + FreeToHeap(UNK_021C59F4.unk04->unk460); + FreeToHeap(UNK_021C59F4.unk04->unk458); + FreeToHeap(UNK_021C59F4.unk04->unk454); + FUN_0202D824(UNK_021C59F4.unk04->unk56C); + FUN_0202D824(UNK_021C59F4.unk04->unk54C); + FreeToHeap(UNK_021C59F4.unk04); + UNK_021C59F4.unk04 = NULL; + } +} + +extern u32 FUN_0202E9E8(u32 param0); + +THUMB_FUNC u32 FUN_0202FB18(u32 param0) { + return FUN_0202E9E8(param0); +} + + +extern void FUN_0203050C(); +extern void FUN_0202FEEC(); +extern u32 FUN_0202F03C(); +extern u32 FUN_0202EE24(); + + + +THUMB_FUNC void FUN_0202FB20() { + if (UNK_021C59F4.unk00 != 0) { + FUN_0203050C(); + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ + FUN_0202FEEC(); + } + + UNK_021C59F4.unk00 = 0; + } +} + +THUMB_FUNC void FUN_0202FB58() { + if (FUN_0202F03C() != 0) { + if (FUN_02031190() == 0 ) { + if (FUN_0202EE24() == 0) { + FUN_0202FA5C(); + } + } else { + FUN_0202FA5C(); + } + } +} + +extern void FUN_02031CDC(); +extern void FUN_02030674(); +extern void FUN_0202FCCC(); +extern void FUN_02030DA4(); +extern void FUN_02030074(); +extern void FUN_02030DFC(); +extern void FUN_0202EBD0(u16 param0); +extern void FUN_0202ED70(u32 param0); +extern void FUN_020335F4(u32 param0); +extern void FUN_020315A4(); + + + +THUMB_FUNC u32 FUN_0202FB80() { + FUN_02031CDC(); + + if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04->unk68A == 0) { + UNK_021C59F4.unk00 = 0; + FUN_0202F984(); + UNK_021C59F4.unk04->unk628 |= gMain.unk44 & 0x7FFF; + FUN_02030674(); + FUN_0202FCCC(); + + UNK_021C59F4.unk04->unk628 &= 2<<0xe; + if (FUN_0202FA28() == 0) { + FUN_02030DA4(); + } + + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ + FUN_02030074(); + } + + if (FUN_02031190() == 0 || FUN_0202FA28() == 1 || FUN_02031280() != 0) { + FUN_02030DFC(); + } + + UNK_021C59F4.unk00 = 1; + } + + + FUN_0202ED70(UNK_021C59F4.unk04->unk65C); + + if (FUN_02031190() == 0) { + FUN_0202F8D4(); + } + + FUN_0202FB58(); + } else { + FUN_0202ED70(0); + } + + + FUN_020335F4(0); + FUN_020315A4(); + + return 1; +} + + +THUMB_FUNC void FUN_0202FC60() { + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) { + FUN_0202F2F0(); + } + + UNK_021C59F4.unk00 = r4; +} + + +THUMB_FUNC void FUN_0202FC80() { + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) { + UNK_021C59F4.unk04->unk67D = 1; + FUN_0202F2F0(); + } + + UNK_021C59F4.unk00 = r4; +} + + +extern void FUN_0202E538(); + + +THUMB_FUNC void FUN_0202FCA8() { + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) { + FUN_0202F2F0(); + FUN_0202E538(); + } + + UNK_021C59F4.unk00 = r4; +} + + +extern u32 MOD04_021D78FC(void *param0, u32 param1); +extern u32 FUN_0202CBD4(); +extern u32 FUN_02030930(void *param0); + + + +THUMB_FUNC void FUN_0202FCCC() { + if (UNK_021C59F4.unk04->unk683 != 0 ) { + if (FUN_02033534() >= 0x13) { + if (UNK_021C59F4.unk04->unk687 == 0 || MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { + return; + } + + UNK_021C59F4.unk04->unk683 = 0; + return; + } + + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { + if (FUN_02031280() == 0) { + return; + } + } + + UNK_02105D58 = 0; + FUN_0203050C(); + if (UNK_02105D58 == 0) { + return; + } + + UNK_021C59F4.unk04->unk683 = 0; + return; + } + + + if (FUN_02033534() >= 0x13) { + if (UNK_021C59F4.unk04->unk687 == 0) { + return; + } + + if (UNK_021C59F4.unk04->unk630 != 0){ + if ((int)UNK_021C59F4.unk04->unk634 > 3) { + return; + } + + if (UNK_02105D58 == 4) { + FUN_02030930(UNK_021C59F4.unk04); + UNK_02105D58 = 2; + } + } else { + if (UNK_02105D58 == 4) { + if (FUN_02030930(UNK_021C59F4.unk04) == 0) { + return; + } + + UNK_02105D58 = 2; + } + } + + + if (MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { + return; + } + + UNK_02105D58 = 4; + UNK_021C59F4.unk04->unk634++; + return; + } + + + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { + if (FUN_02031280() == 0) { + return; + } + } + + if (UNK_02105D58 != 4) { + return; + } + + + + //nonmatching + if ((int)UNK_021C59F4.unk04->unk634 > 3) { + return; + } + + FUN_02030930(&UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F]); + + FUN_02030930(&UNK_021C59F4.unk04->unk000[1-UNK_021C59F4.unk04->unk67F]); + + UNK_02105D58 = 0; + FUN_0203050C(); +} + +extern int FUN_02031228(u16 param0); +extern void FUN_0202D4BC(void *param0); +extern int FUN_0202D400(u32 param0, u32 param1, u32 param2); + + + + + + +#ifdef NONMATCHING +THUMB_FUNC u32 FUN_0202FE2C(int param0) { + + // these 3 variables are shuffled on the stack, everything else matches + int st4 = 0; + int stc = FUN_02031228(FUN_02033534()); + int st8 = FUN_0202D858(FUN_02033534()) + 1; + + + for (int r7 = 0; r7 < st8 ; r7++) { + + FUN_0202D4BC(&UNK_021C59F4.unk04->unk47C[r7]); + + if (FUN_02030E7C(r7) != 0) { + UNK_021C59F4.unk04->unk154[param0][r7*stc] = 0xe; + } + + FUN_0202D400(&UNK_021C59F4.unk04->unk47C[r7], &UNK_021C59F4.unk04->unk154[param0][r7*stc], stc); + + if (UNK_021C59F4.unk04->unk154[param0][r7*stc] == 0xe) { + st4++; + } + } + + if (st4 == st8) { + return 0; + } + + return 1; +} +#else +THUMB_FUNC asm u32 FUN_0202FE2C(int param0) { + push {r3-r7, lr} + sub sp, #0x10 + str r0, [sp, #0x0] + mov r0, #0x0 + str r0, [sp, #0x4] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02031228 + str r0, [sp, #0xc] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_0202D858 + add r0, r0, #0x1 + mov r7, #0x0 + str r0, [sp, #0x8] + cmp r0, #0x0 + ble _0202FED0 + ldr r0, [sp, #0x0] + mov r1, #0xc0 + add r6, r0, #0x0 + add r4, r7, #0x0 + add r5, r7, #0x0 + mul r6, r1 +_0202FE66: + ldr r0, =UNK_021C59F4 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + add r0, r1, r0 + add r0, r0, r4 + bl FUN_0202D4BC + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0x0 + beq _0202FE90 + ldr r0, =UNK_021C59F4 + mov r1, #0xe + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r2, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + strb r1, [r2, r0] +_0202FE90: + ldr r0, =UNK_021C59F4 + mov r2, #0x55 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + lsl r2, r2, #0x2 + add r0, r1, r0 + add r1, r1, r2 + add r1, r1, r6 + ldr r2, [sp, #0xc] + add r0, r0, r4 + add r1, r1, r5 + bl FUN_0202D400 + ldr r0, =UNK_021C59F4 + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r1, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + ldrb r0, [r1, r0] + cmp r0, #0xe + bne _0202FEC2 + ldr r0, [sp, #0x4] + add r0, r0, #0x1 + str r0, [sp, #0x4] +_0202FEC2: + ldr r0, [sp, #0xc] + add r7, r7, #0x1 + add r5, r5, r0 + ldr r0, [sp, #0x8] + add r4, #0xc + cmp r7, r0 + blt _0202FE66 +_0202FED0: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x8] + cmp r1, r0 + bne _0202FEDE + add sp, #0x10 + mov r0, #0x0 + pop {r3-r7, pc} +_0202FEDE: + mov r0, #0x1 + add sp, #0x10 + pop {r3-r7, pc} +} +#endif + + + -- cgit v1.2.3 From 419991733b49432fbd2f130e960736469af85400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Fri, 9 Apr 2021 20:12:14 +0200 Subject: more decomp --- arm9/src/unk_0202F150_c.c | 368 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 366 insertions(+), 2 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150_c.c b/arm9/src/unk_0202F150_c.c index b0a249cf..162761a8 100644 --- a/arm9/src/unk_0202F150_c.c +++ b/arm9/src/unk_0202F150_c.c @@ -14,8 +14,8 @@ struct // u8 unk01; // }; -u8 UNK_02105D58 = 4; -u8 UNK_02105D59 = 4; +vu8 UNK_02105D58 = 4; +vu8 UNK_02105D59 = 4; extern int FUN_02033534(); extern int FUN_0202D858(u16 param0); @@ -796,6 +796,7 @@ extern int FUN_0202D400(u32 param0, u32 param1, u32 param2); +THUMB_FUNC u32 FUN_0202FE2C(int param0); #ifdef NONMATCHING THUMB_FUNC u32 FUN_0202FE2C(int param0) { @@ -923,4 +924,367 @@ _0202FEDE: #endif +extern void FUN_020304F0(u32 param0); +extern u32 FUN_0202D0D0(void *, u16 param1, u32 param2, void (*param3)(u32)); +extern void FUN_0203026C(u32 param0,u8 *param1, u32 param2); + +THUMB_FUNC void FUN_0202FEEC() { + if (UNK_021C59F4.unk04 == NULL || FUN_02033534() >= 0x13) { + return; + } + + int st0 = FUN_02031228(FUN_02033534()); + int r6 = FUN_0202D858(FUN_02033534())+1; + + if (UNK_02105D59 == 2 || UNK_02105D59 == 0){ + + UNK_02105D59++; + + if (FUN_0202FA28() == 1) { + FUN_0202FE2C(UNK_021C59F4.unk04->unk680); + } + + if (FUN_0202CBD4() == 4 && FUN_02031280() == 0) { + + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0, 0xe, FUN_020304F0) == 0) { + UNK_02105D59--; + } + } + + int i; + if (UNK_02105D59 == 1 || UNK_02105D59 == 3) { + for (i = 0; i < r6; i++) { + if (FUN_02030E7C(i) != 0) { + UNK_021C59F4.unk04->unk638[i]++; + } else if (FUN_02031280() != 0 && i == 0) { + UNK_021C59F4.unk04->unk638[i]++; + } + } + + + FUN_0203026C(0, UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0); + + UNK_021C59F4.unk04->unk680 = 1 - UNK_021C59F4.unk04->unk680; + } + + + + for (i = 0; i < r6; i++) { + if (FUN_02030E7C(i) == 0 && FUN_0202FA28() == 1) { + UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680][i *st0] = 0xff; + } + } + + + if (FUN_0202CBD4() != 4 || FUN_02031280() != 0) { + UNK_02105D59++; + } + } +} + + +extern u32 MOD04_021D79B4(void *param0, u32 param1); +extern void FUN_02030A00(void *param0); + + + +THUMB_FUNC void FUN_02030074() { + if (UNK_021C59F4.unk04->unk683 != 0) { + if (FUN_02033534() >= 0x13) { + if (FUN_02030E7C(0) != 0 && MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) != 0) { + UNK_021C59F4.unk04->unk683 = 0; + return; + } + } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { + FUN_0202FEEC(); + if (UNK_02105D59 == 2) { + UNK_021C59F4.unk04->unk683 = 0; + return; + } + } + } + + if (FUN_02033534() >= 0x13) { + if (FUN_02030E7C(0) != 0) { + if (UNK_021C59F4.unk04->unk630 != 0) { + if ((int)UNK_021C59F4.unk04->unk638[1] > 3 || (int)UNK_021C59F4.unk04->unk638[0] > 3) { + return; + } + + if (UNK_02105D59 == 4) { + if (FUN_0202FA28() == 1) { + FUN_0202FE2C(0); + } + + UNK_02105D59 = 2; + } + } else { + if (UNK_02105D59 == 4 ) { + if (FUN_0202FA28() == 1) { + if (FUN_0202FE2C(0) == 0) { + return; + } + } + } + + + UNK_02105D59 = 2; + } + + + + if (MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) == 0) { + return; + } + + UNK_02105D59 = 4; + UNK_021C59F4.unk04->unk638[0]++; + UNK_021C59F4.unk04->unk638[1]++; + } + } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { + if (UNK_02105D59 == 4) { + for (int r4 = 1; r4 < 8; r4++) + { + if (FUN_02030E7C(r4) != 0) { + if ((int)UNK_021C59F4.unk04->unk638[r4] > 3) { + return; + } + } else if (r4 == 0) { + if (FUN_02031280() != 0) { + if ((int)UNK_021C59F4.unk04->unk638[0] > 3) { + return; + } + } + } + } + + + if (FUN_0202FA28() == 0) { + FUN_02030A00(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680]); + FUN_02030A00(UNK_021C59F4.unk04->unk154[1-UNK_021C59F4.unk04->unk680]); + } + + + UNK_02105D59 = 0; + FUN_0202FEEC(); + } + } +} + + + +THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) { + if (UNK_021C59F4.unk04->unk66F[0] != 0) { + UNK_021C59F4.unk04->unk634--; + UNK_021C59F4.unk04->unk66F[0] = 0; + return; + } + + FUN_0203026C(param0, param1, param2); +} + +extern void FUN_0202D3A4(void *param0, u8 *param1, u32 param2, u32 param3); + + + +THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) { + UNK_021C59F4.unk04->unk634--; + if (param1 == 0) { + return; + } + + if (param1[0] == 0xb) { + if (FUN_0202FA28() == 1) { + return; + } + param1++; + } else { + if (FUN_0202FA28() == 0) { + return; + } + } + + + if (UNK_021C59F4.unk04->unk682 != 0) { + if ((param1[0] & 1) != 0) { + return; + } + } + + UNK_021C59F4.unk04->unk682 = 0; + if (FUN_0202FA28() == 1) { + int r6 = FUN_02031228(FUN_02033534()); + int st4 = FUN_0202D858(FUN_02033534())+1; + + int r4 = 0; + while (r4 < st4) { + u32 new; + if (param1[0] == 0xff) { + new = UNK_021C59F4.unk04->unk65C & ~(1<unk65C | (1<unk65C = new; + + if (param1[0] == 0xff) { + param1 += r6; + } else if (param1[0] == 0xe){ + param1 += r6; + } else if (UNK_021C59F4.unk04->unk667[r4] != 0 && (param1[0] & 1) != 0) { + param1 += r6; + } else { + param1++; + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, r6-1, 0x5E6); + + param1 += r6-1; + UNK_021C59F4.unk04->unk667[r4] = 0; + } + + + r4++; + } + + return; + } + + + UNK_021C59F4.unk04->unk65C = param1[1]; + UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C << 8; + + UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C + param1[2]; + FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1+4, param1[3], 0x5FF); +} + +extern void FUN_020303F4(u32 param0, u8 *param1, u16 param2); + + +THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) { + if (UNK_021C59F4.unk04->unk66F[param0] != 0) { + + UNK_021C59F4.unk04->unk638[param0]--; + UNK_021C59F4.unk04->unk66F[param0] = 0; + return; + } + + FUN_020303F4(param0, param1, param2); +} + +extern void FUN_020307E4(u8 *param0, u32 param1); +extern int FUN_0202D498(void *param0); + + + +THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) { + UNK_021C59F4.unk04->unk638[param0]--; + if (param1 == 0) { + return; + } + + if (UNK_021C59F4.unk04->unk667[param0] != 0 && (param1[0] & 1) != 0) { + return; + } + + UNK_021C59F4.unk04->unk667[param0] = 0; + if (FUN_0202FA28() == 1) { + int r6 = FUN_02031228(FUN_02033534()); + FUN_0202D858(FUN_02033534()); + + if ((param1[0] & 2) == 0) { + FUN_0202D3A4(&UNK_021C59F4.unk04->unk47C[param0], param1, r6, 0x65E); + } + + UNK_021C59F4.unk04->unk65F[param0]++; + return; + } + + + FUN_020307E4(param1, param0); + + if ((param1[0] & 2) == 0 && FUN_0202D498(&UNK_021C59F4.unk04->unk4E8[param0]) >= 0xb) { + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[param0], param1 +1, 0xb, 0x66E); + } +} + + +THUMB_FUNC void FUN_020304D4(u32 param0) { + if (param0 != 0) { + UNK_02105D58++; + return; + } + + ErrorHandling(); +} + +THUMB_FUNC void FUN_020304F0(u32 param0) { + if (param0 != 0) { + UNK_02105D59++; + return; + } + + ErrorHandling(); +} + +extern u16 FUN_0202CB8C(); + + +THUMB_FUNC void FUN_0203050C() { + if (UNK_021C59F4.unk04 == 0 || FUN_02033534() >= 0x13) { + return; + } + + int r4 = FUN_02031228(FUN_02033534()); + FUN_0202D858(FUN_02033534()); + + if (FUN_02031280() != 0 && (UNK_02105D58 == 2 || UNK_02105D58 == 0)) { + UNK_02105D58++; + FUN_020304D4(1); + + + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); + + UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk634++; + return; + } + + if (FUN_0202CBD4() != 4) { + return; + } + + if (FUN_02030E7C(FUN_02031190()) == 0) { + FUN_02031190(); + return; + } + + if (UNK_02105D58 != 2 && UNK_02105D58 != 0) { + return; + } + + + if (FUN_02031190() != 0) { + UNK_02105D58++; + + + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4, 0xe, FUN_020304D4) == 0) { + UNK_02105D58--; + return; + } + + UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk634++; + return; + } + + + if ((FUN_0202CB8C() & 0xFFFE) != 0) { + UNK_02105D58++; + FUN_020304D4(1); + + + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); + + UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk634++; + } +} \ No newline at end of file -- cgit v1.2.3 From 405d77ac981ce6ece1c529ab153543d118014661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sat, 10 Apr 2021 17:26:38 +0200 Subject: decomp finished --- arm9/src/unk_0202F150.c | 2382 +++++++++++++++++++++++++++++++++++++++++++++ arm9/src/unk_0202F150_c.c | 1290 ------------------------ 2 files changed, 2382 insertions(+), 1290 deletions(-) create mode 100644 arm9/src/unk_0202F150.c delete mode 100644 arm9/src/unk_0202F150_c.c (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c new file mode 100644 index 00000000..dd86b10d --- /dev/null +++ b/arm9/src/unk_0202F150.c @@ -0,0 +1,2382 @@ +#include "global.h" +#include "MI_memory.h" +#include "heap.h" +#include "main.h" +#include "RTC_api.h" + +struct +{ + u8 unk00; + struct UnkStruct1 *unk04; +} UNK_021C59F4; + + +vu8 UNK_02105D58 = 4; +vu8 UNK_02105D59 = 4; + +extern int FUN_02033534(); +extern u32 FUN_0202D858(u16 param0); +extern void FUN_02031480(u32 param0); +extern void FUN_0202D7D8(u32 *param0, u32 param1, u32 param2); +extern void FUN_0202F2F0(); +extern void FUN_020312BC(u32 param0); +extern void FUN_0202FB20(); + +extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2); +extern void FUN_0202D394(u32 param0, u32 param1, u32 param2); + +extern void FUN_0202D804(u32 *param0); +extern u32 FUN_02030E7C(u16 param0); + +struct UnkStruct1 +{ + u8 unk000[2][38]; + u8 unk04c[264]; + u8 unk154[2][192]; + u8 unk2D4[384]; + u32 unk454; + u32 unk458; + u32 unk45C; + u32 unk460; + u32 unk464; + u8 unk468[0x8]; + u32 unk470; + u8 unk474[0x8]; + struct + { + u32 unk00; + u32 unk04; + u32 unk08; + } unk47C[8]; + u32 unk4DC; + u8 unk4E0[0x8]; + struct + { + u32 unk00; + u32 unk04; + u32 unk08; + } unk4E8[8]; + u32 unk548; + u8 unk54C[32]; + u8 unk56C[32]; + struct + { + u32 unk00; + u32 unk04; + u16 unk08; + u8 unk0a; + u8 unk0b; + } unk58C[8]; + u32 unk5EC; + u32 unk5F0; + u16 unk5F4; + u8 unk5F6; + u8 unk5F7; + s64 unk5F8[3]; + u16 unk610[8]; + u8 unk620[0x8]; + u16 unk628; + u8 unk62A; + u8 unk62B; + u8 unk62C; + s8 unk62D; + u16 unk62E; + u32 unk630; + u32 unk634; + u32 unk638[8]; + u32 unk658; + u16 unk65C; + u8 unk65E; + u8 unk65F[8]; + u8 unk667[8]; + u8 unk66F[8]; + u8 unk677[4]; + u8 unk67B; + u8 unk67C; + u8 unk67D; + u8 unk67E; + u8 unk67F; + u8 unk680; + u8 unk681; + u8 unk682; + u8 unk683; + u8 unk684; + u8 unk685; + u8 unk686; + u8 unk687; + u8 unk688; + u8 unk689; + u8 unk68A; + u8 unk68B; +}; + +THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) +{ + u32 r4 = 0; + UNK_021C59F4.unk00 = 0; + if (param0 != 0) + { + u32 res = FUN_0202D858(FUN_02033534()) + 1; + + if (UNK_021C59F4.unk04 != 0) + { + return 1; + } + + FUN_02031480(0xf); + struct UnkStruct1 *ptr = (struct UnkStruct1 *)AllocFromHeap(0xf, sizeof(struct UnkStruct1)); + UNK_021C59F4.unk04 = ptr; + MI_CpuFill8(ptr, 0, 0x68C); + + UNK_021C59F4.unk04->unk658 = param1 + 0x40; + UNK_021C59F4.unk04->unk67D = 0; + UNK_021C59F4.unk04->unk67E = 0x1b; + + UNK_021C59F4.unk04->unk45C = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658 << 1); + + UNK_021C59F4.unk04->unk460 = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk458 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk454 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); + + if (FUN_02033534() == 0xa) + { + FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x64, &UNK_021C59F4.unk04->unk464); + FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x32 << 4, &UNK_021C59F4.unk04->unk4DC); + } + else + { + FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x14, &UNK_021C59F4.unk04->unk464); + FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x1b + 0xfd, &UNK_021C59F4.unk04->unk4DC); + } + } + else + { + + r4 = 1; + if (UNK_021C59F4.unk04 == 0) + { + ErrorHandling(); + } + } + + UNK_021C59F4.unk04->unk65C = 0; + + for (int i = 0; i < 4; i++) + { + UNK_021C59F4.unk04->unk677[i] = 0xff; + } + + if (r4 == 0) + { + FUN_0202F2F0(); + } + + FUN_020312BC(&UNK_021C59F4.unk04->unk5F8); + + if (r4 == 0) + { + u32 res2 = FUN_0200CA60(FUN_0202FB20, 0, 0); + + UNK_021C59F4.unk04->unk548 = res2; + } + + UNK_021C59F4.unk04->unk687 = 0; + + return 1; +} + +THUMB_FUNC void FUN_0202F2F0() +{ + UNK_021C59F4.unk04->unk62C = 0; + UNK_021C59F4.unk04->unk62D = 0; + UNK_021C59F4.unk04->unk67F = 0; + UNK_021C59F4.unk04->unk680 = 0; + + s32 res = FUN_0202D858(FUN_02033534()) + 1; + + MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); + + int i; + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], + UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); + + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], + UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); + + for (i = 0; i < 0xc0; i++) + { + UNK_021C59F4.unk04->unk154[0][i] = 0xee; + UNK_021C59F4.unk04->unk154[1][i] = 0xee; + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); + + UNK_021C59F4.unk04->unk000[0][0] = 0xff; + UNK_021C59F4.unk04->unk000[1][0] = 0xff; + + for (i = 1; i < 0x26; i++) + { + UNK_021C59F4.unk04->unk000[0][i] = 0xee; + UNK_021C59F4.unk04->unk000[1][i] = 0xee; + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); + + FUN_0202D394( + &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); + + UNK_021C59F4.unk04->unk684 = 0; + UNK_021C59F4.unk04->unk685 = 0; + + for (i = 0; i < 8; i++) + { + UNK_021C59F4.unk04->unk65F[i] = 0; + UNK_021C59F4.unk04->unk667[i] = 1; + UNK_021C59F4.unk04->unk66F[i] = 1; + UNK_021C59F4.unk04->unk610[i] = 0; + + UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[i].unk04 = 0; + UNK_021C59F4.unk04->unk58C[i].unk00 = 0; + + UNK_021C59F4.unk04->unk638[i] = 0; + } + + UNK_021C59F4.unk04->unk634 = 0; + UNK_021C59F4.unk04->unk630 = 1; + UNK_021C59F4.unk04->unk5F6 = 0xee; + UNK_021C59F4.unk04->unk5F4 = 0xffff; + UNK_021C59F4.unk04->unk5F0 = 0; + UNK_021C59F4.unk04->unk5EC = 0; + UNK_021C59F4.unk04->unk682 = 1; + UNK_021C59F4.unk04->unk683 = 1; + + UNK_02105D59 = 4; + UNK_02105D58 = 4; + + FUN_0202D804(UNK_021C59F4.unk04->unk54C); + FUN_0202D804(UNK_021C59F4.unk04->unk56C); + + UNK_021C59F4.unk04->unk688 = 0; +} + +THUMB_FUNC void FUN_0202F5A4() +{ + UNK_021C59F4.unk04->unk62C = 0; + UNK_021C59F4.unk04->unk62D = 0; + + s32 res = FUN_0202D858(FUN_02033534()) + 1; + + MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); + + int i; + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], + UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); + + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], + UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); + + for (i = 0; i < 0xc0; i++) + { + UNK_021C59F4.unk04->unk154[0][i] = 0xee; + UNK_021C59F4.unk04->unk154[1][i] = 0xee; + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); + + UNK_021C59F4.unk04->unk000[0][0] = 0xff; + UNK_021C59F4.unk04->unk000[1][0] = 0xff; + + for (i = 1; i < 0x26; i++) + { + UNK_021C59F4.unk04->unk000[0][i] = 0xee; + UNK_021C59F4.unk04->unk000[1][i] = 0xee; + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); + FUN_0202D394( + &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); + + UNK_021C59F4.unk04->unk684 = 0; + UNK_021C59F4.unk04->unk685 = 0; + + for (i = 0; i < 8; i++) + { + UNK_021C59F4.unk04->unk65F[i] = 0; + UNK_021C59F4.unk04->unk667[i] = 1; + UNK_021C59F4.unk04->unk66F[i] = 1; + UNK_021C59F4.unk04->unk610[i] = 0; + + UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[i].unk04 = 0; + UNK_021C59F4.unk04->unk58C[i].unk00 = 0; + } + + UNK_021C59F4.unk04->unk630 = 1; + UNK_021C59F4.unk04->unk5F6 = 0xee; + UNK_021C59F4.unk04->unk5F4 = 0xffff; + UNK_021C59F4.unk04->unk5F0 = 0; + UNK_021C59F4.unk04->unk5EC = 0; + UNK_021C59F4.unk04->unk682 = 1; + UNK_021C59F4.unk04->unk683 = 1; + + FUN_0202D804(UNK_021C59F4.unk04->unk54C); + FUN_0202D804(UNK_021C59F4.unk04->unk56C); + + UNK_021C59F4.unk04->unk688 = 0; +} + +THUMB_FUNC void FUN_0202F820(u32 param0) +{ + UNK_021C59F4.unk04->unk65F[param0] = 0; + + UNK_021C59F4.unk04->unk667[param0] = 1; + + UNK_021C59F4.unk04->unk638[param0] = 0; + + UNK_021C59F4.unk04->unk66F[param0] = 1; + + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[param0], + UNK_021C59F4.unk04->unk454 + param0 * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[param0], + UNK_021C59F4.unk04->unk458 + param0 * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk58C[param0].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[param0].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[param0].unk04 = 0; + UNK_021C59F4.unk04->unk58C[param0].unk00 = 0; +} + +extern u8 FUN_02031280(); + +THUMB_FUNC void FUN_0202F8D4() +{ + for (int i = 1; i < 8; i++) + { + if (FUN_02030E7C(i) == 0 && UNK_021C59F4.unk04->unk667[i] == 0 && FUN_02031280() == 0) + { + FUN_0202F820(i); + } + } +} + +THUMB_FUNC void FUN_0202F910(u32 param0) +{ + FUN_0202F820(param0); +} + +extern u32 FUN_0202E5F8(u32 param0, u32 param1, u32 param2); +extern void FUN_0202D330(void (*param0)(u32)); + +THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) +{ + u32 ret = 1; + if (FUN_02033534() < 0x13) + { + ret = FUN_0202E5F8(param0, param1, param3); + FUN_0202D330(FUN_0202F910); + } + + FUN_0202F150(param0, param2); + + return ret; +} + +extern u32 FUN_0202E66C(u32 param0, u32 param1); + +THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) { + u32 ret = 1; + if (FUN_02033534() < 0x13) + { + ret = FUN_0202E66C(param0, param1); + } + + FUN_0202F150(param0, param2); + + UNK_02105D58 = 4; + + return ret; +} + +extern u16 FUN_02031190(); +extern void FUN_02031088(); + + + + + +THUMB_FUNC void FUN_0202F984() { + u32 r4 = 0; + if (FUN_02031190() == 0 ) { + if (UNK_02105D59 != 4) { + return; + } + } else { + if (UNK_02105D58 != 4) { + return; + } + } + + if (UNK_021C59F4.unk04->unk67D == 2) { + UNK_021C59F4.unk04->unk67D = 0; + r4 = 1; + } + + if (UNK_021C59F4.unk04->unk67D == 3) { + UNK_021C59F4.unk04->unk67D = 1; + r4 = 1; + } + + if (r4 != 0) { + FUN_0202F5A4(); + } + FUN_02031088(); +} + + + + +THUMB_FUNC void FUN_0202F9E0(u32 param0) { + u8 r2 = UNK_021C59F4.unk04->unk67D; + if (r2 == 0 && param0 == 1) { + UNK_021C59F4.unk04->unk67D = 3; + } else if (r2 == 1 && param0 == 0) { + UNK_021C59F4.unk04->unk67D = 2; + } +} + + +THUMB_FUNC void FUN_0202FA10() { + FUN_0202F9E0(1); +} + + +THUMB_FUNC void FUN_0202FA1C() { + FUN_0202F9E0(0); +} + + + +THUMB_FUNC u8 FUN_0202FA28() { + u8 ret = UNK_021C59F4.unk04->unk67D; + if (ret == 2){ + return 1; + } else if (ret == 3) { + return 0; + } + + return ret; +} + +THUMB_FUNC u32 FUN_0202FA48() { + if (FUN_0202FA28() == 1) { + return 1; + } + + return 0; +} + +extern void MOD04_021D83C0(); +extern u32 FUN_0202E784(); +extern void FUN_020314D0(); +extern void FUN_0202DBA4(); +extern void FUN_0200CAB4(u32 param0); +extern void FUN_0202D824(u32 *param0); + +THUMB_FUNC void FUN_0202FA5C() { + u32 r4 = 0; + if (UNK_021C59F4.unk04 != 0) { + if (FUN_02033534() >= 0x13) { + MOD04_021D83C0(); + r4 = 1; + } else { + if (FUN_0202E784() != 0) { + r4 = 1; + } + } + } + + if (r4 != 0) { + FUN_020314D0(); + FUN_0202DBA4(); + UNK_021C59F4.unk00 = 0; + + FUN_0200CAB4(UNK_021C59F4.unk04->unk548); + UNK_021C59F4.unk04->unk548 = 0; + FreeToHeap(UNK_021C59F4.unk04->unk45C); + FreeToHeap(UNK_021C59F4.unk04->unk460); + FreeToHeap(UNK_021C59F4.unk04->unk458); + FreeToHeap(UNK_021C59F4.unk04->unk454); + FUN_0202D824(UNK_021C59F4.unk04->unk56C); + FUN_0202D824(UNK_021C59F4.unk04->unk54C); + FreeToHeap(UNK_021C59F4.unk04); + UNK_021C59F4.unk04 = NULL; + } +} + +extern u32 FUN_0202E9E8(u32 param0); + +THUMB_FUNC u32 FUN_0202FB18(u32 param0) { + return FUN_0202E9E8(param0); +} + + +extern void FUN_0203050C(); +extern void FUN_0202FEEC(); +extern u32 FUN_0202F03C(); +extern u32 FUN_0202EE24(); + + + +THUMB_FUNC void FUN_0202FB20() { + if (UNK_021C59F4.unk00 != 0) { + FUN_0203050C(); + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ + FUN_0202FEEC(); + } + + UNK_021C59F4.unk00 = 0; + } +} + +THUMB_FUNC void FUN_0202FB58() { + if (FUN_0202F03C() != 0) { + if (FUN_02031190() == 0 ) { + if (FUN_0202EE24() == 0) { + FUN_0202FA5C(); + } + } else { + FUN_0202FA5C(); + } + } +} + +extern void FUN_02031CDC(); +extern void FUN_02030674(); +extern void FUN_0202FCCC(); +extern void FUN_02030DA4(); +extern void FUN_02030074(); +extern void FUN_02030DFC(); +extern void FUN_0202EBD0(u16 param0); +extern void FUN_0202ED70(u32 param0); +extern void FUN_020335F4(u32 param0); +extern void FUN_020315A4(); + + + +THUMB_FUNC u32 FUN_0202FB80() { + FUN_02031CDC(); + + if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04->unk68A == 0) { + UNK_021C59F4.unk00 = 0; + FUN_0202F984(); + UNK_021C59F4.unk04->unk628 |= gMain.unk44 & 0x7FFF; + FUN_02030674(); + FUN_0202FCCC(); + + UNK_021C59F4.unk04->unk628 &= 2<<0xe; + if (FUN_0202FA28() == 0) { + FUN_02030DA4(); + } + + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ + FUN_02030074(); + } + + if (FUN_02031190() == 0 || FUN_0202FA28() == 1 || FUN_02031280() != 0) { + FUN_02030DFC(); + } + + UNK_021C59F4.unk00 = 1; + } + + + FUN_0202ED70(UNK_021C59F4.unk04->unk65C); + + if (FUN_02031190() == 0) { + FUN_0202F8D4(); + } + + FUN_0202FB58(); + } else { + FUN_0202ED70(0); + } + + + FUN_020335F4(0); + FUN_020315A4(); + + return 1; +} + + +THUMB_FUNC void FUN_0202FC60() { + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) { + FUN_0202F2F0(); + } + + UNK_021C59F4.unk00 = r4; +} + + +THUMB_FUNC void FUN_0202FC80() { + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) { + UNK_021C59F4.unk04->unk67D = 1; + FUN_0202F2F0(); + } + + UNK_021C59F4.unk00 = r4; +} + + +extern void FUN_0202E538(); + + +THUMB_FUNC void FUN_0202FCA8() { + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) { + FUN_0202F2F0(); + FUN_0202E538(); + } + + UNK_021C59F4.unk00 = r4; +} + + +extern u32 MOD04_021D78FC(void *param0, u32 param1); +extern u32 FUN_0202CBD4(); +extern u32 FUN_02030930(u8 *param0); + + + +THUMB_FUNC void FUN_0202FCCC() { + if (UNK_021C59F4.unk04->unk683 != 0 ) { + if (FUN_02033534() >= 0x13) { + if (UNK_021C59F4.unk04->unk687 == 0 || MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { + return; + } + + UNK_021C59F4.unk04->unk683 = 0; + return; + } + + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { + if (FUN_02031280() == 0) { + return; + } + } + + UNK_02105D58 = 0; + FUN_0203050C(); + if (UNK_02105D58 == 0) { + return; + } + + UNK_021C59F4.unk04->unk683 = 0; + return; + } + + + if (FUN_02033534() >= 0x13) { + if (UNK_021C59F4.unk04->unk687 == 0) { + return; + } + + if (UNK_021C59F4.unk04->unk630 != 0){ + if ((int)UNK_021C59F4.unk04->unk634 > 3) { + return; + } + + if (UNK_02105D58 == 4) { + FUN_02030930(UNK_021C59F4.unk04->unk000[0]); + UNK_02105D58 = 2; + } + } else { + if (UNK_02105D58 == 4) { + if (FUN_02030930(UNK_021C59F4.unk04->unk000[0]) == 0) { + return; + } + + UNK_02105D58 = 2; + } + } + + + if (MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { + return; + } + + UNK_02105D58 = 4; + UNK_021C59F4.unk04->unk634++; + return; + } + + + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { + if (FUN_02031280() == 0) { + return; + } + } + + if (UNK_02105D58 != 4) { + return; + } + + + + //nonmatching + if ((int)UNK_021C59F4.unk04->unk634 > 3) { + return; + } + + FUN_02030930(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F]); + + FUN_02030930(UNK_021C59F4.unk04->unk000[1-UNK_021C59F4.unk04->unk67F]); + + UNK_02105D58 = 0; + FUN_0203050C(); +} + +extern int FUN_02031228(u16 param0); +extern void FUN_0202D4BC(void *param0); +extern int FUN_0202D400(u32 param0, u32 param1, u32 param2); + + + + + +THUMB_FUNC u32 FUN_0202FE2C(int param0); + +#ifdef NONMATCHING +THUMB_FUNC u32 FUN_0202FE2C(int param0) { + + // these 3 variables are shuffled on the stack, everything else matches + int st4 = 0; + int stc = FUN_02031228(FUN_02033534()); + int st8 = FUN_0202D858(FUN_02033534()) + 1; + + + for (int r7 = 0; r7 < st8 ; r7++) { + + FUN_0202D4BC(&UNK_021C59F4.unk04->unk47C[r7]); + + if (FUN_02030E7C(r7) != 0) { + UNK_021C59F4.unk04->unk154[param0][r7*stc] = 0xe; + } + + FUN_0202D400(&UNK_021C59F4.unk04->unk47C[r7], &UNK_021C59F4.unk04->unk154[param0][r7*stc], stc); + + if (UNK_021C59F4.unk04->unk154[param0][r7*stc] == 0xe) { + st4++; + } + } + + if (st4 == st8) { + return 0; + } + + return 1; +} +#else +THUMB_FUNC asm u32 FUN_0202FE2C(int param0) { + push {r3-r7, lr} + sub sp, #0x10 + str r0, [sp, #0x0] + mov r0, #0x0 + str r0, [sp, #0x4] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02031228 + str r0, [sp, #0xc] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_0202D858 + add r0, r0, #0x1 + mov r7, #0x0 + str r0, [sp, #0x8] + cmp r0, #0x0 + ble _0202FED0 + ldr r0, [sp, #0x0] + mov r1, #0xc0 + add r6, r0, #0x0 + add r4, r7, #0x0 + add r5, r7, #0x0 + mul r6, r1 +_0202FE66: + ldr r0, =UNK_021C59F4 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + add r0, r1, r0 + add r0, r0, r4 + bl FUN_0202D4BC + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0x0 + beq _0202FE90 + ldr r0, =UNK_021C59F4 + mov r1, #0xe + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r2, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + strb r1, [r2, r0] +_0202FE90: + ldr r0, =UNK_021C59F4 + mov r2, #0x55 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + lsl r2, r2, #0x2 + add r0, r1, r0 + add r1, r1, r2 + add r1, r1, r6 + ldr r2, [sp, #0xc] + add r0, r0, r4 + add r1, r1, r5 + bl FUN_0202D400 + ldr r0, =UNK_021C59F4 + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r1, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + ldrb r0, [r1, r0] + cmp r0, #0xe + bne _0202FEC2 + ldr r0, [sp, #0x4] + add r0, r0, #0x1 + str r0, [sp, #0x4] +_0202FEC2: + ldr r0, [sp, #0xc] + add r7, r7, #0x1 + add r5, r5, r0 + ldr r0, [sp, #0x8] + add r4, #0xc + cmp r7, r0 + blt _0202FE66 +_0202FED0: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x8] + cmp r1, r0 + bne _0202FEDE + add sp, #0x10 + mov r0, #0x0 + pop {r3-r7, pc} +_0202FEDE: + mov r0, #0x1 + add sp, #0x10 + pop {r3-r7, pc} +} +#endif + + +extern void FUN_020304F0(u32 param0); +extern u32 FUN_0202D0D0(void *, u16 param1, u32 param2, void (*param3)(u32)); +extern void FUN_0203026C(u32 param0,u8 *param1, u32 param2); + + +THUMB_FUNC void FUN_0202FEEC() { + if (UNK_021C59F4.unk04 == NULL || FUN_02033534() >= 0x13) { + return; + } + + int st0 = FUN_02031228(FUN_02033534()); + int r6 = FUN_0202D858(FUN_02033534())+1; + + if (UNK_02105D59 == 2 || UNK_02105D59 == 0){ + + UNK_02105D59++; + + if (FUN_0202FA28() == 1) { + FUN_0202FE2C(UNK_021C59F4.unk04->unk680); + } + + if (FUN_0202CBD4() == 4 && FUN_02031280() == 0) { + + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0, 0xe, FUN_020304F0) == 0) { + UNK_02105D59--; + } + } + + int i; + if (UNK_02105D59 == 1 || UNK_02105D59 == 3) { + for (i = 0; i < r6; i++) { + if (FUN_02030E7C(i) != 0) { + UNK_021C59F4.unk04->unk638[i]++; + } else if (FUN_02031280() != 0 && i == 0) { + UNK_021C59F4.unk04->unk638[i]++; + } + } + + + FUN_0203026C(0, UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0); + + UNK_021C59F4.unk04->unk680 = 1 - UNK_021C59F4.unk04->unk680; + } + + + + for (i = 0; i < r6; i++) { + if (FUN_02030E7C(i) == 0 && FUN_0202FA28() == 1) { + UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680][i *st0] = 0xff; + } + } + + + if (FUN_0202CBD4() != 4 || FUN_02031280() != 0) { + UNK_02105D59++; + } + } +} + + +extern u32 MOD04_021D79B4(void *param0, u32 param1); +extern void FUN_02030A00(u8 *param0); + + + +THUMB_FUNC void FUN_02030074() { + if (UNK_021C59F4.unk04->unk683 != 0) { + if (FUN_02033534() >= 0x13) { + if (FUN_02030E7C(0) != 0 && MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) != 0) { + UNK_021C59F4.unk04->unk683 = 0; + return; + } + } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { + FUN_0202FEEC(); + if (UNK_02105D59 == 2) { + UNK_021C59F4.unk04->unk683 = 0; + return; + } + } + } + + if (FUN_02033534() >= 0x13) { + if (FUN_02030E7C(0) != 0) { + if (UNK_021C59F4.unk04->unk630 != 0) { + if ((int)UNK_021C59F4.unk04->unk638[1] > 3 || (int)UNK_021C59F4.unk04->unk638[0] > 3) { + return; + } + + if (UNK_02105D59 == 4) { + if (FUN_0202FA28() == 1) { + FUN_0202FE2C(0); + } + + UNK_02105D59 = 2; + } + } else { + if (UNK_02105D59 == 4 ) { + if (FUN_0202FA28() == 1) { + if (FUN_0202FE2C(0) == 0) { + return; + } + } + } + + + UNK_02105D59 = 2; + } + + + + if (MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) == 0) { + return; + } + + UNK_02105D59 = 4; + UNK_021C59F4.unk04->unk638[0]++; + UNK_021C59F4.unk04->unk638[1]++; + } + } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { + if (UNK_02105D59 == 4) { + for (int r4 = 1; r4 < 8; r4++) + { + if (FUN_02030E7C(r4) != 0) { + if ((int)UNK_021C59F4.unk04->unk638[r4] > 3) { + return; + } + } else if (r4 == 0) { + if (FUN_02031280() != 0) { + if ((int)UNK_021C59F4.unk04->unk638[0] > 3) { + return; + } + } + } + } + + + if (FUN_0202FA28() == 0) { + FUN_02030A00(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680]); + FUN_02030A00(UNK_021C59F4.unk04->unk154[1-UNK_021C59F4.unk04->unk680]); + } + + + UNK_02105D59 = 0; + FUN_0202FEEC(); + } + } +} + + + +THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) { + if (UNK_021C59F4.unk04->unk66F[0] != 0) { + UNK_021C59F4.unk04->unk634--; + UNK_021C59F4.unk04->unk66F[0] = 0; + return; + } + + FUN_0203026C(param0, param1, param2); +} + +extern void FUN_0202D3A4(void *param0, u8 *param1, u32 param2, u32 param3); + + + +THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) { + UNK_021C59F4.unk04->unk634--; + if (param1 == 0) { + return; + } + + if (param1[0] == 0xb) { + if (FUN_0202FA28() == 1) { + return; + } + param1++; + } else { + if (FUN_0202FA28() == 0) { + return; + } + } + + + if (UNK_021C59F4.unk04->unk682 != 0) { + if ((param1[0] & 1) != 0) { + return; + } + } + + UNK_021C59F4.unk04->unk682 = 0; + if (FUN_0202FA28() == 1) { + int r6 = FUN_02031228(FUN_02033534()); + int st4 = FUN_0202D858(FUN_02033534())+1; + + int r4 = 0; + while (r4 < st4) { + u32 new; + if (param1[0] == 0xff) { + new = UNK_021C59F4.unk04->unk65C & ~(1<unk65C | (1<unk65C = new; + + if (param1[0] == 0xff) { + param1 += r6; + } else if (param1[0] == 0xe){ + param1 += r6; + } else if (UNK_021C59F4.unk04->unk667[r4] != 0 && (param1[0] & 1) != 0) { + param1 += r6; + } else { + param1++; + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, r6-1, 0x5E6); + + param1 += r6-1; + UNK_021C59F4.unk04->unk667[r4] = 0; + } + + + r4++; + } + + return; + } + + + UNK_021C59F4.unk04->unk65C = param1[1]; + UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C << 8; + + UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C + param1[2]; + FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1+4, param1[3], 0x5FF); +} + +extern void FUN_020303F4(u32 param0, u8 *param1, u16 param2); + + +THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) { + if (UNK_021C59F4.unk04->unk66F[param0] != 0) { + + UNK_021C59F4.unk04->unk638[param0]--; + UNK_021C59F4.unk04->unk66F[param0] = 0; + return; + } + + FUN_020303F4(param0, param1, param2); +} + +extern u32 FUN_020307E4(u8 *param0, u32 param1); +extern int FUN_0202D498(void *param0); + + + +THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) { + UNK_021C59F4.unk04->unk638[param0]--; + if (param1 == 0) { + return; + } + + if (UNK_021C59F4.unk04->unk667[param0] != 0 && (param1[0] & 1) != 0) { + return; + } + + UNK_021C59F4.unk04->unk667[param0] = 0; + if (FUN_0202FA28() == 1) { + int r6 = FUN_02031228(FUN_02033534()); + FUN_0202D858(FUN_02033534()); + + if ((param1[0] & 2) == 0) { + FUN_0202D3A4(&UNK_021C59F4.unk04->unk47C[param0], param1, r6, 0x65E); + } + + UNK_021C59F4.unk04->unk65F[param0]++; + return; + } + + + FUN_020307E4(param1, param0); + + if ((param1[0] & 2) == 0 && FUN_0202D498(&UNK_021C59F4.unk04->unk4E8[param0]) >= 0xb) { + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[param0], param1 +1, 0xb, 0x66E); + } +} + + +THUMB_FUNC void FUN_020304D4(u32 param0) { + if (param0 != 0) { + UNK_02105D58++; + return; + } + + ErrorHandling(); +} + +THUMB_FUNC void FUN_020304F0(u32 param0) { + if (param0 != 0) { + UNK_02105D59++; + return; + } + + ErrorHandling(); +} + +extern u16 FUN_0202CB8C(); + + +THUMB_FUNC void FUN_0203050C() { + if (UNK_021C59F4.unk04 == 0 || FUN_02033534() >= 0x13) { + return; + } + + int r4 = FUN_02031228(FUN_02033534()); + FUN_0202D858(FUN_02033534()); + + if (FUN_02031280() != 0 && (UNK_02105D58 == 2 || UNK_02105D58 == 0)) { + UNK_02105D58++; + FUN_020304D4(1); + + + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); + + UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk634++; + return; + } + + if (FUN_0202CBD4() != 4) { + return; + } + + if (FUN_02030E7C(FUN_02031190()) == 0) { + FUN_02031190(); + return; + } + + if (UNK_02105D58 != 2 && UNK_02105D58 != 0) { + return; + } + + + if (FUN_02031190() != 0) { + UNK_02105D58++; + + + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4, 0xe, FUN_020304D4) == 0) { + UNK_02105D58--; + return; + } + + UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk634++; + return; + } + + + if ((FUN_0202CB8C() & 0xFFFE) != 0) { + UNK_02105D58++; + FUN_020304D4(1); + + + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); + + UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk634++; + } +} + +extern s64 _ll_mul(s64, s64); + +#ifdef NONMATCHING +THUMB_FUNC void FUN_02030674() { + u16 r4 = 0; + if (UNK_021C59F4.unk04->unk62C == 0 || (UNK_021C59F4.unk04->unk628 & 0xf0) == 0) { + return; + } + + if (UNK_021C59F4.unk04->unk62C == 2) { + if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) { + r4 = r4 | 0x10; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) { + r4 = r4 | 0x20; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) { + r4 = r4 | 0x80; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) { + r4 = r4 | 0x40; + } + } else { + if (UNK_021C59F4.unk04->unk62E != 0) { + r4 = UNK_021C59F4.unk04->unk62E; + UNK_021C59F4.unk04->unk62D--; + + if (UNK_021C59F4.unk04->unk62D < 0) { + UNK_021C59F4.unk04->unk62E = 0; + } + + } else { + UNK_021C59F4.unk04->unk5F8[0] = UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0] + UNK_021C59F4.unk04->unk5F8[2]; + + switch ((u32)(UNK_021C59F4.unk04->unk5F8[0] >> 0x3E) | (0 << 2)) { + case 0: + r4 = 0x20; + break; + case 1: + r4 = 0x10; + break; + case 2: + r4 = 0x40; + break; + case 3: + r4 = 0x80; + break; + } + + + UNK_021C59F4.unk04->unk5F8[0] = UNK_021C59F4.unk04->unk5F8[2] + UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0]; + UNK_021C59F4.unk04->unk62D = UNK_021C59F4.unk04->unk5F8[0]>>0x3c | (0 << 4); + UNK_021C59F4.unk04->unk62E = r4; + } + } + + + UNK_021C59F4.unk04->unk628 &= ~0xf0; + UNK_021C59F4.unk04->unk628 += r4; +} +#else +THUMB_FUNC asm void FUN_02030674() { + push {r3-r7, lr} + ldr r7, =UNK_021C59F4 + mov r6, #0x0 + ldr r5, [r7, #0x4] + ldr r2, =0x0000062C + add r4, r6, #0x0 + ldrb r0, [r5, r2] + cmp r0, #0x0 + beq _02030690 + sub r1, r2, #0x4 + ldrh r1, [r5, r1] + mov r3, #0xf0 + tst r3, r1 + bne _02030692 +_02030690: + b _02030794 +_02030692: + cmp r0, #0x2 + bne _020306D0 + mov r0, #0x20 + tst r0, r1 + beq _020306A4 + mov r0, #0x10 + orr r0, r6 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306A4: + mov r0, #0x10 + tst r0, r1 + beq _020306B2 + mov r0, #0x20 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306B2: + mov r0, #0x40 + tst r0, r1 + beq _020306C0 + mov r0, #0x80 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306C0: + mov r0, #0x80 + tst r0, r1 + beq _0203077E + mov r0, #0x40 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 + b _0203077E +_020306D0: + add r0, r2, #0x2 + ldrh r0, [r5, r0] + cmp r0, #0x0 + beq _020306F2 + add r4, r0, #0x0 + add r0, r2, #0x1 + ldrsb r0, [r5, r0] + sub r1, r0, #0x1 + add r0, r2, #0x1 + strb r1, [r5, r0] + ldr r1, [r7, #0x4] + ldrsb r0, [r1, r0] + cmp r0, #0x0 + bge _0203077E + add r0, r2, #0x2 + strh r6, [r1, r0] + b _0203077E +_020306F2: + add r0, r2, #0x0 + sub r0, #0x34 + add r6, r5, r0 + sub r2, #0x34 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r5, r2] + ldr r3, [r6, #0x4] + bl _ll_mul + add r3, r0, #0x0 + add r2, r1, #0x0 + ldr r0, [r6, #0x10] + ldr r1, [r6, #0x14] + add r0, r0, r3 + adc r1, r2 + ldr r2, =0x000005F8 + str r0, [r5, r2] + mov r2, #0x0 + str r1, [r6, #0x4] + lsr r0, r1, #0x1e + lsl r1, r2, #0x2 + orr r1, r0 + cmp r1, #0x3 + bhi _02030746 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #0x6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02030730: // jump table (using 16-bit offset) + // huge hack to get the correct jump offset. Is there a way to write constants? + lsl r6, r0, #0x0 // case 0 + lsl r2, r1, #0x0 // case 1 + lsl r6, r1, #0x0 // case 2 + lsl r2, r2, #0x0 // case 3 + + // intended jump offset + // .short _02030738 - _02030730 - 2; case 0 + // .short _0203073C - _02030730 - 2; case 1 + // .short _02030740 - _02030730 - 2; case 2 + // .short _02030744 - _02030730 - 2; case 3 +_02030738: + mov r4, #0x20 + b _02030746 +_0203073C: + mov r4, #0x10 + b _02030746 +_02030740: + mov r4, #0x40 + b _02030746 +_02030744: + mov r4, #0x80 +_02030746: + ldr r0, =UNK_021C59F4 + ldr r5, [r0, #0x4] + ldr r0, =0x000005F8 + add r6, r5, r0 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r6, #0x0] + ldr r3, [r6, #0x4] + bl _ll_mul + ldr r3, [r6, #0x10] + ldr r2, [r6, #0x14] + add r0, r3, r0 + adc r2, r1 + ldr r1, =0x000005F8 + mov r3, #0x0 + str r0, [r5, r1] + str r2, [r6, #0x4] + lsr r0, r2, #0x1c + lsl r2, r3, #0x4 + orr r2, r0 + add r0, r1, #0x0 + add r0, #0x35 + strb r2, [r5, r0] + ldr r0, =UNK_021C59F4 + add r1, #0x36 + ldr r0, [r0, #0x4] + strh r4, [r0, r1] +_0203077E: + ldr r2, =UNK_021C59F4 + ldr r1, =0x00000628 + ldr r5, [r2, #0x4] + mov r0, #0xf0 + ldrh r3, [r5, r1] + bic r3, r0 + strh r3, [r5, r1] + ldr r2, [r2, #0x4] + ldrh r0, [r2, r1] + add r0, r0, r4 + strh r0, [r2, r1] +_02030794: + pop {r3-r7, pc} +} +#endif + + +THUMB_FUNC void FUN_020307A8() { + UNK_021C59F4.unk04->unk62C = 1; +} + + +THUMB_FUNC void FUN_020307BC() { + UNK_021C59F4.unk04->unk62C = 2; +} + + +THUMB_FUNC void FUN_020307D0() { + UNK_021C59F4.unk04->unk62C = 0; +} + + + +THUMB_FUNC u32 FUN_020307E4(u8 *param0, u32 param1) { + UNK_021C59F4.unk04->unk610[param1] = 0; + + u32 r7 = param0[0] & 0x10; + if (r7 == 0x10) { + + + u8 r5 = param0[0] & 0xc; + if (r5 == 0) { + UNK_021C59F4.unk04->unk610[param1] |= 0x40; + } else if (r5 == 4) { + UNK_021C59F4.unk04->unk610[param1] |= 0x80; + } else if (r5 == 8) { + UNK_021C59F4.unk04->unk610[param1] |= 0x20; + } else if (r5 == 0xc) { + UNK_021C59F4.unk04->unk610[param1] |= 0x10; + } + + UNK_021C59F4.unk04->unk620[param1] = (param0[0]>>5) & 0x7; + } + + + return 1; +} + +THUMB_FUNC void FUN_0203086C() { +} + +extern u32 FUN_02030FE0(); + + +THUMB_FUNC u32 FUN_02030870(u8 *param0) { + if (UNK_021C59F4.unk04->unk62A != 0){ + return 0; + } + + if (FUN_02030FE0() == 0) { + return 0; + } + + if (UNK_021C59F4.unk04->unk681 != 0) { + UNK_021C59F4.unk04->unk681--; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) { + param0[0] |= 0x10; + UNK_021C59F4.unk04->unk681 = 8; + } else if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) { + param0[0] |= 0x14; + UNK_021C59F4.unk04->unk681 = 8; + } else if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) { + param0[0] |= 0x18; + UNK_021C59F4.unk04->unk681 = 8; + } else if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) { + param0[0] |= 0x1c; + UNK_021C59F4.unk04->unk681 = 8; + } + + + param0[0] |= UNK_021C59F4.unk04->unk62B<<5; + + return 0; +} + + +extern u32 FUN_0202D4E4(u8 *param0); +extern u32 FUN_0202D760(u8 *param0, int *param1, u32 param2); + + +THUMB_FUNC u32 FUN_02030930(u8 *param0) { + int r5 = FUN_02031228(FUN_02033534()); + FUN_0202D858(FUN_02033534()); + + u8 r0; + if (UNK_021C59F4.unk04->unk684 == 0) { + param0[0] = 0; + } else { + param0[0] = 1; + } + + if (FUN_0202FA28() == 0) { + FUN_02030870(param0); + } + + UNK_021C59F4.unk04->unk684 = 0; + + if (FUN_0202D4E4(UNK_021C59F4.unk04->unk54C) != 0) { + param0[0] |= 2; + if (param0[0] == 2) { + return 0; + } + } else { + int st0[2]; + st0[1] = r5-1; + st0[0] = param0+1; + if (FUN_0202D760(UNK_021C59F4.unk04->unk54C, st0, 1) == 0) { + UNK_021C59F4.unk04->unk684 = 1; + } + + + if (FUN_0202FA28() == 1) { + UNK_021C59F4.unk04->unk65E++; + + param0[0] |= UNK_021C59F4.unk04->unk65E<<4 & 0xf0; + } + } + + return 1; + +} + + +THUMB_FUNC void FUN_02030A00(u8 *param0) { + param0[0] = 0xb; + if (UNK_021C59F4.unk04->unk685 == 0) { + param0[1] = 0; + } else { + param0[1] = 1; + } + + u16 res = FUN_0202CB8C(); + param0[2] = res >>8; + param0[3] = res; + + + int st0[2]; + st0[1] = 0xbb; + st0[0] = param0+5; + if (FUN_0202D760(UNK_021C59F4.unk04->unk56C, st0, 0) != 0) { + UNK_021C59F4.unk04->unk685 = 0; + param0[4] = 0xbb - st0[1]; + + return; + } + + UNK_021C59F4.unk04->unk685 = 1; + param0[4] = 0xbb; +} + +extern u32 FUN_0202D684(u8 *param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); +extern void FUN_02031454(); + +THUMB_FUNC u32 FUN_02030A78(u32 param0, u32 param1, u32 param2) { + if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) { + return 0; + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 0) != 0) { + return 1; + } + + if (FUN_02033534() == 0xa) { + FUN_02031454(); + } + + return 0; +} + + +THUMB_FUNC u32 FUN_02030ADC(u32 param0, u32 param1, u32 param2) { + if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) { + return 0; + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 1) != 0) { + return 1; + } + + if (FUN_02033534() == 0xa) { + FUN_02031454(); + } + + return 0; +} + + +THUMB_FUNC u32 FUN_02030B3C(u32 param0, u32 param1, u32 param2) { + if (FUN_02031190() != 0) { + ErrorHandling(); + return 0; + } + + + if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) { + return 0; + } + + if (FUN_0202FA28() == 1) { + return FUN_02030A78(param0, param1, param2); + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0) != 0) { + return 1; + } + + + if (FUN_02033534() == 0xa) { + FUN_02031454(); + } + + return 0; +} + + + +THUMB_FUNC u32 FUN_02030BC4(u32 param0, u32 param1, u32 param2) { + if (FUN_02031190() != 0) { + FUN_02031454(); + return 0; + } + + if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) { + return 0; + } + + if (FUN_0202FA28() == 1) { + return FUN_02030ADC(param0, param1, param2); + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 1) != 0) { + return 1; + } + + + if (FUN_02033534() == 0xa) { + FUN_02031454(); + } + + return 0; +} + + + +THUMB_FUNC u32 FUN_02030C4C(u32 param0, u32 param1) { + return FUN_02030BC4(param0, param1, 0); +} + + +THUMB_FUNC int FUN_02030C58() { + return FUN_0202D498(&UNK_021C59F4.unk04->unk464); +} + +extern void FUN_0202D934(u32 param0, u32 param1, u32 param2, u32 param3); + +THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, u32 param3, void *param4) { + FUN_0202D934(param0, param1, param2, param3); + + *(u8 *)(param4+0xa) = 0xee; + *(u16 *)(param4+0x8) = 0xffff; + *(u32 *)(param4+0x4) = 0; + *(u32 *)(param4) = 0; +} + + +extern int FUN_0202D478(s16 *param0); +extern u32 FUN_0202D41C(s16 *param0); +extern s16 FUN_0202D9A0(u32 param0); +extern u32 FUN_0202DA04(u32 param0); +extern u32 FUN_0202DA40(u32 param0, u32 param1, u16 param2); + +struct UnkStruct2 { + u32 unk00; + u32 unk04; + u16 unk08; + u8 unk0a; +}; + + + +THUMB_FUNC void FUN_02030C8C(s16 *param0, u32 param1, u32 param2, u32 param3, struct UnkStruct2 *param4) { + while (FUN_0202D478(param0) != 0) { + + + u32 r7 = param4->unk0a; + if (r7 == 0xee) { + r7 = FUN_0202D41C(param0); + if (r7 == 0xee) { + continue; + } + } + + int st10 = param0[2]; + param4->unk0a = r7; + int r4 = param4->unk08; + if (r4 == 0xffff) { + r4 = FUN_0202D9A0(r7); + + if (UNK_021C59F4.unk04->unk689 != 0) { + return; + } + + if (r4 == 0xffff) { + if (FUN_0202D478(param0) < 1) { + param0[2] = st10; + return; + } + + + r4 = FUN_0202D41C(param0) <<8; + r4 += FUN_0202D41C(param0); + + st10 = param0[2]; + } + + param4->unk08 = r4; + } + + + if (FUN_0202DA04(r7) != 0) { + if (param4->unk04 == 0) { + param4->unk04 = FUN_0202DA40(r7, param1, param4->unk08); + } + + int stc = FUN_0202D400(param0, param2, r4 - param4->unk00); + + if (param4->unk04 != 0) { + MI_CpuCopy8(param2, param4->unk04 + param4->unk00, stc); + } + + + if ((int)(param4->unk00 += stc) < (int)r4) { + continue; + } + + FUN_02030C70(param1, r7, r4, param4->unk04, param4); + } else { + if (FUN_0202D478(param0) >= r4) { + FUN_0202D400(param0, param2, r4); + FUN_02030C70(param1, r7, r4, param2, param4); + } else { + param0[2] = st10; + return; + } + } + + } +} + + + +THUMB_FUNC void FUN_02030DA4() { + if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04->unk68B == 0) { + FUN_0202D4BC(&UNK_021C59F4.unk04->unk470); + if (FUN_0202D478(&UNK_021C59F4.unk04->unk470) > 0) { + UNK_021C59F4.unk04->unk470; + + + FUN_02030C8C(&UNK_021C59F4.unk04->unk470, 0, UNK_021C59F4.unk04->unk460, 1, (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk5EC); + } + } + } +} + + +THUMB_FUNC void FUN_02030DFC() { + if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04->unk68B == 0) { + int r7 = FUN_0202D858(FUN_02033534()) + 1; + int r4; + for (r4 = 0; r4 < r7; r4++) { + FUN_0202D4BC(&UNK_021C59F4.unk04->unk4E8[r4]); + if (FUN_0202D478((s16 *)&UNK_021C59F4.unk04->unk4E8[r4]) > 0) { + + + FUN_02030C8C((s16 *)&UNK_021C59F4.unk04->unk4E8[r4], r4, UNK_021C59F4.unk04->unk460, 0, (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk58C[r4]); + } + } + } + } +} + +extern u32 MOD04_021D8018(); +extern u32 FUN_02030F40(); + + + +THUMB_FUNC u32 FUN_02030E7C(u16 param0) { + if (UNK_021C59F4.unk04 == NULL) { + return 0; + } + + + if (FUN_02033534() >= 0x13) { + if (UNK_021C59F4.unk04->unk687 != 0 && MOD04_021D8018() != 0xffffffff) { + if (param0 == 0) { + return 1; + } + + if (param0 == 1) { + return 1; + } + } + + return 0; + } + + if (FUN_02030F40() == 0) { + return 0; + } + + if (FUN_0202CBD4() != 4) { + return 0; + } + + if (FUN_02031190() == param0) { + return 1; + } + + if (FUN_02031190() == 0) { + u16 r0 = FUN_0202CB8C(); + + if ((r0 & (1<unk65C & (1<= 0x13) { + return 1; + } + + return FUN_0202EDF8(); +} + + + +THUMB_FUNC void FUN_02030F60(u8 param0) { + UNK_021C59F4.unk04->unk62B = param0; +} + + +THUMB_FUNC u8 FUN_02030F74(u32 param0) { + return UNK_021C59F4.unk04->unk620[param0]; +} + + +THUMB_FUNC u32 FUN_02030F88(u32 param0) { + if (UNK_021C59F4.unk04 == NULL) { + return 0; + } + + u32 ret = UNK_021C59F4.unk04->unk610[param0]; + UNK_021C59F4.unk04->unk610[param0] = 0; + + return ret; +} + +THUMB_FUNC void FUN_02030FA8() { + if (UNK_021C59F4.unk04 != NULL) { + UNK_021C59F4.unk04->unk628 |= 0x8000; + } +} + + +THUMB_FUNC void FUN_02030FC8() { + if (UNK_021C59F4.unk04 != NULL) { + UNK_021C59F4.unk04->unk628 = 0; + } +} + + +THUMB_FUNC u32 FUN_02030FE0() { + if (UNK_021C59F4.unk04 != NULL) { + return UNK_021C59F4.unk04->unk628 & 0x8000; + } + + return 1; +} + + + +THUMB_FUNC void FUN_02031000(u32 param0, u32 param1, u32 param2) { + if (FUN_0202FA28() == 1) { + FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 0); + return; + } + + + FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0); + +} + + +THUMB_FUNC void FUN_0203105C(u32 param0, u32 param1, u32 param2) { + FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 0, 0); +} + + +extern u32 FUN_020311D0(u32 param0, u8 *param1); + + + +THUMB_FUNC void FUN_02031088() { + if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04->unk67B != 1) { + if (UNK_021C59F4.unk04->unk67B != 3) { + return; + } + } else { + u32 res; + if (FUN_0202FA28() == 1) { + res = FUN_020311D0(0xb, &UNK_021C59F4.unk04->unk67C); + } else { + res = FUN_02030BC4(0xb, &UNK_021C59F4.unk04->unk67C, 1); + } + + if (res == 0) { + return; + } + UNK_021C59F4.unk04->unk67B = 2; + return; + + + } + + if (FUN_020311D0(0xc, &UNK_021C59F4.unk04->unk67C) != 0) { + FUN_0202F9E0(UNK_021C59F4.unk04->unk67C); + UNK_021C59F4.unk04->unk67B = 0; + } + + } +} + + +THUMB_FUNC void FUN_0203110C(u32 param0, u32 param1, u8 *param2) { + if (FUN_02031190() == 0) { + UNK_021C59F4.unk04->unk67B = 1; + UNK_021C59F4.unk04->unk67C = param2[0]; + } +} + +THUMB_FUNC void FUN_02031134(u32 param0, u32 param1, u8 *param2) { + if (FUN_02031190() != 0) { + UNK_021C59F4.unk04->unk67C = param2[0]; + UNK_021C59F4.unk04->unk67B = 3; + } +} + + +THUMB_FUNC void FUN_0203115C(u32 param0, u32 param1, u8 *param2) { + if (FUN_02031190() == 0 && UNK_021C59F4.unk04->unk67B == 2) { + FUN_0202F9E0(*param2); + UNK_021C59F4.unk04->unk67B = 0; + } +} + + +extern u16 FUN_0202D19C(); + +THUMB_FUNC u16 FUN_02031190() { + if (UNK_021C59F4.unk04 != NULL) { + if (FUN_02033534() >= 0x13) { + u32 res = MOD04_021D8018(); + if (res != 0xffffffff) { + return res; + } + } else { + if (FUN_02031280() != 0) { + return 0; + } + + return FUN_0202D19C(); + } + } + + return 0; +} + + +THUMB_FUNC u32 FUN_020311D0(u32 param0, u8 *param1) { + return FUN_02030ADC(param0, param1, 0); +} + + +THUMB_FUNC u32 FUN_020311DC(u32 param0) { + return FUN_02030ADC(param0, 0, 0); +} + + +THUMB_FUNC u32 FUN_020311E8() { + return FUN_0202EE24(); +} + + +extern void FUN_020334E8(u32 param0, u32 param1); +extern u32 FUN_0202EE60(); + +THUMB_FUNC u32 FUN_020311F0() { + if (FUN_02031280() != 0) { + return 0; + } + + if (UNK_021C59F4.unk04 != NULL && UNK_021C59F4.unk04->unk689 != 0) { + FUN_020334E8(1, 1); + return 1; + } + + return FUN_0202EE60(); +} + + + +THUMB_FUNC int FUN_02031228(u16 param0) { + if (FUN_0202D858(param0) >= 5) { + return 0xc; + } + + if (FUN_0202FA28() == 0) { + return 0xc; + } + + return 0x26; +} + +THUMB_FUNC u32 FUN_02031248(u32 param0) { + return FUN_0202D858(param0) +1; +} + +extern u32 FUN_0202D884(u16 param0); + + + +THUMB_FUNC u32 FUN_02031258(u32 param0) { + return FUN_0202D884(param0) +1; +} + +THUMB_FUNC void FUN_02031268(u8 param0) { + if (UNK_021C59F4.unk04 != NULL) { + UNK_021C59F4.unk04->unk686 = param0; + } +} + +THUMB_FUNC u8 FUN_02031280() { + if (UNK_021C59F4.unk04 != NULL) { + return UNK_021C59F4.unk04->unk686; + } + + return 0; +} + +extern void FUN_0202F05C(); + +THUMB_FUNC void FUN_0203129C() { + if (FUN_0202F03C() == 0 && FUN_02031190() == 0) { + u32 st0; + FUN_02030C4C(2, &st0); + } + + FUN_0202F05C(); +} + +extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *); + + +#ifdef NONMATCHING +THUMB_FUNC void FUN_020312BC(u32 param0) { + RTCDate st10; + RTCTime st4; + GF_RTC_CopyDateTime(&st10, &st4); + + gMain.unk2C + st4.second; + u32 r6 = st10.year<<4 + st10.month; + u32 r5 = 0<<4 | st10.year>>0x1c; + st4.second; + + u32 st0 = st10.day; + st4.hour; + st4.minute; + + 0x00000000; + (0x00000000 + r5) <<5; + + +} +#else +THUMB_FUNC asm void FUN_020312BC(u32 param0) { + push {r3-r7, lr} + sub sp, #0x20 + add r4, r0, #0x0 + add r0, sp, #0x10 + add r1, sp, #0x4 + bl GF_RTC_CopyDateTime + ldr r0, =gMain + ldr r6, [sp, #0x10] + mov r5, #0x0 + lsr r7, r6, #0x1c + lsl r5, r5, #0x4 + ldr r1, [sp, #0xc] + ldr r0, [r0, #0x2c] + lsl r6, r6, #0x4 + add r3, r1, r0 + ldr r0, [sp, #0x18] + orr r5, r7 + str r0, [sp, #0x0] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x4] + add r6, r0, r6 + ldr r0, =0x00000000 + ldr r2, [sp, #0x8] + adc r0, r5 + lsr r5, r6, #0x1b + lsl r0, r0, #0x5 + orr r0, r5 + ldr r5, [sp, #0x0] + lsl r6, r6, #0x5 + add r6, r5, r6 + ldr r5, =0x00000000 + adc r5, r0 + lsr r0, r6, #0x1b + lsl r5, r5, #0x5 + orr r5, r0 + lsl r0, r6, #0x5 + add r6, r1, r0 + ldr r1, =0x00000000 + adc r1, r5 + lsr r0, r6, #0x1a + lsl r1, r1, #0x6 + orr r1, r0 + lsl r0, r6, #0x6 + add r5, r2, r0 + ldr r2, =0x00000000 + adc r2, r1 + lsr r0, r5, #0x1a + lsl r1, r2, #0x6 + orr r1, r0 + lsl r0, r5, #0x6 + add r2, r3, r0 + ldr r0, =0x00000000 + str r2, [r4, #0x0] + adc r0, r1 + str r0, [r4, #0x4] + ldr r1, =0x6C078965 + ldr r0, =0x5D588B65 + str r1, [r4, #0x8] + str r0, [r4, #0xc] + ldr r0, =0x00269EC3 + str r0, [r4, #0x10] + mov r0, #0x0 + str r0, [r4, #0x14] + add sp, #0x20 + pop {r3-r7, pc} +} +#endif + +extern void FUN_0202D830(u8 *param0, u32 param1); + +THUMB_FUNC void FUN_02031354(u32 param0) { + FUN_0202D830(UNK_021C59F4.unk04->unk56C, param0); +} + + +THUMB_FUNC u32 FUN_02031370() { + return FUN_0202D4E4(UNK_021C59F4.unk04->unk56C); +} + +THUMB_FUNC u32 FUN_02031388() { + return FUN_0202D4E4(UNK_021C59F4.unk04->unk54C); +} + +THUMB_FUNC void FUN_020313A0(u8 param0) { + UNK_021C59F4.unk04->unk687 = param0; +} + +THUMB_FUNC void FUN_020313B4(u8 param0, u32 param1) { + if (UNK_021C59F4.unk04 != NULL) { + UNK_021C59F4.unk04->unk677[param1] = param0; + } +} + +THUMB_FUNC u32 FUN_020313CC(u32 param0) { + if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04->unk677[param0] != 0xff) { + return UNK_021C59F4.unk04->unk677[param0]; + } + } + + return param0; +} + +extern u32 MOD04_021D8624(); + +THUMB_FUNC u32 FUN_020313EC() { + if (FUN_02033534() < 0x13) { + return 0; + } + + return MOD04_021D8624(); +} + +THUMB_FUNC void FUN_02031400(u32 param0) { + if (FUN_02033534() >= 0x13) { + UNK_021C59F4.unk04->unk630 = param0; + if (param0 != 0) { + UNK_021C59F4.unk04->unk634 = 0; + UNK_021C59F4.unk04->unk638[0] = 0; + UNK_021C59F4.unk04->unk638[1] = 0; + } + } +} + + +THUMB_FUNC u32 FUN_02031438() { + if (UNK_021C59F4.unk04->unk681 != 0) { + return 1; + } + + return 0; +} + + +THUMB_FUNC void FUN_02031454() { + UNK_021C59F4.unk04->unk689 = 1; +} + +THUMB_FUNC void FUN_02031468() { + if (UNK_021C59F4.unk04 != NULL) { + UNK_021C59F4.unk04->unk68A = 1; + } +} \ No newline at end of file diff --git a/arm9/src/unk_0202F150_c.c b/arm9/src/unk_0202F150_c.c deleted file mode 100644 index 162761a8..00000000 --- a/arm9/src/unk_0202F150_c.c +++ /dev/null @@ -1,1290 +0,0 @@ -#include "global.h" -#include "MI_memory.h" -#include "heap.h" -#include "main.h" - -struct -{ - u8 unk00; - struct UnkStruct1 *unk04; -} UNK_021C59F4; - -// struct UnkStruct2 { -// u8 unk00; -// u8 unk01; -// }; - -vu8 UNK_02105D58 = 4; -vu8 UNK_02105D59 = 4; - -extern int FUN_02033534(); -extern int FUN_0202D858(u16 param0); -extern void FUN_02031480(u32 param0); -extern void FUN_0202D7D8(u32 *param0, u32 param1, u32 param2); -extern void FUN_0202F2F0(); -extern void FUN_020312BC(u32 param0); -extern void FUN_0202FB20(); - -extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2); -extern void FUN_0202D394(u32 param0, u32 param1, u32 param2); - -extern void FUN_0202D804(u32 *param0); -extern u32 FUN_02030E7C(u16 param0); - -struct UnkStruct1 -{ - u8 unk000[2][38]; - // u8 unk026[38]; - u8 unk04c[264]; - u8 unk154[2][192]; - // u8 unk214[192]; - u8 unk2D4[384]; - u32 unk454; - u32 unk458; - u32 unk45C; - u32 unk460; - u32 unk464; - u8 unk468[0x8]; - u32 unk470; - u8 unk474[0x8]; - struct - { - u32 unk00; - u32 unk04; - u32 unk08; - } unk47C[8]; - u32 unk4DC; - u8 unk4E0[0x8]; - struct - { - u32 unk00; - u32 unk04; - u32 unk08; - } unk4E8[8]; - u32 unk548; - u8 unk54C[32]; - u8 unk56C[32]; - struct - { - u32 unk00; - u32 unk04; - u16 unk08; - u8 unk0a; - u8 unk0b; - } unk58C[8]; - u32 unk5EC; - u32 unk5F0; - u16 unk5F4; - u8 unk5F6; - u8 unk5F7; - u32 unk5F8; - u8 unk5FC[0x14]; - u16 unk610[8]; - u8 unk620[0x8]; - u16 unk628; - u8 unk62A[0x2]; - u8 unk62C; - u8 unk62D; - u8 unk62E[0x2]; - u32 unk630; - u32 unk634; - u32 unk638[8]; - u32 unk658; - u16 unk65C; - u8 unk65E; - u8 unk65F[8]; - u8 unk667[8]; - u8 unk66F[8]; - u8 unk677[4]; - u8 unk67B[0x2]; - u8 unk67D; - u8 unk67E; - u8 unk67F; - u8 unk680; - u8 unk681; - u8 unk682; - u8 unk683; - u8 unk684; - u8 unk685; - u8 unk686; - u8 unk687; - u8 unk688; - u8 unk689; - u8 unk68A; - u8 unk68B; -}; - -THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) -{ - u32 r4 = 0; - UNK_021C59F4.unk00 = 0; - if (param0 != 0) - { - u32 res = FUN_0202D858(FUN_02033534()) + 1; - - if (UNK_021C59F4.unk04 != 0) - { - return 1; - } - - FUN_02031480(0xf); - struct UnkStruct1 *ptr = (struct UnkStruct1 *)AllocFromHeap(0xf, 0x68C); - UNK_021C59F4.unk04 = ptr; - MI_CpuFill8(ptr, 0, 0x68C); - - UNK_021C59F4.unk04->unk658 = param1 + 0x40; - UNK_021C59F4.unk04->unk67D = 0; - UNK_021C59F4.unk04->unk67E = 0x1b; - - UNK_021C59F4.unk04->unk45C = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658 << 1); - - UNK_021C59F4.unk04->unk460 = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658); - - UNK_021C59F4.unk04->unk458 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); - - UNK_021C59F4.unk04->unk454 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); - - if (FUN_02033534() == 0xa) - { - FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x64, &UNK_021C59F4.unk04->unk464); - FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x32 << 4, &UNK_021C59F4.unk04->unk4DC); - } - else - { - FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x14, &UNK_021C59F4.unk04->unk464); - FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x1b + 0xfd, &UNK_021C59F4.unk04->unk4DC); - } - } - else - { - - r4 = 1; - if (UNK_021C59F4.unk04 == 0) - { - ErrorHandling(); - } - } - - UNK_021C59F4.unk04->unk65C = 0; - - for (int i = 0; i < 4; i++) - { - UNK_021C59F4.unk04->unk677[i] = 0xff; - } - - if (r4 == 0) - { - FUN_0202F2F0(); - } - - FUN_020312BC(&UNK_021C59F4.unk04->unk5F8); - - if (r4 == 0) - { - u32 res2 = FUN_0200CA60(FUN_0202FB20, 0, 0); - - UNK_021C59F4.unk04->unk548 = res2; - } - - UNK_021C59F4.unk04->unk687 = 0; - - return 1; -} - -THUMB_FUNC void FUN_0202F2F0() -{ - UNK_021C59F4.unk04->unk62C = 0; - UNK_021C59F4.unk04->unk62D = 0; - UNK_021C59F4.unk04->unk67F = 0; - UNK_021C59F4.unk04->unk680 = 0; - - s32 res = FUN_0202D858(FUN_02033534()) + 1; - - MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); - - int i; - for (i = 0; i < res; i++) - { - FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], - UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, - UNK_021C59F4.unk04->unk658); - } - - MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); - - for (i = 0; i < res; i++) - { - FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], - UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, - UNK_021C59F4.unk04->unk658); - } - - MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); - FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); - - for (i = 0; i < 0xc0; i++) - { - UNK_021C59F4.unk04->unk154[0][i] = 0xee; - UNK_021C59F4.unk04->unk154[1][i] = 0xee; - } - - MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); - FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); - - UNK_021C59F4.unk04->unk000[0][0] = 0xff; - UNK_021C59F4.unk04->unk000[1][0] = 0xff; - - for (i = 1; i < 0x26; i++) - { - UNK_021C59F4.unk04->unk000[0][i] = 0xee; - UNK_021C59F4.unk04->unk000[1][i] = 0xee; - } - - MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); - - FUN_0202D394( - &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); - - UNK_021C59F4.unk04->unk684 = 0; - UNK_021C59F4.unk04->unk685 = 0; - - for (i = 0; i < 8; i++) - { - UNK_021C59F4.unk04->unk65F[i] = 0; - UNK_021C59F4.unk04->unk667[i] = 1; - UNK_021C59F4.unk04->unk66F[i] = 1; - UNK_021C59F4.unk04->unk610[i] = 0; - - UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; - UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; - UNK_021C59F4.unk04->unk58C[i].unk04 = 0; - UNK_021C59F4.unk04->unk58C[i].unk00 = 0; - - UNK_021C59F4.unk04->unk638[i] = 0; - } - - UNK_021C59F4.unk04->unk634 = 0; - UNK_021C59F4.unk04->unk630 = 1; - UNK_021C59F4.unk04->unk5F6 = 0xee; - UNK_021C59F4.unk04->unk5F4 = 0xffff; - UNK_021C59F4.unk04->unk5F0 = 0; - UNK_021C59F4.unk04->unk5EC = 0; - UNK_021C59F4.unk04->unk682 = 1; - UNK_021C59F4.unk04->unk683 = 1; - - UNK_02105D59 = 4; - UNK_02105D58 = 4; - - FUN_0202D804(UNK_021C59F4.unk04->unk54C); - FUN_0202D804(UNK_021C59F4.unk04->unk56C); - - UNK_021C59F4.unk04->unk688 = 0; -} - -THUMB_FUNC void FUN_0202F5A4() -{ - UNK_021C59F4.unk04->unk62C = 0; - UNK_021C59F4.unk04->unk62D = 0; - - s32 res = FUN_0202D858(FUN_02033534()) + 1; - - MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); - - int i; - for (i = 0; i < res; i++) - { - FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], - UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, - UNK_021C59F4.unk04->unk658); - } - - MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); - - for (i = 0; i < res; i++) - { - FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], - UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, - UNK_021C59F4.unk04->unk658); - } - - MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); - FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); - - for (i = 0; i < 0xc0; i++) - { - UNK_021C59F4.unk04->unk154[0][i] = 0xee; - UNK_021C59F4.unk04->unk154[1][i] = 0xee; - } - - MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); - FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); - - UNK_021C59F4.unk04->unk000[0][0] = 0xff; - UNK_021C59F4.unk04->unk000[1][0] = 0xff; - - for (i = 1; i < 0x26; i++) - { - UNK_021C59F4.unk04->unk000[0][i] = 0xee; - UNK_021C59F4.unk04->unk000[1][i] = 0xee; - } - - MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); - FUN_0202D394( - &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); - - UNK_021C59F4.unk04->unk684 = 0; - UNK_021C59F4.unk04->unk685 = 0; - - for (i = 0; i < 8; i++) - { - UNK_021C59F4.unk04->unk65F[i] = 0; - UNK_021C59F4.unk04->unk667[i] = 1; - UNK_021C59F4.unk04->unk66F[i] = 1; - UNK_021C59F4.unk04->unk610[i] = 0; - - UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; - UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; - UNK_021C59F4.unk04->unk58C[i].unk04 = 0; - UNK_021C59F4.unk04->unk58C[i].unk00 = 0; - } - - UNK_021C59F4.unk04->unk630 = 1; - UNK_021C59F4.unk04->unk5F6 = 0xee; - UNK_021C59F4.unk04->unk5F4 = 0xffff; - UNK_021C59F4.unk04->unk5F0 = 0; - UNK_021C59F4.unk04->unk5EC = 0; - UNK_021C59F4.unk04->unk682 = 1; - UNK_021C59F4.unk04->unk683 = 1; - - FUN_0202D804(UNK_021C59F4.unk04->unk54C); - FUN_0202D804(UNK_021C59F4.unk04->unk56C); - - UNK_021C59F4.unk04->unk688 = 0; -} - -THUMB_FUNC void FUN_0202F820(u32 param0) -{ - UNK_021C59F4.unk04->unk65F[param0] = 0; - - UNK_021C59F4.unk04->unk667[param0] = 1; - - UNK_021C59F4.unk04->unk638[param0] = 0; - - UNK_021C59F4.unk04->unk66F[param0] = 1; - - FUN_0202D394(&UNK_021C59F4.unk04->unk47C[param0], - UNK_021C59F4.unk04->unk454 + param0 * UNK_021C59F4.unk04->unk658, - UNK_021C59F4.unk04->unk658); - - FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[param0], - UNK_021C59F4.unk04->unk458 + param0 * UNK_021C59F4.unk04->unk658, - UNK_021C59F4.unk04->unk658); - - UNK_021C59F4.unk04->unk58C[param0].unk0a = 0xee; - UNK_021C59F4.unk04->unk58C[param0].unk08 = 0xffff; - UNK_021C59F4.unk04->unk58C[param0].unk04 = 0; - UNK_021C59F4.unk04->unk58C[param0].unk00 = 0; -} - -extern u32 FUN_02031280(); - -THUMB_FUNC void FUN_0202F8D4() -{ - for (int i = 1; i < 8; i++) - { - if (FUN_02030E7C(i) == 0 && UNK_021C59F4.unk04->unk667[i] == 0 && FUN_02031280() == 0) - { - FUN_0202F820(i); - } - } -} - -THUMB_FUNC void FUN_0202F910(u32 param0) -{ - FUN_0202F820(param0); -} - -extern u32 FUN_0202E5F8(u32 param0, u32 param1, u32 param2); -extern void FUN_0202D330(void (*param0)(u32)); - -THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) -{ - u32 ret = 1; - if (FUN_02033534() < 0x13) - { - ret = FUN_0202E5F8(param0, param1, param3); - FUN_0202D330(FUN_0202F910); - } - - FUN_0202F150(param0, param2); - - return ret; -} - -extern u32 FUN_0202E66C(u32 param0, u32 param1); - -THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) { - u32 ret = 1; - if (FUN_02033534() < 0x13) - { - ret = FUN_0202E66C(param0, param1); - } - - FUN_0202F150(param0, param2); - - UNK_02105D58 = 4; - - return ret; -} - -extern u16 FUN_02031190(); -extern void FUN_02031088(); - - - - - -THUMB_FUNC void FUN_0202F984() { - u32 r4 = 0; - if (FUN_02031190() == 0 ) { - if (UNK_02105D59 != 4) { - return; - } - } else { - if (UNK_02105D58 != 4) { - return; - } - } - - if (UNK_021C59F4.unk04->unk67D == 2) { - UNK_021C59F4.unk04->unk67D = 0; - r4 = 1; - } - - if (UNK_021C59F4.unk04->unk67D == 3) { - UNK_021C59F4.unk04->unk67D = 1; - r4 = 1; - } - - if (r4 != 0) { - FUN_0202F5A4(); - } - FUN_02031088(); -} - - - - -THUMB_FUNC void FUN_0202F9E0(u32 param0) { - u8 r2 = UNK_021C59F4.unk04->unk67D; - if (r2 == 0 && param0 == 1) { - UNK_021C59F4.unk04->unk67D = 3; - } else if (r2 == 1 && param0 == 0) { - UNK_021C59F4.unk04->unk67D = 2; - } -} - - -THUMB_FUNC void FUN_0202FA10() { - FUN_0202F9E0(1); -} - - -THUMB_FUNC void FUN_0202FA1C() { - FUN_0202F9E0(0); -} - - - -THUMB_FUNC u8 FUN_0202FA28() { - u8 ret = UNK_021C59F4.unk04->unk67D; - if (ret == 2){ - return 1; - } else if (ret == 3) { - return 0; - } - - return ret; -} - -THUMB_FUNC u32 FUN_0202FA48() { - if (FUN_0202FA28() == 1) { - return 1; - } - - return 0; -} - -extern void MOD04_021D83C0(); -extern u32 FUN_0202E784(); -extern void FUN_020314D0(); -extern void FUN_0202DBA4(); -extern void FUN_0200CAB4(u32 param0); -extern void FUN_0202D824(u32 *param0); - -THUMB_FUNC void FUN_0202FA5C() { - u32 r4 = 0; - if (UNK_021C59F4.unk04 != 0) { - if (FUN_02033534() >= 0x13) { - MOD04_021D83C0(); - r4 = 1; - } else { - if (FUN_0202E784() != 0) { - r4 = 1; - } - } - } - - if (r4 != 0) { - FUN_020314D0(); - FUN_0202DBA4(); - UNK_021C59F4.unk00 = 0; - - FUN_0200CAB4(UNK_021C59F4.unk04->unk548); - UNK_021C59F4.unk04->unk548 = 0; - FreeToHeap(UNK_021C59F4.unk04->unk45C); - FreeToHeap(UNK_021C59F4.unk04->unk460); - FreeToHeap(UNK_021C59F4.unk04->unk458); - FreeToHeap(UNK_021C59F4.unk04->unk454); - FUN_0202D824(UNK_021C59F4.unk04->unk56C); - FUN_0202D824(UNK_021C59F4.unk04->unk54C); - FreeToHeap(UNK_021C59F4.unk04); - UNK_021C59F4.unk04 = NULL; - } -} - -extern u32 FUN_0202E9E8(u32 param0); - -THUMB_FUNC u32 FUN_0202FB18(u32 param0) { - return FUN_0202E9E8(param0); -} - - -extern void FUN_0203050C(); -extern void FUN_0202FEEC(); -extern u32 FUN_0202F03C(); -extern u32 FUN_0202EE24(); - - - -THUMB_FUNC void FUN_0202FB20() { - if (UNK_021C59F4.unk00 != 0) { - FUN_0203050C(); - if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ - FUN_0202FEEC(); - } - - UNK_021C59F4.unk00 = 0; - } -} - -THUMB_FUNC void FUN_0202FB58() { - if (FUN_0202F03C() != 0) { - if (FUN_02031190() == 0 ) { - if (FUN_0202EE24() == 0) { - FUN_0202FA5C(); - } - } else { - FUN_0202FA5C(); - } - } -} - -extern void FUN_02031CDC(); -extern void FUN_02030674(); -extern void FUN_0202FCCC(); -extern void FUN_02030DA4(); -extern void FUN_02030074(); -extern void FUN_02030DFC(); -extern void FUN_0202EBD0(u16 param0); -extern void FUN_0202ED70(u32 param0); -extern void FUN_020335F4(u32 param0); -extern void FUN_020315A4(); - - - -THUMB_FUNC u32 FUN_0202FB80() { - FUN_02031CDC(); - - if (UNK_021C59F4.unk04 != NULL) { - if (UNK_021C59F4.unk04->unk68A == 0) { - UNK_021C59F4.unk00 = 0; - FUN_0202F984(); - UNK_021C59F4.unk04->unk628 |= gMain.unk44 & 0x7FFF; - FUN_02030674(); - FUN_0202FCCC(); - - UNK_021C59F4.unk04->unk628 &= 2<<0xe; - if (FUN_0202FA28() == 0) { - FUN_02030DA4(); - } - - if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ - FUN_02030074(); - } - - if (FUN_02031190() == 0 || FUN_0202FA28() == 1 || FUN_02031280() != 0) { - FUN_02030DFC(); - } - - UNK_021C59F4.unk00 = 1; - } - - - FUN_0202ED70(UNK_021C59F4.unk04->unk65C); - - if (FUN_02031190() == 0) { - FUN_0202F8D4(); - } - - FUN_0202FB58(); - } else { - FUN_0202ED70(0); - } - - - FUN_020335F4(0); - FUN_020315A4(); - - return 1; -} - - -THUMB_FUNC void FUN_0202FC60() { - u8 r4 = UNK_021C59F4.unk00; - - UNK_021C59F4.unk00 = 0; - - if (UNK_021C59F4.unk04 != NULL) { - FUN_0202F2F0(); - } - - UNK_021C59F4.unk00 = r4; -} - - -THUMB_FUNC void FUN_0202FC80() { - u8 r4 = UNK_021C59F4.unk00; - - UNK_021C59F4.unk00 = 0; - - if (UNK_021C59F4.unk04 != NULL) { - UNK_021C59F4.unk04->unk67D = 1; - FUN_0202F2F0(); - } - - UNK_021C59F4.unk00 = r4; -} - - -extern void FUN_0202E538(); - - -THUMB_FUNC void FUN_0202FCA8() { - u8 r4 = UNK_021C59F4.unk00; - - UNK_021C59F4.unk00 = 0; - - if (UNK_021C59F4.unk04 != NULL) { - FUN_0202F2F0(); - FUN_0202E538(); - } - - UNK_021C59F4.unk00 = r4; -} - - -extern u32 MOD04_021D78FC(void *param0, u32 param1); -extern u32 FUN_0202CBD4(); -extern u32 FUN_02030930(void *param0); - - - -THUMB_FUNC void FUN_0202FCCC() { - if (UNK_021C59F4.unk04->unk683 != 0 ) { - if (FUN_02033534() >= 0x13) { - if (UNK_021C59F4.unk04->unk687 == 0 || MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { - return; - } - - UNK_021C59F4.unk04->unk683 = 0; - return; - } - - if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { - if (FUN_02031280() == 0) { - return; - } - } - - UNK_02105D58 = 0; - FUN_0203050C(); - if (UNK_02105D58 == 0) { - return; - } - - UNK_021C59F4.unk04->unk683 = 0; - return; - } - - - if (FUN_02033534() >= 0x13) { - if (UNK_021C59F4.unk04->unk687 == 0) { - return; - } - - if (UNK_021C59F4.unk04->unk630 != 0){ - if ((int)UNK_021C59F4.unk04->unk634 > 3) { - return; - } - - if (UNK_02105D58 == 4) { - FUN_02030930(UNK_021C59F4.unk04); - UNK_02105D58 = 2; - } - } else { - if (UNK_02105D58 == 4) { - if (FUN_02030930(UNK_021C59F4.unk04) == 0) { - return; - } - - UNK_02105D58 = 2; - } - } - - - if (MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { - return; - } - - UNK_02105D58 = 4; - UNK_021C59F4.unk04->unk634++; - return; - } - - - if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { - if (FUN_02031280() == 0) { - return; - } - } - - if (UNK_02105D58 != 4) { - return; - } - - - - //nonmatching - if ((int)UNK_021C59F4.unk04->unk634 > 3) { - return; - } - - FUN_02030930(&UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F]); - - FUN_02030930(&UNK_021C59F4.unk04->unk000[1-UNK_021C59F4.unk04->unk67F]); - - UNK_02105D58 = 0; - FUN_0203050C(); -} - -extern int FUN_02031228(u16 param0); -extern void FUN_0202D4BC(void *param0); -extern int FUN_0202D400(u32 param0, u32 param1, u32 param2); - - - - - -THUMB_FUNC u32 FUN_0202FE2C(int param0); - -#ifdef NONMATCHING -THUMB_FUNC u32 FUN_0202FE2C(int param0) { - - // these 3 variables are shuffled on the stack, everything else matches - int st4 = 0; - int stc = FUN_02031228(FUN_02033534()); - int st8 = FUN_0202D858(FUN_02033534()) + 1; - - - for (int r7 = 0; r7 < st8 ; r7++) { - - FUN_0202D4BC(&UNK_021C59F4.unk04->unk47C[r7]); - - if (FUN_02030E7C(r7) != 0) { - UNK_021C59F4.unk04->unk154[param0][r7*stc] = 0xe; - } - - FUN_0202D400(&UNK_021C59F4.unk04->unk47C[r7], &UNK_021C59F4.unk04->unk154[param0][r7*stc], stc); - - if (UNK_021C59F4.unk04->unk154[param0][r7*stc] == 0xe) { - st4++; - } - } - - if (st4 == st8) { - return 0; - } - - return 1; -} -#else -THUMB_FUNC asm u32 FUN_0202FE2C(int param0) { - push {r3-r7, lr} - sub sp, #0x10 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - str r0, [sp, #0xc] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r0, r0, #0x1 - mov r7, #0x0 - str r0, [sp, #0x8] - cmp r0, #0x0 - ble _0202FED0 - ldr r0, [sp, #0x0] - mov r1, #0xc0 - add r6, r0, #0x0 - add r4, r7, #0x0 - add r5, r7, #0x0 - mul r6, r1 -_0202FE66: - ldr r0, =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, =0x0000047C - add r0, r1, r0 - add r0, r0, r4 - bl FUN_0202D4BC - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - beq _0202FE90 - ldr r0, =UNK_021C59F4 - mov r1, #0xe - ldr r0, [r0, #0x4] - add r0, r6, r0 - add r2, r5, r0 - mov r0, #0x55 - lsl r0, r0, #0x2 - strb r1, [r2, r0] -_0202FE90: - ldr r0, =UNK_021C59F4 - mov r2, #0x55 - ldr r1, [r0, #0x4] - ldr r0, =0x0000047C - lsl r2, r2, #0x2 - add r0, r1, r0 - add r1, r1, r2 - add r1, r1, r6 - ldr r2, [sp, #0xc] - add r0, r0, r4 - add r1, r1, r5 - bl FUN_0202D400 - ldr r0, =UNK_021C59F4 - ldr r0, [r0, #0x4] - add r0, r6, r0 - add r1, r5, r0 - mov r0, #0x55 - lsl r0, r0, #0x2 - ldrb r0, [r1, r0] - cmp r0, #0xe - bne _0202FEC2 - ldr r0, [sp, #0x4] - add r0, r0, #0x1 - str r0, [sp, #0x4] -_0202FEC2: - ldr r0, [sp, #0xc] - add r7, r7, #0x1 - add r5, r5, r0 - ldr r0, [sp, #0x8] - add r4, #0xc - cmp r7, r0 - blt _0202FE66 -_0202FED0: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x8] - cmp r1, r0 - bne _0202FEDE - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} -_0202FEDE: - mov r0, #0x1 - add sp, #0x10 - pop {r3-r7, pc} -} -#endif - - -extern void FUN_020304F0(u32 param0); -extern u32 FUN_0202D0D0(void *, u16 param1, u32 param2, void (*param3)(u32)); -extern void FUN_0203026C(u32 param0,u8 *param1, u32 param2); - - -THUMB_FUNC void FUN_0202FEEC() { - if (UNK_021C59F4.unk04 == NULL || FUN_02033534() >= 0x13) { - return; - } - - int st0 = FUN_02031228(FUN_02033534()); - int r6 = FUN_0202D858(FUN_02033534())+1; - - if (UNK_02105D59 == 2 || UNK_02105D59 == 0){ - - UNK_02105D59++; - - if (FUN_0202FA28() == 1) { - FUN_0202FE2C(UNK_021C59F4.unk04->unk680); - } - - if (FUN_0202CBD4() == 4 && FUN_02031280() == 0) { - - if (FUN_0202D0D0(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0, 0xe, FUN_020304F0) == 0) { - UNK_02105D59--; - } - } - - int i; - if (UNK_02105D59 == 1 || UNK_02105D59 == 3) { - for (i = 0; i < r6; i++) { - if (FUN_02030E7C(i) != 0) { - UNK_021C59F4.unk04->unk638[i]++; - } else if (FUN_02031280() != 0 && i == 0) { - UNK_021C59F4.unk04->unk638[i]++; - } - } - - - FUN_0203026C(0, UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0); - - UNK_021C59F4.unk04->unk680 = 1 - UNK_021C59F4.unk04->unk680; - } - - - - for (i = 0; i < r6; i++) { - if (FUN_02030E7C(i) == 0 && FUN_0202FA28() == 1) { - UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680][i *st0] = 0xff; - } - } - - - if (FUN_0202CBD4() != 4 || FUN_02031280() != 0) { - UNK_02105D59++; - } - } -} - - -extern u32 MOD04_021D79B4(void *param0, u32 param1); -extern void FUN_02030A00(void *param0); - - - -THUMB_FUNC void FUN_02030074() { - if (UNK_021C59F4.unk04->unk683 != 0) { - if (FUN_02033534() >= 0x13) { - if (FUN_02030E7C(0) != 0 && MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) != 0) { - UNK_021C59F4.unk04->unk683 = 0; - return; - } - } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { - FUN_0202FEEC(); - if (UNK_02105D59 == 2) { - UNK_021C59F4.unk04->unk683 = 0; - return; - } - } - } - - if (FUN_02033534() >= 0x13) { - if (FUN_02030E7C(0) != 0) { - if (UNK_021C59F4.unk04->unk630 != 0) { - if ((int)UNK_021C59F4.unk04->unk638[1] > 3 || (int)UNK_021C59F4.unk04->unk638[0] > 3) { - return; - } - - if (UNK_02105D59 == 4) { - if (FUN_0202FA28() == 1) { - FUN_0202FE2C(0); - } - - UNK_02105D59 = 2; - } - } else { - if (UNK_02105D59 == 4 ) { - if (FUN_0202FA28() == 1) { - if (FUN_0202FE2C(0) == 0) { - return; - } - } - } - - - UNK_02105D59 = 2; - } - - - - if (MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) == 0) { - return; - } - - UNK_02105D59 = 4; - UNK_021C59F4.unk04->unk638[0]++; - UNK_021C59F4.unk04->unk638[1]++; - } - } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { - if (UNK_02105D59 == 4) { - for (int r4 = 1; r4 < 8; r4++) - { - if (FUN_02030E7C(r4) != 0) { - if ((int)UNK_021C59F4.unk04->unk638[r4] > 3) { - return; - } - } else if (r4 == 0) { - if (FUN_02031280() != 0) { - if ((int)UNK_021C59F4.unk04->unk638[0] > 3) { - return; - } - } - } - } - - - if (FUN_0202FA28() == 0) { - FUN_02030A00(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680]); - FUN_02030A00(UNK_021C59F4.unk04->unk154[1-UNK_021C59F4.unk04->unk680]); - } - - - UNK_02105D59 = 0; - FUN_0202FEEC(); - } - } -} - - - -THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) { - if (UNK_021C59F4.unk04->unk66F[0] != 0) { - UNK_021C59F4.unk04->unk634--; - UNK_021C59F4.unk04->unk66F[0] = 0; - return; - } - - FUN_0203026C(param0, param1, param2); -} - -extern void FUN_0202D3A4(void *param0, u8 *param1, u32 param2, u32 param3); - - - -THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) { - UNK_021C59F4.unk04->unk634--; - if (param1 == 0) { - return; - } - - if (param1[0] == 0xb) { - if (FUN_0202FA28() == 1) { - return; - } - param1++; - } else { - if (FUN_0202FA28() == 0) { - return; - } - } - - - if (UNK_021C59F4.unk04->unk682 != 0) { - if ((param1[0] & 1) != 0) { - return; - } - } - - UNK_021C59F4.unk04->unk682 = 0; - if (FUN_0202FA28() == 1) { - int r6 = FUN_02031228(FUN_02033534()); - int st4 = FUN_0202D858(FUN_02033534())+1; - - int r4 = 0; - while (r4 < st4) { - u32 new; - if (param1[0] == 0xff) { - new = UNK_021C59F4.unk04->unk65C & ~(1<unk65C | (1<unk65C = new; - - if (param1[0] == 0xff) { - param1 += r6; - } else if (param1[0] == 0xe){ - param1 += r6; - } else if (UNK_021C59F4.unk04->unk667[r4] != 0 && (param1[0] & 1) != 0) { - param1 += r6; - } else { - param1++; - FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, r6-1, 0x5E6); - - param1 += r6-1; - UNK_021C59F4.unk04->unk667[r4] = 0; - } - - - r4++; - } - - return; - } - - - UNK_021C59F4.unk04->unk65C = param1[1]; - UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C << 8; - - UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C + param1[2]; - FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1+4, param1[3], 0x5FF); -} - -extern void FUN_020303F4(u32 param0, u8 *param1, u16 param2); - - -THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) { - if (UNK_021C59F4.unk04->unk66F[param0] != 0) { - - UNK_021C59F4.unk04->unk638[param0]--; - UNK_021C59F4.unk04->unk66F[param0] = 0; - return; - } - - FUN_020303F4(param0, param1, param2); -} - -extern void FUN_020307E4(u8 *param0, u32 param1); -extern int FUN_0202D498(void *param0); - - - -THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) { - UNK_021C59F4.unk04->unk638[param0]--; - if (param1 == 0) { - return; - } - - if (UNK_021C59F4.unk04->unk667[param0] != 0 && (param1[0] & 1) != 0) { - return; - } - - UNK_021C59F4.unk04->unk667[param0] = 0; - if (FUN_0202FA28() == 1) { - int r6 = FUN_02031228(FUN_02033534()); - FUN_0202D858(FUN_02033534()); - - if ((param1[0] & 2) == 0) { - FUN_0202D3A4(&UNK_021C59F4.unk04->unk47C[param0], param1, r6, 0x65E); - } - - UNK_021C59F4.unk04->unk65F[param0]++; - return; - } - - - FUN_020307E4(param1, param0); - - if ((param1[0] & 2) == 0 && FUN_0202D498(&UNK_021C59F4.unk04->unk4E8[param0]) >= 0xb) { - FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[param0], param1 +1, 0xb, 0x66E); - } -} - - -THUMB_FUNC void FUN_020304D4(u32 param0) { - if (param0 != 0) { - UNK_02105D58++; - return; - } - - ErrorHandling(); -} - -THUMB_FUNC void FUN_020304F0(u32 param0) { - if (param0 != 0) { - UNK_02105D59++; - return; - } - - ErrorHandling(); -} - -extern u16 FUN_0202CB8C(); - - -THUMB_FUNC void FUN_0203050C() { - if (UNK_021C59F4.unk04 == 0 || FUN_02033534() >= 0x13) { - return; - } - - int r4 = FUN_02031228(FUN_02033534()); - FUN_0202D858(FUN_02033534()); - - if (FUN_02031280() != 0 && (UNK_02105D58 == 2 || UNK_02105D58 == 0)) { - UNK_02105D58++; - FUN_020304D4(1); - - - FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); - - UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; - UNK_021C59F4.unk04->unk634++; - return; - } - - if (FUN_0202CBD4() != 4) { - return; - } - - if (FUN_02030E7C(FUN_02031190()) == 0) { - FUN_02031190(); - return; - } - - if (UNK_02105D58 != 2 && UNK_02105D58 != 0) { - return; - } - - - if (FUN_02031190() != 0) { - UNK_02105D58++; - - - if (FUN_0202D0D0(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4, 0xe, FUN_020304D4) == 0) { - UNK_02105D58--; - return; - } - - UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; - UNK_021C59F4.unk04->unk634++; - return; - } - - - if ((FUN_0202CB8C() & 0xFFFE) != 0) { - UNK_02105D58++; - FUN_020304D4(1); - - - FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); - - UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; - UNK_021C59F4.unk04->unk634++; - } -} \ No newline at end of file -- cgit v1.2.3 From 8e3505c4162c51c3870fbe371fa46c061e6d8b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sat, 10 Apr 2021 17:47:33 +0200 Subject: headers --- arm9/src/unk_0202F150.c | 2011 ++++++++++++++++++++++++----------------------- 1 file changed, 1034 insertions(+), 977 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c index dd86b10d..15a67f8d 100644 --- a/arm9/src/unk_0202F150.c +++ b/arm9/src/unk_0202F150.c @@ -1,16 +1,10 @@ -#include "global.h" -#include "MI_memory.h" -#include "heap.h" -#include "main.h" -#include "RTC_api.h" - +#include "unk_0202F150.h" struct { u8 unk00; struct UnkStruct1 *unk04; } UNK_021C59F4; - vu8 UNK_02105D58 = 4; vu8 UNK_02105D59 = 4; @@ -18,97 +12,9 @@ extern int FUN_02033534(); extern u32 FUN_0202D858(u16 param0); extern void FUN_02031480(u32 param0); extern void FUN_0202D7D8(u32 *param0, u32 param1, u32 param2); -extern void FUN_0202F2F0(); -extern void FUN_020312BC(u32 param0); -extern void FUN_0202FB20(); - extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2); extern void FUN_0202D394(u32 param0, u32 param1, u32 param2); - extern void FUN_0202D804(u32 *param0); -extern u32 FUN_02030E7C(u16 param0); - -struct UnkStruct1 -{ - u8 unk000[2][38]; - u8 unk04c[264]; - u8 unk154[2][192]; - u8 unk2D4[384]; - u32 unk454; - u32 unk458; - u32 unk45C; - u32 unk460; - u32 unk464; - u8 unk468[0x8]; - u32 unk470; - u8 unk474[0x8]; - struct - { - u32 unk00; - u32 unk04; - u32 unk08; - } unk47C[8]; - u32 unk4DC; - u8 unk4E0[0x8]; - struct - { - u32 unk00; - u32 unk04; - u32 unk08; - } unk4E8[8]; - u32 unk548; - u8 unk54C[32]; - u8 unk56C[32]; - struct - { - u32 unk00; - u32 unk04; - u16 unk08; - u8 unk0a; - u8 unk0b; - } unk58C[8]; - u32 unk5EC; - u32 unk5F0; - u16 unk5F4; - u8 unk5F6; - u8 unk5F7; - s64 unk5F8[3]; - u16 unk610[8]; - u8 unk620[0x8]; - u16 unk628; - u8 unk62A; - u8 unk62B; - u8 unk62C; - s8 unk62D; - u16 unk62E; - u32 unk630; - u32 unk634; - u32 unk638[8]; - u32 unk658; - u16 unk65C; - u8 unk65E; - u8 unk65F[8]; - u8 unk667[8]; - u8 unk66F[8]; - u8 unk677[4]; - u8 unk67B; - u8 unk67C; - u8 unk67D; - u8 unk67E; - u8 unk67F; - u8 unk680; - u8 unk681; - u8 unk682; - u8 unk683; - u8 unk684; - u8 unk685; - u8 unk686; - u8 unk687; - u8 unk688; - u8 unk689; - u8 unk68A; - u8 unk68B; -}; THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) { @@ -382,8 +288,6 @@ THUMB_FUNC void FUN_0202F820(u32 param0) UNK_021C59F4.unk04->unk58C[param0].unk00 = 0; } -extern u8 FUN_02031280(); - THUMB_FUNC void FUN_0202F8D4() { for (int i = 1; i < 8; i++) @@ -419,7 +323,8 @@ THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) extern u32 FUN_0202E66C(u32 param0, u32 param1); -THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) { +THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) +{ u32 ret = 1; if (FUN_02033534() < 0x13) { @@ -430,81 +335,88 @@ THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) { UNK_02105D58 = 4; - return ret; + return ret; } -extern u16 FUN_02031190(); -extern void FUN_02031088(); - - - - - -THUMB_FUNC void FUN_0202F984() { +THUMB_FUNC void FUN_0202F984() +{ u32 r4 = 0; - if (FUN_02031190() == 0 ) { - if (UNK_02105D59 != 4) { + if (FUN_02031190() == 0) + { + if (UNK_02105D59 != 4) + { return; } - } else { - if (UNK_02105D58 != 4) { + } + else + { + if (UNK_02105D58 != 4) + { return; } } - if (UNK_021C59F4.unk04->unk67D == 2) { + if (UNK_021C59F4.unk04->unk67D == 2) + { UNK_021C59F4.unk04->unk67D = 0; r4 = 1; } - if (UNK_021C59F4.unk04->unk67D == 3) { + if (UNK_021C59F4.unk04->unk67D == 3) + { UNK_021C59F4.unk04->unk67D = 1; r4 = 1; } - if (r4 != 0) { + if (r4 != 0) + { FUN_0202F5A4(); } FUN_02031088(); } - - - -THUMB_FUNC void FUN_0202F9E0(u32 param0) { +THUMB_FUNC void FUN_0202F9E0(u32 param0) +{ u8 r2 = UNK_021C59F4.unk04->unk67D; - if (r2 == 0 && param0 == 1) { + if (r2 == 0 && param0 == 1) + { UNK_021C59F4.unk04->unk67D = 3; - } else if (r2 == 1 && param0 == 0) { + } + else if (r2 == 1 && param0 == 0) + { UNK_021C59F4.unk04->unk67D = 2; } } - -THUMB_FUNC void FUN_0202FA10() { +THUMB_FUNC void FUN_0202FA10() +{ FUN_0202F9E0(1); } - -THUMB_FUNC void FUN_0202FA1C() { +THUMB_FUNC void FUN_0202FA1C() +{ FUN_0202F9E0(0); } - - -THUMB_FUNC u8 FUN_0202FA28() { +THUMB_FUNC u8 FUN_0202FA28() +{ u8 ret = UNK_021C59F4.unk04->unk67D; - if (ret == 2){ + if (ret == 2) + { return 1; - } else if (ret == 3) { + } + else if (ret == 3) + { return 0; } return ret; } -THUMB_FUNC u32 FUN_0202FA48() { - if (FUN_0202FA28() == 1) { +THUMB_FUNC u32 FUN_0202FA48() +{ + if (FUN_0202FA28() == 1) + { return 1; } @@ -518,20 +430,27 @@ extern void FUN_0202DBA4(); extern void FUN_0200CAB4(u32 param0); extern void FUN_0202D824(u32 *param0); -THUMB_FUNC void FUN_0202FA5C() { +THUMB_FUNC void FUN_0202FA5C() +{ u32 r4 = 0; - if (UNK_021C59F4.unk04 != 0) { - if (FUN_02033534() >= 0x13) { + if (UNK_021C59F4.unk04 != 0) + { + if (FUN_02033534() >= 0x13) + { MOD04_021D83C0(); r4 = 1; - } else { - if (FUN_0202E784() != 0) { + } + else + { + if (FUN_0202E784() != 0) + { r4 = 1; } } } - if (r4 != 0) { + if (r4 != 0) + { FUN_020314D0(); FUN_0202DBA4(); UNK_021C59F4.unk00 = 0; @@ -551,22 +470,21 @@ THUMB_FUNC void FUN_0202FA5C() { extern u32 FUN_0202E9E8(u32 param0); -THUMB_FUNC u32 FUN_0202FB18(u32 param0) { +THUMB_FUNC u32 FUN_0202FB18(u32 param0) +{ return FUN_0202E9E8(param0); } - -extern void FUN_0203050C(); -extern void FUN_0202FEEC(); extern u32 FUN_0202F03C(); extern u32 FUN_0202EE24(); - - -THUMB_FUNC void FUN_0202FB20() { - if (UNK_021C59F4.unk00 != 0) { +THUMB_FUNC void FUN_0202FB20() +{ + if (UNK_021C59F4.unk00 != 0) + { FUN_0203050C(); - if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0) + { FUN_0202FEEC(); } @@ -574,97 +492,105 @@ THUMB_FUNC void FUN_0202FB20() { } } -THUMB_FUNC void FUN_0202FB58() { - if (FUN_0202F03C() != 0) { - if (FUN_02031190() == 0 ) { - if (FUN_0202EE24() == 0) { +THUMB_FUNC void FUN_0202FB58() +{ + if (FUN_0202F03C() != 0) + { + if (FUN_02031190() == 0) + { + if (FUN_0202EE24() == 0) + { FUN_0202FA5C(); } - } else { + } + else + { FUN_0202FA5C(); } } } extern void FUN_02031CDC(); -extern void FUN_02030674(); -extern void FUN_0202FCCC(); -extern void FUN_02030DA4(); -extern void FUN_02030074(); -extern void FUN_02030DFC(); extern void FUN_0202EBD0(u16 param0); extern void FUN_0202ED70(u32 param0); extern void FUN_020335F4(u32 param0); extern void FUN_020315A4(); - - -THUMB_FUNC u32 FUN_0202FB80() { +THUMB_FUNC u32 FUN_0202FB80() +{ FUN_02031CDC(); - if (UNK_021C59F4.unk04 != NULL) { - if (UNK_021C59F4.unk04->unk68A == 0) { + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk68A == 0) + { UNK_021C59F4.unk00 = 0; FUN_0202F984(); UNK_021C59F4.unk04->unk628 |= gMain.unk44 & 0x7FFF; FUN_02030674(); FUN_0202FCCC(); - UNK_021C59F4.unk04->unk628 &= 2<<0xe; - if (FUN_0202FA28() == 0) { + UNK_021C59F4.unk04->unk628 &= 2 << 0xe; + if (FUN_0202FA28() == 0) + { FUN_02030DA4(); } - if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0){ + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0) + { FUN_02030074(); } - if (FUN_02031190() == 0 || FUN_0202FA28() == 1 || FUN_02031280() != 0) { + if (FUN_02031190() == 0 || FUN_0202FA28() == 1 || FUN_02031280() != 0) + { FUN_02030DFC(); } UNK_021C59F4.unk00 = 1; } - FUN_0202ED70(UNK_021C59F4.unk04->unk65C); - if (FUN_02031190() == 0) { + if (FUN_02031190() == 0) + { FUN_0202F8D4(); } FUN_0202FB58(); - } else { + } + else + { FUN_0202ED70(0); } - FUN_020335F4(0); FUN_020315A4(); return 1; } - -THUMB_FUNC void FUN_0202FC60() { +THUMB_FUNC void FUN_0202FC60() +{ u8 r4 = UNK_021C59F4.unk00; UNK_021C59F4.unk00 = 0; - if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04 != NULL) + { FUN_0202F2F0(); } UNK_021C59F4.unk00 = r4; } - -THUMB_FUNC void FUN_0202FC80() { +THUMB_FUNC void FUN_0202FC80() +{ u8 r4 = UNK_021C59F4.unk00; UNK_021C59F4.unk00 = 0; - if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04 != NULL) + { UNK_021C59F4.unk04->unk67D = 1; FUN_0202F2F0(); } @@ -672,16 +598,16 @@ THUMB_FUNC void FUN_0202FC80() { UNK_021C59F4.unk00 = r4; } - extern void FUN_0202E538(); - -THUMB_FUNC void FUN_0202FCA8() { +THUMB_FUNC void FUN_0202FCA8() +{ u8 r4 = UNK_021C59F4.unk00; UNK_021C59F4.unk00 = 0; - if (UNK_021C59F4.unk04 != NULL) { + if (UNK_021C59F4.unk04 != NULL) + { FUN_0202F2F0(); FUN_0202E538(); } @@ -689,17 +615,17 @@ THUMB_FUNC void FUN_0202FCA8() { UNK_021C59F4.unk00 = r4; } - extern u32 MOD04_021D78FC(void *param0, u32 param1); extern u32 FUN_0202CBD4(); -extern u32 FUN_02030930(u8 *param0); - - -THUMB_FUNC void FUN_0202FCCC() { - if (UNK_021C59F4.unk04->unk683 != 0 ) { - if (FUN_02033534() >= 0x13) { - if (UNK_021C59F4.unk04->unk687 == 0 || MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { +THUMB_FUNC void FUN_0202FCCC() +{ + if (UNK_021C59F4.unk04->unk683 != 0) + { + if (FUN_02033534() >= 0x13) + { + if (UNK_021C59F4.unk04->unk687 == 0 || MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) + { return; } @@ -707,15 +633,18 @@ THUMB_FUNC void FUN_0202FCCC() { return; } - if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { - if (FUN_02031280() == 0) { + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) + { + if (FUN_02031280() == 0) + { return; } } UNK_02105D58 = 0; FUN_0203050C(); - if (UNK_02105D58 == 0) { + if (UNK_02105D58 == 0) + { return; } @@ -723,24 +652,32 @@ THUMB_FUNC void FUN_0202FCCC() { return; } - - if (FUN_02033534() >= 0x13) { - if (UNK_021C59F4.unk04->unk687 == 0) { + if (FUN_02033534() >= 0x13) + { + if (UNK_021C59F4.unk04->unk687 == 0) + { return; } - if (UNK_021C59F4.unk04->unk630 != 0){ - if ((int)UNK_021C59F4.unk04->unk634 > 3) { + if (UNK_021C59F4.unk04->unk630 != 0) + { + if ((int)UNK_021C59F4.unk04->unk634 > 3) + { return; } - if (UNK_02105D58 == 4) { + if (UNK_02105D58 == 4) + { FUN_02030930(UNK_021C59F4.unk04->unk000[0]); UNK_02105D58 = 2; } - } else { - if (UNK_02105D58 == 4) { - if (FUN_02030930(UNK_021C59F4.unk04->unk000[0]) == 0) { + } + else + { + if (UNK_02105D58 == 4) + { + if (FUN_02030930(UNK_021C59F4.unk04->unk000[0]) == 0) + { return; } @@ -748,8 +685,8 @@ THUMB_FUNC void FUN_0202FCCC() { } } - - if (MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) { + if (MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) + { return; } @@ -758,279 +695,291 @@ THUMB_FUNC void FUN_0202FCCC() { return; } - - if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) { - if (FUN_02031280() == 0) { - return; + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) + { + if (FUN_02031280() == 0) + { + return; } } - if (UNK_02105D58 != 4) { + if (UNK_02105D58 != 4) + { return; } - - - //nonmatching - if ((int)UNK_021C59F4.unk04->unk634 > 3) { + // nonmatching + if ((int)UNK_021C59F4.unk04->unk634 > 3) + { return; } FUN_02030930(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F]); - FUN_02030930(UNK_021C59F4.unk04->unk000[1-UNK_021C59F4.unk04->unk67F]); + FUN_02030930(UNK_021C59F4.unk04->unk000[1 - UNK_021C59F4.unk04->unk67F]); UNK_02105D58 = 0; FUN_0203050C(); } -extern int FUN_02031228(u16 param0); extern void FUN_0202D4BC(void *param0); extern int FUN_0202D400(u32 param0, u32 param1, u32 param2); - - - - -THUMB_FUNC u32 FUN_0202FE2C(int param0); - #ifdef NONMATCHING -THUMB_FUNC u32 FUN_0202FE2C(int param0) { +THUMB_FUNC u32 FUN_0202FE2C(int param0) +{ // these 3 variables are shuffled on the stack, everything else matches int st4 = 0; int stc = FUN_02031228(FUN_02033534()); int st8 = FUN_0202D858(FUN_02033534()) + 1; - - for (int r7 = 0; r7 < st8 ; r7++) { + for (int r7 = 0; r7 < st8; r7++) + { FUN_0202D4BC(&UNK_021C59F4.unk04->unk47C[r7]); - if (FUN_02030E7C(r7) != 0) { - UNK_021C59F4.unk04->unk154[param0][r7*stc] = 0xe; + if (FUN_02030E7C(r7) != 0) + { + UNK_021C59F4.unk04->unk154[param0][r7 * stc] = 0xe; } - FUN_0202D400(&UNK_021C59F4.unk04->unk47C[r7], &UNK_021C59F4.unk04->unk154[param0][r7*stc], stc); + FUN_0202D400( + &UNK_021C59F4.unk04->unk47C[r7], &UNK_021C59F4.unk04->unk154[param0][r7 * stc], stc); - if (UNK_021C59F4.unk04->unk154[param0][r7*stc] == 0xe) { + if (UNK_021C59F4.unk04->unk154[param0][r7 * stc] == 0xe) + { st4++; } } - if (st4 == st8) { + if (st4 == st8) + { return 0; } return 1; } #else -THUMB_FUNC asm u32 FUN_0202FE2C(int param0) { - push {r3-r7, lr} - sub sp, #0x10 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - str r0, [sp, #0xc] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r0, r0, #0x1 - mov r7, #0x0 - str r0, [sp, #0x8] - cmp r0, #0x0 - ble _0202FED0 - ldr r0, [sp, #0x0] - mov r1, #0xc0 - add r6, r0, #0x0 - add r4, r7, #0x0 - add r5, r7, #0x0 - mul r6, r1 -_0202FE66: - ldr r0, =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, =0x0000047C - add r0, r1, r0 - add r0, r0, r4 - bl FUN_0202D4BC - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - beq _0202FE90 - ldr r0, =UNK_021C59F4 - mov r1, #0xe - ldr r0, [r0, #0x4] - add r0, r6, r0 - add r2, r5, r0 - mov r0, #0x55 - lsl r0, r0, #0x2 - strb r1, [r2, r0] -_0202FE90: - ldr r0, =UNK_021C59F4 - mov r2, #0x55 - ldr r1, [r0, #0x4] - ldr r0, =0x0000047C - lsl r2, r2, #0x2 - add r0, r1, r0 - add r1, r1, r2 - add r1, r1, r6 - ldr r2, [sp, #0xc] - add r0, r0, r4 - add r1, r1, r5 - bl FUN_0202D400 - ldr r0, =UNK_021C59F4 - ldr r0, [r0, #0x4] - add r0, r6, r0 - add r1, r5, r0 - mov r0, #0x55 - lsl r0, r0, #0x2 - ldrb r0, [r1, r0] - cmp r0, #0xe - bne _0202FEC2 - ldr r0, [sp, #0x4] - add r0, r0, #0x1 - str r0, [sp, #0x4] -_0202FEC2: - ldr r0, [sp, #0xc] - add r7, r7, #0x1 - add r5, r5, r0 - ldr r0, [sp, #0x8] - add r4, #0xc - cmp r7, r0 - blt _0202FE66 -_0202FED0: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x8] - cmp r1, r0 - bne _0202FEDE - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} -_0202FEDE: - mov r0, #0x1 - add sp, #0x10 - pop {r3-r7, pc} +THUMB_FUNC asm u32 FUN_0202FE2C(int param0) +{ + push{ r3 - r7, lr } sub sp, #0x10 str r0, [ sp, #0x0 ] mov r0, #0x0 str r0, + [ sp, #0x4 ] bl FUN_02033534 lsl r0, r0, #0x10 lsr r0, r0, #0x10 bl FUN_02031228 str r0, + [ sp, #0xc ] bl FUN_02033534 lsl r0, r0, #0x10 lsr r0, r0, #0x10 bl FUN_0202D858 add r0, r0, + #0x1 mov r7, #0x0 str r0, [ sp, #0x8 ] cmp r0, #0x0 ble _0202FED0 ldr r0, + [ sp, #0x0 ] mov r1, #0xc0 add r6, r0, #0x0 add r4, r7, #0x0 add r5, r7, #0x0 mul r6, + r1 _0202FE66 : ldr r0, + = UNK_021C59F4 ldr r1, + [ r0, #0x4 ] ldr r0, + = 0x0000047C add r0, + r1, + r0 add r0, + r0, + r4 bl FUN_0202D4BC lsl r0, + r7, + #0x10 lsr r0, + r0, + #0x10 bl FUN_02030E7C cmp r0, + #0x0 beq _0202FE90 ldr r0, + = UNK_021C59F4 mov r1, + #0xe ldr r0, + [ r0, #0x4 ] add r0, + r6, + r0 add r2, + r5, + r0 mov r0, + #0x55 lsl r0, + r0, + #0x2 strb r1, + [ r2, r0 ] _0202FE90 : ldr r0, + = UNK_021C59F4 mov r2, + #0x55 ldr r1, + [ r0, #0x4 ] ldr r0, + = 0x0000047C lsl r2, + r2, + #0x2 add r0, + r1, + r0 add r1, + r1, + r2 add r1, + r1, + r6 ldr r2, + [ sp, #0xc ] add r0, + r0, + r4 add r1, + r1, + r5 bl FUN_0202D400 ldr r0, + = UNK_021C59F4 ldr r0, + [ r0, #0x4 ] add r0, + r6, + r0 add r1, + r5, + r0 mov r0, + #0x55 lsl r0, + r0, + #0x2 ldrb r0, + [ r1, r0 ] cmp r0, + #0xe bne _0202FEC2 ldr r0, + [ sp, #0x4 ] add r0, + r0, + #0x1 str r0, + [ sp, #0x4 ] _0202FEC2 : ldr r0, + [ sp, #0xc ] add r7, + r7, + #0x1 add r5, + r5, + r0 ldr r0, + [ sp, #0x8 ] add r4, + #0xc cmp r7, + r0 blt _0202FE66 _0202FED0 + : ldr r1, + [ sp, #0x4 ] ldr r0, + [ sp, #0x8 ] cmp r1, + r0 bne _0202FEDE add sp, + #0x10 mov r0, + #0x0 pop{ r3 - r7, pc } _0202FEDE : mov r0, + #0x1 add sp, + #0x10 pop + { + r3 - r7, pc + } } #endif - -extern void FUN_020304F0(u32 param0); extern u32 FUN_0202D0D0(void *, u16 param1, u32 param2, void (*param3)(u32)); -extern void FUN_0203026C(u32 param0,u8 *param1, u32 param2); - -THUMB_FUNC void FUN_0202FEEC() { - if (UNK_021C59F4.unk04 == NULL || FUN_02033534() >= 0x13) { +THUMB_FUNC void FUN_0202FEEC() +{ + if (UNK_021C59F4.unk04 == NULL || FUN_02033534() >= 0x13) + { return; } int st0 = FUN_02031228(FUN_02033534()); - int r6 = FUN_0202D858(FUN_02033534())+1; + int r6 = FUN_0202D858(FUN_02033534()) + 1; - if (UNK_02105D59 == 2 || UNK_02105D59 == 0){ + if (UNK_02105D59 == 2 || UNK_02105D59 == 0) + { UNK_02105D59++; - if (FUN_0202FA28() == 1) { + if (FUN_0202FA28() == 1) + { FUN_0202FE2C(UNK_021C59F4.unk04->unk680); } - if (FUN_0202CBD4() == 4 && FUN_02031280() == 0) { + if (FUN_0202CBD4() == 4 && FUN_02031280() == 0) + { - if (FUN_0202D0D0(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0, 0xe, FUN_020304F0) == 0) { + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], + 0xc0, + 0xe, + FUN_020304F0) == 0) + { UNK_02105D59--; } } int i; - if (UNK_02105D59 == 1 || UNK_02105D59 == 3) { - for (i = 0; i < r6; i++) { - if (FUN_02030E7C(i) != 0) { + if (UNK_02105D59 == 1 || UNK_02105D59 == 3) + { + for (i = 0; i < r6; i++) + { + if (FUN_02030E7C(i) != 0) + { UNK_021C59F4.unk04->unk638[i]++; - } else if (FUN_02031280() != 0 && i == 0) { + } + else if (FUN_02031280() != 0 && i == 0) + { UNK_021C59F4.unk04->unk638[i]++; } } - FUN_0203026C(0, UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0); UNK_021C59F4.unk04->unk680 = 1 - UNK_021C59F4.unk04->unk680; } - - - for (i = 0; i < r6; i++) { - if (FUN_02030E7C(i) == 0 && FUN_0202FA28() == 1) { - UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680][i *st0] = 0xff; + for (i = 0; i < r6; i++) + { + if (FUN_02030E7C(i) == 0 && FUN_0202FA28() == 1) + { + UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680][i * st0] = 0xff; } } - - if (FUN_0202CBD4() != 4 || FUN_02031280() != 0) { + if (FUN_0202CBD4() != 4 || FUN_02031280() != 0) + { UNK_02105D59++; } } } - extern u32 MOD04_021D79B4(void *param0, u32 param1); -extern void FUN_02030A00(u8 *param0); - - -THUMB_FUNC void FUN_02030074() { - if (UNK_021C59F4.unk04->unk683 != 0) { - if (FUN_02033534() >= 0x13) { - if (FUN_02030E7C(0) != 0 && MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) != 0) { +THUMB_FUNC void FUN_02030074() +{ + if (UNK_021C59F4.unk04->unk683 != 0) + { + if (FUN_02033534() >= 0x13) + { + if (FUN_02030E7C(0) != 0 && MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) != 0) + { UNK_021C59F4.unk04->unk683 = 0; return; } - } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { + } + else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) + { FUN_0202FEEC(); - if (UNK_02105D59 == 2) { + if (UNK_02105D59 == 2) + { UNK_021C59F4.unk04->unk683 = 0; return; } } } - if (FUN_02033534() >= 0x13) { - if (FUN_02030E7C(0) != 0) { - if (UNK_021C59F4.unk04->unk630 != 0) { - if ((int)UNK_021C59F4.unk04->unk638[1] > 3 || (int)UNK_021C59F4.unk04->unk638[0] > 3) { + if (FUN_02033534() >= 0x13) + { + if (FUN_02030E7C(0) != 0) + { + if (UNK_021C59F4.unk04->unk630 != 0) + { + if ((int)UNK_021C59F4.unk04->unk638[1] > 3 || + (int)UNK_021C59F4.unk04->unk638[0] > 3) + { return; } - if (UNK_02105D59 == 4) { - if (FUN_0202FA28() == 1) { + if (UNK_02105D59 == 4) + { + if (FUN_0202FA28() == 1) + { FUN_0202FE2C(0); } UNK_02105D59 = 2; } - } else { - if (UNK_02105D59 == 4 ) { - if (FUN_0202FA28() == 1) { - if (FUN_0202FE2C(0) == 0) { + } + else + { + if (UNK_02105D59 == 4) + { + if (FUN_0202FA28() == 1) + { + if (FUN_0202FE2C(0) == 0) + { return; } } } - UNK_02105D59 = 2; } - - - if (MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) == 0) { + if (MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) == 0) + { return; } @@ -1038,40 +987,48 @@ THUMB_FUNC void FUN_02030074() { UNK_021C59F4.unk04->unk638[0]++; UNK_021C59F4.unk04->unk638[1]++; } - } else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) { - if (UNK_02105D59 == 4) { + } + else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) + { + if (UNK_02105D59 == 4) + { for (int r4 = 1; r4 < 8; r4++) { - if (FUN_02030E7C(r4) != 0) { - if ((int)UNK_021C59F4.unk04->unk638[r4] > 3) { + if (FUN_02030E7C(r4) != 0) + { + if ((int)UNK_021C59F4.unk04->unk638[r4] > 3) + { return; } - } else if (r4 == 0) { - if (FUN_02031280() != 0) { - if ((int)UNK_021C59F4.unk04->unk638[0] > 3) { + } + else if (r4 == 0) + { + if (FUN_02031280() != 0) + { + if ((int)UNK_021C59F4.unk04->unk638[0] > 3) + { return; } } } } - - if (FUN_0202FA28() == 0) { + if (FUN_0202FA28() == 0) + { FUN_02030A00(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680]); - FUN_02030A00(UNK_021C59F4.unk04->unk154[1-UNK_021C59F4.unk04->unk680]); + FUN_02030A00(UNK_021C59F4.unk04->unk154[1 - UNK_021C59F4.unk04->unk680]); } - UNK_02105D59 = 0; FUN_0202FEEC(); } } } - - -THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) { - if (UNK_021C59F4.unk04->unk66F[0] != 0) { +THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) +{ + if (UNK_021C59F4.unk04->unk66F[0] != 0) + { UNK_021C59F4.unk04->unk634--; UNK_021C59F4.unk04->unk66F[0] = 0; return; @@ -1082,81 +1039,97 @@ THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) { extern void FUN_0202D3A4(void *param0, u8 *param1, u32 param2, u32 param3); - - -THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) { +THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) +{ UNK_021C59F4.unk04->unk634--; - if (param1 == 0) { + if (param1 == 0) + { return; } - if (param1[0] == 0xb) { - if (FUN_0202FA28() == 1) { + if (param1[0] == 0xb) + { + if (FUN_0202FA28() == 1) + { return; } param1++; - } else { - if (FUN_0202FA28() == 0) { + } + else + { + if (FUN_0202FA28() == 0) + { return; } } - - if (UNK_021C59F4.unk04->unk682 != 0) { - if ((param1[0] & 1) != 0) { + if (UNK_021C59F4.unk04->unk682 != 0) + { + if ((param1[0] & 1) != 0) + { return; } } UNK_021C59F4.unk04->unk682 = 0; - if (FUN_0202FA28() == 1) { + if (FUN_0202FA28() == 1) + { int r6 = FUN_02031228(FUN_02033534()); - int st4 = FUN_0202D858(FUN_02033534())+1; + int st4 = FUN_0202D858(FUN_02033534()) + 1; int r4 = 0; - while (r4 < st4) { + while (r4 < st4) + { u32 new; - if (param1[0] == 0xff) { - new = UNK_021C59F4.unk04->unk65C & ~(1<unk65C | (1<unk65C & ~(1 << r4); + } + else + { + new = UNK_021C59F4.unk04->unk65C | (1 << r4); } UNK_021C59F4.unk04->unk65C = new; - if (param1[0] == 0xff) { + if (param1[0] == 0xff) + { param1 += r6; - } else if (param1[0] == 0xe){ + } + else if (param1[0] == 0xe) + { param1 += r6; - } else if (UNK_021C59F4.unk04->unk667[r4] != 0 && (param1[0] & 1) != 0) { + } + else if (UNK_021C59F4.unk04->unk667[r4] != 0 && (param1[0] & 1) != 0) + { param1 += r6; - } else { + } + else + { param1++; - FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, r6-1, 0x5E6); + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, r6 - 1, 0x5E6); - param1 += r6-1; + param1 += r6 - 1; UNK_021C59F4.unk04->unk667[r4] = 0; } - r4++; } return; } - UNK_021C59F4.unk04->unk65C = param1[1]; UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C << 8; UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C + param1[2]; - FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1+4, param1[3], 0x5FF); + FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1 + 4, param1[3], 0x5FF); } -extern void FUN_020303F4(u32 param0, u8 *param1, u16 param2); - -THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) { - if (UNK_021C59F4.unk04->unk66F[param0] != 0) { +THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) +{ + if (UNK_021C59F4.unk04->unk66F[param0] != 0) + { UNK_021C59F4.unk04->unk638[param0]--; UNK_021C59F4.unk04->unk66F[param0] = 0; @@ -1166,27 +1139,29 @@ THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) { FUN_020303F4(param0, param1, param2); } -extern u32 FUN_020307E4(u8 *param0, u32 param1); extern int FUN_0202D498(void *param0); - - -THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) { +THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) +{ UNK_021C59F4.unk04->unk638[param0]--; - if (param1 == 0) { + if (param1 == 0) + { return; } - if (UNK_021C59F4.unk04->unk667[param0] != 0 && (param1[0] & 1) != 0) { + if (UNK_021C59F4.unk04->unk667[param0] != 0 && (param1[0] & 1) != 0) + { return; } UNK_021C59F4.unk04->unk667[param0] = 0; - if (FUN_0202FA28() == 1) { + if (FUN_0202FA28() == 1) + { int r6 = FUN_02031228(FUN_02033534()); FUN_0202D858(FUN_02033534()); - if ((param1[0] & 2) == 0) { + if ((param1[0] & 2) == 0) + { FUN_0202D3A4(&UNK_021C59F4.unk04->unk47C[param0], param1, r6, 0x65E); } @@ -1194,17 +1169,18 @@ THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) { return; } - FUN_020307E4(param1, param0); - if ((param1[0] & 2) == 0 && FUN_0202D498(&UNK_021C59F4.unk04->unk4E8[param0]) >= 0xb) { - FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[param0], param1 +1, 0xb, 0x66E); + if ((param1[0] & 2) == 0 && FUN_0202D498(&UNK_021C59F4.unk04->unk4E8[param0]) >= 0xb) + { + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[param0], param1 + 1, 0xb, 0x66E); } } - -THUMB_FUNC void FUN_020304D4(u32 param0) { - if (param0 != 0) { +THUMB_FUNC void FUN_020304D4(u32 param0) +{ + if (param0 != 0) + { UNK_02105D58++; return; } @@ -1212,8 +1188,10 @@ THUMB_FUNC void FUN_020304D4(u32 param0) { ErrorHandling(); } -THUMB_FUNC void FUN_020304F0(u32 param0) { - if (param0 != 0) { +THUMB_FUNC void FUN_020304F0(u32 param0) +{ + if (param0 != 0) + { UNK_02105D59++; return; } @@ -1223,46 +1201,51 @@ THUMB_FUNC void FUN_020304F0(u32 param0) { extern u16 FUN_0202CB8C(); - -THUMB_FUNC void FUN_0203050C() { - if (UNK_021C59F4.unk04 == 0 || FUN_02033534() >= 0x13) { +THUMB_FUNC void FUN_0203050C() +{ + if (UNK_021C59F4.unk04 == 0 || FUN_02033534() >= 0x13) + { return; } int r4 = FUN_02031228(FUN_02033534()); FUN_0202D858(FUN_02033534()); - if (FUN_02031280() != 0 && (UNK_02105D58 == 2 || UNK_02105D58 == 0)) { + if (FUN_02031280() != 0 && (UNK_02105D58 == 2 || UNK_02105D58 == 0)) + { UNK_02105D58++; FUN_020304D4(1); - FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); - UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; UNK_021C59F4.unk04->unk634++; return; } - if (FUN_0202CBD4() != 4) { + if (FUN_0202CBD4() != 4) + { return; } - if (FUN_02030E7C(FUN_02031190()) == 0) { + if (FUN_02030E7C(FUN_02031190()) == 0) + { FUN_02031190(); return; } - if (UNK_02105D58 != 2 && UNK_02105D58 != 0) { + if (UNK_02105D58 != 2 && UNK_02105D58 != 0) + { return; } - - if (FUN_02031190() != 0) { + if (FUN_02031190() != 0) + { UNK_02105D58++; - - if (FUN_0202D0D0(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4, 0xe, FUN_020304D4) == 0) { + if (FUN_0202D0D0( + UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4, 0xe, FUN_020304D4) == 0) + { UNK_02105D58--; return; } @@ -1272,15 +1255,14 @@ THUMB_FUNC void FUN_0203050C() { return; } - - if ((FUN_0202CB8C() & 0xFFFE) != 0) { + if ((FUN_0202CB8C() & 0xFFFE) != 0) + { UNK_02105D58++; FUN_020304D4(1); - FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); - UNK_021C59F4.unk04->unk67F = 1-UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; UNK_021C59F4.unk04->unk634++; } } @@ -1288,382 +1270,424 @@ THUMB_FUNC void FUN_0203050C() { extern s64 _ll_mul(s64, s64); #ifdef NONMATCHING -THUMB_FUNC void FUN_02030674() { +THUMB_FUNC void FUN_02030674() +{ u16 r4 = 0; - if (UNK_021C59F4.unk04->unk62C == 0 || (UNK_021C59F4.unk04->unk628 & 0xf0) == 0) { + if (UNK_021C59F4.unk04->unk62C == 0 || (UNK_021C59F4.unk04->unk628 & 0xf0) == 0) + { return; } - if (UNK_021C59F4.unk04->unk62C == 2) { - if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) { + if (UNK_021C59F4.unk04->unk62C == 2) + { + if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) + { r4 = r4 | 0x10; } - if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) { + if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) + { r4 = r4 | 0x20; } - if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) { + if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) + { r4 = r4 | 0x80; } - if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) { + if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) + { r4 = r4 | 0x40; } - } else { - if (UNK_021C59F4.unk04->unk62E != 0) { + } + else + { + if (UNK_021C59F4.unk04->unk62E != 0) + { r4 = UNK_021C59F4.unk04->unk62E; UNK_021C59F4.unk04->unk62D--; - if (UNK_021C59F4.unk04->unk62D < 0) { + if (UNK_021C59F4.unk04->unk62D < 0) + { UNK_021C59F4.unk04->unk62E = 0; } + } + else + { + UNK_021C59F4.unk04->unk5F8[0] = + UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0] + + UNK_021C59F4.unk04->unk5F8[2]; - } else { - UNK_021C59F4.unk04->unk5F8[0] = UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0] + UNK_021C59F4.unk04->unk5F8[2]; - - switch ((u32)(UNK_021C59F4.unk04->unk5F8[0] >> 0x3E) | (0 << 2)) { - case 0: - r4 = 0x20; + switch ((u32)(UNK_021C59F4.unk04->unk5F8[0] >> 0x3E) | (0 << 2)) + { + case 0: + r4 = 0x20; break; - case 1: - r4 = 0x10; + case 1: + r4 = 0x10; break; - case 2: - r4 = 0x40; + case 2: + r4 = 0x40; break; - case 3: - r4 = 0x80; + case 3: + r4 = 0x80; break; } - - UNK_021C59F4.unk04->unk5F8[0] = UNK_021C59F4.unk04->unk5F8[2] + UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0]; - UNK_021C59F4.unk04->unk62D = UNK_021C59F4.unk04->unk5F8[0]>>0x3c | (0 << 4); + UNK_021C59F4.unk04->unk5F8[0] = + UNK_021C59F4.unk04->unk5F8[2] + + UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0]; + UNK_021C59F4.unk04->unk62D = UNK_021C59F4.unk04->unk5F8[0] >> 0x3c | (0 << 4); UNK_021C59F4.unk04->unk62E = r4; } } - UNK_021C59F4.unk04->unk628 &= ~0xf0; UNK_021C59F4.unk04->unk628 += r4; } #else -THUMB_FUNC asm void FUN_02030674() { - push {r3-r7, lr} - ldr r7, =UNK_021C59F4 - mov r6, #0x0 - ldr r5, [r7, #0x4] - ldr r2, =0x0000062C - add r4, r6, #0x0 - ldrb r0, [r5, r2] - cmp r0, #0x0 - beq _02030690 - sub r1, r2, #0x4 - ldrh r1, [r5, r1] - mov r3, #0xf0 - tst r3, r1 - bne _02030692 -_02030690: - b _02030794 -_02030692: - cmp r0, #0x2 - bne _020306D0 - mov r0, #0x20 - tst r0, r1 - beq _020306A4 - mov r0, #0x10 - orr r0, r6 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 -_020306A4: - mov r0, #0x10 - tst r0, r1 - beq _020306B2 - mov r0, #0x20 - orr r0, r4 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 -_020306B2: - mov r0, #0x40 - tst r0, r1 - beq _020306C0 - mov r0, #0x80 - orr r0, r4 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 -_020306C0: - mov r0, #0x80 - tst r0, r1 - beq _0203077E - mov r0, #0x40 - orr r0, r4 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 - b _0203077E -_020306D0: - add r0, r2, #0x2 - ldrh r0, [r5, r0] - cmp r0, #0x0 - beq _020306F2 - add r4, r0, #0x0 - add r0, r2, #0x1 - ldrsb r0, [r5, r0] - sub r1, r0, #0x1 - add r0, r2, #0x1 - strb r1, [r5, r0] - ldr r1, [r7, #0x4] - ldrsb r0, [r1, r0] - cmp r0, #0x0 - bge _0203077E - add r0, r2, #0x2 - strh r6, [r1, r0] - b _0203077E -_020306F2: - add r0, r2, #0x0 - sub r0, #0x34 - add r6, r5, r0 - sub r2, #0x34 - ldr r0, [r6, #0x8] - ldr r1, [r6, #0xc] - ldr r2, [r5, r2] - ldr r3, [r6, #0x4] - bl _ll_mul - add r3, r0, #0x0 - add r2, r1, #0x0 - ldr r0, [r6, #0x10] - ldr r1, [r6, #0x14] - add r0, r0, r3 - adc r1, r2 - ldr r2, =0x000005F8 - str r0, [r5, r2] - mov r2, #0x0 - str r1, [r6, #0x4] - lsr r0, r1, #0x1e - lsl r1, r2, #0x2 - orr r1, r0 - cmp r1, #0x3 - bhi _02030746 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02030730: // jump table (using 16-bit offset) - // huge hack to get the correct jump offset. Is there a way to write constants? - lsl r6, r0, #0x0 // case 0 - lsl r2, r1, #0x0 // case 1 - lsl r6, r1, #0x0 // case 2 - lsl r2, r2, #0x0 // case 3 - - // intended jump offset - // .short _02030738 - _02030730 - 2; case 0 - // .short _0203073C - _02030730 - 2; case 1 - // .short _02030740 - _02030730 - 2; case 2 - // .short _02030744 - _02030730 - 2; case 3 -_02030738: - mov r4, #0x20 - b _02030746 -_0203073C: - mov r4, #0x10 - b _02030746 -_02030740: - mov r4, #0x40 - b _02030746 -_02030744: - mov r4, #0x80 -_02030746: - ldr r0, =UNK_021C59F4 - ldr r5, [r0, #0x4] - ldr r0, =0x000005F8 - add r6, r5, r0 - ldr r0, [r6, #0x8] - ldr r1, [r6, #0xc] - ldr r2, [r6, #0x0] - ldr r3, [r6, #0x4] - bl _ll_mul - ldr r3, [r6, #0x10] - ldr r2, [r6, #0x14] - add r0, r3, r0 - adc r2, r1 - ldr r1, =0x000005F8 - mov r3, #0x0 - str r0, [r5, r1] - str r2, [r6, #0x4] - lsr r0, r2, #0x1c - lsl r2, r3, #0x4 - orr r2, r0 - add r0, r1, #0x0 - add r0, #0x35 - strb r2, [r5, r0] - ldr r0, =UNK_021C59F4 - add r1, #0x36 - ldr r0, [r0, #0x4] - strh r4, [r0, r1] -_0203077E: - ldr r2, =UNK_021C59F4 - ldr r1, =0x00000628 - ldr r5, [r2, #0x4] - mov r0, #0xf0 - ldrh r3, [r5, r1] - bic r3, r0 - strh r3, [r5, r1] - ldr r2, [r2, #0x4] - ldrh r0, [r2, r1] - add r0, r0, r4 - strh r0, [r2, r1] -_02030794: - pop {r3-r7, pc} +THUMB_FUNC asm void FUN_02030674() +{ + push{ r3 - r7, lr } ldr r7, = UNK_021C59F4 mov r6, #0x0 ldr r5, [ r7, #0x4 ] ldr r2, + = 0x0000062C add r4, r6, #0x0 ldrb r0, [ r5, r2 ] cmp r0, + #0x0 beq _02030690 sub r1, r2, #0x4 ldrh r1, [ r5, r1 ] mov r3, + #0xf0 tst r3, + r1 bne _02030692 _02030690 : b _02030794 _02030692 : cmp r0, + #0x2 bne _020306D0 mov r0, + #0x20 tst r0, + r1 beq _020306A4 mov r0, + #0x10 orr r0, + r6 lsl r0, + r0, + #0x10 lsr r4, + r0, + #0x10 _020306A4 : mov r0, + #0x10 tst r0, + r1 beq _020306B2 mov r0, + #0x20 orr r0, + r4 lsl r0, + r0, + #0x10 lsr r4, + r0, + #0x10 _020306B2 : mov r0, + #0x40 tst r0, + r1 beq _020306C0 mov r0, + #0x80 orr r0, + r4 lsl r0, + r0, + #0x10 lsr r4, + r0, + #0x10 _020306C0 : mov r0, + #0x80 tst r0, + r1 beq _0203077E mov r0, + #0x40 orr r0, + r4 lsl r0, + r0, + #0x10 lsr r4, + r0, + #0x10 b _0203077E _020306D0 : add r0, + r2, + #0x2 ldrh r0, + [ r5, r0 ] cmp r0, + #0x0 beq _020306F2 add r4, + r0, + #0x0 add r0, + r2, + #0x1 ldrsb r0, + [ r5, r0 ] sub r1, + r0, + #0x1 add r0, + r2, + #0x1 strb r1, + [ r5, r0 ] ldr r1, + [ r7, #0x4 ] ldrsb r0, + [ r1, r0 ] cmp r0, + #0x0 bge _0203077E add r0, + r2, + #0x2 strh r6, + [ r1, r0 ] b _0203077E _020306F2 : add r0, + r2, + #0x0 sub r0, + #0x34 add r6, + r5, + r0 sub r2, + #0x34 ldr r0, + [ r6, #0x8 ] ldr r1, + [ r6, #0xc ] ldr r2, + [ r5, r2 ] ldr r3, + [ r6, #0x4 ] bl _ll_mul add r3, + r0, + #0x0 add r2, + r1, + #0x0 ldr r0, + [ r6, #0x10 ] ldr r1, + [ r6, #0x14 ] add r0, + r0, + r3 adc r1, + r2 ldr r2, + = 0x000005F8 str r0, + [ r5, r2 ] mov r2, + #0x0 str r1, + [ r6, #0x4 ] lsr r0, + r1, + #0x1e lsl r1, + r2, + #0x2 orr r1, + r0 cmp r1, + #0x3 bhi _02030746 add r0, + r1, + r1 add r0, + pc ldrh r0, + [ r0, #0x6 ] lsl r0, + r0, + #0x10 asr r0, + r0, + #0x10 add pc, + r0 _02030730 + : // jump table (using 16-bit offset) + // huge hack to get the correct jump offset. Is there a way to write constants? + lsl r6, + r0, + #0x0 // case 0 + lsl r2, + r1, + #0x0 // case 1 + lsl r6, + r1, + #0x0 // case 2 + lsl r2, + r2, + #0x0 // case 3 + + // intended jump offset + // .short _02030738 - _02030730 - 2; case 0 + // .short _0203073C - _02030730 - 2; case 1 + // .short _02030740 - _02030730 - 2; case 2 + // .short _02030744 - _02030730 - 2; case 3 + _02030738 : mov r4, + #0x20 b _02030746 _0203073C : mov r4, + #0x10 b _02030746 _02030740 : mov r4, + #0x40 b _02030746 _02030744 : mov r4, + #0x80 _02030746 : ldr r0, + = UNK_021C59F4 ldr r5, + [ r0, #0x4 ] ldr r0, + = 0x000005F8 add r6, + r5, + r0 ldr r0, + [ r6, #0x8 ] ldr r1, + [ r6, #0xc ] ldr r2, + [ r6, #0x0 ] ldr r3, + [ r6, #0x4 ] bl _ll_mul ldr r3, + [ r6, #0x10 ] ldr r2, + [ r6, #0x14 ] add r0, + r3, + r0 adc r2, + r1 ldr r1, + = 0x000005F8 mov r3, + #0x0 str r0, + [ r5, r1 ] str r2, + [ r6, #0x4 ] lsr r0, + r2, + #0x1c lsl r2, + r3, + #0x4 orr r2, + r0 add r0, + r1, + #0x0 add r0, + #0x35 strb r2, + [ r5, r0 ] ldr r0, + = UNK_021C59F4 add r1, + #0x36 ldr r0, + [ r0, #0x4 ] strh r4, + [ r0, r1 ] _0203077E : ldr r2, + = UNK_021C59F4 ldr r1, + = 0x00000628 ldr r5, + [ r2, #0x4 ] mov r0, + #0xf0 ldrh r3, + [ r5, r1 ] bic r3, + r0 strh r3, + [ r5, r1 ] ldr r2, + [ r2, #0x4 ] ldrh r0, + [ r2, r1 ] add r0, + r0, + r4 strh r0, + [ r2, r1 ] _02030794 : pop + { + r3 - r7, pc + } } #endif - -THUMB_FUNC void FUN_020307A8() { +THUMB_FUNC void FUN_020307A8() +{ UNK_021C59F4.unk04->unk62C = 1; } - -THUMB_FUNC void FUN_020307BC() { +THUMB_FUNC void FUN_020307BC() +{ UNK_021C59F4.unk04->unk62C = 2; } - -THUMB_FUNC void FUN_020307D0() { +THUMB_FUNC void FUN_020307D0() +{ UNK_021C59F4.unk04->unk62C = 0; } - - -THUMB_FUNC u32 FUN_020307E4(u8 *param0, u32 param1) { +THUMB_FUNC u32 FUN_020307E4(u8 *param0, u32 param1) +{ UNK_021C59F4.unk04->unk610[param1] = 0; u32 r7 = param0[0] & 0x10; - if (r7 == 0x10) { - + if (r7 == 0x10) + { u8 r5 = param0[0] & 0xc; - if (r5 == 0) { + if (r5 == 0) + { UNK_021C59F4.unk04->unk610[param1] |= 0x40; - } else if (r5 == 4) { + } + else if (r5 == 4) + { UNK_021C59F4.unk04->unk610[param1] |= 0x80; - } else if (r5 == 8) { + } + else if (r5 == 8) + { UNK_021C59F4.unk04->unk610[param1] |= 0x20; - } else if (r5 == 0xc) { + } + else if (r5 == 0xc) + { UNK_021C59F4.unk04->unk610[param1] |= 0x10; } - UNK_021C59F4.unk04->unk620[param1] = (param0[0]>>5) & 0x7; + UNK_021C59F4.unk04->unk620[param1] = (param0[0] >> 5) & 0x7; } - return 1; } -THUMB_FUNC void FUN_0203086C() { +THUMB_FUNC void FUN_0203086C() +{ } -extern u32 FUN_02030FE0(); - -THUMB_FUNC u32 FUN_02030870(u8 *param0) { - if (UNK_021C59F4.unk04->unk62A != 0){ +THUMB_FUNC u32 FUN_02030870(u8 *param0) +{ + if (UNK_021C59F4.unk04->unk62A != 0) + { return 0; } - if (FUN_02030FE0() == 0) { + if (FUN_02030FE0() == 0) + { return 0; } - if (UNK_021C59F4.unk04->unk681 != 0) { + if (UNK_021C59F4.unk04->unk681 != 0) + { UNK_021C59F4.unk04->unk681--; } - if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) { + if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) + { param0[0] |= 0x10; UNK_021C59F4.unk04->unk681 = 8; - } else if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) { + } + else if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) + { param0[0] |= 0x14; UNK_021C59F4.unk04->unk681 = 8; - } else if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) { + } + else if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) + { param0[0] |= 0x18; UNK_021C59F4.unk04->unk681 = 8; - } else if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) { + } + else if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) + { param0[0] |= 0x1c; UNK_021C59F4.unk04->unk681 = 8; } - - param0[0] |= UNK_021C59F4.unk04->unk62B<<5; + param0[0] |= UNK_021C59F4.unk04->unk62B << 5; return 0; } - extern u32 FUN_0202D4E4(u8 *param0); extern u32 FUN_0202D760(u8 *param0, int *param1, u32 param2); - -THUMB_FUNC u32 FUN_02030930(u8 *param0) { +THUMB_FUNC u32 FUN_02030930(u8 *param0) +{ int r5 = FUN_02031228(FUN_02033534()); FUN_0202D858(FUN_02033534()); u8 r0; - if (UNK_021C59F4.unk04->unk684 == 0) { + if (UNK_021C59F4.unk04->unk684 == 0) + { param0[0] = 0; - } else { + } + else + { param0[0] = 1; } - if (FUN_0202FA28() == 0) { + if (FUN_0202FA28() == 0) + { FUN_02030870(param0); } UNK_021C59F4.unk04->unk684 = 0; - if (FUN_0202D4E4(UNK_021C59F4.unk04->unk54C) != 0) { + if (FUN_0202D4E4(UNK_021C59F4.unk04->unk54C) != 0) + { param0[0] |= 2; - if (param0[0] == 2) { + if (param0[0] == 2) + { return 0; } - } else { + } + else + { int st0[2]; - st0[1] = r5-1; - st0[0] = param0+1; - if (FUN_0202D760(UNK_021C59F4.unk04->unk54C, st0, 1) == 0) { + st0[1] = r5 - 1; + st0[0] = param0 + 1; + if (FUN_0202D760(UNK_021C59F4.unk04->unk54C, st0, 1) == 0) + { UNK_021C59F4.unk04->unk684 = 1; } - - if (FUN_0202FA28() == 1) { + if (FUN_0202FA28() == 1) + { UNK_021C59F4.unk04->unk65E++; - param0[0] |= UNK_021C59F4.unk04->unk65E<<4 & 0xf0; + param0[0] |= UNK_021C59F4.unk04->unk65E << 4 & 0xf0; } } return 1; - } - -THUMB_FUNC void FUN_02030A00(u8 *param0) { +THUMB_FUNC void FUN_02030A00(u8 *param0) +{ param0[0] = 0xb; - if (UNK_021C59F4.unk04->unk685 == 0) { + if (UNK_021C59F4.unk04->unk685 == 0) + { param0[1] = 0; - } else { + } + else + { param0[1] = 1; } u16 res = FUN_0202CB8C(); - param0[2] = res >>8; + param0[2] = res >> 8; param0[3] = res; - int st0[2]; st0[1] = 0xbb; - st0[0] = param0+5; - if (FUN_0202D760(UNK_021C59F4.unk04->unk56C, st0, 0) != 0) { + st0[0] = param0 + 5; + if (FUN_0202D760(UNK_021C59F4.unk04->unk56C, st0, 0) != 0) + { UNK_021C59F4.unk04->unk685 = 0; param0[4] = 0xbb - st0[1]; @@ -1675,143 +1699,151 @@ THUMB_FUNC void FUN_02030A00(u8 *param0) { } extern u32 FUN_0202D684(u8 *param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); -extern void FUN_02031454(); -THUMB_FUNC u32 FUN_02030A78(u32 param0, u32 param1, u32 param2) { - if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) { +THUMB_FUNC u32 FUN_02030A78(u32 param0, u32 param1, u32 param2) +{ + if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) + { return 0; } - if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 0) != 0) { + if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 0) != 0) + { return 1; } - if (FUN_02033534() == 0xa) { + if (FUN_02033534() == 0xa) + { FUN_02031454(); } return 0; } - -THUMB_FUNC u32 FUN_02030ADC(u32 param0, u32 param1, u32 param2) { - if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) { +THUMB_FUNC u32 FUN_02030ADC(u32 param0, u32 param1, u32 param2) +{ + if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) + { return 0; } - if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 1) != 0) { + if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 1) != 0) + { return 1; } - if (FUN_02033534() == 0xa) { + if (FUN_02033534() == 0xa) + { FUN_02031454(); } return 0; } - -THUMB_FUNC u32 FUN_02030B3C(u32 param0, u32 param1, u32 param2) { - if (FUN_02031190() != 0) { +THUMB_FUNC u32 FUN_02030B3C(u32 param0, u32 param1, u32 param2) +{ + if (FUN_02031190() != 0) + { ErrorHandling(); return 0; } - - if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) { + if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) + { return 0; } - if (FUN_0202FA28() == 1) { + if (FUN_0202FA28() == 1) + { return FUN_02030A78(param0, param1, param2); } - if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0) != 0) { + if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0) != 0) + { return 1; } - - if (FUN_02033534() == 0xa) { + if (FUN_02033534() == 0xa) + { FUN_02031454(); } return 0; } - - -THUMB_FUNC u32 FUN_02030BC4(u32 param0, u32 param1, u32 param2) { - if (FUN_02031190() != 0) { +THUMB_FUNC u32 FUN_02030BC4(u32 param0, u32 param1, u32 param2) +{ + if (FUN_02031190() != 0) + { FUN_02031454(); return 0; } - if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) { + if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) + { return 0; } - if (FUN_0202FA28() == 1) { + if (FUN_0202FA28() == 1) + { return FUN_02030ADC(param0, param1, param2); } - if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 1) != 0) { + if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 1) != 0) + { return 1; } - - if (FUN_02033534() == 0xa) { + if (FUN_02033534() == 0xa) + { FUN_02031454(); } return 0; } - - -THUMB_FUNC u32 FUN_02030C4C(u32 param0, u32 param1) { +THUMB_FUNC u32 FUN_02030C4C(u32 param0, u32 param1) +{ return FUN_02030BC4(param0, param1, 0); } - -THUMB_FUNC int FUN_02030C58() { +THUMB_FUNC int FUN_02030C58() +{ return FUN_0202D498(&UNK_021C59F4.unk04->unk464); } extern void FUN_0202D934(u32 param0, u32 param1, u32 param2, u32 param3); -THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, u32 param3, void *param4) { +THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, u32 param3, void *param4) +{ FUN_0202D934(param0, param1, param2, param3); - *(u8 *)(param4+0xa) = 0xee; - *(u16 *)(param4+0x8) = 0xffff; - *(u32 *)(param4+0x4) = 0; + *(u8 *)(param4 + 0xa) = 0xee; + *(u16 *)(param4 + 0x8) = 0xffff; + *(u32 *)(param4 + 0x4) = 0; *(u32 *)(param4) = 0; } - extern int FUN_0202D478(s16 *param0); extern u32 FUN_0202D41C(s16 *param0); extern s16 FUN_0202D9A0(u32 param0); extern u32 FUN_0202DA04(u32 param0); extern u32 FUN_0202DA40(u32 param0, u32 param1, u16 param2); -struct UnkStruct2 { - u32 unk00; - u32 unk04; - u16 unk08; - u8 unk0a; -}; - - -THUMB_FUNC void FUN_02030C8C(s16 *param0, u32 param1, u32 param2, u32 param3, struct UnkStruct2 *param4) { - while (FUN_0202D478(param0) != 0) { +THUMB_FUNC void FUN_02030C8C( + s16 *param0, u32 param1, u32 param2, u32 param3, struct UnkStruct2 *param4) +{ + while (FUN_0202D478(param0) != 0) + { u32 r7 = param4->unk0a; - if (r7 == 0xee) { + if (r7 == 0xee) + { r7 = FUN_0202D41C(param0); - if (r7 == 0xee) { + if (r7 == 0xee) + { continue; } } @@ -1819,21 +1851,24 @@ THUMB_FUNC void FUN_02030C8C(s16 *param0, u32 param1, u32 param2, u32 param3, st int st10 = param0[2]; param4->unk0a = r7; int r4 = param4->unk08; - if (r4 == 0xffff) { + if (r4 == 0xffff) + { r4 = FUN_0202D9A0(r7); - if (UNK_021C59F4.unk04->unk689 != 0) { + if (UNK_021C59F4.unk04->unk689 != 0) + { return; } - if (r4 == 0xffff) { - if (FUN_0202D478(param0) < 1) { + if (r4 == 0xffff) + { + if (FUN_0202D478(param0) < 1) + { param0[2] = st10; return; } - - r4 = FUN_0202D41C(param0) <<8; + r4 = FUN_0202D41C(param0) << 8; r4 += FUN_0202D41C(param0); st10 = param0[2]; @@ -1842,65 +1877,83 @@ THUMB_FUNC void FUN_02030C8C(s16 *param0, u32 param1, u32 param2, u32 param3, st param4->unk08 = r4; } - - if (FUN_0202DA04(r7) != 0) { - if (param4->unk04 == 0) { + if (FUN_0202DA04(r7) != 0) + { + if (param4->unk04 == 0) + { param4->unk04 = FUN_0202DA40(r7, param1, param4->unk08); } int stc = FUN_0202D400(param0, param2, r4 - param4->unk00); - if (param4->unk04 != 0) { + if (param4->unk04 != 0) + { MI_CpuCopy8(param2, param4->unk04 + param4->unk00, stc); } - - if ((int)(param4->unk00 += stc) < (int)r4) { + if ((int)(param4->unk00 += stc) < (int)r4) + { continue; } FUN_02030C70(param1, r7, r4, param4->unk04, param4); - } else { - if (FUN_0202D478(param0) >= r4) { + } + else + { + if (FUN_0202D478(param0) >= r4) + { FUN_0202D400(param0, param2, r4); FUN_02030C70(param1, r7, r4, param2, param4); - } else { + } + else + { param0[2] = st10; return; } } - } } - - -THUMB_FUNC void FUN_02030DA4() { - if (UNK_021C59F4.unk04 != NULL) { - if (UNK_021C59F4.unk04->unk68B == 0) { +THUMB_FUNC void FUN_02030DA4() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk68B == 0) + { FUN_0202D4BC(&UNK_021C59F4.unk04->unk470); - if (FUN_0202D478(&UNK_021C59F4.unk04->unk470) > 0) { + if (FUN_0202D478(&UNK_021C59F4.unk04->unk470) > 0) + { UNK_021C59F4.unk04->unk470; - - FUN_02030C8C(&UNK_021C59F4.unk04->unk470, 0, UNK_021C59F4.unk04->unk460, 1, (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk5EC); + FUN_02030C8C(&UNK_021C59F4.unk04->unk470, + 0, + UNK_021C59F4.unk04->unk460, + 1, + (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk5EC); } } } } - -THUMB_FUNC void FUN_02030DFC() { - if (UNK_021C59F4.unk04 != NULL) { - if (UNK_021C59F4.unk04->unk68B == 0) { +THUMB_FUNC void FUN_02030DFC() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk68B == 0) + { int r7 = FUN_0202D858(FUN_02033534()) + 1; int r4; - for (r4 = 0; r4 < r7; r4++) { + for (r4 = 0; r4 < r7; r4++) + { FUN_0202D4BC(&UNK_021C59F4.unk04->unk4E8[r4]); - if (FUN_0202D478((s16 *)&UNK_021C59F4.unk04->unk4E8[r4]) > 0) { - - - FUN_02030C8C((s16 *)&UNK_021C59F4.unk04->unk4E8[r4], r4, UNK_021C59F4.unk04->unk460, 0, (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk58C[r4]); + if (FUN_0202D478((s16 *)&UNK_021C59F4.unk04->unk4E8[r4]) > 0) + { + + FUN_02030C8C((s16 *)&UNK_021C59F4.unk04->unk4E8[r4], + r4, + UNK_021C59F4.unk04->unk460, + 0, + (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk58C[r4]); } } } @@ -1908,23 +1961,25 @@ THUMB_FUNC void FUN_02030DFC() { } extern u32 MOD04_021D8018(); -extern u32 FUN_02030F40(); - - -THUMB_FUNC u32 FUN_02030E7C(u16 param0) { - if (UNK_021C59F4.unk04 == NULL) { +THUMB_FUNC u32 FUN_02030E7C(u16 param0) +{ + if (UNK_021C59F4.unk04 == NULL) + { return 0; } - - if (FUN_02033534() >= 0x13) { - if (UNK_021C59F4.unk04->unk687 != 0 && MOD04_021D8018() != 0xffffffff) { - if (param0 == 0) { + if (FUN_02033534() >= 0x13) + { + if (UNK_021C59F4.unk04->unk687 != 0 && MOD04_021D8018() != 0xffffffff) + { + if (param0 == 0) + { return 1; } - if (param0 == 1) { + if (param0 == 1) + { return 1; } } @@ -1932,26 +1987,34 @@ THUMB_FUNC u32 FUN_02030E7C(u16 param0) { return 0; } - if (FUN_02030F40() == 0) { + if (FUN_02030F40() == 0) + { return 0; } - if (FUN_0202CBD4() != 4) { + if (FUN_0202CBD4() != 4) + { return 0; } - if (FUN_02031190() == param0) { + if (FUN_02031190() == param0) + { return 1; } - if (FUN_02031190() == 0) { + if (FUN_02031190() == 0) + { u16 r0 = FUN_0202CB8C(); - if ((r0 & (1<unk65C & (1<unk65C & (1 << param0)) != 0) + { return 1; } } @@ -1959,46 +2022,46 @@ THUMB_FUNC u32 FUN_02030E7C(u16 param0) { return 0; } - - -THUMB_FUNC u32 FUN_02030F20() { +THUMB_FUNC u32 FUN_02030F20() +{ u32 r4 = 0; for (int i = 0; i < 8; i++) { - if (FUN_02030E7C(i) != 0) { + if (FUN_02030E7C(i) != 0) + { r4++; } } - return r4; - } extern u32 FUN_0202EDF8(); -THUMB_FUNC u32 FUN_02030F40() { - if (UNK_021C59F4.unk04 != NULL && FUN_02033534() >= 0x13) { - return 1; +THUMB_FUNC u32 FUN_02030F40() +{ + if (UNK_021C59F4.unk04 != NULL && FUN_02033534() >= 0x13) + { + return 1; } return FUN_0202EDF8(); } - - -THUMB_FUNC void FUN_02030F60(u8 param0) { +THUMB_FUNC void FUN_02030F60(u8 param0) +{ UNK_021C59F4.unk04->unk62B = param0; } - -THUMB_FUNC u8 FUN_02030F74(u32 param0) { +THUMB_FUNC u8 FUN_02030F74(u32 param0) +{ return UNK_021C59F4.unk04->unk620[param0]; } - -THUMB_FUNC u32 FUN_02030F88(u32 param0) { - if (UNK_021C59F4.unk04 == NULL) { +THUMB_FUNC u32 FUN_02030F88(u32 param0) +{ + if (UNK_021C59F4.unk04 == NULL) + { return 0; } @@ -2008,117 +2071,133 @@ THUMB_FUNC u32 FUN_02030F88(u32 param0) { return ret; } -THUMB_FUNC void FUN_02030FA8() { - if (UNK_021C59F4.unk04 != NULL) { +THUMB_FUNC void FUN_02030FA8() +{ + if (UNK_021C59F4.unk04 != NULL) + { UNK_021C59F4.unk04->unk628 |= 0x8000; } } - -THUMB_FUNC void FUN_02030FC8() { - if (UNK_021C59F4.unk04 != NULL) { +THUMB_FUNC void FUN_02030FC8() +{ + if (UNK_021C59F4.unk04 != NULL) + { UNK_021C59F4.unk04->unk628 = 0; } } - -THUMB_FUNC u32 FUN_02030FE0() { - if (UNK_021C59F4.unk04 != NULL) { +THUMB_FUNC u32 FUN_02030FE0() +{ + if (UNK_021C59F4.unk04 != NULL) + { return UNK_021C59F4.unk04->unk628 & 0x8000; } return 1; } - - -THUMB_FUNC void FUN_02031000(u32 param0, u32 param1, u32 param2) { - if (FUN_0202FA28() == 1) { +THUMB_FUNC void FUN_02031000(u32 param0, u32 param1, u32 param2) +{ + if (FUN_0202FA28() == 1) + { FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 0); return; } - FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0); - } - -THUMB_FUNC void FUN_0203105C(u32 param0, u32 param1, u32 param2) { +THUMB_FUNC void FUN_0203105C(u32 param0, u32 param1, u32 param2) +{ FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 0, 0); } -extern u32 FUN_020311D0(u32 param0, u8 *param1); - - - -THUMB_FUNC void FUN_02031088() { - if (UNK_021C59F4.unk04 != NULL) { - if (UNK_021C59F4.unk04->unk67B != 1) { - if (UNK_021C59F4.unk04->unk67B != 3) { +THUMB_FUNC void FUN_02031088() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk67B != 1) + { + if (UNK_021C59F4.unk04->unk67B != 3) + { return; } - } else { + } + else + { u32 res; - if (FUN_0202FA28() == 1) { + if (FUN_0202FA28() == 1) + { res = FUN_020311D0(0xb, &UNK_021C59F4.unk04->unk67C); - } else { + } + else + { res = FUN_02030BC4(0xb, &UNK_021C59F4.unk04->unk67C, 1); } - if (res == 0) { + if (res == 0) + { return; } UNK_021C59F4.unk04->unk67B = 2; return; - - } - if (FUN_020311D0(0xc, &UNK_021C59F4.unk04->unk67C) != 0) { + if (FUN_020311D0(0xc, &UNK_021C59F4.unk04->unk67C) != 0) + { FUN_0202F9E0(UNK_021C59F4.unk04->unk67C); UNK_021C59F4.unk04->unk67B = 0; } - } } - -THUMB_FUNC void FUN_0203110C(u32 param0, u32 param1, u8 *param2) { - if (FUN_02031190() == 0) { +THUMB_FUNC void FUN_0203110C(u32 param0, u32 param1, u8 *param2) +{ + if (FUN_02031190() == 0) + { UNK_021C59F4.unk04->unk67B = 1; UNK_021C59F4.unk04->unk67C = param2[0]; } } -THUMB_FUNC void FUN_02031134(u32 param0, u32 param1, u8 *param2) { - if (FUN_02031190() != 0) { +THUMB_FUNC void FUN_02031134(u32 param0, u32 param1, u8 *param2) +{ + if (FUN_02031190() != 0) + { UNK_021C59F4.unk04->unk67C = param2[0]; UNK_021C59F4.unk04->unk67B = 3; - } + } } - -THUMB_FUNC void FUN_0203115C(u32 param0, u32 param1, u8 *param2) { - if (FUN_02031190() == 0 && UNK_021C59F4.unk04->unk67B == 2) { +THUMB_FUNC void FUN_0203115C(u32 param0, u32 param1, u8 *param2) +{ + if (FUN_02031190() == 0 && UNK_021C59F4.unk04->unk67B == 2) + { FUN_0202F9E0(*param2); UNK_021C59F4.unk04->unk67B = 0; } } - extern u16 FUN_0202D19C(); -THUMB_FUNC u16 FUN_02031190() { - if (UNK_021C59F4.unk04 != NULL) { - if (FUN_02033534() >= 0x13) { +THUMB_FUNC u16 FUN_02031190() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (FUN_02033534() >= 0x13) + { u32 res = MOD04_021D8018(); - if (res != 0xffffffff) { + if (res != 0xffffffff) + { return res; } - } else { - if (FUN_02031280() != 0) { + } + else + { + if (FUN_02031280() != 0) + { return 0; } @@ -2129,31 +2208,33 @@ THUMB_FUNC u16 FUN_02031190() { return 0; } - -THUMB_FUNC u32 FUN_020311D0(u32 param0, u8 *param1) { +THUMB_FUNC u32 FUN_020311D0(u32 param0, u8 *param1) +{ return FUN_02030ADC(param0, param1, 0); } - -THUMB_FUNC u32 FUN_020311DC(u32 param0) { +THUMB_FUNC u32 FUN_020311DC(u32 param0) +{ return FUN_02030ADC(param0, 0, 0); } - -THUMB_FUNC u32 FUN_020311E8() { +THUMB_FUNC u32 FUN_020311E8() +{ return FUN_0202EE24(); } - extern void FUN_020334E8(u32 param0, u32 param1); extern u32 FUN_0202EE60(); -THUMB_FUNC u32 FUN_020311F0() { - if (FUN_02031280() != 0) { +THUMB_FUNC u32 FUN_020311F0() +{ + if (FUN_02031280() != 0) + { return 0; } - if (UNK_021C59F4.unk04 != NULL && UNK_021C59F4.unk04->unk689 != 0) { + if (UNK_021C59F4.unk04 != NULL && UNK_021C59F4.unk04->unk689 != 0) + { FUN_020334E8(1, 1); return 1; } @@ -2161,40 +2242,45 @@ THUMB_FUNC u32 FUN_020311F0() { return FUN_0202EE60(); } - - -THUMB_FUNC int FUN_02031228(u16 param0) { - if (FUN_0202D858(param0) >= 5) { +THUMB_FUNC int FUN_02031228(u16 param0) +{ + if (FUN_0202D858(param0) >= 5) + { return 0xc; } - if (FUN_0202FA28() == 0) { + if (FUN_0202FA28() == 0) + { return 0xc; } return 0x26; } -THUMB_FUNC u32 FUN_02031248(u32 param0) { - return FUN_0202D858(param0) +1; +THUMB_FUNC u32 FUN_02031248(u32 param0) +{ + return FUN_0202D858(param0) + 1; } extern u32 FUN_0202D884(u16 param0); - - -THUMB_FUNC u32 FUN_02031258(u32 param0) { - return FUN_0202D884(param0) +1; +THUMB_FUNC u32 FUN_02031258(u32 param0) +{ + return FUN_0202D884(param0) + 1; } -THUMB_FUNC void FUN_02031268(u8 param0) { - if (UNK_021C59F4.unk04 != NULL) { +THUMB_FUNC void FUN_02031268(u8 param0) +{ + if (UNK_021C59F4.unk04 != NULL) + { UNK_021C59F4.unk04->unk686 = param0; } } -THUMB_FUNC u8 FUN_02031280() { - if (UNK_021C59F4.unk04 != NULL) { +THUMB_FUNC u8 FUN_02031280() +{ + if (UNK_021C59F4.unk04 != NULL) + { return UNK_021C59F4.unk04->unk686; } @@ -2203,8 +2289,10 @@ THUMB_FUNC u8 FUN_02031280() { extern void FUN_0202F05C(); -THUMB_FUNC void FUN_0203129C() { - if (FUN_0202F03C() == 0 && FUN_02031190() == 0) { +THUMB_FUNC void FUN_0203129C() +{ + if (FUN_0202F03C() == 0 && FUN_02031190() == 0) + { u32 st0; FUN_02030C4C(2, &st0); } @@ -2214,16 +2302,16 @@ THUMB_FUNC void FUN_0203129C() { extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *); - #ifdef NONMATCHING -THUMB_FUNC void FUN_020312BC(u32 param0) { +THUMB_FUNC void FUN_020312BC(u32 param0) +{ RTCDate st10; RTCTime st4; GF_RTC_CopyDateTime(&st10, &st4); gMain.unk2C + st4.second; - u32 r6 = st10.year<<4 + st10.month; - u32 r5 = 0<<4 | st10.year>>0x1c; + u32 r6 = st10.year << 4 + st10.month; + u32 r5 = 0 << 4 | st10.year >> 0x1c; st4.second; u32 st0 = st10.day; @@ -2231,108 +2319,69 @@ THUMB_FUNC void FUN_020312BC(u32 param0) { st4.minute; 0x00000000; - (0x00000000 + r5) <<5; - - + (0x00000000 + r5) << 5; } #else -THUMB_FUNC asm void FUN_020312BC(u32 param0) { - push {r3-r7, lr} - sub sp, #0x20 - add r4, r0, #0x0 - add r0, sp, #0x10 - add r1, sp, #0x4 - bl GF_RTC_CopyDateTime - ldr r0, =gMain - ldr r6, [sp, #0x10] - mov r5, #0x0 - lsr r7, r6, #0x1c - lsl r5, r5, #0x4 - ldr r1, [sp, #0xc] - ldr r0, [r0, #0x2c] - lsl r6, r6, #0x4 - add r3, r1, r0 - ldr r0, [sp, #0x18] - orr r5, r7 - str r0, [sp, #0x0] - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x4] - add r6, r0, r6 - ldr r0, =0x00000000 - ldr r2, [sp, #0x8] - adc r0, r5 - lsr r5, r6, #0x1b - lsl r0, r0, #0x5 - orr r0, r5 - ldr r5, [sp, #0x0] - lsl r6, r6, #0x5 - add r6, r5, r6 - ldr r5, =0x00000000 - adc r5, r0 - lsr r0, r6, #0x1b - lsl r5, r5, #0x5 - orr r5, r0 - lsl r0, r6, #0x5 - add r6, r1, r0 - ldr r1, =0x00000000 - adc r1, r5 - lsr r0, r6, #0x1a - lsl r1, r1, #0x6 - orr r1, r0 - lsl r0, r6, #0x6 - add r5, r2, r0 - ldr r2, =0x00000000 - adc r2, r1 - lsr r0, r5, #0x1a - lsl r1, r2, #0x6 - orr r1, r0 - lsl r0, r5, #0x6 - add r2, r3, r0 - ldr r0, =0x00000000 - str r2, [r4, #0x0] - adc r0, r1 - str r0, [r4, #0x4] - ldr r1, =0x6C078965 - ldr r0, =0x5D588B65 - str r1, [r4, #0x8] - str r0, [r4, #0xc] - ldr r0, =0x00269EC3 - str r0, [r4, #0x10] - mov r0, #0x0 - str r0, [r4, #0x14] - add sp, #0x20 - pop {r3-r7, pc} +THUMB_FUNC asm void FUN_020312BC(u32 param0) +{ + push{ r3 - r7, lr } sub sp, #0x20 add r4, r0, #0x0 add r0, sp, #0x10 add r1, sp, + #0x4 bl GF_RTC_CopyDateTime ldr r0, + = gMain ldr r6, [ sp, #0x10 ] mov r5, #0x0 lsr r7, r6, #0x1c lsl r5, r5, #0x4 ldr r1, + [ sp, #0xc ] ldr r0, [ r0, #0x2c ] lsl r6, r6, #0x4 add r3, r1, r0 ldr r0, + [ sp, #0x18 ] orr r5, r7 str r0, [ sp, #0x0 ] ldr r0, [ sp, #0x14 ] ldr r1, + [ sp, #0x4 ] add r6, r0, + r6 ldr r0, = 0x00000000 ldr r2, [ sp, #0x8 ] adc r0, r5 lsr r5, r6, #0x1b lsl r0, r0, + #0x5 orr r0, r5 ldr r5, [ sp, #0x0 ] lsl r6, r6, #0x5 add r6, r5, r6 ldr r5, + = 0x00000000 adc r5, r0 lsr r0, r6, #0x1b lsl r5, r5, #0x5 orr r5, r0 lsl r0, r6, + #0x5 add r6, r1, r0 ldr r1, = 0x00000000 adc r1, r5 lsr r0, r6, #0x1a lsl r1, r1, + #0x6 orr r1, r0 lsl r0, r6, #0x6 add r5, r2, r0 ldr r2, = 0x00000000 adc r2, + r1 lsr r0, r5, #0x1a lsl r1, r2, #0x6 orr r1, r0 lsl r0, r5, #0x6 add r2, r3, + r0 ldr r0, = 0x00000000 str r2, [ r4, #0x0 ] adc r0, r1 str r0, [ r4, #0x4 ] ldr r1, + = 0x6C078965 ldr r0, = 0x5D588B65 str r1, [ r4, #0x8 ] str r0, [ r4, #0xc ] ldr r0, + = 0x00269EC3 str r0, [ r4, #0x10 ] mov r0, #0x0 str r0, [ r4, #0x14 ] add sp, + #0x20 pop + { + r3 - r7, pc + } } #endif extern void FUN_0202D830(u8 *param0, u32 param1); -THUMB_FUNC void FUN_02031354(u32 param0) { +THUMB_FUNC void FUN_02031354(u32 param0) +{ FUN_0202D830(UNK_021C59F4.unk04->unk56C, param0); } - -THUMB_FUNC u32 FUN_02031370() { +THUMB_FUNC u32 FUN_02031370() +{ return FUN_0202D4E4(UNK_021C59F4.unk04->unk56C); } -THUMB_FUNC u32 FUN_02031388() { +THUMB_FUNC u32 FUN_02031388() +{ return FUN_0202D4E4(UNK_021C59F4.unk04->unk54C); } -THUMB_FUNC void FUN_020313A0(u8 param0) { +THUMB_FUNC void FUN_020313A0(u8 param0) +{ UNK_021C59F4.unk04->unk687 = param0; } -THUMB_FUNC void FUN_020313B4(u8 param0, u32 param1) { - if (UNK_021C59F4.unk04 != NULL) { +THUMB_FUNC void FUN_020313B4(u8 param0, u32 param1) +{ + if (UNK_021C59F4.unk04 != NULL) + { UNK_021C59F4.unk04->unk677[param1] = param0; } } -THUMB_FUNC u32 FUN_020313CC(u32 param0) { - if (UNK_021C59F4.unk04 != NULL) { - if (UNK_021C59F4.unk04->unk677[param0] != 0xff) { +THUMB_FUNC u32 FUN_020313CC(u32 param0) +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk677[param0] != 0xff) + { return UNK_021C59F4.unk04->unk677[param0]; } } @@ -2342,18 +2391,23 @@ THUMB_FUNC u32 FUN_020313CC(u32 param0) { extern u32 MOD04_021D8624(); -THUMB_FUNC u32 FUN_020313EC() { - if (FUN_02033534() < 0x13) { +THUMB_FUNC u32 FUN_020313EC() +{ + if (FUN_02033534() < 0x13) + { return 0; } return MOD04_021D8624(); } -THUMB_FUNC void FUN_02031400(u32 param0) { - if (FUN_02033534() >= 0x13) { +THUMB_FUNC void FUN_02031400(u32 param0) +{ + if (FUN_02033534() >= 0x13) + { UNK_021C59F4.unk04->unk630 = param0; - if (param0 != 0) { + if (param0 != 0) + { UNK_021C59F4.unk04->unk634 = 0; UNK_021C59F4.unk04->unk638[0] = 0; UNK_021C59F4.unk04->unk638[1] = 0; @@ -2361,22 +2415,25 @@ THUMB_FUNC void FUN_02031400(u32 param0) { } } - -THUMB_FUNC u32 FUN_02031438() { - if (UNK_021C59F4.unk04->unk681 != 0) { +THUMB_FUNC u32 FUN_02031438() +{ + if (UNK_021C59F4.unk04->unk681 != 0) + { return 1; } return 0; } - -THUMB_FUNC void FUN_02031454() { +THUMB_FUNC void FUN_02031454() +{ UNK_021C59F4.unk04->unk689 = 1; } -THUMB_FUNC void FUN_02031468() { - if (UNK_021C59F4.unk04 != NULL) { - UNK_021C59F4.unk04->unk68A = 1; +THUMB_FUNC void FUN_02031468() +{ + if (UNK_021C59F4.unk04 != NULL) + { + UNK_021C59F4.unk04->unk68A = 1; } } \ No newline at end of file -- cgit v1.2.3 From 8e5d36dc053928ecc36028e818c8a3f8fd2cc9a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sat, 10 Apr 2021 17:55:22 +0200 Subject: fix asm functions --- arm9/src/unk_0202F150.c | 597 ++++++++++++++++++++++++++---------------------- 1 file changed, 326 insertions(+), 271 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c index 15a67f8d..7973702c 100644 --- a/arm9/src/unk_0202F150.c +++ b/arm9/src/unk_0202F150.c @@ -763,86 +763,98 @@ THUMB_FUNC u32 FUN_0202FE2C(int param0) #else THUMB_FUNC asm u32 FUN_0202FE2C(int param0) { - push{ r3 - r7, lr } sub sp, #0x10 str r0, [ sp, #0x0 ] mov r0, #0x0 str r0, - [ sp, #0x4 ] bl FUN_02033534 lsl r0, r0, #0x10 lsr r0, r0, #0x10 bl FUN_02031228 str r0, - [ sp, #0xc ] bl FUN_02033534 lsl r0, r0, #0x10 lsr r0, r0, #0x10 bl FUN_0202D858 add r0, r0, - #0x1 mov r7, #0x0 str r0, [ sp, #0x8 ] cmp r0, #0x0 ble _0202FED0 ldr r0, - [ sp, #0x0 ] mov r1, #0xc0 add r6, r0, #0x0 add r4, r7, #0x0 add r5, r7, #0x0 mul r6, - r1 _0202FE66 : ldr r0, - = UNK_021C59F4 ldr r1, - [ r0, #0x4 ] ldr r0, - = 0x0000047C add r0, - r1, - r0 add r0, - r0, - r4 bl FUN_0202D4BC lsl r0, - r7, - #0x10 lsr r0, - r0, - #0x10 bl FUN_02030E7C cmp r0, - #0x0 beq _0202FE90 ldr r0, - = UNK_021C59F4 mov r1, - #0xe ldr r0, - [ r0, #0x4 ] add r0, - r6, - r0 add r2, - r5, - r0 mov r0, - #0x55 lsl r0, - r0, - #0x2 strb r1, - [ r2, r0 ] _0202FE90 : ldr r0, - = UNK_021C59F4 mov r2, - #0x55 ldr r1, - [ r0, #0x4 ] ldr r0, - = 0x0000047C lsl r2, - r2, - #0x2 add r0, - r1, - r0 add r1, - r1, - r2 add r1, - r1, - r6 ldr r2, - [ sp, #0xc ] add r0, - r0, - r4 add r1, - r1, - r5 bl FUN_0202D400 ldr r0, - = UNK_021C59F4 ldr r0, - [ r0, #0x4 ] add r0, - r6, - r0 add r1, - r5, - r0 mov r0, - #0x55 lsl r0, - r0, - #0x2 ldrb r0, - [ r1, r0 ] cmp r0, - #0xe bne _0202FEC2 ldr r0, - [ sp, #0x4 ] add r0, - r0, - #0x1 str r0, - [ sp, #0x4 ] _0202FEC2 : ldr r0, - [ sp, #0xc ] add r7, - r7, - #0x1 add r5, - r5, - r0 ldr r0, - [ sp, #0x8 ] add r4, - #0xc cmp r7, - r0 blt _0202FE66 _0202FED0 - : ldr r1, - [ sp, #0x4 ] ldr r0, - [ sp, #0x8 ] cmp r1, - r0 bne _0202FEDE add sp, - #0x10 mov r0, - #0x0 pop{ r3 - r7, pc } _0202FEDE : mov r0, - #0x1 add sp, - #0x10 pop - { - r3 - r7, pc - } + // clang-format off + push {r3-r7, lr} + sub sp, #0x10 + str r0, [sp, #0x0] + mov r0, #0x0 + str r0, [sp, #0x4] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02031228 + str r0, [sp, #0xc] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_0202D858 + add r0, r0, #0x1 + mov r7, #0x0 + str r0, [sp, #0x8] + cmp r0, #0x0 + ble _0202FED0 + ldr r0, [sp, #0x0] + mov r1, #0xc0 + add r6, r0, #0x0 + add r4, r7, #0x0 + add r5, r7, #0x0 + mul r6, r1 +_0202FE66: + ldr r0, =UNK_021C59F4 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + add r0, r1, r0 + add r0, r0, r4 + bl FUN_0202D4BC + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0x0 + beq _0202FE90 + ldr r0, =UNK_021C59F4 + mov r1, #0xe + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r2, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + strb r1, [r2, r0] +_0202FE90: + ldr r0, =UNK_021C59F4 + mov r2, #0x55 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + lsl r2, r2, #0x2 + add r0, r1, r0 + add r1, r1, r2 + add r1, r1, r6 + ldr r2, [sp, #0xc] + add r0, r0, r4 + add r1, r1, r5 + bl FUN_0202D400 + ldr r0, =UNK_021C59F4 + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r1, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + ldrb r0, [r1, r0] + cmp r0, #0xe + bne _0202FEC2 + ldr r0, [sp, #0x4] + add r0, r0, #0x1 + str r0, [sp, #0x4] +_0202FEC2: + ldr r0, [sp, #0xc] + add r7, r7, #0x1 + add r5, r5, r0 + ldr r0, [sp, #0x8] + add r4, #0xc + cmp r7, r0 + blt _0202FE66 +_0202FED0: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x8] + cmp r1, r0 + bne _0202FEDE + add sp, #0x10 + mov r0, #0x0 + pop {r3-r7, pc} +_0202FEDE: + mov r0, #0x1 + add sp, #0x10 + pop {r3-r7, pc} + // clang-format on } #endif @@ -1125,7 +1137,6 @@ 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, u32 param1, u16 param2) { if (UNK_021C59F4.unk04->unk66F[param0] != 0) @@ -1348,173 +1359,173 @@ THUMB_FUNC void FUN_02030674() #else THUMB_FUNC asm void FUN_02030674() { - push{ r3 - r7, lr } ldr r7, = UNK_021C59F4 mov r6, #0x0 ldr r5, [ r7, #0x4 ] ldr r2, - = 0x0000062C add r4, r6, #0x0 ldrb r0, [ r5, r2 ] cmp r0, - #0x0 beq _02030690 sub r1, r2, #0x4 ldrh r1, [ r5, r1 ] mov r3, - #0xf0 tst r3, - r1 bne _02030692 _02030690 : b _02030794 _02030692 : cmp r0, - #0x2 bne _020306D0 mov r0, - #0x20 tst r0, - r1 beq _020306A4 mov r0, - #0x10 orr r0, - r6 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 _020306A4 : mov r0, - #0x10 tst r0, - r1 beq _020306B2 mov r0, - #0x20 orr r0, - r4 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 _020306B2 : mov r0, - #0x40 tst r0, - r1 beq _020306C0 mov r0, - #0x80 orr r0, - r4 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 _020306C0 : mov r0, - #0x80 tst r0, - r1 beq _0203077E mov r0, - #0x40 orr r0, - r4 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 b _0203077E _020306D0 : add r0, - r2, - #0x2 ldrh r0, - [ r5, r0 ] cmp r0, - #0x0 beq _020306F2 add r4, - r0, - #0x0 add r0, - r2, - #0x1 ldrsb r0, - [ r5, r0 ] sub r1, - r0, - #0x1 add r0, - r2, - #0x1 strb r1, - [ r5, r0 ] ldr r1, - [ r7, #0x4 ] ldrsb r0, - [ r1, r0 ] cmp r0, - #0x0 bge _0203077E add r0, - r2, - #0x2 strh r6, - [ r1, r0 ] b _0203077E _020306F2 : add r0, - r2, - #0x0 sub r0, - #0x34 add r6, - r5, - r0 sub r2, - #0x34 ldr r0, - [ r6, #0x8 ] ldr r1, - [ r6, #0xc ] ldr r2, - [ r5, r2 ] ldr r3, - [ r6, #0x4 ] bl _ll_mul add r3, - r0, - #0x0 add r2, - r1, - #0x0 ldr r0, - [ r6, #0x10 ] ldr r1, - [ r6, #0x14 ] add r0, - r0, - r3 adc r1, - r2 ldr r2, - = 0x000005F8 str r0, - [ r5, r2 ] mov r2, - #0x0 str r1, - [ r6, #0x4 ] lsr r0, - r1, - #0x1e lsl r1, - r2, - #0x2 orr r1, - r0 cmp r1, - #0x3 bhi _02030746 add r0, - r1, - r1 add r0, - pc ldrh r0, - [ r0, #0x6 ] lsl r0, - r0, - #0x10 asr r0, - r0, - #0x10 add pc, - r0 _02030730 - : // jump table (using 16-bit offset) - // huge hack to get the correct jump offset. Is there a way to write constants? - lsl r6, - r0, - #0x0 // case 0 - lsl r2, - r1, - #0x0 // case 1 - lsl r6, - r1, - #0x0 // case 2 - lsl r2, - r2, - #0x0 // case 3 - - // intended jump offset - // .short _02030738 - _02030730 - 2; case 0 - // .short _0203073C - _02030730 - 2; case 1 - // .short _02030740 - _02030730 - 2; case 2 - // .short _02030744 - _02030730 - 2; case 3 - _02030738 : mov r4, - #0x20 b _02030746 _0203073C : mov r4, - #0x10 b _02030746 _02030740 : mov r4, - #0x40 b _02030746 _02030744 : mov r4, - #0x80 _02030746 : ldr r0, - = UNK_021C59F4 ldr r5, - [ r0, #0x4 ] ldr r0, - = 0x000005F8 add r6, - r5, - r0 ldr r0, - [ r6, #0x8 ] ldr r1, - [ r6, #0xc ] ldr r2, - [ r6, #0x0 ] ldr r3, - [ r6, #0x4 ] bl _ll_mul ldr r3, - [ r6, #0x10 ] ldr r2, - [ r6, #0x14 ] add r0, - r3, - r0 adc r2, - r1 ldr r1, - = 0x000005F8 mov r3, - #0x0 str r0, - [ r5, r1 ] str r2, - [ r6, #0x4 ] lsr r0, - r2, - #0x1c lsl r2, - r3, - #0x4 orr r2, - r0 add r0, - r1, - #0x0 add r0, - #0x35 strb r2, - [ r5, r0 ] ldr r0, - = UNK_021C59F4 add r1, - #0x36 ldr r0, - [ r0, #0x4 ] strh r4, - [ r0, r1 ] _0203077E : ldr r2, - = UNK_021C59F4 ldr r1, - = 0x00000628 ldr r5, - [ r2, #0x4 ] mov r0, - #0xf0 ldrh r3, - [ r5, r1 ] bic r3, - r0 strh r3, - [ r5, r1 ] ldr r2, - [ r2, #0x4 ] ldrh r0, - [ r2, r1 ] add r0, - r0, - r4 strh r0, - [ r2, r1 ] _02030794 : pop - { - r3 - r7, pc - } + // clang-format off + push {r3-r7, lr} + ldr r7, =UNK_021C59F4 + mov r6, #0x0 + ldr r5, [r7, #0x4] + ldr r2, =0x0000062C + add r4, r6, #0x0 + ldrb r0, [r5, r2] + cmp r0, #0x0 + beq _02030690 + sub r1, r2, #0x4 + ldrh r1, [r5, r1] + mov r3, #0xf0 + tst r3, r1 + bne _02030692 +_02030690: + b _02030794 +_02030692: + cmp r0, #0x2 + bne _020306D0 + mov r0, #0x20 + tst r0, r1 + beq _020306A4 + mov r0, #0x10 + orr r0, r6 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306A4: + mov r0, #0x10 + tst r0, r1 + beq _020306B2 + mov r0, #0x20 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306B2: + mov r0, #0x40 + tst r0, r1 + beq _020306C0 + mov r0, #0x80 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306C0: + mov r0, #0x80 + tst r0, r1 + beq _0203077E + mov r0, #0x40 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 + b _0203077E +_020306D0: + add r0, r2, #0x2 + ldrh r0, [r5, r0] + cmp r0, #0x0 + beq _020306F2 + add r4, r0, #0x0 + add r0, r2, #0x1 + ldrsb r0, [r5, r0] + sub r1, r0, #0x1 + add r0, r2, #0x1 + strb r1, [r5, r0] + ldr r1, [r7, #0x4] + ldrsb r0, [r1, r0] + cmp r0, #0x0 + bge _0203077E + add r0, r2, #0x2 + strh r6, [r1, r0] + b _0203077E +_020306F2: + add r0, r2, #0x0 + sub r0, #0x34 + add r6, r5, r0 + sub r2, #0x34 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r5, r2] + ldr r3, [r6, #0x4] + bl _ll_mul + add r3, r0, #0x0 + add r2, r1, #0x0 + ldr r0, [r6, #0x10] + ldr r1, [r6, #0x14] + add r0, r0, r3 + adc r1, r2 + ldr r2, =0x000005F8 + str r0, [r5, r2] + mov r2, #0x0 + str r1, [r6, #0x4] + lsr r0, r1, #0x1e + lsl r1, r2, #0x2 + orr r1, r0 + cmp r1, #0x3 + bhi _02030746 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #0x6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02030730: // jump table (using 16-bit offset) + // huge hack to get the correct jump offset. Is there a way to write constants? + lsl r6, r0, #0x0 // case 0 + lsl r2, r1, #0x0 // case 1 + lsl r6, r1, #0x0 // case 2 + lsl r2, r2, #0x0 // case 3 + + // intended jump offset + // .short _02030738 - _02030730 - 2; case 0 + // .short _0203073C - _02030730 - 2; case 1 + // .short _02030740 - _02030730 - 2; case 2 + // .short _02030744 - _02030730 - 2; case 3 +_02030738: + mov r4, #0x20 + b _02030746 +_0203073C: + mov r4, #0x10 + b _02030746 +_02030740: + mov r4, #0x40 + b _02030746 +_02030744: + mov r4, #0x80 +_02030746: + ldr r0, =UNK_021C59F4 + ldr r5, [r0, #0x4] + ldr r0, =0x000005F8 + add r6, r5, r0 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r6, #0x0] + ldr r3, [r6, #0x4] + bl _ll_mul + ldr r3, [r6, #0x10] + ldr r2, [r6, #0x14] + add r0, r3, r0 + adc r2, r1 + ldr r1, =0x000005F8 + mov r3, #0x0 + str r0, [r5, r1] + str r2, [r6, #0x4] + lsr r0, r2, #0x1c + lsl r2, r3, #0x4 + orr r2, r0 + add r0, r1, #0x0 + add r0, #0x35 + strb r2, [r5, r0] + ldr r0, =UNK_021C59F4 + add r1, #0x36 + ldr r0, [r0, #0x4] + strh r4, [r0, r1] +_0203077E: + ldr r2, =UNK_021C59F4 + ldr r1, =0x00000628 + ldr r5, [r2, #0x4] + mov r0, #0xf0 + ldrh r3, [r5, r1] + bic r3, r0 + strh r3, [r5, r1] + ldr r2, [r2, #0x4] + ldrh r0, [r2, r1] + add r0, r0, r4 + strh r0, [r2, r1] +_02030794: + pop {r3-r7, pc} + // clang-format on } #endif @@ -1569,7 +1580,6 @@ THUMB_FUNC void FUN_0203086C() { } - THUMB_FUNC u32 FUN_02030870(u8 *param0) { if (UNK_021C59F4.unk04->unk62A != 0) @@ -1830,8 +1840,6 @@ extern s16 FUN_0202D9A0(u32 param0); extern u32 FUN_0202DA04(u32 param0); extern u32 FUN_0202DA40(u32 param0, u32 param1, u16 param2); - - THUMB_FUNC void FUN_02030C8C( s16 *param0, u32 param1, u32 param2, u32 param3, struct UnkStruct2 *param4) { @@ -2113,7 +2121,6 @@ THUMB_FUNC void FUN_0203105C(u32 param0, u32 param1, u32 param2) FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 0, 0); } - THUMB_FUNC void FUN_02031088() { if (UNK_021C59F4.unk04 != NULL) @@ -2324,25 +2331,73 @@ THUMB_FUNC void FUN_020312BC(u32 param0) #else THUMB_FUNC asm void FUN_020312BC(u32 param0) { - push{ r3 - r7, lr } sub sp, #0x20 add r4, r0, #0x0 add r0, sp, #0x10 add r1, sp, - #0x4 bl GF_RTC_CopyDateTime ldr r0, - = gMain ldr r6, [ sp, #0x10 ] mov r5, #0x0 lsr r7, r6, #0x1c lsl r5, r5, #0x4 ldr r1, - [ sp, #0xc ] ldr r0, [ r0, #0x2c ] lsl r6, r6, #0x4 add r3, r1, r0 ldr r0, - [ sp, #0x18 ] orr r5, r7 str r0, [ sp, #0x0 ] ldr r0, [ sp, #0x14 ] ldr r1, - [ sp, #0x4 ] add r6, r0, - r6 ldr r0, = 0x00000000 ldr r2, [ sp, #0x8 ] adc r0, r5 lsr r5, r6, #0x1b lsl r0, r0, - #0x5 orr r0, r5 ldr r5, [ sp, #0x0 ] lsl r6, r6, #0x5 add r6, r5, r6 ldr r5, - = 0x00000000 adc r5, r0 lsr r0, r6, #0x1b lsl r5, r5, #0x5 orr r5, r0 lsl r0, r6, - #0x5 add r6, r1, r0 ldr r1, = 0x00000000 adc r1, r5 lsr r0, r6, #0x1a lsl r1, r1, - #0x6 orr r1, r0 lsl r0, r6, #0x6 add r5, r2, r0 ldr r2, = 0x00000000 adc r2, - r1 lsr r0, r5, #0x1a lsl r1, r2, #0x6 orr r1, r0 lsl r0, r5, #0x6 add r2, r3, - r0 ldr r0, = 0x00000000 str r2, [ r4, #0x0 ] adc r0, r1 str r0, [ r4, #0x4 ] ldr r1, - = 0x6C078965 ldr r0, = 0x5D588B65 str r1, [ r4, #0x8 ] str r0, [ r4, #0xc ] ldr r0, - = 0x00269EC3 str r0, [ r4, #0x10 ] mov r0, #0x0 str r0, [ r4, #0x14 ] add sp, - #0x20 pop - { - r3 - r7, pc - } + // clang-format off + push {r3-r7, lr} + sub sp, #0x20 + add r4, r0, #0x0 + add r0, sp, #0x10 + add r1, sp, #0x4 + bl GF_RTC_CopyDateTime + ldr r0, =gMain + ldr r6, [sp, #0x10] + mov r5, #0x0 + lsr r7, r6, #0x1c + lsl r5, r5, #0x4 + ldr r1, [sp, #0xc] + ldr r0, [r0, #0x2c] + lsl r6, r6, #0x4 + add r3, r1, r0 + ldr r0, [sp, #0x18] + orr r5, r7 + str r0, [sp, #0x0] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x4] + add r6, r0, r6 + ldr r0, =0x00000000 + ldr r2, [sp, #0x8] + adc r0, r5 + lsr r5, r6, #0x1b + lsl r0, r0, #0x5 + orr r0, r5 + ldr r5, [sp, #0x0] + lsl r6, r6, #0x5 + add r6, r5, r6 + ldr r5, =0x00000000 + adc r5, r0 + lsr r0, r6, #0x1b + lsl r5, r5, #0x5 + orr r5, r0 + lsl r0, r6, #0x5 + add r6, r1, r0 + ldr r1, =0x00000000 + adc r1, r5 + lsr r0, r6, #0x1a + lsl r1, r1, #0x6 + orr r1, r0 + lsl r0, r6, #0x6 + add r5, r2, r0 + ldr r2, =0x00000000 + adc r2, r1 + lsr r0, r5, #0x1a + lsl r1, r2, #0x6 + orr r1, r0 + lsl r0, r5, #0x6 + add r2, r3, r0 + ldr r0, =0x00000000 + str r2, [r4, #0x0] + adc r0, r1 + str r0, [r4, #0x4] + ldr r1, =0x6C078965 + ldr r0, =0x5D588B65 + str r1, [r4, #0x8] + str r0, [r4, #0xc] + ldr r0, =0x00269EC3 + str r0, [r4, #0x10] + mov r0, #0x0 + str r0, [r4, #0x14] + add sp, #0x20 + pop {r3-r7, pc} + // clang-format on } #endif -- cgit v1.2.3 From f85c9d736760dace9ce94560747c9985a3e93ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sat, 10 Apr 2021 19:21:51 +0200 Subject: fix warnings --- arm9/src/unk_0202F150.c | 307 ++++++++++++++++++++++-------------------------- 1 file changed, 142 insertions(+), 165 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c index 7973702c..62ae9437 100644 --- a/arm9/src/unk_0202F150.c +++ b/arm9/src/unk_0202F150.c @@ -11,10 +11,57 @@ vu8 UNK_02105D59 = 4; extern int FUN_02033534(); extern u32 FUN_0202D858(u16 param0); extern void FUN_02031480(u32 param0); -extern void FUN_0202D7D8(u32 *param0, u32 param1, u32 param2); +extern void FUN_0202D7D8(u8 *param0, u32 param1, struct UnkStruct3 *param2); extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2); -extern void FUN_0202D394(u32 param0, u32 param1, u32 param2); -extern void FUN_0202D804(u32 *param0); +extern void FUN_0202D394(struct UnkStruct3 *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_020314D0(); +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_02031CDC(); +extern void FUN_0202EBD0(u16 param0); +extern void FUN_0202ED70(u32 param0); +extern void FUN_020335F4(u32 param0); +extern void FUN_020315A4(); +extern void FUN_0202E538(); +extern u32 MOD04_021D78FC(void *param0, u32 param1); +extern u32 FUN_0202CBD4(); +extern void FUN_0202D4BC(void *param0); +extern int FUN_0202D400(s16 *param0, void *param1, u32 param2); +extern u32 FUN_0202D0D0(u8 *param0, u16 param1, u32 param2, void (*param3)(u32)); +extern u32 MOD04_021D79B4(void *param0, u32 param1); +extern void FUN_0202D3A4(struct UnkStruct3 *param0, u8 *param1, u32 param2, u32 param3); +extern int FUN_0202D498(void *param0); +extern u16 FUN_0202CB8C(); +extern s64 _ll_mul(s64, s64); +extern u32 FUN_0202D4E4(u8 *param0); +extern u32 FUN_0202D760(u8 *param0, int *param1, u32 param2); +extern u32 FUN_0202D684(u8 *param0, u32 param1, u8 *param2, u32 param3, u32 param4, u32 param5); +extern void FUN_0202D934(u32 param0, u32 param1, u32 param2, void *param3); +extern int FUN_0202D478(s16 *param0); +extern u32 FUN_0202D41C(s16 *param0); +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 void FUN_020334E8(u32 param0, u32 param1); +extern u32 FUN_0202EE60(); +extern u32 FUN_0202D884(u16 param0); +extern void FUN_0202F05C(); +extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *); +extern void FUN_0202D830(u8 *param0, u32 param1); +extern u32 MOD04_021D8624(); THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) { @@ -22,7 +69,7 @@ THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) UNK_021C59F4.unk00 = 0; if (param0 != 0) { - u32 res = FUN_0202D858(FUN_02033534()) + 1; + u32 res = FUN_0202D858((u16)FUN_02033534()) + 1; if (UNK_021C59F4.unk04 != 0) { @@ -79,7 +126,7 @@ THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) FUN_0202F2F0(); } - FUN_020312BC(&UNK_021C59F4.unk04->unk5F8); + FUN_020312BC(UNK_021C59F4.unk04->unk5F8); if (r4 == 0) { @@ -100,7 +147,7 @@ THUMB_FUNC void FUN_0202F2F0() UNK_021C59F4.unk04->unk67F = 0; UNK_021C59F4.unk04->unk680 = 0; - s32 res = FUN_0202D858(FUN_02033534()) + 1; + int res = (int)FUN_0202D858((u16)FUN_02033534()) + 1; MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); @@ -122,7 +169,7 @@ THUMB_FUNC void FUN_0202F2F0() } MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); - FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, UNK_021C59F4.unk04->unk2D4, 6 << 6); for (i = 0; i < 0xc0; i++) { @@ -131,7 +178,7 @@ THUMB_FUNC void FUN_0202F2F0() } MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); - FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, UNK_021C59F4.unk04->unk04c, 0x42 << 2); UNK_021C59F4.unk04->unk000[0][0] = 0xff; UNK_021C59F4.unk04->unk000[1][0] = 0xff; @@ -188,7 +235,7 @@ THUMB_FUNC void FUN_0202F5A4() UNK_021C59F4.unk04->unk62C = 0; UNK_021C59F4.unk04->unk62D = 0; - s32 res = FUN_0202D858(FUN_02033534()) + 1; + int res = (int)FUN_0202D858((u16)FUN_02033534()) + 1; MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); @@ -210,7 +257,7 @@ THUMB_FUNC void FUN_0202F5A4() } MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); - FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, &UNK_021C59F4.unk04->unk2D4, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, UNK_021C59F4.unk04->unk2D4, 6 << 6); for (i = 0; i < 0xc0; i++) { @@ -219,7 +266,7 @@ THUMB_FUNC void FUN_0202F5A4() } MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); - FUN_0202D394(&UNK_021C59F4.unk04->unk464, &UNK_021C59F4.unk04->unk04c, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, UNK_021C59F4.unk04->unk04c, 0x42 << 2); UNK_021C59F4.unk04->unk000[0][0] = 0xff; UNK_021C59F4.unk04->unk000[1][0] = 0xff; @@ -264,7 +311,7 @@ THUMB_FUNC void FUN_0202F5A4() UNK_021C59F4.unk04->unk688 = 0; } -THUMB_FUNC void FUN_0202F820(u32 param0) +THUMB_FUNC void FUN_0202F820(int param0) { UNK_021C59F4.unk04->unk65F[param0] = 0; @@ -292,21 +339,18 @@ THUMB_FUNC void FUN_0202F8D4() { for (int i = 1; i < 8; i++) { - if (FUN_02030E7C(i) == 0 && UNK_021C59F4.unk04->unk667[i] == 0 && FUN_02031280() == 0) + if (FUN_02030E7C((u16)i) == 0 && UNK_021C59F4.unk04->unk667[i] == 0 && FUN_02031280() == 0) { FUN_0202F820(i); } } } -THUMB_FUNC void FUN_0202F910(u32 param0) +THUMB_FUNC void FUN_0202F910(int param0) { FUN_0202F820(param0); } -extern u32 FUN_0202E5F8(u32 param0, u32 param1, u32 param2); -extern void FUN_0202D330(void (*param0)(u32)); - THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) { u32 ret = 1; @@ -321,8 +365,6 @@ THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) return ret; } -extern u32 FUN_0202E66C(u32 param0, u32 param1); - THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) { u32 ret = 1; @@ -423,13 +465,6 @@ THUMB_FUNC u32 FUN_0202FA48() return 0; } -extern void MOD04_021D83C0(); -extern u32 FUN_0202E784(); -extern void FUN_020314D0(); -extern void FUN_0202DBA4(); -extern void FUN_0200CAB4(u32 param0); -extern void FUN_0202D824(u32 *param0); - THUMB_FUNC void FUN_0202FA5C() { u32 r4 = 0; @@ -468,16 +503,11 @@ THUMB_FUNC void FUN_0202FA5C() } } -extern u32 FUN_0202E9E8(u32 param0); - THUMB_FUNC u32 FUN_0202FB18(u32 param0) { return FUN_0202E9E8(param0); } -extern u32 FUN_0202F03C(); -extern u32 FUN_0202EE24(); - THUMB_FUNC void FUN_0202FB20() { if (UNK_021C59F4.unk00 != 0) @@ -510,12 +540,6 @@ THUMB_FUNC void FUN_0202FB58() } } -extern void FUN_02031CDC(); -extern void FUN_0202EBD0(u16 param0); -extern void FUN_0202ED70(u32 param0); -extern void FUN_020335F4(u32 param0); -extern void FUN_020315A4(); - THUMB_FUNC u32 FUN_0202FB80() { FUN_02031CDC(); @@ -598,8 +622,6 @@ THUMB_FUNC void FUN_0202FC80() UNK_021C59F4.unk00 = r4; } -extern void FUN_0202E538(); - THUMB_FUNC void FUN_0202FCA8() { u8 r4 = UNK_021C59F4.unk00; @@ -615,9 +637,6 @@ THUMB_FUNC void FUN_0202FCA8() UNK_021C59F4.unk00 = r4; } -extern u32 MOD04_021D78FC(void *param0, u32 param1); -extern u32 FUN_0202CBD4(); - THUMB_FUNC void FUN_0202FCCC() { if (UNK_021C59F4.unk04->unk683 != 0) @@ -722,9 +741,6 @@ THUMB_FUNC void FUN_0202FCCC() FUN_0203050C(); } -extern void FUN_0202D4BC(void *param0); -extern int FUN_0202D400(u32 param0, u32 param1, u32 param2); - #ifdef NONMATCHING THUMB_FUNC u32 FUN_0202FE2C(int param0) { @@ -858,8 +874,6 @@ _0202FEDE: } #endif -extern u32 FUN_0202D0D0(void *, u16 param1, u32 param2, void (*param3)(u32)); - THUMB_FUNC void FUN_0202FEEC() { if (UNK_021C59F4.unk04 == NULL || FUN_02033534() >= 0x13) @@ -867,8 +881,8 @@ THUMB_FUNC void FUN_0202FEEC() return; } - int st0 = FUN_02031228(FUN_02033534()); - int r6 = FUN_0202D858(FUN_02033534()) + 1; + int st0 = FUN_02031228((u16)FUN_02033534()); + int r6 = (int)FUN_0202D858((u16)FUN_02033534()) + 1; if (UNK_02105D59 == 2 || UNK_02105D59 == 0) { @@ -897,7 +911,7 @@ THUMB_FUNC void FUN_0202FEEC() { for (i = 0; i < r6; i++) { - if (FUN_02030E7C(i) != 0) + if (FUN_02030E7C((u16)i) != 0) { UNK_021C59F4.unk04->unk638[i]++; } @@ -909,12 +923,12 @@ THUMB_FUNC void FUN_0202FEEC() FUN_0203026C(0, UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0); - UNK_021C59F4.unk04->unk680 = 1 - UNK_021C59F4.unk04->unk680; + UNK_021C59F4.unk04->unk680 = (u8)(1 - UNK_021C59F4.unk04->unk680); } for (i = 0; i < r6; i++) { - if (FUN_02030E7C(i) == 0 && FUN_0202FA28() == 1) + if (FUN_02030E7C((u16)i) == 0 && FUN_0202FA28() == 1) { UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680][i * st0] = 0xff; } @@ -927,8 +941,6 @@ THUMB_FUNC void FUN_0202FEEC() } } -extern u32 MOD04_021D79B4(void *param0, u32 param1); - THUMB_FUNC void FUN_02030074() { if (UNK_021C59F4.unk04->unk683 != 0) @@ -1006,7 +1018,7 @@ THUMB_FUNC void FUN_02030074() { for (int r4 = 1; r4 < 8; r4++) { - if (FUN_02030E7C(r4) != 0) + if (FUN_02030E7C((u16)r4) != 0) { if ((int)UNK_021C59F4.unk04->unk638[r4] > 3) { @@ -1049,10 +1061,10 @@ THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) FUN_0203026C(param0, param1, param2); } -extern void FUN_0202D3A4(void *param0, u8 *param1, u32 param2, u32 param3); - THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) { +#pragma unused(param0) +#pragma unused(param2) UNK_021C59F4.unk04->unk634--; if (param1 == 0) { @@ -1086,22 +1098,21 @@ THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) UNK_021C59F4.unk04->unk682 = 0; if (FUN_0202FA28() == 1) { - int r6 = FUN_02031228(FUN_02033534()); - int st4 = FUN_0202D858(FUN_02033534()) + 1; + int r6 = FUN_02031228((u16)FUN_02033534()); + int st4 = (int)FUN_0202D858((u16)FUN_02033534()) + 1; int r4 = 0; while (r4 < st4) { - u32 new; + if (param1[0] == 0xff) { - new = UNK_021C59F4.unk04->unk65C & ~(1 << r4); + UNK_021C59F4.unk04->unk65C &= ~(1 << r4); } else { - new = UNK_021C59F4.unk04->unk65C | (1 << r4); + UNK_021C59F4.unk04->unk65C |= (1 << r4); } - UNK_021C59F4.unk04->unk65C = new; if (param1[0] == 0xff) { @@ -1118,7 +1129,7 @@ THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) else { param1++; - FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, r6 - 1, 0x5E6); + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, (u32)(r6 - 1), 0x5E6); param1 += r6 - 1; UNK_021C59F4.unk04->unk667[r4] = 0; @@ -1131,13 +1142,13 @@ THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) } UNK_021C59F4.unk04->unk65C = param1[1]; - UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C << 8; + UNK_021C59F4.unk04->unk65C <<= 8; - UNK_021C59F4.unk04->unk65C = UNK_021C59F4.unk04->unk65C + param1[2]; + UNK_021C59F4.unk04->unk65C += param1[2]; FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1 + 4, param1[3], 0x5FF); } -THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) +THUMB_FUNC void FUN_020303BC(u32 param0, u8 *param1, u16 param2) { if (UNK_021C59F4.unk04->unk66F[param0] != 0) { @@ -1150,10 +1161,9 @@ THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) FUN_020303F4(param0, param1, param2); } -extern int FUN_0202D498(void *param0); - THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) { +#pragma unused(param2) UNK_021C59F4.unk04->unk638[param0]--; if (param1 == 0) { @@ -1168,12 +1178,12 @@ THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) UNK_021C59F4.unk04->unk667[param0] = 0; if (FUN_0202FA28() == 1) { - int r6 = FUN_02031228(FUN_02033534()); - FUN_0202D858(FUN_02033534()); + int r6 = FUN_02031228((u16)FUN_02033534()); + FUN_0202D858((u16)FUN_02033534()); if ((param1[0] & 2) == 0) { - FUN_0202D3A4(&UNK_021C59F4.unk04->unk47C[param0], param1, r6, 0x65E); + FUN_0202D3A4(&UNK_021C59F4.unk04->unk47C[param0], param1, (u32)r6, 0x65E); } UNK_021C59F4.unk04->unk65F[param0]++; @@ -1210,8 +1220,6 @@ THUMB_FUNC void FUN_020304F0(u32 param0) ErrorHandling(); } -extern u16 FUN_0202CB8C(); - THUMB_FUNC void FUN_0203050C() { if (UNK_021C59F4.unk04 == 0 || FUN_02033534() >= 0x13) @@ -1219,17 +1227,17 @@ THUMB_FUNC void FUN_0203050C() return; } - int r4 = FUN_02031228(FUN_02033534()); - FUN_0202D858(FUN_02033534()); + int r4 = FUN_02031228((u16)FUN_02033534()); + FUN_0202D858((u16)FUN_02033534()); if (FUN_02031280() != 0 && (UNK_02105D58 == 2 || UNK_02105D58 == 0)) { UNK_02105D58++; FUN_020304D4(1); - FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], (u16)r4); - UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk67F = (u8)(1 - UNK_021C59F4.unk04->unk67F); UNK_021C59F4.unk04->unk634++; return; } @@ -1255,13 +1263,13 @@ THUMB_FUNC void FUN_0203050C() UNK_02105D58++; if (FUN_0202D0D0( - UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4, 0xe, FUN_020304D4) == 0) + UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], (u16)r4, 0xe, FUN_020304D4) == 0) { UNK_02105D58--; return; } - UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk67F = (u8)(1 - UNK_021C59F4.unk04->unk67F); UNK_021C59F4.unk04->unk634++; return; } @@ -1271,15 +1279,13 @@ THUMB_FUNC void FUN_0203050C() UNK_02105D58++; FUN_020304D4(1); - FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], r4); + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], (u16)r4); - UNK_021C59F4.unk04->unk67F = 1 - UNK_021C59F4.unk04->unk67F; + UNK_021C59F4.unk04->unk67F = (u8)(1 - UNK_021C59F4.unk04->unk67F); UNK_021C59F4.unk04->unk634++; } } -extern s64 _ll_mul(s64, s64); - #ifdef NONMATCHING THUMB_FUNC void FUN_02030674() { @@ -1548,11 +1554,11 @@ THUMB_FUNC u32 FUN_020307E4(u8 *param0, u32 param1) { UNK_021C59F4.unk04->unk610[param1] = 0; - u32 r7 = param0[0] & 0x10; + int r7 = param0[0] & 0x10; if (r7 == 0x10) { - u8 r5 = param0[0] & 0xc; + u8 r5 = (u8)(param0[0] & 0xc); if (r5 == 0) { UNK_021C59F4.unk04->unk610[param1] |= 0x40; @@ -1570,7 +1576,7 @@ THUMB_FUNC u32 FUN_020307E4(u8 *param0, u32 param1) UNK_021C59F4.unk04->unk610[param1] |= 0x10; } - UNK_021C59F4.unk04->unk620[param1] = (param0[0] >> 5) & 0x7; + UNK_021C59F4.unk04->unk620[param1] = (u8)((param0[0] >> 5) & 0x7); } return 1; @@ -1623,15 +1629,11 @@ THUMB_FUNC u32 FUN_02030870(u8 *param0) return 0; } -extern u32 FUN_0202D4E4(u8 *param0); -extern u32 FUN_0202D760(u8 *param0, int *param1, u32 param2); - THUMB_FUNC u32 FUN_02030930(u8 *param0) { - int r5 = FUN_02031228(FUN_02033534()); - FUN_0202D858(FUN_02033534()); + int r5 = FUN_02031228((u16)FUN_02033534()); + FUN_0202D858((u16)FUN_02033534()); - u8 r0; if (UNK_021C59F4.unk04->unk684 == 0) { param0[0] = 0; @@ -1660,7 +1662,7 @@ THUMB_FUNC u32 FUN_02030930(u8 *param0) { int st0[2]; st0[1] = r5 - 1; - st0[0] = param0 + 1; + st0[0] = (int)param0 + 1; if (FUN_0202D760(UNK_021C59F4.unk04->unk54C, st0, 1) == 0) { UNK_021C59F4.unk04->unk684 = 1; @@ -1690,16 +1692,16 @@ THUMB_FUNC void FUN_02030A00(u8 *param0) } u16 res = FUN_0202CB8C(); - param0[2] = res >> 8; - param0[3] = res; + param0[2] = (u8)(res >> 8); + param0[3] = (u8)res; int st0[2]; st0[1] = 0xbb; - st0[0] = param0 + 5; + st0[0] = (int)param0 + 5; if (FUN_0202D760(UNK_021C59F4.unk04->unk56C, st0, 0) != 0) { UNK_021C59F4.unk04->unk685 = 0; - param0[4] = 0xbb - st0[1]; + param0[4] = (u8)(0xbb - st0[1]); return; } @@ -1708,9 +1710,7 @@ THUMB_FUNC void FUN_02030A00(u8 *param0) param0[4] = 0xbb; } -extern u32 FUN_0202D684(u8 *param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); - -THUMB_FUNC u32 FUN_02030A78(u32 param0, u32 param1, u32 param2) +THUMB_FUNC u32 FUN_02030A78(u32 param0, u8 *param1, u32 param2) { if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) { @@ -1730,7 +1730,7 @@ THUMB_FUNC u32 FUN_02030A78(u32 param0, u32 param1, u32 param2) return 0; } -THUMB_FUNC u32 FUN_02030ADC(u32 param0, u32 param1, u32 param2) +THUMB_FUNC u32 FUN_02030ADC(u32 param0, u8 *param1, u32 param2) { if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) { @@ -1750,7 +1750,7 @@ THUMB_FUNC u32 FUN_02030ADC(u32 param0, u32 param1, u32 param2) return 0; } -THUMB_FUNC u32 FUN_02030B3C(u32 param0, u32 param1, u32 param2) +THUMB_FUNC u32 FUN_02030B3C(u32 param0, u8 *param1, u32 param2) { if (FUN_02031190() != 0) { @@ -1781,7 +1781,7 @@ THUMB_FUNC u32 FUN_02030B3C(u32 param0, u32 param1, u32 param2) return 0; } -THUMB_FUNC u32 FUN_02030BC4(u32 param0, u32 param1, u32 param2) +THUMB_FUNC u32 FUN_02030BC4(u32 param0, u8 *param1, u32 param2) { if (FUN_02031190() != 0) { @@ -1812,7 +1812,7 @@ THUMB_FUNC u32 FUN_02030BC4(u32 param0, u32 param1, u32 param2) return 0; } -THUMB_FUNC u32 FUN_02030C4C(u32 param0, u32 param1) +THUMB_FUNC u32 FUN_02030C4C(u32 param0, u8 *param1) { return FUN_02030BC4(param0, param1, 0); } @@ -1822,27 +1822,19 @@ THUMB_FUNC int FUN_02030C58() return FUN_0202D498(&UNK_021C59F4.unk04->unk464); } -extern void FUN_0202D934(u32 param0, u32 param1, u32 param2, u32 param3); - -THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, u32 param3, void *param4) +THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, void *param3, struct UnkStruct2 *param4) { FUN_0202D934(param0, param1, param2, param3); - - *(u8 *)(param4 + 0xa) = 0xee; - *(u16 *)(param4 + 0x8) = 0xffff; - *(u32 *)(param4 + 0x4) = 0; - *(u32 *)(param4) = 0; + param4->unk0a = 0xee; + param4->unk08 = 0xffff; + param4->unk04 = 0; + param4->unk00 = 0; } -extern int FUN_0202D478(s16 *param0); -extern u32 FUN_0202D41C(s16 *param0); -extern s16 FUN_0202D9A0(u32 param0); -extern u32 FUN_0202DA04(u32 param0); -extern u32 FUN_0202DA40(u32 param0, u32 param1, u16 param2); - THUMB_FUNC void FUN_02030C8C( - s16 *param0, u32 param1, u32 param2, u32 param3, struct UnkStruct2 *param4) + s16 *param0, u32 param1, void *param2, u32 param3, struct UnkStruct2 *param4) { +#pragma unused(param3) while (FUN_0202D478(param0) != 0) { @@ -1857,7 +1849,7 @@ THUMB_FUNC void FUN_02030C8C( } int st10 = param0[2]; - param4->unk0a = r7; + param4->unk0a = (u8)r7; int r4 = param4->unk08; if (r4 == 0xffff) { @@ -1872,17 +1864,17 @@ THUMB_FUNC void FUN_02030C8C( { if (FUN_0202D478(param0) < 1) { - param0[2] = st10; + param0[2] = (s16)st10; return; } - r4 = FUN_0202D41C(param0) << 8; + r4 = (int)FUN_0202D41C(param0) << 8; r4 += FUN_0202D41C(param0); st10 = param0[2]; } - param4->unk08 = r4; + param4->unk08 = (u16)r4; } if (FUN_0202DA04(r7) != 0) @@ -1896,7 +1888,7 @@ THUMB_FUNC void FUN_02030C8C( if (param4->unk04 != 0) { - MI_CpuCopy8(param2, param4->unk04 + param4->unk00, stc); + MI_CpuCopy8(param2, param4->unk04 + param4->unk00, (u32)stc); } if ((int)(param4->unk00 += stc) < (int)r4) @@ -1904,18 +1896,18 @@ THUMB_FUNC void FUN_02030C8C( continue; } - FUN_02030C70(param1, r7, r4, param4->unk04, param4); + FUN_02030C70(param1, r7, (u32)r4, param4->unk04, param4); } else { if (FUN_0202D478(param0) >= r4) { - FUN_0202D400(param0, param2, r4); - FUN_02030C70(param1, r7, r4, param2, param4); + FUN_0202D400(param0, param2, (u32)r4); + FUN_02030C70(param1, r7, (u32)r4, param2, param4); } else { - param0[2] = st10; + param0[2] = (s16)st10; return; } } @@ -1929,11 +1921,9 @@ THUMB_FUNC void FUN_02030DA4() if (UNK_021C59F4.unk04->unk68B == 0) { FUN_0202D4BC(&UNK_021C59F4.unk04->unk470); - if (FUN_0202D478(&UNK_021C59F4.unk04->unk470) > 0) + if (FUN_0202D478((s16 *)&UNK_021C59F4.unk04->unk470) > 0) { - UNK_021C59F4.unk04->unk470; - - FUN_02030C8C(&UNK_021C59F4.unk04->unk470, + FUN_02030C8C((s16 *)&UNK_021C59F4.unk04->unk470, 0, UNK_021C59F4.unk04->unk460, 1, @@ -1949,7 +1939,7 @@ THUMB_FUNC void FUN_02030DFC() { if (UNK_021C59F4.unk04->unk68B == 0) { - int r7 = FUN_0202D858(FUN_02033534()) + 1; + int r7 = (int)FUN_0202D858((u16)FUN_02033534()) + 1; int r4; for (r4 = 0; r4 < r7; r4++) { @@ -1958,18 +1948,16 @@ THUMB_FUNC void FUN_02030DFC() { FUN_02030C8C((s16 *)&UNK_021C59F4.unk04->unk4E8[r4], - r4, + (u32)r4, UNK_021C59F4.unk04->unk460, 0, - (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk58C[r4]); + &UNK_021C59F4.unk04->unk58C[r4]); } } } } } -extern u32 MOD04_021D8018(); - THUMB_FUNC u32 FUN_02030E7C(u16 param0) { if (UNK_021C59F4.unk04 == NULL) @@ -2035,7 +2023,7 @@ THUMB_FUNC u32 FUN_02030F20() u32 r4 = 0; for (int i = 0; i < 8; i++) { - if (FUN_02030E7C(i) != 0) + if (FUN_02030E7C((u16)i) != 0) { r4++; } @@ -2044,8 +2032,6 @@ THUMB_FUNC u32 FUN_02030F20() return r4; } -extern u32 FUN_0202EDF8(); - THUMB_FUNC u32 FUN_02030F40() { if (UNK_021C59F4.unk04 != NULL && FUN_02033534() >= 0x13) @@ -2099,13 +2085,13 @@ THUMB_FUNC u32 FUN_02030FE0() { if (UNK_021C59F4.unk04 != NULL) { - return UNK_021C59F4.unk04->unk628 & 0x8000; + return (u32)(UNK_021C59F4.unk04->unk628 & 0x8000); } return 1; } -THUMB_FUNC void FUN_02031000(u32 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02031000(u32 param0, u8 *param1, u32 param2) { if (FUN_0202FA28() == 1) { @@ -2116,7 +2102,7 @@ THUMB_FUNC void FUN_02031000(u32 param0, u32 param1, u32 param2) FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0); } -THUMB_FUNC void FUN_0203105C(u32 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_0203105C(u32 param0, u8 *param1, u32 param2) { FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 0, 0); } @@ -2162,6 +2148,8 @@ THUMB_FUNC void FUN_02031088() THUMB_FUNC void FUN_0203110C(u32 param0, u32 param1, u8 *param2) { +#pragma unused(param0) +#pragma unused(param1) if (FUN_02031190() == 0) { UNK_021C59F4.unk04->unk67B = 1; @@ -2171,6 +2159,8 @@ THUMB_FUNC void FUN_0203110C(u32 param0, u32 param1, u8 *param2) THUMB_FUNC void FUN_02031134(u32 param0, u32 param1, u8 *param2) { +#pragma unused(param0) +#pragma unused(param1) if (FUN_02031190() != 0) { UNK_021C59F4.unk04->unk67C = param2[0]; @@ -2180,6 +2170,8 @@ THUMB_FUNC void FUN_02031134(u32 param0, u32 param1, u8 *param2) THUMB_FUNC void FUN_0203115C(u32 param0, u32 param1, u8 *param2) { +#pragma unused(param0) +#pragma unused(param1) if (FUN_02031190() == 0 && UNK_021C59F4.unk04->unk67B == 2) { FUN_0202F9E0(*param2); @@ -2187,8 +2179,6 @@ THUMB_FUNC void FUN_0203115C(u32 param0, u32 param1, u8 *param2) } } -extern u16 FUN_0202D19C(); - THUMB_FUNC u16 FUN_02031190() { if (UNK_021C59F4.unk04 != NULL) @@ -2198,7 +2188,7 @@ THUMB_FUNC u16 FUN_02031190() u32 res = MOD04_021D8018(); if (res != 0xffffffff) { - return res; + return (u16)res; } } else @@ -2230,9 +2220,6 @@ THUMB_FUNC u32 FUN_020311E8() return FUN_0202EE24(); } -extern void FUN_020334E8(u32 param0, u32 param1); -extern u32 FUN_0202EE60(); - THUMB_FUNC u32 FUN_020311F0() { if (FUN_02031280() != 0) @@ -2266,14 +2253,12 @@ THUMB_FUNC int FUN_02031228(u16 param0) THUMB_FUNC u32 FUN_02031248(u32 param0) { - return FUN_0202D858(param0) + 1; + return FUN_0202D858((u16)param0) + 1; } -extern u32 FUN_0202D884(u16 param0); - THUMB_FUNC u32 FUN_02031258(u32 param0) { - return FUN_0202D884(param0) + 1; + return FUN_0202D884((u16)param0) + 1; } THUMB_FUNC void FUN_02031268(u8 param0) @@ -2294,23 +2279,19 @@ THUMB_FUNC u8 FUN_02031280() return 0; } -extern void FUN_0202F05C(); - THUMB_FUNC void FUN_0203129C() { if (FUN_0202F03C() == 0 && FUN_02031190() == 0) { - u32 st0; + u8 st0; FUN_02030C4C(2, &st0); } FUN_0202F05C(); } -extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *); - #ifdef NONMATCHING -THUMB_FUNC void FUN_020312BC(u32 param0) +THUMB_FUNC void FUN_020312BC(s64 *param0) { RTCDate st10; RTCTime st4; @@ -2329,7 +2310,7 @@ THUMB_FUNC void FUN_020312BC(u32 param0) (0x00000000 + r5) << 5; } #else -THUMB_FUNC asm void FUN_020312BC(u32 param0) +THUMB_FUNC asm void FUN_020312BC(s64 *param0) { // clang-format off push {r3-r7, lr} @@ -2401,8 +2382,6 @@ THUMB_FUNC asm void FUN_020312BC(u32 param0) } #endif -extern void FUN_0202D830(u8 *param0, u32 param1); - THUMB_FUNC void FUN_02031354(u32 param0) { FUN_0202D830(UNK_021C59F4.unk04->unk56C, param0); @@ -2444,8 +2423,6 @@ THUMB_FUNC u32 FUN_020313CC(u32 param0) return param0; } -extern u32 MOD04_021D8624(); - THUMB_FUNC u32 FUN_020313EC() { if (FUN_02033534() < 0x13) -- cgit v1.2.3 From f5eabfb0d118057d2533d3bd2558a560bd15a5ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sat, 10 Apr 2021 19:38:22 +0200 Subject: polish struct usage --- arm9/src/unk_0202F150.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c index 62ae9437..df7b3d37 100644 --- a/arm9/src/unk_0202F150.c +++ b/arm9/src/unk_0202F150.c @@ -2,7 +2,7 @@ struct { u8 unk00; - struct UnkStruct1 *unk04; + struct UnkStruct0202F150 *unk04; } UNK_021C59F4; vu8 UNK_02105D58 = 4; @@ -11,9 +11,9 @@ vu8 UNK_02105D59 = 4; extern int FUN_02033534(); extern u32 FUN_0202D858(u16 param0); extern void FUN_02031480(u32 param0); -extern void FUN_0202D7D8(u8 *param0, u32 param1, struct UnkStruct3 *param2); +extern void FUN_0202D7D8(u8 *param0, u32 param1, struct UnkStruct0202F150_sub1 *param2); extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2); -extern void FUN_0202D394(struct UnkStruct3 *param0, u8 *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)); @@ -36,10 +36,10 @@ extern void FUN_0202E538(); extern u32 MOD04_021D78FC(void *param0, u32 param1); extern u32 FUN_0202CBD4(); extern void FUN_0202D4BC(void *param0); -extern int FUN_0202D400(s16 *param0, void *param1, u32 param2); +extern int FUN_0202D400(struct UnkStruct0202F150_sub1 *param0, void *param1, u32 param2); extern u32 FUN_0202D0D0(u8 *param0, u16 param1, u32 param2, void (*param3)(u32)); extern u32 MOD04_021D79B4(void *param0, u32 param1); -extern void FUN_0202D3A4(struct UnkStruct3 *param0, u8 *param1, u32 param2, u32 param3); +extern void FUN_0202D3A4(struct UnkStruct0202F150_sub1 *param0, u8 *param1, u32 param2, u32 param3); extern int FUN_0202D498(void *param0); extern u16 FUN_0202CB8C(); extern s64 _ll_mul(s64, s64); @@ -47,8 +47,8 @@ extern u32 FUN_0202D4E4(u8 *param0); extern u32 FUN_0202D760(u8 *param0, int *param1, u32 param2); extern u32 FUN_0202D684(u8 *param0, u32 param1, u8 *param2, u32 param3, u32 param4, u32 param5); extern void FUN_0202D934(u32 param0, u32 param1, u32 param2, void *param3); -extern int FUN_0202D478(s16 *param0); -extern u32 FUN_0202D41C(s16 *param0); +extern int FUN_0202D478(struct UnkStruct0202F150_sub1 *param0); +extern u32 FUN_0202D41C(struct UnkStruct0202F150_sub1 *param0); extern s16 FUN_0202D9A0(u32 param0); extern u32 FUN_0202DA04(u32 param0); extern void *FUN_0202DA40(u32 param0, u32 param1, u16 param2); @@ -77,7 +77,7 @@ THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) } FUN_02031480(0xf); - struct UnkStruct1 *ptr = (struct UnkStruct1 *)AllocFromHeap(0xf, sizeof(struct UnkStruct1)); + struct UnkStruct0202F150 *ptr = (struct UnkStruct0202F150 *)AllocFromHeap(0xf, sizeof(struct UnkStruct0202F150)); UNK_021C59F4.unk04 = ptr; MI_CpuFill8(ptr, 0, 0x68C); @@ -1822,7 +1822,7 @@ THUMB_FUNC int FUN_02030C58() return FUN_0202D498(&UNK_021C59F4.unk04->unk464); } -THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, void *param3, struct UnkStruct2 *param4) +THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, void *param3, struct UnkStruct0202F150_sub2 *param4) { FUN_0202D934(param0, param1, param2, param3); param4->unk0a = 0xee; @@ -1832,7 +1832,7 @@ THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, void *param3, s } THUMB_FUNC void FUN_02030C8C( - s16 *param0, u32 param1, void *param2, u32 param3, struct UnkStruct2 *param4) + struct UnkStruct0202F150_sub1 *param0, u32 param1, void *param2, u32 param3, struct UnkStruct0202F150_sub2 *param4) { #pragma unused(param3) while (FUN_0202D478(param0) != 0) @@ -1848,7 +1848,7 @@ THUMB_FUNC void FUN_02030C8C( } } - int st10 = param0[2]; + int st10 = param0->unk04; param4->unk0a = (u8)r7; int r4 = param4->unk08; if (r4 == 0xffff) @@ -1864,14 +1864,14 @@ THUMB_FUNC void FUN_02030C8C( { if (FUN_0202D478(param0) < 1) { - param0[2] = (s16)st10; + param0->unk04 = (s16)st10; return; } r4 = (int)FUN_0202D41C(param0) << 8; r4 += FUN_0202D41C(param0); - st10 = param0[2]; + st10 = param0->unk04; } param4->unk08 = (u16)r4; @@ -1907,7 +1907,7 @@ THUMB_FUNC void FUN_02030C8C( } else { - param0[2] = (s16)st10; + param0->unk04 = (s16)st10; return; } } @@ -1921,13 +1921,13 @@ THUMB_FUNC void FUN_02030DA4() if (UNK_021C59F4.unk04->unk68B == 0) { FUN_0202D4BC(&UNK_021C59F4.unk04->unk470); - if (FUN_0202D478((s16 *)&UNK_021C59F4.unk04->unk470) > 0) + if (FUN_0202D478(&UNK_021C59F4.unk04->unk470) > 0) { - FUN_02030C8C((s16 *)&UNK_021C59F4.unk04->unk470, + FUN_02030C8C(&UNK_021C59F4.unk04->unk470, 0, UNK_021C59F4.unk04->unk460, 1, - (struct UnkStruct2 *)&UNK_021C59F4.unk04->unk5EC); + (struct UnkStruct0202F150_sub2 *)&UNK_021C59F4.unk04->unk5EC); } } } @@ -1944,10 +1944,10 @@ THUMB_FUNC void FUN_02030DFC() for (r4 = 0; r4 < r7; r4++) { FUN_0202D4BC(&UNK_021C59F4.unk04->unk4E8[r4]); - if (FUN_0202D478((s16 *)&UNK_021C59F4.unk04->unk4E8[r4]) > 0) + if (FUN_0202D478(&UNK_021C59F4.unk04->unk4E8[r4]) > 0) { - FUN_02030C8C((s16 *)&UNK_021C59F4.unk04->unk4E8[r4], + FUN_02030C8C(&UNK_021C59F4.unk04->unk4E8[r4], (u32)r4, UNK_021C59F4.unk04->unk460, 0, -- cgit v1.2.3 From c34e74ae7cdd91bef14cf5f160329b5cbf3c9504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sat, 10 Apr 2021 23:24:10 +0200 Subject: formatting --- arm9/src/unk_0202F150.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c index df7b3d37..23a7de85 100644 --- a/arm9/src/unk_0202F150.c +++ b/arm9/src/unk_0202F150.c @@ -77,7 +77,8 @@ THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) } FUN_02031480(0xf); - struct UnkStruct0202F150 *ptr = (struct UnkStruct0202F150 *)AllocFromHeap(0xf, sizeof(struct UnkStruct0202F150)); + struct UnkStruct0202F150 *ptr = + (struct UnkStruct0202F150 *)AllocFromHeap(0xf, sizeof(struct UnkStruct0202F150)); UNK_021C59F4.unk04 = ptr; MI_CpuFill8(ptr, 0, 0x68C); @@ -1262,8 +1263,10 @@ THUMB_FUNC void FUN_0203050C() { UNK_02105D58++; - if (FUN_0202D0D0( - UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], (u16)r4, 0xe, FUN_020304D4) == 0) + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], + (u16)r4, + 0xe, + FUN_020304D4) == 0) { UNK_02105D58--; return; @@ -1822,7 +1825,8 @@ THUMB_FUNC int FUN_02030C58() return FUN_0202D498(&UNK_021C59F4.unk04->unk464); } -THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, void *param3, struct UnkStruct0202F150_sub2 *param4) +THUMB_FUNC void FUN_02030C70( + u32 param0, u32 param1, u32 param2, void *param3, struct UnkStruct0202F150_sub2 *param4) { FUN_0202D934(param0, param1, param2, param3); param4->unk0a = 0xee; @@ -1831,8 +1835,11 @@ THUMB_FUNC void FUN_02030C70(u32 param0, u32 param1, u32 param2, void *param3, s param4->unk00 = 0; } -THUMB_FUNC void FUN_02030C8C( - struct UnkStruct0202F150_sub1 *param0, u32 param1, void *param2, u32 param3, struct UnkStruct0202F150_sub2 *param4) +THUMB_FUNC void FUN_02030C8C(struct UnkStruct0202F150_sub1 *param0, + u32 param1, + void *param2, + u32 param3, + struct UnkStruct0202F150_sub2 *param4) { #pragma unused(param3) while (FUN_0202D478(param0) != 0) -- cgit v1.2.3