summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTal Hayon <talhayon1@gmail.com>2022-01-30 00:28:48 +0200
committerTal Hayon <talhayon1@gmail.com>2022-01-30 00:28:48 +0200
commitbdb4aaef1782325ef555acd07fca71ec2e9c907c (patch)
tree94215cc621cd7563137c36f070df235771103cfa
parentfd9049f59801a77ced44d85329ee871fda031d22 (diff)
Decompile businessScrubPrologue
-rw-r--r--asm/enemy/businessScrubPrologue.s747
-rw-r--r--assets/assets.json15
-rw-r--r--data/const/enemy/businessScrubPrologue.s33
-rw-r--r--linker.ld4
-rw-r--r--src/enemy/businessScrubPrologue.c349
-rw-r--r--src/object/object6A.c10
6 files changed, 356 insertions, 802 deletions
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
@@ -28558,21 +28558,6 @@
"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,
"size": 33,
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);
}
}