summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwho-knows-who <j.williams97@outlook.com>2021-05-15 16:10:25 +0100
committerwho-knows-who <j.williams97@outlook.com>2021-05-15 16:10:25 +0100
commit1fc5a9fcef39d9fbed2b7f96b4a45940ba7e9afd (patch)
tree7e94b6981a2d5ac2658b22ea1bdeaf71189f31aa
parent996d9d78106cf4ab601815550ba77a92ab678328 (diff)
Match FUN_0202A4B8
-rw-r--r--arm9/src/unk_0202A1E0.c80
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)