From 542b20b914446cfc9e74bee676f5e59f44121e61 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 15 Jul 2022 09:01:07 +0300 Subject: [PATCH] Match OcarinaUpdate and sub_08026110 --- asm/enemy/chuchuBoss.s | 182 --------------------- asm/non_matching/ocarina/OcarinaUpdate.inc | 38 ----- src/enemy/chuchuBoss.c | 73 ++++++++- src/item/itemOcarina.c | 7 +- src/object/bird.c | 2 +- 5 files changed, 76 insertions(+), 226 deletions(-) delete mode 100644 asm/non_matching/ocarina/OcarinaUpdate.inc diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 2db094e1..30728ada 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -6,188 +6,6 @@ .text - thumb_func_start sub_08026110 -sub_08026110: @ 0x08026110 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldr r1, _08026144 @ =gUnk_080CC1DC - ldrb r0, [r6, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r6, #0 - bl _call_via_r1 - adds r0, r6, #0 - adds r0, #0x84 - ldr r2, [r0] - ldr r0, [r2, #8] - cmp r0, #0 - bne _08026160 - ldrb r1, [r2, #5] - cmp r1, #0 - beq _08026160 - ldrb r0, [r6, #0xd] - cmp r0, #8 - bne _08026148 - adds r0, r1, #0 - subs r0, #0x40 - b _0802614C - .align 2, 0 -_08026144: .4byte gUnk_080CC1DC -_08026148: - adds r0, r1, #0 - subs r0, #0x20 -_0802614C: - strb r0, [r2, #5] - adds r0, r6, #0 - adds r0, #0x84 - ldr r1, [r0] - movs r0, #5 - ldrsb r0, [r1, r0] - cmp r0, #0 - bge _08026160 - movs r0, #0 - strb r0, [r1, #5] -_08026160: - adds r2, r6, #0 - adds r2, #0x80 - ldrb r0, [r2] - movs r1, #0x76 - adds r1, r1, r6 - mov ip, r1 - adds r7, r6, #0 - adds r7, #0x7a - cmp r0, #0 - beq _08026230 - ldrb r0, [r6, #0xe] - cmp r0, #0 - bne _080261D2 - ldrb r1, [r2] - lsls r1, r1, #0xc - ldr r0, [r6, #0x74] - subs r0, r0, r1 - str r0, [r6, #0x74] - ldrb r1, [r2] - lsls r1, r1, #0xc - ldr r0, [r6, #0x78] - subs r0, r0, r1 - str r0, [r6, #0x78] - mov r0, ip - ldrh r2, [r0] - adds r4, r6, #0 - adds r4, #0x82 - ldrb r1, [r4] - adds r3, r6, #0 - adds r3, #0x84 - ldr r0, [r3] - ldrb r0, [r0, #5] - adds r1, r1, r0 - cmp r2, r1 - bgt _080261AA - mov r0, ip - strh r1, [r0] -_080261AA: - ldrh r2, [r7] - ldrb r1, [r4] - ldr r0, [r3] - ldrb r0, [r0, #5] - adds r1, r1, r0 - cmp r2, r1 - bgt _080261BA - strh r1, [r7] -_080261BA: - mov r1, ip - ldrh r2, [r1] - ldrb r1, [r4] - ldr r0, [r3] - ldrb r0, [r0, #5] - adds r1, r1, r0 - cmp r2, r1 - bgt _08026230 - ldrh r0, [r7] - cmp r0, r1 - bgt _08026230 - b _08026228 -_080261D2: - ldrb r1, [r2] - lsls r1, r1, #0xc - ldr r0, [r6, #0x74] - adds r0, r0, r1 - str r0, [r6, #0x74] - ldrb r1, [r2] - lsls r1, r1, #0xc - ldr r0, [r6, #0x78] - adds r0, r0, r1 - str r0, [r6, #0x78] - mov r0, ip - ldrh r2, [r0] - adds r4, r6, #0 - adds r4, #0x81 - ldrb r1, [r4] - adds r3, r6, #0 - adds r3, #0x84 - ldr r0, [r3] - ldrb r0, [r0, #5] - adds r1, r1, r0 - cmp r2, r1 - blt _08026202 - mov r0, ip - strh r1, [r0] -_08026202: - ldrh r2, [r7] - ldrb r1, [r4] - ldr r0, [r3] - ldrb r0, [r0, #5] - adds r1, r1, r0 - cmp r2, r1 - blt _08026212 - strh r1, [r7] -_08026212: - mov r1, ip - ldrh r2, [r1] - ldrb r1, [r4] - ldr r0, [r3] - ldrb r0, [r0, #5] - adds r1, r1, r0 - cmp r2, r1 - blt _08026230 - ldrh r0, [r7] - cmp r0, r1 - blt _08026230 -_08026228: - ldrb r0, [r6, #0xe] - movs r1, #1 - eors r0, r1 - strb r0, [r6, #0xe] -_08026230: - ldr r5, [r6, #0x48] - mov r0, ip - ldrh r1, [r0] - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r4, #0 - bl __divsi3 - lsls r1, r0, #3 - subs r1, r1, r0 - lsrs r1, r1, #7 - strb r1, [r5, #6] - ldr r5, [r6, #0x48] - ldrh r1, [r7] - adds r0, r4, #0 - bl __divsi3 - lsls r1, r0, #1 - adds r1, r1, r0 - lsrs r1, r1, #7 - strb r1, [r5, #7] - movs r1, #0x36 - ldrsh r0, [r6, r1] - cmp r0, #0 - bne _08026268 - adds r0, r6, #0 - bl sub_0800445C -_08026268: - pop {r4, r5, r6, r7, pc} - .align 2, 0 thumb_func_start sub_0802626C sub_0802626C: @ 0x0802626C diff --git a/asm/non_matching/ocarina/OcarinaUpdate.inc b/asm/non_matching/ocarina/OcarinaUpdate.inc deleted file mode 100644 index 5a46f81b..00000000 --- a/asm/non_matching/ocarina/OcarinaUpdate.inc +++ /dev/null @@ -1,38 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - bl UpdateItemAnim - ldrb r1, [r5, #0xe] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08076C6E - ldr r0, _08076C70 @ =gPlayerEntity - ldrb r2, [r0, #0x10] - movs r4, #0 - movs r1, #0x80 - orrs r1, r2 - strb r1, [r0, #0x10] - ldr r2, _08076C74 @ =gPlayerState - ldr r1, [r2, #0x30] - ldr r3, _08076C78 @ =0xEFFFFFFF - ands r1, r3 - str r1, [r2, #0x30] - adds r2, #0x27 - strb r4, [r2] - ldr r1, _08076C7C @ =gPauseMenuOptions - strb r4, [r1] - bl CreateBird - bl ResetPlayerEventPriority - adds r0, r5, #0 - adds r1, r6, #0 - bl DeletePlayerItem -_08076C6E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08076C70: .4byte gPlayerEntity -_08076C74: .4byte gPlayerState -_08076C78: .4byte 0xEFFFFFFF -_08076C7C: .4byte gPauseMenuOptions - .syntax divided diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 4952324c..73e78bad 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -18,7 +18,9 @@ typedef struct { u8 unk_04; s8 unk_05; u8 unk_06; - u8 unk_07[7]; + u8 unk_07; + u32 unk_08; + u16 unk_0c; u16 unk_0e; } Helper; @@ -450,3 +452,72 @@ void sub_08026090(ChuchuBossEntity* this) { } } } + +void sub_08026110(ChuchuBossEntity* this) { + s32 uVar2; + int iVar4; + s32 uVar3; + Hitbox* pHVar8; + + gUnk_080CC1DC[super->subAction](this); + if ((this->unk_84->unk_08 == 0) && ((u8)this->unk_84->unk_05 != 0)) { + if (super->subAction == 8) { + this->unk_84->unk_05 -= 0x40; + } else { + this->unk_84->unk_05 -= 0x20; + } + if (this->unk_84->unk_05 < 0) { + this->unk_84->unk_05 = 0; + } + } + + if (this->unk_80[0] != 0) { + if (super->timer == 0) { + this->unk_74.WORD -= this->unk_80[0] * 0x1000; + this->unk_78.WORD -= this->unk_80[0] * 0x1000; + uVar3 = this->unk_74.HALF_U.HI; + uVar2 = this->unk_80[2] + (u8)this->unk_84->unk_05; + if (uVar3 <= uVar2) { + this->unk_74.HALF.HI = uVar2; + } + uVar3 = this->unk_78.HALF_U.HI; + uVar2 = this->unk_80[2]; + uVar2 += (u8)this->unk_84->unk_05; + if (uVar3 <= uVar2) { + this->unk_78.HALF.HI = uVar2; + } + uVar3 = this->unk_74.HALF_U.HI; + uVar2 = this->unk_80[2]; + uVar2 += (u8)this->unk_84->unk_05; + if ((uVar3 <= uVar2) && (this->unk_78.HALF_U.HI <= uVar2)) { + super->timer ^= 1; + } + } else { + this->unk_74.WORD += this->unk_80[0] * 0x1000; + this->unk_78.WORD += this->unk_80[0] * 0x1000; + uVar3 = this->unk_74.HALF_U.HI; + uVar2 = this->unk_80[1] + (u8)this->unk_84->unk_05; + if (uVar3 >= uVar2) { + this->unk_74.HALF.HI = uVar2; + } + uVar3 = this->unk_78.HALF_U.HI; + uVar2 = this->unk_80[1]; + uVar2 += (u8)this->unk_84->unk_05; + if (uVar3 >= uVar2) { + this->unk_78.HALF.HI = uVar2; + } + uVar3 = this->unk_74.HALF_U.HI; + uVar2 = this->unk_80[1]; + uVar2 += (u8)this->unk_84->unk_05; + if ((uVar3 >= uVar2) && (this->unk_78.HALF_U.HI >= uVar2)) { + + super->timer ^= 1; + } + } + } + super->hitbox->width = (u8)((u32)((0x10000 / this->unk_74.HALF_U.HI) * 7) >> 7); + super->hitbox->height = (u8)((u32)((0x10000 / this->unk_78.HALF_U.HI) * 3) >> 7); + if (super->z.HALF.HI == 0) { + sub_0800445C(super); + } +} diff --git a/src/item/itemOcarina.c b/src/item/itemOcarina.c index caa7b1f7..38d323d6 100644 --- a/src/item/itemOcarina.c +++ b/src/item/itemOcarina.c @@ -3,7 +3,7 @@ #include "functions.h" extern void ResetPlayerVelocity(void); -extern void CreateBird(void); +extern void CreateBird(Entity*); void OcarinaUse(ItemBehavior*, u32); void OcarinaUpdate(ItemBehavior*, u32); @@ -37,7 +37,7 @@ void OcarinaUse(ItemBehavior* this, u32 idx) { } } -NONMATCH("asm/non_matching/ocarina/OcarinaUpdate.inc", void OcarinaUpdate(ItemBehavior* this, u32 idx)) { +void OcarinaUpdate(ItemBehavior* this, u32 idx) { // TODO regalloc UpdateItemAnim(this); if ((this->field_0x5[9] & 0x80) != 0) { @@ -45,9 +45,8 @@ NONMATCH("asm/non_matching/ocarina/OcarinaUpdate.inc", void OcarinaUpdate(ItemBe gPlayerState.flags &= ~PL_USE_OCARINA; gPlayerState.field_0x27[0] = 0; gPauseMenuOptions.disabled = 0; - CreateBird(); + CreateBird(&gPlayerEntity); ResetPlayerEventPriority(); DeletePlayerItem(this, idx); } } -END_NONMATCH diff --git a/src/object/bird.c b/src/object/bird.c index e7346656..499f413b 100644 --- a/src/object/bird.c +++ b/src/object/bird.c @@ -365,7 +365,7 @@ void Bird_Type10(Entity* this) { } } -void CreateBird(void) { +void CreateBird(Entity* this) { Entity* birdEnt; #ifndef EU