diff options
Diffstat (limited to 'arm9/modules/21/src/mod21_02254854.c')
-rw-r--r-- | arm9/modules/21/src/mod21_02254854.c | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c new file mode 100644 index 00000000..a9a7599d --- /dev/null +++ b/arm9/modules/21/src/mod21_02254854.c @@ -0,0 +1,199 @@ +#include "global.h" +#include "heap.h" +#include "unk_0200CA44.h" +#include "mod21_02254854.h" + +extern void GF_RTC_CopyTime(Time *param0); + +u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; +extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); +extern void MOD20_02252C14(u32 param0, BOOL param1); + +extern void MOD20_02254198(BOOL param0); +extern void MOD20_022529A0(u32 param0); + +extern void MOD20_0225298C(u32 param0); + +extern void Poketch_InitApp(void *func1, void *func2); + +THUMB_FUNC static void MOD21_02254840(void) +{ + Poketch_InitApp(MOD21_02254854, MOD21_0225496C); +} + +#define NitroStaticInit MOD21_02254840 +#include "sinit.h" + +THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) +{ + UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); + if (alloced != NULL) + { + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, alloced, (void *)1)) + { + *param0 = alloced; + return TRUE; + } + FreeToHeap(alloced); + } + return FALSE; +} + +THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) +{ +#pragma unused (param2, param3) //not sure, please check + if (MOD21_02254A6C((UnkStruct02254A6C *)¶m0->Unk24, ¶m0->time)) //todo fix + { + param0->bytearray[0] = 0; + param0->bytearray[1] = 0; + param0->bytearray[2] = 0; + param0->bytearray[3] = 1; + param0->bytearray[6] = 0; + param0->Unk20 = 0; + GF_RTC_CopyTime(¶m0->time); + if (param0->time.hour >= 0x18) + { + param0->time.hour = param0->time.hour % 0x18; + } + if (param0->time.minute >= 0x3c) + { + param0->time.hour = param0->time.hour % 0x3c; + } + param0->bytearray[5] = (u8)param0->time.minute; + param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); + if (param0->Unk10 == FALSE) + { + return FALSE; + } + param0->Unk28 = param1; + return TRUE; + } + return FALSE; +} + +BOOL (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; + +THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) +{ + MOD21_02254B04(param0->Unk24); + MOD20_02254198(param0->Unk10); + FreeToHeap((void *)param0); +} + +THUMB_FUNC void MOD21_02254930(u32 param0, UnkStruct02254854 *param1) +{ + if (param1->bytearray[0] >= 3) + { + return; + } + MOD20_02252C14(param1->Unk28, param1->Unk10); + if (!MOD21_02254D84[param1->bytearray[0]](param1)) + { + return; + } + MOD21_02254918(param1); + FUN_0200CAB4((s32)param0); + MOD20_022529A0(param1->Unk28); +} + +THUMB_FUNC void MOD21_0225496C(UnkStruct02254854 *param0) +{ + param0->bytearray[2] = 1; +} + +THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3) +{ +#pragma unused (param0, param1) + switch (param2) + { + case 1: + param3->Unk20 = 1; + param3->bytearray[6] = 1; + return; + case 0: + param3->Unk20 = 0; + param3->bytearray[6] = 1; + return; + default: + return; + } +} + +THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1) +{ + if (param0->bytearray[2] == 0) + { + param0->bytearray[0] = param1; + } + else + { + param0->bytearray[0] = 2; + } + param0->bytearray[1] = 0; +} + +THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0) +{ + switch (param0->bytearray[1]) + { + case 0: + MOD21_02254B10(param0->Unk24, 0); + param0->bytearray[1]++; + break; + case 1: + if (MOD21_02254B34(param0->Unk24, 0) == FALSE) + { + break; + } + MOD20_0225298C(param0->Unk28); + MOD21_02254990(param0, 1); + break; + default: + break; + } + return FALSE; +} + +THUMB_FUNC BOOL MOD21_022549E4(UnkStruct02254854 * param0) +{ + if (param0->bytearray[2]) + { + MOD21_02254990(param0, 2); + return FALSE; + } + if (param0->bytearray[6]) + { + param0->bytearray[6] = 0; + MOD21_02254B10(param0->Unk24, 2); + } + if (MOD21_02254B34(param0->Unk24, 1)) + { + param0->bytearray[5] = (u8)param0->time.minute; + GF_RTC_CopyTime(¶m0->time); + if (param0->bytearray[5] != param0->time.minute) + { + MOD21_02254B10(param0->Unk24, 1); + } + } + return FALSE; +} + +THUMB_FUNC BOOL MOD21_02254A38(UnkStruct02254854 * param0) +{ + switch (param0->bytearray[1]) + { + case 0: + MOD21_02254B10(param0->Unk24, 3); + param0->bytearray[1]++; + break; + case 1: + if (MOD21_02254B40(param0->Unk24)) + { + return TRUE; + } + break; + default: + break; + } + return FALSE; +} |