sub_80AA3F8

This commit is contained in:
DizzyEggg
2025-05-21 10:16:18 +02:00
parent 5b5878d681
commit 397115b1c8
2 changed files with 298 additions and 905 deletions

View File

@@ -7,910 +7,6 @@
thumb_func_start sub_80A9F94
sub_80A9F94:
push {r4-r6,lr}
sub sp, 0x10
adds r4, r0, 0
movs r2, 0xA2
lsls r2, 1
adds r0, r4, r2
ldr r0, [r0]
ldr r2, [r1]
adds r0, r2
str r0, [sp]
movs r3, 0xA4
lsls r3, 1
adds r0, r4, r3
ldr r0, [r0]
ldr r1, [r1, 0x4]
adds r0, r1
str r0, [sp, 0x4]
adds r3, 0x4
adds r0, r4, r3
ldr r0, [r0]
adds r0, r2
str r0, [sp, 0x8]
movs r2, 0xA8
lsls r2, 1
adds r0, r4, r2
ldr r0, [r0]
adds r0, r1
add r1, sp, 0x8
str r0, [r1, 0x4]
movs r6, 0
ldr r3, [r4, 0x28]
ldr r0, [sp]
adds r2, r1, 0
cmp r0, r3
bge _080A9FE4
str r3, [sp]
ldr r0, [r4, 0xC]
adds r0, r3, r0
str r0, [sp, 0x8]
b _080A9FF4
_080A9FE4:
ldr r1, [r4, 0x30]
ldr r0, [sp, 0x8]
cmp r0, r1
blt _080A9FF6
ldr r0, [r4, 0xC]
subs r0, r1, r0
str r0, [sp]
str r1, [sp, 0x8]
_080A9FF4:
movs r6, 0x1
_080A9FF6:
ldr r1, [r4, 0x2C]
ldr r0, [sp, 0x4]
cmp r0, r1
bge _080AA008
str r1, [sp, 0x4]
ldr r0, [r4, 0x10]
adds r0, r1, r0
str r0, [r2, 0x4]
b _080AA018
_080AA008:
ldr r1, [r4, 0x34]
ldr r0, [r2, 0x4]
cmp r0, r1
blt _080AA01A
ldr r0, [r4, 0x10]
subs r0, r1, r0
str r0, [sp, 0x4]
str r1, [r2, 0x4]
_080AA018:
movs r6, 0x1
_080AA01A:
adds r0, r4, 0
mov r1, sp
bl sub_80A9488
adds r5, r0, 0
cmp r5, 0
beq _080AA034
adds r0, r4, 0
movs r1, 0
bl sub_80AAF68
adds r0, r5, 0
b _080AA06A
_080AA034:
movs r3, 0xA2
lsls r3, 1
adds r2, r4, r3
ldr r0, [sp]
ldr r1, [sp, 0x4]
str r0, [r2]
str r1, [r2, 0x4]
movs r0, 0xA6
lsls r0, 1
adds r2, r4, r0
ldr r0, [sp, 0x8]
ldr r1, [sp, 0xC]
str r0, [r2]
str r1, [r2, 0x4]
cmp r6, 0
bne _080AA060
adds r0, r4, 0
movs r1, 0x1
bl sub_80AAF68
movs r0, 0
b _080AA06A
_080AA060:
adds r0, r4, 0
movs r1, 0
bl sub_80AAF68
movs r0, 0x1
_080AA06A:
add sp, 0x10
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_80A9F94
thumb_func_start sub_80AA074
sub_80AA074:
push {r4-r7,lr}
sub sp, 0x10
adds r4, r0, 0
movs r2, 0xA2
lsls r2, 1
adds r0, r4, r2
ldr r0, [r0]
ldr r2, [r1]
adds r0, r2
str r0, [sp]
movs r3, 0xA4
lsls r3, 1
adds r0, r4, r3
ldr r0, [r0]
ldr r1, [r1, 0x4]
adds r0, r1
str r0, [sp, 0x4]
adds r3, 0x4
adds r0, r4, r3
ldr r0, [r0]
adds r0, r2
str r0, [sp, 0x8]
movs r2, 0xA8
lsls r2, 1
adds r0, r4, r2
ldr r0, [r0]
adds r0, r1
add r1, sp, 0x8
str r0, [r1, 0x4]
ldr r3, [r4, 0x28]
ldr r0, [sp]
adds r5, r1, 0
cmp r0, r3
bge _080AA0C2
str r3, [sp]
ldr r0, [r4, 0xC]
adds r0, r3, r0
str r0, [sp, 0x8]
b _080AA0D2
_080AA0C2:
ldr r1, [r4, 0x30]
ldr r0, [sp, 0x8]
cmp r0, r1
blt _080AA0D2
ldr r0, [r4, 0xC]
subs r0, r1, r0
str r0, [sp]
str r1, [sp, 0x8]
_080AA0D2:
ldr r1, [r4, 0x2C]
ldr r0, [sp, 0x4]
cmp r0, r1
bge _080AA0E4
str r1, [sp, 0x4]
ldr r0, [r4, 0x10]
adds r0, r1, r0
str r0, [r5, 0x4]
b _080AA0F4
_080AA0E4:
ldr r1, [r4, 0x34]
ldr r0, [r5, 0x4]
cmp r0, r1
blt _080AA0F4
ldr r0, [r4, 0x10]
subs r0, r1, r0
str r0, [sp, 0x4]
str r1, [r5, 0x4]
_080AA0F4:
adds r0, r4, 0
mov r1, sp
adds r2, r5, 0
bl sub_80A95AC
adds r6, r0, 0
cmp r6, 0
bne _080AA170
movs r3, 0xA2
lsls r3, 1
adds r2, r4, r3
ldr r0, [sp]
ldr r1, [sp, 0x4]
str r0, [r2]
str r1, [r2, 0x4]
movs r0, 0xA6
lsls r0, 1
adds r2, r4, r0
ldr r0, [sp, 0x8]
ldr r1, [sp, 0xC]
str r0, [r2]
str r1, [r2, 0x4]
movs r1, 0x8E
lsls r1, 1
adds r0, r4, r1
ldr r0, [r0]
movs r1, 0x10
ands r0, r1
cmp r0, 0
beq _080AA170
movs r0, 0x20
mov r1, sp
adds r2, r5, 0
bl FindGroundEvent
lsls r0, 16
asrs r5, r0, 16
cmp r5, 0
blt _080AA166
movs r2, 0x9F
lsls r2, 1
adds r7, r4, r2
movs r3, 0
ldrsh r0, [r7, r3]
cmp r0, r5
beq _080AA170
movs r1, 0
ldrsh r0, [r4, r1]
adds r1, r5, 0
bl sub_80A8ACC
lsls r0, 24
cmp r0, 0
beq _080AA170
strh r5, [r7]
movs r6, 0x2
b _080AA170
_080AA166:
movs r2, 0x9F
lsls r2, 1
adds r1, r4, r2
ldr r0, _080AA17C
strh r0, [r1]
_080AA170:
adds r0, r6, 0
add sp, 0x10
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_080AA17C: .4byte 0x0000ffff
thumb_func_end sub_80AA074
thumb_func_start sub_80AA180
sub_80AA180:
push {r4-r7,lr}
sub sp, 0x10
adds r4, r0, 0
adds r5, r1, 0
adds r6, r2, 0
adds r7, r3, 0
movs r0, 0x4
ands r0, r5
cmp r0, 0
beq _080AA220
movs r1, 0
ldrsh r0, [r4, r1]
movs r1, 0x80
bl sub_80A9344
lsls r0, 16
asrs r0, 16
cmp r0, 0
blt _080AA220
mov r1, sp
bl sub_80A8FD8
movs r2, 0xA2
lsls r2, 1
adds r0, r4, r2
ldr r1, [r0]
ldr r0, [r4, 0x14]
adds r1, r0
ldr r0, [sp]
subs r0, r1
str r0, [sp, 0x8]
movs r3, 0xA4
lsls r3, 1
adds r0, r4, r3
ldr r0, [r0]
ldr r1, [r4, 0x18]
adds r0, r1
ldr r1, [sp, 0x4]
subs r1, r0
add r0, sp, 0x8
str r1, [r0, 0x4]
bl VecDirection8Radial
lsls r0, 24
asrs r1, r0, 24
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _080AA2B2
movs r0, 0xA1
lsls r0, 1
adds r2, r4, r0
lsls r0, r1, 24
lsrs r0, 24
strb r0, [r2]
ldr r3, _080AA21C
adds r1, r4, r3
ldrb r1, [r1]
lsls r1, 24
asrs r1, 24
lsls r0, 24
asrs r0, 24
cmp r1, r0
beq _080AA20A
movs r0, 0xAE
lsls r0, 1
adds r1, r4, r0
movs r0, 0x1
strb r0, [r1]
_080AA20A:
movs r1, 0
ldrsb r1, [r2, r1]
adds r0, r4, 0
bl sub_80AA3F8
lsls r0, 24
cmp r0, 0
bne _080AA2AE
b _080AA2B2
.align 2, 0
_080AA21C: .4byte 0x0000015d
_080AA220:
movs r0, 0x8
ands r0, r5
cmp r0, 0
beq _080AA2B2
movs r0, 0x80
adds r1, r6, 0
adds r2, r7, 0
bl sub_80AC554
lsls r0, 16
asrs r0, 16
cmp r0, 0
blt _080AA2B2
mov r1, sp
bl sub_80AC448
movs r1, 0xA2
lsls r1, 1
adds r0, r4, r1
ldr r1, [r0]
ldr r0, [r4, 0x14]
adds r1, r0
ldr r0, [sp]
subs r0, r1
str r0, [sp, 0x8]
add r0, sp, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r4, r2
ldr r2, [r1]
ldr r1, [r4, 0x18]
adds r2, r1
ldr r1, [sp, 0x4]
subs r1, r2
str r1, [r0, 0x4]
bl VecDirection8Radial
lsls r0, 24
asrs r1, r0, 24
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _080AA2B2
movs r3, 0xA1
lsls r3, 1
adds r2, r4, r3
lsls r0, r1, 24
lsrs r0, 24
strb r0, [r2]
adds r3, 0x1B
adds r1, r4, r3
ldrb r1, [r1]
lsls r1, 24
asrs r1, 24
lsls r0, 24
asrs r0, 24
cmp r1, r0
beq _080AA29E
movs r0, 0xAE
lsls r0, 1
adds r1, r4, r0
movs r0, 0x1
strb r0, [r1]
_080AA29E:
movs r1, 0
ldrsb r1, [r2, r1]
adds r0, r4, 0
bl sub_80AA3F8
lsls r0, 24
cmp r0, 0
beq _080AA2B2
_080AA2AE:
movs r0, 0x3
b _080AA2B4
_080AA2B2:
movs r0, 0
_080AA2B4:
add sp, 0x10
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80AA180
thumb_func_start sub_80AA2BC
sub_80AA2BC:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x20
adds r7, r0, 0
mov r8, r1
ldr r0, [r2]
ldr r1, [r2, 0x4]
str r0, [sp]
str r1, [sp, 0x4]
ldr r0, [r3]
ldr r1, [r3, 0x4]
str r0, [sp, 0x10]
str r1, [sp, 0x14]
ldr r0, [sp]
cmp r0, 0
bge _080AA2E6
ldr r1, _080AA3C4
adds r0, r1
_080AA2E6:
asrs r0, 11
str r0, [sp, 0x8]
ldr r0, [sp, 0x4]
cmp r0, 0
bge _080AA2F4
ldr r2, _080AA3C4
adds r0, r2
_080AA2F4:
asrs r0, 11
add r1, sp, 0x8
str r0, [r1, 0x4]
ldr r4, [sp, 0x10]
subs r0, r4, 0x1
mov r10, r1
cmp r0, 0
bge _080AA308
ldr r1, _080AA3C8
adds r0, r4, r1
_080AA308:
asrs r2, r0, 11
add r0, sp, 0x10
ldr r4, [r0, 0x4]
subs r1, r4, 0x1
mov r9, r0
cmp r1, 0
bge _080AA31A
ldr r0, _080AA3C8
adds r1, r4, r0
_080AA31A:
asrs r3, r1, 11
ldr r0, [sp, 0x8]
subs r0, r2, r0
adds r0, 0x1
str r0, [sp, 0x18]
mov r1, r10
ldr r0, [r1, 0x4]
subs r0, r3, r0
adds r0, 0x1
add r1, sp, 0x18
str r0, [r1, 0x4]
movs r0, 0x4
mov r2, r8
ands r0, r2
cmp r0, 0
beq _080AA394
movs r1, 0
ldrsh r0, [r7, r1]
movs r1, 0x80
mov r2, sp
mov r3, r9
bl GetLivesCollision_80A92A0
lsls r0, 16
asrs r5, r0, 16
cmp r5, 0
blt _080AA394
ldr r1, _080AA3CC
lsls r0, r5, 5
subs r0, r5
lsls r0, 4
ldr r1, [r1]
adds r6, r1, r0
movs r2, 0x8E
lsls r2, 1
adds r0, r6, r2
ldr r0, [r0]
movs r1, 0x80
lsls r1, 2
ands r0, r1
cmp r0, 0
beq _080AA384
movs r4, 0xA1
lsls r4, 1
adds r0, r7, r4
ldrb r0, [r0]
lsls r0, 24
asrs r0, 24
movs r1, 0x5
bl sub_8002984
adds r4, r6, r4
strb r0, [r4]
_080AA384:
movs r1, 0
ldrsh r0, [r7, r1]
adds r1, r5, 0
bl GroundLives_ExecutePlayerScriptActionLives
lsls r0, 24
cmp r0, 0
bne _080AA3BE
_080AA394:
movs r0, 0x8
mov r2, r8
ands r0, r2
cmp r0, 0
beq _080AA3D0
movs r0, 0x80
mov r1, sp
mov r2, r9
bl sub_80AC4C8
lsls r0, 16
asrs r1, r0, 16
cmp r1, 0
blt _080AA3D0
movs r2, 0
ldrsh r0, [r7, r2]
bl sub_80A8A5C
lsls r0, 24
cmp r0, 0
beq _080AA3D0
_080AA3BE:
movs r0, 0x3
b _080AA3E6
.align 2, 0
_080AA3C4: .4byte 0x000007ff
_080AA3C8: .4byte 0x000007fe
_080AA3CC: .4byte gGroundLives
_080AA3D0:
movs r0, 0x10
mov r1, r10
add r2, sp, 0x18
bl sub_80A595C
lsls r0, 24
cmp r0, 0
bne _080AA3E4
movs r0, 0
b _080AA3E6
_080AA3E4:
movs r0, 0x6
_080AA3E6:
add sp, 0x20
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80AA2BC
thumb_func_start sub_80AA3F8
sub_80AA3F8:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x40
adds r6, r0, 0
lsls r1, 24
asrs r1, 24
str r1, [sp, 0x28]
movs r2, 0x80
lsls r2, 1
mov r0, sp
bl SetVecFromDirectionSpeed
ldr r4, [sp]
ldr r5, [sp, 0x4]
movs r0, 0xA2
lsls r0, 1
adds r0, r6
mov r9, r0
ldr r0, [r0]
adds r0, r4
str r0, [sp, 0x8]
movs r1, 0xA4
lsls r1, 1
adds r1, r6
mov r10, r1
ldr r0, [r1]
adds r0, r5
add r2, sp, 0x8
str r0, [r2, 0x4]
movs r1, 0xA6
lsls r1, 1
adds r0, r6, r1
ldr r0, [r0]
adds r0, r4
str r0, [sp, 0x10]
adds r1, 0x4
adds r0, r6, r1
ldr r0, [r0]
adds r0, r5
add r3, sp, 0x10
str r0, [r3, 0x4]
adds r0, r6, 0
movs r1, 0xC
bl sub_80AA2BC
adds r7, r0, 0
cmp r7, 0x3
bne _080AA462
_080AA45E:
movs r0, 0x1
b _080AA650
_080AA462:
ldr r0, [r6, 0xC]
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
movs r2, 0x80
lsls r2, 2
mov r8, r2
add r0, r8
muls r0, r4
cmp r0, 0
bge _080AA47A
adds r0, 0xFF
_080AA47A:
asrs r0, 8
str r0, [sp, 0x2C]
ldr r0, [r6, 0x10]
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
add r0, r8
muls r0, r5
cmp r0, 0
bge _080AA490
adds r0, 0xFF
_080AA490:
asrs r0, 8
str r0, [sp, 0x30]
mov r1, r9
ldr r0, [r1]
ldr r1, [r6, 0x14]
adds r0, r1
ldr r2, [sp, 0x2C]
adds r0, r2
ldr r2, _080AA4F4
adds r0, r2
str r0, [sp, 0x18]
mov r1, r10
ldr r0, [r1]
ldr r1, [r6, 0x18]
adds r0, r1
ldr r1, [sp, 0x30]
adds r0, r1
adds r0, r2
add r2, sp, 0x18
str r0, [r2, 0x4]
movs r1, 0xC0
lsls r1, 3
ldr r0, [sp, 0x18]
adds r0, r1
str r0, [sp, 0x20]
ldr r0, [r2, 0x4]
adds r0, r1
add r3, sp, 0x20
str r0, [r3, 0x4]
ldr r0, _080AA4F8
mov r9, r0
ldr r0, [sp, 0x28]
lsls r1, r0, 2
add r9, r1
mov r0, r9
ldr r0, [r0]
str r0, [sp, 0x34]
ldr r0, _080AA4FC
adds r0, r1, r0
ldr r0, [r0]
str r0, [sp, 0x38]
ldr r0, _080AA500
adds r1, r0
ldr r1, [r1]
str r1, [sp, 0x3C]
mov r10, r8
mov r9, r2
mov r8, r3
b _080AA568
.align 2, 0
_080AA4F4: .4byte 0xfffffd00
_080AA4F8: .4byte gUnknown_8117FF0
_080AA4FC: .4byte gUnknown_8118010
_080AA500: .4byte gUnknown_8118030
_080AA504:
ldr r1, [r6, 0x28]
ldr r0, [sp, 0x18]
cmp r0, r1
bge _080AA50E
b _080AA64E
_080AA50E:
ldr r1, [r6, 0x30]
ldr r0, [sp, 0x20]
cmp r0, r1
blt _080AA518
b _080AA64E
_080AA518:
ldr r1, [r6, 0x2C]
mov r2, r9
ldr r0, [r2, 0x4]
cmp r0, r1
bge _080AA524
b _080AA64E
_080AA524:
ldr r1, [r6, 0x34]
mov r2, r8
ldr r0, [r2, 0x4]
cmp r0, r1
blt _080AA530
b _080AA64E
_080AA530:
adds r0, r6, 0
movs r1, 0xC
mov r2, r9
mov r3, r8
bl sub_80AA2BC
adds r7, r0, 0
cmp r7, 0x3
beq _080AA45E
ldr r0, [sp, 0x18]
adds r0, r4
str r0, [sp, 0x18]
mov r1, r9
ldr r0, [r1, 0x4]
adds r0, r5
str r0, [r1, 0x4]
ldr r0, [sp, 0x20]
adds r0, r4
str r0, [sp, 0x20]
mov r2, r8
ldr r0, [r2, 0x4]
adds r0, r5
str r0, [r2, 0x4]
cmp r7, 0x6
beq _080AA572
movs r0, 0x80
lsls r0, 1
add r10, r0
_080AA568:
ldr r1, [sp, 0x34]
cmp r10, r1
blt _080AA504
cmp r7, 0x6
bne _080AA64E
_080AA572:
ldr r2, [sp, 0x38]
cmp r10, r2
bge _080AA5DC
_080AA578:
ldr r1, [sp, 0x18]
ldr r0, [r6, 0x28]
cmp r1, r0
blt _080AA64E
ldr r1, [sp, 0x20]
ldr r0, [r6, 0x30]
cmp r1, r0
bge _080AA64E
mov r0, r9
ldr r1, [r0, 0x4]
ldr r0, [r6, 0x2C]
cmp r1, r0
blt _080AA64E
mov r2, r8
ldr r1, [r2, 0x4]
ldr r0, [r6, 0x34]
cmp r1, r0
bge _080AA64E
adds r0, r6, 0
movs r1, 0x4
mov r2, r9
mov r3, r8
bl sub_80AA2BC
adds r7, r0, 0
cmp r7, 0x3
bne _080AA5B0
b _080AA45E
_080AA5B0:
ldr r0, [sp, 0x18]
adds r0, r4
str r0, [sp, 0x18]
mov r1, r9
ldr r0, [r1, 0x4]
adds r0, r5
str r0, [r1, 0x4]
ldr r0, [sp, 0x20]
adds r0, r4
str r0, [sp, 0x20]
mov r2, r8
ldr r0, [r2, 0x4]
adds r0, r5
str r0, [r2, 0x4]
cmp r7, 0x6
bne _080AA5E0
movs r0, 0x80
lsls r0, 1
add r10, r0
ldr r1, [sp, 0x38]
cmp r10, r1
blt _080AA578
_080AA5DC:
cmp r7, 0x6
beq _080AA64E
_080AA5E0:
movs r2, 0
mov r10, r2
ldr r0, [sp, 0x3C]
cmp r10, r0
bge _080AA64E
_080AA5EA:
ldr r1, [sp, 0x18]
ldr r0, [r6, 0x28]
cmp r1, r0
blt _080AA64E
ldr r1, [sp, 0x20]
ldr r0, [r6, 0x30]
cmp r1, r0
bge _080AA64E
mov r2, r9
ldr r1, [r2, 0x4]
ldr r0, [r6, 0x2C]
cmp r1, r0
blt _080AA64E
mov r0, r8
ldr r1, [r0, 0x4]
ldr r0, [r6, 0x34]
cmp r1, r0
bge _080AA64E
adds r0, r6, 0
movs r1, 0x4
mov r2, r9
mov r3, r8
bl sub_80AA2BC
adds r7, r0, 0
cmp r7, 0x3
bne _080AA622
b _080AA45E
_080AA622:
cmp r7, 0x6
beq _080AA64E
ldr r0, [sp, 0x18]
adds r0, r4
str r0, [sp, 0x18]
mov r1, r9
ldr r0, [r1, 0x4]
adds r0, r5
str r0, [r1, 0x4]
ldr r0, [sp, 0x20]
adds r0, r4
str r0, [sp, 0x20]
mov r2, r8
ldr r0, [r2, 0x4]
adds r0, r5
str r0, [r2, 0x4]
movs r0, 0x80
lsls r0, 1
add r10, r0
ldr r1, [sp, 0x3C]
cmp r10, r1
blt _080AA5EA
_080AA64E:
movs r0, 0
_080AA650:
add sp, 0x40
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80AA3F8
thumb_func_start sub_80AA660
sub_80AA660:
push {r4,lr}

