diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/unk_0202A1E0.c | 541 |
1 files changed, 541 insertions, 0 deletions
diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c new file mode 100644 index 00000000..607ea8c3 --- /dev/null +++ b/arm9/src/unk_0202A1E0.c @@ -0,0 +1,541 @@ +#include "global.h" +#include "MI_memory.h" +#include "msgdata.h" +#include "heap.h" +#include "unk_0202A1E0.h" + +THUMB_FUNC s32 FUN_0202A1E0() +{ + return 228; +} + +THUMB_FUNC void FUN_0202A1E4(void *dest) +{ + MI_CpuFill8(dest, 0, 60); +} + +THUMB_FUNC void FUN_0202A1F0(struct Unk0202A1F0 *arg0) +{ + MI_CpuFill8(arg0, 0, 360); + arg0->u_3 = 1; +} + +THUMB_FUNC void FUN_0202A204(struct UnkMailStruct *arg0) +{ + MailMsg_init_fromTemplate(&arg0->messages[0], 0); + MailMsg_init_fromTemplate(&arg0->messages[1], 1); + MailMsg_init_fromTemplate(&arg0->messages[2], 2); + MailMsg_init_fromTemplate(&arg0->messages[3], 3); +} + +THUMB_FUNC void FUN_0202A230(void *dst) +{ + MI_CpuFill8(dst, 0, 2876); +} + +THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 mode, void *dst) +{ + switch (mode) + { + case 0: + return unk->u_0_2; + case 1: + return unk->u_2; + case 2: + return unk->u_3; + case 3: + return unk->u_4; + case 4: + return unk->u_6; + case 5: + MI_CpuCopy8(&unk->u_8, dst, 4); + return 0; + case 6: + MI_CpuCopy8(&unk->u_2C, dst, 16); + return 0; + case 7: + return unk->u_0_0; + case 8: + MI_CpuCopy8(&unk->u_C, dst, 28); + return 0; + case 9: + return unk->u_0_5; + case 10: + return unk->u_28; + default: + return 0; + }; +} + +THUMB_FUNC void FUN_0202A2C4(struct Unk0202A240 *dst, u32 mode, void *src) +{ + switch (mode) + { + case 0: + dst->u_0_2 = *(u8 *)src; + break; + case 1: + dst->u_2 = *(u8 *)src; + break; + case 2: + dst->u_3 = *(u8 *)src; + break; + case 3: + dst->u_4 = *(u16 *)src; + break; + case 4: + dst->u_6 = *(u16 *)src; + break; + case 5: + MI_CpuCopy8(src, &dst->u_8, 4); + break; + case 6: + MI_CpuCopy8(src, &dst->u_2C, 16); + break; + case 7: + dst->u_0_0 = *(u8 *)src; + break; + case 8: + MI_CpuCopy8(src, &dst->u_C, 28); + break; + case 10: + dst->u_28 = *(u32 *)src; + break; + case 9: + dst->u_0_5 = *(u8 *)src; + break; + } +} + +THUMB_FUNC void FUN_0202A36C(struct Unk0202A240 *unk, s32 arg1, s32 arg2, s32 arg3) +{ + if (unk->u_3 + arg1 < 0xff) + { + unk->u_3 += arg1; + } + + if (unk->u_4 + arg2 < 0xffff) + { + unk->u_4 += arg2; + } + + if (unk->u_6 + arg3 < 0xffff) + { + unk->u_6 += arg3; + } +} + +THUMB_FUNC u8 FUN_0202A398(struct Unk0202A240 *unk) +{ + return unk->u_0_1; +} + +THUMB_FUNC void FUN_0202A3A0(struct Unk0202A240 *unk, u16 arg1) +{ + unk->u_0_1 = arg1; +} + +THUMB_FUNC u16 FUN_0202A3B4(struct Unk0202A3B4 *unk, u16 arg1, s32 controlVariable) +{ + switch (controlVariable) + { + case 0: + break; + case 1: + if (arg1 > 0x270F) + { + unk->u_0 = 0x270F; + } + else + { + unk->u_0 = arg1; + } + break; + case 2: + case 3: + case 4: + break; + case 5: + if (unk->u_0 + arg1 > 0x270F) + { + unk->u_0 = 0x270F; + } + else + { + unk->u_0 += arg1; + } + break; + case 6: + if (unk->u_0 < arg1) + { + unk->u_0 = 0; + } + else + { + unk->u_0 -= arg1; + } + break; + } + return unk->u_0; +} + +THUMB_FUNC u8 FUN_0202A40C(struct Unk0202A40C *unk, s32 controlVariable) +{ + switch (controlVariable) + { + case 2: + unk->u_2 = 0; + unk->u_8_4 = 0; + break; + case 3: + if (unk->u_8_4 != 0) + { + unk->u_2 += 1; + } + else + { + unk->u_2 = 1; + unk->u_8_4 = 1; + } + break; + } + return unk->u_2; +} + +THUMB_FUNC u8 FUN_0202A444(struct Unk0202A444 *unk, s32 controlVariable) +{ + switch (controlVariable) + { + case 2: + unk->u_3 = 1; + break; + case 3: + if (unk->u_3 < 0xa) + { + unk->u_3++; + } + break; + case 4: + if (unk->u_3 > 1) + { + unk->u_3--; + } + break; + } + return unk->u_3; +} + +THUMB_FUNC void FUN_0202A474(void *dst, s32 arg1, const void *src) +{ + if (arg1 == 0) + { + MI_CpuCopy8(src, dst + 0xc0, 0xa8); + } + else + { + MI_CpuCopy8(src, dst + 0x18, 0xa8); + } +} + +THUMB_FUNC void FUN_0202A498(const void *src, s32 arg1, void *dst) +{ + if (arg1 == 0) + { + MI_CpuCopy8(src + 0xc0, dst, 0xa8); + } + else + { + MI_CpuCopy8(src + 0x18, dst, 0xa8); + } +} + +THUMB_FUNC u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) +{ + u16 var1, var2, var3, var4, var5, total; + + var1 = (u16) ((arg1->u_2 - 1) * 1000); + var2 = (u16) (arg1->u_4 * 10); + var3 = (u16) (arg1->u_3 * 20); + + if (var2 + var3 > 950) + { + var4 = 0; + } + else + { + var4 = (u16) (950 - (var2 + var3)); + } + + if (arg1->u_6 > 970) + { + var5 = 0; + } + else + { + var5 = (u16) ((1000 - arg1->u_6) / 30); + } + + total = (u16) (var1 + var4 + var5); + arg0->u_16 = total; + return total; +} + +THUMB_FUNC u16 FUN_0202A520(struct Unk0202A4B8 *unk) +{ + return unk->u_16; +} + +THUMB_FUNC u8 FUN_0202A524(struct Unk0202A4B8 *unk) +{ + return (u8)(unk->u_16 / (0xfa << 2)); +} + +THUMB_FUNC u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2) +{ + if (arg1 == 5) + { + return 0; + } + + switch(arg2) { + case 2: + unk->u_array_C[arg1] = 0; + break; + case 3: + if (unk->u_array_C[arg1] < 0xfffe) { + unk->u_array_C[arg1]++; + } + break; + } + return unk->u_array_C[arg1]; +} + +THUMB_FUNC BOOL FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2) +{ + u16 i; + u16 flag = 1; + + for (i = 0; i < arg1 ; i++) + { + flag <<= 1; + } + + switch (arg2) + { + case 2: + flag = (u16) (flag ^ 0xffff); + arg0->u_8 &= flag; + break; + case 1: + arg0->u_8 |= flag; + break; + case 0: + return (BOOL) ((arg0->u_8 >> arg1) & 1); + } + + return 0; +} + + +THUMB_FUNC void FUN_0202A5CC(struct Unk0202A5CC *unk, u32 arg1) +{ + unk->u_4 = arg1; +} + +THUMB_FUNC u32 FUN_0202A5D0(struct Unk0202A5CC *unk) +{ + return unk->u_4; +} + + +THUMB_FUNC void FUN_0202A5D4(struct SaveBlock2 *sav2, u32 arg1, struct MailMessage *arg2) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + MailMsg_copy(&data->messages.messages[arg1], arg2); +} + +THUMB_FUNC struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + return &data->messages.messages[arg1]; +} + +THUMB_FUNC void FUN_0202A60C(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) { + + u8 bitmask = 1; + + if (arg2 == 0 || arg2 > 200) + { + return; + } + + if (arg1 == 0 || arg1 > 10) + { + return; + } + + u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); + u8 index = (u8) (var2 / 8); + u8 remainder = (u8) (var2 % 8); + bitmask <<= remainder; + + arg0->u_4[index] |= bitmask; + arg0->u_0 = (arg3->u_0 << 24) | ((arg3->u_4 & 0xff) << 16) | ((arg3->u_8 & 0xff) << 8) | arg3->u_C; +} + +THUMB_FUNC void FUN_0202A670(struct Unk0202A670 *arg0) +{ + + MI_CpuFill8(&(arg0->u_4), 0, 250); + MI_CpuFill8(arg0, 0, 4); +} + +THUMB_FUNC BOOL FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1) +{ + if (arg0->u_0 > arg1->u_0) { + return TRUE; + } else if (arg0->u_4 > arg1->u_4) { + return TRUE; + } else if (arg0->u_8 > arg1->u_8) { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC BOOL FUN_0202A6B4(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) +{ + u8 bitmask = 1; + + if (arg2 > 200 || arg1 > 10) + { + return FALSE; + } + + u32 var0 = arg0->u_0; + + Unk0202A68C var1; + var1.u_0 = var0 >> 24 & 0xff; + var1.u_4 = var0 >> 16 & 0xff; + var1.u_8 = var0 >> 8 & 0xff; + var1.u_C = var0 & 0xff; + + if (FUN_0202A68C(arg3, &var1)) + { + FUN_0202A670(arg0); + return FALSE; + } + + u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); + u8 index = (u8) (var2 / 8); + u8 remainder = (u8) (var2 % 8); + bitmask <<= remainder; + + if (arg0->u_4[index] & bitmask) + { + return 1; + } + return FALSE; +} + + +THUMB_FUNC u8 FUN_0202A744(struct Unk0202A744 *unk) +{ + return unk->u_FE; +} + +THUMB_FUNC u8 FUN_0202A74C(struct Unk0202A744 *unk) +{ + return unk->u_FF; +} + +THUMB_FUNC void FUN_0202A754(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3) +{ + MI_CpuCopy8(src, &dest->u_104, sizeof(struct Unk0202A744_substruct1)); + dest->u_101 = arg2; + dest->u_100 = arg3; + dest->u_FE = 1; +} + +THUMB_FUNC void FUN_0202A784(struct Unk0202A744 *src, struct Unk0202A784 *dest) +{ + dest->u_0 = src->u_101; + dest->u_1 = src->u_100; +} + +THUMB_FUNC void FUN_0202A798(struct Unk0202A798_1 *arg0, struct Unk0202A798_2 *arg1, u32 arg2) +{ + struct Unk0202A798_substruct2 *var0 = &arg1->u_0; + u8 *var1 = arg1->u_30; + struct Unk0202A798_substruct1 *src = &arg0->u_104[arg2]; + struct MsgData *message; + + var0->u_0 = 10000; + var0->u_4 = src->u_C9; + + if(src->u_C8_0) + { + message = NewMsgDataFromNarc(0, NARC_MSGDATA_MSG, 17, 11); + ReadMsgDataIntoU16Array(message, (u32) (22 + src->u_C8_1), var0->u_8); + DestroyMsgData(message); + } + else + { + MI_CpuCopy8(src->u_A8, var0->u_8, 16); + } + + MI_CpuCopy8(src->u_CA, var0->u_18, 8); + MI_CpuCopy8(src->u_D2, var0->u_20, 8); + MI_CpuCopy8(src->u_DA, var0->u_28, 8); + MI_CpuCopy8(src->u_0, var1, 168); +} + +THUMB_FUNC void FUN_0202A838(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3) +{ + MI_CpuCopy8(src, &dest->u_740, sizeof(dest->u_740)); + dest->u_103 = arg2; + dest->u_102 = arg3; + dest->u_FF = 1; +} + +THUMB_FUNC void FUN_0202A864(struct Unk0202A744 *src, struct Unk0202A784 *dest) +{ + dest->u_0 = src->u_103; + dest->u_1 = src->u_102; +} + +THUMB_FUNC struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 heap_id) +{ + struct Unk0202A744_substruct2 *dstp = AllocFromHeap(heap_id, sizeof(struct Unk0202A744_substruct2) /* 1020 */); + MI_CpuCopy8(&src->u_740, dstp, sizeof(struct Unk0202A744_substruct2)); + return dstp; +} + +THUMB_FUNC s32 FUN_0202A89C() +{ + return 0xD00; // 3328 +} + +THUMB_FUNC void FUN_0202A8A4(struct UnkSaveStruct_0202A5D4 *savStruct) +{ + FUN_0202A1E4(savStruct); + FUN_0202A1F0(&savStruct->u_3C); + FUN_0202A204(&savStruct->messages); + FUN_0202A230(&savStruct->u_1C4); +} + +THUMB_FUNC struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2) +{ + return SavArray_get(sav2, 23); +} + +THUMB_FUNC struct Unk0202A1F0 *FUN_0202A8D8(struct SaveBlock2* sav2) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + return &data->u_3C; +} + +THUMB_FUNC void *FUN_0202A8E4(struct SaveBlock2* sav2) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + return &data->u_1C4; +}
\ No newline at end of file |