tmc/asm/projectile/projectile22.s

849 lines
14 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Projectile22
Projectile22: @ 0x080AC274
push {r4, r5, lr}
adds r4, r0, #0
ldr r0, [r4, #0x50]
ldr r0, [r0, #4]
cmp r0, #0
bne _080AC284
bl DeleteThisEntity
_080AC284:
ldr r1, _080AC2BC @ =gUnk_0812A994
ldrb r0, [r4, #0xb]
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r4, #0
bl _call_via_r1
ldrb r0, [r4, #0xa]
cmp r0, #0
bne _080AC2C0
ldrb r0, [r4, #0x1b]
movs r1, #0xc0
orrs r0, r1
strb r0, [r4, #0x1b]
ldrb r0, [r4, #0x19]
orrs r0, r1
strb r0, [r4, #0x19]
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #8
rsbs r0, r0, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r2]
b _080AC324
.align 2, 0
_080AC2BC: .4byte gUnk_0812A994
_080AC2C0:
ldr r5, [r4, #0x50]
ldrb r2, [r5, #0x1b]
lsrs r2, r2, #6
lsls r2, r2, #6
ldrb r3, [r4, #0x1b]
movs r1, #0x3f
adds r0, r1, #0
ands r0, r3
orrs r0, r2
strb r0, [r4, #0x1b]
ldrb r0, [r5, #0x19]
lsrs r0, r0, #6
lsls r0, r0, #6
ldrb r2, [r4, #0x19]
ands r1, r2
orrs r1, r0
strb r1, [r4, #0x19]
adds r0, r5, #0
adds r0, #0x29
ldrb r1, [r0]
lsls r1, r1, #0x1d
lsrs r1, r1, #0x1d
subs r1, #2
adds r3, r4, #0
adds r3, #0x29
movs r0, #7
ands r1, r0
ldrb r2, [r3]
movs r0, #8
rsbs r0, r0, #0
ands r0, r2
orrs r0, r1
strb r0, [r3]
ldrb r0, [r5, #0x19]
lsrs r0, r0, #6
cmp r0, #3
bne _080AC31C
adds r0, r5, #0
adds r0, #0x7c
ldrb r0, [r0]
cmp r0, #0
bne _080AC31C
ldrb r1, [r4, #0x10]
movs r0, #0x7f
ands r0, r1
b _080AC322
_080AC31C:
ldrb r1, [r4, #0x10]
movs r0, #0x80
orrs r0, r1
_080AC322:
strb r0, [r4, #0x10]
_080AC324:
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_080AC328
sub_080AC328: @ 0x080AC328
push {lr}
ldr r2, _080AC33C @ =gUnk_0812A9A8
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_080AC33C: .4byte gUnk_0812A9A8
thumb_func_start sub_080AC340
sub_080AC340: @ 0x080AC340
push {r4, r5, lr}
adds r5, r0, #0
bl sub_080AC5E4
cmp r0, #0
beq _080AC380
movs r2, #1
movs r4, #1
strb r4, [r5, #0xc]
movs r0, #0xc
strb r0, [r5, #0x1e]
ldrb r1, [r5, #0x18]
subs r0, #0x10
ands r0, r1
orrs r0, r2
strb r0, [r5, #0x18]
bl Random
ldr r1, _080AC384 @ =gUnk_0812A9B4
ands r0, r4
lsls r0, r0, #1
adds r0, r0, r1
ldrh r0, [r0]
adds r1, r5, #0
adds r1, #0x7a
strh r0, [r1]
subs r1, #0x42
movs r0, #2
strb r0, [r1]
adds r0, r5, #0
bl sub_080AC388
_080AC380:
pop {r4, r5, pc}
.align 2, 0
_080AC384: .4byte gUnk_0812A9B4
thumb_func_start sub_080AC388
sub_080AC388: @ 0x080AC388
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r5, r0, #0
ldr r1, _080AC3E4 @ =gUnk_0812A9B8
ldrb r0, [r5, #0xa]
adds r0, r0, r1
ldrb r3, [r0]
ldr r0, [r5, #0x50]
mov sl, r0
ldrb r0, [r0, #0x14]
movs r1, #0x80
mov sb, r1
mov r1, sb
eors r1, r0
adds r6, r5, #0
adds r6, #0x7c
ldrh r4, [r6]
lsrs r0, r4, #8
subs r1, r1, r0
adds r2, r5, #0
adds r2, #0x7a
ldrh r7, [r2]
mov ip, r7
movs r7, #0
ldrsh r0, [r2, r7]
cmp r0, #0
bge _080AC404
subs r0, r1, r3
movs r7, #0xff
mov r8, r7
ands r0, r7
cmp r0, #0x7f
bhi _080AC3E8
movs r1, #0
ldrsh r0, [r2, r1]
rsbs r0, r0, #0
strh r0, [r2]
mov r2, sl
ldrb r0, [r2, #0x14]
mov r7, sb
eors r0, r7
subs r0, r0, r3
b _080AC422
.align 2, 0
_080AC3E4: .4byte gUnk_0812A9B8
_080AC3E8:
mov r2, ip
adds r0, r4, r2
strh r0, [r6]
adds r0, r1, r3
mov r7, r8
ands r0, r7
cmp r0, #0x80
bls _080AC45A
mov r1, sl
ldrb r0, [r1, #0x14]
mov r2, sb
eors r0, r2
adds r0, r0, r3
b _080AC44E
_080AC404:
adds r0, r1, r3
movs r7, #0xff
mov r8, r7
ands r0, r7
cmp r0, #0x80
bls _080AC432
movs r1, #0
ldrsh r0, [r2, r1]
rsbs r0, r0, #0
strh r0, [r2]
mov r2, sl
ldrb r0, [r2, #0x14]
mov r7, sb
eors r0, r7
adds r0, r0, r3
_080AC422:
movs r1, #0xff
ands r0, r1
lsls r0, r0, #8
strh r0, [r6]
adds r0, r5, #0
bl sub_080AC884
b _080AC45A
_080AC432:
mov r2, ip
adds r0, r4, r2
strh r0, [r6]
subs r0, r1, r3
mov r7, r8
ands r0, r7
subs r0, #1
cmp r0, #0x7e
bhi _080AC45A
mov r1, sl
ldrb r0, [r1, #0x14]
mov r2, sb
eors r0, r2
subs r0, r0, r3
_080AC44E:
movs r1, #0xff
ands r0, r1
lsls r0, r0, #8
movs r1, #0x80
orrs r0, r1
strh r0, [r6]
_080AC45A:
adds r0, r5, #0
adds r0, #0x7c
ldrh r0, [r0]
lsrs r0, r0, #8
strb r0, [r5, #0x15]
adds r0, r5, #0
bl sub_080AC6F0
adds r0, r5, #0
bl sub_080AC760
adds r0, r5, #0
bl sub_080AC7C4
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_080AC480
sub_080AC480: @ 0x080AC480
push {r4, lr}
adds r4, r0, #0
ldrb r1, [r4, #0xe]
cmp r1, #0
beq _080AC4BE
ldr r0, [r4, #0x50]
adds r0, #0x45
ldrb r0, [r0]
cmp r0, #0
bne _080AC4A2
movs r0, #1
strb r0, [r4, #0xc]
adds r1, r4, #0
adds r1, #0x3f
movs r0, #0x1d
strb r0, [r1]
b _080AC50A
_080AC4A2:
subs r0, r1, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080AC50A
adds r0, r4, #0
adds r0, #0x3f
movs r1, #0x1c
strb r1, [r0]
movs r0, #0x8b
lsls r0, r0, #1
bl SoundReq
b _080AC50A
_080AC4BE:
ldrb r0, [r4, #0xf]
subs r0, #1
strb r0, [r4, #0xf]
lsls r0, r0, #0x18
cmp r0, #0
bne _080AC4D6
movs r0, #1
strb r0, [r4, #0xc]
adds r1, r4, #0
adds r1, #0x3f
movs r0, #0x1d
strb r0, [r1]
_080AC4D6:
adds r1, r4, #0
adds r1, #0x7c
ldrh r2, [r1]
adds r0, r4, #0
adds r0, #0x7a
movs r3, #0
ldrsh r0, [r0, r3]
cmp r0, #0
ble _080AC4EE
movs r3, #0xc0
lsls r3, r3, #2
b _080AC4F0
_080AC4EE:
ldr r3, _080AC50C @ =0xFFFFFD00
_080AC4F0:
adds r0, r2, r3
strh r0, [r1]
lsrs r0, r0, #8
strb r0, [r4, #0x15]
adds r0, r4, #0
bl sub_080AC6F0
adds r0, r4, #0
bl sub_080AC760
adds r0, r4, #0
bl sub_080AC7C4
_080AC50A:
pop {r4, pc}
.align 2, 0
_080AC50C: .4byte 0xFFFFFD00
thumb_func_start sub_080AC510
sub_080AC510: @ 0x080AC510
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xc]
cmp r0, #0
bne _080AC556
movs r3, #1
movs r0, #1
strb r0, [r4, #0xc]
ldr r2, _080AC558 @ =gUnk_0812A9BA
ldrb r1, [r4, #0xa]
lsls r0, r1, #1
adds r0, r0, r1
ldrb r1, [r4, #0xb]
adds r0, r0, r1
subs r0, #1
adds r0, r0, r2
ldrb r0, [r0]
strb r0, [r4, #0x1e]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
orrs r0, r3
strb r0, [r4, #0x18]
adds r1, r4, #0
adds r1, #0x38
movs r0, #2
strb r0, [r1]
ldrh r1, [r4, #0xa]
movs r0, #0xc0
lsls r0, r0, #2
cmp r1, r0
bne _080AC556
ldr r0, _080AC55C @ =gUnk_080FD458
str r0, [r4, #0x48]
_080AC556:
pop {r4, pc}
.align 2, 0
_080AC558: .4byte gUnk_0812A9BA
_080AC55C: .4byte gUnk_080FD458
thumb_func_start sub_080AC560
sub_080AC560: @ 0x080AC560
push {r4, r5, lr}
adds r4, r0, #0
ldr r5, [r4, #0x54]
ldr r0, [r5, #4]
cmp r0, #0
bne _080AC570
bl DeleteThisEntity
_080AC570:
ldrb r0, [r4, #0xc]
cmp r0, #0
bne _080AC5A6
movs r0, #1
strb r0, [r4, #0xc]
adds r1, r4, #0
adds r1, #0x38
movs r0, #2
strb r0, [r1]
ldrb r0, [r4, #0xa]
cmp r0, #0
bne _080AC590
ldr r0, _080AC58C @ =gUnk_080FD168
b _080AC592
.align 2, 0
_080AC58C: .4byte gUnk_080FD168
_080AC590:
ldr r0, _080AC5DC @ =gUnk_080FD448
_080AC592:
str r0, [r4, #0x48]
movs r0, #0xff
strb r0, [r4, #0x1e]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r4, #0x18]
_080AC5A6:
adds r0, r4, #0
adds r0, #0x79
ldrb r2, [r0]
lsls r2, r2, #8
ldr r3, _080AC5E0 @ =gSineTable
ldrb r0, [r5, #0x15]
lsls r0, r0, #1
adds r0, r0, r3
movs r1, #0
ldrsh r0, [r0, r1]
adds r1, r0, #0
muls r1, r2, r1
ldr r0, [r5, #0x2c]
adds r0, r0, r1
str r0, [r4, #0x2c]
ldrb r0, [r5, #0x15]
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r3
movs r1, #0
ldrsh r0, [r0, r1]
adds r1, r0, #0
muls r1, r2, r1
ldr r0, [r5, #0x30]
subs r0, r0, r1
str r0, [r4, #0x30]
pop {r4, r5, pc}
.align 2, 0
_080AC5DC: .4byte gUnk_080FD448
_080AC5E0: .4byte gSineTable
thumb_func_start sub_080AC5E4
sub_080AC5E4: @ 0x080AC5E4
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r5, r0, #0
ldrb r4, [r5, #0xa]
cmp r4, #0
bne _080AC668
ldr r0, _080AC664 @ =gEntCount
ldrb r0, [r0]
cmp r0, #0x43
bhi _080AC670
adds r1, r5, #0
adds r1, #0x79
movs r0, #0x11
strb r0, [r1]
movs r0, #0x22
bl sub_080A7EE0
adds r6, r0, #0
ldrb r0, [r5, #0xa]
strb r0, [r6, #0xa]
movs r0, #1
strb r0, [r6, #0xb]
ldr r0, [r5, #0x50]
str r0, [r6, #0x50]
adds r1, r6, #0
adds r1, #0x79
movs r0, #0x12
strb r0, [r1]
str r6, [r5, #0x54]
movs r0, #0x22
bl sub_080A7EE0
adds r7, r0, #0
ldrb r0, [r5, #0xa]
strb r0, [r7, #0xa]
movs r0, #2
strb r0, [r7, #0xb]
ldr r0, [r5, #0x50]
str r0, [r7, #0x50]
adds r0, r7, #0
adds r0, #0x79
movs r1, #0x14
mov r8, r1
mov r1, r8
strb r1, [r0]
str r7, [r6, #0x54]
movs r0, #0x22
bl sub_080A7EE0
ldrb r1, [r5, #0xa]
strb r1, [r0, #0xa]
movs r1, #3
strb r1, [r0, #0xb]
ldr r1, [r5, #0x50]
str r1, [r0, #0x50]
str r4, [r0, #0x54]
adds r1, r0, #0
adds r1, #0x79
strb r4, [r1]
str r0, [r7, #0x54]
b _080AC6C8
.align 2, 0
_080AC664: .4byte gEntCount
_080AC668:
ldr r0, _080AC674 @ =gEntCount
ldrb r0, [r0]
cmp r0, #0x44
bls _080AC678
_080AC670:
movs r0, #0
b _080AC6E8
.align 2, 0
_080AC674: .4byte gEntCount
_080AC678:
adds r1, r5, #0
adds r1, #0x79
movs r0, #0
mov sb, r0
movs r0, #0xf
strb r0, [r1]
movs r0, #0x22
bl sub_080A7EE0
adds r6, r0, #0
ldrb r0, [r5, #0xa]
strb r0, [r6, #0xa]
movs r0, #1
strb r0, [r6, #0xb]
ldr r0, [r5, #0x50]
str r0, [r6, #0x50]
adds r0, r6, #0
adds r0, #0x79
movs r1, #0x10
mov r8, r1
mov r1, r8
strb r1, [r0]
str r6, [r5, #0x54]
movs r0, #0x22
bl sub_080A7EE0
adds r7, r0, #0
ldrb r0, [r5, #0xa]
strb r0, [r7, #0xa]
movs r0, #2
strb r0, [r7, #0xb]
ldr r0, [r5, #0x50]
str r0, [r7, #0x50]
mov r0, sb
str r0, [r7, #0x54]
adds r1, r7, #0
adds r1, #0x79
movs r0, #0x20
strb r0, [r1]
str r7, [r6, #0x54]
_080AC6C8:
movs r0, #0x22
bl sub_080A7EE0
adds r6, r0, #0
ldrb r0, [r5, #0xa]
strb r0, [r6, #0xa]
movs r0, #4
strb r0, [r6, #0xb]
ldr r0, [r5, #0x50]
str r0, [r6, #0x50]
str r5, [r6, #0x54]
adds r0, r6, #0
adds r0, #0x79
mov r1, r8
strb r1, [r0]
movs r0, #1
_080AC6E8:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_080AC6F0
sub_080AC6F0: @ 0x080AC6F0
push {r4, r5, lr}
adds r4, r0, #0
ldrb r0, [r4, #0x15]
movs r2, #0x1f
ands r2, r0
lsrs r0, r0, #5
lsls r1, r0, #1
adds r3, r1, r0
ldr r1, _080AC724 @ =gUnk_0812A9C0
ldrb r0, [r4, #0x14]
adds r0, r0, r1
ldrb r0, [r0]
subs r0, r0, r3
adds r5, r1, #0
cmp r0, #3
bhi _080AC73A
cmp r0, #1
beq _080AC72E
cmp r0, #1
blo _080AC728
cmp r0, #2
beq _080AC732
cmp r2, #0x19
bhi _080AC75C
b _080AC73A
.align 2, 0
_080AC724: .4byte gUnk_0812A9C0
_080AC728:
cmp r2, #6
bls _080AC75C
b _080AC73A
_080AC72E:
subs r0, r2, #5
b _080AC736
_080AC732:
adds r0, r2, #0
subs r0, #0xf
_080AC736:
cmp r0, #0xc
bls _080AC75C
_080AC73A:
adds r0, r3, #3
cmp r2, #0x1a
bhi _080AC74E
adds r0, r3, #2
cmp r2, #0x10
bhi _080AC74E
adds r0, r3, #0
cmp r2, #5
bls _080AC74E
adds r0, #1
_080AC74E:
movs r1, #0x18
bl __modsi3
strb r0, [r4, #0x14]
adds r0, r0, r5
ldrb r0, [r0]
strb r0, [r4, #0x1e]
_080AC75C:
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_080AC760
sub_080AC760: @ 0x080AC760
push {r4, r5, r6, lr}
adds r6, r0, #0
ldr r4, [r6, #0x54]
ldrb r0, [r4, #0x15]
ldrb r3, [r6, #0x15]
subs r2, r0, r3
movs r1, #0xff
ands r2, r1
adds r0, r2, #0
adds r0, #8
ands r0, r1
cmp r0, #0x10
ble _080AC78A
cmp r2, #0x80
ble _080AC784
adds r0, r3, #0
subs r0, #8
b _080AC788
_080AC784:
adds r0, r3, #0
adds r0, #8
_080AC788:
strb r0, [r4, #0x15]
_080AC78A:
ldr r5, [r4, #0x54]
ldr r0, [r5, #0x54]
cmp r0, #0
bne _080AC79C
ldr r0, [r6, #0x50]
ldrb r0, [r0, #0x14]
movs r1, #0x80
eors r0, r1
b _080AC7BE
_080AC79C:
ldrb r0, [r5, #0x15]
ldrb r3, [r4, #0x15]
subs r2, r0, r3
movs r1, #0xff
ands r2, r1
adds r0, r2, #0
adds r0, #8
ands r0, r1
cmp r0, #0x10
ble _080AC7C0
cmp r2, #0x80
ble _080AC7BA
adds r0, r3, #0
subs r0, #8
b _080AC7BE
_080AC7BA:
adds r0, r3, #0
adds r0, #8
_080AC7BE:
strb r0, [r5, #0x15]
_080AC7C0:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start sub_080AC7C4
sub_080AC7C4: @ 0x080AC7C4
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r4, r0, #0
ldr r0, [r4, #0x54]
mov r8, r0
ldr r7, [r0, #0x54]
ldr r5, [r7, #0x54]
cmp r5, #0
beq _080AC7E4
ldr r0, [r4, #0x50]
adds r1, r5, #0
bl CopyPosition
b _080AC7E6
_080AC7E4:
ldr r5, [r4, #0x50]
_080AC7E6:
adds r0, r7, #0
adds r0, #0x79
ldrb r2, [r0]
lsls r2, r2, #8
ldr r3, _080AC880 @ =gSineTable
mov sb, r3
ldrb r1, [r7, #0x15]
lsls r0, r1, #1
add r0, sb
movs r3, #0
ldrsh r0, [r0, r3]
adds r6, r0, #0
muls r6, r2, r6
adds r1, #0x40
lsls r1, r1, #1
add r1, sb
movs r3, #0
ldrsh r0, [r1, r3]
muls r0, r2, r0
rsbs r3, r0, #0
adds r0, r5, #0
adds r1, r7, #0
adds r2, r6, #0
bl PositionRelative
mov r0, r8
adds r0, #0x79
ldrb r2, [r0]
lsls r2, r2, #8
mov r0, r8
ldrb r1, [r0, #0x15]
lsls r0, r1, #1
add r0, sb
movs r3, #0
ldrsh r0, [r0, r3]
adds r6, r0, #0
muls r6, r2, r6
adds r1, #0x40
lsls r1, r1, #1
add r1, sb
movs r3, #0
ldrsh r0, [r1, r3]
muls r0, r2, r0
rsbs r3, r0, #0
adds r0, r7, #0
mov r1, r8
adds r2, r6, #0
bl PositionRelative
adds r0, r4, #0
adds r0, #0x79
ldrb r2, [r0]
lsls r2, r2, #8
ldrb r1, [r4, #0x15]
lsls r0, r1, #1
add r0, sb
movs r3, #0
ldrsh r0, [r0, r3]
adds r6, r0, #0
muls r6, r2, r6
adds r1, #0x40
lsls r1, r1, #1
add r1, sb
movs r3, #0
ldrsh r0, [r1, r3]
muls r0, r2, r0
rsbs r3, r0, #0
mov r0, r8
adds r1, r4, #0
adds r2, r6, #0
bl PositionRelative
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080AC880: .4byte gSineTable
thumb_func_start sub_080AC884
sub_080AC884: @ 0x080AC884
push {lr}
adds r1, r0, #0
ldr r0, [r1, #0x50]
adds r2, r0, #0
adds r2, #0x72
ldrh r0, [r2]
cmp r0, #0
beq _080AC8A4
movs r0, #0
strh r0, [r2]
movs r0, #2
strb r0, [r1, #0xc]
movs r0, #0x3c
strb r0, [r1, #0xe]
movs r0, #0x56
strb r0, [r1, #0xf]
_080AC8A4:
pop {pc}
.align 2, 0