diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 05e9fc10..5fc6c9a2 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -7,314 +7,6 @@ .text - - thumb_func_start sub_080272D4 -sub_080272D4: @ 0x080272D4 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r0, [r6, #0x50] - ldrb r0, [r0, #0xd] - cmp r0, #0xc - bls _080272E2 - b _08027532 -_080272E2: - lsls r0, r0, #2 - ldr r1, _080272EC @ =_080272F0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080272EC: .4byte _080272F0 -_080272F0: @ jump table - .4byte _08027508 @ case 0 - .4byte _08027324 @ case 1 - .4byte _08027324 @ case 2 - .4byte _08027332 @ case 3 - .4byte _0802733E @ case 4 - .4byte _08027332 @ case 5 - .4byte _08027368 @ case 6 - .4byte _08027532 @ case 7 - .4byte _08027346 @ case 8 - .4byte _08027454 @ case 9 - .4byte _0802748C @ case 10 - .4byte _08027532 @ case 11 - .4byte _08027324 @ case 12 -_08027324: - adds r1, r6, #0 - adds r1, #0x7a - movs r0, #0xa0 - strh r0, [r1] - subs r1, #4 - strh r0, [r1] - b _0802733E -_08027332: - adds r0, r6, #0 - adds r0, #0x83 - ldrb r0, [r0] - cmp r0, #0 - bne _0802733E - b _08027532 -_0802733E: - adds r0, r6, #0 - bl sub_0802757C - b _08027532 -_08027346: - ldrb r0, [r6, #0xf] - cmp r0, #2 - bls _0802734E - b _08027532 -_0802734E: - adds r0, r6, #0 - bl sub_0802757C - adds r0, r6, #0 - adds r0, #0x83 - ldrb r0, [r0] - cmp r0, #0 - beq _08027360 - b _08027532 -_08027360: - ldrb r0, [r6, #0xf] - adds r0, #1 - strb r0, [r6, #0xf] - b _08027532 -_08027368: - ldr r5, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x7a - ldrh r1, [r0] - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r4, #0 - bl __divsi3 - lsls r1, r0, #3 - adds r1, r1, r0 - lsrs r1, r1, #7 - strb r1, [r5, #6] - ldr r5, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x76 - ldrh r1, [r0] - adds r0, r4, #0 - bl __divsi3 - lsls r1, r0, #2 - adds r1, r1, r0 - lsrs r1, r1, #6 - strb r1, [r5, #7] - adds r0, r6, #0 - adds r0, #0x84 - ldrb r0, [r0] - cmp r0, #0 - bne _080273A4 - b _08027532 -_080273A4: - adds r0, r6, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08027444 - adds r2, r6, #0 - adds r2, #0x3d - ldrb r1, [r2] - movs r0, #0 - ldrsb r0, [r2, r0] - cmp r0, #0 - beq _08027444 - ldr r0, [r6, #0x54] - ldr r0, [r0, #0x68] - adds r0, #0x3d - strb r1, [r0] - ldr r0, [r6, #0x54] - ldr r0, [r0, #0x50] - ldrb r1, [r2] - adds r0, #0x3d - strb r1, [r0] - ldr r0, [r6, #0x54] - ldrb r1, [r2] - adds r0, #0x3d - strb r1, [r0] - ldr r0, [r6, #0x54] - bl sub_08027D20 - adds r2, r0, #0 - cmp r2, #0 - beq _08027406 - ldrh r0, [r6, #0x2e] - adds r0, #1 - strh r0, [r2, #0x2e] - adds r0, r6, #0 - adds r0, #0x63 - ldrb r0, [r0] - adds r0, #0x20 - adds r1, r2, #0 - adds r1, #0x63 - strb r0, [r1] - adds r0, r6, #0 - adds r0, #0x62 - ldrb r1, [r0] - adds r0, r2, #0 - adds r0, #0x62 - strb r1, [r0] -_08027406: - ldr r0, [r6, #0x54] - bl sub_08027C54 - cmp r0, #0 - beq _0802741C - ldr r0, [r6, #0x54] - adds r0, #0x84 - ldr r0, [r0] - ldrb r0, [r0, #4] - cmp r0, #2 - beq _08027428 -_0802741C: - ldr r0, _08027424 @ =0x00000127 - bl SoundReq - b _08027444 - .align 2, 0 -_08027424: .4byte 0x00000127 -_08027428: - bl sub_08078B48 - ldr r0, _0802744C @ =gRoomControls - ldr r2, [r6, #0x54] - str r2, [r0, #0x30] - ldr r1, _08027450 @ =gPauseMenuOptions - movs r0, #1 - strb r0, [r1] - movs r0, #9 - strb r0, [r2, #0xd] - movs r0, #0x94 - lsls r0, r0, #1 - bl SoundReq -_08027444: - adds r0, r6, #0 - bl sub_08027A60 - b _08027484 - .align 2, 0 -_0802744C: .4byte gRoomControls -_08027450: .4byte gPauseMenuOptions -_08027454: - ldr r5, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x7a - ldrh r1, [r0] - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r4, #0 - bl __divsi3 - lsls r1, r0, #3 - adds r1, r1, r0 - lsrs r1, r1, #7 - strb r1, [r5, #6] - ldr r5, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x76 - ldrh r1, [r0] - adds r0, r4, #0 - bl __divsi3 - lsls r1, r0, #2 - adds r1, r1, r0 - lsrs r1, r1, #6 - strb r1, [r5, #7] -_08027484: - adds r0, r6, #0 - bl sub_0800445C - b _08027532 -_0802748C: - adds r2, r6, #0 - adds r2, #0x7d - ldrb r0, [r2] - cmp r0, #0 - bne _0802749E - adds r0, r6, #0 - bl sub_0802757C - b _080274AE -_0802749E: - adds r1, r6, #0 - adds r1, #0x84 - ldrb r0, [r1] - cmp r0, #0 - beq _080274AE - movs r0, #0 - strb r0, [r2] - strb r0, [r1] -_080274AE: - adds r2, r6, #0 - adds r2, #0x83 - adds r0, r6, #0 - adds r0, #0x81 - ldrb r1, [r0] - lsrs r0, r1, #1 - ldrb r2, [r2] - adds r0, r2, r0 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, r1 - bls _080274F4 - lsls r0, r2, #0x18 - cmp r0, #0 - ble _080274E0 - adds r0, r6, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xc - beq _08027532 - adds r0, r6, #0 - movs r1, #0xc - bl InitAnimationForceUpdate - b _08027532 -_080274E0: - adds r0, r6, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xb - beq _08027532 - adds r0, r6, #0 - movs r1, #0xb - bl InitAnimationForceUpdate - b _08027532 -_080274F4: - adds r0, r6, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xa - beq _08027532 - adds r0, r6, #0 - movs r1, #0xa - bl InitAnimationForceUpdate - b _08027532 -_08027508: - ldr r0, [r6, #0x54] - adds r0, #0x84 - ldr r0, [r0] - ldrb r0, [r0, #3] - cmp r0, #8 - bne _08027532 - adds r0, r6, #0 - bl sub_0802757C - adds r0, r6, #0 - adds r0, #0x7d - ldrb r0, [r0] - cmp r0, #1 - bne _08027532 - adds r1, r6, #0 - adds r1, #0x81 - ldrb r0, [r1] - cmp r0, #0 - beq _08027532 - subs r0, #4 - strb r0, [r1] -_08027532: - ldr r0, [r6, #0x50] - ldr r0, [r0, #0x34] - str r0, [r6, #0x34] - adds r1, r6, #0 - adds r1, #0x41 - movs r0, #0 - strb r0, [r1] - adds r0, r6, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, r6, pc} - thumb_func_start sub_08027548 sub_08027548: @ 0x08027548 push {r4, r5, r6, lr} diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 1f043ae8..247cbfd4 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -127,7 +127,7 @@ void sub_08027BBC(); bool32 sub_08027C54(); void sub_08027C7C(ChuchuBossEntity*, u32); void sub_08027C9C(); -void sub_08027D20(); +Entity* sub_08027D20(); // clang-format off void (*const ChuchuBoss_Functions[])(ChuchuBossEntity*) = { @@ -1306,3 +1306,102 @@ void sub_0802720C(ChuchuBossEntity* this) { } super->z.WORD = super->parent->z.WORD; } + +void sub_080272D4(ChuchuBossEntity* this) { + Entity* pEVar3; + u8 temp; + + switch (super->parent->subAction) { + case 1: + case 2: + case 12: + this->unk_78.HALF.HI = 0xa0; + this->unk_74.HALF.HI = 0xa0; + sub_0802757C(this); + break; + case 3: + case 5: + if (this->unk_82.HALF.HI == 0) + break; + case 4: + sub_0802757C(this); + break; + case 8: + if (super->subtimer < 3) { + sub_0802757C(this); + if (this->unk_82.HALF.HI == 0) { + super->subtimer++; + } + } + break; + case 6: + super->hitbox->width = (u32)((0x10000 / this->unk_78.HALF_U.HI) * 9) >> 7; + super->hitbox->height = (u32)((0x10000 / this->unk_74.HALF_U.HI) * 5) >> 6; + if (*(char*)&this->unk_84 == 0) + break; + if ((super->contactFlags & 0x80) != 0) { + if (super->iframes != 0) { + ((ChuchuBossEntity*)super->child)->unk_68->base.iframes = super->iframes; + super->child->parent->iframes = super->iframes; + super->child->iframes = super->iframes; + pEVar3 = sub_08027D20(super->child); + if (pEVar3 != NULL) { + pEVar3->x.HALF.HI = super->x.HALF.HI + 1; + pEVar3->spriteOffsetY = super->spriteOffsetY + 0x20; + pEVar3->spriteOffsetX = super->spriteOffsetX; + } + if (sub_08027C54(super->child) == 0 || ((ChuchuBossEntity*)super->child)->unk_84->unk_04 != 2) { + SoundReq(SFX_BOSS_HIT); + } else { + sub_08078B48(); + gRoomControls.camera_target = super->child; + gPauseMenuOptions.disabled = 1; + gRoomControls.camera_target->subAction = 9; + SoundReq(SFX_BOSS_DIE); + } + } + } + sub_08027A60(this); + sub_0800445C(super); + break; + + case 9: + super->hitbox->width = (u32)((0x10000 / this->unk_78.HALF_U.HI) * 9) >> 7; + super->hitbox->height = (u32)((0x10000 / this->unk_74.HALF_U.HI) * 5) >> 6; + sub_0800445C(super); + break; + case 10: + if (this->unk_7d == 0) { + sub_0802757C(this); + } else if (*(char*)&this->unk_84 != 0) { + this->unk_7d = 0; + *(char*)&this->unk_84 = 0; + } + temp = this->unk_82.HALF.HI + (this->unk_81 / 2); + if ((temp) > (u32)this->unk_81) { + if ((s8)this->unk_82.HALF.HI > 0) { + if (super->animIndex != 12) { + InitAnimationForceUpdate(super, 12); + } + } else if (super->animIndex != 11) { + InitAnimationForceUpdate(super, 11); + } + } else if (super->animIndex != 10) { + InitAnimationForceUpdate(super, 10); + } + break; + case 0: + if (((ChuchuBossEntity*)super->child)->unk_84->unk_03 == 8) { + sub_0802757C(this); + if (this->unk_7d == 1) { + if (this->unk_81 != 0) { + this->unk_81 -= 4; + } + } + } + break; + } + super->z.WORD = super->parent->z.WORD; + super->contactFlags = 0; + UpdateAnimationSingleFrame(super); +}