mirror of https://github.com/zeldaret/tmc.git
Match sub_0801E64C
This commit is contained in:
parent
953a5d35cc
commit
e10d7b3eca
|
|
@ -1,72 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r1, #0
|
||||
adds r6, r3, #0
|
||||
ldr r7, _0801E6C4 @ =gUnk_02018EE0
|
||||
cmp r4, #0
|
||||
bge _0801E65E
|
||||
cmp r6, #0
|
||||
blt _0801E6C2
|
||||
_0801E65E:
|
||||
cmp r4, #0x9f
|
||||
ble _0801E666
|
||||
cmp r6, #0x9f
|
||||
bgt _0801E6C2
|
||||
_0801E666:
|
||||
cmp r4, r6
|
||||
ble _0801E676
|
||||
adds r1, r4, #0
|
||||
adds r4, r6, #0
|
||||
adds r6, r1, #0
|
||||
adds r1, r5, #0
|
||||
adds r5, r2, #0
|
||||
adds r2, r1, #0
|
||||
_0801E676:
|
||||
cmp r4, r6
|
||||
beq _0801E6C2
|
||||
subs r0, r2, r5
|
||||
lsls r0, r0, #0x10
|
||||
subs r1, r6, r4
|
||||
bl Div
|
||||
adds r3, r0, #0
|
||||
cmp r4, #0
|
||||
bge _0801E694
|
||||
rsbs r0, r4, #0
|
||||
muls r0, r3, r0
|
||||
asrs r0, r0, #0x10
|
||||
adds r5, r5, r0
|
||||
movs r4, #0
|
||||
_0801E694:
|
||||
cmp r6, #0x9f
|
||||
ble _0801E69A
|
||||
movs r6, #0x9f
|
||||
_0801E69A:
|
||||
lsls r2, r5, #0x10
|
||||
lsls r0, r4, #1
|
||||
adds r0, r0, r4
|
||||
ldr r1, [sp, #0x14]
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r7, r0, r7
|
||||
_0801E6A8:
|
||||
cmp r5, #0
|
||||
bge _0801E6AE
|
||||
movs r5, #0
|
||||
_0801E6AE:
|
||||
cmp r5, #0xf0
|
||||
ble _0801E6B4
|
||||
movs r5, #0xf0
|
||||
_0801E6B4:
|
||||
str r5, [r7]
|
||||
adds r2, r2, r3
|
||||
asrs r5, r2, #0x10
|
||||
adds r4, #1
|
||||
adds r7, #0xc
|
||||
cmp r4, r6
|
||||
ble _0801E6A8
|
||||
_0801E6C2:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0801E6C4: .4byte gUnk_02018EE0
|
||||
.syntax divided
|
||||
38
src/common.c
38
src/common.c
|
|
@ -701,7 +701,43 @@ ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u
|
|||
|
||||
ASM_FUNC("asm/non_matching/common/sub_0801E49C.inc", void sub_0801E49C(u32 a1, u32 a2, u32 a3, u32 a4));
|
||||
|
||||
ASM_FUNC("asm/non_matching/common/sub_0801E64C.inc", void sub_0801E64C(u32 a1, u32 a2, u32 a3, u32 a4, u32 a5));
|
||||
void sub_0801E64C(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5) {
|
||||
s32 sVar1;
|
||||
s32* ptr = (s32*)gUnk_02018EE0;
|
||||
register s32 tmp asm("r1");
|
||||
|
||||
if ((0 <= param_2 || 0 <= param_4) && (param_2 < 0xa0 || (param_4 < 0xa0))) {
|
||||
if (param_2 > param_4) {
|
||||
SWAP(param_2, param_4, tmp);
|
||||
SWAP(param_1, param_3, tmp);
|
||||
}
|
||||
if (param_2 != param_4) {
|
||||
sVar1 = Div((param_3 - param_1) * 0x10000, param_4 - param_2);
|
||||
if (param_2 < 0) {
|
||||
param_1 += (sVar1 * -param_2) >> 0x10;
|
||||
param_2 = 0;
|
||||
}
|
||||
if (0x9f < param_4) {
|
||||
param_4 = 0x9f;
|
||||
}
|
||||
param_3 = param_1 << 0x10;
|
||||
ptr += param_2 * 3 + param_5;
|
||||
do {
|
||||
if (param_1 < 0) {
|
||||
param_1 = 0;
|
||||
}
|
||||
if (0xf0 < param_1) {
|
||||
param_1 = 0xf0;
|
||||
}
|
||||
*ptr = param_1;
|
||||
param_3 += sVar1;
|
||||
param_1 = param_3 >> 0x10;
|
||||
param_2++;
|
||||
ptr += 3;
|
||||
} while (param_2 <= param_4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801E6C8(u32 param_1) {
|
||||
u32 tmp;
|
||||
|
|
|
|||
Loading…
Reference in New Issue