diff --git a/asm/enemy/businessScrubPrologue.s b/asm/enemy/businessScrubPrologue.s deleted file mode 100644 index 87fa6ddc..00000000 --- a/asm/enemy/businessScrubPrologue.s +++ /dev/null @@ -1,747 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start BusinessScrubPrologue -BusinessScrubPrologue: @ 0x08045B88 - push {lr} - ldr r1, _08045B94 @ =gUnk_080D19FC - bl EnemyFunctionHandler - pop {pc} - .align 2, 0 -_08045B94: .4byte gUnk_080D19FC - - thumb_func_start sub_08045B98 -sub_08045B98: @ 0x08045B98 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r1, _08045BC4 @ =gUnk_080D1A14 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0800445C - pop {r4, pc} - .align 2, 0 -_08045BC4: .4byte gUnk_080D1A14 - - thumb_func_start sub_08045BC8 -sub_08045BC8: @ 0x08045BC8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #1 - bne _08045C2C - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r2, #0x7f - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0x42 - bne _08045C2C - movs r1, #0 - movs r0, #4 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r0, #0x28 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - adds r0, r2, #0 - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #4 - bl sub_08046030 - adds r0, r4, #0 - movs r1, #3 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08045C16 - ldrh r0, [r1, #0x36] - subs r0, #8 - strh r0, [r1, #0x36] -_08045C16: - ldr r0, _08045C30 @ =gPlayerState - adds r0, #0x27 - movs r1, #0xff - strb r1, [r0] - ldr r0, _08045C34 @ =0x000001BB - bl EnqueueSFX - adds r0, r4, #0 - movs r1, #2 - bl SetDefaultPriority -_08045C2C: - pop {r4, pc} - .align 2, 0 -_08045C30: .4byte gPlayerState -_08045C34: .4byte 0x000001BB - - thumb_func_start nullsub_174 -nullsub_174: @ 0x08045C38 - bx lr - .align 2, 0 - - thumb_func_start sub_08045C3C -sub_08045C3C: @ 0x08045C3C - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - strb r0, [r4, #0xf] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x78 - movs r2, #0 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x7a - strh r0, [r1] - strb r2, [r4, #0x14] - movs r0, #0x10 - strb r0, [r4, #0x15] - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0xb1 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0 - bl sub_08046030 - adds r0, r4, #0 - bl sub_08095C48 - ldr r1, _08045CA0 @ =script_BusinessScrubIntro - adds r0, r4, #0 - bl StartCutscene - adds r0, r4, #0 - bl sub_0807DD50 - pop {r4, pc} - .align 2, 0 -_08045CA0: .4byte script_BusinessScrubIntro - - thumb_func_start sub_08045CA4 -sub_08045CA4: @ 0x08045CA4 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0xe] - adds r5, r0, #0 - cmp r5, #0 - beq _08045CC0 - subs r0, #1 - strb r0, [r4, #0xe] - b _08045CD8 -_08045CC0: - adds r0, r4, #0 - movs r1, #0 - bl sub_08045F54 - cmp r0, #0 - beq _08045CD8 - adds r0, r4, #0 - bl sub_08045FF0 - strb r5, [r4, #0xd] - movs r0, #1 - strb r0, [r4, #0xf] -_08045CD8: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start nullsub_24 -nullsub_24: @ 0x08045CDC - bx lr - .align 2, 0 - - thumb_func_start sub_08045CE0 -sub_08045CE0: @ 0x08045CE0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl GetNextFrame - ldrb r0, [r4, #0xd] - cmp r0, #4 - bls _08045CF0 - b _08045DF8 -_08045CF0: - lsls r0, r0, #2 - ldr r1, _08045CFC @ =_08045D00 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08045CFC: .4byte _08045D00 -_08045D00: @ jump table - .4byte _08045D14 @ case 0 - .4byte _08045D36 @ case 1 - .4byte _08045D60 @ case 2 - .4byte _08045D9A @ case 3 - .4byte _08045DBC @ case 4 -_08045D14: - movs r6, #1 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08045DF8 - strb r6, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - movs r0, #0x10 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08045F98 - b _08045DB2 -_08045D36: - movs r6, #1 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08045DF8 - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x20 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - adds r0, r4, #0 - bl sub_08045F98 - adds r0, r4, #0 - movs r1, #2 - bl sub_08046030 - b _08045DF8 -_08045D60: - movs r6, #1 - adds r0, r4, #0 - bl sub_0804604C - adds r5, r4, #0 - adds r5, #0x5a - ldrb r1, [r5] - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - beq _08045DF8 - adds r0, r4, #0 - movs r1, #4 - movs r2, #0 - bl CreateProjectileWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _08045DF8 - str r4, [r1, #0x50] - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x15] - ldrb r1, [r5] - movs r0, #0xfe - ands r0, r1 - strb r0, [r5] - movs r0, #3 - strb r0, [r4, #0xd] - b _08045DF8 -_08045D9A: - movs r6, #2 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08045DF8 - movs r0, #4 - strb r0, [r4, #0xd] - movs r0, #0x50 - strb r0, [r4, #0xe] -_08045DB2: - adds r0, r4, #0 - movs r1, #1 - bl sub_08046030 - b _08045DF8 -_08045DBC: - movs r6, #2 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08045DF8 - adds r0, r4, #0 - movs r1, #0 - bl sub_08045F54 - adds r5, r0, #0 - cmp r5, #0 - beq _08045DEC - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - movs r0, #0x10 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08045F98 - b _08045DF8 -_08045DEC: - adds r0, r4, #0 - bl sub_08045FA0 - movs r0, #0x50 - strb r0, [r4, #0xe] - strb r5, [r4, #0xf] -_08045DF8: - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_08045F54 - adds r5, r0, #0 - cmp r5, #0 - bne _08045E12 - adds r0, r4, #0 - bl sub_08045FA0 - strb r5, [r4, #0xd] - strb r5, [r4, #0xe] - strb r5, [r4, #0xf] -_08045E12: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08045E14 -sub_08045E14: @ 0x08045E14 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08045E2C @ =gPlayerState - adds r0, #0x27 - movs r1, #0xff - strb r1, [r0] - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _08045E30 - cmp r0, #1 - beq _08045E70 - b _08045EBA - .align 2, 0 -_08045E2C: .4byte gPlayerState -_08045E30: - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _08045E6A - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08045EBA - movs r0, #1 - strb r0, [r4, #0xd] - adds r0, r4, #0 - bl sub_08045F98 - adds r0, r4, #0 - movs r1, #5 - bl sub_08046030 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - b _08045EBA -_08045E6A: - subs r0, #1 - strb r0, [r4, #0xe] - b _08045EBA -_08045E70: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08045EBA - movs r1, #0 - movs r0, #5 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - adds r0, r4, #0 - bl sub_08046030 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC - adds r2, r0, #0 - cmp r2, #0 - beq _08045EBA - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r2, #0x36] - subs r0, #0xc - strh r0, [r2, #0x36] - adds r0, r2, #0 - movs r1, #2 - bl SetDefaultPriority -_08045EBA: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0800445C - pop {r4, pc} - - thumb_func_start sub_08045EC8 -sub_08045EC8: @ 0x08045EC8 - push {lr} - movs r1, #0 - bl sub_0807DD94 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08045ED4 -sub_08045ED4: @ 0x08045ED4 - push {lr} - bl sub_08045FA0 - pop {pc} - - thumb_func_start sub_08045EDC -sub_08045EDC: @ 0x08045EDC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xd] - adds r1, r0, #0 - cmp r1, #0 - bne _08045F00 - adds r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x20 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - adds r0, r4, #0 - bl sub_08045F98 - adds r0, r4, #0 - movs r1, #2 - bl sub_08046030 -_08045F00: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0804604C - adds r3, r4, #0 - adds r3, #0x5a - ldrb r1, [r3] - movs r2, #1 - ands r2, r1 - cmp r2, #0 - beq _08045F38 - movs r0, #0xfe - ands r0, r1 - strb r0, [r3] - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - adds r0, r4, #0 - bl sub_080954AC - ldr r0, _08045F34 @ =0x0000018D - bl EnqueueSFX - b _08045F4E - .align 2, 0 -_08045F34: .4byte 0x0000018D -_08045F38: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08045F4E - movs r0, #5 - strb r0, [r4, #0xc] - strb r2, [r4, #0xd] - adds r0, r4, #0 - movs r1, #1 - bl sub_08046030 -_08045F4E: - pop {r4, pc} - - thumb_func_start nullsub_25 -nullsub_25: @ 0x08045F50 - bx lr - .align 2, 0 - - thumb_func_start sub_08045F54 -sub_08045F54: @ 0x08045F54 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - movs r0, #1 - bl sub_08049DF4 - adds r4, r0, #0 - cmp r4, #0 - beq _08045F90 - adds r0, r6, #0 - adds r1, r4, #0 - movs r2, #0x20 - movs r3, #0x20 - bl EntityInRectRadius - cmp r0, #0 - bne _08045F90 - cmp r5, #2 - beq _08045F94 - movs r3, #0x50 - cmp r5, #0 - beq _08045F82 - movs r3, #0x58 -_08045F82: - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r3, #0 - bl EntityInRectRadius - cmp r0, #0 - bne _08045F94 -_08045F90: - movs r0, #0 - b _08045F96 -_08045F94: - movs r0, #1 -_08045F96: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08045F98 -sub_08045F98: @ 0x08045F98 - movs r1, #0x10 - strb r1, [r0, #0x15] - movs r0, #1 - bx lr - - thumb_func_start sub_08045FA0 -sub_08045FA0: @ 0x08045FA0 - push {lr} - adds r2, r0, #0 - movs r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r3] - adds r0, r2, #0 - adds r0, #0x78 - ldrh r0, [r0] - movs r1, #0 - strh r0, [r2, #0x2e] - adds r0, r2, #0 - adds r0, #0x7a - ldrh r0, [r0] - strh r0, [r2, #0x32] - adds r0, r2, #0 - adds r0, #0x62 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, r2, #0 - movs r1, #0 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_08045FF0 -sub_08045FF0: @ 0x08045FF0 - push {r4, lr} - adds r4, r0, #0 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_08045F98 - adds r0, r4, #0 - movs r1, #1 - bl sub_08046030 - pop {r4, pc} - - thumb_func_start sub_08046030 -sub_08046030: @ 0x08046030 - push {lr} - adds r3, r1, #0 - ldrb r1, [r0, #0x15] - lsrs r1, r1, #3 - ldr r2, _08046048 @ =gUnk_080D1A38 - adds r3, r3, r2 - ldrb r2, [r3] - orrs r1, r2 - bl InitializeAnimation - pop {pc} - .align 2, 0 -_08046048: .4byte gUnk_080D1A38 - - thumb_func_start sub_0804604C -sub_0804604C: @ 0x0804604C - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - cmp r0, #0 - beq _08046070 - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xf - bhi _08046070 - ldr r1, _08046074 @ =gUnk_080D1A3E - ldrb r0, [r2, #0xe] - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r2, #0 - adds r0, #0x63 - strb r1, [r0] -_08046070: - pop {pc} - .align 2, 0 -_08046074: .4byte gUnk_080D1A3E - - thumb_func_start sub_08046078 -sub_08046078: @ 0x08046078 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldr r0, _08046114 @ =gPlayerState - adds r0, #0x27 - movs r1, #0 - strb r1, [r0] - ldr r4, _08046118 @ =gUnk_080D1A4E - ldr r6, _0804611C @ =gRoomControls - movs r5, #4 -_0804608A: - adds r0, r7, #0 - movs r1, #2 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _080460AE - ldrh r0, [r4] - ldrh r2, [r6, #6] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - adds r4, #2 - ldrh r0, [r4] - ldrh r2, [r6, #8] - adds r0, r0, r2 - strh r0, [r1, #0x32] - adds r4, #2 -_080460AE: - subs r5, #1 - cmp r5, #0 - bge _0804608A - movs r0, #0xb7 - lsls r0, r0, #1 - bl EnqueueSFX - ldr r0, _08046120 @ =0x000007A2 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _08046124 @ =0x000007A3 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _08046128 @ =0x000007A5 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _0804612C @ =0x000007A6 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _08046130 @ =0x000007A7 - movs r1, #1 - bl sub_0807BA8C - adds r0, r7, #0 - movs r1, #0x43 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08046102 - adds r0, r7, #0 - bl CopyPosition - movs r0, #0xc2 - lsls r0, r0, #1 - bl EnqueueSFX -_08046102: - ldr r1, [r7, #0x54] - cmp r1, #0 - beq _0804610C - movs r0, #0xff - strb r0, [r1, #0xc] -_0804610C: - adds r0, r7, #0 - bl sub_0804AA1C - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08046114: .4byte gPlayerState -_08046118: .4byte gUnk_080D1A4E -_0804611C: .4byte gRoomControls -_08046120: .4byte 0x000007A2 -_08046124: .4byte 0x000007A3 -_08046128: .4byte 0x000007A5 -_0804612C: .4byte 0x000007A6 -_08046130: .4byte 0x000007A7 diff --git a/assets/assets.json b/assets/assets.json index f373e164..190083ac 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -28557,21 +28557,6 @@ "size": 11, "type": "animation" }, - { - "path": "businessScrubPrologue/gUnk_080D1A38.bin", - "start": 858680, - "size": 6 - }, - { - "path": "businessScrubPrologue/gUnk_080D1A3E.bin", - "start": 858686, - "size": 16 - }, - { - "path": "businessScrubPrologue/gUnk_080D1A4E.bin", - "start": 858702, - "size": 22 - }, { "path": "animations/gSpriteAnimations_GyorgMale_0.bin", "start": 859248, diff --git a/data/const/enemy/businessScrubPrologue.s b/data/const/enemy/businessScrubPrologue.s deleted file mode 100644 index c3ba1571..00000000 --- a/data/const/enemy/businessScrubPrologue.s +++ /dev/null @@ -1,33 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D19FC:: @ 080D19FC - .4byte sub_08045B98 - .4byte sub_08045BC8 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte nullsub_174 - -gUnk_080D1A14:: @ 080D1A14 - .4byte sub_08045C3C - .4byte sub_08045CA4 - .4byte nullsub_24 - .4byte sub_08045CE0 - .4byte sub_08045E14 - .4byte sub_08045EC8 - .4byte sub_08045ED4 - .4byte sub_08045EDC - .4byte nullsub_25 - -gUnk_080D1A38:: @ 080D1A38 - .incbin "businessScrubPrologue/gUnk_080D1A38.bin" - -gUnk_080D1A3E:: @ 080D1A3E - .incbin "businessScrubPrologue/gUnk_080D1A3E.bin" - -gUnk_080D1A4E:: @ 080D1A4E - .incbin "businessScrubPrologue/gUnk_080D1A4E.bin" diff --git a/linker.ld b/linker.ld index 90d04c6d..e56c5647 100644 --- a/linker.ld +++ b/linker.ld @@ -415,7 +415,7 @@ SECTIONS { src/enemy/fireballGuy.o(.text); src/enemy/miniFireballGuy.o(.text); src/enemy/vaatiTransfiguredEye.o(.text); - asm/enemy/businessScrubPrologue.o(.text); + src/enemy/businessScrubPrologue.o(.text); src/enemy/gyorgFemale.o(.text); src/enemy/gyorgMale.o(.text); src/enemy/curtain.o(.text); @@ -1099,7 +1099,7 @@ SECTIONS { data/const/enemy/miniFireballGuy.o(.rodata); src/enemy/vaatiTransfiguredEye.o(.rodata); data/animations/enemy/vaatiTransfiguredEye.o(.rodata); - data/const/enemy/businessScrubPrologue.o(.rodata); + src/enemy/businessScrubPrologue.o(.rodata); src/enemy/gyorgFemale.o(.rodata); src/enemy/gyorgMale.o(.rodata); data/animations/enemy/gyorgMale.o(.rodata); diff --git a/src/enemy/businessScrubPrologue.c b/src/enemy/businessScrubPrologue.c new file mode 100644 index 00000000..5ba29afd --- /dev/null +++ b/src/enemy/businessScrubPrologue.c @@ -0,0 +1,349 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "enemy.h" +#include "functions.h" + +typedef struct { + Entity base; + u8 filler[0x10]; + u16 unk_78; + u16 unk_7a; + u8 unk_7c; + u8 unk_7d; + u8 unk_7e; + u8 unk_7f; + u32 filler2; + u32 unk_84; +} BusinessScrubPrologueEntity; + +extern u16 script_BusinessScrubIntro[]; + +void (*const gUnk_080D19FC[])(Entity*); +void (*const gUnk_080D1A14[])(BusinessScrubPrologueEntity*); +const u8 gUnk_080D1A38[]; +const s8 gUnk_080D1A3E[]; +const u16 gUnk_080D1A4E[]; + +extern void sub_08095C48(Entity* this); +extern void sub_080954AC(Entity*, u32); + +void sub_08046030(BusinessScrubPrologueEntity*, u32); +bool32 sub_08045F54(BusinessScrubPrologueEntity*, u32); +void sub_08045FF0(BusinessScrubPrologueEntity*); +bool32 sub_08045F98(BusinessScrubPrologueEntity*); +void sub_0804604C(BusinessScrubPrologueEntity*); +void sub_08045FA0(BusinessScrubPrologueEntity*); + +void BusinessScrubPrologue(Entity* this) { + EnemyFunctionHandler(this, gUnk_080D19FC); +} + +void sub_08045B98(BusinessScrubPrologueEntity* this) { + super->spriteSettings.draw = 1; + gUnk_080D1A14[super->action](this); + sub_0800445C(super); +} + +void sub_08045BC8(BusinessScrubPrologueEntity* this) { + Entity* ent; + if (super->hitType == 1) { + if ((super->bitfield & 0x7f) == 0x42) { + super->action = 4; + super->subAction = 0; + super->actionDelay = 0x28; + super->flags &= ~ENT_COLLIDE; + sub_08046030(this, 4); + ent = CreateFx(super, FX_BUSH, 0); + if (ent) { + ent->z.HALF.HI -= 8; + } + + gPlayerState.field_0x27[0] = 0xff; + EnqueueSFX(SFX_EM_DEKUSCRUB_HIT); + SetDefaultPriority(super, PRIO_MESSAGE); + } + } +} + +void nullsub_174(BusinessScrubPrologueEntity* this) { +} + +void sub_08045C3C(BusinessScrubPrologueEntity* this) { + super->field_0xf = 0; + this->unk_78 = super->x.HALF.HI; + this->unk_7a = super->y.HALF.HI; + super->animationState = 0; + super->direction = 0x10; + super->action = 5; + super->actionDelay = 0x78; + super->spritePriority.b1 = 1; + super->spriteSettings.draw = 1; + sub_08046030(this, 0); + sub_08095C48(super); + StartCutscene(super, script_BusinessScrubIntro); + sub_0807DD50(super); +} + +void sub_08045CA4(BusinessScrubPrologueEntity* this) { + super->spriteSettings.draw = 0; + if (super->actionDelay) { + super->actionDelay--; + } else if (sub_08045F54(this, 0)) { + sub_08045FF0(this); + super->subAction = 0; + super->field_0xf = 1; + } +} + +void nullsub_24(BusinessScrubPrologueEntity* this) { +} + +void sub_08045CE0(BusinessScrubPrologueEntity* this) { + Entity* ent; + u32 r6; + GetNextFrame(super); + + switch (super->subAction) { + case 0: + r6 = 1; + if (super->frame & 0x80) { + super->subAction = 1; + super->actionDelay = 0x3c; + super->field_0xf = 0x10; + sub_08045F98(this); + sub_08046030(this, 1); + } + break; + case 1: + r6 = 1; + if (--super->actionDelay == 0) { + super->subAction = 2; + super->actionDelay = 0x20; + super->field_0xf = 0; + sub_08045F98(this); + sub_08046030(this, 2); + } + break; + case 2: + r6 = 1; + sub_0804604C(this); + if (super->frame & 1) { + ent = CreateProjectileWithParent(super, DEKU_SEED_PROJECTILE, 0); + if (ent) { + ent->parent = super; + ent->direction = super->direction; + super->frame &= 0xfe; + super->subAction = 3; + } + } + break; + case 3: + r6 = 2; + if (super->frame & 0x80) { + super->subAction = 4; + super->actionDelay = 0x50; + sub_08046030(this, 1); + } + break; + case 4: + r6 = 2; + if (--super->actionDelay == 0) { + if (sub_08045F54(this, 0)) { + super->subAction = 1; + super->actionDelay = 0x3c; + super->field_0xf = 0x10; + sub_08045F98(this); + } else { + sub_08045FA0(this); + super->actionDelay = 0x50; + super->field_0xf = 0; + } + } + break; + } + + if (sub_08045F54(this, r6) == 0) { + sub_08045FA0(this); + super->subAction = 0; + super->actionDelay = 0; + super->field_0xf = 0; + } +} + +void sub_08045E14(BusinessScrubPrologueEntity* this) { + Entity* ent; + gPlayerState.field_0x27[0] = 0xff; + switch (super->subAction) { + case 0: + if (super->actionDelay == 0) { + if (super->frame & 0x80) { + super->subAction = 1; + sub_08045F98(this); + sub_08046030(this, 5); + super->spritePriority.b1 = 1; + } + } else { + super->actionDelay--; + } + break; + case 1: + if (super->frame & 0x80) { + super->action = 5; + super->subAction = 0; + sub_08046030(this, 0); + ent = sub_0804A9FC(super, 0x1c); + if (ent) { + ent->spritePriority.b0 = 3; + ent->z.HALF.HI -= 0xc; + SetDefaultPriority(ent, PRIO_MESSAGE); + } + } + break; + } + + GetNextFrame(super); + sub_0800445C(super); +} + +void sub_08045EC8(BusinessScrubPrologueEntity* this) { + sub_0807DD94(super, 0); +} + +void sub_08045ED4(BusinessScrubPrologueEntity* this) { + sub_08045FA0(this); +} + +void sub_08045EDC(BusinessScrubPrologueEntity* this) { + if (super->subAction == 0) { + super->subAction++; + super->actionDelay = 0x20; + super->field_0xf = 0; + sub_08045F98(this); + sub_08046030(this, 2); + } + + GetNextFrame(super); + sub_0804604C(this); + if (super->frame & 1) { + super->frame &= 0xfe; + sub_080954AC(super, this->unk_84); + EnqueueSFX(SFX_18D); + } else if (super->frame & 0x80) { + super->action = 5; + super->subAction = 0; + sub_08046030(this, 1); + } +} + +void nullsub_25(BusinessScrubPrologueEntity* this) { +} + +bool32 sub_08045F54(BusinessScrubPrologueEntity* this, u32 arg2) { + Entity* ent = sub_08049DF4(1); + u32 r3; + if (ent == NULL) + return 0; + + if (EntityInRectRadius(super, ent, 0x20, 0x20)) + return 0; + if (arg2 == 2) + return 1; + r3 = 0x50; + if (arg2) { + r3 = 0x58; + } + + if (EntityInRectRadius(super, ent, r3, r3)) + return 1; + return 0; +} + +bool32 sub_08045F98(BusinessScrubPrologueEntity* this) { + super->direction = 0x10; + return 1; +} + +void sub_08045FA0(BusinessScrubPrologueEntity* this) { + super->action = 1; + COLLISION_OFF(super); + super->spriteSettings.draw = 0; + super->spritePriority.b1 = 0; + super->x.HALF.HI = this->unk_78; + super->y.HALF.HI = this->unk_7a; + super->spriteOffsetX = 0; + super->spriteOffsetY = 0; + InitializeAnimation(super, 0); +} + +void sub_08045FF0(BusinessScrubPrologueEntity* this) { + super->action = 3; + COLLISION_ON(super); + super->spriteSettings.draw = 1; + super->spritePriority.b1 = 1; + sub_08045F98(this); + sub_08046030(this, 1); +} + +void sub_08046030(BusinessScrubPrologueEntity* this, u32 arg2) { + InitializeAnimation(super, (super->direction >> 3) | gUnk_080D1A38[arg2]); +} + +void sub_0804604C(BusinessScrubPrologueEntity* this) { + if (super->actionDelay) { + if (--super->actionDelay <= 0xf) { + super->spriteOffsetY = gUnk_080D1A3E[super->actionDelay]; + } + } +} + +void sub_08046078(BusinessScrubPrologueEntity* this) { + s32 index; + Entity* ent; + const u16* ptr; + gPlayerState.field_0x27[0] = 0; + ptr = gUnk_080D1A4E; + for (index = 0; index <= 4; index++) { + ent = CreateFx(super, FX_DEATH, 0x40); + + if (ent) { + ent->x.HALF.HI = gRoomControls.origin_x + *ptr; + ptr++; + ent->y.HALF.HI = gRoomControls.origin_y + *ptr; + ptr++; + } + } + + EnqueueSFX(SFX_16E); + sub_0807BA8C(0x7a2, 1); + sub_0807BA8C(0x7a3, 1); + sub_0807BA8C(0x7a5, 1); + sub_0807BA8C(0x7a6, 1); + sub_0807BA8C(0x7a7, 1); + + ent = CreateFx(super, FX_BIG_EXPLOSION2, 0x40); + if (ent) { + CopyPosition(super, ent); + EnqueueSFX(SFX_184); + } + + if (super->child) { + super->child->action = 0xff; + } + + sub_0804AA1C(super); +} + +void (*const gUnk_080D19FC[])(Entity*) = { + (EntityActionPtr)sub_08045B98, (EntityActionPtr)sub_08045BC8, sub_08001324, sub_0804A7D4, sub_08001242, + (EntityActionPtr)nullsub_174, +}; + +void (*const gUnk_080D1A14[])(BusinessScrubPrologueEntity*) = { + sub_08045C3C, sub_08045CA4, nullsub_24, sub_08045CE0, sub_08045E14, + sub_08045EC8, sub_08045ED4, sub_08045EDC, nullsub_25, +}; + +const u8 gUnk_080D1A38[] = { 0, 4, 8, 12, 16, 20 }; + +const s8 gUnk_080D1A3E[] = { 0, -1, -2, -3, -4, -5, -6, -7, -7, -6, -5, -4, -3, -2, -1, 0 }; +const u16 gUnk_080D1A4E[] = { 0x228, 0x1e8, 0x238, 0x1e8, 0x258, 0x1e8, 0x268, 0x1e8, 0x278, 0x1e8, 0 }; diff --git a/src/object/object6A.c b/src/object/object6A.c index 29dcb2ef..5dfb115e 100644 --- a/src/object/object6A.c +++ b/src/object/object6A.c @@ -647,7 +647,7 @@ void sub_0809545C(Object6AEntity* this, ScriptExecutionContext* ctx) { } } -void sub_080954AC(Object6AEntity* this) { +void sub_080954AC(Object6AEntity* this, u32 arg2) { Entity* e = CreateObject(OBJECT_6A, 0x1A, 0); if (e != NULL) { CopyPosition(super, e); @@ -997,12 +997,12 @@ void sub_08095C00(Object6AEntity* this) { } } -void sub_08095C48(Object6AEntity* this) { +void sub_08095C48(Entity* this) { Entity* e = CreateObject(OBJECT_6A, 0x19, 0); if (e != NULL) { - super->child = e; - e->parent = super; - CopyPosition(super, e); + this->child = e; + e->parent = this; + CopyPosition(this, e); } }