mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-12 02:56:01 -05:00
sub_80A8ACC
This commit is contained in:
@@ -7,638 +7,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
thumb_func_start GroundLives_Delete
|
||||
GroundLives_Delete:
|
||||
push {r4,lr}
|
||||
adds r2, r0, 0
|
||||
lsls r2, 16
|
||||
asrs r2, 16
|
||||
ldr r1, _080A86BC
|
||||
lsls r0, r2, 5
|
||||
subs r0, r2
|
||||
lsls r0, 4
|
||||
ldr r1, [r1]
|
||||
adds r4, r1, r0
|
||||
ldr r1, _080A86C0
|
||||
movs r0, 0
|
||||
bl Log
|
||||
movs r1, 0xB8
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
bl sub_80A74E4
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x38
|
||||
bl InitAction2
|
||||
ldr r0, _080A86C4
|
||||
strh r0, [r4, 0x2]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080A86BC: .4byte gGroundLives
|
||||
_080A86C0: .4byte gUnknown_8118194
|
||||
_080A86C4: .4byte 0x0000ffff
|
||||
thumb_func_end GroundLives_Delete
|
||||
|
||||
thumb_func_start sub_80A86C8
|
||||
sub_80A86C8:
|
||||
push {r4,r5,lr}
|
||||
adds r5, r1, 0
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r2, _080A8708
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r4, r0, r1
|
||||
movs r1, 0x2
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r3, 0x1
|
||||
negs r3, r3
|
||||
cmp r0, r3
|
||||
beq _080A8744
|
||||
movs r2, 0x9E
|
||||
lsls r2, 1
|
||||
adds r1, r4, r2
|
||||
movs r2, 0
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, 0
|
||||
bne _080A870C
|
||||
movs r0, 0xC0
|
||||
lsls r0, 6
|
||||
ands r0, r5
|
||||
cmp r0, 0
|
||||
beq _080A872E
|
||||
bl sub_80AB5A4
|
||||
b _080A872E
|
||||
.align 2, 0
|
||||
_080A8708: .4byte gGroundLives
|
||||
_080A870C:
|
||||
movs r0, 0x80
|
||||
lsls r0, 5
|
||||
ands r0, r5
|
||||
cmp r0, 0
|
||||
beq _080A872E
|
||||
ldr r2, _080A874C
|
||||
movs r0, 0
|
||||
ldrsh r1, [r1, r0]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
ldr r1, [r2]
|
||||
adds r1, r0
|
||||
str r3, [r1, 0x8]
|
||||
movs r0, 0
|
||||
str r0, [r1]
|
||||
str r0, [r1, 0x4]
|
||||
_080A872E:
|
||||
movs r1, 0x8E
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
ldr r1, [r0]
|
||||
orrs r1, r5
|
||||
str r1, [r0]
|
||||
movs r2, 0xB8
|
||||
lsls r2, 1
|
||||
adds r0, r4, r2
|
||||
bl sub_80A6688
|
||||
_080A8744:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080A874C: .4byte gGroundLivesMeta
|
||||
thumb_func_end sub_80A86C8
|
||||
|
||||
thumb_func_start sub_80A8750
|
||||
sub_80A8750:
|
||||
push {r4,r5,lr}
|
||||
adds r5, r1, 0
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r2, _080A87A8
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r4, r0, r1
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
beq _080A87A2
|
||||
movs r1, 0x9E
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, 0
|
||||
bne _080A878C
|
||||
movs r0, 0xC0
|
||||
lsls r0, 6
|
||||
ands r0, r5
|
||||
cmp r0, 0
|
||||
beq _080A878C
|
||||
bl sub_80AB5A4
|
||||
_080A878C:
|
||||
movs r1, 0x8E
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
ldr r1, [r0]
|
||||
bics r1, r5
|
||||
str r1, [r0]
|
||||
movs r2, 0xB8
|
||||
lsls r2, 1
|
||||
adds r0, r4, r2
|
||||
bl sub_80A6688
|
||||
_080A87A2:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080A87A8: .4byte gGroundLives
|
||||
thumb_func_end sub_80A8750
|
||||
|
||||
thumb_func_start sub_80A87AC
|
||||
sub_80A87AC:
|
||||
push {lr}
|
||||
adds r3, r1, 0
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r2, _080A87DC
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r2, r0, r1
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r2, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
beq _080A87D8
|
||||
movs r1, 0x90
|
||||
lsls r1, 1
|
||||
adds r0, r2, r1
|
||||
adds r1, r3, 0
|
||||
bl sub_809CD8C
|
||||
_080A87D8:
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080A87DC: .4byte gGroundLives
|
||||
thumb_func_end sub_80A87AC
|
||||
|
||||
thumb_func_start sub_80A87E0
|
||||
sub_80A87E0:
|
||||
push {r4,lr}
|
||||
adds r3, r1, 0
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r2, _080A8820
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r4, r0, r1
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
beq _080A8824
|
||||
movs r0, 0x7
|
||||
movs r1, 0
|
||||
adds r2, r3, 0
|
||||
bl sub_809B1C0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A8824
|
||||
movs r1, 0x90
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
movs r1, 0x5
|
||||
bl sub_809CD8C
|
||||
movs r0, 0x1
|
||||
b _080A8826
|
||||
.align 2, 0
|
||||
_080A8820: .4byte gGroundLives
|
||||
_080A8824:
|
||||
movs r0, 0
|
||||
_080A8826:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A87E0
|
||||
|
||||
thumb_func_start sub_80A882C
|
||||
sub_80A882C:
|
||||
push {lr}
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r2, _080A8850
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r2, r0, r1
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r2, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
bne _080A8854
|
||||
movs r0, 0
|
||||
b _080A8858
|
||||
.align 2, 0
|
||||
_080A8850: .4byte gGroundLives
|
||||
_080A8854:
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x38
|
||||
_080A8858:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A882C
|
||||
|
||||
thumb_func_start sub_80A885C
|
||||
sub_80A885C:
|
||||
push {r4,lr}
|
||||
adds r4, r1, 0
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
lsls r2, 16
|
||||
asrs r3, r2, 16
|
||||
ldr r2, _080A8884
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r2, r0, r1
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r2, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
bne _080A8888
|
||||
movs r0, 0
|
||||
b _080A8898
|
||||
.align 2, 0
|
||||
_080A8884: .4byte gGroundLives
|
||||
_080A8888:
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x38
|
||||
adds r1, r4, 0
|
||||
adds r2, r3, 0
|
||||
bl GetPredefinedScript
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
_080A8898:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A885C
|
||||
|
||||
thumb_func_start sub_80A88A0
|
||||
sub_80A88A0:
|
||||
push {lr}
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r2, _080A88C4
|
||||
lsls r1, r0, 5
|
||||
subs r1, r0
|
||||
lsls r1, 4
|
||||
ldr r0, [r2]
|
||||
adds r2, r0, r1
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r2, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
bne _080A88C8
|
||||
movs r0, 0
|
||||
b _080A88D4
|
||||
.align 2, 0
|
||||
_080A88C4: .4byte gGroundLives
|
||||
_080A88C8:
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x38
|
||||
bl sub_809D678
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
_080A88D4:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A88A0
|
||||
|
||||
thumb_func_start GroundLives_ExecuteScript
|
||||
GroundLives_ExecuteScript:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x4
|
||||
adds r4, r0, 0
|
||||
adds r7, r1, 0
|
||||
adds r6, r2, 0
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
ldr r1, _080A8914
|
||||
lsls r0, r4, 5
|
||||
subs r0, r4
|
||||
lsls r0, 4
|
||||
ldr r1, [r1]
|
||||
adds r5, r1, r0
|
||||
ldr r1, _080A8918
|
||||
movs r0, 0x2
|
||||
ldrsh r3, [r5, r0]
|
||||
str r6, [sp]
|
||||
movs r0, 0
|
||||
adds r2, r4, 0
|
||||
bl Log
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r5, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
bne _080A891C
|
||||
movs r0, 0
|
||||
b _080A8934
|
||||
.align 2, 0
|
||||
_080A8914: .4byte gGroundLives
|
||||
_080A8918: .4byte gUnknown_81181B0
|
||||
_080A891C:
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x38
|
||||
ldr r3, _080A893C
|
||||
adds r1, r7, 0
|
||||
adds r2, r6, 0
|
||||
bl GroundScript_ExecutePP
|
||||
movs r0, 0xAE
|
||||
lsls r0, 1
|
||||
adds r1, r5, r0
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
_080A8934:
|
||||
add sp, 0x4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080A893C: .4byte gUnknown_81181F4
|
||||
thumb_func_end GroundLives_ExecuteScript
|
||||
|
||||
thumb_func_start _ExecutePlayerScript
|
||||
_ExecutePlayerScript:
|
||||
push {r4,r5,lr}
|
||||
adds r3, r0, 0
|
||||
adds r5, r1, 0
|
||||
adds r4, r2, 0
|
||||
movs r0, 0xAF
|
||||
lsls r0, 1
|
||||
adds r1, r3, r0
|
||||
movs r2, 0
|
||||
movs r0, 0xC0
|
||||
lsls r0, 2
|
||||
strh r0, [r1]
|
||||
movs r0, 0xB0
|
||||
lsls r0, 1
|
||||
adds r1, r3, r0
|
||||
movs r0, 0x1
|
||||
strh r0, [r1]
|
||||
movs r1, 0xB2
|
||||
lsls r1, 1
|
||||
adds r0, r3, r1
|
||||
str r2, [r0]
|
||||
movs r0, 0xB4
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
movs r1, 0
|
||||
ldrsh r0, [r2, r1]
|
||||
ldr r1, _080A898C
|
||||
cmp r0, r1
|
||||
beq _080A8984
|
||||
strh r1, [r2]
|
||||
movs r0, 0xAE
|
||||
lsls r0, 1
|
||||
adds r1, r3, r0
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
_080A8984:
|
||||
cmp r4, 0
|
||||
bne _080A8990
|
||||
movs r0, 0
|
||||
b _080A89A2
|
||||
.align 2, 0
|
||||
_080A898C: .4byte 0x00000807
|
||||
_080A8990:
|
||||
adds r0, r3, 0
|
||||
adds r0, 0x38
|
||||
ldr r3, _080A89A8
|
||||
adds r1, r5, 0
|
||||
adds r2, r4, 0
|
||||
bl GroundScript_ExecutePP
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
_080A89A2:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080A89A8: .4byte gUnknown_8118218
|
||||
thumb_func_end _ExecutePlayerScript
|
||||
|
||||
thumb_func_start sub_80A89AC
|
||||
sub_80A89AC:
|
||||
push {r4,lr}
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r4, _080A89CC
|
||||
lsls r3, r0, 5
|
||||
subs r3, r0
|
||||
lsls r3, 4
|
||||
ldr r0, [r4]
|
||||
adds r0, r3
|
||||
bl _ExecutePlayerScript
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080A89CC: .4byte gGroundLives
|
||||
thumb_func_end sub_80A89AC
|
||||
|
||||
thumb_func_start GroundLives_ExecutePlayerScriptActionLives
|
||||
GroundLives_ExecutePlayerScriptActionLives:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x10
|
||||
lsls r0, 16
|
||||
asrs r2, r0, 16
|
||||
lsls r1, 16
|
||||
asrs r4, r1, 16
|
||||
cmp r2, 0
|
||||
blt _080A8A50
|
||||
cmp r4, 0
|
||||
blt _080A8A50
|
||||
ldr r1, _080A8A48
|
||||
lsls r0, r2, 5
|
||||
subs r0, r2
|
||||
lsls r0, 4
|
||||
ldr r1, [r1]
|
||||
adds r5, r1, r0
|
||||
lsls r0, r4, 5
|
||||
subs r0, r4
|
||||
lsls r0, 4
|
||||
adds r1, r0
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r5, r2]
|
||||
movs r2, 0x1
|
||||
negs r2, r2
|
||||
cmp r0, r2
|
||||
beq _080A8A50
|
||||
movs r3, 0x2
|
||||
ldrsh r0, [r1, r3]
|
||||
cmp r0, r2
|
||||
beq _080A8A50
|
||||
adds r6, r1, 0
|
||||
adds r6, 0x38
|
||||
adds r0, r6, 0
|
||||
mov r1, sp
|
||||
movs r2, 0x2
|
||||
bl GetPredefinedScript
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A8A50
|
||||
movs r1, 0x1
|
||||
lsls r0, r4, 16
|
||||
orrs r0, r1
|
||||
str r0, [sp, 0xC]
|
||||
adds r1, r5, 0
|
||||
adds r1, 0x40
|
||||
ldr r3, _080A8A4C
|
||||
adds r0, r6, 0
|
||||
movs r2, 0x3
|
||||
bl ExecutePredefinedScript
|
||||
add r1, sp, 0xC
|
||||
adds r0, r5, 0
|
||||
mov r2, sp
|
||||
bl _ExecutePlayerScript
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
b _080A8A52
|
||||
.align 2, 0
|
||||
_080A8A48: .4byte gGroundLives
|
||||
_080A8A4C: .4byte gUnknown_8118250
|
||||
_080A8A50:
|
||||
movs r0, 0
|
||||
_080A8A52:
|
||||
add sp, 0x10
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GroundLives_ExecutePlayerScriptActionLives
|
||||
|
||||
thumb_func_start sub_80A8A5C
|
||||
sub_80A8A5C:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x1C
|
||||
lsls r0, 16
|
||||
asrs r2, r0, 16
|
||||
lsls r1, 16
|
||||
asrs r5, r1, 16
|
||||
cmp r2, 0
|
||||
blt _080A8AC0
|
||||
cmp r5, 0
|
||||
blt _080A8AC0
|
||||
ldr r1, _080A8ABC
|
||||
lsls r0, r2, 5
|
||||
subs r0, r2
|
||||
lsls r0, 4
|
||||
ldr r1, [r1]
|
||||
adds r6, r1, r0
|
||||
adds r0, r5, 0
|
||||
mov r1, sp
|
||||
movs r2, 0x2
|
||||
bl sub_80AC274
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A8AC0
|
||||
movs r1, 0x2
|
||||
lsls r0, r5, 16
|
||||
orrs r0, r1
|
||||
str r0, [sp, 0x18]
|
||||
add r4, sp, 0xC
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
movs r2, 0x3
|
||||
bl sub_80AC274
|
||||
adds r1, r6, 0
|
||||
adds r1, 0x40
|
||||
adds r0, r5, 0
|
||||
adds r2, r4, 0
|
||||
bl GroundObject_ExecuteScript
|
||||
add r1, sp, 0x18
|
||||
adds r0, r6, 0
|
||||
mov r2, sp
|
||||
bl _ExecutePlayerScript
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
b _080A8AC2
|
||||
.align 2, 0
|
||||
_080A8ABC: .4byte gGroundLives
|
||||
_080A8AC0:
|
||||
movs r0, 0
|
||||
_080A8AC2:
|
||||
add sp, 0x1C
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A8A5C
|
||||
|
||||
thumb_func_start sub_80A8ACC
|
||||
sub_80A8ACC:
|
||||
push {r4,lr}
|
||||
sub sp, 0xC
|
||||
lsls r0, 16
|
||||
asrs r2, r0, 16
|
||||
lsls r1, 16
|
||||
asrs r3, r1, 16
|
||||
cmp r2, 0
|
||||
blt _080A8B10
|
||||
cmp r3, 0
|
||||
blt _080A8B10
|
||||
ldr r1, _080A8B0C
|
||||
lsls r0, r2, 5
|
||||
subs r0, r2
|
||||
lsls r0, 4
|
||||
ldr r1, [r1]
|
||||
adds r4, r1, r0
|
||||
adds r0, r3, 0
|
||||
mov r1, sp
|
||||
bl sub_80ADC64
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A8B10
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
mov r2, sp
|
||||
bl _ExecutePlayerScript
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
b _080A8B12
|
||||
.align 2, 0
|
||||
_080A8B0C: .4byte gGroundLives
|
||||
_080A8B10:
|
||||
movs r0, 0
|
||||
_080A8B12:
|
||||
add sp, 0xC
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A8ACC
|
||||
|
||||
thumb_func_start GroundLivesNotifyAll
|
||||
GroundLivesNotifyAll:
|
||||
push {r4-r7,lr}
|
||||
|
||||
@@ -3,6 +3,17 @@
|
||||
|
||||
#include "structs/str_position.h"
|
||||
|
||||
struct Struct3001B84_sub120
|
||||
{
|
||||
s32 unk0;
|
||||
s32 unk4;
|
||||
s32 unk8;
|
||||
u8 unkC;
|
||||
s32 unk10;
|
||||
s32 unk14;
|
||||
u8 unk18;
|
||||
};
|
||||
|
||||
// ground_lives.s
|
||||
s32 sub_80A7AE8(s16);
|
||||
s16 sub_80A8FD8(s32, PixelPos*);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "code_80118A4.h"
|
||||
#include "string_format.h"
|
||||
#include "input.h"
|
||||
#include "ground_lives.h"
|
||||
|
||||
struct unkStruct_3001B68
|
||||
{
|
||||
@@ -554,19 +555,7 @@ s32 sub_809CD48(void)
|
||||
void nullsub_117(void) {}
|
||||
void nullsub_118(void) {}
|
||||
|
||||
// TODO: merge this struct with other ground-related structs (if possible, otherwise just give a fitting name)
|
||||
struct Tempsub_809CD68Struct
|
||||
{
|
||||
s32 unk0;
|
||||
s32 unk4;
|
||||
s32 unk8;
|
||||
u8 unkC;
|
||||
s32 unk10;
|
||||
s32 unk14;
|
||||
u8 unk18;
|
||||
};
|
||||
|
||||
void sub_809CD68(struct Tempsub_809CD68Struct *dst)
|
||||
void sub_809CD68(struct Struct3001B84_sub120 *dst)
|
||||
{
|
||||
dst->unk0 = 0;
|
||||
dst->unk4 = 0;
|
||||
@@ -576,7 +565,7 @@ void sub_809CD68(struct Tempsub_809CD68Struct *dst)
|
||||
dst->unk18 = 0;
|
||||
}
|
||||
|
||||
void sub_809CD7C(struct Tempsub_809CD68Struct *dst)
|
||||
void sub_809CD7C(struct Struct3001B84_sub120 *dst)
|
||||
{
|
||||
dst->unk0 = 0;
|
||||
dst->unk10 = -1;
|
||||
@@ -584,7 +573,7 @@ void sub_809CD7C(struct Tempsub_809CD68Struct *dst)
|
||||
dst->unk8 = 0;
|
||||
}
|
||||
|
||||
void sub_809CD8C(struct Tempsub_809CD68Struct *dst, s32 a1)
|
||||
void sub_809CD8C(struct Struct3001B84_sub120 *dst, s32 a1)
|
||||
{
|
||||
if (a1 == 5) {
|
||||
sub_809CD68(dst);
|
||||
@@ -597,7 +586,7 @@ void sub_809CD8C(struct Tempsub_809CD68Struct *dst, s32 a1)
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_809CDB8(struct Tempsub_809CD68Struct *dst)
|
||||
s32 sub_809CDB8(struct Struct3001B84_sub120 *dst)
|
||||
{
|
||||
s32 ret = dst->unk4;
|
||||
if (ret == 0) {
|
||||
@@ -606,7 +595,7 @@ s32 sub_809CDB8(struct Tempsub_809CD68Struct *dst)
|
||||
return ret;
|
||||
}
|
||||
|
||||
u32 sub_809CDC8(struct Tempsub_809CD68Struct *strPtr, u32 *r6, s8 *r7, s32 *param_4, u32 param_5, u32 param_6)
|
||||
u32 sub_809CDC8(struct Struct3001B84_sub120 *strPtr, u32 *r6, s8 *r7, s32 *param_4, u32 param_5, u32 param_6)
|
||||
{
|
||||
u32 sp_4;
|
||||
s32 sp;
|
||||
|
||||
@@ -33,18 +33,6 @@ struct unkStruct_3001B80
|
||||
};
|
||||
IWRAM_INIT struct unkStruct_3001B80 *gGroundLivesMeta = NULL;
|
||||
|
||||
// TODO: Merge with code 809C5C4
|
||||
struct Tempsub_809CD68Struct
|
||||
{
|
||||
s32 unk0;
|
||||
s32 unk4;
|
||||
s32 unk8;
|
||||
u8 unkC;
|
||||
s32 unk10;
|
||||
s32 unk14;
|
||||
u8 unk18;
|
||||
};
|
||||
|
||||
struct unkStruct_3001B84_sub
|
||||
{
|
||||
// size: 0x1F0
|
||||
@@ -62,7 +50,7 @@ struct unkStruct_3001B84_sub
|
||||
PixelPos unk30;
|
||||
Action unk38;
|
||||
u32 unk11C;
|
||||
struct Tempsub_809CD68Struct unk120;
|
||||
struct Struct3001B84_sub120 unk120;
|
||||
s16 unk13C;
|
||||
s16 unk13E;
|
||||
s16 unk140;
|
||||
@@ -75,7 +63,7 @@ struct unkStruct_3001B84_sub
|
||||
u16 unk15E;
|
||||
u16 unk160;
|
||||
s32 unk164;
|
||||
u16 unk168;
|
||||
s16 unk168;
|
||||
u16 unk16A;
|
||||
u8 fill16C[1];
|
||||
struct UnkGroundSpriteStruct unk170;
|
||||
@@ -97,6 +85,7 @@ const struct GroundScriptHeader *GetGroundScript(s16 a0, DebugLocation *);
|
||||
extern DebugLocation gUnknown_811808C;
|
||||
extern u8 gUnknown_8118098[];
|
||||
extern u8 gUnknown_81180BC[];
|
||||
extern u8 gUnknown_81181B0[];
|
||||
|
||||
void AllocGroundLives(void)
|
||||
{
|
||||
@@ -598,19 +587,24 @@ s32 sub_80A7DDC(s16 *a0, s16 *speciesDst)
|
||||
}
|
||||
|
||||
extern const char gUnknown_811811C[];
|
||||
extern const char gUnknown_8118194[];
|
||||
|
||||
extern void sub_809CD68(struct Tempsub_809CD68Struct *dst);
|
||||
extern void sub_809CD68(struct Struct3001B84_sub120 *dst);
|
||||
|
||||
extern bool8 GetCurrentDungeonBounds(PixelPos *a0, PixelPos *a1);
|
||||
extern void sub_80A7428(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 monsterId_, s32 a3);
|
||||
extern void SetPredefinedScript(Action *param_1, s16 index, const ScriptCommand *param_3);
|
||||
extern bool8 ExecutePredefinedScript(Action *param_1, s32 *param_2, s16 index, const DebugLocation *debug);
|
||||
extern void sub_809D170(s32 r0, s32 r1);
|
||||
extern void sub_80A74E4(struct UnkGroundSpriteStruct *ptr);
|
||||
|
||||
extern const CallbackData gGroundLivesCallbacks[];
|
||||
extern const DebugLocation gUnknown_8118170;
|
||||
extern const DebugLocation gUnknown_811817C;
|
||||
extern const DebugLocation gUnknown_8118188;
|
||||
extern const DebugLocation gUnknown_81181F4;
|
||||
extern const DebugLocation gUnknown_8118218;
|
||||
extern const DebugLocation gUnknown_8118250;
|
||||
|
||||
void sub_80A9750(struct unkStruct_3001B84_sub *ptr, u16 a1);
|
||||
|
||||
@@ -853,4 +847,233 @@ s32 GroundLives_Add(s32 id_, const GroundLivesData *ptr, s32 group_, s32 sector_
|
||||
return id;
|
||||
}
|
||||
|
||||
void GroundLives_Delete(s32 id_)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
Log(0, gUnknown_8118194, id);
|
||||
sub_80A74E4(&livesPtr->unk170);
|
||||
InitAction2(&livesPtr->unk38);
|
||||
livesPtr->unk2 = -1;
|
||||
}
|
||||
|
||||
extern void sub_80A6688(struct UnkGroundSpriteStruct *ptr, s32 a0);
|
||||
extern void sub_80AB5A4(void);
|
||||
|
||||
void sub_80A86C8(s32 id_, u32 flags)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
if (livesPtr->unk2 != -1) {
|
||||
if (livesPtr->unk13C == 0) {
|
||||
if (flags & 0x3000) {
|
||||
sub_80AB5A4();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (flags & 0x1000) {
|
||||
struct GroundLivesMeta_Sub1 *metaPtr = &gGroundLivesMeta->unk0[livesPtr->unk13C];
|
||||
|
||||
metaPtr->unk8 = -1;
|
||||
metaPtr->unk0 = 0;
|
||||
metaPtr->unk4 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
livesPtr->unk11C |= flags;
|
||||
sub_80A6688(&livesPtr->unk170, livesPtr->unk11C);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80A8750(s32 id_, u32 flags)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
if (livesPtr->unk2 != -1) {
|
||||
if (livesPtr->unk13C == 0) {
|
||||
if (flags & 0x3000) {
|
||||
sub_80AB5A4();
|
||||
}
|
||||
}
|
||||
|
||||
livesPtr->unk11C &= ~(flags);
|
||||
sub_80A6688(&livesPtr->unk170, livesPtr->unk11C);
|
||||
}
|
||||
}
|
||||
|
||||
extern void sub_809CD8C(struct Struct3001B84_sub120 *dst, s32 a1);
|
||||
extern bool8 sub_809B1C0(s32 a0, u32 kind, u8 *a2);
|
||||
extern bool8 GetPredefinedScript(Action *param_1, ScriptInfoSmall *script, s32 _index);
|
||||
extern bool8 sub_809D678(Action *action);
|
||||
|
||||
void sub_80A87AC(s32 id_, s32 a1)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
if (livesPtr->unk2 != -1) {
|
||||
sub_809CD8C(&livesPtr->unk120, a1);
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_80A87E0(s32 id_, u8 *a1)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
if (livesPtr->unk2 != -1 && sub_809B1C0(7, 0, a1)) {
|
||||
sub_809CD8C(&livesPtr->unk120, 5);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Action *sub_80A882C(s32 id_)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
if (livesPtr->unk2 != -1) {
|
||||
return &livesPtr->unk38;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
UNUSED static bool8 sub_80A885C(s32 id_, ScriptInfoSmall *scriptInfo, s32 a2_)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
s32 a2 = (s16) a2_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
if (livesPtr->unk2 != -1) {
|
||||
return GetPredefinedScript(&livesPtr->unk38, scriptInfo, a2);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
UNUSED static bool8 sub_80A88A0(s32 id_)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
if (livesPtr->unk2 != -1) {
|
||||
return sub_809D678(&livesPtr->unk38);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 GroundLives_ExecuteScript(s32 id_, s32 *a1, ScriptInfoSmall *scriptInfo)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
Log(0, gUnknown_81181B0, id, livesPtr->unk2, scriptInfo);
|
||||
|
||||
if (livesPtr->unk2 != -1) {
|
||||
GroundScript_ExecutePP(&livesPtr->unk38, a1, scriptInfo, &gUnknown_81181F4);
|
||||
livesPtr->unk15C = 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 _ExecutePlayerScript(struct unkStruct_3001B84_sub *livesPtr, s32 *a1, ScriptInfoSmall *scriptInfo)
|
||||
{
|
||||
livesPtr->unk15E = 0x300;
|
||||
livesPtr->unk160 = 1;
|
||||
livesPtr->unk164 = 0;
|
||||
if (livesPtr->unk168 != 0x807) {
|
||||
livesPtr->unk168 = 0x807;
|
||||
livesPtr->unk15C = 1;
|
||||
}
|
||||
|
||||
if (scriptInfo != NULL) {
|
||||
return GroundScript_ExecutePP(&livesPtr->unk38, a1, scriptInfo, &gUnknown_8118218);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
UNUSED static bool8 sub_80A89AC(s32 id_, s32 *a1, ScriptInfoSmall *scriptInfo)
|
||||
{
|
||||
s32 id = (s16) id_;
|
||||
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
|
||||
|
||||
return _ExecutePlayerScript(livesPtr, a1, scriptInfo);
|
||||
}
|
||||
|
||||
bool8 GroundLives_ExecutePlayerScriptActionLives(s32 id1_, s32 id2_)
|
||||
{
|
||||
s32 id1 = (s16) id1_;
|
||||
s32 id2 = (s16) id2_;
|
||||
|
||||
if (id1 >= 0 && id2 >= 0) {
|
||||
ScriptInfoSmall scriptInfo;
|
||||
struct unkStruct_3001B84_sub *livesPtr1 = &gGroundLives->array[id1];
|
||||
struct unkStruct_3001B84_sub *livesPtr2 = &gGroundLives->array[id2];
|
||||
|
||||
if (livesPtr1->unk2 != -1 && livesPtr2->unk2 != -1 && GetPredefinedScript(&livesPtr2->unk38, &scriptInfo, 2)) {
|
||||
s32 sp = 1;
|
||||
|
||||
sp |= (id2 << 0x10);
|
||||
ExecutePredefinedScript(&livesPtr2->unk38, (void *) &livesPtr1->unk38.unk8, 3, &gUnknown_8118250); // TODO: fix unk8 field?
|
||||
return _ExecutePlayerScript(livesPtr1, &sp, &scriptInfo);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
extern bool8 sub_80AC274(s32 a0, ScriptInfoSmall *scriptInfo, s32 a2);
|
||||
extern void GroundObject_ExecuteScript(s32, void *, ScriptInfoSmall *);
|
||||
extern bool8 sub_80ADC64(s32 id, ScriptInfoSmall *dst);
|
||||
|
||||
bool8 sub_80A8A5C(s32 id1_, s32 id2_)
|
||||
{
|
||||
s32 id1 = (s16) id1_;
|
||||
s32 id2 = (s16) id2_;
|
||||
|
||||
if (id1 >= 0 && id2 >= 0) {
|
||||
ScriptInfoSmall scriptInfo1;
|
||||
struct unkStruct_3001B84_sub *livesPtr1 = &gGroundLives->array[id1];
|
||||
|
||||
if (sub_80AC274(id2, &scriptInfo1, 2)) {
|
||||
s32 sp = 2;
|
||||
ScriptInfoSmall scriptInfo2;
|
||||
|
||||
sp |= (id2 << 0x10);
|
||||
sub_80AC274(id2, &scriptInfo2, 3);
|
||||
GroundObject_ExecuteScript(id2, &livesPtr1->unk38.unk8, &scriptInfo2);
|
||||
return _ExecutePlayerScript(livesPtr1, &sp, &scriptInfo1);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_80A8ACC(s32 id1_, s32 id2_)
|
||||
{
|
||||
s32 id1 = (s16) id1_;
|
||||
s32 id2 = (s16) id2_;
|
||||
|
||||
if (id1 >= 0 && id2 >= 0) {
|
||||
ScriptInfoSmall scriptInfo;
|
||||
struct unkStruct_3001B84_sub *livesPtr1 = &gGroundLives->array[id1];
|
||||
|
||||
if (sub_80ADC64(id2, &scriptInfo)) {
|
||||
return _ExecutePlayerScript(livesPtr1, NULL, &scriptInfo);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user