From 09f4a3267a7e96e09ab81a7cd8c6c6c2628ed3be Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 17 Jul 2022 09:37:49 +0300 Subject: [PATCH] Match sub_08027064 --- asm/enemy/chuchuBoss.s | 225 ----------------------------------------- src/enemy/chuchuBoss.c | 84 ++++++++++++++- 2 files changed, 83 insertions(+), 226 deletions(-) diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index b785358e..cbe2102c 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -7,231 +7,6 @@ .text - thumb_func_start sub_08027064 -sub_08027064: @ 0x08027064 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r5, r0, #0 - ldr r6, [r5, #0x54] - ldr r0, [r5, #0x68] - mov sb, r0 - ldr r1, [r5, #0x50] - mov r8, r1 - movs r0, #0x60 - strh r0, [r5, #0x24] - adds r0, r6, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xa - beq _08027098 - ldr r0, _080270C8 @ =gRoomTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _08027098 - movs r0, #0x7c - bl SoundReq -_08027098: - adds r0, r5, #0 - adds r0, #0x84 - ldr r3, [r0] - ldrb r1, [r3, #3] - adds r7, r0, #0 - cmp r1, #0 - beq _080270E0 - ldr r0, _080270CC @ =gPlayerEntity - movs r2, #0x32 - ldrsh r4, [r5, r2] - movs r1, #0x32 - ldrsh r2, [r0, r1] - cmp r4, r2 - beq _080270E0 - ldr r0, _080270C8 @ =gRoomTransition - ldr r1, [r0] - movs r0, #0xf - ands r1, r0 - cmp r1, #0 - bne _080270D4 - cmp r4, r2 - ble _080270D0 - strb r1, [r3, #0xc] - b _080270D4 - .align 2, 0 -_080270C8: .4byte gRoomTransition -_080270CC: .4byte gPlayerEntity -_080270D0: - movs r0, #0x10 - strb r0, [r3, #0xc] -_080270D4: - ldr r0, [r7] - ldrb r0, [r0, #0xc] - strb r0, [r5, #0x15] - adds r0, r5, #0 - bl ProcessMovement0 -_080270E0: - adds r0, r6, #0 - adds r0, #0x85 - ldrb r0, [r0] - cmp r0, #1 - bne _080270FC - adds r0, r6, #0 - adds r0, #0x83 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bgt _0802710E - movs r0, #0x18 - b _08027110 -_080270FC: - adds r0, r6, #0 - adds r0, #0x83 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bge _0802710E - movs r0, #0x18 - b _08027110 -_0802710E: - movs r0, #8 -_08027110: - strb r0, [r5, #0x15] - ldr r1, [r7] - ldrb r0, [r1, #3] - cmp r0, #0 - bne _08027152 - movs r2, #0x2e - ldrsh r0, [r5, r2] - ldrh r1, [r1, #0xe] - cmp r0, r1 - bne _0802714A - mov r0, r8 - adds r0, #0x84 - movs r1, #1 - strb r1, [r0] - mov r0, sb - adds r0, #0x84 - strb r1, [r0] - adds r0, r6, #0 - adds r0, #0x84 - strb r1, [r0] - adds r1, r5, #0 - adds r1, #0x7c - movs r0, #0x1e - strb r0, [r1] - ldr r1, [r7] - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] - b _080271FE -_0802714A: - adds r0, r5, #0 - bl ProcessMovement0 - b _080271FE -_08027152: - adds r0, r6, #0 - adds r0, #0x7d - ldrb r0, [r0] - cmp r0, #0 - beq _080271E6 - mov r0, sb - adds r0, #0x7d - ldrb r0, [r0] - cmp r0, #0 - beq _080271E6 - mov r0, r8 - adds r0, #0x7d - ldrb r0, [r0] - cmp r0, #0 - beq _080271E6 - adds r1, r5, #0 - adds r1, #0x7c - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _080271FE - mov r0, r8 - adds r0, #0x84 - movs r1, #1 - strb r1, [r0] - mov r0, sb - adds r0, #0x84 - strb r1, [r0] - adds r0, r6, #0 - adds r0, #0x84 - strb r1, [r0] - movs r3, #0 - ldr r0, [r7] - ldrb r0, [r0, #3] - cmp r0, #1 - bls _080271B2 - ldr r0, _080271DC @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r5, r2] - movs r2, #0x2e - ldrsh r0, [r0, r2] - movs r3, #8 - cmp r1, r0 - ble _080271B2 - movs r3, #0x18 -_080271B2: - ldr r2, [r7] - ldrb r1, [r2, #3] - cmp r1, #5 - beq _080271C0 - ldrb r0, [r5, #0x15] - cmp r0, r3 - bne _080271E0 -_080271C0: - movs r4, #0 - movs r0, #6 - strb r0, [r5, #0xd] - adds r0, r5, #0 - movs r1, #7 - movs r2, #1 - bl sub_080276F4 - ldr r0, [r7] - strb r4, [r0, #3] - adds r1, r5, #0 - adds r1, #0x7d - movs r0, #0xf - b _080271FC - .align 2, 0 -_080271DC: .4byte gPlayerEntity -_080271E0: - adds r0, r1, #1 - strb r0, [r2, #3] - b _080271FE -_080271E6: - ldr r0, [r7] - ldrb r0, [r0, #3] - cmp r0, #4 - beq _080271F6 - adds r1, r5, #0 - adds r1, #0x7c - movs r0, #0x1e - b _080271FC -_080271F6: - adds r1, r5, #0 - adds r1, #0x7c - movs r0, #0x3c -_080271FC: - strb r0, [r1] -_080271FE: - adds r0, r5, #0 - bl sub_08027870 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - thumb_func_start sub_0802720C sub_0802720C: @ 0x0802720C push {r4, lr} diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c index cb57a477..4350ae9c 100644 --- a/src/enemy/chuchuBoss.c +++ b/src/enemy/chuchuBoss.c @@ -20,7 +20,8 @@ typedef struct { u8 unk_06; u8 unk_07; u32 unk_08; - u16 unk_0c; + u8 unk_0c; + u8 unk_0d; u16 unk_0e; } Helper; @@ -1171,3 +1172,84 @@ void sub_08026FA4(ChuchuBossEntity* this) { } sub_08027870(super); } + +void sub_08027064(ChuchuBossEntity* this) { + u32 uVar2; + ChuchuBossEntity* pEVar5; + ChuchuBossEntity* pEVar7; + ChuchuBossEntity* pEVar10; + + pEVar10 = (ChuchuBossEntity*)super->child; + pEVar5 = this->unk_68; + pEVar7 = (ChuchuBossEntity*)super->parent; + super->speed = 0x60; + if (pEVar10->base.animIndex != 10 && ((gRoomTransition.frameCount & 0xf) == 0)) { + SoundReq(SFX_PLY_JUMP); + } + if (this->unk_84->unk_03 != 0) { + if (super->y.HALF.HI != gPlayerEntity.y.HALF.HI) { + if ((gRoomTransition.frameCount & 0xf) == 0) { + if (super->y.HALF.HI > gPlayerEntity.y.HALF.HI) { + this->unk_84->unk_0c = 0; + } else { + this->unk_84->unk_0c = 0x10; + } + } + super->direction = this->unk_84->unk_0c; + ProcessMovement0(super); + } + } + if (*(char*)((int)pEVar10 + 0x85) == 1) { + if ((s8)pEVar10->unk_82.HALF.HI < 1) { + super->direction = 24; + } else { + super->direction = 8; + } + } else { + if ((s8)pEVar10->unk_82.HALF.HI <= -1) { + super->direction = 24; + } else { + super->direction = 8; + } + } + if (this->unk_84->unk_03 == 0) { + if (super->x.HALF.HI == this->unk_84->unk_0e) { + *(char*)((int)pEVar7 + 0x84) = 1; + *(char*)((int)pEVar5 + 0x84) = 1; + *(char*)((int)pEVar10 + 0x84) = 1; + this->unk_7c = 0x1e; + this->unk_84->unk_03++; + } else { + ProcessMovement0(super); + } + } else if (pEVar10->unk_7d != 0 && pEVar5->unk_7d != 0 && pEVar7->unk_7d != 0) { + if (this->unk_7c-- == 0) { + *(char*)((int)pEVar7 + 0x84) = 1; + *(char*)((int)pEVar5 + 0x84) = 1; + *(char*)((int)pEVar10 + 0x84) = 1; + uVar2 = 0; + if (this->unk_84->unk_03 > 1) { + if (super->x.HALF.HI > gPlayerEntity.x.HALF.HI) { + uVar2 = 24; + } else { + uVar2 = 8; + } + } + if (this->unk_84->unk_03 == 5 || super->direction == uVar2) { + super->subAction = 6; + sub_080276F4(this, 7, 1); + this->unk_84->unk_03 = 0; + this->unk_7d = 0xf; + } else { + this->unk_84->unk_03++; + } + } + } else { + if (this->unk_84->unk_03 != 4) { + this->unk_7c = 0x1e; + } else { + this->unk_7c = 0x3c; + } + } + sub_08027870(super); +}