diff --git a/asm/non_matching/vaati/sub_08043B08.inc b/asm/non_matching/vaati/sub_08043B08.inc deleted file mode 100644 index d21677d2..00000000 --- a/asm/non_matching/vaati/sub_08043B08.inc +++ /dev/null @@ -1,67 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - ldrb r3, [r0, #0xa] - lsls r1, r3, #4 - adds r4, r1, #0 - adds r4, #8 - ldr r2, [r0, #0x64] - adds r6, r2, r4 - adds r1, #0x18 - adds r4, r2, r1 - ldr r0, _08043B40 @ =gUnk_080D13B2 - adds r3, r3, r0 - ldrb r5, [r3] - ldr r0, [r2] - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _08043B44 - ldrb r1, [r6, #1] - ldrb r0, [r4, #1] - subs r0, r1, r0 - lsls r0, r0, #0x18 - asrs r3, r0, #0x18 - cmp r5, r3 - bhs _08043B5E - cmp r3, #0 - ble _08043B56 - subs r0, r1, r5 - b _08043B5C - .align 2, 0 -_08043B40: .4byte gUnk_080D13B2 -_08043B44: - ldrb r0, [r4, #1] - ldrb r1, [r6, #1] - subs r0, r0, r1 - lsls r0, r0, #0x18 - asrs r3, r0, #0x18 - cmp r5, r3 - bhs _08043B5E - cmp r3, #0 - bge _08043B5A -_08043B56: - strb r1, [r4, #1] - b _08043B5E -_08043B5A: - adds r0, r1, r5 -_08043B5C: - strb r0, [r4, #1] -_08043B5E: - ldrb r2, [r6, #5] - ldrb r0, [r4, #5] - subs r3, r2, r0 - lsls r1, r5, #1 - adds r0, r3, r5 - cmp r1, r0 - bhs _08043B78 - cmp r3, #0 - ble _08043B74 - subs r0, r2, r5 - b _08043B76 -_08043B74: - adds r0, r2, r5 -_08043B76: - strb r0, [r4, #5] -_08043B78: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c index 40008e77..1e78d133 100644 --- a/src/enemy/vaatiArm.c +++ b/src/enemy/vaatiArm.c @@ -1201,9 +1201,46 @@ static void sub_08043ABC(Entity* this) { ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spriteOffsetY--; } -static ASM_FUNC("asm/non_matching/vaati/sub_08043B08.inc", void sub_08043B08(Entity* this)) +void sub_08043B08(Entity* this) { + VaatiArm_HeapStruct1* hs1; + VaatiArm_HeapStruct1* hs2; + u32 bVar1; + s32 uVar6; - static void sub_08043B7C(Entity* this) { + hs1 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[this->type - 1]; + hs2 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[this->type]; + bVar1 = gUnk_080D13B2[this->type]; + if (((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->type2 == 0) { + uVar6 = (s8)((hs1->unk00.HALF.HI - hs2->unk00.HALF.HI)); + if (bVar1 < uVar6) { + if (uVar6 <= 0) { + hs2->unk00.HALF.HI = hs1->unk00.HALF.HI; + } else { + hs2->unk00.HALF.HI = hs1->unk00.HALF.HI - bVar1; + } + } + } else { + uVar6 = (s8)(hs2->unk00.HALF.HI - hs1->unk00.HALF.HI); + if (bVar1 < uVar6) { + if (uVar6 < 0) { + hs2->unk00.HALF.HI = hs1->unk00.HALF.HI; + } else { + hs2->unk00.HALF.HI = hs1->unk00.HALF.HI + bVar1; + } + } + } + + uVar6 = hs1->unk04.HALF.HI - hs2->unk04.HALF.HI; + if ((bVar1 << 1) < uVar6 + bVar1) { + if (uVar6 > 0) { + hs2->unk04.HALF.HI = hs1->unk04.HALF.HI - bVar1; + } else { + hs2->unk04.HALF.HI = hs1->unk04.HALF.HI + bVar1; + } + } +} + +static void sub_08043B7C(Entity* this) { sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[3]);