mirror of https://github.com/zeldaret/tmc.git
decompile Helmasaur
This commit is contained in:
parent
e6e690107c
commit
1a1d35e392
936
asm/helmasaur.s
936
asm/helmasaur.s
|
@ -1,936 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Helmasaur
|
||||
Helmasaur: @ 0x0802BB6C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0
|
||||
bne _0802BB94
|
||||
ldr r1, _0802BB90 @ =gUnk_080CD3E4
|
||||
adds r0, r4, #0
|
||||
bl EnemyFunctionHandler
|
||||
movs r3, #0x10
|
||||
rsbs r3, r3, #0
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
movs r2, #1
|
||||
bl SetChildOffset
|
||||
b _0802BBA4
|
||||
.align 2, 0
|
||||
_0802BB90: .4byte gUnk_080CD3E4
|
||||
_0802BB94:
|
||||
ldr r0, _0802BBA8 @ =gUnk_080CD3FC
|
||||
ldrb r1, [r4, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
_0802BBA4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802BBA8: .4byte gUnk_080CD3FC
|
||||
|
||||
thumb_func_start sub_0802BBAC
|
||||
sub_0802BBAC: @ 0x0802BBAC
|
||||
push {lr}
|
||||
ldr r2, _0802BBC0 @ =gUnk_080CD408
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0802BBC0: .4byte gUnk_080CD408
|
||||
|
||||
thumb_func_start sub_0802BBC4
|
||||
sub_0802BBC4: @ 0x0802BBC4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x3f
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x19
|
||||
beq _0802BBFE
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x41
|
||||
ldrb r0, [r0]
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
beq _0802BBEA
|
||||
cmp r1, #0
|
||||
blt _0802BBFE
|
||||
cmp r1, #3
|
||||
bgt _0802BBFE
|
||||
cmp r1, #2
|
||||
blt _0802BBFE
|
||||
_0802BBEA:
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #4
|
||||
bne _0802BBFE
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x42
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C218
|
||||
_0802BBFE:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x43
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _0802BC10
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1c
|
||||
bl sub_0804A9FC
|
||||
_0802BC10:
|
||||
ldr r1, _0802BC1C @ =gUnk_080CD3E4
|
||||
adds r0, r4, #0
|
||||
bl sub_0804AA30
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802BC1C: .4byte gUnk_080CD3E4
|
||||
|
||||
thumb_func_start sub_0802BC20
|
||||
sub_0802BC20: @ 0x0802BC20
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x3f
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x19
|
||||
beq _0802BC4C
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F520
|
||||
cmp r0, #0
|
||||
beq _0802BC6C
|
||||
ldr r0, _0802BC48 @ =gUnk_080CD42C
|
||||
ldrb r1, [r4, #0xd]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
b _0802BC6C
|
||||
.align 2, 0
|
||||
_0802BC48: .4byte gUnk_080CD42C
|
||||
_0802BC4C:
|
||||
ldrb r0, [r4, #0xd]
|
||||
cmp r0, #2
|
||||
bhi _0802BC5C
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F520
|
||||
cmp r0, #0
|
||||
beq _0802BC6C
|
||||
_0802BC5C:
|
||||
ldr r0, _0802BC70 @ =gUnk_080CD438
|
||||
ldrb r1, [r4, #0xd]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
_0802BC6C:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802BC70: .4byte gUnk_080CD438
|
||||
|
||||
thumb_func_start sub_0802BC74
|
||||
sub_0802BC74: @ 0x0802BC74
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0802C1C0
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xd]
|
||||
movs r0, #0x3c
|
||||
strb r0, [r4, #0x1d]
|
||||
ldr r0, _0802BC9C @ =gPlayerEntity
|
||||
ldrb r0, [r0, #0x14]
|
||||
lsrs r0, r0, #1
|
||||
movs r1, #2
|
||||
eors r0, r1
|
||||
strb r0, [r4, #0x14]
|
||||
ldrb r1, [r4, #0x14]
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802BC9C: .4byte gPlayerEntity
|
||||
|
||||
thumb_func_start sub_0802BCA0
|
||||
sub_0802BCA0: @ 0x0802BCA0
|
||||
push {lr}
|
||||
bl sub_0806F4E8
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0802BCA8
|
||||
sub_0802BCA8: @ 0x0802BCA8
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x3f
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0x19
|
||||
beq _0802BCFA
|
||||
movs r0, #7
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x5a
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #9
|
||||
str r0, [r4, #0x20]
|
||||
movs r0, #0x19
|
||||
strb r0, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x3a
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0xfb
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x12
|
||||
strb r0, [r4, #0x1c]
|
||||
movs r0, #0x20
|
||||
movs r1, #1
|
||||
bl CreateEnemy
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0802BCF0
|
||||
ldrb r0, [r4, #0x14]
|
||||
strb r0, [r1, #0x14]
|
||||
adds r0, r4, #0
|
||||
bl CopyPosition
|
||||
_0802BCF0:
|
||||
ldrb r1, [r4, #0x14]
|
||||
adds r1, #4
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_0802BCFA:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BCFC
|
||||
sub_0802BCFC: @ 0x0802BCFC
|
||||
movs r1, #1
|
||||
strb r1, [r0, #0xd]
|
||||
movs r1, #0x3c
|
||||
strb r1, [r0, #0x1d]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802BD08
|
||||
sub_0802BD08: @ 0x0802BD08
|
||||
push {lr}
|
||||
bl sub_0806F3E4
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0802BD10
|
||||
sub_0802BD10: @ 0x0802BD10
|
||||
push {lr}
|
||||
ldrb r2, [r0, #0x10]
|
||||
movs r1, #0x7f
|
||||
ands r1, r2
|
||||
strb r1, [r0, #0x10]
|
||||
movs r1, #2
|
||||
bl UpdateAnimationVariableFrames
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start nullsub_145
|
||||
nullsub_145: @ 0x0802BD24
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802BD28
|
||||
sub_0802BD28: @ 0x0802BD28
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r3, [r2, #0x10]
|
||||
movs r0, #0x80
|
||||
ands r0, r3
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
beq _0802BD4C
|
||||
movs r0, #0x80
|
||||
orrs r0, r3
|
||||
strb r0, [r2, #0x10]
|
||||
adds r2, #0x3a
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0xfb
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
b _0802BD52
|
||||
_0802BD4C:
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x45
|
||||
strb r1, [r0]
|
||||
_0802BD52:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0802BD54
|
||||
sub_0802BD54: @ 0x0802BD54
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0804A720
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x78
|
||||
strb r0, [r1]
|
||||
movs r0, #0x3c
|
||||
strb r0, [r4, #0x1d]
|
||||
adds r1, #1
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
bl Random
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x15]
|
||||
lsrs r0, r0, #3
|
||||
strb r0, [r4, #0x14]
|
||||
ldrb r1, [r4, #0x14]
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BD8C
|
||||
sub_0802BD8C: @ 0x0802BD8C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _0802BD9C
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
b _0802BDDE
|
||||
_0802BD9C:
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl sub_08049FDC
|
||||
cmp r0, #0
|
||||
beq _0802BDCA
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
movs r2, #0x10
|
||||
bl sub_0804A024
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0xff
|
||||
beq _0802BDCA
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x79
|
||||
ldrb r0, [r0]
|
||||
cmp r1, r0
|
||||
beq _0802BDCA
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C058
|
||||
b _0802BDDE
|
||||
_0802BDCA:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C020
|
||||
adds r1, r0, #0
|
||||
ldrb r0, [r4, #0x15]
|
||||
cmp r1, r0
|
||||
beq _0802BDDE
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C058
|
||||
_0802BDDE:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BDE0
|
||||
sub_0802BDE0: @ 0x0802BDE0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0802C06C
|
||||
cmp r0, #0
|
||||
beq _0802BDFE
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x3c
|
||||
strb r0, [r4, #0xe]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x79
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
b _0802BE16
|
||||
_0802BDFE:
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
movs r1, #0xf
|
||||
ands r0, r1
|
||||
adds r0, #0xf
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x15]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x79
|
||||
strb r1, [r0]
|
||||
_0802BE16:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BE18
|
||||
sub_0802BE18: @ 0x0802BE18
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #2
|
||||
bl UpdateAnimationVariableFrames
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802BE3E
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #2
|
||||
strh r0, [r4, #0x24]
|
||||
b _0802BE44
|
||||
_0802BE3E:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C18C
|
||||
_0802BE44:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802BE48
|
||||
sub_0802BE48: @ 0x0802BE48
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_080AEFE0
|
||||
cmp r0, #0
|
||||
bne _0802BE64
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C218
|
||||
movs r0, #8
|
||||
movs r1, #0
|
||||
bl sub_08080964
|
||||
b _0802BE7E
|
||||
_0802BE64:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C1CC
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C0E8
|
||||
cmp r0, #0
|
||||
beq _0802BE7E
|
||||
movs r0, #5
|
||||
strb r0, [r4, #0xc]
|
||||
_0802BE7E:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BE80
|
||||
sub_0802BE80: @ 0x0802BE80
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrh r0, [r4, #0x24]
|
||||
subs r0, #0x20
|
||||
strh r0, [r4, #0x24]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
cmp r0, #0xff
|
||||
ble _0802BE98
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C1CC
|
||||
_0802BE98:
|
||||
movs r1, #0x24
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0
|
||||
ble _0802BEAE
|
||||
adds r0, r4, #0
|
||||
bl sub_080AEFE0
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C18C
|
||||
b _0802BEBA
|
||||
_0802BEAE:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C1C0
|
||||
ldrb r0, [r4, #0xe]
|
||||
adds r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
_0802BEBA:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BEBC
|
||||
sub_0802BEBC: @ 0x0802BEBC
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r0, [r5, #0x15]
|
||||
movs r4, #0x10
|
||||
eors r0, r4
|
||||
strb r0, [r5, #0x15]
|
||||
adds r0, r5, #0
|
||||
bl sub_080AEFE0
|
||||
ldrb r0, [r5, #0x15]
|
||||
eors r0, r4
|
||||
strb r0, [r5, #0x15]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #6
|
||||
adds r0, r5, #0
|
||||
bl sub_080044EC
|
||||
cmp r0, #0
|
||||
bne _0802BEE8
|
||||
adds r0, r5, #0
|
||||
bl sub_0802C1C0
|
||||
_0802BEE8:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802BEEC
|
||||
sub_0802BEEC: @ 0x0802BEEC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _0802BF1E
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
movs r1, #0xff
|
||||
ands r0, r1
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0802BF3A
|
||||
ldrb r0, [r4, #0x14]
|
||||
movs r1, #2
|
||||
eors r0, r1
|
||||
strb r0, [r4, #0x14]
|
||||
lsls r0, r0, #3
|
||||
strb r0, [r4, #0x15]
|
||||
ldrb r1, [r4, #0x14]
|
||||
adds r1, #4
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _0802BF3A
|
||||
_0802BF1E:
|
||||
movs r1, #0xe0
|
||||
lsls r1, r1, #5
|
||||
adds r0, r4, #0
|
||||
bl sub_08003FC4
|
||||
cmp r0, #0
|
||||
bne _0802BF3A
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0x90
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r4, #0x24]
|
||||
_0802BF3A:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BF3C
|
||||
sub_0802BF3C: @ 0x0802BF3C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl ProcessMovement
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802BF76
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C020
|
||||
strb r0, [r4, #0x15]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x1b
|
||||
ldrb r1, [r4, #0x14]
|
||||
cmp r0, r1
|
||||
beq _0802BF76
|
||||
strb r0, [r4, #0x14]
|
||||
adds r1, r0, #4
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_0802BF76:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BF78
|
||||
sub_0802BF78: @ 0x0802BF78
|
||||
push {lr}
|
||||
movs r2, #1
|
||||
strb r2, [r0, #0xc]
|
||||
adds r3, r0, #0
|
||||
adds r3, #0x3b
|
||||
movs r1, #4
|
||||
strb r1, [r3]
|
||||
strb r2, [r0, #0x1c]
|
||||
ldrb r1, [r0, #0x14]
|
||||
lsls r1, r1, #3
|
||||
strb r1, [r0, #0x15]
|
||||
ldrb r1, [r0, #0x14]
|
||||
adds r1, #8
|
||||
bl InitializeAnimation
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0802BF98
|
||||
sub_0802BF98: @ 0x0802BF98
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0806F520
|
||||
cmp r0, #0
|
||||
beq _0802BFBC
|
||||
ldr r0, _0802BFB8 @ =gUnk_080CD450
|
||||
ldrb r1, [r4, #0xd]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
b _0802BFCC
|
||||
.align 2, 0
|
||||
_0802BFB8: .4byte gUnk_080CD450
|
||||
_0802BFBC:
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
_0802BFCC:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802BFD0
|
||||
sub_0802BFD0: @ 0x0802BFD0
|
||||
movs r1, #2
|
||||
strb r1, [r0, #0xd]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802BFD8
|
||||
sub_0802BFD8: @ 0x0802BFD8
|
||||
push {lr}
|
||||
bl sub_0806F4E8
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0802BFE0
|
||||
sub_0802BFE0: @ 0x0802BFE0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0806F3E4
|
||||
cmp r0, #0
|
||||
beq _0802BFF2
|
||||
adds r0, r4, #0
|
||||
bl DeleteEntity
|
||||
_0802BFF2:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802BFF4
|
||||
sub_0802BFF4: @ 0x0802BFF4
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldrb r2, [r3, #0x18]
|
||||
lsls r1, r2, #0x1e
|
||||
lsrs r1, r1, #0x1e
|
||||
movs r0, #1
|
||||
eors r1, r0
|
||||
subs r0, #5
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3, #0x18]
|
||||
ldrb r0, [r3, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r3, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802C01C
|
||||
adds r0, r3, #0
|
||||
bl DeleteEntity
|
||||
_0802C01C:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802C020
|
||||
sub_0802C020: @ 0x0802C020
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
bl Random
|
||||
adds r4, r0, #0
|
||||
adds r0, r5, #0
|
||||
bl sub_08049FA0
|
||||
cmp r0, #0
|
||||
bne _0802C03E
|
||||
movs r6, #1
|
||||
adds r0, r4, #0
|
||||
ands r0, r6
|
||||
cmp r0, #0
|
||||
beq _0802C044
|
||||
_0802C03E:
|
||||
movs r0, #0x18
|
||||
ands r0, r4
|
||||
b _0802C056
|
||||
_0802C044:
|
||||
adds r0, r5, #0
|
||||
bl sub_08049EE4
|
||||
lsrs r1, r4, #0x10
|
||||
ands r1, r6
|
||||
lsls r1, r1, #2
|
||||
adds r0, r0, r1
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
_0802C056:
|
||||
pop {r4, r5, r6, pc}
|
||||
|
||||
thumb_func_start sub_0802C058
|
||||
sub_0802C058: @ 0x0802C058
|
||||
push {lr}
|
||||
movs r2, #2
|
||||
strb r2, [r0, #0xc]
|
||||
strb r1, [r0, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
strb r1, [r0, #0x14]
|
||||
ldrb r1, [r0, #0x14]
|
||||
bl InitializeAnimation
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0802C06C
|
||||
sub_0802C06C: @ 0x0802C06C
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
movs r1, #0x2e
|
||||
ldrsh r2, [r0, r1]
|
||||
ldr r3, [r0, #0x48]
|
||||
movs r1, #0
|
||||
ldrsb r1, [r3, r1]
|
||||
adds r6, r2, r1
|
||||
movs r1, #0x32
|
||||
ldrsh r2, [r0, r1]
|
||||
movs r1, #1
|
||||
ldrsb r1, [r3, r1]
|
||||
adds r5, r2, r1
|
||||
ldr r3, _0802C0CC @ =gUnk_080CD45C
|
||||
ldrb r1, [r0, #0x15]
|
||||
lsrs r1, r1, #2
|
||||
adds r2, r1, r3
|
||||
ldrb r2, [r2]
|
||||
lsls r2, r2, #0x18
|
||||
asrs r2, r2, #0x18
|
||||
mov sb, r2
|
||||
adds r1, #1
|
||||
adds r1, r1, r3
|
||||
ldrb r1, [r1]
|
||||
lsls r1, r1, #0x18
|
||||
asrs r1, r1, #0x18
|
||||
mov r8, r1
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
ldr r7, _0802C0D0 @ =gUnk_02027EB4
|
||||
cmp r0, #2
|
||||
bne _0802C0B2
|
||||
ldr r7, _0802C0D4 @ =gUnk_0200D654
|
||||
_0802C0B2:
|
||||
movs r4, #0
|
||||
_0802C0B4:
|
||||
add r6, sb
|
||||
add r5, r8
|
||||
adds r0, r7, #0
|
||||
adds r1, r6, #0
|
||||
adds r2, r5, #0
|
||||
movs r3, #0
|
||||
bl sub_080AE4CC
|
||||
cmp r0, #0
|
||||
beq _0802C0D8
|
||||
movs r0, #0
|
||||
b _0802C0E0
|
||||
.align 2, 0
|
||||
_0802C0CC: .4byte gUnk_080CD45C
|
||||
_0802C0D0: .4byte gUnk_02027EB4
|
||||
_0802C0D4: .4byte gUnk_0200D654
|
||||
_0802C0D8:
|
||||
adds r4, #1
|
||||
cmp r4, #7
|
||||
bls _0802C0B4
|
||||
movs r0, #1
|
||||
_0802C0E0:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
|
||||
thumb_func_start sub_0802C0E8
|
||||
sub_0802C0E8: @ 0x0802C0E8
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802C0FC
|
||||
movs r0, #1
|
||||
b _0802C178
|
||||
_0802C0FC:
|
||||
ldrb r3, [r5, #0x15]
|
||||
lsrs r3, r3, #2
|
||||
ldr r0, _0802C17C @ =gUnk_080CD45C
|
||||
adds r3, r3, r0
|
||||
movs r0, #0x2e
|
||||
ldrsh r2, [r5, r0]
|
||||
ldr r4, [r5, #0x48]
|
||||
movs r0, #0
|
||||
ldrsb r0, [r4, r0]
|
||||
adds r2, r2, r0
|
||||
movs r1, #0
|
||||
ldrsb r1, [r3, r1]
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #1
|
||||
adds r6, r2, r0
|
||||
movs r0, #0x32
|
||||
ldrsh r2, [r5, r0]
|
||||
movs r0, #1
|
||||
ldrsb r0, [r4, r0]
|
||||
adds r2, r2, r0
|
||||
movs r1, #1
|
||||
ldrsb r1, [r3, r1]
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #1
|
||||
adds r4, r2, r0
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
ldr r7, _0802C180 @ =gUnk_02027EB4
|
||||
cmp r0, #2
|
||||
bne _0802C140
|
||||
ldr r7, _0802C184 @ =gUnk_0200D654
|
||||
_0802C140:
|
||||
movs r5, #0
|
||||
ldr r1, _0802C188 @ =gRoomControls
|
||||
ldrh r0, [r1, #6]
|
||||
subs r0, r6, r0
|
||||
asrs r0, r0, #4
|
||||
movs r2, #0x3f
|
||||
ands r0, r2
|
||||
ldrh r1, [r1, #8]
|
||||
subs r1, r4, r1
|
||||
asrs r1, r1, #4
|
||||
ands r1, r2
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
movs r1, #9
|
||||
bl sub_0806FC24
|
||||
cmp r0, #0
|
||||
bne _0802C176
|
||||
adds r0, r7, #0
|
||||
adds r1, r6, #0
|
||||
adds r2, r4, #0
|
||||
movs r3, #0
|
||||
bl sub_080AE4CC
|
||||
rsbs r1, r0, #0
|
||||
orrs r1, r0
|
||||
lsrs r5, r1, #0x1f
|
||||
_0802C176:
|
||||
adds r0, r5, #0
|
||||
_0802C178:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0802C17C: .4byte gUnk_080CD45C
|
||||
_0802C180: .4byte gUnk_02027EB4
|
||||
_0802C184: .4byte gUnk_0200D654
|
||||
_0802C188: .4byte gRoomControls
|
||||
|
||||
thumb_func_start sub_0802C18C
|
||||
sub_0802C18C: @ 0x0802C18C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x78
|
||||
ldrb r1, [r0]
|
||||
subs r1, #1
|
||||
strb r1, [r0]
|
||||
movs r0, #7
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
bne _0802C1BC
|
||||
movs r0, #0xf
|
||||
movs r1, #0x11
|
||||
movs r2, #0x40
|
||||
bl CreateObject
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0802C1BC
|
||||
movs r3, #0x80
|
||||
lsls r3, r3, #9
|
||||
adds r0, r4, #0
|
||||
movs r2, #0
|
||||
bl PositionRelative
|
||||
_0802C1BC:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802C1C0
|
||||
sub_0802C1C0: @ 0x0802C1C0
|
||||
movs r1, #1
|
||||
strb r1, [r0, #0xc]
|
||||
movs r1, #0x1e
|
||||
strb r1, [r0, #0xe]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802C1CC
|
||||
sub_0802C1CC: @ 0x0802C1CC
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r4, [r5, #0x14]
|
||||
lsls r4, r4, #2
|
||||
ldr r0, _0802C214 @ =gUnk_080CD464
|
||||
adds r4, r4, r0
|
||||
movs r0, #0x2e
|
||||
ldrsh r2, [r5, r0]
|
||||
movs r0, #0
|
||||
ldrsb r0, [r4, r0]
|
||||
adds r2, r2, r0
|
||||
movs r0, #0x32
|
||||
ldrsh r3, [r5, r0]
|
||||
movs r0, #1
|
||||
ldrsb r0, [r4, r0]
|
||||
adds r3, r3, r0
|
||||
adds r0, r5, #0
|
||||
movs r1, #9
|
||||
bl sub_08008796
|
||||
movs r0, #0x2e
|
||||
ldrsh r2, [r5, r0]
|
||||
movs r0, #2
|
||||
ldrsb r0, [r4, r0]
|
||||
adds r2, r2, r0
|
||||
movs r0, #0x32
|
||||
ldrsh r3, [r5, r0]
|
||||
movs r0, #3
|
||||
ldrsb r0, [r4, r0]
|
||||
adds r3, r3, r0
|
||||
adds r0, r5, #0
|
||||
movs r1, #9
|
||||
bl sub_08008796
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0802C214: .4byte gUnk_080CD464
|
||||
|
||||
thumb_func_start sub_0802C218
|
||||
sub_0802C218: @ 0x0802C218
|
||||
movs r1, #6
|
||||
strb r1, [r0, #0xc]
|
||||
movs r1, #0xe0
|
||||
strh r1, [r0, #0x24]
|
||||
movs r1, #0xc0
|
||||
lsls r1, r1, #9
|
||||
str r1, [r0, #0x20]
|
||||
bx lr
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _0802BD9C
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
b _0802BDDE
|
||||
_0802BD9C:
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl sub_08049FDC
|
||||
cmp r0, #0
|
||||
beq _0802BDCA
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
movs r2, #0x10
|
||||
bl sub_0804A024
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0xff
|
||||
beq _0802BDCA
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x79
|
||||
ldrb r0, [r0]
|
||||
cmp r1, r0
|
||||
beq _0802BDCA
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C058
|
||||
b _0802BDDE
|
||||
_0802BDCA:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C020
|
||||
adds r1, r0, #0
|
||||
ldrb r0, [r4, #0x15]
|
||||
cmp r1, r0
|
||||
beq _0802BDDE
|
||||
adds r0, r4, #0
|
||||
bl sub_0802C058
|
||||
_0802BDDE:
|
||||
pop {r4, pc}
|
||||
|
||||
.syntax divided
|
|
@ -0,0 +1,43 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
|
||||
gUnk_080CD474:: @ 080CD474
|
||||
.incbin "baserom.gba", 0x0CD474, 0x0000011
|
||||
|
||||
gUnk_080CD485:: @ 080CD485
|
||||
.incbin "baserom.gba", 0x0CD485, 0x0000011
|
||||
|
||||
gUnk_080CD496:: @ 080CD496
|
||||
.incbin "baserom.gba", 0x0CD496, 0x0000011
|
||||
|
||||
gUnk_080CD4A7:: @ 080CD4A7
|
||||
.incbin "baserom.gba", 0x0CD4A7, 0x0000011
|
||||
|
||||
gUnk_080CD4B8:: @ 080CD4B8
|
||||
.incbin "baserom.gba", 0x0CD4B8, 0x0000011
|
||||
|
||||
gUnk_080CD4C9:: @ 080CD4C9
|
||||
.incbin "baserom.gba", 0x0CD4C9, 0x0000011
|
||||
|
||||
gUnk_080CD4DA:: @ 080CD4DA
|
||||
.incbin "baserom.gba", 0x0CD4DA, 0x0000011
|
||||
|
||||
gUnk_080CD4EB:: @ 080CD4EB
|
||||
.incbin "baserom.gba", 0x0CD4EB, 0x0000011
|
||||
|
||||
gUnk_080CD4FC:: @ 080CD4FC
|
||||
.incbin "baserom.gba", 0x0CD4FC, 0x0000004
|
||||
|
||||
gUnk_080CD500:: @ 080CD500
|
||||
.incbin "baserom.gba", 0x0CD500, 0x0000004
|
||||
|
||||
gUnk_080CD504:: @ 080CD504
|
||||
.incbin "baserom.gba", 0x0CD504, 0x0000004
|
||||
|
||||
gUnk_080CD508:: @ 080CD508
|
||||
.incbin "baserom.gba", 0x0CD508, 0x0000004
|
||||
|
||||
gUnk_080CD50C:: @ 080CD50C
|
||||
.incbin "baserom.gba", 0x0CD50C, 0x0000034
|
|
@ -3,69 +3,6 @@
|
|||
|
||||
.section .rodata
|
||||
|
||||
gUnk_080CD3E4:: @ 080CD3E4
|
||||
.incbin "baserom.gba", 0x0CD3E4, 0x0000018
|
||||
|
||||
gUnk_080CD3FC:: @ 080CD3FC
|
||||
.incbin "baserom.gba", 0x0CD3FC, 0x000000C
|
||||
|
||||
gUnk_080CD408:: @ 080CD408
|
||||
.incbin "baserom.gba", 0x0CD408, 0x0000024
|
||||
|
||||
gUnk_080CD42C:: @ 080CD42C
|
||||
.incbin "baserom.gba", 0x0CD42C, 0x000000C
|
||||
|
||||
gUnk_080CD438:: @ 080CD438
|
||||
.incbin "baserom.gba", 0x0CD438, 0x0000018
|
||||
|
||||
gUnk_080CD450:: @ 080CD450
|
||||
.incbin "baserom.gba", 0x0CD450, 0x000000C
|
||||
|
||||
gUnk_080CD45C:: @ 080CD45C
|
||||
.incbin "baserom.gba", 0x0CD45C, 0x0000008
|
||||
|
||||
gUnk_080CD464:: @ 080CD464
|
||||
.incbin "baserom.gba", 0x0CD464, 0x0000010
|
||||
|
||||
gUnk_080CD474:: @ 080CD474
|
||||
.incbin "baserom.gba", 0x0CD474, 0x0000011
|
||||
|
||||
gUnk_080CD485:: @ 080CD485
|
||||
.incbin "baserom.gba", 0x0CD485, 0x0000011
|
||||
|
||||
gUnk_080CD496:: @ 080CD496
|
||||
.incbin "baserom.gba", 0x0CD496, 0x0000011
|
||||
|
||||
gUnk_080CD4A7:: @ 080CD4A7
|
||||
.incbin "baserom.gba", 0x0CD4A7, 0x0000011
|
||||
|
||||
gUnk_080CD4B8:: @ 080CD4B8
|
||||
.incbin "baserom.gba", 0x0CD4B8, 0x0000011
|
||||
|
||||
gUnk_080CD4C9:: @ 080CD4C9
|
||||
.incbin "baserom.gba", 0x0CD4C9, 0x0000011
|
||||
|
||||
gUnk_080CD4DA:: @ 080CD4DA
|
||||
.incbin "baserom.gba", 0x0CD4DA, 0x0000011
|
||||
|
||||
gUnk_080CD4EB:: @ 080CD4EB
|
||||
.incbin "baserom.gba", 0x0CD4EB, 0x0000011
|
||||
|
||||
gUnk_080CD4FC:: @ 080CD4FC
|
||||
.incbin "baserom.gba", 0x0CD4FC, 0x0000004
|
||||
|
||||
gUnk_080CD500:: @ 080CD500
|
||||
.incbin "baserom.gba", 0x0CD500, 0x0000004
|
||||
|
||||
gUnk_080CD504:: @ 080CD504
|
||||
.incbin "baserom.gba", 0x0CD504, 0x0000004
|
||||
|
||||
gUnk_080CD508:: @ 080CD508
|
||||
.incbin "baserom.gba", 0x0CD508, 0x0000004
|
||||
|
||||
gUnk_080CD50C:: @ 080CD50C
|
||||
.incbin "baserom.gba", 0x0CD50C, 0x0000034
|
||||
|
||||
gUnk_080CD540:: @ 080CD540
|
||||
.incbin "baserom.gba", 0x0CD540, 0x0000018
|
||||
|
||||
|
|
|
@ -138,13 +138,15 @@ typedef struct Entity {
|
|||
/*0x86*/ union SplitHWord field_0x86;
|
||||
} Entity;
|
||||
|
||||
#define COORD_TO_TILE(entity) \
|
||||
((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
|
||||
(((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
|
||||
#define TILE(x, y) \
|
||||
((((x - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
|
||||
(((y - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
|
||||
|
||||
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \
|
||||
((((entity->x.HALF.HI - xOff - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
|
||||
(((entity->y.HALF.HI - yOff - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
|
||||
#define COORD_TO_TILE(entity) \
|
||||
TILE(entity->x.HALF.HI, entity->y.HALF.HI)
|
||||
|
||||
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \
|
||||
TILE(entity->x.HALF.HI - xOff, entity->y.HALF.HI - yOff)
|
||||
|
||||
extern Entity* CreateEnemy(u32 subtype, u32 form);
|
||||
extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter);
|
||||
|
|
|
@ -357,7 +357,7 @@ SECTIONS {
|
|||
src/enemy/chaser.o(.text);
|
||||
src/enemy/spikedBeetle.o(.text);
|
||||
src/enemy/sensorBladeTrap.o(.text);
|
||||
asm/helmasaur.o(.text);
|
||||
src/enemy/helmasaur.o(.text);
|
||||
asm/fallingBoulder.o(.text);
|
||||
asm/bobomb.o(.text);
|
||||
asm/wallMaster2.o(.text);
|
||||
|
@ -965,6 +965,8 @@ SECTIONS {
|
|||
src/enemy/spikedBeetle.o(.rodata);
|
||||
data/animations/spikedBeetle.o(.rodata);
|
||||
src/enemy/sensorBladeTrap.o(.rodata);
|
||||
src/enemy/helmasaur.o(.rodata);
|
||||
data/animations/helmasaur.o(.rodata);
|
||||
data/data_080CC6FC.o(.rodata);
|
||||
src/enemy.o(.rodata);
|
||||
data/data_080D3D94.o(.rodata);
|
||||
|
|
|
@ -0,0 +1,436 @@
|
|||
#include "enemy.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern void sub_08008796(Entity*, u32, u32, u32);
|
||||
extern u32 sub_0804A024(Entity*, u32, u32);
|
||||
extern bool32 sub_080AE4CC(Entity*, u32, u32, u32);
|
||||
|
||||
extern Entity gUnk_0200D654;
|
||||
extern Entity gUnk_02027EB4;
|
||||
|
||||
void sub_0802C18C(Entity*);
|
||||
void sub_0802C218(Entity*);
|
||||
void sub_0802C1C0(Entity*);
|
||||
u32 sub_0802C020(Entity*);
|
||||
void sub_0802C058(Entity*, u32);
|
||||
bool32 sub_0802C06C(Entity*);
|
||||
void sub_08080964(u32, u32);
|
||||
void sub_0802C1CC(Entity*);
|
||||
bool32 sub_0802C0E8(Entity*);
|
||||
|
||||
extern void (*const gUnk_080CD3E4[])(Entity*);
|
||||
extern void (*const gUnk_080CD3FC[])(Entity*);
|
||||
extern void (*const gUnk_080CD408[])(Entity*);
|
||||
extern void (*const gUnk_080CD42C[])(Entity*);
|
||||
extern void (*const gUnk_080CD438[])(Entity*);
|
||||
extern void (*const gUnk_080CD450[])(Entity*);
|
||||
extern const s8 gUnk_080CD45C[];
|
||||
extern const s8 gUnk_080CD464[];
|
||||
|
||||
void Helmasaur(Entity* this) {
|
||||
if (this->entityType.form == 0) {
|
||||
EnemyFunctionHandler(this, gUnk_080CD3E4);
|
||||
SetChildOffset(this, 0, 1, -0x10);
|
||||
} else {
|
||||
gUnk_080CD3FC[this->action](this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BBAC(Entity* this) {
|
||||
gUnk_080CD408[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0802BBC4(Entity* this) {
|
||||
if (this->damageType != 0x19) {
|
||||
switch (this->bitfield & 0x7f) {
|
||||
case 0:
|
||||
case 2:
|
||||
case 3:
|
||||
if (this->action == 4) {
|
||||
this->field_0x42 = 0;
|
||||
sub_0802C218(this);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (this->field_0x43 != 0) {
|
||||
sub_0804A9FC(this, 0x1c);
|
||||
}
|
||||
|
||||
sub_0804AA30(this, gUnk_080CD3E4);
|
||||
}
|
||||
|
||||
void sub_0802BC20(Entity* this) {
|
||||
if (this->damageType != 0x19) {
|
||||
if (sub_0806F520(this)) {
|
||||
gUnk_080CD42C[this->previousActionFlag](this);
|
||||
}
|
||||
} else if (2 < this->previousActionFlag || sub_0806F520(this)) {
|
||||
gUnk_080CD438[this->previousActionFlag](this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BC74(Entity* this) {
|
||||
sub_0802C1C0(this);
|
||||
this->previousActionFlag = 1;
|
||||
this->field_0x1d = 60;
|
||||
this->animationState = (gPlayerEntity.animationState >> 1) ^ 2;
|
||||
InitializeAnimation(this, this->animationState);
|
||||
}
|
||||
|
||||
void sub_0802BCA0(Entity* this) {
|
||||
sub_0806F4E8(this);
|
||||
}
|
||||
|
||||
void sub_0802BCA8(Entity* this) {
|
||||
if (this->damageType != 0x19) {
|
||||
Entity* ent;
|
||||
|
||||
this->action = 7;
|
||||
this->actionDelay = 0x5a;
|
||||
this->field_0x20 = 0x18000;
|
||||
this->damageType = 0x19;
|
||||
this->field_0x3a = this->field_0x3a & 0xfb;
|
||||
this->field_0x1c = 0x12;
|
||||
ent = CreateEnemy(0x20, 1);
|
||||
if (ent) {
|
||||
ent->animationState = this->animationState;
|
||||
CopyPosition(this, ent);
|
||||
}
|
||||
InitializeAnimation(this, this->animationState + 4);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BCFC(Entity* this) {
|
||||
this->previousActionFlag = 1;
|
||||
this->field_0x1d = 60;
|
||||
}
|
||||
|
||||
void sub_0802BD08(Entity* this) {
|
||||
sub_0806F3E4(this);
|
||||
}
|
||||
|
||||
void sub_0802BD10(Entity* this) {
|
||||
this->flags &= ~0x80;
|
||||
UpdateAnimationVariableFrames(this, 2);
|
||||
}
|
||||
|
||||
void nullsub_145(Entity* this) {
|
||||
/* ... */
|
||||
}
|
||||
|
||||
void sub_0802BD28(Entity* this) {
|
||||
if (this->flags & 0x80) {
|
||||
this->flags |= 0x80;
|
||||
this->field_0x3a &= ~0x4;
|
||||
} else {
|
||||
this->currentHealth = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BD54(Entity* this) {
|
||||
sub_0804A720(this);
|
||||
this->action = 1;
|
||||
this->field_0x78.HALF.LO = Random();
|
||||
this->field_0x1d = 60;
|
||||
this->field_0x78.HALF.HI = 0xff;
|
||||
this->direction = DirectionRound(Random());
|
||||
this->animationState = this->direction >> 3;
|
||||
InitializeAnimation(this, this->animationState);
|
||||
}
|
||||
|
||||
void sub_0802BD8C(Entity* this) {
|
||||
if (this->actionDelay) {
|
||||
this->actionDelay--;
|
||||
} else {
|
||||
u32 direction;
|
||||
|
||||
if (sub_08049FDC(this, 1)) {
|
||||
direction = sub_0804A024(this, 1, 0x10);
|
||||
if (direction != 0xff && direction != this->field_0x78.HALF.HI) {
|
||||
sub_0802C058(this, direction);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
direction = sub_0802C020(this);
|
||||
if (direction != this->direction) {
|
||||
sub_0802C058(this, direction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BDE0(Entity* this) {
|
||||
if (sub_0802C06C(this)) {
|
||||
this->action = 3;
|
||||
this->actionDelay = 60;
|
||||
this->field_0x78.HALF.HI = 0xff;
|
||||
} else {
|
||||
this->action = 1;
|
||||
this->actionDelay = (Random() & 0xf) + 0xf;
|
||||
this->field_0x78.HALF.HI = this->direction;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BE18(Entity* this) {
|
||||
UpdateAnimationVariableFrames(this, 2);
|
||||
if (--this->actionDelay == 0) {
|
||||
this->action = 4;
|
||||
this->actionDelay = 0x1e;
|
||||
this->nonPlanarMovement = 0x300;
|
||||
} else {
|
||||
sub_0802C18C(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BE48(Entity* this) {
|
||||
if (!sub_080AEFE0(this)) {
|
||||
sub_0802C218(this);
|
||||
sub_08080964(8, 0);
|
||||
} else {
|
||||
GetNextFrame(this);
|
||||
sub_0802C1CC(this);
|
||||
if (sub_0802C0E8(this)) {
|
||||
this->action = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BE80(Entity* this) {
|
||||
this->nonPlanarMovement -= 0x20;
|
||||
if (0xff < this->nonPlanarMovement) {
|
||||
sub_0802C1CC(this);
|
||||
}
|
||||
|
||||
if (this->nonPlanarMovement > 0) {
|
||||
sub_080AEFE0(this);
|
||||
sub_0802C18C(this);
|
||||
} else {
|
||||
sub_0802C1C0(this);
|
||||
this->actionDelay += 30;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BEBC(Entity* this) {
|
||||
this->direction ^= 0x10;
|
||||
sub_080AEFE0(this);
|
||||
this->direction ^= 0x10;
|
||||
if (!sub_080044EC(this, 0x2000)) {
|
||||
sub_0802C1C0(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BEEC(Entity* this) {
|
||||
if (this->actionDelay) {
|
||||
if ((--this->actionDelay & 0x1f) == 0) {
|
||||
this->animationState ^= 2;
|
||||
this->direction = this->animationState << 3;
|
||||
InitializeAnimation(this, this->animationState + 4);
|
||||
}
|
||||
} else if (!sub_08003FC4(this, 0x1c00)) {
|
||||
this->action = 8;
|
||||
this->actionDelay = 30;
|
||||
this->nonPlanarMovement = 0x120;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BF3C(Entity* this) {
|
||||
ProcessMovement(this);
|
||||
GetNextFrame(this);
|
||||
if (--this->actionDelay == 0) {
|
||||
u32 sprite;
|
||||
|
||||
this->actionDelay = 30;
|
||||
this->direction = sub_0802C020(this);
|
||||
sprite = this->direction >> 3;
|
||||
if (sprite != this->animationState) {
|
||||
this->animationState = sprite;
|
||||
InitializeAnimation(this, sprite + 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BF78(Entity* this) {
|
||||
this->action = 1;
|
||||
this->flags2 = 4;
|
||||
this->field_0x1c = 1;
|
||||
this->direction = this->animationState << 3;
|
||||
InitializeAnimation(this, this->animationState + 8);
|
||||
}
|
||||
|
||||
void sub_0802BF98(Entity* this) {
|
||||
if (sub_0806F520(this)) {
|
||||
gUnk_080CD450[this->previousActionFlag](this);
|
||||
} else {
|
||||
this->action = 2;
|
||||
this->actionDelay = 30;
|
||||
this->flags &= ~0x80;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BFD0(Entity* this) {
|
||||
this->previousActionFlag = 2;
|
||||
}
|
||||
|
||||
void sub_0802BFD8(Entity* this) {
|
||||
sub_0806F4E8(this);
|
||||
}
|
||||
|
||||
void sub_0802BFE0(Entity* this) {
|
||||
if (sub_0806F3E4(this)) {
|
||||
DeleteEntity(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802BFF4(Entity* this) {
|
||||
this->spriteSettings.b.draw ^= 1;
|
||||
if (--this->actionDelay == 0) {
|
||||
DeleteEntity(this);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0802C020(Entity* this) {
|
||||
u32 uVar1 = Random();
|
||||
|
||||
if (sub_08049FA0(this) || (uVar1 & 1))
|
||||
return DirectionRound(uVar1);
|
||||
|
||||
return (sub_08049EE4(this) + (uVar1 >> 0x10 & 1) * 4) & 0x18;
|
||||
}
|
||||
|
||||
void sub_0802C058(Entity* this, u32 param_2) {
|
||||
this->action = 2;
|
||||
this->direction = param_2;
|
||||
this->animationState = param_2 >> 3;
|
||||
InitializeAnimation(this, this->animationState);
|
||||
}
|
||||
|
||||
bool32 sub_0802C06C(Entity* this) {
|
||||
u32 x = this->x.HALF.HI + (s8)this->boundingBox->unknown[0];
|
||||
u32 y = this->y.HALF.HI + (s8)this->boundingBox->unknown[1];
|
||||
u32 xdiff = gUnk_080CD45C[(this->direction >> 2) + 0];
|
||||
u32 ydiff = gUnk_080CD45C[(this->direction >> 2) + 1];
|
||||
|
||||
Entity* ent = this->collisionLayer == 2 ? &gUnk_0200D654 : &gUnk_02027EB4;
|
||||
|
||||
u32 i;
|
||||
for (i = 0; i < 8; i++) {
|
||||
x += xdiff;
|
||||
y += ydiff;
|
||||
if (sub_080AE4CC(ent, x, y, 0))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 sub_0806FC24(u32, u32);
|
||||
|
||||
bool32 sub_0802C0E8(Entity* this) {
|
||||
if (--this->actionDelay == 0) {
|
||||
return TRUE;
|
||||
} else {
|
||||
const s8* ptr = &gUnk_080CD45C[this->direction >> 2];
|
||||
s32 x = this->x.HALF.HI + (s8)this->boundingBox->unknown[0] + ptr[0] * 6;
|
||||
s32 y = this->y.HALF.HI + (s8)this->boundingBox->unknown[1] + ptr[1] * 6;
|
||||
|
||||
Entity* ent = this->collisionLayer == 2 ? &gUnk_0200D654 : &gUnk_02027EB4;
|
||||
u32 ret = FALSE;
|
||||
if (!sub_0806FC24(TILE(x, y), 9)) {
|
||||
u32 tmp = sub_080AE4CC(ent, x, y, 0);
|
||||
ret = (-tmp | tmp) >> 0x1f;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802C18C(Entity* this) {
|
||||
this->field_0x78.HALF.LO--;
|
||||
if ((this->field_0x78.HALF.LO & 7) == 0) {
|
||||
Entity* ent = CreateObject(0xf, 0x11, 0x40);
|
||||
if (ent) {
|
||||
PositionRelative(this, ent, 0, 0x10000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802C1C0(Entity* this) {
|
||||
this->action = 1;
|
||||
this->actionDelay = 30;
|
||||
}
|
||||
|
||||
void sub_0802C1CC(Entity* this) {
|
||||
const s8* ptr = &gUnk_080CD464[this->animationState << 2];
|
||||
sub_08008796(this, 9, this->x.HALF.HI + ptr[0], this->y.HALF.HI + ptr[1]);
|
||||
sub_08008796(this, 9, this->x.HALF.HI + ptr[2], this->y.HALF.HI + ptr[3]);
|
||||
}
|
||||
|
||||
void sub_0802C218(Entity* this) {
|
||||
this->action = 6;
|
||||
this->nonPlanarMovement = 0xe0;
|
||||
this->field_0x20 = 0x18000;
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
void (*const gUnk_080CD3E4[])(Entity*) = {
|
||||
sub_0802BBAC,
|
||||
sub_0802BBC4,
|
||||
sub_08001324,
|
||||
sub_0804A7D4,
|
||||
sub_08001242,
|
||||
sub_0802BC20,
|
||||
};
|
||||
|
||||
void (*const gUnk_080CD3FC[])(Entity*) = {
|
||||
sub_0802BF78,
|
||||
sub_0802BF98,
|
||||
sub_0802BFF4,
|
||||
};
|
||||
|
||||
void (*const gUnk_080CD408[])(Entity*) = {
|
||||
sub_0802BD54,
|
||||
sub_0802BD8C,
|
||||
sub_0802BDE0,
|
||||
sub_0802BE18,
|
||||
sub_0802BE48,
|
||||
sub_0802BE80,
|
||||
sub_0802BEBC,
|
||||
sub_0802BEEC,
|
||||
sub_0802BF3C,
|
||||
};
|
||||
|
||||
void (*const gUnk_080CD42C[])(Entity*) = {
|
||||
sub_0802BC74,
|
||||
sub_0802BCA0,
|
||||
sub_0802BCA8,
|
||||
};
|
||||
|
||||
void (*const gUnk_080CD438[])(Entity*) = {
|
||||
sub_0802BCFC,
|
||||
sub_0802BCA0,
|
||||
sub_0802BD08,
|
||||
sub_0802BD10,
|
||||
nullsub_145,
|
||||
sub_0802BD28,
|
||||
};
|
||||
|
||||
void (*const gUnk_080CD450[])(Entity*) = {
|
||||
sub_0802BFD0,
|
||||
sub_0802BFD8,
|
||||
sub_0802BFE0,
|
||||
};
|
||||
|
||||
const s8 gUnk_080CD45C[] = {
|
||||
0, -8,
|
||||
8, 0,
|
||||
0, 8,
|
||||
-8, 0,
|
||||
};
|
||||
|
||||
const s8 gUnk_080CD464[] = {
|
||||
-3, -8, 3, -8,
|
||||
8, -3, 8, 3,
|
||||
-3, 8, 3, 8,
|
||||
-8, -3, -8, 3,
|
||||
};
|
||||
// clang-format on
|
Loading…
Reference in New Issue