diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index ed855d0b..bae3f1c2 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -9,69 +9,6 @@ - thumb_func_start sub_080277F8 -sub_080277F8: @ 0x080277F8 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldr r3, [r6, #0x54] - ldr r5, [r6, #0x68] - ldr r4, [r6, #0x50] - ldrh r2, [r6, #0x2e] - strh r2, [r5, #0x2e] - movs r7, #0xe - strb r7, [r5, #0xe] - ldrh r0, [r6, #0x32] - subs r0, #0xe - strh r0, [r5, #0x32] - strh r2, [r4, #0x2e] - movs r0, #0x7a - adds r0, r0, r3 - mov ip, r0 - ldrh r1, [r0] - subs r1, #0xa0 - asrs r1, r1, #4 - movs r0, #0x12 - subs r0, r0, r1 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0xe] - ldrh r0, [r5, #0x32] - subs r0, r0, r1 - strh r0, [r4, #0x32] - strh r2, [r3, #0x2e] - mov r1, ip - ldrh r0, [r1] - cmp r0, #0xa0 - bls _0802784E - subs r0, #0xa0 - asrs r0, r0, #2 - movs r1, #0xe - subs r1, r1, r0 - strb r1, [r3, #0xe] - movs r0, #0x80 - ands r1, r0 - cmp r1, #0 - beq _08027850 - movs r0, #0 - strb r0, [r3, #0xe] - b _08027850 -_0802784E: - strb r7, [r3, #0xe] -_08027850: - ldrb r1, [r3, #0xe] - ldrh r0, [r4, #0x32] - subs r0, r0, r1 - strh r0, [r3, #0x32] - ldr r0, [r3, #0x74] - str r0, [r4, #0x74] - ldr r0, [r3, #0x78] - str r0, [r4, #0x78] - ldr r0, [r3, #0x74] - str r0, [r5, #0x74] - ldr r0, [r3, #0x78] - str r0, [r5, #0x78] - adds r0, r6, #0 - bl sub_08027984 - pop {r4, r5, r6, r7, pc} thumb_func_start sub_08027870 sub_08027870: @ 0x08027870 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 083963a9..04c38521 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1533,3 +1533,36 @@ void sub_080277B8(ChuchuBossEntity* this, u32 param_2, s32 param_3) { } sub_080277F8(this); } + +void sub_080277F8(ChuchuBossEntity* this) { + u32 uVar1; + ChuchuBossEntity* pEVar3; + ChuchuBossEntity* pEVar4; + ChuchuBossEntity* pEVar5; + + pEVar3 = (ChuchuBossEntity*)super->child; + pEVar5 = this->unk_68; + pEVar4 = (ChuchuBossEntity*)super->parent; + uVar1 = super->x.HALF_U.HI; + pEVar5->base.x.HALF.HI = uVar1; + pEVar5->base.timer = 14; + pEVar5->base.y.HALF.HI = super->y.HALF.HI - 14; + pEVar4->base.x.HALF.HI = uVar1; + pEVar4->base.timer = 18 - ((pEVar3->unk_78.HALF_U.HI - 0xa0) >> 4); + pEVar4->base.y.HALF.HI = pEVar5->base.y.HALF.HI - pEVar4->base.timer; + pEVar3->base.x.HALF.HI = uVar1; + if (pEVar3->unk_78.HALF_U.HI >= 0xa1) { + pEVar3->base.timer = 14 - ((pEVar3->unk_78.HALF_U.HI - 0xa0) >> 2); + if ((pEVar3->base.timer & 0x80) != 0) { + pEVar3->base.timer = 0; + } + } else { + pEVar3->base.timer = 14; + } + pEVar3->base.y.HALF.HI = pEVar4->base.y.HALF.HI - pEVar3->base.timer; + pEVar4->unk_74.WORD = pEVar3->unk_74.WORD; + pEVar4->unk_78.WORD = pEVar3->unk_78.WORD; + pEVar5->unk_74.WORD = pEVar3->unk_74.WORD; + pEVar5->unk_78.WORD = pEVar3->unk_78.WORD; + sub_08027984(this); +}