From 336defc99509c1cf5ccb18143c0891abd10054a4 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sat, 6 Apr 2024 16:11:25 +0200 Subject: [PATCH] Add `LinkStateFollow` --- asm/ov00/Player/LinkStateDamage.inc | 2 +- asm/ov00/Player/LinkStateDamage.s | 4 +- asm/ov00/Player/LinkStateFollow.inc | 31 ++ asm/ov00/Player/LinkStateFollow.s | 388 ++++++++++++++++++++ asm/ov00/ov00_020a8e04.inc | 30 -- asm/ov00/ov00_020a8e04.s | 474 +++---------------------- asm/ov00/ov00_020b1498.inc | 2 +- asm/ov00/ov00_020b1498.s | 44 +-- asm/ov04.inc | 2 +- asm/ov04.s | 4 +- asm/ov05.inc | 6 +- asm/ov05.s | 8 +- asm/ov23.inc | 2 +- asm/ov23.s | 2 +- include/Player/LinkStateFollow.hpp | 7 + src/00_Core/Player/LinkStateFollow.cpp | 16 + tools/lcf.py | 2 + 17 files changed, 528 insertions(+), 496 deletions(-) create mode 100644 asm/ov00/Player/LinkStateFollow.inc create mode 100644 asm/ov00/Player/LinkStateFollow.s create mode 100644 src/00_Core/Player/LinkStateFollow.cpp diff --git a/asm/ov00/Player/LinkStateDamage.inc b/asm/ov00/Player/LinkStateDamage.inc index 6d08fb7e..4b7354b3 100644 --- a/asm/ov00/Player/LinkStateDamage.inc +++ b/asm/ov00/Player/LinkStateDamage.inc @@ -26,6 +26,7 @@ .extern _ZN13LinkStateBase8vfunc_28Ev .extern _ZN13LinkStateBase8vfunc_34EP5Vec3p .extern _ZN13LinkStateItem15GetEquipBombchuEv +.extern _ZN15LinkStateFollow20GetLinkStateCutsceneEv .extern _ZN17LinkStateInteract20SetGrabActorVelocityEP5Vec3p .extern _ZNK11ItemManager15HasPurplePotionEv .extern _ZNK11ItemManager7HasItemEi @@ -57,7 +58,6 @@ .extern func_ov00_0209779c .extern func_ov00_02097ff4 .extern func_ov00_020a5e9c -.extern func_ov00_020a914c .extern func_ov00_020b7e6c .extern func_ov00_020c0e24 .extern func_ov00_020c7764 diff --git a/asm/ov00/Player/LinkStateDamage.s b/asm/ov00/Player/LinkStateDamage.s index 9b3ad819..2706a921 100644 --- a/asm/ov00/Player/LinkStateDamage.s +++ b/asm/ov00/Player/LinkStateDamage.s @@ -569,12 +569,12 @@ _020ac64c: bne _020ac698 ldr r0, _020ac7d8 ; =data_027e0c54 ldrb r5, [r0] - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv strb r5, [r0, #0xa7] ldr r0, _020ac7dc ; =data_ov00_020eec68 bl func_ov00_020d7424 mov r5, r0 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv str r5, [r0, #0x98] ldr r0, _020ac7dc ; =data_ov00_020eec68 mov r1, #5 diff --git a/asm/ov00/Player/LinkStateFollow.inc b/asm/ov00/Player/LinkStateFollow.inc new file mode 100644 index 00000000..e6df7599 --- /dev/null +++ b/asm/ov00/Player/LinkStateFollow.inc @@ -0,0 +1,31 @@ +#pragma once +.extern _ZN10PlayerBase13GetEquipSwordEv +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12OnStateLeaveEi +.extern _ZN13LinkStateBase18func_ov00_020a8d40Ev +.extern _ZN13LinkStateBase8vfunc_24Ei +.extern _ZN13PlayerControl13StopFollowingEv +.extern _ZN13PlayerControl18func_ov00_020af01cEPc +.extern data_027e0e60 +.extern data_027e0fb8 +.extern func_01ff9bf8 +.extern func_01ff9cec +.extern func_01fffcd8 +.extern func_0202b308 +.extern func_0202d95c +.extern func_ov00_02083a1c +.extern func_ov00_02083c7c +.extern func_ov00_020840c4 +.extern func_ov04_0210ad94 +.extern func_ov04_0210adb0 +.extern func_ov04_0210adf8 +.extern func_ov05_0210b57c +.extern func_ov05_0210b97c +.extern func_ov05_0210c20c +.extern func_ov05_0210c990 +.extern func_ov05_0210f708 +.extern func_ov05_0210f70c +.extern func_ov05_0210f714 +.extern func_ov05_0210f71c +.extern func_ov14_0214bd08 diff --git a/asm/ov00/Player/LinkStateFollow.s b/asm/ov00/Player/LinkStateFollow.s new file mode 100644 index 00000000..9fbf9a80 --- /dev/null +++ b/asm/ov00/Player/LinkStateFollow.s @@ -0,0 +1,388 @@ + .include "ov00/Player/LinkStateFollow.inc" + .include "macros/function.inc" + + .text + + .global _ZN15LinkStateFollow8vfunc_00Ev + thumb_func_start _ZN15LinkStateFollow8vfunc_00Ev +_ZN15LinkStateFollow8vfunc_00Ev: ; 0x020a8f74 + bx lr + .align 2, 0 + thumb_func_end _ZN15LinkStateFollow8vfunc_00Ev + + .global _ZN15LinkStateFollow5GetIdEv + arm_func_start _ZN15LinkStateFollow5GetIdEv +_ZN15LinkStateFollow5GetIdEv: ; 0x020a8f78 + mov r0, #3 + bx lr + arm_func_end _ZN15LinkStateFollow5GetIdEv + + .global _ZN15LinkStateFollow16MoveTowardTargetEv + arm_func_start _ZN15LinkStateFollow16MoveTowardTargetEv +_ZN15LinkStateFollow16MoveTowardTargetEv: ; 0x020a8f80 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + bl _ZN13LinkStateBase18func_ov00_020a8d40Ev + ldr r0, [r0, #0xc0] + cmp r0, #0x1e + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, pc} + mov r0, r5 + bl _ZN13LinkStateBase18func_ov00_020a8d40Ev + ldr r2, _020a9020 ; =data_027e0e60 + add r1, r0, #0xc4 + ldr r0, [r2] + bl func_ov00_020840c4 + movs r4, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, pc} + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + add r2, sp, #0 + add r0, r4, #0x18 + bl func_01ff9bf8 + mov r1, #0 + add r0, sp, #0 + str r1, [sp, #4] + bl func_01ff9cec + ldr r1, _020a9024 ; =0x00000155 + cmp r0, r1 + addlt sp, sp, #0xc + ldmltia sp!, {r4, r5, pc} + add r0, sp, #0 + bl func_0202d95c + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerVelEv + add r1, sp, #0 + mov r2, #0x2000 + bl func_0202b308 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 + arm_func_end _ZN15LinkStateFollow16MoveTowardTargetEv +_020a9020: .word data_027e0e60 +_020a9024: .word 0x00000155 + + .global _ZN15LinkStateFollow12OnStateLeaveEi + arm_func_start _ZN15LinkStateFollow12OnStateLeaveEi +_ZN15LinkStateFollow12OnStateLeaveEi: ; 0x020a9028 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl _ZN13LinkStateBase12OnStateLeaveEi + ldr r0, _020a90a8 ; =data_027e0fb8 + ldr r0, [r0] + ldrb r1, [r0, #0x80] + cmp r1, #0 + beq _020a904c + bl _ZN13PlayerControl13StopFollowingEv +_020a904c: + ldr r0, [r5, #4] + cmp r0, #6 + cmpne r0, #7 + ldmneia sp!, {r3, r4, r5, pc} + ldr r1, _020a90ac ; =data_027e0e60 + add r0, sp, #0 + ldr r4, [r1] + add r2, r5, #0x24 + mov r1, r4 + bl func_ov00_02083a1c + add r1, sp, #0 + mov r0, r4 + bl func_ov00_020840c4 + movs r4, r0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r1, [r0] + ldr r1, [r1, #0x1c] + blx r1 + cmp r0, #0x47 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r4 + bl func_ov14_0214bd08 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 + arm_func_end _ZN15LinkStateFollow12OnStateLeaveEi +_020a90a8: .word data_027e0fb8 +_020a90ac: .word data_027e0e60 + + .global _ZN15LinkStateFollow8vfunc_24Ei + arm_func_start _ZN15LinkStateFollow8vfunc_24Ei +_ZN15LinkStateFollow8vfunc_24Ei: ; 0x020a90b0 + stmdb sp!, {r3, lr} + cmp r1, #5 + addls pc, pc, r1, lsl #2 + b _020a9104 +_020a90c0: ; jump table + b _020a9104 ; case 0 + b _020a910c ; case 1 + b _020a910c ; case 2 + b _020a910c ; case 3 + b _020a90d8 ; case 4 + b _020a90f0 ; case 5 +_020a90d8: + ldr r2, [r0, #4] + cmp r2, #1 + cmpne r2, #6 + beq _020a910c + mov r0, #0 + ldmia sp!, {r3, pc} +_020a90f0: + ldr r2, [r0, #4] + cmp r2, #5 + bne _020a910c + bl _ZN13LinkStateBase8vfunc_24Ei + ldmia sp!, {r3, pc} +_020a9104: + mov r0, #0 + ldmia sp!, {r3, pc} +_020a910c: + ldr r2, [r0, #4] + cmp r2, #1 + cmpne r2, #6 + cmpne r2, #0xa + bne _020a9128 + bl _ZN13LinkStateBase8vfunc_24Ei + ldmia sp!, {r3, pc} +_020a9128: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end _ZN15LinkStateFollow8vfunc_24Ei + + .global _ZN15LinkStateFollow8vfunc_28Ev + arm_func_start _ZN15LinkStateFollow8vfunc_28Ev +_ZN15LinkStateFollow8vfunc_28Ev: ; 0x020a9130 + stmdb sp!, {r3, lr} + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv + ldr r0, [r0, #0x38] + cmp r0, #0 + movlt r0, #1 + movge r0, #0 + ldmia sp!, {r3, pc} + arm_func_end _ZN15LinkStateFollow8vfunc_28Ev + + .global _ZN15LinkStateFollow20GetLinkStateCutsceneEv + arm_func_start _ZN15LinkStateFollow20GetLinkStateCutsceneEv +_ZN15LinkStateFollow20GetLinkStateCutsceneEv: ; 0x020a914c + ldr ip, _020a9158 ; =func_01fffcd8 + mov r0, #6 + bx ip + .align 2, 0 + arm_func_end _ZN15LinkStateFollow20GetLinkStateCutsceneEv +_020a9158: .word func_01fffcd8 + + .global _ZN15LinkStateFollow8vfunc_34EP5Vec3p + arm_func_start _ZN15LinkStateFollow8vfunc_34EP5Vec3p +_ZN15LinkStateFollow8vfunc_34EP5Vec3p: ; 0x020a915c + ldr r0, [r0, #4] + cmp r0, #2 + movne r0, #0 + bxne lr + ldr r2, [r1, #4] + mov r0, #1 + add r2, r2, #0x1200 + str r2, [r1, #4] + bx lr + arm_func_end _ZN15LinkStateFollow8vfunc_34EP5Vec3p + + .global _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p + arm_func_start _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p +_ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p: ; 0x020a9180 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _020a9208 ; =data_027e0fb8 + mov r4, r1 + ldr r3, [r2] + ldr r5, [r3, #0xa0] + cmp r5, #0 + bne _020a91f0 + mov r2, #0 + add r1, sp, #0 + mov r0, r3 + strb r2, [sp] + strb r2, [sp, #1] + bl _ZN13PlayerControl18func_ov00_020af01cEPc + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, _020a920c ; =data_027e0e60 + ldrb r2, [sp] + ldrb r1, [sp, #1] + ldr r0, [r0] + sub r3, sp, #4 + strb r2, [r3] + strb r1, [r3, #1] + ldr r2, [r3] + mov r1, r4 + bl func_ov00_02083c7c + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} +_020a91f0: + mov r2, r5 + bl _ZN15LinkStateFollow18func_ov00_020a9210EP5Vec3pP5Actor + cmp r0, #0 + ldrnesb r0, [r5, #0x12] + moveq r0, #0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 + arm_func_end _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p +_020a9208: .word data_027e0fb8 +_020a920c: .word data_027e0e60 + + .global _ZN15LinkStateFollow18func_ov00_020a9210EP5Vec3pP5Actor + arm_func_start _ZN15LinkStateFollow18func_ov00_020a9210EP5Vec3pP5Actor +_ZN15LinkStateFollow18func_ov00_020a9210EP5Vec3pP5Actor: ; 0x020a9210 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r2 + ldrsb r0, [r5, #0x12] + mov r4, r1 + cmp r0, #8 + beq _020a926c + cmp r0, #9 + bne _020a9280 + mov r0, r5 + ldr r2, [r0] + add r1, sp, #0 + ldr r2, [r2, #0x8c] + blx r2 + ldr r1, [sp] + mov r0, #1 + str r1, [r4] + ldr r1, [sp, #4] + str r1, [r4, #4] + ldr r1, [sp, #8] + add sp, sp, #0xc + str r1, [r4, #8] + ldmia sp!, {r4, r5, pc} +_020a926c: + bl _ZN10PlayerBase13GetEquipSwordEv + ldr r2, [r0] + mov r1, #1 + ldr r2, [r2, #0x14] + blx r2 +_020a9280: + ldr r1, [r5, #0x18] + mov r0, #1 + str r1, [r4] + ldr r1, [r5, #0x1c] + str r1, [r4, #4] + ldr r1, [r5, #0x20] + str r1, [r4, #8] + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + arm_func_end _ZN15LinkStateFollow18func_ov00_020a9210EP5Vec3pP5Actor + + .data + .global data_ov00_020e575c +data_ov00_020e575c: ; 0x020e575c + .ascii "brg" + .byte 0x00 + .global data_ov00_020e5760 +data_ov00_020e5760: ; 0x020e5760 + .ascii "fnl" + .byte 0x00 + .global data_ov00_020e5764 +data_ov00_020e5764: ; 0x020e5764 + .ascii "pdl" + .byte 0x00 + .global data_ov00_020e5768 +data_ov00_020e5768: ; 0x020e5768 + .ascii "dco" + .byte 0x00 + .global data_ov00_020e576c +data_ov00_020e576c: ; 0x020e576c + .ascii "can" + .byte 0x00 + .global data_ov00_020e5770 +data_ov00_020e5770: ; 0x020e5770 + .ascii "hul" + .byte 0x00 + .global data_ov00_020e5774 +data_ov00_020e5774: ; 0x020e5774 + .ascii "bow" + .byte 0x00 + .global data_ov00_020e5778 +data_ov00_020e5778: ; 0x020e5778 + .ascii "anc" + .byte 0x00 + .global data_ov00_020e577c +data_ov00_020e577c: ; 0x020e577c + .word data_ov00_020e5778 + .global data_ov00_020e5780 +data_ov00_020e5780: ; 0x020e5780 + .word data_ov00_020e5774 + .global data_ov00_020e5784 +data_ov00_020e5784: ; 0x020e5784 + .word data_ov00_020e5770 + .global data_ov00_020e5788 +data_ov00_020e5788: ; 0x020e5788 + .word data_ov00_020e576c + .global data_ov00_020e578c +data_ov00_020e578c: ; 0x020e578c + .word data_ov00_020e5768 + .global data_ov00_020e5790 +data_ov00_020e5790: ; 0x020e5790 + .word data_ov00_020e5764 + .global data_ov00_020e5794 +data_ov00_020e5794: ; 0x020e5794 + .word data_ov00_020e5760 + .global data_ov00_020e5798 +data_ov00_020e5798: ; 0x020e5798 + .word data_ov00_020e575c + .global data_ov00_020e579c +data_ov00_020e579c: ; 0x020e579c + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e57a0 +data_ov00_020e57a0: ; 0x020e57a0 + .byte 0x00, 0x00, 0x00, 0x00 + .global _ZTV15LinkStateFollow +_ZTV15LinkStateFollow: ; 0x020e57a4 + .word _ZN15LinkStateFollow8vfunc_00Ev + .global data_ov00_020e57a8 +data_ov00_020e57a8: ; 0x020e57a8 + .word func_ov04_0210ad94 ; data_ov07_0210ad94 + .global data_ov00_020e57ac +data_ov00_020e57ac: ; 0x020e57ac + .word func_ov04_0210adb0 ; data_ov07_0210adb0 + .global data_ov00_020e57b0 +data_ov00_020e57b0: ; 0x020e57b0 + .word _ZN15LinkStateFollow5GetIdEv - 1 + .global data_ov00_020e57b4 +data_ov00_020e57b4: ; 0x020e57b4 + .word func_ov04_0210adf8 ; data_ov07_0210adf8 + .global data_ov00_020e57b8 +data_ov00_020e57b8: ; 0x020e57b8 + .word func_ov05_0210b57c ; data_ov07_0210b57c + .global data_ov00_020e57bc +data_ov00_020e57bc: ; 0x020e57bc + .word _ZN15LinkStateFollow12OnStateLeaveEi - 1 + .global data_ov00_020e57c0 +data_ov00_020e57c0: ; 0x020e57c0 + .word func_ov05_0210b97c ; data_ov07_0210b97c + .global data_ov00_020e57c4 +data_ov00_020e57c4: ; 0x020e57c4 + .word func_ov05_0210c20c ; data_ov07_0210c20c + .global data_ov00_020e57c8 +data_ov00_020e57c8: ; 0x020e57c8 + .word _ZN15LinkStateFollow8vfunc_24Ei - 1 + .global data_ov00_020e57cc +data_ov00_020e57cc: ; 0x020e57cc + .word _ZN15LinkStateFollow8vfunc_28Ev - 1 + .global data_ov00_020e57d0 +data_ov00_020e57d0: ; 0x020e57d0 + .word func_ov05_0210c990 ; data_ov07_0210c990 + .global data_ov00_020e57d4 +data_ov00_020e57d4: ; 0x020e57d4 + .word func_ov05_0210f708 + .global data_ov00_020e57d8 +data_ov00_020e57d8: ; 0x020e57d8 + .word _ZN15LinkStateFollow8vfunc_34EP5Vec3p - 1 + .global data_ov00_020e57dc +data_ov00_020e57dc: ; 0x020e57dc + .word func_ov05_0210f70c + .global data_ov00_020e57e0 +data_ov00_020e57e0: ; 0x020e57e0 + .word func_ov05_0210f714 + .global data_ov00_020e57e4 +data_ov00_020e57e4: ; 0x020e57e4 + .word func_ov05_0210f71c diff --git a/asm/ov00/ov00_020a8e04.inc b/asm/ov00/ov00_020a8e04.inc index 044de702..8709a9b3 100644 --- a/asm/ov00/ov00_020a8e04.inc +++ b/asm/ov00/ov00_020a8e04.inc @@ -1,12 +1,4 @@ #pragma once -.extern _ZN10PlayerBase13GetEquipSwordEv -.extern _ZN13LinkStateBase12GetPlayerPosEv -.extern _ZN13LinkStateBase12GetPlayerVelEv -.extern _ZN13LinkStateBase12OnStateLeaveEi -.extern _ZN13LinkStateBase18func_ov00_020a8d40Ev -.extern _ZN13LinkStateBase8vfunc_24Ei -.extern _ZN13PlayerControl13StopFollowingEv -.extern _ZN13PlayerControl18func_ov00_020af01cEPc .extern _ZN9SysObjectdlEPv .extern data_02050f54 .extern data_027e016c @@ -18,8 +10,6 @@ .extern data_027e0468 .extern data_027e0ce0 .extern data_027e0d78 -.extern data_027e0e60 -.extern data_027e0fb8 .extern data_ov00_020e9360 .extern func_01ff80d4 .extern func_01ff81f8 @@ -28,10 +18,7 @@ .extern func_01ff83a0 .extern func_01ff8690 .extern func_01ff8e84 -.extern func_01ff9bf8 -.extern func_01ff9cec .extern func_01ffa9fc -.extern func_01fffcd8 .extern func_020079d8 .extern func_0201838c .extern func_020183b4 @@ -51,14 +38,9 @@ .extern func_0201b2f8 .extern func_0201b35c .extern func_0201e388 -.extern func_0202b308 -.extern func_0202d95c .extern func_0202e9f4 .extern func_0202ea18 .extern func_ov00_02079e68 -.extern func_ov00_02083a1c -.extern func_ov00_02083c7c -.extern func_ov00_020840c4 .extern func_ov00_020b3ea8 .extern func_ov00_020b3eac .extern func_ov00_020c0c08 @@ -66,15 +48,3 @@ .extern func_ov00_020c0d70 .extern func_ov00_020c0e94 .extern func_ov00_020c0ea0 -.extern func_ov04_0210ad94 -.extern func_ov04_0210adb0 -.extern func_ov04_0210adf8 -.extern func_ov05_0210b57c -.extern func_ov05_0210b97c -.extern func_ov05_0210c20c -.extern func_ov05_0210c990 -.extern func_ov05_0210f708 -.extern func_ov05_0210f70c -.extern func_ov05_0210f714 -.extern func_ov05_0210f71c -.extern func_ov14_0214bd08 diff --git a/asm/ov00/ov00_020a8e04.s b/asm/ov00/ov00_020a8e04.s index b5058c15..ab9c8552 100644 --- a/asm/ov00/ov00_020a8e04.s +++ b/asm/ov00/ov00_020a8e04.s @@ -3,275 +3,6 @@ .text - .global func_ov00_020a8f74 - thumb_func_start func_ov00_020a8f74 -func_ov00_020a8f74: ; 0x020a8f74 - bx lr - .align 2, 0 - thumb_func_end func_ov00_020a8f74 - - .global func_ov00_020a8f78 - arm_func_start func_ov00_020a8f78 -func_ov00_020a8f78: ; 0x020a8f78 - mov r0, #3 - bx lr - arm_func_end func_ov00_020a8f78 - - .global func_ov00_020a8f80 - arm_func_start func_ov00_020a8f80 -func_ov00_020a8f80: ; 0x020a8f80 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - mov r5, r0 - bl _ZN13LinkStateBase18func_ov00_020a8d40Ev - ldr r0, [r0, #0xc0] - cmp r0, #0x1e - addne sp, sp, #0xc - ldmneia sp!, {r4, r5, pc} - mov r0, r5 - bl _ZN13LinkStateBase18func_ov00_020a8d40Ev - ldr r2, _020a9020 ; =data_027e0e60 - add r1, r0, #0xc4 - ldr r0, [r2] - bl func_ov00_020840c4 - movs r4, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, pc} - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - add r2, sp, #0 - add r0, r4, #0x18 - bl func_01ff9bf8 - mov r1, #0 - add r0, sp, #0 - str r1, [sp, #4] - bl func_01ff9cec - ldr r1, _020a9024 ; =0x00000155 - cmp r0, r1 - addlt sp, sp, #0xc - ldmltia sp!, {r4, r5, pc} - add r0, sp, #0 - bl func_0202d95c - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerVelEv - add r1, sp, #0 - mov r2, #0x2000 - bl func_0202b308 - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 - arm_func_end func_ov00_020a8f80 -_020a9020: .word data_027e0e60 -_020a9024: .word 0x00000155 - - .global func_ov00_020a9028 - arm_func_start func_ov00_020a9028 -func_ov00_020a9028: ; 0x020a9028 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl _ZN13LinkStateBase12OnStateLeaveEi - ldr r0, _020a90a8 ; =data_027e0fb8 - ldr r0, [r0] - ldrb r1, [r0, #0x80] - cmp r1, #0 - beq _020a904c - bl _ZN13PlayerControl13StopFollowingEv -_020a904c: - ldr r0, [r5, #4] - cmp r0, #6 - cmpne r0, #7 - ldmneia sp!, {r3, r4, r5, pc} - ldr r1, _020a90ac ; =data_027e0e60 - add r0, sp, #0 - ldr r4, [r1] - add r2, r5, #0x24 - mov r1, r4 - bl func_ov00_02083a1c - add r1, sp, #0 - mov r0, r4 - bl func_ov00_020840c4 - movs r4, r0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r1, [r0] - ldr r1, [r1, #0x1c] - blx r1 - cmp r0, #0x47 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r4 - bl func_ov14_0214bd08 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 - arm_func_end func_ov00_020a9028 -_020a90a8: .word data_027e0fb8 -_020a90ac: .word data_027e0e60 - - .global func_ov00_020a90b0 - arm_func_start func_ov00_020a90b0 -func_ov00_020a90b0: ; 0x020a90b0 - stmdb sp!, {r3, lr} - cmp r1, #5 - addls pc, pc, r1, lsl #2 - b _020a9104 -_020a90c0: ; jump table - b _020a9104 ; case 0 - b _020a910c ; case 1 - b _020a910c ; case 2 - b _020a910c ; case 3 - b _020a90d8 ; case 4 - b _020a90f0 ; case 5 -_020a90d8: - ldr r2, [r0, #4] - cmp r2, #1 - cmpne r2, #6 - beq _020a910c - mov r0, #0 - ldmia sp!, {r3, pc} -_020a90f0: - ldr r2, [r0, #4] - cmp r2, #5 - bne _020a910c - bl _ZN13LinkStateBase8vfunc_24Ei - ldmia sp!, {r3, pc} -_020a9104: - mov r0, #0 - ldmia sp!, {r3, pc} -_020a910c: - ldr r2, [r0, #4] - cmp r2, #1 - cmpne r2, #6 - cmpne r2, #0xa - bne _020a9128 - bl _ZN13LinkStateBase8vfunc_24Ei - ldmia sp!, {r3, pc} -_020a9128: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end func_ov00_020a90b0 - - .global func_ov00_020a9130 - arm_func_start func_ov00_020a9130 -func_ov00_020a9130: ; 0x020a9130 - stmdb sp!, {r3, lr} - bl func_ov00_020a914c - ldr r0, [r0, #0x38] - cmp r0, #0 - movlt r0, #1 - movge r0, #0 - ldmia sp!, {r3, pc} - arm_func_end func_ov00_020a9130 - - .global func_ov00_020a914c - arm_func_start func_ov00_020a914c -func_ov00_020a914c: ; 0x020a914c - ldr ip, _020a9158 ; =func_01fffcd8 - mov r0, #6 - bx ip - .align 2, 0 - arm_func_end func_ov00_020a914c -_020a9158: .word func_01fffcd8 - - .global func_ov00_020a915c - arm_func_start func_ov00_020a915c -func_ov00_020a915c: ; 0x020a915c - ldr r0, [r0, #4] - cmp r0, #2 - movne r0, #0 - bxne lr - ldr r2, [r1, #4] - mov r0, #1 - add r2, r2, #0x1200 - str r2, [r1, #4] - bx lr - arm_func_end func_ov00_020a915c - - .global func_ov00_020a9180 - arm_func_start func_ov00_020a9180 -func_ov00_020a9180: ; 0x020a9180 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _020a9208 ; =data_027e0fb8 - mov r4, r1 - ldr r3, [r2] - ldr r5, [r3, #0xa0] - cmp r5, #0 - bne _020a91f0 - mov r2, #0 - add r1, sp, #0 - mov r0, r3 - strb r2, [sp] - strb r2, [sp, #1] - bl _ZN13PlayerControl18func_ov00_020af01cEPc - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, _020a920c ; =data_027e0e60 - ldrb r2, [sp] - ldrb r1, [sp, #1] - ldr r0, [r0] - sub r3, sp, #4 - strb r2, [r3] - strb r1, [r3, #1] - ldr r2, [r3] - mov r1, r4 - bl func_ov00_02083c7c - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} -_020a91f0: - mov r2, r5 - bl func_ov00_020a9210 - cmp r0, #0 - ldrnesb r0, [r5, #0x12] - moveq r0, #0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 - arm_func_end func_ov00_020a9180 -_020a9208: .word data_027e0fb8 -_020a920c: .word data_027e0e60 - - .global func_ov00_020a9210 - arm_func_start func_ov00_020a9210 -func_ov00_020a9210: ; 0x020a9210 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - mov r5, r2 - ldrsb r0, [r5, #0x12] - mov r4, r1 - cmp r0, #8 - beq _020a926c - cmp r0, #9 - bne _020a9280 - mov r0, r5 - ldr r2, [r0] - add r1, sp, #0 - ldr r2, [r2, #0x8c] - blx r2 - ldr r1, [sp] - mov r0, #1 - str r1, [r4] - ldr r1, [sp, #4] - str r1, [r4, #4] - ldr r1, [sp, #8] - add sp, sp, #0xc - str r1, [r4, #8] - ldmia sp!, {r4, r5, pc} -_020a926c: - bl _ZN10PlayerBase13GetEquipSwordEv - ldr r2, [r0] - mov r1, #1 - ldr r2, [r2, #0x14] - blx r2 -_020a9280: - ldr r1, [r5, #0x18] - mov r0, #1 - str r1, [r4] - ldr r1, [r5, #0x1c] - str r1, [r4, #4] - ldr r1, [r5, #0x20] - str r1, [r4, #8] - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - arm_func_end func_ov00_020a9210 - .global func_ov00_020a92a4 arm_func_start func_ov00_020a92a4 func_ov00_020a92a4: ; 0x020a92a4 @@ -958,7 +689,7 @@ func_ov00_020a9998: ; 0x020a9998 ldmia sp!, {r3, pc} .align 2, 0 arm_func_end func_ov00_020a9998 -_020a99bc: .word func_ov00_020a99c0 - 1 +_020a99bc: .word func_ov00_020a99c0 .global func_ov00_020a99c0 arm_func_start func_ov00_020a99c0 @@ -1832,119 +1563,6 @@ _020aa280: _020aa328: .word data_ov00_020e9360 .data - .global data_ov00_020e575c -data_ov00_020e575c: ; 0x020e575c - .ascii "brg" - .byte 0x00 - .global data_ov00_020e5760 -data_ov00_020e5760: ; 0x020e5760 - .ascii "fnl" - .byte 0x00 - .global data_ov00_020e5764 -data_ov00_020e5764: ; 0x020e5764 - .ascii "pdl" - .byte 0x00 - .global data_ov00_020e5768 -data_ov00_020e5768: ; 0x020e5768 - .ascii "dco" - .byte 0x00 - .global data_ov00_020e576c -data_ov00_020e576c: ; 0x020e576c - .ascii "can" - .byte 0x00 - .global data_ov00_020e5770 -data_ov00_020e5770: ; 0x020e5770 - .ascii "hul" - .byte 0x00 - .global data_ov00_020e5774 -data_ov00_020e5774: ; 0x020e5774 - .ascii "bow" - .byte 0x00 - .global data_ov00_020e5778 -data_ov00_020e5778: ; 0x020e5778 - .ascii "anc" - .byte 0x00 - .global data_ov00_020e577c -data_ov00_020e577c: ; 0x020e577c - .word data_ov00_020e5778 - .global data_ov00_020e5780 -data_ov00_020e5780: ; 0x020e5780 - .word data_ov00_020e5774 - .global data_ov00_020e5784 -data_ov00_020e5784: ; 0x020e5784 - .word data_ov00_020e5770 - .global data_ov00_020e5788 -data_ov00_020e5788: ; 0x020e5788 - .word data_ov00_020e576c - .global data_ov00_020e578c -data_ov00_020e578c: ; 0x020e578c - .word data_ov00_020e5768 - .global data_ov00_020e5790 -data_ov00_020e5790: ; 0x020e5790 - .word data_ov00_020e5764 - .global data_ov00_020e5794 -data_ov00_020e5794: ; 0x020e5794 - .word data_ov00_020e5760 - .global data_ov00_020e5798 -data_ov00_020e5798: ; 0x020e5798 - .word data_ov00_020e575c - .global data_ov00_020e579c -data_ov00_020e579c: ; 0x020e579c - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e57a0 -data_ov00_020e57a0: ; 0x020e57a0 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e57a4 -data_ov00_020e57a4: ; 0x020e57a4 - .word func_ov00_020a8f74 - .global data_ov00_020e57a8 -data_ov00_020e57a8: ; 0x020e57a8 - .word func_ov04_0210ad94 ; data_ov07_0210ad94 - .global data_ov00_020e57ac -data_ov00_020e57ac: ; 0x020e57ac - .word func_ov04_0210adb0 ; data_ov07_0210adb0 - .global data_ov00_020e57b0 -data_ov00_020e57b0: ; 0x020e57b0 - .word func_ov00_020a8f78 - 1 - .global data_ov00_020e57b4 -data_ov00_020e57b4: ; 0x020e57b4 - .word func_ov04_0210adf8 ; data_ov07_0210adf8 - .global data_ov00_020e57b8 -data_ov00_020e57b8: ; 0x020e57b8 - .word func_ov05_0210b57c ; data_ov07_0210b57c - .global data_ov00_020e57bc -data_ov00_020e57bc: ; 0x020e57bc - .word func_ov00_020a9028 - 1 - .global data_ov00_020e57c0 -data_ov00_020e57c0: ; 0x020e57c0 - .word func_ov05_0210b97c ; data_ov07_0210b97c - .global data_ov00_020e57c4 -data_ov00_020e57c4: ; 0x020e57c4 - .word func_ov05_0210c20c ; data_ov07_0210c20c - .global data_ov00_020e57c8 -data_ov00_020e57c8: ; 0x020e57c8 - .word func_ov00_020a90b0 - 1 - .global data_ov00_020e57cc -data_ov00_020e57cc: ; 0x020e57cc - .word func_ov00_020a9130 - 1 - .global data_ov00_020e57d0 -data_ov00_020e57d0: ; 0x020e57d0 - .word func_ov05_0210c990 ; data_ov07_0210c990 - .global data_ov00_020e57d4 -data_ov00_020e57d4: ; 0x020e57d4 - .word func_ov05_0210f708 - .global data_ov00_020e57d8 -data_ov00_020e57d8: ; 0x020e57d8 - .word func_ov00_020a915c - 1 - .global data_ov00_020e57dc -data_ov00_020e57dc: ; 0x020e57dc - .word func_ov05_0210f70c - .global data_ov00_020e57e0 -data_ov00_020e57e0: ; 0x020e57e0 - .word func_ov05_0210f714 - .global data_ov00_020e57e4 -data_ov00_020e57e4: ; 0x020e57e4 - .word func_ov05_0210f71c .global data_ov00_020e57e8 data_ov00_020e57e8: ; 0x020e57e8 .byte 0x00, 0x00, 0x00, 0x00 @@ -1953,16 +1571,16 @@ data_ov00_020e57ec: ; 0x020e57ec .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e57f0 data_ov00_020e57f0: ; 0x020e57f0 - .word func_ov00_020a9544 - 1 + .word func_ov00_020a9544 .global data_ov00_020e57f4 data_ov00_020e57f4: ; 0x020e57f4 - .word func_ov00_020a9530 - 1 + .word func_ov00_020a9530 .global data_ov00_020e57f8 data_ov00_020e57f8: ; 0x020e57f8 - .word func_ov00_020a92fc - 1 + .word func_ov00_020a92fc .global data_ov00_020e57fc data_ov00_020e57fc: ; 0x020e57fc - .word func_ov00_020a9334 - 1 + .word func_ov00_020a9334 .global data_ov00_020e5800 data_ov00_020e5800: ; 0x020e5800 .byte 0x00, 0x00, 0x00, 0x00 @@ -1971,13 +1589,13 @@ data_ov00_020e5804: ; 0x020e5804 .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e5808 data_ov00_020e5808: ; 0x020e5808 - .word func_ov00_020a9548 - 1 + .word func_ov00_020a9548 .global data_ov00_020e580c data_ov00_020e580c: ; 0x020e580c - .word func_ov00_020a9558 - 1 + .word func_ov00_020a9558 .global data_ov00_020e5810 data_ov00_020e5810: ; 0x020e5810 - .word func_ov00_020a954c - 1 + .word func_ov00_020a954c .global data_ov00_020e5814 data_ov00_020e5814: ; 0x020e5814 .byte 0x00, 0x00, 0x00, 0x00 @@ -1989,52 +1607,52 @@ data_ov00_020e581c: ; 0x020e581c .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e5820 data_ov00_020e5820: ; 0x020e5820 - .word func_ov00_020a95a4 + .word func_ov00_020a95a4 + 1 .global data_ov00_020e5824 data_ov00_020e5824: ; 0x020e5824 - .word func_ov00_020a95c4 + .word func_ov00_020a95c4 + 1 .global data_ov00_020e5828 data_ov00_020e5828: ; 0x020e5828 - .word func_ov00_020a960c - 1 + .word func_ov00_020a960c .global data_ov00_020e582c data_ov00_020e582c: ; 0x020e582c - .word func_ov00_020a9614 - 1 + .word func_ov00_020a9614 .global data_ov00_020e5830 data_ov00_020e5830: ; 0x020e5830 - .word func_ov00_020a9650 - 1 + .word func_ov00_020a9650 .global data_ov00_020e5834 data_ov00_020e5834: ; 0x020e5834 - .word func_ov00_020a96d4 - 1 + .word func_ov00_020a96d4 .global data_ov00_020e5838 data_ov00_020e5838: ; 0x020e5838 - .word func_ov00_020a9740 - 1 + .word func_ov00_020a9740 .global data_ov00_020e583c data_ov00_020e583c: ; 0x020e583c - .word func_ov00_020a9764 - 1 + .word func_ov00_020a9764 .global data_ov00_020e5840 data_ov00_020e5840: ; 0x020e5840 - .word func_ov00_020a97d0 - 1 + .word func_ov00_020a97d0 .global data_ov00_020e5844 data_ov00_020e5844: ; 0x020e5844 - .word func_ov00_020a97e0 - 1 + .word func_ov00_020a97e0 .global data_ov00_020e5848 data_ov00_020e5848: ; 0x020e5848 - .word func_ov00_020a97f8 - 1 + .word func_ov00_020a97f8 .global data_ov00_020e584c data_ov00_020e584c: ; 0x020e584c - .word func_ov00_020a9864 - 1 + .word func_ov00_020a9864 .global data_ov00_020e5850 data_ov00_020e5850: ; 0x020e5850 - .word func_ov00_020a98bc - 1 + .word func_ov00_020a98bc .global data_ov00_020e5854 data_ov00_020e5854: ; 0x020e5854 - .word func_ov00_020a9890 - 1 + .word func_ov00_020a9890 .global data_ov00_020e5858 data_ov00_020e5858: ; 0x020e5858 - .word func_ov00_020a9968 - 1 + .word func_ov00_020a9968 .global data_ov00_020e585c data_ov00_020e585c: ; 0x020e585c - .word func_ov00_020a9994 - 1 + .word func_ov00_020a9994 .global data_ov00_020e5860 data_ov00_020e5860: ; 0x020e5860 .byte 0x00, 0x00, 0x00, 0x00 @@ -2043,10 +1661,10 @@ data_ov00_020e5864: ; 0x020e5864 .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e5868 data_ov00_020e5868: ; 0x020e5868 - .word func_ov00_020a9a20 + .word func_ov00_020a9a20 + 1 .global data_ov00_020e586c data_ov00_020e586c: ; 0x020e586c - .word func_ov00_020a9a40 + .word func_ov00_020a9a40 + 1 .global data_ov00_020e5870 data_ov00_020e5870: ; 0x020e5870 .byte 0x00, 0x00, 0x00, 0x00 @@ -2055,52 +1673,52 @@ data_ov00_020e5874: ; 0x020e5874 .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e5878 data_ov00_020e5878: ; 0x020e5878 - .word func_ov00_020a9b8c - 1 + .word func_ov00_020a9b8c .global data_ov00_020e587c data_ov00_020e587c: ; 0x020e587c - .word func_ov00_020a9bb8 - 1 + .word func_ov00_020a9bb8 .global data_ov00_020e5880 data_ov00_020e5880: ; 0x020e5880 - .word func_ov00_020a960c - 1 + .word func_ov00_020a960c .global data_ov00_020e5884 data_ov00_020e5884: ; 0x020e5884 - .word func_ov00_020a9614 - 1 + .word func_ov00_020a9614 .global data_ov00_020e5888 data_ov00_020e5888: ; 0x020e5888 - .word func_ov00_020a9650 - 1 + .word func_ov00_020a9650 .global data_ov00_020e588c data_ov00_020e588c: ; 0x020e588c - .word func_ov00_020a96d4 - 1 + .word func_ov00_020a96d4 .global data_ov00_020e5890 data_ov00_020e5890: ; 0x020e5890 - .word func_ov00_020a9740 - 1 + .word func_ov00_020a9740 .global data_ov00_020e5894 data_ov00_020e5894: ; 0x020e5894 - .word func_ov00_020a9764 - 1 + .word func_ov00_020a9764 .global data_ov00_020e5898 data_ov00_020e5898: ; 0x020e5898 - .word func_ov00_020a97d0 - 1 + .word func_ov00_020a97d0 .global data_ov00_020e589c data_ov00_020e589c: ; 0x020e589c - .word func_ov00_020a97e0 - 1 + .word func_ov00_020a97e0 .global data_ov00_020e58a0 data_ov00_020e58a0: ; 0x020e58a0 - .word func_ov00_020a97f8 - 1 + .word func_ov00_020a97f8 .global data_ov00_020e58a4 data_ov00_020e58a4: ; 0x020e58a4 - .word func_ov00_020a9864 - 1 + .word func_ov00_020a9864 .global data_ov00_020e58a8 data_ov00_020e58a8: ; 0x020e58a8 - .word func_ov00_020a98bc - 1 + .word func_ov00_020a98bc .global data_ov00_020e58ac data_ov00_020e58ac: ; 0x020e58ac - .word func_ov00_020a9890 - 1 + .word func_ov00_020a9890 .global data_ov00_020e58b0 data_ov00_020e58b0: ; 0x020e58b0 - .word func_ov00_020a9968 - 1 + .word func_ov00_020a9968 .global data_ov00_020e58b4 data_ov00_020e58b4: ; 0x020e58b4 - .word func_ov00_020a9f10 - 1 + .word func_ov00_020a9f10 .global data_ov00_020e58b8 data_ov00_020e58b8: ; 0x020e58b8 .byte 0x00, 0x00, 0x00, 0x00 @@ -2109,7 +1727,7 @@ data_ov00_020e58bc: ; 0x020e58bc .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e58c0 data_ov00_020e58c0: ; 0x020e58c0 - .word func_ov00_020a9f0c - 1 + .word func_ov00_020a9f0c .global data_ov00_020e58c4 data_ov00_020e58c4: ; 0x020e58c4 .byte 0x00, 0x00, 0x00, 0x00 @@ -2118,7 +1736,7 @@ data_ov00_020e58c8: ; 0x020e58c8 .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e58cc data_ov00_020e58cc: ; 0x020e58cc - .word func_ov00_020a9ed8 - 1 + .word func_ov00_020a9ed8 .global data_ov00_020e58d0 data_ov00_020e58d0: ; 0x020e58d0 .byte 0x00, 0x00, 0x00, 0x00 @@ -2127,7 +1745,7 @@ data_ov00_020e58d4: ; 0x020e58d4 .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e58d8 data_ov00_020e58d8: ; 0x020e58d8 - .word func_ov00_020a9eb8 - 1 + .word func_ov00_020a9eb8 .global data_ov00_020e58dc data_ov00_020e58dc: ; 0x020e58dc .byte 0x00, 0x00, 0x00, 0x00 @@ -2136,4 +1754,4 @@ data_ov00_020e58e0: ; 0x020e58e0 .byte 0x00, 0x00, 0x00, 0x00 .global data_ov00_020e58e4 data_ov00_020e58e4: ; 0x020e58e4 - .word func_ov00_020a9eb4 - 1 + .word func_ov00_020a9eb4 diff --git a/asm/ov00/ov00_020b1498.inc b/asm/ov00/ov00_020b1498.inc index 7ba8b689..25da2e2f 100644 --- a/asm/ov00/ov00_020b1498.inc +++ b/asm/ov00/ov00_020b1498.inc @@ -54,6 +54,7 @@ .extern _ZN13PlayerControl18func_ov00_020b034cEv .extern _ZN15LinkStateDamage18func_ov00_020acb6cEP5Vec3pi .extern _ZN15LinkStateDamage18func_ov00_020ace90EP5Vec3pi +.extern _ZN15LinkStateFollow20GetLinkStateCutsceneEv .extern _ZN17LinkStateInteract15SetBombVelocityEP5Vec3p .extern _ZN17LinkStateInteract16GetLinkStateRollEv .extern _ZN17LinkStateInteract18func_ov00_020ab6c8Ev @@ -499,7 +500,6 @@ .extern func_ov00_020a5e9c .extern func_ov00_020a5ef8 .extern func_ov00_020a6110 -.extern func_ov00_020a914c .extern func_ov00_020a956c .extern func_ov00_020a9588 .extern func_ov00_020a95a4 diff --git a/asm/ov00/ov00_020b1498.s b/asm/ov00/ov00_020b1498.s index 4f932693..ab2b5f0a 100644 --- a/asm/ov00/ov00_020b1498.s +++ b/asm/ov00/ov00_020b1498.s @@ -13118,7 +13118,7 @@ func_ov00_020bba80: ; 0x020bba80 cmp r0, #6 movne r0, #1 ldmneia sp!, {r3, pc} - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv bl func_ov00_020b1eec ldmia sp!, {r3, pc} arm_func_end func_ov00_020bba80 @@ -13228,7 +13228,7 @@ func_ov00_020bbb78: ; 0x020bbb78 bl func_ov00_020bc500 cmp r0, #6 beq _020bbbb0 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r0, [r0, #0x38] cmp r0, #0 movlt r0, #1 @@ -13823,12 +13823,12 @@ _020bc2e8: ; jump table b _020bc2f8 ; case 2 b _020bc308 ; case 3 _020bc2f8: - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, r4 bl func_ov05_0210a0c0 ldmia sp!, {r4, pc} _020bc308: - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv bl func_ov22_02175958 mov r0, #1 ldmia sp!, {r4, pc} @@ -13849,7 +13849,7 @@ func_ov00_020bc320: ; 0x020bc320 mov r5, r3 bl func_ov00_020b1d70 mov r4, r0 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, r4 mov r2, r6 mov r3, r5 @@ -14391,7 +14391,7 @@ func_ov00_020bc960: ; 0x020bc960 ldr r0, [r0] bl func_ov00_020c35d8 mov r4, r0 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, r6 mov r2, r5 mov r3, r4 @@ -14511,7 +14511,7 @@ _020bcb44: mov r0, r7 mov r1, r6 bl func_ov00_020bc8b8 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, r5 mov r2, r4 bl func_ov00_020b38dc @@ -14777,7 +14777,7 @@ func_ov00_020bce48: ; 0x020bce48 bl func_020385b8 bl _ZN17LinkStateInteract18func_ov00_020ab6c8Ev _020bce9c: - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, r4 bl func_ov05_021096bc cmp r0, #0 @@ -14797,7 +14797,7 @@ func_ov00_020bcec8: ; 0x020bcec8 bl func_ov00_020bc500 cmp r0, #6 bne _020bcef4 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r1, [r0, #4] mov r0, #1 cmp r1, #0xa @@ -14817,7 +14817,7 @@ func_ov00_020bcefc: ; 0x020bcefc cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r3, pc} - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r0, [r0, #0x74] blx _ZN4Item18func_ov00_020ad068Ei cmp r0, #0 @@ -14834,7 +14834,7 @@ func_ov00_020bcf2c: ; 0x020bcf2c cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r3, pc} - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r0, [r0, #0x74] blx _ZN4Item18func_ov00_020ad068Ei ldmia sp!, {r3, pc} @@ -14847,7 +14847,7 @@ func_ov00_020bcf50: ; 0x020bcf50 mov r5, r1 mov r4, r2 mov r6, r0 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, r5 mov r2, r4 bl func_ov00_020b3024 @@ -14865,7 +14865,7 @@ func_ov00_020bcf84: ; 0x020bcf84 mov r5, r1 mov r4, r2 mov r6, r0 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, r5 mov r2, r4 bl func_ov00_020b305c @@ -14886,21 +14886,21 @@ func_ov00_020bcfb8: ; 0x020bcfb8 beq _020bd01c cmp r4, #0 beq _020bcff4 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r1, _020bd024 ; =data_ov00_020e6298 mov r2, #0 bl func_ov00_020b2f48 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r1, #1 strb r1, [r0, #0xaa] b _020bd004 _020bcff4: - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r1, _020bd028 ; =data_ov00_020e6288 mov r2, #0 bl func_ov00_020b2f48 _020bd004: - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r1, _020bd02c ; =0x0000011d mov r2, #3 bl func_ov00_020b2ce4 @@ -14923,7 +14923,7 @@ func_ov00_020bd030: ; 0x020bd030 mov r4, r1 bl func_020385b8 bl _ZN17LinkStateInteract18func_ov00_020ab6c8Ev - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv mov r2, r4 ldr r1, _020bd06c ; =data_ov00_020e62a8 mov r3, #0 @@ -14943,7 +14943,7 @@ func_ov00_020bd070: ; 0x020bd070 stmdb sp!, {r3, r4, r5, lr} mov r5, r0 mov r4, r1 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r1, _020bd0a4 ; =data_ov00_020e62b8 mov r2, r4 mov r3, #1 @@ -14961,7 +14961,7 @@ _020bd0a4: .word data_ov00_020e62b8 arm_func_start func_ov00_020bd0a8 func_ov00_020bd0a8: ; 0x020bd0a8 stmdb sp!, {r3, lr} - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv bl func_ov00_020b2f9c mov r0, #1 ldmia sp!, {r3, pc} @@ -15096,7 +15096,7 @@ func_ov00_020bd268: ; 0x020bd268 ldr r0, [r0, #4] cmp r0, #0xc bne _020bd2b0 - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r1, [r0, #4] cmp r1, #0xc bne _020bd2ac @@ -15128,7 +15128,7 @@ func_ov00_020bd2bc: ; 0x020bd2bc _020bd2e4: cmp r5, #0 bne _020bd2fc - bl func_ov00_020a914c + bl _ZN15LinkStateFollow20GetLinkStateCutsceneEv ldr r0, [r0, #0x38] cmp r0, #0 movlt r4, #0 diff --git a/asm/ov04.inc b/asm/ov04.inc index f9d979ec..4d784f09 100644 --- a/asm/ov04.inc +++ b/asm/ov04.inc @@ -17,6 +17,7 @@ .extern _ZTV13LinkStateItem .extern _ZTV13LinkStateRoll .extern _ZTV15LinkStateDamage +.extern _ZTV15LinkStateFollow .extern _ZTV17LinkStateInteract .extern data_02056924 .extern data_02057200 @@ -130,7 +131,6 @@ .extern data_ov00_020e5454 .extern data_ov00_020e54a4 .extern data_ov00_020e5700 -.extern data_ov00_020e57a4 .extern data_ov00_020e5868 .extern data_ov00_020e5878 .extern data_ov00_020e6300 diff --git a/asm/ov04.s b/asm/ov04.s index 4115c93e..a14314cd 100644 --- a/asm/ov04.s +++ b/asm/ov04.s @@ -20864,7 +20864,7 @@ func_ov04_0210ad58: ; 0x0210ad58 push {r4, lr} add r4, r0, #0 bl func_ov04_0210add4 - ldr r0, _0210ad90 ; =data_ov00_020e57a4 + ldr r0, _0210ad90 ; =_ZTV15LinkStateFollow mov r1, #0 str r0, [r4] str r1, [r4, #0xc] @@ -20887,7 +20887,7 @@ func_ov04_0210ad58: ; 0x0210ad58 pop {r4, pc} nop thumb_func_end func_ov04_0210ad58 -_0210ad90: .word data_ov00_020e57a4 +_0210ad90: .word _ZTV15LinkStateFollow .global func_ov04_0210ad94 thumb_func_start func_ov04_0210ad94 diff --git a/asm/ov05.inc b/asm/ov05.inc index 76185a50..f1394115 100644 --- a/asm/ov05.inc +++ b/asm/ov05.inc @@ -393,9 +393,9 @@ .extern func_ov00_020a4e30 .extern func_ov00_020a4f38 .extern func_ov00_020a5e9c -.extern func_ov00_020a8f80 -.extern func_ov00_020a9180 -.extern func_ov00_020a9210 +.extern _ZN15LinkStateFollow16MoveTowardTargetEv +.extern _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p +.extern _ZN15LinkStateFollow18func_ov00_020a9210EP5Vec3pP5Actor .extern func_ov00_020a9588 .extern func_ov00_020a95a4 .extern func_ov00_020a990c diff --git a/asm/ov05.s b/asm/ov05.s index d88cc1ef..902927d7 100644 --- a/asm/ov05.s +++ b/asm/ov05.s @@ -13482,7 +13482,7 @@ func_ov05_0210bf50: ; 0x0210bf50 bl func_ov05_02110228 bl func_ov05_0210aaf8 add r1, sp, #8 - bl func_ov00_020a9180 + bl _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p mov r5, r0 bl func_020385b8 add r1, sp, #8 @@ -13761,7 +13761,7 @@ _0210c398: add r1, sp, #0x54 mov r0, r7 mov r2, r5 - bl func_ov00_020a9210 + bl _ZN15LinkStateFollow18func_ov00_020a9210EP5Vec3pP5Actor mov r0, r7 bl _ZN13LinkStateBase12GetPlayerPosEv mov r1, r0 @@ -18069,7 +18069,7 @@ _0210fed4: b _0210feec _0210fee4: bl func_ov05_0210aaf8 - bl func_ov00_020a8f80 + bl _ZN15LinkStateFollow16MoveTowardTargetEv _0210feec: mov r0, sl bl _ZN13LinkStateBase19GetCurrentCharacterEv @@ -19628,7 +19628,7 @@ func_ov05_021113dc: ; 0x021113dc mov r6, r0 bl func_ov05_0210aaf8 add r1, sp, #0x4c - bl func_ov00_020a9180 + bl _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p mov r7, r0 bl func_020385b8 add r1, sp, #0x4c diff --git a/asm/ov23.inc b/asm/ov23.inc index 63ae8346..dfc4351b 100644 --- a/asm/ov23.inc +++ b/asm/ov23.inc @@ -26,6 +26,7 @@ .extern _ZN13PlayerControl18func_ov00_020b034cEv .extern _ZN13PlayerControl9SetUnk_80Ev .extern _ZN15LinkStateDamage18func_ov00_020acb6cEP5Vec3pi +.extern _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p .extern _ZN17LinkStateInteract18func_ov00_020ab6c8Ev .extern _ZN17LinkStateInteract18func_ov00_020ab770EP5Vec3p .extern _ZN9SysObjectdlEPv @@ -238,7 +239,6 @@ .extern func_ov00_020a42cc .extern func_ov00_020a5e9c .extern func_ov00_020a61ac -.extern func_ov00_020a9180 .extern func_ov00_020a956c .extern func_ov00_020a9588 .extern func_ov00_020a95a4 diff --git a/asm/ov23.s b/asm/ov23.s index 888b164a..e167dc7f 100644 --- a/asm/ov23.s +++ b/asm/ov23.s @@ -5174,7 +5174,7 @@ _0217196c: _021719b0: bl func_ov23_021720c4 add r1, sp, #0x28 - bl func_ov00_020a9180 + bl _ZN15LinkStateFollow18func_ov00_020a9180EP5Vec3p mov r5, r0 bl func_020385b8 add r1, sp, #0x28 diff --git a/include/Player/LinkStateFollow.hpp b/include/Player/LinkStateFollow.hpp index bdd3419d..0206e493 100644 --- a/include/Player/LinkStateFollow.hpp +++ b/include/Player/LinkStateFollow.hpp @@ -5,7 +5,9 @@ #include "lib/math.h" +#include "Actor/Actor.hpp" #include "Player/LinkStateBase.hpp" +#include "Player/LinkStateCutscene.hpp" class LinkStateFollow : public LinkStateBase { public: @@ -31,4 +33,9 @@ public: /* 2c */ virtual void vfunc_2c(u16 *param1) override; /* 34 */ virtual bool vfunc_34(Vec3p *param1) override; /* 44 */ + + void MoveTowardTarget(); + LinkStateCutscene* GetLinkStateCutscene(); + bool func_ov00_020a9180(Vec3p *param1); + bool func_ov00_020a9210(Vec3p *param1, Actor *param2); }; diff --git a/src/00_Core/Player/LinkStateFollow.cpp b/src/00_Core/Player/LinkStateFollow.cpp new file mode 100644 index 00000000..54e87938 --- /dev/null +++ b/src/00_Core/Player/LinkStateFollow.cpp @@ -0,0 +1,16 @@ +#include "Player/LinkStateFollow.hpp" + +#ifdef STUBS + +void LinkStateFollow::vfunc_00() {} +LinkStateId LinkStateFollow::GetId() {} +void LinkStateFollow::MoveTowardTarget() {} +void LinkStateFollow::OnStateLeave(s32 param1) {} +bool LinkStateFollow::vfunc_24(s32 param1) {} +bool LinkStateFollow::vfunc_28() {} +LinkStateCutscene* LinkStateFollow::GetLinkStateCutscene() {} +bool LinkStateFollow::vfunc_34(Vec3p *param1) {} +bool LinkStateFollow::func_ov00_020a9180(Vec3p *param1) {} +bool LinkStateFollow::func_ov00_020a9210(Vec3p *param1, Actor *param2) {} + +#endif diff --git a/tools/lcf.py b/tools/lcf.py index 5d776303..b9cc8944 100644 --- a/tools/lcf.py +++ b/tools/lcf.py @@ -36,6 +36,8 @@ ov00 = Overlay(name='ov00', after='ARM9', objects=[ 'asm/ov00/Player/LinkStateBase.s', 'src/00_Core/Player/LinkStateMove.cpp', 'asm/ov00/Player/LinkStateMove.s', + 'src/00_Core/Player/LinkStateFollow.cpp', + 'asm/ov00/Player/LinkStateFollow.s', 'asm/ov00/ov00_020a8e04.s',