tmc/asm/projectile/projectileA.s

460 lines
7.8 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ProjectileA
ProjectileA: @ 0x080A8DC0
push {r4, r5, lr}
adds r5, r0, #0
ldr r4, _080A8DD8 @ =gUnk_08129954
bl GetNextFunction
lsls r0, r0, #2
adds r0, r0, r4
ldr r1, [r0]
adds r0, r5, #0
bl _call_via_r1
pop {r4, r5, pc}
.align 2, 0
_080A8DD8: .4byte gUnk_08129954
thumb_func_start sub_080A8DDC
sub_080A8DDC: @ 0x080A8DDC
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #3
beq _080A8E12
adds r0, r4, #0
adds r0, #0x41
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _080A8E12
movs r2, #0x7f
adds r0, r2, #0
ands r0, r1
cmp r0, #0x1e
beq _080A8E12
movs r0, #3
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x10]
adds r0, r2, #0
ands r0, r1
strb r0, [r4, #0x10]
adds r0, r4, #0
movs r1, #0x53
bl InitializeAnimation
_080A8E12:
ldr r0, _080A8E24 @ =gUnk_08129968
ldrb r1, [r4, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
pop {r4, pc}
.align 2, 0
_080A8E24: .4byte gUnk_08129968
thumb_func_start sub_080A8E28
sub_080A8E28: @ 0x080A8E28
push {r4, r5, r6, lr}
adds r5, r0, #0
movs r0, #1
strb r0, [r5, #0xc]
ldr r0, _080A8E80 @ =0xFFFF0000
str r0, [r5, #0x20]
ldrb r0, [r5, #0xa]
cmp r0, #3
beq _080A8E6E
ldr r0, [r5, #0x50]
adds r1, r5, #0
bl CopyPosition
movs r1, #0x80
lsls r1, r1, #5
ldrb r2, [r5, #0x15]
adds r0, r5, #0
bl sub_0806F5BC
ldr r0, [r5, #0x50]
ldr r2, [r5, #0x54]
ldr r1, [r0, #0x30]
ldr r0, [r2, #0x30]
subs r1, r1, r0
str r1, [r5, #0x34]
ldr r0, [r5, #0x30]
subs r0, r0, r1
str r0, [r5, #0x30]
adds r0, r5, #0
movs r1, #0x51
bl InitializeAnimation
ldr r0, _080A8E84 @ =0x000001B5
bl SoundReq
_080A8E6E:
ldrb r4, [r5, #0xa]
cmp r4, #2
beq _080A8EF2
cmp r4, #2
ble _080A8E88
cmp r4, #3
beq _080A8F02
b _080A8FAE
.align 2, 0
_080A8E80: .4byte 0xFFFF0000
_080A8E84: .4byte 0x000001B5
_080A8E88:
cmp r4, #0
bge _080A8E8E
b _080A8FAE
_080A8E8E:
ldr r0, _080A8EC0 @ =gPlayerEntity
movs r2, #0x2e
ldrsh r1, [r0, r2]
movs r3, #0x32
ldrsh r2, [r0, r3]
adds r0, r5, #0
bl sub_080041DC
adds r4, r0, #0
ldrb r6, [r5, #0xa]
cmp r6, #1
bne _080A8ECE
bl Random
adds r2, r0, #0
ldr r0, _080A8EC4 @ =0x000001FF
ands r2, r0
ldr r0, _080A8EC8 @ =gScreenTransition
ldr r0, [r0]
ands r0, r6
cmp r0, #0
bne _080A8ECC
adds r4, r4, r2
b _080A8ECE
.align 2, 0
_080A8EC0: .4byte gPlayerEntity
_080A8EC4: .4byte 0x000001FF
_080A8EC8: .4byte gScreenTransition
_080A8ECC:
subs r4, r4, r2
_080A8ECE:
cmp r4, #0x1f
bgt _080A8ED6
movs r4, #0x20
b _080A8EE0
_080A8ED6:
movs r0, #0x80
lsls r0, r0, #3
cmp r4, r0
ble _080A8EE0
adds r4, r0, #0
_080A8EE0:
lsls r1, r4, #8
ldr r0, [r5, #0x34]
bl __divsi3
lsls r0, r0, #0xd
str r0, [r5, #0x20]
movs r0, #0x1e
strb r0, [r5, #0xf]
b _080A8FAE
_080A8EF2:
ldr r0, [r5, #0x34]
movs r1, #0xc0
lsls r1, r1, #9
bl __divsi3
lsls r0, r0, #0xc
str r0, [r5, #0x20]
b _080A8FAE
_080A8F02:
ldr r0, _080A8F64 @ =0xFF600000
str r0, [r5, #0x34]
bl Random
ands r4, r0
lsls r2, r4, #1
ldr r1, _080A8F68 @ =gUnk_08129978
adds r0, r2, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
ldrh r3, [r5, #0x2e]
adds r0, r0, r3
strh r0, [r5, #0x2e]
adds r0, r2, #1
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
ldrh r1, [r5, #0x32]
adds r0, r0, r1
strh r0, [r5, #0x32]
movs r0, #2
ands r2, r0
cmp r2, #0
beq _080A8F74
bl Random
ldr r2, _080A8F6C @ =gUnk_08129988
movs r1, #0xf
ands r1, r0
adds r1, r1, r2
movs r0, #0
ldrsb r0, [r1, r0]
ldrh r2, [r5, #0x2e]
adds r0, r0, r2
strh r0, [r5, #0x2e]
bl Random
ldr r2, _080A8F70 @ =gUnk_08129980
movs r1, #7
ands r1, r0
adds r1, r1, r2
movs r0, #0
ldrsb r0, [r1, r0]
ldrh r3, [r5, #0x32]
adds r0, r0, r3
b _080A8F9E
.align 2, 0
_080A8F64: .4byte 0xFF600000
_080A8F68: .4byte gUnk_08129978
_080A8F6C: .4byte gUnk_08129988
_080A8F70: .4byte gUnk_08129980
_080A8F74:
bl Random
ldr r2, _080A8FB0 @ =gUnk_08129980
movs r1, #7
ands r1, r0
adds r1, r1, r2
movs r0, #0
ldrsb r0, [r1, r0]
ldrh r1, [r5, #0x2e]
adds r0, r0, r1
strh r0, [r5, #0x2e]
bl Random
ldr r2, _080A8FB4 @ =gUnk_08129988
movs r1, #0xf
ands r1, r0
adds r1, r1, r2
movs r0, #0
ldrsb r0, [r1, r0]
ldrh r2, [r5, #0x32]
adds r0, r0, r2
_080A8F9E:
strh r0, [r5, #0x32]
adds r0, r5, #0
bl sub_08004168
adds r0, r5, #0
movs r1, #0
bl InitializeAnimation
_080A8FAE:
pop {r4, r5, r6, pc}
.align 2, 0
_080A8FB0: .4byte gUnk_08129980
_080A8FB4: .4byte gUnk_08129988
thumb_func_start sub_080A8FB8
sub_080A8FB8: @ 0x080A8FB8
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #3
bne _080A8FE8
movs r1, #0xc0
lsls r1, r1, #5
adds r0, r4, #0
bl sub_08003FC4
cmp r0, #0
bne _080A9054
adds r0, r4, #0
movs r1, #7
bl sub_08008790
adds r0, r4, #0
movs r1, #4
movs r2, #0
bl CreateFx
bl DeleteThisEntity
b _080A9054
_080A8FE8:
adds r0, r4, #0
bl GetNextFrame
adds r0, r4, #0
bl sub_0806F69C
ldrb r0, [r4, #0xa]
cmp r0, #2
beq _080A901C
ldrb r0, [r4, #0xf]
subs r0, #1
strb r0, [r4, #0xf]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0xff
bne _080A901C
movs r0, #0x1e
strb r0, [r4, #0xf]
ldr r1, _080A9048 @ =gPlayerEntity
adds r0, r4, #0
bl GetFacingDirection
adds r1, r0, #0
adds r0, r4, #0
bl sub_08004596
_080A901C:
adds r0, r4, #0
movs r1, #0
bl sub_08003FC4
cmp r0, #0
bne _080A9054
movs r0, #2
strb r0, [r4, #0xc]
adds r0, r4, #0
bl sub_080A90D8
ldrb r0, [r4, #0xa]
cmp r0, #2
bne _080A904C
movs r0, #0xf
strb r0, [r4, #0xe]
adds r0, r4, #0
movs r1, #0x54
bl InitializeAnimation
b _080A9054
.align 2, 0
_080A9048: .4byte gPlayerEntity
_080A904C:
adds r0, r4, #0
movs r1, #0x52
bl InitializeAnimation
_080A9054:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080A9058
sub_080A9058: @ 0x080A9058
push {r4, lr}
adds r4, r0, #0
bl GetNextFrame
ldrb r0, [r4, #0xa]
cmp r0, #2
bne _080A9098
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0xff
bne _080A908A
ldrb r0, [r4, #0x10]
movs r1, #0x7f
ands r1, r0
strb r1, [r4, #0x10]
movs r0, #3
strb r0, [r4, #0xc]
adds r0, r4, #0
movs r1, #0x55
bl InitializeAnimation
b _080A90BA
_080A908A:
adds r0, r4, #0
bl sub_0806F69C
adds r0, r4, #0
bl sub_080A90D8
b _080A90BA
_080A9098:
adds r0, r4, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _080A90BA
movs r0, #3
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x10]
movs r0, #0x7f
ands r0, r1
strb r0, [r4, #0x10]
adds r0, r4, #0
movs r1, #0x53
bl InitializeAnimation
_080A90BA:
pop {r4, pc}
thumb_func_start sub_080A90BC
sub_080A90BC: @ 0x080A90BC
push {r4, lr}
adds r4, r0, #0
bl GetNextFrame
adds r4, #0x5a
ldrb r1, [r4]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _080A90D4
bl DeleteThisEntity
_080A90D4:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080A90D8
sub_080A90D8: @ 0x080A90D8
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
movs r0, #0x74
adds r0, r0, r5
mov ip, r0
ldrh r3, [r0]
movs r1, #0x2e
ldrsh r0, [r5, r1]
ldr r7, _080A9154 @ =gRoomControls
ldrh r1, [r7, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r6, #0x3f
adds r2, r4, #0
ands r2, r6
movs r1, #0x32
ldrsh r0, [r5, r1]
ldrh r1, [r7, #8]
subs r0, r0, r1
asrs r1, r0, #4
adds r0, r1, #0
ands r0, r6
lsls r0, r0, #6
orrs r2, r0
cmp r3, r2
beq _080A9152
movs r0, #0x3f
ands r4, r0
ands r1, r0
lsls r0, r1, #6
orrs r4, r0
mov r2, ip
strh r4, [r2]
adds r0, r5, #0
bl GetTileTypeByEntity
cmp r0, #0x13
beq _080A9128
cmp r0, #0x34
bne _080A9152
_080A9128:
movs r0, #0xd3
lsls r0, r0, #2
movs r3, #0x2e
ldrsh r1, [r5, r3]
ldrh r2, [r7, #6]
subs r1, r1, r2
asrs r1, r1, #4
ands r1, r6
movs r3, #0x32
ldrsh r2, [r5, r3]
ldrh r3, [r7, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r6
lsls r2, r2, #6
orrs r1, r2
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl sub_0807B7D8
_080A9152:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080A9154: .4byte gRoomControls