Files
ph/asm/ov00/Player/LinkStateRoll.s
T
Aetias cab451da34 Add PlayerControl and move all .inc files
My worktree was too big to make two separate commits :p
2024-04-06 09:26:14 +02:00

615 lines
14 KiB
ArmAsm

.include "ov00/Player/LinkStateRoll.inc"
.include "macros/function.inc"
.text
.global _ZN13LinkStateRoll8vfunc_00Ev
thumb_func_start _ZN13LinkStateRoll8vfunc_00Ev
_ZN13LinkStateRoll8vfunc_00Ev: ; 0x020ae790
bx lr
.align 2, 0
thumb_func_end _ZN13LinkStateRoll8vfunc_00Ev
.global _ZN13LinkStateRoll5GetIdEv
arm_func_start _ZN13LinkStateRoll5GetIdEv
_ZN13LinkStateRoll5GetIdEv: ; 0x020ae794
mov r0, #4
bx lr
arm_func_end _ZN13LinkStateRoll5GetIdEv
.global _ZN13LinkStateRoll20CreateDebugHierarchyEv
thumb_func_start _ZN13LinkStateRoll20CreateDebugHierarchyEv
_ZN13LinkStateRoll20CreateDebugHierarchyEv: ; 0x020ae79c
ldr r3, _020ae7a0 ; =_ZN13LinkStateBase18GetDebugHierarchy0Ev
bx r3
.align 2, 0
thumb_func_end _ZN13LinkStateRoll20CreateDebugHierarchyEv
_020ae7a0: .word _ZN13LinkStateBase18GetDebugHierarchy0Ev
.global _ZN13LinkStateRoll12OnStateEnterEv
arm_func_start _ZN13LinkStateRoll12OnStateEnterEv
_ZN13LinkStateRoll12OnStateEnterEv: ; 0x020ae7a4
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x14
mov r4, r0
ldr r1, [r4, #4]
cmp r1, #9
addls pc, pc, r1, lsl #2
b _020aeb08
_020ae7c0: ; jump table
b _020ae7e8 ; case 0
b _020ae94c ; case 1
b _020ae9fc ; case 2
b _020aea40 ; case 3
b _020ae9c8 ; case 4
b _020aea90 ; case 5
b _020aea9c ; case 6
b _020aeab8 ; case 7
b _020aeaf8 ; case 8
b _020aeb04 ; case 9
_020ae7e8:
bl _ZN13LinkStateBase18func_ov00_020a82acEv
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerVelEv
ldr r1, [r0]
add r1, r1, r1, lsr #31
mov r1, r1, asr #0x1
str r1, [r0]
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerVelEv
ldr r1, [r0, #8]
add r1, r1, r1, lsr #31
mov r1, r1, asr #0x1
str r1, [r0, #8]
mov r0, r4
bl _ZN13LinkStateBase14GetPlayerAngleEv
ldrh r5, [r0]
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerVelEv
mov r1, r5, asr #0x4
mov r2, r1, lsl #0x1
mov r6, r2, lsl #0x1
ldr r5, _020aeb10 ; =data_02050f54
add r2, r2, #1
mov r2, r2, lsl #0x1
ldrsh lr, [r5, r2]
ldrsh r6, [r5, r6]
mov r2, #0x148
mov r3, #0
umull r8, r7, r6, r2
mla r7, r6, r3, r7
mov r5, r6, asr #0x1f
adds r6, r8, #0x800
mla r7, r5, r2, r7
ldr r1, [r0]
adc r5, r7, #0
mov r6, r6, lsr #0xc
orr r6, r6, r5, lsl #20
add r1, r1, r6
str r1, [r0]
umull r5, r1, lr, r2
mla r1, lr, r3, r1
mov ip, lr, asr #0x1f
mla r1, ip, r2, r1
adds r2, r5, #0x800
ldr r6, [r0, #8]
adc r1, r1, #0
mov r2, r2, lsr #0xc
orr r2, r2, r1, lsl #20
add r1, r6, r2
str r1, [r0, #8]
mov r0, r4
bl _ZN13LinkStateBase14GetPlayerAngleEv
ldrsh r1, [r0]
mov r0, r4
mov r2, #0x400
bl _ZN13LinkStateBase12ApplyImpulseEii
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerVelEv
ldr r1, [r0, #4]
ldr r0, _020aeb14 ; =0x0000019a
cmp r1, r0
bge _020ae8f0
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerVelEv
ldr r1, _020aeb14 ; =0x0000019a
str r1, [r0, #4]
_020ae8f0:
ldr r0, _020aeb18 ; =data_027e0fb8
ldr r0, [r0]
bl _ZN13PlayerControl13StopFollowingEv
ldr r1, _020aeb1c ; =data_ov00_020e6078
mov r0, r4
mov r2, #1
bl _ZN13LinkStateBase18func_ov00_020a8a4cEii
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerPosEv
mov r2, r0
ldr r0, _020aeb20 ; =data_ov00_020eec9c
mov r1, #0xd1
bl func_ov00_020d7a84
mov r1, #2
mov r0, r4
mov r2, r1
bl _ZN13LinkStateRoll18func_ov00_020aee58Est
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerPosEv
ldr r0, [r0, #4]
add sp, sp, #0x14
str r0, [r4, #0x20]
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020ae94c:
ldr r1, _020aeb24 ; =data_ov00_020e6088
mov r2, #1
bl _ZN13LinkStateBase18func_ov00_020a8a4cEii
mov r0, r4
mov r1, #1
bl _ZN13LinkStateBase18func_ov00_020a8638Ei
mov r0, #1
strh r0, [r4, #0xc]
mov r0, #0
strh r0, [r4, #0xe]
strh r0, [r4, #0x12]
ldr r1, _020aeb28 ; =data_027e0e58
mov r0, r4
ldr r5, [r1]
bl _ZN13LinkStateBase12GetPlayerPosEv
mov r3, #0x158
str r3, [sp]
add r2, r3, #1
str r2, [sp, #4]
add r2, r3, #2
str r2, [sp, #8]
sub r2, r3, #2
str r0, [sp, #0xc]
mov r3, #1
str r3, [sp, #0x10]
add r1, r4, #0x2c
mov r0, r5
rsb r3, r3, #0x158
bl func_ov00_0207c39c
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020ae9c8:
bl func_ov05_02107c8c
mov r1, #2
mov r0, r4
strh r1, [r4, #0xc]
bl _ZN13LinkStateBase12GetPlayerPosEv
ldr r1, [r0]
add sp, sp, #0x14
str r1, [r4, #0x8c]
ldr r1, [r0, #4]
str r1, [r4, #0x90]
ldr r0, [r0, #8]
str r0, [r4, #0x94]
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020ae9fc:
bl _ZN13LinkStateBase18func_ov00_020a8d40Ev
bl func_ov00_020b4c2c
mov r1, r0
ldr r3, _020aeb2c ; =0x00002aab
mov r0, r4
mov r2, r1
bl _ZN13LinkStateBase6TurnToEsii
mov r0, r4
bl _ZN13LinkStateBase18func_ov00_020a82acEv
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerPosEv
mov r2, r0
ldr r0, _020aeb20 ; =data_ov00_020eec9c
mov r1, #0xf0
bl func_ov00_020d7a84
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020aea40:
ldr r1, _020aeb30 ; =data_ov00_020e6098
mov r2, #1
bl _ZN13LinkStateBase18func_ov00_020a8a4cEii
mov r0, r4
bl _ZN13LinkStateBase12GetPlayerPosEv
ldr r1, [r0, #4]
mov r0, r4
str r1, [r4, #0x1c]
bl _ZN13LinkStateBase12GetPlayerPosEv
ldr r5, [r0, #4]
mov r0, r4
str r5, [r4, #0x20]
bl _ZN13LinkStateBase18func_ov00_020a8d40Ev
str r5, [r0, #0x9c]
mov r0, r4
bl _ZN13LinkStateBase18func_ov00_020a8d40Ev
mov r1, #3
strh r1, [r0, #0x5a]
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020aea90:
bl func_ov21_02170660
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020aea9c:
ldr r1, _020aeb34 ; =data_ov00_020e60a8
mov r3, #0
mov r2, #1
strh r3, [r4, #0x18]
bl _ZN13LinkStateBase18func_ov00_020a8a4cEii
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020aeab8:
mov r1, #0
strb r1, [r4, #0x28]
strh r1, [r4, #0x18]
bl _ZN13LinkStateBase14GetPlayerAngleEv
mov r1, #0
strh r1, [r0]
mov r0, r4
bl _ZN13LinkStateBase18func_ov00_020a82acEv
mov r0, r4
bl _ZN13LinkStateBase18EquipItem_vfunc_28Ev
ldr r1, _020aeb34 ; =data_ov00_020e60a8
mov r0, r4
mov r2, #1
bl _ZN13LinkStateBase18func_ov00_020a8a4cEii
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020aeaf8:
bl func_ov05_02108188
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020aeb04:
bl func_ov23_0217139c
_020aeb08:
add sp, sp, #0x14
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
.align 2, 0
arm_func_end _ZN13LinkStateRoll12OnStateEnterEv
_020aeb10: .word data_02050f54
_020aeb14: .word 0x0000019a
_020aeb18: .word data_027e0fb8
_020aeb1c: .word data_ov00_020e6078
_020aeb20: .word data_ov00_020eec9c
_020aeb24: .word data_ov00_020e6088
_020aeb28: .word data_027e0e58
_020aeb2c: .word 0x00002aab
_020aeb30: .word data_ov00_020e6098
_020aeb34: .word data_ov00_020e60a8
.global _ZN13LinkStateRoll12OnStateLeaveEi
arm_func_start _ZN13LinkStateRoll12OnStateLeaveEi
_ZN13LinkStateRoll12OnStateLeaveEi: ; 0x020aeb38
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r4, r0
bl _ZN13LinkStateBase12OnStateLeaveEi
ldr r0, [r4, #4]
cmp r0, #9
addls pc, pc, r0, lsl #2
b _020aebe4
_020aeb54: ; jump table
b _020aebe4 ; case 0
b _020aeb7c ; case 1
b _020aebe4 ; case 2
b _020aebc8 ; case 3
b _020aebe4 ; case 4
b _020aebe4 ; case 5
b _020aebb8 ; case 6
b _020aebe4 ; case 7
b _020aebe4 ; case 8
b _020aebdc ; case 9
_020aeb7c:
mov r0, r4
mov r1, #1
bl _ZN13LinkStateBase26Clear_PlayerLinkBase_Unk48Et
ldr r0, _020aec0c ; =data_027e0e58
add r7, r4, #0x2c
ldr r5, [r0]
mov r6, #0
_020aeb98:
mov r0, r5
mov r1, r7
bl func_ov00_0207c444
add r6, r6, #1
cmp r6, #5
add r7, r7, #4
blo _020aeb98
b _020aebe4
_020aebb8:
mov r0, r4
mov r1, #1
bl _ZN13LinkStateBase18func_ov00_020a84bcEi
b _020aebe4
_020aebc8:
mov r0, r4
bl _ZN13LinkStateBase18func_ov00_020a8d40Ev
mov r1, #0
strh r1, [r0, #0x5a]
b _020aebe4
_020aebdc:
mov r0, r4
bl func_ov23_021720f0
_020aebe4:
add r5, r4, #0x2c
add r4, r4, #0x40
cmp r5, r4
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
_020aebf4:
mov r0, r5
bl func_ov00_020b7e6c
add r5, r5, #4
cmp r5, r4
bne _020aebf4
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
arm_func_end _ZN13LinkStateRoll12OnStateLeaveEi
_020aec0c: .word data_027e0e58
.global _ZN13LinkStateRoll8vfunc_20Ei
arm_func_start _ZN13LinkStateRoll8vfunc_20Ei
_ZN13LinkStateRoll8vfunc_20Ei: ; 0x020aec10
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
mov r4, r1
bl _ZN13LinkStateBase12GetGrabActorEv
cmp r0, #0
bne _020aecc8
ldrsh r0, [r5, #0x12]
cmp r0, #7
movge r0, #1
strge r0, [r5, #4]
ldmgeia sp!, {r4, r5, r6, pc}
mov r0, r5
bl _ZN13LinkStateBase18func_ov00_020a8b80Ev
cmp r0, #0
beq _020aecc8
ldr r1, _020aed84 ; =data_027e0fb8
mov r0, r5
ldr r6, [r1]
bl _ZN13LinkStateBase14GetPlayerAngleEv
mov r1, r0
mov r0, r6
bl _ZN13PlayerControl18func_ov00_020b12d0EPs
cmp r0, #0
beq _020aecc8
mov r0, r5
bl _ZN13LinkStateBase18func_ov00_020a8d40Ev
ldrsh r0, [r0, #0x5a]
cmp r0, #0
bne _020aecc8
mov r0, r5
mov r1, #0x3f
bl _ZN13LinkStateBase29HasFlags_PlayerLinkBase_Unk48Et
cmp r0, #0
bne _020aecc8
ldr r0, _020aed88 ; =data_027e0618
ldr r0, [r0]
cmp r0, #2
bne _020aecb8
mov r0, r5
bl _ZN13LinkStateBase19GetCurrentCharacterEv
cmp r0, #1
beq _020aecc8
_020aecb8:
mov r0, #0
str r0, [r5, #4]
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
_020aecc8:
ldr r0, _020aed88 ; =data_027e0618
ldr r0, [r0]
cmp r0, #2
bne _020aed7c
mov r0, r5
bl _ZN13LinkStateBase12GetGrabActorEv
cmp r0, #0
bne _020aed70
mov r0, r5
bl _ZN13LinkStateBase19GetCurrentCharacterEv
cmp r0, #1
mov r0, r5
bne _020aed08
mov r1, r4
bl func_ov23_021712fc
ldmia sp!, {r4, r5, r6, pc}
_020aed08:
bl _ZN13LinkStateBase18func_ov00_020a8b80Ev
cmp r0, #0
beq _020aed70
mov r0, r5
bl _ZN13LinkStateBase18func_ov00_020a8d40Ev
ldr r1, [r0, #0xdc]
ldr r0, _020aed8c ; =0x0000099a
cmp r1, r0
blt _020aed70
ldr r0, _020aed84 ; =data_027e0fb8
ldr r0, [r0]
bl _ZN13PlayerControl18func_ov00_020b034cEv
cmp r0, #0
ble _020aed70
ldr r0, _020aed84 ; =data_027e0fb8
ldr r0, [r0]
bl _ZN13PlayerControl18func_ov00_020b034cEv
mov r2, #0
mov r1, r0
mov r0, r5
mov r3, r2
bl func_ov05_0210f808
mov r0, #2
str r0, [r5, #4]
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
_020aed70:
mov r0, r5
bl func_ov05_02108094
ldmia sp!, {r4, r5, r6, pc}
_020aed7c:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
arm_func_end _ZN13LinkStateRoll8vfunc_20Ei
_020aed84: .word data_027e0fb8
_020aed88: .word data_027e0618
_020aed8c: .word 0x0000099a
.global _ZN13LinkStateRoll8vfunc_24Ei
arm_func_start _ZN13LinkStateRoll8vfunc_24Ei
_ZN13LinkStateRoll8vfunc_24Ei: ; 0x020aed90
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
mov r5, r0
cmp r4, #7
addls pc, pc, r4, lsl #2
b _020aee40
_020aeda8: ; jump table
b _020aee40 ; case 0
b _020aedc8 ; case 1
b _020aee48 ; case 2
b _020aee48 ; case 3
b _020aede4 ; case 4
b _020aedf8 ; case 5
b _020aee40 ; case 6
b _020aee14 ; case 7
_020aedc8:
ldr r0, [r5, #4]
cmp r0, #5
cmpne r0, #6
cmpne r0, #7
bne _020aee48
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
_020aede4:
ldr r0, [r5, #4]
cmp r0, #0
beq _020aee48
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
_020aedf8:
ldr r0, [r5, #4]
cmp r0, #0
cmpne r0, #3
cmpne r0, #8
bne _020aee48
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
_020aee14:
ldr r1, [r5, #4]
cmp r1, #0
bne _020aee48
bl func_ov05_0211139c
cmp r0, #0
bne _020aee48
bl _ZN13PlayerControl18_ZN13PlayerControl18func_ov00_020aeeacEvEv
cmp r0, #0
beq _020aee48
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
_020aee40:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
_020aee48:
mov r0, r5
mov r1, r4
bl _ZN13LinkStateBase8vfunc_24Ei
ldmia sp!, {r3, r4, r5, pc}
arm_func_end _ZN13LinkStateRoll8vfunc_24Ei
.global _ZN13LinkStateRoll18func_ov00_020aee58Est
arm_func_start _ZN13LinkStateRoll18func_ov00_020aee58Est
_ZN13LinkStateRoll18func_ov00_020aee58Est: ; 0x020aee58
ldrh r3, [r0, #0x16]
cmp r3, r2
movne r3, #0
strneh r3, [r0, #0x12]
ldrsh ip, [r0, #0x12]
mov r3, #0xf
add r1, ip, r1
strh r1, [r0, #0x12]
strh r3, [r0, #0x14]
strh r2, [r0, #0x16]
bx lr
arm_func_end _ZN13LinkStateRoll18func_ov00_020aee58Est
.global _ZN13LinkStateRoll18func_ov00_020aee84Ev
arm_func_start _ZN13LinkStateRoll18func_ov00_020aee84Ev
_ZN13LinkStateRoll18func_ov00_020aee84Ev: ; 0x020aee84
ldrsh r1, [r0, #0x14]
cmp r1, #0
subgt r1, r1, #1
strgth r1, [r0, #0x14]
bxgt lr
ldrsh r1, [r0, #0x12]
cmp r1, #0
subgt r1, r1, #1
strgth r1, [r0, #0x12]
bx lr
arm_func_end _ZN13LinkStateRoll18func_ov00_020aee84Ev
.data
.global data_ov00_020e6078
data_ov00_020e6078: ; 0x020e6078
.byte 0x0b, 0x00, 0x00, 0x00
.global data_ov00_020e607c
data_ov00_020e607c: ; 0x020e607c
.byte 0x9a, 0x11, 0x00, 0x00
.global data_ov00_020e6080
data_ov00_020e6080: ; 0x020e6080
.byte 0x00, 0x10, 0x00, 0x00
.global data_ov00_020e6084
data_ov00_020e6084: ; 0x020e6084
.byte 0x00, 0x30, 0x01, 0x00
.global data_ov00_020e6088
data_ov00_020e6088: ; 0x020e6088
.byte 0x23, 0x00, 0x00, 0x00
.global data_ov00_020e608c
data_ov00_020e608c: ; 0x020e608c
.byte 0x00, 0x10, 0x00, 0x00
.global data_ov00_020e6090
data_ov00_020e6090: ; 0x020e6090
.byte 0x00, 0x00, 0x00, 0x00
.global data_ov00_020e6094
data_ov00_020e6094: ; 0x020e6094
.byte 0x00, 0xc0, 0x02, 0x00
.global data_ov00_020e6098
data_ov00_020e6098: ; 0x020e6098
.byte 0x45, 0x00, 0x00, 0x00
.global data_ov00_020e609c
data_ov00_020e609c: ; 0x020e609c
.byte 0x00, 0x10, 0x00, 0x00
.global data_ov00_020e60a0
data_ov00_020e60a0: ; 0x020e60a0
.byte 0x00, 0x00, 0x00, 0x00
.global data_ov00_020e60a4
data_ov00_020e60a4: ; 0x020e60a4
.byte 0x00, 0x10, 0x00, 0x00
.global data_ov00_020e60a8
data_ov00_020e60a8: ; 0x020e60a8
.byte 0x2d, 0x00, 0x00, 0x00
.global data_ov00_020e60ac
data_ov00_020e60ac: ; 0x020e60ac
.byte 0x00, 0x30, 0x00, 0x00
.global data_ov00_020e60b0
data_ov00_020e60b0: ; 0x020e60b0
.byte 0x00, 0x00, 0x00, 0x00
.global data_ov00_020e60b4
data_ov00_020e60b4: ; 0x020e60b4
.byte 0x00, 0x10, 0x01, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global _ZTV13LinkStateRoll
_ZTV13LinkStateRoll: ; 0x020e60c0
.word _ZN13LinkStateRoll8vfunc_00Ev
.word func_ov04_0210ae80
.word func_ov04_0210aea8
.word _ZN13LinkStateRoll5GetIdEv - 1
.word _ZN13LinkStateRoll20CreateDebugHierarchyEv
.word _ZN13LinkStateRoll12OnStateEnterEv - 1
.word _ZN13LinkStateRoll12OnStateLeaveEi - 1
.word func_ov05_02106c94
.word _ZN13LinkStateRoll8vfunc_20Ei - 1
.word _ZN13LinkStateRoll8vfunc_24Ei - 1
.word _ZN13LinkStateBase8vfunc_28Ev
.word func_ov05_0210f704
.word func_ov05_0210f708
.word _ZN13LinkStateBase8vfunc_34EP5Vec3p
.word func_ov05_0210f70c
.word func_ov05_0210f714
.word func_ov05_0210f71c