diff options
-rw-r--r-- | arm9/src/unk_0202A1E0.c | 431 | ||||
-rw-r--r-- | include/unk_0202A1E0.h | 83 |
2 files changed, 204 insertions, 310 deletions
diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c index 7de474ee..607ea8c3 100644 --- a/arm9/src/unk_0202A1E0.c +++ b/arm9/src/unk_0202A1E0.c @@ -6,36 +6,36 @@ THUMB_FUNC s32 FUN_0202A1E0() { - return 0xe4; // 228 + return 228; } THUMB_FUNC void FUN_0202A1E4(void *dest) { - MI_CpuFill8(dest, 0, 0x3c); // 60 + MI_CpuFill8(dest, 0, 60); } -THUMB_FUNC void FUN_0202A1F0(struct Unk0202A1F0 *unk) +THUMB_FUNC void FUN_0202A1F0(struct Unk0202A1F0 *arg0) { - MI_CpuFill8(unk, 0, 0x168); // 360 - unk->b3 = 1; + MI_CpuFill8(arg0, 0, 360); + arg0->u_3 = 1; } -THUMB_FUNC void FUN_0202A204(struct UnkMailStruct *unk) +THUMB_FUNC void FUN_0202A204(struct UnkMailStruct *arg0) { - MailMsg_init_fromTemplate(&unk->messages[0], 0); - MailMsg_init_fromTemplate(&unk->messages[1], 1); - MailMsg_init_fromTemplate(&unk->messages[2], 2); - MailMsg_init_fromTemplate(&unk->messages[3], 3); + 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, 0xB3C); // 2876 + MI_CpuFill8(dst, 0, 2876); } -THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 controlVariable, void *dst) +THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 mode, void *dst) { - switch (controlVariable) + switch (mode) { case 0: return unk->u_0_2; @@ -67,9 +67,9 @@ THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 controlVariable, void * }; } -THUMB_FUNC void FUN_0202A2C4(struct Unk0202A240 *dst, u32 controlVariable, void *src) +THUMB_FUNC void FUN_0202A2C4(struct Unk0202A240 *dst, u32 mode, void *src) { - switch (controlVariable) + switch (mode) { case 0: dst->u_0_2 = *(u8 *)src; @@ -249,33 +249,35 @@ THUMB_FUNC void FUN_0202A498(const void *src, s32 arg1, void *dst) } } -THUMB_FUNC void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) +THUMB_FUNC u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) { - u16 part1 = (arg1->u_2 - 1) * 1000; + 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); - s32 value = (u16) (arg1->u_4 * 10) + (u16) (arg1->u_3 * 20); - u16 part2; - if (value > 950) + if (var2 + var3 > 950) { - part2 = 0; + var4 = 0; } else { - part2 = 950 - value; + var4 = (u16) (950 - (var2 + var3)); } - u16 part3; if (arg1->u_6 > 970) { - part3 = 0; + var5 = 0; } else { - part3 = (970 + 30 - arg1->u_6) / 30; + var5 = (u16) ((1000 - arg1->u_6) / 30); } - // Can't seem to get these shifts to happen with a cast - arg0->u_16 = (u32) ((part1 + part2 + part3) << 16) >> 16; + total = (u16) (var1 + var4 + var5); + arg0->u_16 = total; + return total; } THUMB_FUNC u16 FUN_0202A520(struct Unk0202A4B8 *unk) @@ -308,56 +310,30 @@ THUMB_FUNC u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2) return unk->u_array_C[arg1]; } -THUMB_FUNC u16 FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2) { - asm{ - //push {r3-r4} - mov r3, #0x1 - mov r4, #0x0 - cmp r1, #0x0 - bls _0202A590 - _0202A582: - add r4, r4, #0x1 - lsl r4, r4, #0x10 - lsl r3, r3, #0x11 - lsr r4, r4, #0x10 - lsr r3, r3, #0x10 - cmp r4, r1 - blo _0202A582 - _0202A590: - cmp r2, #0x0 - beq _0202A5B4 - cmp r2, #0x1 - beq _0202A5AC - cmp r2, #0x2 - bne _0202A5C2 - ldr r1, =0x0000FFFF - eor r1, r3 - lsl r1, r1, #0x10 - lsr r2, r1, #0x10 - ldrh r1, [r0, #0x8] - and r1, r2 - strh r1, [r0, #0x8] - b _0202A5C2 - _0202A5AC: - ldrh r1, [r0, #0x8] - orr r1, r3 - strh r1, [r0, #0x8] - b _0202A5C2 - _0202A5B4: - ldrh r0, [r0, #0x8] - add r2, r0, #0x0 - asr r2, r1 - mov r0, #0x1 - and r0, r2 - pop {r3-r4} - bx lr - _0202A5C2: - mov r0, #0x0 - // pop {r3-r4} - // bx lr - // .balign 4 - // _0202A5C8: .word 0x0000FFFF +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; } @@ -384,159 +360,81 @@ THUMB_FUNC struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1) return &data->messages.messages[arg1]; } -THUMB_FUNC void FUN_0202A60C(u32 arg0, u32 arg1, u32 arg2, u32 arg3) { - asm { - // push {r3-r6} - add r4, r3, #0x0 - mov r3, #0x1 - cmp r2, #0x0 - beq _0202A66C - cmp r2, #0xc8 - bhi _0202A66C - cmp r1, #0x0 - beq _0202A66C - cmp r1, #0xa - bhi _0202A66C - sub r5, r2, #0x1 - sub r2, r1, #0x1 - mov r1, #0xc8 - mul r1, r2 - add r1, r5, r1 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsr r6, r1, #0x1f - lsl r5, r1, #0x1d - sub r5, r5, r6 - mov r2, #0x1d - ror r5, r2 - add r2, r6, r5 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - lsl r3, r2 - lsl r2, r3, #0x18 - lsl r1, r1, #0x15 - lsr r5, r2, #0x18 - add r3, r0, #0x4 - lsr r2, r1, #0x18 - ldrb r1, [r3, r2] - orr r1, r5 - strb r1, [r3, r2] - ldr r3, [r4, #0x0] - ldr r1, [r4, #0x8] - lsl r5, r3, #0x18 - ldr r3, [r4, #0x4] - lsl r1, r1, #0x18 - lsl r3, r3, #0x18 - lsr r3, r3, #0x8 - ldr r2, [r4, #0xc] - lsr r1, r1, #0x10 - orr r3, r5 - orr r1, r3 - orr r1, r2 - str r1, [r0, #0x0] - _0202A66C: - // pop {r3-r6} - // bx lr +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->b4), 0, 0xfa); + MI_CpuFill8(&(arg0->u_4), 0, 250); MI_CpuFill8(arg0, 0, 4); } -THUMB_FUNC u32 FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1) +THUMB_FUNC BOOL FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1) { - if (arg0->b0 > arg1->b0) { - return 1; - } else if (arg0->b4 > arg1->b4) { - return 1; - } else if (arg0->b8 > arg1->b8) { - return 1; + 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 0; + return FALSE; } -THUMB_FUNC void FUN_0202A6B4(u32 arg0, u32 arg1, u32 arg2) -{ - asm { - // push {r3-r7, lr} - sub sp, #0x10 - add r6, r2, #0x0 - add r5, r0, #0x0 - add r4, r1, #0x0 - mov r7, #0x1 - cmp r6, #0xc8 - bhi _0202A6C8 - cmp r4, #0xa - bls _0202A6CE - _0202A6C8: - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} - _0202A6CE: - ldr r0, [r5, #0x0] - lsr r1, r0, #0x18 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #0x0] - lsr r1, r0, #0x10 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #0x4] - lsr r1, r0, #0x8 - lsl r1, r1, #0x18 - lsl r0, r0, #0x18 - lsr r1, r1, #0x18 - lsr r0, r0, #0x18 - str r1, [sp, #0x8] - str r0, [sp, #0xc] - add r0, r3, #0x0 - add r1, sp, #0x0 - bl FUN_0202A68C - cmp r0, #0x0 - beq _0202A706 - add r0, r5, #0x0 - bl FUN_0202A670 - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} - _0202A706: - sub r1, r4, #0x1 - mov r0, #0xc8 - mul r0, r1 - sub r2, r6, #0x1 - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsr r3, r0, #0x1f - lsl r2, r0, #0x1d - lsl r0, r0, #0x15 - lsr r0, r0, #0x18 - add r0, r5, r0 - sub r2, r2, r3 - mov r1, #0x1d - ror r2, r1 - add r1, r3, r2 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r2, r7, #0x0 - lsl r2, r1 - lsl r1, r2, #0x18 - ldrb r0, [r0, #0x4] - lsr r1, r1, #0x18 - tst r0, r1 - beq _0202A73E - add sp, #0x10 - add r0, r7, #0x0 - pop {r3-r7, pc} - _0202A73E: - mov r0, #0x0 - add sp, #0x10 - // pop {r3-r7, pc} +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; } @@ -564,82 +462,31 @@ THUMB_FUNC void FUN_0202A784(struct Unk0202A744 *src, struct Unk0202A784 *dest) dest->u_1 = src->u_100; } -THUMB_FUNC void FUN_0202A798() -{ - asm { - //push {r3-r7, lr} - add r6, r1, #0x0 - mov r1, #0x41 - lsl r1, r1, #0x2 - add r5, r0, r1 - mov r0, #0xe4 - add r4, r2, #0x0 - mul r4, r0 - ldr r0, =0x00002710 - add r7, r6, #0x0 - str r0, [r6, #0x0] - add r0, r5, r4 - add r0, #0xc9 - ldrb r0, [r0, #0x0] - add r7, #0x30 - strh r0, [r6, #0x4] - add r0, r5, r4 - add r0, #0xc8 - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _0202A7EE - mov r0, #0x0 - mov r1, #0x1a - mov r2, #0x11 - mov r3, #0xb - bl NewMsgDataFromNarc - add r1, r5, r4 - add r1, #0xc8 - ldrb r1, [r1, #0x0] - add r2, r6, #0x0 - str r0, [sp, #0x0] - lsl r1, r1, #0x1e - lsr r1, r1, #0x1f - add r1, #0x16 - add r2, #0x8 - bl ReadMsgDataIntoU16Array - ldr r0, [sp, #0x0] - bl DestroyMsgData - b _0202A7FC - _0202A7EE: - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xa8 - add r1, #0x8 - mov r2, #0x10 - bl MI_CpuCopy8 - _0202A7FC: - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xca - add r1, #0x18 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xd2 - add r1, #0x20 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r6, #0x28 - add r0, #0xda - add r1, r6, #0x0 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r1, r7, #0x0 - mov r2, #0xa8 - bl MI_CpuCopy8 - //pop {r3-r7, pc} - //nop +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) @@ -659,7 +506,7 @@ THUMB_FUNC void FUN_0202A864(struct Unk0202A744 *src, struct Unk0202A784 *dest) 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, 0x3fc); + MI_CpuCopy8(&src->u_740, dstp, sizeof(struct Unk0202A744_substruct2)); return dstp; } @@ -681,7 +528,7 @@ THUMB_FUNC struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2) return SavArray_get(sav2, 23); } -THUMB_FUNC void *FUN_0202A8D8(struct SaveBlock2* sav2) +THUMB_FUNC struct Unk0202A1F0 *FUN_0202A8D8(struct SaveBlock2* sav2) { struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); return &data->u_3C; diff --git a/include/unk_0202A1E0.h b/include/unk_0202A1E0.h index 4ed236be..c07810c3 100644 --- a/include/unk_0202A1E0.h +++ b/include/unk_0202A1E0.h @@ -6,10 +6,8 @@ struct Unk0202A1F0 { - u8 b0; - u8 b1; - u8 b2; - u8 b3; + u8 filler[3]; + u8 u_3; }; struct UnkMailStruct @@ -70,6 +68,12 @@ struct Unk0202A4B8 u16 u_18; // used }; +struct Unk0202A578 +{ + u8 filler[8]; + u16 u_8; +}; + struct Unk0202A5CC { u32 filler; @@ -86,18 +90,21 @@ struct UnkSaveStruct_0202A5D4 u32 u_1C4; }; -struct Unk0202A670 +typedef struct Unk0202A670 { - u32 b0; - u8 b4; // used -}; + u32 u_0; // used + u8 u_4[250]; // used +} +Unk0202A670; -struct Unk0202A68C +typedef struct Unk0202A68C { - u32 b0; // used - u32 b4; // used - u32 b8; // used -}; + u32 u_0; // used + u32 u_4; // used + u32 u_8; // used + u32 u_C; // used +} +Unk0202A68C; // total size 0x10 (16) struct Unk0202A744_substruct1 { @@ -106,7 +113,7 @@ struct Unk0202A744_substruct1 struct Unk0202A744_substruct2 { - u8 data[0x3fc]; + u8 data[1020]; }; // total size 0x3FC (1020) struct Unk0202A744 @@ -128,6 +135,44 @@ struct Unk0202A784 u8 u_1; }; +struct Unk0202A798_substruct1 +{ + u8 u_0[168]; + u8 u_A8[16]; + u16 filler_2[8]; + u8 u_C8_0:1; + u8 u_C8_1:1; + u8 u_C8_filler:6; + u8 u_C9; + u16 u_CA[4]; + u16 u_D2[4]; + u16 u_DA[4]; + u8 filler_3[2]; +}; // total size 0xE4 (228) + +struct Unk0202A798_1 +{ + u8 filler[260]; + struct Unk0202A798_substruct1 u_104[4]; +}; + +struct Unk0202A798_substruct2 +{ + u32 u_0; + u16 u_4; + u8 filler_1[2]; + u16 u_8[8]; + u16 u_18[4]; + u16 u_20[4]; + u16 u_28[4]; +}; // total size 0x30 (48) + +struct Unk0202A798_2 +{ + struct Unk0202A798_substruct2 u_0; + u8 u_30[168]; +}; + s32 FUN_0202A1E0(); void FUN_0202A1E4(void *dst); void FUN_0202A1F0(struct Unk0202A1F0 *unk); @@ -143,17 +188,19 @@ u8 FUN_0202A40C(struct Unk0202A40C *unk, s32 arg1); u8 FUN_0202A444(struct Unk0202A444 *unk, s32 arg1); void FUN_0202A474(void *dst, s32 arg1, const void *src); void FUN_0202A498(const void *src, s32 arg1, void *dst); -void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1); +u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1); u16 FUN_0202A520(struct Unk0202A4B8 *unk); u8 FUN_0202A524(struct Unk0202A4B8 *unk); u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2); +BOOL FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2); void FUN_0202A5CC(struct Unk0202A5CC *unk, u32 arg1); u32 FUN_0202A5D0(struct Unk0202A5CC *unk); void FUN_0202A5D4(struct SaveBlock2 *sav2, u32 arg1, struct MailMessage *arg2); struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1); -void FUN_0202A60C(u32 arg0, u32 arg1, u32 arg2, u32 arg3); +void FUN_0202A60C(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); void FUN_0202A670(struct Unk0202A670 *arg0); -u32 FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1); +BOOL FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1); +BOOL FUN_0202A6B4(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); u8 FUN_0202A744(struct Unk0202A744 *unk); u8 FUN_0202A74C(struct Unk0202A744 *unk); void FUN_0202A754(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3); @@ -165,7 +212,7 @@ struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 head_id s32 FUN_0202A89C(); void FUN_0202A8A4(struct UnkSaveStruct_0202A5D4 *savStruct); struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2); -void *FUN_0202A8D8(struct SaveBlock2* sav2); +struct Unk0202A1F0 *FUN_0202A8D8(struct SaveBlock2* sav2); void *FUN_0202A8E4(struct SaveBlock2* sav2); #endif //POKEDIAMOND_UNK_0202A1E0_H
\ No newline at end of file |