From 2489c346e503fbfd3ece2382952982a45416dd33 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 18 Jul 2022 01:46:11 +0300 Subject: [PATCH 01/19] Match sub_0802720C --- asm/enemy/chuchuBoss.s | 94 ------------------------------------------ src/enemy/chuchuBoss.c | 46 +++++++++++++++++++++ 2 files changed, 46 insertions(+), 94 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index cbe2102c..05e9fc10 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -7,100 +7,6 @@ .text - thumb_func_start sub_0802720C -sub_0802720C: @ 0x0802720C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xd] - strb r0, [r4, #0xd] - ldrb r0, [r4, #0xd] - cmp r0, #0xc - bhi _080272CA - lsls r0, r0, #2 - ldr r1, _08027228 @ =_0802722C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08027228: .4byte _0802722C -_0802722C: @ jump table - .4byte _080272C4 @ case 0 - .4byte _08027260 @ case 1 - .4byte _08027260 @ case 2 - .4byte _0802726E @ case 3 - .4byte _080272AA @ case 4 - .4byte _0802726E @ case 5 - .4byte _080272CA @ case 6 - .4byte _080272CA @ case 7 - .4byte _08027282 @ case 8 - .4byte _080272CA @ case 9 - .4byte _080272A0 @ case 10 - .4byte _080272CA @ case 11 - .4byte _08027260 @ case 12 -_08027260: - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #0xa0 - strh r0, [r1] - subs r1, #4 - strh r0, [r1] - b _080272AA -_0802726E: - adds r0, r4, #0 - adds r0, #0x83 - ldrb r0, [r0] - cmp r0, #0 - beq _080272CA - adds r1, r4, #0 - adds r1, #0x7d - movs r0, #0 - strb r0, [r1] - b _080272AA -_08027282: - ldrb r0, [r4, #0xf] - cmp r0, #3 - bhi _080272CA - adds r0, r4, #0 - bl sub_0802757C - adds r0, r4, #0 - adds r0, #0x83 - ldrb r0, [r0] - cmp r0, #0 - bne _080272CA - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] - b _080272CA -_080272A0: - adds r2, r4, #0 - adds r2, #0x7d - ldrb r0, [r2] - cmp r0, #0 - bne _080272B2 -_080272AA: - adds r0, r4, #0 - bl sub_0802757C - b _080272CA -_080272B2: - adds r1, r4, #0 - adds r1, #0x84 - ldrb r0, [r1] - cmp r0, #0 - beq _080272CA - movs r0, #0 - strb r0, [r2] - strb r0, [r1] - b _080272CA -_080272C4: - adds r0, r4, #0 - bl sub_0802757C -_080272CA: - ldr r0, [r4, #0x50] - ldr r0, [r0, #0x34] - str r0, [r4, #0x34] - pop {r4, pc} - .align 2, 0 thumb_func_start sub_080272D4 sub_080272D4: @ 0x080272D4 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index fe228005..1f043ae8 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1260,3 +1260,49 @@ void sub_08027064(ChuchuBossEntity* this) { } sub_08027870(super); } + +void sub_0802720C(ChuchuBossEntity* this) { + super->subAction = super->parent->subAction; + switch (super->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; + this->unk_7d = 0; + sub_0802757C(this); + break; + default: + break; + case 8: + if (super->subtimer < 4) { + sub_0802757C(this); + if (this->unk_82.HALF.HI == 0) { + super->subtimer++; + } + } + break; + case 10: + if (this->unk_7d == 0) { + case 4: + sub_0802757C(this); + break; + } else { + if (*(char*)&this->unk_84 != 0) { + this->unk_7d = 0; + *(char*)&this->unk_84 = 0; + } + break; + } + case 0: + sub_0802757C(this); + break; + } + super->z.WORD = super->parent->z.WORD; +} From ca65dea5f671bc543ae356171ba165b5f14c2282 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 18 Jul 2022 13:00:05 +0300 Subject: [PATCH 02/19] Match sub_080272D4 --- asm/enemy/chuchuBoss.s | 308 ----------------------------------------- src/enemy/chuchuBoss.c | 101 +++++++++++++- 2 files changed, 100 insertions(+), 309 deletions(-) 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); +} From ae5e255bd6fdc8a3414f9a3df4f13425197569fc Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 18 Jul 2022 13:02:10 +0300 Subject: [PATCH 03/19] Match sub_08027548 --- asm/enemy/chuchuBoss.s | 26 -------------------------- src/enemy/chuchuBoss.c | 7 +++++++ 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 5fc6c9a2..afc33470 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -7,32 +7,6 @@ .text - thumb_func_start sub_08027548 -sub_08027548: @ 0x08027548 - push {r4, r5, r6, lr} - sub sp, #4 - adds r4, r0, #0 - adds r6, r1, #0 - movs r5, #0 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0xff - str r0, [sp] - adds r0, r4, #0 - movs r1, #0x90 - movs r2, #0xb0 - movs r3, #8 - bl sub_08027B98 - adds r0, r4, #0 - adds r0, #0x7d - strb r5, [r0] - adds r0, r4, #0 - movs r1, #0 - adds r2, r6, #0 - bl sub_080276F4 - add sp, #4 - pop {r4, r5, r6, pc} - .align 2, 0 thumb_func_start sub_0802757C sub_0802757C: @ 0x0802757C diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 247cbfd4..6e1fde96 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1405,3 +1405,10 @@ void sub_080272D4(ChuchuBossEntity* this) { super->contactFlags = 0; UpdateAnimationSingleFrame(super); } + +void sub_08027548(ChuchuBossEntity* this, u32 param_2) { + super->subAction = 1; + sub_08027B98(this, 0x90, 0xb0, 8, 0xff); + this->unk_7d = 0; + sub_080276F4(this, 0, param_2); +} From 23d2badc619c10a502d8991d5737c2b95fb04b03 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 18 Jul 2022 13:48:51 +0300 Subject: [PATCH 04/19] Match sub_0802757C --- asm/enemy/chuchuBoss.s | 195 ----------------------------------------- src/enemy/chuchuBoss.c | 58 +++++++++++- 2 files changed, 55 insertions(+), 198 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index afc33470..5a059eac 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -8,201 +8,6 @@ - thumb_func_start sub_0802757C -sub_0802757C: @ 0x0802757C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - adds r6, r5, #0 - adds r6, #0x7d - ldrb r1, [r6] - cmp r1, #0 - beq _080275BA - ldrb r0, [r5, #0xa] - cmp r0, #1 - beq _080275AE - ldr r0, [r5, #0x54] - adds r0, #0x7d - ldrb r0, [r0] - movs r1, #0x83 - adds r1, r1, r5 - mov sl, r1 - cmp r0, #0 - beq _08027676 - movs r0, #0 - strb r0, [r6] - b _08027676 -_080275AE: - subs r0, r1, #1 - strb r0, [r6] - movs r2, #0x83 - adds r2, r2, r5 - mov sl, r2 - b _08027676 -_080275BA: - movs r0, #0x85 - adds r0, r0, r5 - mov ip, r0 - ldrb r1, [r0] - mov sb, r1 - cmp r1, #1 - bne _0802761E - adds r1, r5, #0 - adds r1, #0x82 - adds r0, r5, #0 - adds r0, #0x86 - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r0, r2 - strh r0, [r1] - adds r0, r5, #0 - adds r0, #0x83 - adds r2, r5, #0 - adds r2, #0x81 - movs r4, #0 - ldrsb r4, [r0, r4] - movs r3, #0 - ldrsb r3, [r2, r3] - mov r8, r1 - mov sl, r0 - adds r7, r2, #0 - cmp r4, r3 - blt _08027676 - movs r0, #0 - mov r1, ip - strb r0, [r1] - ldrb r0, [r5, #0xa] - cmp r0, #1 - bne _08027616 - ldr r1, [r5, #0x50] - adds r0, r1, #0 - adds r0, #0x81 - ldrb r0, [r0] - lsls r0, r0, #8 - adds r1, #0x86 - ldrh r1, [r1] - bl __divsi3 - adds r0, #1 - strb r0, [r6] - b _0802761A -_08027616: - mov r2, sb - strb r2, [r6] -_0802761A: - ldrb r0, [r7] - b _08027670 -_0802761E: - adds r2, r5, #0 - adds r2, #0x82 - adds r1, r5, #0 - adds r1, #0x86 - ldrh r0, [r2] - ldrh r1, [r1] - subs r0, r0, r1 - strh r0, [r2] - adds r1, r5, #0 - adds r1, #0x83 - movs r4, #0 - ldrsb r4, [r1, r4] - adds r0, r5, #0 - adds r0, #0x81 - ldrb r3, [r0] - mov r8, r2 - mov sl, r1 - adds r7, r0, #0 - cmn r4, r3 - bgt _08027676 - movs r1, #1 - mov r2, ip - strb r1, [r2] - ldrb r0, [r5, #0xa] - cmp r0, #1 - bne _0802766A - ldr r1, [r5, #0x50] - adds r0, r1, #0 - adds r0, #0x81 - ldrb r0, [r0] - lsls r0, r0, #8 - adds r1, #0x86 - ldrh r1, [r1] - bl __divsi3 - adds r0, #1 - strb r0, [r6] - b _0802766C -_0802766A: - strb r1, [r6] -_0802766C: - ldrb r0, [r7] - rsbs r0, r0, #0 -_08027670: - lsls r0, r0, #8 - mov r1, r8 - strh r0, [r1] -_08027676: - ldr r2, [r5, #0x50] - adds r0, r2, #0 - adds r0, #0x63 - movs r1, #0 - ldrsb r1, [r0, r1] - lsls r1, r1, #0x10 - ldr r0, [r2, #0x30] - adds r0, r0, r1 - str r0, [r5, #0x30] - adds r0, r2, #0 - adds r0, #0x62 - movs r1, #0 - ldrsb r1, [r0, r1] - lsls r1, r1, #0x10 - ldr r0, [r2, #0x2c] - adds r0, r0, r1 - str r0, [r5, #0x2c] - ldrb r1, [r5, #0xe] - lsls r1, r1, #8 - mov r0, sl - ldrb r2, [r0] - adds r0, r5, #0 - bl LinearMoveAngle - ldrb r0, [r5, #0xa] - cmp r0, #1 - beq _080276D2 - ldr r1, [r5, #0x54] - ldr r0, [r5, #0x30] - str r0, [r1, #0x30] - ldr r1, [r5, #0x54] - ldr r0, [r5, #0x2c] - str r0, [r1, #0x2c] - ldr r0, [r5, #0x54] - ldrb r1, [r0, #0xe] - lsls r1, r1, #8 - adds r2, r0, #0 - adds r2, #0x83 - ldrb r2, [r2] - bl LinearMoveAngle - ldr r0, [r5, #0x68] - ldr r1, [r5, #0x54] - ldrb r2, [r1, #0xa] - bl sub_080279AC -_080276D2: - ldr r0, [r5, #0x68] - ldrb r2, [r5, #0xa] - adds r1, r5, #0 - bl sub_080279AC - mov r1, sl - ldrb r0, [r1] - rsbs r0, r0, #0 - adds r1, r5, #0 - adds r1, #0x7f - strb r0, [r1] - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_start sub_080276F4 sub_080276F4: @ 0x080276F4 push {r4, r5, r6, r7, lr} diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 6e1fde96..e6168d37 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -41,7 +41,7 @@ typedef struct _ChuchuBossEntity { union SplitWord unk_78; u8 unk_7c; u8 unk_7d; - u16 unk_7e; + union SplitHWord unk_7e; u8 unk_80; u8 unk_81; union SplitHWord unk_82; @@ -330,7 +330,7 @@ NONMATCH("asm/non_matching/chuchuBoss/sub_08025DD8.inc", void sub_08025DD8(Chuch super->spritePriority.b0 = gUnk_080CC1B8[super->type & 3].unk_01; this->unk_74.HALF.HI = 0xa0; this->unk_78.HALF.HI = 0xa0; - this->unk_7e = 0; + this->unk_7e.HWORD = 0; super->spriteRendering.b0 = 3; if ((super->type & 3) == 1) { InitAnimationForceUpdate(super, 0); @@ -435,7 +435,7 @@ END_NONMATCH void sub_08026060(ChuchuBossEntity* this) { gUnk_080CC1C8[super->type](this); - SetAffineInfo(super, this->unk_74.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7e); + SetAffineInfo(super, this->unk_74.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7e.HWORD); } void sub_08026090(ChuchuBossEntity* this) { @@ -1412,3 +1412,55 @@ void sub_08027548(ChuchuBossEntity* this, u32 param_2) { this->unk_7d = 0; sub_080276F4(this, 0, param_2); } + +void sub_0802757C(ChuchuBossEntity* this) { + u32 cVar2; + + if (this->unk_7d != 0) { + if (super->type != 1) { + if (((ChuchuBossEntity*)super->child)->unk_7d != 0) { + this->unk_7d = 0; + } + } else { + this->unk_7d--; + } + } else { + if (*(u8*)((int)this + 0x85) == 1) { + this->unk_82.HWORD += *(u16*)((int)this + 0x86); + if ((s8)this->unk_82.HALF.HI >= (s8)this->unk_81) { + *(u8*)((int)this + 0x85) = 0; + if (super->type == 1) { + this->unk_7d = + (((ChuchuBossEntity*)super->parent)->unk_81 << 8) / *(u16*)((int)super->parent + 0x86) + 1; + } else { + this->unk_7d = 1; + } + this->unk_82.HWORD = this->unk_81 << 8; + } + } else { + this->unk_82.HWORD -= *(u16*)((int)this + 0x86); + if ((s8)this->unk_82.HALF.HI <= -this->unk_81) { + cVar2 = 1; + *(u8*)((int)this + 0x85) = cVar2; + if (super->type == 1) { + this->unk_7d = + (((ChuchuBossEntity*)super->parent)->unk_81 << 8) / *(u16*)((int)super->parent + 0x86) + 1; + } else { + this->unk_7d = 1; + } + this->unk_82.HWORD = (-this->unk_81) << 8; + } + } + } + super->y.WORD = super->parent->y.WORD + super->parent->spriteOffsetY * 0x10000; + super->x.WORD = super->parent->x.WORD + (s8)super->parent->spriteOffsetX * 0x10000; + LinearMoveAngle(super, super->timer << 8, this->unk_82.HALF.HI); + if (super->type != 1) { + super->child->y.WORD = super->y.WORD; + super->child->x.WORD = super->x.WORD; + LinearMoveAngle(super->child, super->child->timer << 8, ((ChuchuBossEntity*)super->child)->unk_82.HALF.HI); + sub_080279AC(this->unk_68, super->child, super->child->type); + } + sub_080279AC(this->unk_68, this, super->type); + this->unk_7e.HALF.HI = -this->unk_82.HALF.HI; +} From c862bded7ec77641c72467a836d034f4464961fe Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 18 Jul 2022 15:47:16 +0300 Subject: [PATCH 05/19] Match sub_080276F4 --- asm/enemy/chuchuBoss.s | 98 ------------------------------------------ src/enemy/chuchuBoss.c | 90 ++++++++++++++++++++++++++++++-------- 2 files changed, 72 insertions(+), 116 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 5a059eac..06777466 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -8,104 +8,6 @@ - thumb_func_start sub_080276F4 -sub_080276F4: @ 0x080276F4 - push {r4, r5, r6, r7, lr} - adds r6, r2, #0 - ldr r5, [r0, #0x54] - ldr r4, [r0, #0x68] - ldr r0, [r0, #0x50] - mov ip, r0 - adds r0, #0x84 - movs r2, #0 - strb r2, [r0] - adds r0, r4, #0 - adds r0, #0x84 - strb r2, [r0] - adds r0, r5, #0 - adds r0, #0x84 - strb r2, [r0] - mov r0, ip - adds r0, #0x7e - movs r7, #0 - strh r2, [r0] - adds r0, r4, #0 - adds r0, #0x7e - strh r2, [r0] - adds r0, r5, #0 - adds r0, #0x7e - strh r2, [r0] - mov r0, ip - adds r0, #0x7d - strb r7, [r0] - adds r0, r4, #0 - adds r0, #0x7d - strb r7, [r0] - ldr r0, _080277AC @ =gUnk_080CC27C - lsls r1, r1, #2 - adds r0, r1, r0 - ldrh r2, [r0] - adds r3, r5, #0 - adds r3, #0x86 - strh r2, [r3] - ldrb r0, [r0, #2] - adds r2, r5, #0 - adds r2, #0x81 - strb r0, [r2] - ldr r0, _080277B0 @ =gUnk_080CC2BC - adds r0, r1, r0 - ldrh r2, [r0] - adds r3, r4, #0 - adds r3, #0x86 - strh r2, [r3] - ldrb r0, [r0, #2] - adds r2, r4, #0 - adds r2, #0x81 - strb r0, [r2] - ldr r0, _080277B4 @ =gUnk_080CC29C - adds r1, r1, r0 - ldrh r0, [r1] - mov r2, ip - adds r2, #0x86 - strh r0, [r2] - ldrb r0, [r1, #2] - mov r1, ip - adds r1, #0x81 - strb r0, [r1] - cmp r6, #0 - bne _080277AA - mov r0, ip - adds r0, #0x85 - strb r7, [r0] - adds r0, r4, #0 - adds r0, #0x85 - strb r7, [r0] - adds r0, r5, #0 - adds r0, #0x85 - strb r7, [r0] - mov r0, ip - adds r0, #0x82 - strh r6, [r0] - adds r0, r4, #0 - adds r0, #0x82 - strh r6, [r0] - adds r0, r5, #0 - adds r0, #0x82 - strh r6, [r0] - ldrb r0, [r1] - lsls r0, r0, #7 - ldrh r1, [r2] - bl __divsi3 - adds r0, #1 - adds r1, r5, #0 - adds r1, #0x7d - strb r0, [r1] -_080277AA: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080277AC: .4byte gUnk_080CC27C -_080277B0: .4byte gUnk_080CC2BC -_080277B4: .4byte gUnk_080CC29C thumb_func_start sub_080277B8 sub_080277B8: @ 0x080277B8 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index e6168d37..43ec13fd 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -63,9 +63,15 @@ extern void (*const gUnk_080CC258[])(ChuchuBossEntity*); extern void (*const gUnk_080CC264[])(ChuchuBossEntity*); extern void (*const gUnk_080CC26C[])(ChuchuBossEntity*); extern const u8 gUnk_080CC278[]; -extern const u16 gUnk_080CC27C[]; -extern const u16 gUnk_080CC29C[]; -extern const u16 gUnk_080CC2BC[]; + +typedef struct { + u16 unk0; + u8 unk2; +} ChuchuStruct; + +extern const ChuchuStruct gUnk_080CC27C[]; +extern const ChuchuStruct gUnk_080CC29C[]; +extern const ChuchuStruct gUnk_080CC2BC[]; extern const s8 gUnk_080CC2DC[]; extern Hitbox gUnk_080FD238; @@ -222,25 +228,25 @@ const u8 gUnk_080CC278[] = { 150, 180, 210, 250, }; -const u16 gUnk_080CC27C[] = { - 0x80, 0x8, 0x100, 0x6, - 0x80, 0x18, 0x100, 0x8, - 0x180, 0x6, 0x100, 0x10, - 0x0, 0x0, 0xA0, 0x18, +const ChuchuStruct gUnk_080CC27C[] = { + {0x80, 0x8}, {0x100, 0x6}, + {0x80, 0x18}, {0x100, 0x8}, + {0x180, 0x6}, {0x100, 0x10}, + {0x0, 0x0}, {0xA0, 0x18}, }; -const u16 gUnk_080CC29C[] = { - 0x80, 0x8, 0x100, 0x4, - 0x80, 0xC, 0x80, 0x6, - 0x200, 0x6, 0x100, 0xC, - 0x0, 0x0, 0xA0, 0x14, +const ChuchuStruct gUnk_080CC29C[] = { + {0x80, 0x8}, {0x100, 0x4}, + {0x80, 0xC}, { 0x80, 0x6}, + {0x200, 0x6}, {0x100, 0xC}, + {0x0, 0x0}, {0xA0, 0x14}, }; -const u16 gUnk_080CC2BC[] = { - 0x80, 0x8, 0x100, 0x0, - 0x60, 0x2, 0x80, 0x2, - 0x200, 0x6, 0x100, 0x8, - 0x0, 0x0, 0xA0, 0x10, +const ChuchuStruct gUnk_080CC2BC[] = { + {0x80, 0x8}, {0x100, 0x0}, + {0x60, 0x2}, { 0x80, 0x2}, + {0x200, 0x6}, {0x100, 0x8}, + {0x0, 0x0}, {0xA0, 0x10}, }; @@ -1464,3 +1470,51 @@ void sub_0802757C(ChuchuBossEntity* this) { sub_080279AC(this->unk_68, this, super->type); this->unk_7e.HALF.HI = -this->unk_82.HALF.HI; } + +void sub_080276F4(ChuchuBossEntity* this, u32 param_2, u32 param_3) { + u32 tempzero; + ChuchuBossEntity* pEVar2; + ChuchuBossEntity* pEVar5; + ChuchuBossEntity* pEVar6; + int iVar3; + int iVar4; + int iVar5; + const ChuchuStruct* ptr; + const ChuchuStruct* ptr2; + const ChuchuStruct* ptr3; + + pEVar6 = (ChuchuBossEntity*)super->child; + pEVar5 = this->unk_68; + pEVar2 = (ChuchuBossEntity*)super->parent; + *(u8*)((int)pEVar2 + 0x84) = tempzero = 0; + *(u8*)((int)pEVar5 + 0x84) = 0; + *(u8*)((int)pEVar6 + 0x84) = 0; + pEVar2->unk_7e.HWORD = tempzero; + pEVar5->unk_7e.HWORD = 0; + pEVar6->unk_7e.HWORD = 0; + pEVar2->unk_7d = 0; + pEVar5->unk_7d = 0; + ptr = gUnk_080CC27C; + ptr += param_2; + iVar3 = ptr->unk0; + *(u16*)((int)pEVar6 + 0x86) = iVar3; + pEVar6->unk_81 = ptr->unk2; + ptr2 = gUnk_080CC2BC; + ptr2 += param_2; + iVar4 = ptr2->unk0; + *(u16*)((int)pEVar5 + 0x86) = iVar4; + pEVar5->unk_81 = ptr2->unk2; + ptr3 = (ChuchuStruct*)gUnk_080CC29C; + iVar5 = ptr3[param_2].unk0; + *(u16*)((int)pEVar2 + 0x86) = iVar5; + pEVar2->unk_81 = ptr3[param_2].unk2; + if (param_3 == 0) { + *(u8*)((int)pEVar2 + 0x85) = 0; + *(u8*)((int)pEVar5 + 0x85) = 0; + *(u8*)((int)pEVar6 + 0x85) = 0; + pEVar2->unk_82.HWORD = 0; + pEVar5->unk_82.HWORD = 0; + pEVar6->unk_82.HWORD = 0; + pEVar6->unk_7d = (pEVar2->unk_81 << 7) / (*(u16*)((int)pEVar2 + 0x86)) + 1; + } +} From df272fcd6fed73eb14adc5493f0ec50e332e0521 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 18 Jul 2022 15:54:58 +0300 Subject: [PATCH 06/19] Match sub_080277B8 --- asm/enemy/chuchuBoss.s | 36 ------------------------------------ src/enemy/chuchuBoss.c | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 36 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 06777466..ed855d0b 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -9,42 +9,6 @@ - thumb_func_start sub_080277B8 -sub_080277B8: @ 0x080277B8 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - ldr r1, [r5, #0x54] - adds r3, r1, #0 - adds r3, #0x7a - ldrh r0, [r3] - cmp r4, r0 - bls _080277DC - adds r0, r0, r2 - strh r0, [r3] - ldr r0, [r1, #0x74] - ldr r2, _080277D8 @ =0xFFFE8000 - adds r0, r0, r2 - str r0, [r1, #0x74] - b _080277F0 - .align 2, 0 -_080277D8: .4byte 0xFFFE8000 -_080277DC: - strh r4, [r3] - adds r1, #0x7c - movs r0, #8 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] -_080277F0: - adds r0, r5, #0 - bl sub_080277F8 - pop {r4, r5, pc} - thumb_func_start sub_080277F8 sub_080277F8: @ 0x080277F8 push {r4, r5, r6, r7, lr} diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 43ec13fd..083963a9 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1518,3 +1518,18 @@ void sub_080276F4(ChuchuBossEntity* this, u32 param_2, u32 param_3) { pEVar6->unk_7d = (pEVar2->unk_81 << 7) / (*(u16*)((int)pEVar2 + 0x86)) + 1; } } + +void sub_080277B8(ChuchuBossEntity* this, u32 param_2, s32 param_3) { + ChuchuBossEntity* pEVar1; + + pEVar1 = (ChuchuBossEntity*)super->child; + if (param_2 > pEVar1->unk_78.HALF_U.HI) { + pEVar1->unk_78.HALF.HI += param_3; + pEVar1->unk_74.WORD -= Q_16_16(1.5); + } else { + pEVar1->unk_78.HALF.HI = param_2; + pEVar1->unk_7c = 8; + this->unk_84->unk_03++; + } + sub_080277F8(this); +} From d88ce744863fff731401857745469759fc00b93f Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 02:10:18 +0300 Subject: [PATCH 07/19] Match sub_080277F8 --- asm/enemy/chuchuBoss.s | 63 ------------------------------------------ src/enemy/chuchuBoss.c | 33 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 63 deletions(-) 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); +} From 49ebdffa11767f2f9b16a8545be9ce2fc22e99d3 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 02:29:25 +0300 Subject: [PATCH 08/19] Match sub_08027870 --- asm/enemy/chuchuBoss.s | 145 ----------------------------------------- include/functions.h | 1 - src/enemy/chuchuBoss.c | 81 +++++++++++++++++++---- 3 files changed, 68 insertions(+), 159 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index bae3f1c2..5bd91cf9 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -10,151 +10,6 @@ - thumb_func_start sub_08027870 -sub_08027870: @ 0x08027870 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldr r4, [r7, #0x54] - ldr r5, [r7, #0x68] - ldr r6, [r7, #0x50] - ldr r0, [r4, #0x74] - str r0, [r6, #0x74] - ldr r0, [r4, #0x78] - str r0, [r6, #0x78] - ldr r0, [r4, #0x74] - str r0, [r5, #0x74] - ldr r0, [r4, #0x78] - str r0, [r5, #0x78] - adds r0, r4, #0 - adds r0, #0x83 - ldrb r0, [r0] - rsbs r0, r0, #0 - adds r1, r4, #0 - adds r1, #0x7f - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x83 - ldrb r0, [r0] - rsbs r0, r0, #0 - adds r1, r5, #0 - adds r1, #0x7f - strb r0, [r1] - adds r0, r6, #0 - adds r0, #0x83 - ldrb r0, [r0] - rsbs r0, r0, #0 - adds r1, r6, #0 - adds r1, #0x7f - strb r0, [r1] - adds r1, r5, #0 - adds r1, #0x7a - ldrh r0, [r1] - cmp r0, #0xa0 - bls _080278C2 - movs r0, #0xe - b _080278CC -_080278C2: - ldrh r1, [r1] - movs r0, #0xa0 - subs r0, r0, r1 - asrs r0, r0, #3 - adds r0, #0xe -_080278CC: - strb r0, [r5, #0xe] - adds r1, r6, #0 - adds r1, #0x7a - ldrh r0, [r1] - cmp r0, #0xa0 - bls _080278EA - adds r2, r4, #0 - adds r2, #0x7a - ldrh r1, [r2] - subs r1, #0xa0 - asrs r1, r1, #4 - movs r0, #0x12 - subs r0, r0, r1 - strb r0, [r6, #0xe] - b _080278FA -_080278EA: - ldrh r1, [r1] - movs r0, #0xa0 - subs r0, r0, r1 - asrs r0, r0, #2 - adds r0, #0x12 - strb r0, [r6, #0xe] - adds r2, r4, #0 - adds r2, #0x7a -_080278FA: - adds r0, r2, #0 - ldrh r1, [r0] - cmp r1, #0xa0 - bls _0802791A - adds r0, r1, #0 - subs r0, #0xa0 - asrs r0, r0, #2 - movs r1, #0xe - subs r1, r1, r0 - strb r1, [r4, #0xe] - movs r0, #0x80 - ands r1, r0 - cmp r1, #0 - beq _08027934 - movs r0, #0 - b _08027932 -_0802791A: - cmp r1, #0x7f - bhi _08027928 - ldrh r1, [r0] - movs r0, #0xa0 - subs r0, r0, r1 - asrs r0, r0, #2 - b _08027930 -_08027928: - ldrh r1, [r2] - movs r0, #0xa0 - subs r0, r0, r1 - asrs r0, r0, #1 -_08027930: - adds r0, #0xe -_08027932: - strb r0, [r4, #0xe] -_08027934: - ldr r0, [r7, #0x2c] - str r0, [r5, #0x2c] - ldr r0, [r7, #0x30] - str r0, [r5, #0x30] - ldrb r1, [r5, #0xe] - lsls r1, r1, #8 - adds r0, r5, #0 - adds r0, #0x83 - ldrb r2, [r0] - adds r0, r5, #0 - bl LinearMoveAngle - ldr r0, [r5, #0x2c] - str r0, [r6, #0x2c] - ldr r0, [r5, #0x30] - str r0, [r6, #0x30] - ldrb r1, [r6, #0xe] - lsls r1, r1, #8 - adds r0, r6, #0 - adds r0, #0x83 - ldrb r2, [r0] - adds r0, r6, #0 - bl LinearMoveAngle - ldr r0, [r6, #0x2c] - str r0, [r4, #0x2c] - ldr r0, [r6, #0x30] - str r0, [r4, #0x30] - ldrb r1, [r4, #0xe] - lsls r1, r1, #8 - adds r0, r4, #0 - adds r0, #0x83 - ldrb r2, [r0] - adds r0, r4, #0 - bl LinearMoveAngle - adds r0, r7, #0 - bl sub_08027984 - pop {r4, r5, r6, r7, pc} thumb_func_start sub_08027984 sub_08027984: @ 0x08027984 diff --git a/include/functions.h b/include/functions.h index 18cc67e7..11de5285 100644 --- a/include/functions.h +++ b/include/functions.h @@ -78,7 +78,6 @@ extern u32 sub_0801766C(Entity*); extern void sub_0801AFE4(void); extern void UpdateUIElements(void); extern void sub_0801E104(void); -extern void sub_08027870(Entity*); extern void sub_08030118(u32); extern void sub_0803C0AC(Entity*); extern void sub_08049CF4(Entity*); diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 04c38521..9e138ff5 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -122,7 +122,7 @@ void sub_0802757C(); void sub_080276F4(); void sub_080277B8(); void sub_080277F8(); -void sub_08027870(); +void sub_08027870(ChuchuBossEntity*); void sub_08027984(); void sub_080279AC(); bool32 sub_080279E8(ChuchuBossEntity*); @@ -262,7 +262,7 @@ void ChuchuBoss(Entity* this) { void ChuchuBoss_OnKnockback(ChuchuBossEntity* this) { GenericKnockback(super); if (super->type == 0) { - sub_08027870(super); + sub_08027870(this); } } @@ -314,7 +314,7 @@ void ChuchuBoss_OnDeath(ChuchuBossEntity* this) { break; } } - sub_08027870(super); + sub_08027870(this); } else { if (this->unk_6d.unk1) { this->unk_6d.unk1 = 1; @@ -656,7 +656,7 @@ void sub_0802650C(ChuchuBossEntity* this) { this->unk_84->unk_03++; gRoomControls.camera_target = &gPlayerEntity; } - sub_08027870(super); + sub_08027870(this); } void sub_0802653C(ChuchuBossEntity* this) { @@ -697,7 +697,7 @@ void sub_08026580(ChuchuBossEntity* this) { } } } - sub_08027870(super); + sub_08027870(this); } } @@ -747,7 +747,7 @@ void sub_08026634(ChuchuBossEntity* this) { this->unk_7d--; } } - sub_08027870(super); + sub_08027870(this); } void sub_08026750(ChuchuBossEntity* this) { @@ -811,7 +811,7 @@ void sub_0802686C(ChuchuBossEntity* this) { super->subAction = 5; this->unk_84->unk_03 = 0; sub_08027B98(this, 0x80, 0x80, 0x80, 0); - sub_08027870(super); + sub_08027870(this); InitAnimationForceUpdate(super->child, 3); SoundReq(SFX_1A1); } @@ -864,7 +864,7 @@ void sub_08026968(ChuchuBossEntity* this) { pEVar6->unk_82.HWORD += sVar5; pEVar7->unk_82.HWORD += sVar5; } - sub_08027870(super); + sub_08027870(this); } void sub_080269CC(ChuchuBossEntity* this) { @@ -970,7 +970,7 @@ void sub_080269CC(ChuchuBossEntity* this) { pEVar7->unk_74.WORD += 0x40000; pEVar7->unk_78.WORD -= 0x8000; } - sub_08027870(super); + sub_08027870(this); } void sub_08026BE8(ChuchuBossEntity* this) { @@ -988,7 +988,7 @@ void sub_08026BE8(ChuchuBossEntity* this) { } else { this->unk_7c--; } - sub_08027870(super); + sub_08027870(this); } void sub_08026C40(ChuchuBossEntity* this) { @@ -1079,7 +1079,7 @@ void sub_08026C40(ChuchuBossEntity* this) { pEVar6->base.subtimer = 0; sub_08027B98(this, 0x90, 0xb0, 0x10, 0); } - sub_08027870(super); + sub_08027870(this); } void sub_08026E1C(ChuchuBossEntity* this) { @@ -1183,7 +1183,7 @@ void sub_08026FA4(ChuchuBossEntity* this) { } } } - sub_08027870(super); + sub_08027870(this); } void sub_08027064(ChuchuBossEntity* this) { @@ -1264,7 +1264,7 @@ void sub_08027064(ChuchuBossEntity* this) { this->unk_7c = 0x3c; } } - sub_08027870(super); + sub_08027870(this); } void sub_0802720C(ChuchuBossEntity* this) { @@ -1566,3 +1566,58 @@ void sub_080277F8(ChuchuBossEntity* this) { pEVar5->unk_78.WORD = pEVar3->unk_78.WORD; sub_08027984(this); } + +void sub_08027870(ChuchuBossEntity* this) { + u32 cVar1; + u32 uVar2; + u32 uVar3; + ChuchuBossEntity* pEVar5; + ChuchuBossEntity* pEVar7; + ChuchuBossEntity* pEVar6; + + pEVar5 = (ChuchuBossEntity*)super->child; + pEVar7 = this->unk_68; + pEVar6 = (ChuchuBossEntity*)super->parent; + pEVar6->unk_74.WORD = pEVar5->unk_74.WORD; + pEVar6->unk_78.WORD = pEVar5->unk_78.WORD; + pEVar7->unk_74.WORD = pEVar5->unk_74.WORD; + pEVar7->unk_78.WORD = pEVar5->unk_78.WORD; + pEVar5->unk_7e.HALF.HI = -pEVar5->unk_82.HALF.HI; + pEVar7->unk_7e.HALF.HI = -pEVar7->unk_82.HALF.HI; + pEVar6->unk_7e.HALF.HI = -pEVar6->unk_82.HALF.HI; + if (pEVar7->unk_78.HALF_U.HI >= 0xa1) { + uVar2 = 14; + } else { + uVar2 = ((0xa0 - pEVar7->unk_78.HALF_U.HI) >> 3) + 14; + } + pEVar7->base.timer = uVar2; + if (pEVar6->unk_78.HALF_U.HI >= 0xa1) { + pEVar6->base.timer = 18 - ((pEVar5->unk_78.HALF_U.HI - 0xa0) >> 4); + } else { + pEVar6->base.timer = ((0xa0 - pEVar6->unk_78.HALF_U.HI) >> 2) + 18; + } + if (pEVar5->unk_78.HALF_U.HI >= 0xa1) { + uVar3 = 0xe - ((pEVar5->unk_78.HALF_U.HI - 0xa0) >> 2); + pEVar5->base.timer = uVar3; + if ((uVar3 & 0x80) != 0) { + pEVar5->base.timer = 0; + } + } else { + if (pEVar5->unk_78.HALF_U.HI < 0x80) { + cVar1 = ((0xa0 - pEVar5->unk_78.HALF_U.HI) >> 2); + } else { + cVar1 = ((0xa0 - pEVar5->unk_78.HALF_U.HI) >> 1); + } + pEVar5->base.timer = cVar1 + 14; + } + pEVar7->base.x.WORD = super->x.WORD; + pEVar7->base.y.WORD = super->y.WORD; + LinearMoveAngle(&pEVar7->base, pEVar7->base.timer << 8, pEVar7->unk_82.HALF.HI); + pEVar6->base.x.WORD = pEVar7->base.x.WORD; + pEVar6->base.y.WORD = pEVar7->base.y.WORD; + LinearMoveAngle(&pEVar6->base, pEVar6->base.timer << 8, pEVar6->unk_82.HALF.HI); + pEVar5->base.x.WORD = pEVar6->base.x.WORD; + pEVar5->base.y.WORD = pEVar6->base.y.WORD; + LinearMoveAngle(&pEVar5->base, pEVar5->base.timer << 8, pEVar5->unk_82.HALF.HI); + sub_08027984(this); +} From 06e8f0f5015e6306765b9eae65e854fb3c67c21d Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 04:01:27 +0300 Subject: [PATCH 09/19] Match sub_08027984 --- asm/enemy/chuchuBoss.s | 19 ------------------- src/enemy/chuchuBoss.c | 13 +++++++++++++ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 5bd91cf9..1a2478c3 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -11,25 +11,6 @@ - thumb_func_start sub_08027984 -sub_08027984: @ 0x08027984 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r1, [r4, #0x54] - ldr r5, [r4, #0x68] - ldr r6, [r4, #0x50] - ldrb r2, [r1, #0xa] - bl sub_080279AC - ldrb r2, [r5, #0xa] - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_080279AC - ldrb r2, [r6, #0xa] - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_080279AC - pop {r4, r5, r6, pc} - .align 2, 0 thumb_func_start sub_080279AC sub_080279AC: @ 0x080279AC diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 9e138ff5..9652752a 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1621,3 +1621,16 @@ void sub_08027870(ChuchuBossEntity* this) { LinearMoveAngle(&pEVar5->base, pEVar5->base.timer << 8, pEVar5->unk_82.HALF.HI); sub_08027984(this); } + +void sub_08027984(ChuchuBossEntity* this) { + ChuchuBossEntity* child; + ChuchuBossEntity* pEVar1; + ChuchuBossEntity* pEVar2; + + child = (ChuchuBossEntity*)super->child; + pEVar1 = this->unk_68; + pEVar2 = (ChuchuBossEntity*)super->parent; + sub_080279AC(this, child, child->base.type); + sub_080279AC(this, pEVar1, pEVar1->base.type); + sub_080279AC(this, pEVar2, pEVar2->base.type); +} From 27d04023f7dfaff16df1f51fa289e3da939a385d Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 04:06:08 +0300 Subject: [PATCH 10/19] Match sub_080279AC --- asm/enemy/chuchuBoss.s | 32 -------------------------------- src/enemy/chuchuBoss.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 32 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 1a2478c3..90985728 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -12,38 +12,6 @@ - thumb_func_start sub_080279AC -sub_080279AC: @ 0x080279AC - push {r4, r5, r6, lr} - mov ip, r1 - movs r3, #4 - subs r3, r3, r2 - ldrh r1, [r1, #0x2e] - ldrh r4, [r0, #0x2e] - subs r1, r1, r4 - mov r6, ip - adds r6, #0x62 - strb r1, [r6] - mov r2, ip - ldrh r1, [r2, #0x32] - ldrh r2, [r0, #0x32] - adds r0, r2, r3 - subs r1, r1, r0 - mov r5, ip - adds r5, #0x63 - strb r1, [r5] - mov r0, ip - strh r4, [r0, #0x2e] - adds r2, r2, r3 - strh r2, [r0, #0x32] - ldr r1, [r0, #0x48] - ldrb r0, [r6] - strb r0, [r1] - mov r2, ip - ldr r1, [r2, #0x48] - ldrb r0, [r5] - strb r0, [r1, #1] - pop {r4, r5, r6, pc} thumb_func_start sub_080279E8 sub_080279E8: @ 0x080279E8 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 9652752a..c7182d4f 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1634,3 +1634,15 @@ void sub_08027984(ChuchuBossEntity* this) { sub_080279AC(this, pEVar1, pEVar1->base.type); sub_080279AC(this, pEVar2, pEVar2->base.type); } + +void sub_080279AC(ChuchuBossEntity* this, Entity* param_2, s32 param_3) { + s32 temp; + + temp = 4 - param_3; + param_2->spriteOffsetX = param_2->x.HALF_U.HI - super->x.HALF_U.HI; + param_2->spriteOffsetY = param_2->y.HALF.HI - (super->y.HALF.HI + temp); + param_2->x.HALF.HI = super->x.HALF_U.HI; + param_2->y.HALF.HI = super->y.HALF.HI + temp; + param_2->hitbox->offset_x = param_2->spriteOffsetX; + param_2->hitbox->offset_y = param_2->spriteOffsetY; +} From 92287593acff2a4e01b68b0005b22aac44173157 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 04:13:33 +0300 Subject: [PATCH 11/19] Match sub_080279E8 --- asm/enemy/chuchuBoss.s | 68 ------------------------------------------ src/enemy/chuchuBoss.c | 28 +++++++++++++++++ 2 files changed, 28 insertions(+), 68 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 90985728..e295b612 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -13,74 +13,6 @@ - thumb_func_start sub_080279E8 -sub_080279E8: @ 0x080279E8 - push {r4, lr} - sub sp, #4 - adds r2, r0, #0 - ldr r4, [r2, #0x54] - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0x80 - bne _08027A20 - adds r0, r2, #0 - adds r0, #0x76 - ldrh r1, [r0] - adds r0, #0xe - ldr r0, [r0] - ldrb r0, [r0, #5] - subs r1, r1, r0 - cmp r1, #0x80 - bne _08027A58 - adds r0, r2, #0 - adds r0, #0x82 - ldrb r1, [r0] - movs r0, #1 - str r0, [sp] - adds r0, r2, #0 - movs r2, #0xa0 - movs r3, #0x20 - bl sub_08027B98 - b _08027A58 -_08027A20: - adds r0, r4, #0 - adds r0, #0x76 - ldrh r1, [r0] - adds r3, r0, #0 - cmp r1, #0xa0 - bls _08027A30 - subs r0, r1, #4 - b _08027A32 -_08027A30: - movs r0, #0xa0 -_08027A32: - strh r0, [r3] - adds r0, r4, #0 - adds r0, #0x7a - ldrh r2, [r0] - adds r1, r0, #0 - cmp r2, #0xa0 - bls _08027A44 - subs r0, r2, #4 - b _08027A46 -_08027A44: - movs r0, #0xa0 -_08027A46: - strh r0, [r1] - ldrh r0, [r3] - cmp r0, #0xa0 - bne _08027A58 - ldrh r0, [r1] - cmp r0, #0xa0 - bne _08027A58 - movs r0, #1 - b _08027A5A -_08027A58: - movs r0, #0 -_08027A5A: - add sp, #4 - pop {r4, pc} - .align 2, 0 thumb_func_start sub_08027A60 sub_08027A60: @ 0x08027A60 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index c7182d4f..9e586661 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1646,3 +1646,31 @@ void sub_080279AC(ChuchuBossEntity* this, Entity* param_2, s32 param_3) { param_2->hitbox->offset_x = param_2->spriteOffsetX; param_2->hitbox->offset_y = param_2->spriteOffsetY; } + +bool32 sub_080279E8(ChuchuBossEntity* this) { + u32 sVar1; + u32 sVar2; + ChuchuBossEntity* pEVar4; + + pEVar4 = (ChuchuBossEntity*)super->child; + if (this->unk_81 == 0x80) { + if (this->unk_74.HALF_U.HI - (u8)this->unk_84->unk_05 == 0x80) { + sub_08027B98(this, this->unk_82.HALF.LO, 0xa0, 0x20, 1); + } + } else { + if (pEVar4->unk_74.HALF_U.HI >= 0xa1) { + pEVar4->unk_74.HALF_U.HI = pEVar4->unk_74.HALF_U.HI - 4; + } else { + pEVar4->unk_74.HALF_U.HI = 0xa0; + } + if (pEVar4->unk_78.HALF_U.HI >= 0xa1) { + pEVar4->unk_78.HALF_U.HI = pEVar4->unk_78.HALF_U.HI - 4; + } else { + pEVar4->unk_78.HALF_U.HI = 0xa0; + } + if ((pEVar4->unk_74.HALF_U.HI == 0xa0) && (pEVar4->unk_78.HALF_U.HI == 0xa0)) { + return TRUE; + } + } + return FALSE; +} From bb05f2da36bc4ade85c8f489d9d8365bb04645c5 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 04:16:54 +0300 Subject: [PATCH 12/19] Match sub_08027A60 --- asm/enemy/chuchuBoss.s | 38 -------------------------------------- src/enemy/chuchuBoss.c | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index e295b612..aa715def 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -14,44 +14,6 @@ - thumb_func_start sub_08027A60 -sub_08027A60: @ 0x08027A60 - push {lr} - adds r2, r0, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08027A78 - ldr r0, [r2, #0x74] - movs r1, #0x80 - lsls r1, r1, #7 - b _08027A7C -_08027A78: - ldr r0, [r2, #0x74] - ldr r1, _08027AA0 @ =0xFFFFC000 -_08027A7C: - adds r0, r0, r1 - str r0, [r2, #0x74] - adds r3, r2, #0 - adds r3, #0x7c - ldrb r0, [r3] - adds r2, r0, #1 - strb r2, [r3] - movs r0, #0x7f - ands r0, r2 - cmp r0, #0x28 - bne _08027A9C - movs r1, #0x80 - movs r0, #0x80 - ands r2, r0 - eors r2, r1 - strb r2, [r3] -_08027A9C: - pop {pc} - .align 2, 0 -_08027AA0: .4byte 0xFFFFC000 thumb_func_start sub_08027AA4 sub_08027AA4: @ 0x08027AA4 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 9e586661..8595feef 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1674,3 +1674,19 @@ bool32 sub_080279E8(ChuchuBossEntity* this) { } return FALSE; } + +void sub_08027A60(ChuchuBossEntity* this) { + int iVar1; + int iVar2; + u32 bVar3; + + if ((this->unk_7c & 0x80) != 0) { + this->unk_74.WORD += Q_16_16(0.25); + } else { + this->unk_74.WORD -= Q_16_16(0.25); + } + this->unk_7c++; + if ((this->unk_7c & 0x7f) == 0x28) { + this->unk_7c = (this->unk_7c & 0x80) ^ 0x80; + } +} From 6a63649f861102d5f68cbf981816c5325605ed34 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 04:47:59 +0300 Subject: [PATCH 13/19] Match sub_08027AA4 --- asm/enemy/chuchuBoss.s | 126 ----------------------------------------- src/enemy/chuchuBoss.c | 54 ++++++++++++++++++ 2 files changed, 54 insertions(+), 126 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index aa715def..d12220d7 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -15,132 +15,6 @@ - thumb_func_start sub_08027AA4 -sub_08027AA4: @ 0x08027AA4 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08027B94 - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x13 - beq _08027AC2 - cmp r0, #0x1b - beq _08027B44 - b _08027B94 -_08027AC2: - movs r0, #0x84 - bl SoundReq - ldrb r3, [r5, #0xb] - adds r0, r5, #0 - movs r1, #0x49 - movs r2, #9 - bl CreateObjectWithParent - ldr r0, _08027B3C @ =0x00000155 - bl SoundReq - adds r0, r5, #0 - adds r0, #0x84 - ldr r4, [r0] - adds r1, r5, #0 - adds r1, #0x3d - movs r0, #3 - strb r0, [r1] - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldrb r0, [r4, #6] - movs r1, #3 - bl __divsi3 - adds r1, r0, #0 - lsls r0, r1, #0x18 - lsrs r0, r0, #0x15 - ldrb r2, [r4, #5] - cmp r0, r2 - beq _08027B06 - lsls r0, r1, #3 - strb r0, [r4, #5] -_08027B06: - movs r0, #0xb4 - str r0, [r4, #8] - movs r0, #5 - ldrsb r0, [r4, r0] - cmp r0, #0 - bge _08027B94 - movs r0, #0x40 - strb r0, [r4, #1] - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0 - strb r0, [r1] - ldrb r0, [r5, #0xd] - cmp r0, #2 - bne _08027B2A - adds r0, r5, #0 - bl sub_08027BBC -_08027B2A: - adds r0, r5, #0 - bl sub_08027D20 - ldr r0, _08027B40 @ =0x00000127 - bl SoundReq -_08027B36: - movs r0, #1 - b _08027B96 - .align 2, 0 -_08027B3C: .4byte 0x00000155 -_08027B40: .4byte 0x00000127 -_08027B44: - adds r1, r5, #0 - adds r1, #0x3d - movs r0, #0xe2 - strb r0, [r1] - ldr r0, [r5, #0x4c] - ldrb r0, [r0, #0xa] - adds r0, #1 - cmp r0, #2 - beq _08027B74 - cmp r0, #2 - bgt _08027B60 - cmp r0, #1 - beq _08027B84 - b _08027B36 -_08027B60: - cmp r0, #3 - bne _08027B36 - adds r1, r5, #0 - adds r1, #0x42 - movs r0, #0x1a - strb r0, [r1] - adds r1, #4 - movs r0, #0xe0 - lsls r0, r0, #1 - b _08027B90 -_08027B74: - adds r1, r5, #0 - adds r1, #0x42 - movs r0, #0x14 - strb r0, [r1] - adds r1, #4 - movs r0, #0xc0 - lsls r0, r0, #1 - b _08027B90 -_08027B84: - adds r1, r5, #0 - adds r1, #0x42 - movs r0, #0x10 - strb r0, [r1] - adds r1, #4 - adds r0, #0xf0 -_08027B90: - strh r0, [r1] - b _08027B36 -_08027B94: - movs r0, #0 -_08027B96: - pop {r4, r5, pc} thumb_func_start sub_08027B98 sub_08027B98: @ 0x08027B98 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 8595feef..db04b2ec 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1690,3 +1690,57 @@ void sub_08027A60(ChuchuBossEntity* this) { this->unk_7c = (this->unk_7c & 0x80) ^ 0x80; } } + +bool32 sub_08027AA4(ChuchuBossEntity* this) { + u32 uVar3; + s32 iVar4; + Helper* pHelper; + + if ((super->contactFlags & 0x80) == 0) { + return FALSE; + } + switch (super->contactFlags & 0x7f) { + case 19: + SoundReq(SFX_WATER_SPLASH); + CreateObjectWithParent(super, OBJECT_49, 9, super->type2); + SoundReq(SFX_155); + pHelper = this->unk_84; + super->iframes = 3; + pHelper->unk_06++; + iVar4 = pHelper->unk_06; + uVar3 = (iVar4 / 3); + if (((u8)uVar3 << 3) != (u8)pHelper->unk_05) { + pHelper->unk_05 = (uVar3 << 3); + } + pHelper->unk_08 = 0xb4; + if (-1 < pHelper->unk_05) { + break; + } + pHelper->unk_01 = 0x40; + super->hitType = 0; + if (super->subAction == 2) { + sub_08027BBC(this); + } + sub_08027D20(this); + SoundReq(SFX_BOSS_HIT); + return TRUE; + case 27: + super->iframes = -30; + switch (super->contactedEntity->type + 1) { + case 3: + super->knockbackDuration = 26; + super->knockbackSpeed = Q_8_8(1.75); + break; + case 2: + super->knockbackDuration = 20; + super->knockbackSpeed = Q_8_8(1.5); + break; + case 1: + super->knockbackDuration = 16; + super->knockbackSpeed = Q_8_8(1); + break; + } + return TRUE; + } + return FALSE; +} From 065fe41d22a7dd1d53205d7094bf6370e2ddf668 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 04:49:07 +0300 Subject: [PATCH 14/19] Match sub_08027B98 --- asm/enemy/chuchuBoss.s | 22 ---------------------- src/enemy/chuchuBoss.c | 11 +++++++++++ 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index d12220d7..c1ab45a0 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -16,28 +16,6 @@ - thumb_func_start sub_08027B98 -sub_08027B98: @ 0x08027B98 - push {r4, lr} - mov ip, r0 - ldr r4, [sp, #8] - adds r0, #0x82 - strb r1, [r0] - subs r0, #1 - strb r2, [r0] - subs r0, #1 - strb r3, [r0] - cmp r4, #0xff - beq _08027BB4 - mov r0, ip - strb r4, [r0, #0xe] - b _08027BBA -_08027BB4: - movs r0, #1 - mov r1, ip - strb r0, [r1, #0xe] -_08027BBA: - pop {r4, pc} thumb_func_start sub_08027BBC sub_08027BBC: @ 0x08027BBC diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index db04b2ec..ddaeccc8 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1744,3 +1744,14 @@ bool32 sub_08027AA4(ChuchuBossEntity* this) { } return FALSE; } + +void sub_08027B98(ChuchuBossEntity* this, u32 unk1, u32 unk2, u32 unk3, u32 unk4) { + this->unk_82.HALF.LO = unk1; + this->unk_81 = unk2; + this->unk_80 = unk3; + if (unk4 != 0xff) { + super->timer = unk4; + } else { + super->timer = 1; + } +} From 3e556b393f498b63d1377b6d7c0480ddb388fcf6 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 05:01:09 +0300 Subject: [PATCH 15/19] Match sub_08027BBC --- asm/enemy/chuchuBoss.s | 82 ------------------------------------------ src/enemy/chuchuBoss.c | 37 +++++++++++++++++++ 2 files changed, 37 insertions(+), 82 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index c1ab45a0..2d1b4536 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -17,88 +17,6 @@ - thumb_func_start sub_08027BBC -sub_08027BBC: @ 0x08027BBC - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r4, #0 - movs r0, #0xa - strb r0, [r6, #0xd] - adds r5, r6, #0 - adds r5, #0x84 - ldr r0, [r5] - strb r4, [r0, #1] - adds r0, r6, #0 - movs r1, #7 - movs r2, #1 - bl sub_080276F4 - ldr r0, [r6, #0x54] - adds r0, #0x7d - strb r4, [r0] - movs r3, #0 - strh r4, [r6, #0x24] - ldr r0, [r5] - strb r3, [r0, #3] - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r0, [r5] - ldrh r0, [r0, #0xe] - cmp r1, r0 - ble _08027C0A - movs r0, #0x18 - strb r0, [r6, #0x15] - ldr r2, [r6, #0x54] - ldr r1, [r6, #0x50] - ldr r0, [r6, #0x68] - adds r0, #0x85 - strb r3, [r0] - adds r1, #0x85 - strb r3, [r1] - adds r2, #0x85 - strb r3, [r2] - b _08027C22 -_08027C0A: - movs r0, #8 - strb r0, [r6, #0x15] - ldr r3, [r6, #0x54] - ldr r2, [r6, #0x50] - ldr r0, [r6, #0x68] - adds r0, #0x85 - movs r1, #1 - strb r1, [r0] - adds r2, #0x85 - strb r1, [r2] - adds r3, #0x85 - strb r1, [r3] -_08027C22: - ldrb r0, [r6, #0x15] - lsrs r0, r0, #2 - strb r0, [r6, #0x14] - ldr r0, _08027C44 @ =gPlayerEntity - movs r2, #0x32 - ldrsh r1, [r6, r2] - movs r2, #0x32 - ldrsh r0, [r0, r2] - cmp r1, r0 - beq _08027C52 - cmp r1, r0 - ble _08027C48 - adds r0, r6, #0 - adds r0, #0x84 - ldr r1, [r0] - movs r0, #0 - b _08027C50 - .align 2, 0 -_08027C44: .4byte gPlayerEntity -_08027C48: - adds r0, r6, #0 - adds r0, #0x84 - ldr r1, [r0] - movs r0, #0x10 -_08027C50: - strb r0, [r1, #0xc] -_08027C52: - pop {r4, r5, r6, pc} thumb_func_start sub_08027C54 sub_08027C54: @ 0x08027C54 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index ddaeccc8..ec325015 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1755,3 +1755,40 @@ void sub_08027B98(ChuchuBossEntity* this, u32 unk1, u32 unk2, u32 unk3, u32 unk4 super->timer = 1; } } + +void sub_08027BBC(ChuchuBossEntity* this) { + ChuchuBossEntity* pEVar3; + ChuchuBossEntity* pEVar5; + ChuchuBossEntity* pEVar6; + ChuchuBossEntity* pEVar7; + + super->subAction = 10; + this->unk_84->unk_01 = 0; + sub_080276F4(this, 7, 1); + ((ChuchuBossEntity*)super->child)->unk_7d = 0; + super->speed = 0; + this->unk_84->unk_03 = 0; + if (super->x.HALF.HI > this->unk_84->unk_0e) { + super->direction = 0x18; + pEVar5 = (ChuchuBossEntity*)super->child; + pEVar3 = (ChuchuBossEntity*)super->parent; + *(u8*)((int)this->unk_68 + 0x85) = 0; + *(u8*)((int)pEVar3 + 0x85) = 0; + *(u8*)((int)pEVar5 + 0x85) = 0; + } else { + super->direction = 8; + pEVar6 = (ChuchuBossEntity*)super->child; + pEVar7 = (ChuchuBossEntity*)super->parent; + *(u8*)((int)this->unk_68 + 0x85) = 1; + *(u8*)((int)pEVar7 + 0x85) = 1; + *(u8*)((int)pEVar6 + 0x85) = 1; + } + super->animationState = super->direction >> 2; + if (super->y.HALF.HI != gPlayerEntity.y.HALF.HI) { + if (super->y.HALF.HI > gPlayerEntity.y.HALF.HI) { + this->unk_84->unk_0c = 0; + } else { + this->unk_84->unk_0c = 0x10; + } + } +} From 203fe4242cf18ce0e313bfaeb48365cf0b81f927 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 05:01:59 +0300 Subject: [PATCH 16/19] Match sub_08027C54 --- asm/enemy/chuchuBoss.s | 24 ------------------------ src/enemy/chuchuBoss.c | 8 ++++++++ 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 2d1b4536..2e84ce54 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -18,30 +18,6 @@ - thumb_func_start sub_08027C54 -sub_08027C54: @ 0x08027C54 - push {lr} - ldr r2, _08027C74 @ =gUnk_080CC2DC - adds r1, r0, #0 - adds r1, #0x84 - ldr r1, [r1] - ldrb r1, [r1, #4] - adds r1, r1, r2 - ldr r0, [r0, #0x54] - adds r0, #0x45 - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bhi _08027C78 - movs r0, #0 - b _08027C7A - .align 2, 0 -_08027C74: .4byte gUnk_080CC2DC -_08027C78: - movs r0, #1 -_08027C7A: - pop {pc} - thumb_func_start sub_08027C7C sub_08027C7C: @ 0x08027C7C push {r4, r5, lr} diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index ec325015..4380f54b 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1792,3 +1792,11 @@ void sub_08027BBC(ChuchuBossEntity* this) { } } } + +bool32 sub_08027C54(ChuchuBossEntity* this) { + if ((u8)gUnk_080CC2DC[this->unk_84->unk_04] > super->child->health) { + return TRUE; + } else { + return FALSE; + } +} From c31e523629173dd451267ef30f9d3e2d5d58e343 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 05:08:41 +0300 Subject: [PATCH 17/19] Match sub_08027C7C --- asm/enemy/chuchuBoss.s | 16 ---------------- src/enemy/chuchuBoss.c | 6 ++++++ 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index 2e84ce54..b1f371d4 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -18,22 +18,6 @@ - thumb_func_start sub_08027C7C -sub_08027C7C: @ 0x08027C7C - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldr r0, [r4, #0x54] - bl sub_08027C9C - ldr r0, [r4, #0x68] - adds r1, r5, #0 - bl sub_08027C9C - ldr r0, [r4, #0x50] - adds r1, r5, #0 - bl sub_08027C9C - pop {r4, r5, pc} - .align 2, 0 - thumb_func_start sub_08027C9C sub_08027C9C: @ 0x08027C9C push {r4, r5, lr} diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 4380f54b..1fef8093 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1800,3 +1800,9 @@ bool32 sub_08027C54(ChuchuBossEntity* this) { return FALSE; } } + +void sub_08027C7C(ChuchuBossEntity* this, u32 param_2) { + sub_08027C9C(super->child, param_2); + sub_08027C9C(this->unk_68, param_2); + sub_08027C9C(super->parent, param_2); +} From 4c4188671b199002558d595f63368efbb637a264 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 05:10:00 +0300 Subject: [PATCH 18/19] Match sub_08027C9C --- asm/enemy/chuchuBoss.s | 63 ------------------------------------------ src/enemy/chuchuBoss.c | 15 ++++++++++ 2 files changed, 15 insertions(+), 63 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index b1f371d4..8ec28073 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -18,69 +18,6 @@ - thumb_func_start sub_08027C9C -sub_08027C9C: @ 0x08027C9C - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - bl Random - ands r0, r4 - cmp r0, #0 - bne _08027D1E - adds r0, r5, #0 - movs r1, #0x48 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _08027D1E - adds r0, r5, #0 - adds r0, #0x62 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldr r1, [r5, #0x48] - ldrb r1, [r1, #6] - subs r0, r0, r1 - ldrh r1, [r4, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - bl Random - ldr r1, [r5, #0x48] - ldrb r1, [r1, #6] - lsls r1, r1, #1 - bl __modsi3 - ldrh r1, [r4, #0x2e] - adds r1, r1, r0 - strh r1, [r4, #0x2e] - adds r0, r5, #0 - adds r0, #0x63 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldr r1, [r5, #0x48] - ldrb r1, [r1, #7] - subs r0, r0, r1 - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] - bl Random - ldr r1, [r5, #0x48] - ldrb r1, [r1, #7] - lsls r1, r1, #1 - bl __modsi3 - ldrh r1, [r4, #0x32] - adds r1, r1, r0 - strh r1, [r4, #0x32] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] -_08027D1E: - pop {r4, r5, pc} thumb_func_start sub_08027D20 sub_08027D20: @ 0x08027D20 diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 1fef8093..769fe86e 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -1806,3 +1806,18 @@ void sub_08027C7C(ChuchuBossEntity* this, u32 param_2) { sub_08027C9C(this->unk_68, param_2); sub_08027C9C(super->parent, param_2); } + +void sub_08027C9C(ChuchuBossEntity* this, u32 param_2) { + Entity* fxEnt; + + if ((Random() & param_2) == 0) { + fxEnt = CreateFx(super, FX_GIANT_EXPLOSION3, 0); + if (fxEnt != NULL) { + fxEnt->x.HALF.HI = ((s8)super->spriteOffsetX - super->hitbox->width) + fxEnt->x.HALF.HI; + fxEnt->x.HALF.HI += ((s32)Random()) % (super->hitbox->width << 1); + fxEnt->y.HALF.HI += ((short)super->spriteOffsetY - super->hitbox->height); + fxEnt->y.HALF.HI += ((s32)Random()) % (super->hitbox->height << 1); + fxEnt->spritePriority.b0 = 0; + } + } +} From 705d5e7283a96c0aab35bf9c5caed0dc821cf8ad Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 19 Jul 2022 05:17:45 +0300 Subject: [PATCH 19/19] Match sub_08027D20 --- asm/enemy/chuchuBoss.s | 98 ------------------------------------------ linker.ld | 1 - src/enemy/chuchuBoss.c | 26 ++++++++++- 3 files changed, 24 insertions(+), 101 deletions(-) delete mode 100644 asm/enemy/chuchuBoss.s diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s deleted file mode 100644 index 8ec28073..00000000 --- a/asm/enemy/chuchuBoss.s +++ /dev/null @@ -1,98 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - - - - - - - - - - - - - thumb_func_start sub_08027D20 -sub_08027D20: @ 0x08027D20 -.ifdef EU - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x15 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r3, r0, #0 - cmp r3, #0 - beq _08027D44 - movs r0, #0xc9 - strh r0, [r3, #0x12] - adds r0, r4, #0 - adds r0, #0x60 - ldrh r1, [r0] - adds r0, r3, #0 - adds r0, #0x60 - strh r1, [r0] - ldrb r1, [r4, #0x1a] - lsls r1, r1, #0x1c - lsrs r1, r1, #0x1c - ldrb r2, [r3, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x1a] - ldrh r0, [r3, #0x32] - adds r0, #1 - strh r0, [r3, #0x32] - adds r1, r3, #0 - adds r1, #0x63 - movs r0, #8 - strb r0, [r1] -_08027D44: - adds r0, r3, #0 - pop {r4, pc} -.else - push {r4, r5, lr} - adds r5, r0, #0 - movs r1, #0x15 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r4, r0, #0 - cmp r4, #0 - beq _08027D66 - movs r0, #0xc9 - strh r0, [r4, #0x12] - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #8 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0x3e - bl LoadFixedGFX - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _08027D5E - adds r0, r4, #0 - movs r1, #0x2b - bl LoadObjPalette - b _08027D66 -_08027D5E: - adds r0, r4, #0 - movs r1, #0x2c - bl LoadObjPalette -_08027D66: - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 -.endif diff --git a/linker.ld b/linker.ld index 4c15fd31..1cc04d01 100644 --- a/linker.ld +++ b/linker.ld @@ -317,7 +317,6 @@ SECTIONS { src/enemy/pesto.o(.text); src/enemy/puffstool.o(.text); src/enemy/chuchuBoss.o(.text); - asm/enemy/chuchuBoss.o(.text); src/enemy/likeLike.o(.text); src/enemy/spearMoblin.o(.text); src/enemy/businessScrub.o(.text); diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index 769fe86e..62e5e0ff 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -133,7 +133,7 @@ void sub_08027BBC(); bool32 sub_08027C54(); void sub_08027C7C(ChuchuBossEntity*, u32); void sub_08027C9C(); -Entity* sub_08027D20(); +Entity* sub_08027D20(ChuchuBossEntity*); // clang-format off void (*const ChuchuBoss_Functions[])(ChuchuBossEntity*) = { @@ -1350,7 +1350,7 @@ void sub_080272D4(ChuchuBossEntity* this) { ((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); + pEVar3 = sub_08027D20((ChuchuBossEntity*)super->child); if (pEVar3 != NULL) { pEVar3->x.HALF.HI = super->x.HALF.HI + 1; pEVar3->spriteOffsetY = super->spriteOffsetY + 0x20; @@ -1821,3 +1821,25 @@ void sub_08027C9C(ChuchuBossEntity* this, u32 param_2) { } } } + +Entity* sub_08027D20(ChuchuBossEntity* this) { + Entity* r4 = CreateObjectWithParent(super, OBJECT_15, 0, 0); + if (r4 != NULL) { + r4->spriteIndex = 0xc9; +#ifdef EU + r4->spriteVramOffset = super->spriteVramOffset; + r4->palette.b.b0 = super->palette.b.b0; +#endif + r4->y.HALF.HI += 1; + r4->spriteOffsetY = 8; +#ifndef EU + LoadFixedGFX(r4, 0x3e); + if (super->type2 == 0) { + LoadObjPalette(r4, 0x2b); + } else { + LoadObjPalette(r4, 0x2c); + } +#endif + } + return r4; +}