Decompile businessScrubPrologue

This commit is contained in:
Tal Hayon 2022-01-30 00:28:48 +02:00
parent fd9049f598
commit bdb4aaef17
6 changed files with 356 additions and 802 deletions

View File

@ -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

View File

@ -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,

View File

@ -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"

View File

@ -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);

View File

@ -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 };

View File

@ -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);
}
}