mirror of https://github.com/zeldaret/tmc.git
Decompile ballChainSoldier
This commit is contained in:
parent
fd9049f598
commit
1c8f403340
|
@ -1,797 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start BallChainSoldier
|
||||
BallChainSoldier: @ 0x0803E528
|
||||
push {lr}
|
||||
ldr r1, _0803E534 @ =gUnk_080D06E0
|
||||
bl EnemyFunctionHandler
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0803E534: .4byte gUnk_080D06E0
|
||||
|
||||
thumb_func_start sub_0803E538
|
||||
sub_0803E538: @ 0x0803E538
|
||||
push {lr}
|
||||
ldr r2, _0803E54C @ =gUnk_080D06F8
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0803E54C: .4byte gUnk_080D06F8
|
||||
|
||||
thumb_func_start sub_0803E550
|
||||
sub_0803E550: @ 0x0803E550
|
||||
push {lr}
|
||||
ldr r1, _0803E55C @ =gUnk_080D06E0
|
||||
bl sub_0804AA30
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0803E55C: .4byte gUnk_080D06E0
|
||||
|
||||
thumb_func_start sub_0803E560
|
||||
sub_0803E560: @ 0x0803E560
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_08001324
|
||||
|
||||
thumb_func_start sub_0803E568
|
||||
sub_0803E568: @ 0x0803E568
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E538
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803E570
|
||||
sub_0803E570: @ 0x0803E570
|
||||
push {lr}
|
||||
movs r1, #0xff
|
||||
movs r2, #0x57
|
||||
bl CreateDeathFx
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start nullsub_20
|
||||
nullsub_20: @ 0x0803E57C
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E580
|
||||
sub_0803E580: @ 0x0803E580
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
bl sub_0804A720
|
||||
adds r0, r5, #0
|
||||
movs r1, #0x19
|
||||
movs r2, #0
|
||||
bl CreateProjectileWithParent
|
||||
cmp r0, #0
|
||||
beq _0803E5E4
|
||||
str r5, [r0, #0x50]
|
||||
str r0, [r5, #0x54]
|
||||
ldrb r1, [r5, #0x10]
|
||||
movs r0, #0x80
|
||||
movs r4, #0
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
ldrb r1, [r5, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x18]
|
||||
bl Random
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
strb r0, [r5, #0x14]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x7b
|
||||
strb r4, [r0]
|
||||
adds r0, #1
|
||||
strb r4, [r0]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x7e
|
||||
movs r0, #0x20
|
||||
strb r0, [r1]
|
||||
adds r1, #1
|
||||
movs r0, #0xfe
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r5, #0x14]
|
||||
lsls r1, r1, #2
|
||||
adds r0, r5, #0
|
||||
bl InitAnimationForceUpdate
|
||||
adds r0, r5, #0
|
||||
bl sub_0803E86C
|
||||
_0803E5E4:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E5E8
|
||||
sub_0803E5E8: @ 0x0803E5E8
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x7c
|
||||
ldrb r1, [r0]
|
||||
subs r1, #0xa
|
||||
strb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9A4
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9D4
|
||||
cmp r0, #0
|
||||
bne _0803E61A
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x78
|
||||
ldrh r0, [r1]
|
||||
subs r0, #1
|
||||
strh r0, [r1]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
bne _0803E61A
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E8CC
|
||||
_0803E61A:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803E61C
|
||||
sub_0803E61C: @ 0x0803E61C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x7c
|
||||
ldrb r1, [r0]
|
||||
subs r1, #0xa
|
||||
strb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9A4
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9D4
|
||||
cmp r0, #0
|
||||
bne _0803E66A
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x42
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _0803E654
|
||||
adds r0, r4, #0
|
||||
bl ProcessMovement
|
||||
cmp r0, #0
|
||||
bne _0803E654
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E86C
|
||||
b _0803E66A
|
||||
_0803E654:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x78
|
||||
ldrh r0, [r1]
|
||||
subs r0, #1
|
||||
strh r0, [r1]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
bne _0803E66A
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E92C
|
||||
_0803E66A:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803E66C
|
||||
sub_0803E66C: @ 0x0803E66C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7c
|
||||
ldrb r0, [r1]
|
||||
subs r0, #0x10
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9A4
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7e
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0x21
|
||||
bhi _0803E68E
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
_0803E68E:
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl sub_08049FDC
|
||||
cmp r0, #0
|
||||
beq _0803E6A4
|
||||
adds r0, r4, #0
|
||||
bl sub_0803EA64
|
||||
cmp r0, #0
|
||||
bne _0803E6B0
|
||||
_0803E6A4:
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7b
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
_0803E6B0:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E6B4
|
||||
sub_0803E6B4: @ 0x0803E6B4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7c
|
||||
ldrb r0, [r1]
|
||||
subs r0, #0xa
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9A4
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7e
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0x20
|
||||
bls _0803E6D8
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
b _0803E6DE
|
||||
_0803E6D8:
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E86C
|
||||
_0803E6DE:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803E6E0
|
||||
sub_0803E6E0: @ 0x0803E6E0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x7c
|
||||
ldrb r1, [r0]
|
||||
subs r1, #0xc
|
||||
strb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9A4
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7e
|
||||
ldrb r0, [r1]
|
||||
subs r0, #4
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bgt _0803E718
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
movs r0, #6
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x14]
|
||||
adds r1, #0x20
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_0803E718:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E71C
|
||||
sub_0803E71C: @ 0x0803E71C
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r0, [r2, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r2, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r3, r0, #0x18
|
||||
cmp r3, #0
|
||||
bne _0803E756
|
||||
movs r0, #7
|
||||
strb r0, [r2, #0xc]
|
||||
movs r0, #1
|
||||
strb r0, [r2, #0xe]
|
||||
ldr r1, _0803E758 @ =gUnk_080D0724
|
||||
ldrb r0, [r2, #0x14]
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r0]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x7c
|
||||
strb r1, [r0]
|
||||
subs r0, #1
|
||||
strb r3, [r0]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x7f
|
||||
movs r0, #0xf6
|
||||
strb r0, [r1]
|
||||
adds r0, #0x65
|
||||
bl EnqueueSFX
|
||||
_0803E756:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0803E758: .4byte gUnk_080D0724
|
||||
|
||||
thumb_func_start sub_0803E75C
|
||||
sub_0803E75C: @ 0x0803E75C
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0803E774
|
||||
adds r0, r2, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
b _0803E7B0
|
||||
_0803E774:
|
||||
ldrb r0, [r2, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r2, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x7f
|
||||
cmp r0, #0
|
||||
bne _0803E78E
|
||||
movs r0, #2
|
||||
strb r0, [r2, #0xe]
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
_0803E78E:
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _0803E7A0
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x7e
|
||||
ldrb r0, [r1]
|
||||
adds r0, #5
|
||||
strb r0, [r1]
|
||||
b _0803E7B0
|
||||
_0803E7A0:
|
||||
movs r0, #8
|
||||
strb r0, [r2, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r2, #0xe]
|
||||
movs r0, #8
|
||||
movs r1, #0
|
||||
bl InitScreenShake
|
||||
_0803E7B0:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E7B4
|
||||
sub_0803E7B4: @ 0x0803E7B4
|
||||
push {lr}
|
||||
adds r1, r0, #0
|
||||
ldrb r0, [r1, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r1, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0803E7C8
|
||||
movs r0, #9
|
||||
strb r0, [r1, #0xc]
|
||||
_0803E7C8:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E7CC
|
||||
sub_0803E7CC: @ 0x0803E7CC
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x7e
|
||||
ldrb r0, [r1]
|
||||
subs r0, #2
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0xa
|
||||
bhi _0803E806
|
||||
movs r0, #0xa
|
||||
strb r0, [r2, #0xc]
|
||||
movs r0, #0x5a
|
||||
strb r0, [r2, #0xe]
|
||||
ldrb r0, [r2, #0x14]
|
||||
lsls r0, r0, #3
|
||||
strb r0, [r2, #0x15]
|
||||
subs r1, #2
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
adds r1, #3
|
||||
movs r0, #0xfe
|
||||
strb r0, [r1]
|
||||
adds r0, r2, #0
|
||||
movs r1, #0x10
|
||||
bl sub_0803E94C
|
||||
b _0803E814
|
||||
_0803E806:
|
||||
cmp r0, #0x12
|
||||
bhi _0803E814
|
||||
ldr r2, [r2, #0x54]
|
||||
ldrb r1, [r2, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x10]
|
||||
_0803E814:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E818
|
||||
sub_0803E818: @ 0x0803E818
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _0803E840
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0803E868
|
||||
ldr r0, [r4, #0x54]
|
||||
ldrb r1, [r0, #0x10]
|
||||
movs r2, #0x80
|
||||
orrs r1, r2
|
||||
strb r1, [r0, #0x10]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0803E94C
|
||||
b _0803E868
|
||||
_0803E840:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7c
|
||||
ldrb r0, [r1]
|
||||
subs r0, #0xa
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E9A4
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7e
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0x1f
|
||||
bls _0803E868
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E86C
|
||||
_0803E868:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0803E86C
|
||||
sub_0803E86C: @ 0x0803E86C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #1
|
||||
bl sub_08049FDC
|
||||
cmp r0, #0
|
||||
beq _0803E898
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x50
|
||||
bl sub_0803EAD0
|
||||
cmp r0, #0
|
||||
beq _0803E898
|
||||
ldr r0, _0803E8C4 @ =gUnk_020000B0
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl GetFacingDirection
|
||||
adds r0, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x15]
|
||||
_0803E898:
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
ldr r2, _0803E8C8 @ =gUnk_080D0728
|
||||
movs r1, #3
|
||||
ands r1, r0
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r2
|
||||
ldrh r1, [r1]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x78
|
||||
strh r1, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7a
|
||||
movs r0, #4
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0803E94C
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0803E8C4: .4byte gUnk_020000B0
|
||||
_0803E8C8: .4byte gUnk_080D0728
|
||||
|
||||
thumb_func_start sub_0803E8CC
|
||||
sub_0803E8CC: @ 0x0803E8CC
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl Random
|
||||
adds r5, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl sub_08049FA0
|
||||
cmp r0, #0
|
||||
bne _0803E8F4
|
||||
movs r0, #3
|
||||
ands r0, r5
|
||||
cmp r0, #0
|
||||
beq _0803E8F4
|
||||
adds r0, r4, #0
|
||||
bl sub_08049EE4
|
||||
adds r0, #4
|
||||
movs r1, #0x18
|
||||
b _0803E8F8
|
||||
_0803E8F4:
|
||||
movs r1, #0x18
|
||||
adds r0, r5, #0
|
||||
_0803E8F8:
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x15]
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r2, _0803E928 @ =gUnk_080D0730
|
||||
lsrs r0, r5, #0x10
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x78
|
||||
strh r1, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7a
|
||||
movs r0, #4
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x10
|
||||
bl sub_0803E94C
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0803E928: .4byte gUnk_080D0730
|
||||
|
||||
thumb_func_start sub_0803E92C
|
||||
sub_0803E92C: @ 0x0803E92C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl Random
|
||||
movs r1, #1
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
beq _0803E944
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E86C
|
||||
b _0803E94A
|
||||
_0803E944:
|
||||
adds r0, r4, #0
|
||||
bl sub_0803E8CC
|
||||
_0803E94A:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803E94C
|
||||
sub_0803E94C: @ 0x0803E94C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r3, r0, #0
|
||||
adds r6, r1, #0
|
||||
ldrb r2, [r3, #0x15]
|
||||
adds r0, r2, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
asrs r4, r0, #3
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x58
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x10
|
||||
ands r0, r1
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, r6
|
||||
bne _0803E988
|
||||
movs r0, #7
|
||||
ands r0, r2
|
||||
ldrb r5, [r3, #0x14]
|
||||
cmp r0, #4
|
||||
bne _0803E984
|
||||
lsrs r0, r2, #3
|
||||
subs r0, r5, r0
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
cmp r0, #1
|
||||
ble _0803E9A2
|
||||
_0803E984:
|
||||
cmp r4, r5
|
||||
beq _0803E9A2
|
||||
_0803E988:
|
||||
strb r4, [r3, #0x14]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x58
|
||||
ldrb r1, [r0]
|
||||
movs r0, #3
|
||||
ands r0, r1
|
||||
adds r0, r6, r0
|
||||
lsls r1, r4, #2
|
||||
adds r4, r0, r1
|
||||
adds r0, r3, #0
|
||||
adds r1, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_0803E9A2:
|
||||
pop {r4, r5, r6, pc}
|
||||
|
||||
thumb_func_start sub_0803E9A4
|
||||
sub_0803E9A4: @ 0x0803E9A4
|
||||
push {r4, lr}
|
||||
adds r2, r0, #0
|
||||
adds r0, #0x7c
|
||||
ldrb r0, [r0]
|
||||
adds r0, #0x20
|
||||
movs r1, #0xff
|
||||
ands r0, r1
|
||||
asrs r4, r0, #6
|
||||
adds r3, r2, #0
|
||||
adds r3, #0x58
|
||||
ldrb r1, [r3]
|
||||
movs r0, #3
|
||||
ands r0, r1
|
||||
cmp r0, r4
|
||||
beq _0803E9D2
|
||||
ldrb r1, [r3]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r1, r0
|
||||
adds r1, r4, r1
|
||||
adds r0, r2, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_0803E9D2:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803E9D4
|
||||
sub_0803E9D4: @ 0x0803E9D4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #1
|
||||
bl sub_08049FDC
|
||||
cmp r0, #0
|
||||
beq _0803EA58
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x38
|
||||
bl sub_0803EAD0
|
||||
cmp r0, #0
|
||||
beq _0803EA10
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r0, _0803EA0C @ =gUnk_020000B0
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl GetFacingDirection
|
||||
adds r0, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x15]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7b
|
||||
movs r0, #1
|
||||
b _0803EA46
|
||||
.align 2, 0
|
||||
_0803EA0C: .4byte gUnk_020000B0
|
||||
_0803EA10:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x4e
|
||||
bl sub_0803EAD0
|
||||
cmp r0, #0
|
||||
beq _0803EA58
|
||||
ldr r0, _0803EA54 @ =gUnk_020000B0
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
movs r2, #0x12
|
||||
bl sub_0804A044
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0xff
|
||||
beq _0803EA58
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7a
|
||||
ldrb r0, [r1]
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0803EA60
|
||||
movs r0, #5
|
||||
strb r0, [r4, #0xc]
|
||||
strb r2, [r4, #0x15]
|
||||
movs r0, #4
|
||||
_0803EA46:
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0803E94C
|
||||
movs r0, #1
|
||||
b _0803EA62
|
||||
.align 2, 0
|
||||
_0803EA54: .4byte gUnk_020000B0
|
||||
_0803EA58:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7a
|
||||
movs r0, #4
|
||||
strb r0, [r1]
|
||||
_0803EA60:
|
||||
movs r0, #0
|
||||
_0803EA62:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803EA64
|
||||
sub_0803EA64: @ 0x0803EA64
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #1
|
||||
bl sub_08049FDC
|
||||
cmp r0, #0
|
||||
beq _0803EAC4
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x4e
|
||||
bl sub_0803EAD0
|
||||
cmp r0, #0
|
||||
beq _0803EAB8
|
||||
ldr r0, _0803EAB4 @ =gUnk_020000B0
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
movs r2, #0x12
|
||||
bl sub_0804A044
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0xff
|
||||
beq _0803EAB8
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7a
|
||||
ldrb r0, [r1]
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0803EAAE
|
||||
movs r0, #5
|
||||
strb r0, [r4, #0xc]
|
||||
strb r2, [r4, #0x15]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0803E94C
|
||||
_0803EAAE:
|
||||
movs r0, #1
|
||||
b _0803EACE
|
||||
.align 2, 0
|
||||
_0803EAB4: .4byte gUnk_020000B0
|
||||
_0803EAB8:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x38
|
||||
bl sub_0803EAD0
|
||||
cmp r0, #0
|
||||
bne _0803EAAE
|
||||
_0803EAC4:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x7a
|
||||
movs r0, #4
|
||||
strb r0, [r1]
|
||||
movs r0, #0
|
||||
_0803EACE:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0803EAD0
|
||||
sub_0803EAD0: @ 0x0803EAD0
|
||||
push {r4, lr}
|
||||
adds r3, r1, #0
|
||||
ldr r1, _0803EAE8 @ =gUnk_020000B0
|
||||
ldr r2, [r1]
|
||||
movs r4, #0x2e
|
||||
ldrsh r1, [r2, r4]
|
||||
movs r4, #0x32
|
||||
ldrsh r2, [r2, r4]
|
||||
subs r2, #4
|
||||
bl EntityWithinDistance
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0803EAE8: .4byte gUnk_020000B0
|
|
@ -27771,11 +27771,6 @@
|
|||
"size": 13,
|
||||
"type": "animation"
|
||||
},
|
||||
{
|
||||
"path": "ballChainSoldier/gUnk_080D0724.bin",
|
||||
"start": 853796,
|
||||
"size": 4
|
||||
},
|
||||
{
|
||||
"path": "ballChainSoldier/gUnk_080D0728.bin",
|
||||
"start": 853800,
|
||||
|
|
|
@ -4,36 +4,6 @@
|
|||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_080D06E0:: @ 080D06E0
|
||||
.4byte sub_0803E538
|
||||
.4byte sub_0803E550
|
||||
.4byte sub_0803E560
|
||||
.4byte sub_0803E570
|
||||
.4byte sub_08001242
|
||||
.4byte nullsub_20
|
||||
|
||||
gUnk_080D06F8:: @ 080D06F8
|
||||
.4byte sub_0803E580
|
||||
.4byte sub_0803E5E8
|
||||
.4byte sub_0803E61C
|
||||
.4byte sub_0803E66C
|
||||
.4byte sub_0803E6B4
|
||||
.4byte sub_0803E6E0
|
||||
.4byte sub_0803E71C
|
||||
.4byte sub_0803E75C
|
||||
.4byte sub_0803E7B4
|
||||
.4byte sub_0803E7CC
|
||||
.4byte sub_0803E818
|
||||
|
||||
gUnk_080D0724:: @ 080D0724
|
||||
.incbin "ballChainSoldier/gUnk_080D0724.bin"
|
||||
|
||||
gUnk_080D0728:: @ 080D0728
|
||||
.incbin "ballChainSoldier/gUnk_080D0728.bin"
|
||||
|
||||
gUnk_080D0730:: @ 080D0730
|
||||
.incbin "ballChainSoldier/gUnk_080D0730.bin"
|
||||
|
||||
gSpriteAnimations_BallChainSoldier_3:: @ 080D0738
|
||||
.include "animations/gSpriteAnimations_BallChainSoldier_3.s"
|
||||
|
||||
|
|
|
@ -399,7 +399,7 @@ SECTIONS {
|
|||
src/enemy/torchTrap.o(.text);
|
||||
src/enemy/vaatiRebornEnemy.o(.text);
|
||||
src/enemy/vaatiProjectile.o(.text);
|
||||
asm/enemy/ballChainSoldier.o(.text);
|
||||
src/enemy/ballChainSoldier.o(.text);
|
||||
src/enemy/enemy4D.o(.text);
|
||||
asm/enemy/enemy4D.o(.text);
|
||||
asm/enemy/ghini.o(.text);
|
||||
|
@ -1076,6 +1076,7 @@ SECTIONS {
|
|||
data/animations/enemy/vaatiRebornEnemy.o(.rodata);
|
||||
src/enemy/vaatiProjectile.o(.rodata);
|
||||
data/animations/enemy/vaatiProjectile.o(.rodata);
|
||||
src/enemy/ballChainSoldier.o(.rodata);
|
||||
data/const/enemy/ballChainSoldier.o(.rodata);
|
||||
data/animations/enemy/ballChainSoldier.o(.rodata);
|
||||
data/const/enemy/enemy4D.o(.rodata);
|
||||
|
|
|
@ -0,0 +1,342 @@
|
|||
#define NENT_DEPRECATED
|
||||
#include "entity.h"
|
||||
#include "enemy.h"
|
||||
#include "functions.h"
|
||||
|
||||
typedef struct {
|
||||
Entity base;
|
||||
u8 filler[0x10];
|
||||
u16 unk_78;
|
||||
u8 unk_7a;
|
||||
u8 unk_7b;
|
||||
u8 unk_7c;
|
||||
u8 unk_7d;
|
||||
u8 unk_7e;
|
||||
u8 unk_7f;
|
||||
} BallChainSoldierEntity;
|
||||
|
||||
extern Entity* gUnk_020000B0;
|
||||
|
||||
void (*const gUnk_080D06E0[])(BallChainSoldierEntity*);
|
||||
void (*const gUnk_080D06F8[])(BallChainSoldierEntity*);
|
||||
const u8 gUnk_080D0724[];
|
||||
const u16 gUnk_080D0728[];
|
||||
const u16 gUnk_080D0730[];
|
||||
|
||||
extern u32 sub_0804A044(Entity*, Entity*, u32);
|
||||
extern void sub_0803E86C(BallChainSoldierEntity*);
|
||||
extern void sub_0803E9A4(BallChainSoldierEntity*);
|
||||
extern bool32 sub_0803E9D4(BallChainSoldierEntity*);
|
||||
extern void sub_0803E8CC(BallChainSoldierEntity*);
|
||||
extern void sub_0803E92C(BallChainSoldierEntity*);
|
||||
extern bool32 sub_0803EA64(BallChainSoldierEntity*);
|
||||
extern void sub_0803E94C(BallChainSoldierEntity*, u32);
|
||||
extern bool32 sub_0803EAD0(BallChainSoldierEntity*, u32);
|
||||
|
||||
void BallChainSoldier(Entity* this) {
|
||||
EnemyFunctionHandler(this, (EntityActionArray)gUnk_080D06E0);
|
||||
}
|
||||
|
||||
void sub_0803E538(BallChainSoldierEntity* this) {
|
||||
gUnk_080D06F8[super->action](this);
|
||||
}
|
||||
|
||||
void sub_0803E550(BallChainSoldierEntity* this) {
|
||||
sub_0804AA30(super, gUnk_080D06E0);
|
||||
}
|
||||
|
||||
void sub_0803E560(BallChainSoldierEntity* this) {
|
||||
sub_08001324(super);
|
||||
sub_0803E538(this);
|
||||
}
|
||||
|
||||
void BallChainSoldier_CreateDeathFx(BallChainSoldierEntity* this) {
|
||||
CreateDeathFx(super, 0xff, 0x57);
|
||||
}
|
||||
|
||||
void nullsub_20(BallChainSoldierEntity* this) {
|
||||
}
|
||||
|
||||
void BallChainSoldier_Init(BallChainSoldierEntity* this) {
|
||||
Entity* ent;
|
||||
sub_0804A720(super);
|
||||
ent = CreateProjectileWithParent(super, BALL_AND_CHAIN, 0);
|
||||
if (ent == NULL)
|
||||
return;
|
||||
|
||||
ent->parent = super;
|
||||
super->child = ent;
|
||||
COLLISION_ON(super);
|
||||
super->spriteSettings.draw = 1;
|
||||
super->animationState = Random() & 3;
|
||||
this->unk_7b = 0;
|
||||
this->unk_7c = 0;
|
||||
this->unk_7e = 0x20;
|
||||
this->unk_7f = 0xfe;
|
||||
InitAnimationForceUpdate(super, super->animationState << 2);
|
||||
sub_0803E86C(this);
|
||||
}
|
||||
|
||||
void sub_0803E5E8(BallChainSoldierEntity* this) {
|
||||
this->unk_7c -= 0xa;
|
||||
sub_0803E9A4(this);
|
||||
if (sub_0803E9D4(this) == 0) {
|
||||
if (--this->unk_78 == 0) {
|
||||
sub_0803E8CC(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E61C(BallChainSoldierEntity* this) {
|
||||
this->unk_7c -= 0xa;
|
||||
sub_0803E9A4(this);
|
||||
if (sub_0803E9D4(this) == 0) {
|
||||
if (super->knockbackDuration == 0) {
|
||||
if (ProcessMovement(super) == 0) {
|
||||
sub_0803E86C(this);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (--this->unk_78 == 0) {
|
||||
sub_0803E92C(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E66C(BallChainSoldierEntity* this) {
|
||||
this->unk_7c -= 0x10;
|
||||
sub_0803E9A4(this);
|
||||
if (this->unk_7e <= 0x21) {
|
||||
this->unk_7e++;
|
||||
}
|
||||
|
||||
if (!sub_08049FDC(super, 1) || sub_0803EA64(this) == 0) {
|
||||
super->action = 4;
|
||||
this->unk_7b = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E6B4(BallChainSoldierEntity* this) {
|
||||
this->unk_7c -= 0xa;
|
||||
sub_0803E9A4(this);
|
||||
if (this->unk_7e > 0x20) {
|
||||
this->unk_7e--;
|
||||
} else {
|
||||
sub_0803E86C(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E6E0(BallChainSoldierEntity* this) {
|
||||
this->unk_7c -= 0xc;
|
||||
sub_0803E9A4(this);
|
||||
this->unk_7e -= 4;
|
||||
if ((s8)this->unk_7e <= 0) {
|
||||
this->unk_7e = 0;
|
||||
super->action = 6;
|
||||
super->actionDelay = 0x1e;
|
||||
InitAnimationForceUpdate(super, super->animationState + 0x20);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E71C(BallChainSoldierEntity* this) {
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 7;
|
||||
super->actionDelay = 1;
|
||||
this->unk_7c = gUnk_080D0724[super->animationState];
|
||||
this->unk_7b = 0;
|
||||
this->unk_7f = 0xf6;
|
||||
EnqueueSFX(SFX_15B);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E75C(BallChainSoldierEntity* this) {
|
||||
if ((super->frame & 0x80) == 0) {
|
||||
UpdateAnimationSingleFrame(super);
|
||||
} else {
|
||||
if (--super->actionDelay == 0) {
|
||||
super->actionDelay = 2;
|
||||
this->unk_7f++;
|
||||
}
|
||||
|
||||
if (this->unk_7f) {
|
||||
this->unk_7e += 5;
|
||||
} else {
|
||||
super->action = 8;
|
||||
super->actionDelay = 0x1e;
|
||||
InitScreenShake(8, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E7B4(BallChainSoldierEntity* this) {
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 9;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E7CC(BallChainSoldierEntity* this) {
|
||||
this->unk_7e -= 2;
|
||||
if (this->unk_7e <= 0xa) {
|
||||
super->action = 0xa;
|
||||
super->actionDelay = 0x5a;
|
||||
super->direction = DirectionFromAnimationState(super->animationState);
|
||||
this->unk_7c = 0;
|
||||
this->unk_7f = 0xfe;
|
||||
sub_0803E94C(this, 0x10);
|
||||
} else if (this->unk_7e <= 0x12) {
|
||||
COLLISION_OFF(super->child);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E818(BallChainSoldierEntity* this) {
|
||||
if (super->actionDelay) {
|
||||
if (--super->actionDelay == 0) {
|
||||
COLLISION_ON(super->child);
|
||||
sub_0803E94C(this, 0);
|
||||
}
|
||||
} else {
|
||||
this->unk_7c -= 0xa;
|
||||
sub_0803E9A4(this);
|
||||
if (++this->unk_7e > 0x1f) {
|
||||
sub_0803E86C(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E86C(BallChainSoldierEntity* this) {
|
||||
if (sub_08049FDC(super, 1) && sub_0803EAD0(this, 0x50)) {
|
||||
super->direction = DirectionRoundUp(GetFacingDirection(super, gUnk_020000B0));
|
||||
}
|
||||
|
||||
super->action = 1;
|
||||
this->unk_78 = gUnk_080D0728[Random() & 3];
|
||||
this->unk_7a = 4;
|
||||
sub_0803E94C(this, 0);
|
||||
}
|
||||
|
||||
void sub_0803E8CC(BallChainSoldierEntity* this) {
|
||||
u32 rand = Random();
|
||||
u32 temp;
|
||||
u32 dir;
|
||||
if (sub_08049FA0(super) == 0 && (rand & 3)) {
|
||||
dir = sub_08049EE4(super) + 4;
|
||||
temp = 0x18;
|
||||
} else {
|
||||
temp = 0x18;
|
||||
dir = rand;
|
||||
}
|
||||
|
||||
super->direction = dir & temp;
|
||||
super->action = 2;
|
||||
this->unk_78 = gUnk_080D0730[(rand >> 0x10) & 3];
|
||||
this->unk_7a = 4;
|
||||
sub_0803E94C(this, 0x10);
|
||||
}
|
||||
|
||||
void sub_0803E92C(BallChainSoldierEntity* this) {
|
||||
if (Random() & 1) {
|
||||
sub_0803E86C(this);
|
||||
} else {
|
||||
sub_0803E8CC(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0803E94C(BallChainSoldierEntity* this, u32 arg2) {
|
||||
s32 animationState = DirectionToAnimationState(super->direction);
|
||||
if ((super->animIndex & 0x10) == arg2) {
|
||||
u32 dir = super->direction & 7;
|
||||
s32 currentAnimationState = super->animationState;
|
||||
if (dir == 4) {
|
||||
if (((currentAnimationState - (super->direction >> 3)) & 3) <= 1)
|
||||
return;
|
||||
}
|
||||
if (animationState == currentAnimationState)
|
||||
return;
|
||||
}
|
||||
|
||||
super->animationState = animationState;
|
||||
animationState = arg2 + (super->animIndex & 3) + animationState * 4;
|
||||
InitAnimationForceUpdate(super, animationState);
|
||||
}
|
||||
|
||||
void sub_0803E9A4(BallChainSoldierEntity* this) {
|
||||
s32 val = ((this->unk_7c + 0x20) & 0xff) >> 6;
|
||||
if ((super->animIndex & 3) == val)
|
||||
return;
|
||||
InitAnimationForceUpdate(super, val + (super->animIndex & -4));
|
||||
}
|
||||
|
||||
bool32 sub_0803E9D4(BallChainSoldierEntity* this) {
|
||||
u32 dir;
|
||||
if (sub_08049FDC(super, 1)) {
|
||||
if (sub_0803EAD0(this, 0x38)) {
|
||||
super->action = 3;
|
||||
super->direction = DirectionRoundUp(GetFacingDirection(super, gUnk_020000B0));
|
||||
this->unk_7b = 1;
|
||||
sub_0803E94C(this, 0);
|
||||
return 1;
|
||||
} else if (sub_0803EAD0(this, 0x4e)) {
|
||||
dir = sub_0804A044(super, gUnk_020000B0, 0x12);
|
||||
if (dir != 0xff) {
|
||||
if (--this->unk_7a != 0)
|
||||
return 0;
|
||||
super->action = 5;
|
||||
super->direction = dir;
|
||||
this->unk_7a = 4;
|
||||
sub_0803E94C(this, 0);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this->unk_7a = 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool32 sub_0803EA64(BallChainSoldierEntity* this) {
|
||||
u32 dir;
|
||||
if (sub_08049FDC(super, 1)) {
|
||||
if (sub_0803EAD0(this, 0x4e)) {
|
||||
dir = sub_0804A044(super, gUnk_020000B0, 0x12);
|
||||
if (dir != 0xff) {
|
||||
if (--this->unk_7a != 0)
|
||||
return 1;
|
||||
super->action = 5;
|
||||
super->direction = dir;
|
||||
sub_0803E94C(this, 0);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (sub_0803EAD0(this, 0x38))
|
||||
return 1;
|
||||
}
|
||||
|
||||
this->unk_7a = 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool32 sub_0803EAD0(BallChainSoldierEntity* this, u32 distance) {
|
||||
return EntityWithinDistance(super, gUnk_020000B0->x.HALF.HI, gUnk_020000B0->y.HALF.HI - 4, distance);
|
||||
}
|
||||
|
||||
void (*const gUnk_080D06E0[])(BallChainSoldierEntity*) = {
|
||||
sub_0803E538,
|
||||
sub_0803E550,
|
||||
sub_0803E560,
|
||||
BallChainSoldier_CreateDeathFx,
|
||||
(void (*const)(BallChainSoldierEntity*))sub_08001242,
|
||||
nullsub_20,
|
||||
};
|
||||
|
||||
void (*const gUnk_080D06F8[])(BallChainSoldierEntity*) = {
|
||||
BallChainSoldier_Init, sub_0803E5E8, sub_0803E61C, sub_0803E66C, sub_0803E6B4, sub_0803E6E0,
|
||||
sub_0803E71C, sub_0803E75C, sub_0803E7B4, sub_0803E7CC, sub_0803E818,
|
||||
};
|
||||
|
||||
const u8 gUnk_080D0724[] = { 0, 0x44, 0x80, 0xBC };
|
||||
|
||||
const u16 gUnk_080D0728[] = { 0x1E, 0x32, 0x46, 0x5A };
|
||||
|
||||
const u16 gUnk_080D0730[] = { 0x3C, 0x5A, 0x78, 0x96 };
|
Loading…
Reference in New Issue