sub_80A95AC

This commit is contained in:
DizzyEggg 2025-05-20 15:20:02 +02:00
parent 48325be5ea
commit 4148c9e16f
2 changed files with 202 additions and 777 deletions

View File

@ -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}

View File

@ -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;
}
//