From d8f70dcfbfebb12beabcb7bd8faa83cf9c6681f5 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 4 Jul 2022 18:42:08 +0300 Subject: [PATCH] Match sub_080ACDB0 --- .../playerItem10/sub_080ACDB0.inc | 150 ------------------ src/playerItem/playerItemGust.c | 67 +++++++- 2 files changed, 66 insertions(+), 151 deletions(-) delete mode 100644 asm/non_matching/playerItem10/sub_080ACDB0.inc diff --git a/asm/non_matching/playerItem10/sub_080ACDB0.inc b/asm/non_matching/playerItem10/sub_080ACDB0.inc deleted file mode 100644 index cf9b7271..00000000 --- a/asm/non_matching/playerItem10/sub_080ACDB0.inc +++ /dev/null @@ -1,150 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _080ACDE8 - ldr r2, _080ACDE0 @ =gPlayerEntity - ldr r1, _080ACDE4 @ =gUnk_08126EE4 - ldrb r0, [r4, #0x14] - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r3, [r2, #0x2e] - adds r0, r0, r3 - strh r0, [r4, #0x2e] - ldrb r0, [r4, #0x14] - adds r0, #1 - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r2, [r2, #0x32] - adds r0, r0, r2 - b _080ACEB4 - .align 2, 0 -_080ACDE0: .4byte gPlayerEntity -_080ACDE4: .4byte gUnk_08126EE4 -_080ACDE8: - ldrb r2, [r4, #0x14] - movs r0, #2 - ands r0, r2 - cmp r0, #0 - beq _080ACE48 - ldr r0, [r4, #0x50] - ldrh r1, [r0, #0x32] - subs r1, #3 - strh r1, [r4, #0x32] - movs r1, #4 - ands r1, r2 - adds r3, r0, #0 - cmp r1, #0 - beq _080ACE20 - movs r0, #0x2e - ldrsh r7, [r3, r0] - movs r0, #0x2e - ldrsh r6, [r4, r0] - ldr r1, _080ACE1C @ =gUnk_0812AAE8 - ldrb r2, [r4, #0xa] - adds r0, r2, r1 - ldrb r0, [r0] - rsbs r5, r0, #0 - adds r0, r1, #0 - b _080ACE30 - .align 2, 0 -_080ACE1C: .4byte gUnk_0812AAE8 -_080ACE20: - movs r0, #0x2e - ldrsh r6, [r3, r0] - movs r0, #0x2e - ldrsh r7, [r4, r0] - ldr r0, _080ACE44 @ =gUnk_0812AAE8 - ldrb r2, [r4, #0xa] - adds r1, r2, r0 - ldrb r5, [r1] -_080ACE30: - subs r1, r7, r6 - str r1, [r4, #0x78] - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, r1 - bhi _080ACE90 - ldrh r0, [r3, #0x2e] - adds r0, r0, r5 - strh r0, [r4, #0x2e] - b _080ACEB6 - .align 2, 0 -_080ACE44: .4byte gUnk_0812AAE8 -_080ACE48: - ldr r1, [r4, #0x50] - ldrh r0, [r1, #0x2e] - strh r0, [r4, #0x2e] - movs r0, #4 - ands r0, r2 - adds r3, r1, #0 - cmp r0, #0 - beq _080ACE70 - movs r0, #0x32 - ldrsh r6, [r3, r0] - movs r0, #0x32 - ldrsh r7, [r4, r0] - ldr r0, _080ACE6C @ =gUnk_0812AAE8 - ldrb r2, [r4, #0xa] - adds r1, r2, r0 - ldrb r5, [r1] - b _080ACE84 - .align 2, 0 -_080ACE6C: .4byte gUnk_0812AAE8 -_080ACE70: - movs r0, #0x32 - ldrsh r7, [r3, r0] - movs r0, #0x32 - ldrsh r6, [r4, r0] - ldr r1, _080ACEAC @ =gUnk_0812AAE8 - ldrb r2, [r4, #0xa] - adds r0, r2, r1 - ldrb r0, [r0] - rsbs r5, r0, #0 - adds r0, r1, #0 -_080ACE84: - subs r1, r7, r6 - str r1, [r4, #0x78] - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, r1 - bls _080ACEB0 -_080ACE90: - subs r0, r0, r1 - lsls r1, r0, #8 - strh r1, [r4, #0x24] - lsls r0, r0, #0x18 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #2 - cmp r0, r1 - ble _080ACEA4 - strh r1, [r4, #0x24] -_080ACEA4: - adds r0, r4, #0 - bl ProcessMovement1 - b _080ACEB6 - .align 2, 0 -_080ACEAC: .4byte gUnk_0812AAE8 -_080ACEB0: - ldrh r0, [r3, #0x32] - adds r0, r0, r5 -_080ACEB4: - strh r0, [r4, #0x32] -_080ACEB6: - ldr r0, _080ACEC8 @ =gPlayerEntity - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] - movs r0, #0 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080ACEC8: .4byte gPlayerEntity - .syntax divided diff --git a/src/playerItem/playerItemGust.c b/src/playerItem/playerItemGust.c index 82fe51ff..ccb7c3d4 100644 --- a/src/playerItem/playerItemGust.c +++ b/src/playerItem/playerItemGust.c @@ -41,6 +41,7 @@ extern const s8* const sOffsets[]; extern const s8 gUnk_0812AABC[]; extern const Hitbox* const sHitboxes[]; extern const u8 gUnk_0812AAE8[]; +extern const s8 gUnk_08126EE4[]; // specifically, the little gusts that come out while the item is active // type 0: stays close to jar? @@ -149,7 +150,71 @@ static void sub_080ACC78(GustEntity* this) { } } -/*static*/ ASM_FUNC("asm/non_matching/playerItem10/sub_080ACDB0.inc", bool32 sub_080ACDB0(GustEntity* this)) +bool32 sub_080ACDB0(GustEntity* this) { + s32 sVar2; + s32 sVar3; + Entity* pEVar4; + u32 uVar6; + u32 uVar7; + u32 tmp; + + if (super->type == 0) { + super->x.HALF.HI = gPlayerEntity.x.HALF.HI + gUnk_08126EE4[super->animationState]; + super->y.HALF.HI = gPlayerEntity.y.HALF.HI + gUnk_08126EE4[super->animationState + 1]; + } else { + if ((super->animationState & 2) != 0) { + super->y.HALF.HI = super->parent->y.HALF.HI - 3; + tmp = super->animationState & 4; + pEVar4 = super->parent; + if ((tmp) != 0) { + sVar3 = pEVar4->x.HALF.HI; + sVar2 = super->x.HALF.HI; + uVar7 = -(u16)gUnk_0812AAE8[super->type]; + } else { + sVar2 = pEVar4->x.HALF.HI; + sVar3 = super->x.HALF.HI; + uVar7 = (u16)gUnk_0812AAE8[super->type]; + } + this->unk78 = (s32)sVar3 - (s32)sVar2; + uVar6 = gUnk_0812AAE8[super->type]; + if (uVar6 <= this->unk78) { + super->x.HALF.HI = pEVar4->x.HALF.HI + uVar7; + } else { + super->speed = (uVar6 - this->unk78) * 0x100; + if (0x200 < (s32)((uVar6 - this->unk78) * 0x1000000) >> 0x10) { + super->speed = 0x200; + } + ProcessMovement1(super); + } + } else { + super->x.HALF.HI = super->parent->x.HALF.HI; + tmp = super->animationState & 4; + pEVar4 = super->parent; + if ((super->animationState & 4) != 0) { + sVar2 = pEVar4->y.HALF.HI; + sVar3 = super->y.HALF.HI; + uVar7 = gUnk_0812AAE8[super->type]; + } else { + sVar3 = pEVar4->y.HALF.HI; + sVar2 = super->y.HALF.HI; + uVar7 = -gUnk_0812AAE8[super->type]; + } + this->unk78 = sVar3 - sVar2; + uVar6 = gUnk_0812AAE8[super->type]; + if (uVar6 > this->unk78) { + super->speed = (uVar6 - this->unk78) * 0x100; + if (0x200 < (s32)((uVar6 - this->unk78) * 0x1000000) >> 0x10) { + super->speed = 0x200; + } + ProcessMovement1(super); + } else { + super->y.HALF.HI = pEVar4->y.HALF.HI + uVar7; + } + } + } + super->collisionLayer = gPlayerEntity.collisionLayer; + return 0; +} static void sub_080ACECC(GustEntity* this) { Entity* entity;