From 23d2badc619c10a502d8991d5737c2b95fb04b03 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 18 Jul 2022 13:48:51 +0300 Subject: [PATCH] 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; +}