View File

@@ -1593,7 +1593,7 @@ s32 sub_80A9488(struct unkStruct_3001B84_sub *livesPtr, PixelPos *posArg1, Pixel
}
extern void sub_80AC3E0(s32 id, s32 *a1);
extern PixelPos SetVecFromDirectionSpeed(s8 r1, u32 r2);
s32 sub_80A95AC(struct unkStruct_3001B84_sub *livesPtr, PixelPos *posArg1, PixelPos *posArg2)
{
@@ -1786,4 +1786,301 @@ s32 sub_80A9F20(struct unkStruct_3001B84_sub *livesPtr, PixelPos *pixelPosArg)
}
}
void sub_80AAF68(struct unkStruct_3001B84_sub *livesPtr, u32 unused);
s32 sub_80A9F94(struct unkStruct_3001B84_sub *livesPtr, PixelPos *pixelPosArg)
{
s32 ret;
bool8 changed;
PixelPos pixPos1, pixPos2;
pixPos1.x = livesPtr->unk144.x + pixelPosArg->x;
pixPos1.y = livesPtr->unk144.y + pixelPosArg->y;
pixPos2.x = livesPtr->unk14C.x + pixelPosArg->x;
pixPos2.y = livesPtr->unk14C.y + pixelPosArg->y;
changed = FALSE;
if (pixPos1.x < livesPtr->unk28.x) {
pixPos1.x = livesPtr->unk28.x;
pixPos2.x = livesPtr->unk28.x + livesPtr->unkC.x;
changed = TRUE;
}
else if (pixPos2.x >= livesPtr->unk30.x) {
pixPos1.x = livesPtr->unk30.x - livesPtr->unkC.x;
pixPos2.x = livesPtr->unk30.x;
changed = TRUE;
}
if (pixPos1.y < livesPtr->unk28.y) {
pixPos1.y = livesPtr->unk28.y;
pixPos2.y = livesPtr->unk28.y + livesPtr->unkC.y;
changed = TRUE;
}
else if (pixPos2.y >= livesPtr->unk30.y) {
pixPos1.y = livesPtr->unk30.y - livesPtr->unkC.y;
pixPos2.y = livesPtr->unk30.y;
changed = TRUE;
}
ret = sub_80A9488(livesPtr, &pixPos1, &pixPos2);
if (ret != 0) {
sub_80AAF68(livesPtr, 0);
return ret;
}
livesPtr->unk144 = pixPos1;
livesPtr->unk14C = pixPos2;
if (changed) {
sub_80AAF68(livesPtr, 0);
return 1;
}
else {
sub_80AAF68(livesPtr, 1);
return 0;
}
}
s32 sub_80AA074(struct unkStruct_3001B84_sub *livesPtr, PixelPos *pixelPosArg)
{
s32 ret;
PixelPos pixPos1, pixPos2;
pixPos1.x = livesPtr->unk144.x + pixelPosArg->x;
pixPos1.y = livesPtr->unk144.y + pixelPosArg->y;
pixPos2.x = livesPtr->unk14C.x + pixelPosArg->x;
pixPos2.y = livesPtr->unk14C.y + pixelPosArg->y;
if (pixPos1.x < livesPtr->unk28.x) {
pixPos1.x = livesPtr->unk28.x;
pixPos2.x = livesPtr->unk28.x + livesPtr->unkC.x;
}
else if (pixPos2.x >= livesPtr->unk30.x) {
pixPos1.x = livesPtr->unk30.x - livesPtr->unkC.x;
pixPos2.x = livesPtr->unk30.x;
}
if (pixPos1.y < livesPtr->unk28.y) {
pixPos1.y = livesPtr->unk28.y;
pixPos2.y = livesPtr->unk28.y + livesPtr->unkC.y;
}
else if (pixPos2.y >= livesPtr->unk30.y) {
pixPos1.y = livesPtr->unk30.y - livesPtr->unkC.y;
pixPos2.y = livesPtr->unk30.y;
}
ret = sub_80A95AC(livesPtr, &pixPos1, &pixPos2);
if (ret == 0) {
livesPtr->unk144 = pixPos1;
livesPtr->unk14C = pixPos2;
if (livesPtr->unk11C & 0x10) {
s32 id = (s16) FindGroundEvent(0x20, &pixPos1, &pixPos2);
if (id >= 0) {
if (livesPtr->unk13E != id && sub_80A8ACC(livesPtr->unk0, id)) {
livesPtr->unk13E = id;
ret = 2;
}
}
else {
livesPtr->unk13E = -1;
}
}
ASM_MATCH_TRICK(ret);
}
return ret;
}
bool8 sub_80AA3F8(struct unkStruct_3001B84_sub *livesPtr, s32 a1);
extern s32 sub_80AC554(u32 a0, PixelPos *pixelPosArg1, PixelPos *pixelPosArg2);
extern s32 sub_80AC448(s32 id_, PixelPos *pixelPos);
extern bool8 sub_80A595C(u32 a0, PixelPos *pixelPosArg1, PixelPos *pixelPosArg2);
s32 sub_80AA180(struct unkStruct_3001B84_sub *livesPtr, u32 flags, PixelPos *pixelPosArg1, PixelPos *pixelPosArg2)
{
PixelPos pixPos1, pixPos2;
if (flags & 4) {
s32 id = (s16) sub_80A9344(livesPtr->unk0, 0x80, pixelPosArg1, pixelPosArg2);
if (id >= 0) {
s32 dir;
sub_80A8FD8(id, &pixPos1);
pixPos2.x = pixPos1.x - (livesPtr->unk144.x + livesPtr->unk14.x);
pixPos2.y = pixPos1.y - (livesPtr->unk144.y + livesPtr->unk14.y);
dir = VecDirection8Radial(&pixPos2);
if (dir != -1) {
// s8 memes
s8 *dirDst = &livesPtr->unk142;
s8 dirS8 = (s8) dir;
*dirDst = dirS8;
if (livesPtr->unk15D != dirS8) {
livesPtr->unk15C = 1;
}
if (sub_80AA3F8(livesPtr, livesPtr->unk142))
return 3;
}
return 0;
}
}
if (flags & 8) {
s32 id = (s16) sub_80AC554(0x80, pixelPosArg1, pixelPosArg2);
if (id >= 0) {
s32 dir;
sub_80AC448(id, &pixPos1);
pixPos2.x = pixPos1.x - (livesPtr->unk144.x + livesPtr->unk14.x);
pixPos2.y = pixPos1.y - (livesPtr->unk144.y + livesPtr->unk14.y);
dir = VecDirection8Radial(&pixPos2);
if (dir != -1) {
// s8 memes
s8 *dirDst = &livesPtr->unk142;
s8 dirS8 = (s8) dir;
*dirDst = dirS8;
if (livesPtr->unk15D != dirS8) {
livesPtr->unk15C = 1;
}
if (sub_80AA3F8(livesPtr, livesPtr->unk142))
return 3;
}
return 0;
}
}
return 0;
}
s32 sub_80AA2BC(struct unkStruct_3001B84_sub *livesPtr, u32 flags, PixelPos *pixelPosArg1, PixelPos *pixelPosArg2)
{
PixelPos pixPos1, pixPos2, pixPos3;
PixelPos posTemp;
PixelPos pixPos4;
pixPos1 = *pixelPosArg1;
pixPos3 = *pixelPosArg2;
pixPos2.x = pixPos1.x / 2048;
pixPos2.y = pixPos1.y / 2048;
posTemp = (PixelPos) {((pixPos3.x - 1) / 2048), ((pixPos3.y - 1) / 2048)};
pixPos4 = (PixelPos) {(posTemp.x- pixPos2.x) + 1, (posTemp.y -pixPos2.y) + 1};
if (flags & 4) {
s32 id2 = (s16) GetLivesCollision_80A92A0(livesPtr->unk0, 0x80, &pixPos1, &pixPos3);
if (id2 >= 0) {
struct unkStruct_3001B84_sub *ptr2 = &gGroundLives->array[id2];
if (ptr2->unk11C & 0x200) {
ptr2->unk142 = sub_8002984(livesPtr->unk142, 5);
}
if (GroundLives_ExecutePlayerScriptActionLives(livesPtr->unk0, id2))
return 3;
}
}
if (flags & 8) {
s32 id2 = (s16) sub_80AC4C8(0x80, &pixPos1, &pixPos3);
if (id2 >= 0) {
if (sub_80A8A5C(livesPtr->unk0, id2))
return 3;
}
}
if (sub_80A595C(0x10, &pixPos2, &pixPos4)) {
return 6;
}
return 0;
}
extern const s32 gUnknown_8117FF0[];
extern const s32 gUnknown_8118010[];
extern const s32 gUnknown_8118030[];
bool8 sub_80AA3F8(struct unkStruct_3001B84_sub *livesPtr, s32 a1_)
{
s32 i;
s32 a1 = (s8) a1_;
PixelPos pixPos1 = SetVecFromDirectionSpeed(a1, 0x100);
PixelPos pixPos2 = { livesPtr->unk144.x + pixPos1.x, livesPtr->unk144.y + pixPos1.y };
PixelPos pixPos3 = { livesPtr->unk14C.x + pixPos1.x, livesPtr->unk14C.y + pixPos1.y };
PixelPos pixPos4, pixPos5, pixPos6;
s32 r7 = sub_80AA2BC(livesPtr, 0xC, &pixPos2, &pixPos3);
s32 var_2C, var_28, var_24;
if (r7 == 3)
return TRUE;
pixPos6.x = (((livesPtr->unkC.x / 2) + 0x200) * pixPos1.x) / 256;
pixPos6.y = (((livesPtr->unkC.y / 2) + 0x200) * pixPos1.y) / 256;
pixPos4.x = (livesPtr->unk144.x + livesPtr->unk14.x + pixPos6.x) - 768;
pixPos4.y = (livesPtr->unk144.y + livesPtr->unk14.y + pixPos6.y) - 768;
pixPos5 = (PixelPos) { pixPos4.x + 0x600, pixPos4.y + 0x600};
var_2C = gUnknown_8117FF0[a1];
var_28 = gUnknown_8118010[a1];
var_24 = gUnknown_8118030[a1];
for (i = 0x200; i < var_2C; i += 0x100) {
if (pixPos4.x < livesPtr->unk28.x || pixPos5.x >= livesPtr->unk30.x)
return FALSE;
if (pixPos4.y < livesPtr->unk28.y || pixPos5.y >= livesPtr->unk30.y)
return FALSE;
r7 = sub_80AA2BC(livesPtr, 0xC, &pixPos4, &pixPos5);
if (r7 == 3)
return TRUE;
pixPos4.x += pixPos1.x;
pixPos4.y += pixPos1.y;
pixPos5.x += pixPos1.x;
pixPos5.y += pixPos1.y;
if (r7 == 6)
break;
}
if (r7 != 6)
return FALSE;
for (; i < var_28; i += 0x100) {
if (pixPos4.x < livesPtr->unk28.x || pixPos5.x >= livesPtr->unk30.x)
return FALSE;
if (pixPos4.y < livesPtr->unk28.y || pixPos5.y >= livesPtr->unk30.y)
return FALSE;
r7 = sub_80AA2BC(livesPtr, 4, &pixPos4, &pixPos5);
if (r7 == 3)
return TRUE;
pixPos4.x += pixPos1.x;
pixPos4.y += pixPos1.y;
pixPos5.x += pixPos1.x;
pixPos5.y += pixPos1.y;
if (r7 != 6)
break;
}
if (r7 == 6)
return FALSE;
for (i = 0; i < var_24; i += 0x100) {
if (pixPos4.x < livesPtr->unk28.x || pixPos5.x >= livesPtr->unk30.x)
return FALSE;
if (pixPos4.y < livesPtr->unk28.y || pixPos5.y >= livesPtr->unk30.y)
return FALSE;
r7 = sub_80AA2BC(livesPtr, 4, &pixPos4, &pixPos5);
if (r7 == 3)
return TRUE;
if (r7 == 6)
return FALSE;
pixPos4.x += pixPos1.x;
pixPos4.y += pixPos1.y;
pixPos5.x += pixPos1.x;
pixPos5.y += pixPos1.y;
}
return FALSE;
}
//