From ed98ab4b765cadf545c1e8dce8929a9d12b977ca Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 31 Dec 2021 02:41:30 +0200 Subject: [PATCH] Decompiled some coord.c functions --- asm/non_matching/sub_0806F798.inc | 30 ------------------------------ asm/non_matching/sub_0806F824.inc | 25 ------------------------- src/coord.c | 30 +++++++++++++++++++++++++++--- 3 files changed, 27 insertions(+), 58 deletions(-) delete mode 100644 asm/non_matching/sub_0806F798.inc delete mode 100644 asm/non_matching/sub_0806F824.inc diff --git a/asm/non_matching/sub_0806F798.inc b/asm/non_matching/sub_0806F798.inc deleted file mode 100644 index 1ea837b0..00000000 --- a/asm/non_matching/sub_0806F798.inc +++ /dev/null @@ -1,30 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r2, r0, #0 - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldr r4, [r2, #0x48] - movs r1, #0 - ldrsb r1, [r4, r1] - adds r0, r0, r1 - ldr r3, _0806F7CC @ =gRoomControls - ldrh r1, [r3, #6] - subs r0, r0, r1 - movs r5, #0x32 - ldrsh r1, [r2, r5] - movs r2, #1 - ldrsb r2, [r4, r2] - adds r1, r1, r2 - ldrh r2, [r3, #8] - subs r1, r1, r2 - movs r2, #0x3f - lsrs r0, r0, #4 - ands r0, r2 - lsrs r1, r1, #4 - ands r1, r2 - lsls r1, r1, #6 - adds r0, r0, r1 - pop {r4, r5, pc} - .align 2, 0 -_0806F7CC: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/sub_0806F824.inc b/asm/non_matching/sub_0806F824.inc deleted file mode 100644 index 698d911d..00000000 --- a/asm/non_matching/sub_0806F824.inc +++ /dev/null @@ -1,25 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - adds r4, r2, #0 - adds r5, r3, #0 - movs r2, #0x2e - ldrsh r6, [r0, r2] - movs r2, #0x32 - ldrsh r3, [r0, r2] - mov r8, r3 - movs r3, #0x2e - ldrsh r2, [r1, r3] - adds r2, r2, r4 - movs r0, #0x32 - ldrsh r3, [r1, r0] - adds r3, r3, r5 - adds r0, r6, #0 - mov r1, r8 - bl sub_080045D4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/src/coord.c b/src/coord.c index 87108481..fc738068 100644 --- a/src/coord.c +++ b/src/coord.c @@ -194,7 +194,12 @@ u32 sub_0806F730(Entity* ent) { return ((x >> 4) & tmp) + (((y >> 4) & tmp) << 6); } -ASM_FUNC("asm/non_matching/sub_0806F798.inc", u32 sub_0806F798(Entity* ent)); +u32 sub_0806F798(Entity* ent) { + u32 hitboxX = ent->x.HALF.HI + ent->hitbox->offset_x - gRoomControls.roomOriginX; + u32 hitboxY = ent->y.HALF.HI + ent->hitbox->offset_y - gRoomControls.roomOriginY; + u32 mask = 0x3f; + return (mask & (hitboxX >> 4)) + ((mask & (hitboxY >> 4)) << 6); +} u32 sub_0806F7D0(Entity* ent) { return gUnk_02025EB0._2004[sub_0806F730(ent)]; @@ -209,7 +214,9 @@ u32 sub_0806F804(u32 x, u32 y) { return gUnk_02025EB0._4[idx]; } -ASM_FUNC("asm/non_matching/sub_0806F824.inc", void sub_0806F824(Entity* a, Entity* b, u32 x, u32 y)); +void sub_0806F824(Entity* a, Entity* b, s32 x, s32 y) { + sub_080045D4(a->x.HALF.HI, a->y.HALF.HI, b->x.HALF.HI + x, b->y.HALF.HI + y); +} u32 sub_0806F854(Entity* ent, s32 x, s32 y) { if (ent->z.WORD == 0 || (ent->collisionLayer & 2)) @@ -253,7 +260,24 @@ u32 sub_0806F948(Entity* ent) { return ent->animationState; } -ASM_FUNC("asm/non_matching/sub_0806F998.inc", u32 sub_0806F998(Entity* ent)); +NONMATCH("asm/non_matching/sub_0806F998.inc", u32 sub_0806F998(Entity* ent)) { + u8 animationState = ent->animationState; + + if ((ent->direction & 0x80) == 0) { + u8 tmp = ((ent->direction & 0x1c) >> 2); + if ((tmp & 0x1) == 0 || ((tmp - animationState + 1) & 0x4)) { + animationState = ent->animationState = (animationState >> 2) & 0x7e; + if (ent->animationState <= 4) { + ent->spriteSettings.flipX = 0; + } else { + ent->spriteSettings.flipX = 1; + } + } + } + + return animationState; +} +END_NONMATCH s16 FixedMul(s16 r0, s16 r1) { s32 temp = r0 * r1;