diff options
author | who-knows-who <j.williams97@outlook.com> | 2021-05-15 16:10:25 +0100 |
---|---|---|
committer | who-knows-who <j.williams97@outlook.com> | 2021-05-15 16:10:25 +0100 |
commit | 1fc5a9fcef39d9fbed2b7f96b4a45940ba7e9afd (patch) | |
tree | 7e94b6981a2d5ac2658b22ea1bdeaf71189f31aa | |
parent | 996d9d78106cf4ab601815550ba77a92ab678328 (diff) |
Match FUN_0202A4B8
-rw-r--r-- | arm9/src/unk_0202A1E0.c | 80 |
1 files changed, 24 insertions, 56 deletions
diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c index ca9dff64..7de474ee 100644 --- a/arm9/src/unk_0202A1E0.c +++ b/arm9/src/unk_0202A1E0.c @@ -251,63 +251,31 @@ THUMB_FUNC void FUN_0202A498(const void *src, s32 arg1, void *dst) THUMB_FUNC void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) { - extern void _s32_div_f(); - - asm { - // push {r4-r6, lr} - add r6, r0, #0x0 - ldrb r0, [r1, #0x2] - mov r2, #0xfa - lsl r2, r2, #0x2 - sub r0, r0, #0x1 - add r3, r0, #0x0 - mul r3, r2 - lsl r0, r3, #0x10 - lsr r4, r0, #0x10 - ldrh r3, [r1, #0x4] - mov r0, #0xa - ldrb r5, [r1, #0x3] - mul r0, r3 - mov r3, #0x14 - mul r3, r5 - lsl r0, r0, #0x10 - lsl r3, r3, #0x10 - lsr r0, r0, #0x10 - lsr r3, r3, #0x10 - add r3, r0, r3 - add r0, r2, #0x0 - sub r0, #0x32 - cmp r3, r0 - ble _0202A4EE - mov r5, #0x0 - b _0202A4F6 - _0202A4EE: - sub r2, #0x32 - sub r0, r2, r3 - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 - _0202A4F6: - ldrh r1, [r1, #0x6] - ldr r0, =0x000003CA - cmp r1, r0 - bls _0202A502 - mov r1, #0x0 - b _0202A510 - _0202A502: - add r0, #0x1e - sub r0, r0, r1 - mov r1, #0x1e - bl _s32_div_f - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - _0202A510: - add r0, r4, r5 - add r0, r1, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - strh r0, [r6, #0x16] - // pop {r4-r6, pc} + u16 part1 = (arg1->u_2 - 1) * 1000; + + s32 value = (u16) (arg1->u_4 * 10) + (u16) (arg1->u_3 * 20); + u16 part2; + if (value > 950) + { + part2 = 0; } + else + { + part2 = 950 - value; + } + + u16 part3; + if (arg1->u_6 > 970) + { + part3 = 0; + } + else + { + part3 = (970 + 30 - 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; } THUMB_FUNC u16 FUN_0202A520(struct Unk0202A4B8 *unk) |