summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_0202A1E0.c541
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