From 9d01adaa617c77f7527f7cea318cc49c09760125 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 4 Jul 2022 18:15:58 +0300 Subject: [PATCH 1/3] Match sub_0806D164 --- asm/non_matching/bigGoron/sub_0806D164.inc | 52 ---------------------- src/npc/bigGoron.c | 23 +++++++++- 2 files changed, 22 insertions(+), 53 deletions(-) delete mode 100644 asm/non_matching/bigGoron/sub_0806D164.inc diff --git a/asm/non_matching/bigGoron/sub_0806D164.inc b/asm/non_matching/bigGoron/sub_0806D164.inc deleted file mode 100644 index 118f34fe..00000000 --- a/asm/non_matching/bigGoron/sub_0806D164.inc +++ /dev/null @@ -1,52 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - ldr r5, _0806D1B8 @ =gRoomControls - movs r1, #0xa - ldrsh r2, [r5, r1] - movs r3, #0x2e - ldrsh r1, [r0, r3] - subs r2, r2, r1 - adds r2, #0xa0 - ldr r4, _0806D1BC @ =gScreen - movs r3, #0xf - adds r1, r2, #0 - ands r1, r3 - strh r1, [r4, #0x16] - ldrh r1, [r5, #0xc] - ldrh r0, [r0, #0x32] - subs r1, r1, r0 - adds r1, #0xb0 - strh r1, [r4, #0x18] - ldr r3, _0806D1C0 @ =gUnk_02006F00 - ldr r0, _0806D1C4 @ =0xFFFFC000 - adds r6, r3, r0 - movs r5, #0x20 - lsrs r2, r2, #4 - lsls r2, r2, #2 - adds r3, r2, r3 - adds r7, r4, #0 - ldr r1, _0806D1C8 @ =0x040000D4 - ldr r4, _0806D1CC @ =0x80000020 - movs r2, #0x80 - lsls r2, r2, #1 -_0806D1A0: - str r3, [r1] - str r6, [r1, #4] - str r4, [r1, #8] - ldr r0, [r1, #8] - adds r3, r3, r2 - adds r6, #0x40 - subs r5, #1 - cmp r5, #0 - bne _0806D1A0 - movs r0, #1 - strh r0, [r7, #0x1a] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0806D1B8: .4byte gRoomControls -_0806D1BC: .4byte gScreen -_0806D1C0: .4byte gUnk_02006F00 -_0806D1C4: .4byte 0xFFFFC000 -_0806D1C8: .4byte 0x040000D4 -_0806D1CC: .4byte 0x80000020 - .syntax divided diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index cd3e1cae..fde93fb5 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -12,6 +12,7 @@ static const u16 goronSounds[] = { }; extern u8 gMapDataTopSpecial[]; +extern u8 gUnk_02006F00[]; void sub_0806D520(Entity*, u32); void sub_0806D41C(Entity*); @@ -169,7 +170,27 @@ void sub_0806D138(unk_0806D138param_1* param_1, unk_0806D138param_2* param_2) { } } -ASM_FUNC("asm/non_matching/bigGoron/sub_0806D164.inc", void sub_0806D164(Entity* this)) +void sub_0806D164(Entity* this) { + u8* puVar1; + u8* puVar2; + u8* ptr; + u32 xOffset; + s32 index; + + xOffset = ((s32)gRoomControls.scroll_x - this->x.HALF.HI) + 0xa0; + gScreen.bg1.xOffset = (u16)xOffset & 0xf; + gScreen.bg1.yOffset = (gRoomControls.scroll_y - this->y.HALF.HI) + 0xb0; + ptr = gUnk_02006F00; + puVar1 = &ptr[0]; + puVar2 = &ptr[-0x4000]; + + for (index = 0x20, ptr = &puVar1[(xOffset >> 4) * 4]; index != 0; index--) { + DmaSet(3, ptr, puVar2, 0x80000020); + ptr += 0x100; + puVar2 += 0x40; + } + gScreen.bg1.updated = 1; +} void sub_0806D1D0(Entity* this) { if (this->action == 0) { From 304635114480116f217a8c9e2b176a9fa01b61df Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 4 Jul 2022 18:31:01 +0300 Subject: [PATCH 2/3] Match sub_0807A500 --- asm/non_matching/playerUtils/sub_0807A500.inc | 103 ------------------ src/playerUtils.c | 18 ++- 2 files changed, 17 insertions(+), 104 deletions(-) delete mode 100644 asm/non_matching/playerUtils/sub_0807A500.inc diff --git a/asm/non_matching/playerUtils/sub_0807A500.inc b/asm/non_matching/playerUtils/sub_0807A500.inc deleted file mode 100644 index e2cde890..00000000 --- a/asm/non_matching/playerUtils/sub_0807A500.inc +++ /dev/null @@ -1,103 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - ldr r6, _0807A518 @ =gPlayerEntity - ldrb r0, [r6, #0x14] - lsrs r0, r0, #1 - cmp r0, #1 - beq _0807A574 - cmp r0, #1 - bgt _0807A51C - cmp r0, #0 - beq _0807A526 - b _0807A5B4 - .align 2, 0 -_0807A518: .4byte gPlayerEntity -_0807A51C: - cmp r0, #2 - beq _0807A554 - cmp r0, #3 - beq _0807A580 - b _0807A5B4 -_0807A526: - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldr r5, _0807A550 @ =gRoomControls - ldrh r1, [r5, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r4, #0x3f - ands r0, r4 - movs r2, #0x32 - ldrsh r1, [r6, r2] - ldr r3, [r6, #0x48] - ldrb r2, [r3, #5] - subs r1, r1, r2 - movs r2, #1 - ldrsb r2, [r3, r2] - adds r1, r1, r2 - ldrh r2, [r5, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - b _0807A5AA - .align 2, 0 -_0807A550: .4byte gRoomControls -_0807A554: - movs r5, #0x2e - ldrsh r0, [r6, r5] - ldr r4, _0807A570 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - ldr r2, [r6, #0x48] - movs r5, #0x32 - ldrsh r1, [r6, r5] - ldrb r5, [r2, #5] - adds r1, r1, r5 - b _0807A59A - .align 2, 0 -_0807A570: .4byte gRoomControls -_0807A574: - ldr r2, [r6, #0x48] - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldrb r5, [r2, #2] - adds r0, r0, r5 - b _0807A58A -_0807A580: - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldr r2, [r6, #0x48] - ldrb r1, [r2, #2] - subs r0, r0, r1 -_0807A58A: - ldr r4, _0807A5B0 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r6, r5] -_0807A59A: - ldrb r2, [r2, #1] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 -_0807A5AA: - lsls r1, r1, #6 - orrs r0, r1 - b _0807A5B6 - .align 2, 0 -_0807A5B0: .4byte gRoomControls -_0807A5B4: - movs r0, #0 -_0807A5B6: - pop {r4, r5, r6, pc} - .syntax divided diff --git a/src/playerUtils.c b/src/playerUtils.c index 8a7a140f..2d2536c1 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -1830,7 +1830,23 @@ bool32 sub_0807A2B8(void) { ASM_FUNC("asm/non_matching/playerUtils/sub_0807A2F8.inc", u32 sub_0807A2F8(u32 a1)) -ASM_FUNC("asm/non_matching/playerUtils/sub_0807A500.inc", u32 sub_0807A500()) +u32 sub_0807A500(void) { + switch (gPlayerEntity.animationState >> 1) { + case 0: + return TILE(gPlayerEntity.x.HALF.HI, + gPlayerEntity.y.HALF.HI - gPlayerEntity.hitbox->unk2[3] + gPlayerEntity.hitbox->offset_y); + case 2: + return TILE(gPlayerEntity.x.HALF.HI, + gPlayerEntity.y.HALF.HI + gPlayerEntity.hitbox->unk2[3] + gPlayerEntity.hitbox->offset_y); + case 1: + return COORD_TO_TILE_OFFSET(&gPlayerEntity, -gPlayerEntity.hitbox->unk2[0], + -gPlayerEntity.hitbox->offset_y); + case 3: + return COORD_TO_TILE_OFFSET(&gPlayerEntity, gPlayerEntity.hitbox->unk2[0], -gPlayerEntity.hitbox->offset_y); + default: + return 0; + } +} ASM_FUNC("asm/non_matching/playerUtils/sub_0807A5B8.inc", void sub_0807A5B8(u32 a)) From d8f70dcfbfebb12beabcb7bd8faa83cf9c6681f5 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 4 Jul 2022 18:42:08 +0300 Subject: [PATCH 3/3] 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;