diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/unk_0202F150.c (renamed from arm9/src/unk_0202F150_c.c) | 1136 |
1 files changed, 1114 insertions, 22 deletions
diff --git a/arm9/src/unk_0202F150_c.c b/arm9/src/unk_0202F150.c index 162761a8..dd86b10d 100644 --- a/arm9/src/unk_0202F150_c.c +++ b/arm9/src/unk_0202F150.c @@ -2,6 +2,7 @@ #include "MI_memory.h" #include "heap.h" #include "main.h" +#include "RTC_api.h" struct { @@ -9,16 +10,12 @@ struct 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 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(); @@ -34,10 +31,8 @@ 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; @@ -77,15 +72,15 @@ struct UnkStruct1 u16 unk5F4; u8 unk5F6; u8 unk5F7; - u32 unk5F8; - u8 unk5FC[0x14]; + s64 unk5F8[3]; u16 unk610[8]; u8 unk620[0x8]; u16 unk628; - u8 unk62A[0x2]; + u8 unk62A; + u8 unk62B; u8 unk62C; - u8 unk62D; - u8 unk62E[0x2]; + s8 unk62D; + u16 unk62E; u32 unk630; u32 unk634; u32 unk638[8]; @@ -96,7 +91,8 @@ struct UnkStruct1 u8 unk667[8]; u8 unk66F[8]; u8 unk677[4]; - u8 unk67B[0x2]; + u8 unk67B; + u8 unk67C; u8 unk67D; u8 unk67E; u8 unk67F; @@ -128,7 +124,7 @@ THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) } FUN_02031480(0xf); - struct UnkStruct1 *ptr = (struct UnkStruct1 *)AllocFromHeap(0xf, 0x68C); + struct UnkStruct1 *ptr = (struct UnkStruct1 *)AllocFromHeap(0xf, sizeof(struct UnkStruct1)); UNK_021C59F4.unk04 = ptr; MI_CpuFill8(ptr, 0, 0x68C); @@ -386,7 +382,7 @@ THUMB_FUNC void FUN_0202F820(u32 param0) UNK_021C59F4.unk04->unk58C[param0].unk00 = 0; } -extern u32 FUN_02031280(); +extern u8 FUN_02031280(); THUMB_FUNC void FUN_0202F8D4() { @@ -696,7 +692,7 @@ THUMB_FUNC void FUN_0202FCA8() { extern u32 MOD04_021D78FC(void *param0, u32 param1); extern u32 FUN_0202CBD4(); -extern u32 FUN_02030930(void *param0); +extern u32 FUN_02030930(u8 *param0); @@ -739,12 +735,12 @@ THUMB_FUNC void FUN_0202FCCC() { } if (UNK_02105D58 == 4) { - FUN_02030930(UNK_021C59F4.unk04); + FUN_02030930(UNK_021C59F4.unk04->unk000[0]); UNK_02105D58 = 2; } } else { if (UNK_02105D58 == 4) { - if (FUN_02030930(UNK_021C59F4.unk04) == 0) { + if (FUN_02030930(UNK_021C59F4.unk04->unk000[0]) == 0) { return; } @@ -780,9 +776,9 @@ THUMB_FUNC void FUN_0202FCCC() { return; } - FUN_02030930(&UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F]); + 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(); @@ -985,7 +981,7 @@ THUMB_FUNC void FUN_0202FEEC() { extern u32 MOD04_021D79B4(void *param0, u32 param1); -extern void FUN_02030A00(void *param0); +extern void FUN_02030A00(u8 *param0); @@ -1170,7 +1166,7 @@ THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) { FUN_020303F4(param0, param1, param2); } -extern void FUN_020307E4(u8 *param0, u32 param1); +extern u32 FUN_020307E4(u8 *param0, u32 param1); extern int FUN_0202D498(void *param0); @@ -1287,4 +1283,1100 @@ THUMB_FUNC void FUN_0203050C() { 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<<param0)) != 0) { + return 1; + } + } else { + if ((UNK_021C59F4.unk04->unk65C & (1<<param0)) != 0 ) { + return 1; + } + } + + return 0; +} + + + +THUMB_FUNC u32 FUN_02030F20() { + u32 r4 = 0; + for (int i = 0; i < 8; i++) + { + 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; + } + + 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 |