mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-06 18:53:21 -05:00
sub_80A95AC
This commit is contained in:
parent
48325be5ea
commit
4148c9e16f
|
|
@ -7,777 +7,6 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
thumb_func_start sub_80A91A0
|
||||
sub_80A91A0:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x10
|
||||
lsls r0, 16
|
||||
asrs r2, r0, 16
|
||||
lsls r1, 16
|
||||
asrs r4, r1, 16
|
||||
cmp r2, r4
|
||||
beq _080A928E
|
||||
ldr r1, _080A9260
|
||||
lsls r0, r2, 5
|
||||
subs r0, r2
|
||||
lsls r0, 4
|
||||
ldr r1, [r1]
|
||||
adds r7, r1, r0
|
||||
lsls r0, r4, 5
|
||||
subs r0, r4
|
||||
lsls r0, 4
|
||||
adds r1, r0
|
||||
mov r8, r1
|
||||
movs r1, 0x2
|
||||
ldrsh r0, [r7, r1]
|
||||
movs r2, 0x1
|
||||
negs r2, r2
|
||||
mov r10, r2
|
||||
cmp r0, r10
|
||||
beq _080A928E
|
||||
mov r3, r8
|
||||
movs r1, 0x2
|
||||
ldrsh r0, [r3, r1]
|
||||
cmp r0, r10
|
||||
beq _080A928E
|
||||
movs r3, 0xA2
|
||||
lsls r3, 1
|
||||
adds r0, r7, r3
|
||||
ldr r0, [r0]
|
||||
ldr r1, [r7, 0x14]
|
||||
adds r0, r1
|
||||
str r0, [sp]
|
||||
movs r2, 0xA4
|
||||
lsls r2, 1
|
||||
adds r0, r7, r2
|
||||
ldr r0, [r0]
|
||||
ldr r1, [r7, 0x18]
|
||||
adds r0, r1
|
||||
str r0, [sp, 0x4]
|
||||
add r3, r8
|
||||
ldr r0, [r3]
|
||||
mov r3, r8
|
||||
ldr r1, [r3, 0x14]
|
||||
adds r0, r1
|
||||
str r0, [sp, 0x8]
|
||||
add r2, r8
|
||||
ldr r0, [r2]
|
||||
ldr r1, [r3, 0x18]
|
||||
adds r0, r1
|
||||
add r4, sp, 0x8
|
||||
str r0, [r4, 0x4]
|
||||
adds r5, r7, 0
|
||||
adds r5, 0xC
|
||||
mov r6, r8
|
||||
adds r6, 0xC
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
adds r2, r4, 0
|
||||
adds r3, r6, 0
|
||||
bl SizedDeltaDirection8
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
mov r9, r0
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
adds r2, r4, 0
|
||||
adds r3, r6, 0
|
||||
bl SizedDeltaDirection4
|
||||
lsls r0, 24
|
||||
asrs r1, r0, 24
|
||||
cmp r9, r10
|
||||
beq _080A928E
|
||||
cmp r1, r10
|
||||
beq _080A928E
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r7, r2]
|
||||
cmp r0, 0x24
|
||||
bgt _080A9264
|
||||
movs r3, 0xA1
|
||||
lsls r3, 1
|
||||
adds r0, r7, r3
|
||||
mov r2, r9
|
||||
strb r2, [r0]
|
||||
b _080A926C
|
||||
.align 2, 0
|
||||
_080A9260: .4byte gGroundLives
|
||||
_080A9264:
|
||||
movs r3, 0xA1
|
||||
lsls r3, 1
|
||||
adds r0, r7, r3
|
||||
strb r1, [r0]
|
||||
_080A926C:
|
||||
mov r2, r8
|
||||
movs r3, 0x2
|
||||
ldrsh r0, [r2, r3]
|
||||
cmp r0, 0x25
|
||||
bgt _080A927A
|
||||
mov r0, r9
|
||||
b _080A927C
|
||||
_080A927A:
|
||||
adds r0, r1, 0
|
||||
_080A927C:
|
||||
movs r1, 0x5
|
||||
bl sub_8002984
|
||||
movs r1, 0xA1
|
||||
lsls r1, 1
|
||||
add r1, r8
|
||||
strb r0, [r1]
|
||||
movs r0, 0x1
|
||||
b _080A9290
|
||||
_080A928E:
|
||||
movs r0, 0
|
||||
_080A9290:
|
||||
add sp, 0x10
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A91A0
|
||||
|
||||
thumb_func_start GetLivesCollision_80A92A0
|
||||
GetLivesCollision_80A92A0:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
mov r9, r1
|
||||
adds r4, r2, 0
|
||||
lsls r0, 16
|
||||
asrs r6, r0, 16
|
||||
ldr r0, _080A931C
|
||||
ldr r0, [r0]
|
||||
mov r12, r0
|
||||
movs r2, 0
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
mov r8, r0
|
||||
movs r5, 0x80
|
||||
lsls r5, 9
|
||||
_080A92C2:
|
||||
cmp r2, r6
|
||||
beq _080A9320
|
||||
mov r1, r12
|
||||
movs r7, 0x2
|
||||
ldrsh r0, [r1, r7]
|
||||
cmp r0, r8
|
||||
beq _080A9320
|
||||
movs r0, 0x8E
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
mov r1, r9
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A9320
|
||||
movs r0, 0xA2
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r3]
|
||||
cmp r1, r0
|
||||
bge _080A9320
|
||||
movs r0, 0xA6
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r4]
|
||||
cmp r1, r0
|
||||
ble _080A9320
|
||||
movs r0, 0xA4
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r3, 0x4]
|
||||
cmp r1, r0
|
||||
bge _080A9320
|
||||
movs r0, 0xA8
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r4, 0x4]
|
||||
cmp r1, r0
|
||||
ble _080A9320
|
||||
adds r0, r2, 0
|
||||
b _080A9338
|
||||
.align 2, 0
|
||||
_080A931C: .4byte gGroundLives
|
||||
_080A9320:
|
||||
adds r0, r5, 0
|
||||
movs r7, 0x80
|
||||
lsls r7, 9
|
||||
adds r5, r7
|
||||
asrs r2, r0, 16
|
||||
movs r0, 0xF8
|
||||
lsls r0, 1
|
||||
add r12, r0
|
||||
cmp r2, 0x17
|
||||
ble _080A92C2
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
_080A9338:
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GetLivesCollision_80A92A0
|
||||
|
||||
thumb_func_start sub_80A9344
|
||||
sub_80A9344:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x4
|
||||
mov r9, r1
|
||||
str r2, [sp]
|
||||
adds r5, r3, 0
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
mov r8, r0
|
||||
ldr r0, _080A93C4
|
||||
ldr r0, [r0]
|
||||
mov r12, r0
|
||||
movs r4, 0
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
mov r10, r0
|
||||
movs r7, 0x80
|
||||
lsls r7, 9
|
||||
_080A936E:
|
||||
cmp r4, r8
|
||||
beq _080A93C8
|
||||
mov r1, r12
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, r10
|
||||
beq _080A93C8
|
||||
movs r0, 0x8E
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
mov r6, r9
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
beq _080A93C8
|
||||
movs r0, 0xA2
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
mov r6, r12
|
||||
ldr r0, [r6, 0x14]
|
||||
adds r2, r1, r0
|
||||
movs r0, 0xA4
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r6, 0x18]
|
||||
adds r3, r1, r0
|
||||
ldr r0, [r5]
|
||||
cmp r2, r0
|
||||
bge _080A93C8
|
||||
ldr r1, [sp]
|
||||
ldr r0, [r1]
|
||||
cmp r2, r0
|
||||
ble _080A93C8
|
||||
ldr r0, [r5, 0x4]
|
||||
cmp r3, r0
|
||||
bge _080A93C8
|
||||
ldr r0, [r1, 0x4]
|
||||
cmp r3, r0
|
||||
ble _080A93C8
|
||||
adds r0, r4, 0
|
||||
b _080A93E0
|
||||
.align 2, 0
|
||||
_080A93C4: .4byte gGroundLives
|
||||
_080A93C8:
|
||||
adds r0, r7, 0
|
||||
movs r2, 0x80
|
||||
lsls r2, 9
|
||||
adds r7, r2
|
||||
asrs r4, r0, 16
|
||||
movs r6, 0xF8
|
||||
lsls r6, 1
|
||||
add r12, r6
|
||||
cmp r4, 0x17
|
||||
ble _080A936E
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
_080A93E0:
|
||||
add sp, 0x4
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A9344
|
||||
|
||||
thumb_func_start sub_80A93F0
|
||||
sub_80A93F0:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x10
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
lsls r1, 24
|
||||
lsrs r6, r1, 24
|
||||
ldr r2, _080A947C
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r0, r1
|
||||
mov r12, r0
|
||||
movs r0, 0xA2
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
bge _080A941A
|
||||
ldr r1, _080A9480
|
||||
adds r0, r1
|
||||
_080A941A:
|
||||
asrs r5, r0, 11
|
||||
str r5, [sp]
|
||||
movs r0, 0xA4
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
bge _080A942E
|
||||
ldr r7, _080A9480
|
||||
adds r0, r7
|
||||
_080A942E:
|
||||
asrs r4, r0, 11
|
||||
str r4, [sp, 0x4]
|
||||
movs r0, 0xA6
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
subs r1, r0, 0x1
|
||||
cmp r1, 0
|
||||
bge _080A9444
|
||||
ldr r7, _080A9484
|
||||
adds r1, r0, r7
|
||||
_080A9444:
|
||||
asrs r2, r1, 11
|
||||
movs r0, 0xA8
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
subs r1, r0, 0x1
|
||||
cmp r1, 0
|
||||
bge _080A9458
|
||||
ldr r7, _080A9484
|
||||
adds r1, r0, r7
|
||||
_080A9458:
|
||||
asrs r3, r1, 11
|
||||
subs r0, r2, r5
|
||||
adds r0, 0x1
|
||||
str r0, [sp, 0x8]
|
||||
subs r0, r3, r4
|
||||
adds r0, 0x1
|
||||
add r2, sp, 0x8
|
||||
str r0, [r2, 0x4]
|
||||
adds r0, r6, 0
|
||||
mov r1, sp
|
||||
bl sub_80A5934
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
add sp, 0x10
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080A947C: .4byte gGroundLives
|
||||
_080A9480: .4byte 0x000007ff
|
||||
_080A9484: .4byte 0x000007fe
|
||||
thumb_func_end sub_80A93F0
|
||||
|
||||
thumb_func_start sub_80A9488
|
||||
sub_80A9488:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x10
|
||||
adds r5, r0, 0
|
||||
adds r7, r1, 0
|
||||
mov r8, r2
|
||||
ldr r0, [r7]
|
||||
cmp r0, 0
|
||||
bge _080A94A0
|
||||
ldr r1, _080A9528
|
||||
adds r0, r1
|
||||
_080A94A0:
|
||||
asrs r0, 11
|
||||
mov r12, r0
|
||||
str r0, [sp]
|
||||
ldr r0, [r7, 0x4]
|
||||
cmp r0, 0
|
||||
bge _080A94B0
|
||||
ldr r3, _080A9528
|
||||
adds r0, r3
|
||||
_080A94B0:
|
||||
asrs r4, r0, 11
|
||||
str r4, [sp, 0x4]
|
||||
mov r6, r8
|
||||
ldr r3, [r6]
|
||||
subs r0, r3, 0x1
|
||||
cmp r0, 0
|
||||
bge _080A94C2
|
||||
ldr r6, _080A952C
|
||||
adds r0, r3, r6
|
||||
_080A94C2:
|
||||
asrs r1, r0, 11
|
||||
mov r0, r8
|
||||
ldr r3, [r0, 0x4]
|
||||
subs r0, r3, 0x1
|
||||
cmp r0, 0
|
||||
bge _080A94D2
|
||||
ldr r6, _080A952C
|
||||
adds r0, r3, r6
|
||||
_080A94D2:
|
||||
asrs r2, r0, 11
|
||||
mov r3, r12
|
||||
subs r0, r1, r3
|
||||
adds r0, 0x1
|
||||
str r0, [sp, 0x8]
|
||||
subs r0, r2, r4
|
||||
adds r0, 0x1
|
||||
add r2, sp, 0x8
|
||||
str r0, [r2, 0x4]
|
||||
movs r6, 0x8E
|
||||
lsls r6, 1
|
||||
adds r0, r5, r6
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x1
|
||||
ands r0, r1
|
||||
adds r4, r2, 0
|
||||
cmp r0, 0
|
||||
beq _080A9504
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
bl CheckMapCollision_80A585C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080A9522
|
||||
_080A9504:
|
||||
movs r1, 0x8E
|
||||
lsls r1, 1
|
||||
adds r0, r5, r1
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A9530
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
bl sub_80A58C8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A9530
|
||||
_080A9522:
|
||||
movs r0, 0x1
|
||||
b _080A95A0
|
||||
.align 2, 0
|
||||
_080A9528: .4byte 0x000007ff
|
||||
_080A952C: .4byte 0x000007fe
|
||||
_080A9530:
|
||||
movs r3, 0x8E
|
||||
lsls r3, 1
|
||||
adds r0, r5, r3
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x4
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A9556
|
||||
movs r6, 0
|
||||
ldrsh r0, [r5, r6]
|
||||
adds r2, r7, 0
|
||||
mov r3, r8
|
||||
bl GetLivesCollision_80A92A0
|
||||
lsls r0, 16
|
||||
cmp r0, 0
|
||||
blt _080A9556
|
||||
movs r0, 0x4
|
||||
b _080A95A0
|
||||
_080A9556:
|
||||
movs r1, 0x8E
|
||||
lsls r1, 1
|
||||
adds r0, r5, r1
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x8
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A957A
|
||||
movs r0, 0x4
|
||||
adds r1, r7, 0
|
||||
mov r2, r8
|
||||
bl sub_80AC4C8
|
||||
lsls r0, 16
|
||||
cmp r0, 0
|
||||
blt _080A957A
|
||||
movs r0, 0x8
|
||||
b _080A95A0
|
||||
_080A957A:
|
||||
movs r3, 0x8E
|
||||
lsls r3, 1
|
||||
adds r0, r5, r3
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x10
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A959E
|
||||
movs r0, 0x40
|
||||
adds r1, r7, 0
|
||||
mov r2, r8
|
||||
bl FindGroundEvent
|
||||
lsls r0, 16
|
||||
cmp r0, 0
|
||||
blt _080A959E
|
||||
movs r0, 0x10
|
||||
b _080A95A0
|
||||
_080A959E:
|
||||
movs r0, 0
|
||||
_080A95A0:
|
||||
add sp, 0x10
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A9488
|
||||
|
||||
thumb_func_start sub_80A95AC
|
||||
sub_80A95AC:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
sub sp, 0x14
|
||||
adds r5, r0, 0
|
||||
adds r7, r1, 0
|
||||
mov r8, r2
|
||||
ldr r0, [r7]
|
||||
cmp r0, 0
|
||||
bge _080A95C6
|
||||
ldr r1, _080A96BC
|
||||
adds r0, r1
|
||||
_080A95C6:
|
||||
asrs r0, 11
|
||||
mov r9, r0
|
||||
str r0, [sp]
|
||||
ldr r0, [r7, 0x4]
|
||||
cmp r0, 0
|
||||
bge _080A95D6
|
||||
ldr r2, _080A96BC
|
||||
adds r0, r2
|
||||
_080A95D6:
|
||||
asrs r4, r0, 11
|
||||
str r4, [sp, 0x4]
|
||||
mov r6, r8
|
||||
ldr r3, [r6]
|
||||
subs r0, r3, 0x1
|
||||
cmp r0, 0
|
||||
bge _080A95E8
|
||||
ldr r6, _080A96C0
|
||||
adds r0, r3, r6
|
||||
_080A95E8:
|
||||
asrs r1, r0, 11
|
||||
mov r0, r8
|
||||
ldr r3, [r0, 0x4]
|
||||
subs r0, r3, 0x1
|
||||
cmp r0, 0
|
||||
bge _080A95F8
|
||||
ldr r6, _080A96C0
|
||||
adds r0, r3, r6
|
||||
_080A95F8:
|
||||
asrs r2, r0, 11
|
||||
mov r3, r9
|
||||
subs r0, r1, r3
|
||||
adds r0, 0x1
|
||||
str r0, [sp, 0x8]
|
||||
subs r0, r2, r4
|
||||
adds r0, 0x1
|
||||
add r2, sp, 0x8
|
||||
str r0, [r2, 0x4]
|
||||
movs r6, 0x8E
|
||||
lsls r6, 1
|
||||
adds r0, r5, r6
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x1
|
||||
ands r0, r1
|
||||
adds r4, r2, 0
|
||||
cmp r0, 0
|
||||
beq _080A962C
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
bl CheckMapCollision_80A585C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A962C
|
||||
b _080A973C
|
||||
_080A962C:
|
||||
movs r1, 0x8E
|
||||
lsls r1, 1
|
||||
adds r0, r5, r1
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A964A
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
bl sub_80A58C8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080A973C
|
||||
_080A964A:
|
||||
movs r4, 0x8E
|
||||
lsls r4, 1
|
||||
adds r0, r5, r4
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x4
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A96C8
|
||||
movs r2, 0
|
||||
ldrsh r0, [r5, r2]
|
||||
movs r1, 0x44
|
||||
adds r2, r7, 0
|
||||
mov r3, r8
|
||||
bl GetLivesCollision_80A92A0
|
||||
lsls r0, 16
|
||||
asrs r2, r0, 16
|
||||
mov r9, r2
|
||||
cmp r2, 0
|
||||
blt _080A96C8
|
||||
ldr r1, _080A96C4
|
||||
lsls r0, r2, 5
|
||||
subs r0, r2
|
||||
lsls r0, 4
|
||||
ldr r1, [r1]
|
||||
adds r6, r1, r0
|
||||
adds r0, r6, r4
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x40
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A973C
|
||||
movs r0, 0x80
|
||||
lsls r0, 2
|
||||
ands r1, r0
|
||||
cmp r1, 0
|
||||
beq _080A96A8
|
||||
adds r4, 0x26
|
||||
adds r0, r5, r4
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
movs r1, 0x5
|
||||
bl sub_8002984
|
||||
adds r4, r6, r4
|
||||
strb r0, [r4]
|
||||
_080A96A8:
|
||||
movs r3, 0
|
||||
ldrsh r0, [r5, r3]
|
||||
mov r1, r9
|
||||
bl GroundLives_ExecutePlayerScriptActionLives
|
||||
_080A96B2:
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080A9738
|
||||
b _080A973C
|
||||
.align 2, 0
|
||||
_080A96BC: .4byte 0x000007ff
|
||||
_080A96C0: .4byte 0x000007fe
|
||||
_080A96C4: .4byte gGroundLives
|
||||
_080A96C8:
|
||||
movs r6, 0x8E
|
||||
lsls r6, 1
|
||||
adds r0, r5, r6
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x8
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A9708
|
||||
movs r0, 0x44
|
||||
adds r1, r7, 0
|
||||
mov r2, r8
|
||||
bl sub_80AC4C8
|
||||
lsls r0, 16
|
||||
asrs r4, r0, 16
|
||||
cmp r4, 0
|
||||
blt _080A9708
|
||||
add r1, sp, 0x10
|
||||
adds r0, r4, 0
|
||||
bl sub_80AC3E0
|
||||
ldr r0, [sp, 0x10]
|
||||
movs r1, 0x40
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A973C
|
||||
movs r1, 0
|
||||
ldrsh r0, [r5, r1]
|
||||
adds r1, r4, 0
|
||||
bl sub_80A8A5C
|
||||
b _080A96B2
|
||||
_080A9708:
|
||||
movs r2, 0x8E
|
||||
lsls r2, 1
|
||||
adds r0, r5, r2
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x10
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080A9740
|
||||
movs r0, 0x40
|
||||
adds r1, r7, 0
|
||||
mov r2, r8
|
||||
bl FindGroundEvent
|
||||
lsls r0, 16
|
||||
asrs r1, r0, 16
|
||||
cmp r1, 0
|
||||
blt _080A9740
|
||||
movs r3, 0
|
||||
ldrsh r0, [r5, r3]
|
||||
bl sub_80A8ACC
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A973C
|
||||
_080A9738:
|
||||
movs r0, 0x2
|
||||
b _080A9742
|
||||
_080A973C:
|
||||
movs r0, 0x1
|
||||
b _080A9742
|
||||
_080A9740:
|
||||
movs r0, 0
|
||||
_080A9742:
|
||||
add sp, 0x14
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A95AC
|
||||
|
||||
thumb_func_start sub_80A9750
|
||||
sub_80A9750:
|
||||
push {r4,lr}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ IWRAM_INIT struct unkStruct_3001B80 *gGroundLivesMeta = NULL;
|
|||
struct unkStruct_3001B84_sub
|
||||
{
|
||||
// size: 0x1F0
|
||||
u16 unk0;
|
||||
s16 unk0;
|
||||
s16 unk2;
|
||||
s16 unk4;
|
||||
s8 unk6;
|
||||
|
|
@ -1427,7 +1427,7 @@ UNUSED static bool8 sub_80A90E8(s32 id1_, s32 id2_)
|
|||
struct unkStruct_3001B84_sub *livesPtr2 = &gGroundLives->array[id2];
|
||||
|
||||
if (livesPtr1->unk2 != -1 && livesPtr2->unk2 != -1) {
|
||||
s32 ret;
|
||||
s32 dir;
|
||||
PixelPos pixelPos1, pixelPos2;
|
||||
|
||||
pixelPos1.x = livesPtr1->unk144.x + livesPtr1->unk14.x;
|
||||
|
|
@ -1437,14 +1437,14 @@ UNUSED static bool8 sub_80A90E8(s32 id1_, s32 id2_)
|
|||
pixelPos2.y = livesPtr2->unk144.y + livesPtr2->unk14.y;
|
||||
|
||||
if (livesPtr1->unk2 <= 36) {
|
||||
ret = SizedDeltaDirection8(&pixelPos1, &livesPtr1->unkC, &pixelPos2, &livesPtr2->unkC);
|
||||
dir = SizedDeltaDirection8(&pixelPos1, &livesPtr1->unkC, &pixelPos2, &livesPtr2->unkC);
|
||||
}
|
||||
else {
|
||||
ret = SizedDeltaDirection4(&pixelPos1, &livesPtr1->unkC, &pixelPos2, &livesPtr2->unkC);
|
||||
dir = SizedDeltaDirection4(&pixelPos1, &livesPtr1->unkC, &pixelPos2, &livesPtr2->unkC);
|
||||
}
|
||||
|
||||
if (ret != -1) {
|
||||
livesPtr1->unk142 = ret;
|
||||
if (dir != -1) {
|
||||
livesPtr1->unk142 = dir;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1453,4 +1453,200 @@ UNUSED static bool8 sub_80A90E8(s32 id1_, s32 id2_)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
extern s32 sub_8002984(s32 _direction1, u32 caseID);
|
||||
|
||||
UNUSED static bool8 sub_80A91A0(s32 id1_, s32 id2_)
|
||||
{
|
||||
s32 id1 = (s16) id1_;
|
||||
s32 id2 = (s16) id2_;
|
||||
|
||||
if (id1 != id2) {
|
||||
struct unkStruct_3001B84_sub *livesPtr1 = &gGroundLives->array[id1];
|
||||
struct unkStruct_3001B84_sub *livesPtr2 = &gGroundLives->array[id2];
|
||||
|
||||
if (livesPtr1->unk2 != -1 && livesPtr2->unk2 != -1) {
|
||||
s32 dir1, dir2;
|
||||
PixelPos pixelPos1, pixelPos2;
|
||||
|
||||
pixelPos1.x = livesPtr1->unk144.x + livesPtr1->unk14.x;
|
||||
pixelPos1.y = livesPtr1->unk144.y + livesPtr1->unk14.y;
|
||||
|
||||
pixelPos2.x = livesPtr2->unk144.x + livesPtr2->unk14.x;
|
||||
pixelPos2.y = livesPtr2->unk144.y + livesPtr2->unk14.y;
|
||||
|
||||
dir1 = SizedDeltaDirection8(&pixelPos1, &livesPtr1->unkC, &pixelPos2, &livesPtr2->unkC);
|
||||
dir2 = SizedDeltaDirection4(&pixelPos1, &livesPtr1->unkC, &pixelPos2, &livesPtr2->unkC);
|
||||
|
||||
if (dir1 != -1 && dir2 != -1) {
|
||||
if (livesPtr1->unk2 <= 36) {
|
||||
livesPtr1->unk142 = dir1;
|
||||
}
|
||||
else {
|
||||
livesPtr1->unk142 = dir2;
|
||||
}
|
||||
|
||||
if (livesPtr2->unk2 <= 37) {
|
||||
livesPtr2->unk142 = sub_8002984(dir1, 5);
|
||||
}
|
||||
else {
|
||||
livesPtr2->unk142 = sub_8002984(dir2, 5);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s32 GetLivesCollision_80A92A0(s32 id_, u32 flags, PixelPos *pixelPos1, PixelPos *pixelPos2)
|
||||
{
|
||||
s32 i;
|
||||
struct unkStruct_3001B84_sub *livesPtr;
|
||||
s32 id = (s16) id_;
|
||||
|
||||
for (livesPtr = &gGroundLives->array[0], i = 0; i < UNK_3001B84_ARR_COUNT; i = (s16)(i + 1), livesPtr++) {
|
||||
if (i != id
|
||||
&& livesPtr->unk2 != -1
|
||||
&& livesPtr->unk11C & flags
|
||||
&& livesPtr->unk144.x < pixelPos2->x
|
||||
&& livesPtr->unk14C.x > pixelPos1->x
|
||||
&& livesPtr->unk144.y < pixelPos2->y
|
||||
&& livesPtr->unk14C.y > pixelPos1->y)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
extern u8 sub_80A5934(s32 param_1, PixelPos *, PixelPos *);
|
||||
|
||||
s32 sub_80A9344(s32 id_, u32 flags, PixelPos *pixelPos1, PixelPos *pixelPos2)
|
||||
{
|
||||
s32 i;
|
||||
struct unkStruct_3001B84_sub *livesPtr;
|
||||
s32 id = (s16) id_;
|
||||
|
||||
for (livesPtr = &gGroundLives->array[0], i = 0; i < UNK_3001B84_ARR_COUNT; i = (s16)(i + 1), livesPtr++) {
|
||||
if (i != id && livesPtr->unk2 != -1 && livesPtr->unk11C & flags) {
|
||||
PixelPos resultPos = {0};
|
||||
resultPos.x = livesPtr->unk144.x + livesPtr->unk14.x;
|
||||
resultPos.y = livesPtr->unk144.y + livesPtr->unk14.y;
|
||||
if (resultPos.x < pixelPos2->x
|
||||
&& resultPos.x > pixelPos1->x
|
||||
&& resultPos.y < pixelPos2->y
|
||||
&& resultPos.y > pixelPos1->y)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
u8 sub_80A93F0(s32 id_, s32 a1_)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
s32 a1 = (u8) a1_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
PixelPos pixPos1 = {livesPtr->unk144.x / 2048, livesPtr->unk144.y / 2048};
|
||||
PixelPos posTemp = {((livesPtr->unk14C.x - 1) / 2048), ((livesPtr->unk14C.y - 1) / 2048)};
|
||||
PixelPos pixPos2 = {(posTemp.x- pixPos1.x) + 1, (posTemp.y -pixPos1.y) + 1};
|
||||
|
||||
return sub_80A5934(a1, &pixPos1, &pixPos2);
|
||||
}
|
||||
|
||||
extern bool8 CheckMapCollision_80A585C(PixelPos *, PixelPos *);
|
||||
extern bool8 sub_80A58C8(PixelPos *, PixelPos *);
|
||||
extern s32 sub_80AC4C8(u32 a0, PixelPos *, PixelPos *);
|
||||
|
||||
s32 sub_80A9488(struct unkStruct_3001B84_sub *livesPtr, PixelPos *posArg1, PixelPos *posArg2)
|
||||
{
|
||||
PixelPos pixPos1 = {posArg1->x / 2048, posArg1->y / 2048};
|
||||
PixelPos posTemp = {((posArg2->x - 1) / 2048), ((posArg2->y - 1) / 2048)};
|
||||
PixelPos pixPos2 = {(posTemp.x- pixPos1.x) + 1, (posTemp.y -pixPos1.y) + 1};
|
||||
|
||||
if (livesPtr->unk11C & 1) {
|
||||
if (CheckMapCollision_80A585C(&pixPos1, &pixPos2))
|
||||
return 1;
|
||||
}
|
||||
if (livesPtr->unk11C & 2) {
|
||||
if (sub_80A58C8(&pixPos1, &pixPos2))
|
||||
return 1;
|
||||
}
|
||||
if (livesPtr->unk11C & 4) {
|
||||
if ((s16) GetLivesCollision_80A92A0(livesPtr->unk0, 4, posArg1, posArg2) >= 0)
|
||||
return 4;
|
||||
}
|
||||
if (livesPtr->unk11C & 8) {
|
||||
if ((s16) sub_80AC4C8(4, posArg1, posArg2) >= 0)
|
||||
return 8;
|
||||
}
|
||||
if (livesPtr->unk11C & 0x10) {
|
||||
if ((s16) FindGroundEvent(0x40, posArg1, posArg2) >= 0)
|
||||
return 0x10;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern void sub_80AC3E0(s32 id, s32 *a1);
|
||||
|
||||
|
||||
s32 sub_80A95AC(struct unkStruct_3001B84_sub *livesPtr, PixelPos *posArg1, PixelPos *posArg2)
|
||||
{
|
||||
PixelPos pixPos1 = {posArg1->x / 2048, posArg1->y / 2048};
|
||||
PixelPos posTemp = {((posArg2->x - 1) / 2048), ((posArg2->y - 1) / 2048)};
|
||||
PixelPos pixPos2 = {(posTemp.x- pixPos1.x) + 1, (posTemp.y -pixPos1.y) + 1};
|
||||
|
||||
if (livesPtr->unk11C & 1) {
|
||||
if (CheckMapCollision_80A585C(&pixPos1, &pixPos2))
|
||||
return 1;
|
||||
}
|
||||
if (livesPtr->unk11C & 2) {
|
||||
if (sub_80A58C8(&pixPos1, &pixPos2))
|
||||
return 1;
|
||||
}
|
||||
if (livesPtr->unk11C & 4) {
|
||||
s32 id2 = (s16) GetLivesCollision_80A92A0(livesPtr->unk0, 0x44, posArg1, posArg2);
|
||||
// Needed for matching.
|
||||
s32 id2_ = id2;
|
||||
if (id2 >= 0) {
|
||||
struct unkStruct_3001B84_sub *ptr2 = &gGroundLives->array[id2];
|
||||
|
||||
if (ptr2->unk11C & 0x40) {
|
||||
if (ptr2->unk11C & 0x200) {
|
||||
ptr2->unk142 = sub_8002984(livesPtr->unk142, 5);
|
||||
}
|
||||
if (GroundLives_ExecutePlayerScriptActionLives(livesPtr->unk0, id2_))
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (livesPtr->unk11C & 8) {
|
||||
s32 id2 = (s16) sub_80AC4C8(0x44, posArg1, posArg2);
|
||||
if (id2 >= 0) {
|
||||
s32 sp;
|
||||
|
||||
sub_80AC3E0(id2, &sp);
|
||||
if ((sp & 0x40) && sub_80A8A5C(livesPtr->unk0, id2))
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (livesPtr->unk11C & 0x10) {
|
||||
s32 id2 = (s16) FindGroundEvent(0x40, posArg1, posArg2);
|
||||
if (id2 >= 0) {
|
||||
if (sub_80A8ACC(livesPtr->unk0, id2))
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user