summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAetias <aetias@outlook.com>2025-05-22 21:39:25 +0200
committerAetias <aetias@outlook.com>2025-05-22 21:39:25 +0200
commite66cbc23e1c80e904451558317d2eba3524fcb41 (patch)
treea5592649aaf89dd9e53764132f01a40b2e8ebee6
parent84a91b2a47b3a07f58b4d6883a8195156ccf62db (diff)
Match `LinkStateMove` in overlay 5
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt8
-rw-r--r--config/eur/arm9/overlays/ov005/delinks.txt5
-rw-r--r--config/eur/arm9/overlays/ov005/relocs.txt2
-rw-r--r--config/eur/arm9/overlays/ov005/symbols.txt12
-rw-r--r--config/eur/arm9/symbols.txt2
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt8
-rw-r--r--config/usa/arm9/overlays/ov005/delinks.txt6
-rw-r--r--config/usa/arm9/overlays/ov005/relocs.txt2
-rw-r--r--config/usa/arm9/overlays/ov005/symbols.txt12
-rw-r--r--config/usa/arm9/symbols.txt2
-rw-r--r--include/Player/LinkStateBase.hpp22
-rw-r--r--include/Player/LinkStateDamage.hpp1
-rw-r--r--include/Player/LinkStateMove.hpp2
-rw-r--r--include/Unknown/UnkStruct_02037750.hpp2
-rw-r--r--src/00_Core/Player/LinkStateBase.cpp6
-rw-r--r--src/00_Core/Player/LinkStateMove.cpp2
-rw-r--r--src/05/Player/LinkStateMove.cpp247
-rw-r--r--src/Main/Player/LinkState.cpp2
18 files changed, 303 insertions, 40 deletions
diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt
index a654035b..221db740 100644
--- a/config/eur/arm9/overlays/ov000/symbols.txt
+++ b/config/eur/arm9/overlays/ov000/symbols.txt
@@ -1893,7 +1893,7 @@ _ZN13LinkStateBase22UpdateSwordShieldInUseEv kind:function(arm,size=0x18) addr:0
_ZN13LinkStateBase18func_ov00_020a81b8Eii kind:function(arm,size=0x24) addr:0x20a81b8
_ZN13LinkStateBase16GetLinkItemStateEv kind:function(arm,size=0x10) addr:0x20a81dc
_ZN13LinkStateBase6LookAtEP5Vec3p kind:function(arm,size=0x10) addr:0x20a81ec
-_ZN13LinkStateBase18func_ov00_020a81fcEv kind:function(arm,size=0x10) addr:0x20a81fc
+_ZN13LinkStateBase18func_ov00_020a81fcEP5Vec3pi kind:function(arm,size=0x10) addr:0x20a81fc
_ZN13LinkStateBase9AddHealthEs kind:function(arm,size=0x18) addr:0x20a820c
_ZN13LinkStateBase18func_ov00_020a8224Ei kind:function(arm,size=0x14) addr:0x20a8224
_ZN13LinkStateBase6TurnToEsii kind:function(arm,size=0x44) addr:0x20a8238
@@ -1915,7 +1915,7 @@ _ZN13LinkStateBase18func_ov00_020a8638Ei kind:function(arm,size=0x30) addr:0x20a
_ZN13LinkStateBase26Clear_PlayerLinkBase_Unk48Et kind:function(arm,size=0x18) addr:0x20a8668
_ZN13LinkStateBase18func_ov00_020a8680Eisb kind:function(arm,size=0x5c) addr:0x20a8680
_ZN13LinkStateBase33PlayerLinkBase_func_ov00_020bccc8Ev kind:function(arm,size=0x10) addr:0x20a86dc
-_ZN13LinkStateBase23PlayerLinkBase_vfunc_58Ev kind:function(arm,size=0x18) addr:0x20a86ec
+_ZN13LinkStateBase23PlayerLinkBase_vfunc_58EiP8ActorRef kind:function(arm,size=0x18) addr:0x20a86ec
_ZN13LinkStateBase18func_ov00_020a8704EPs kind:function(arm,size=0x70) addr:0x20a8704
_ZN13LinkStateBase18func_ov00_020a8774EP5Vec3pi kind:function(arm,size=0xd0) addr:0x20a8774
_ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) addr:0x20a8844
@@ -1923,7 +1923,7 @@ _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x2
_ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x20a8994
_ZN13LinkStateBase18func_ov00_020a89bcEii kind:function(arm,size=0x4c) addr:0x20a89bc
_ZN13LinkStateBase18func_ov00_020a8a08Ei kind:function(arm,size=0x44) addr:0x20a8a08
-_ZN13LinkStateBase18func_ov00_020a8a4cEii kind:function(arm,size=0x44) addr:0x20a8a4c
+_ZN13LinkStateBase18func_ov00_020a8a4cEPKvi kind:function(arm,size=0x44) addr:0x20a8a4c
_ZN13LinkStateBase18func_ov00_020a8a90Ei kind:function(arm,size=0x20) addr:0x20a8a90
_ZN13LinkStateBase18func_ov00_020a8ab0Ei kind:function(arm,size=0x20) addr:0x20a8ab0
_ZN13LinkStateBase18func_ov00_020a8ad0Ei kind:function(arm,size=0x34) addr:0x20a8ad0
@@ -4723,7 +4723,7 @@ data_ov000_020e5674 kind:data(any) addr:0x20e5674
data_ov000_020e5684 kind:data(any) addr:0x20e5684
data_ov000_020e5694 kind:data(any) addr:0x20e5694
_ZTV13LinkStateBase kind:data(any) addr:0x20e56ac
-data_ov000_020e56f0 kind:data(any) addr:0x20e56f0
+_ZN13LinkStateMove19data_ov000_020e56f0E kind:data(any) addr:0x20e56f0
data_ov000_020e56f4$964 kind:data(any) addr:0x20e56f4 local
_ZTV13LinkStateMove kind:data(any) addr:0x20e56f8
@922 kind:data(any) addr:0x20e5744 local
diff --git a/config/eur/arm9/overlays/ov005/delinks.txt b/config/eur/arm9/overlays/ov005/delinks.txt
index cd744ee4..2dc0f7d5 100644
--- a/config/eur/arm9/overlays/ov005/delinks.txt
+++ b/config/eur/arm9/overlays/ov005/delinks.txt
@@ -5,3 +5,8 @@
.data start:0x02112480 end:0x02112c20 kind:data align:32
.bss start:0x02112c20 end:0x02112c20 kind:bss align:32
+src/05/Player/LinkStateMove.cpp:
+ complete
+ .text start:0x021113d0 end:0x02111bc0
+ .rodata start:0x021123ac end:0x021123bc
+ .data start:0x02112be4 end:0x02112c20
diff --git a/config/eur/arm9/overlays/ov005/relocs.txt b/config/eur/arm9/overlays/ov005/relocs.txt
index 6f4acbc0..aaf7b5ff 100644
--- a/config/eur/arm9/overlays/ov005/relocs.txt
+++ b/config/eur/arm9/overlays/ov005/relocs.txt
@@ -2426,7 +2426,7 @@ from:0x02111a64 kind:load to:0x027e0618 module:dtcm
from:0x02111a68 kind:load to:0x027e0fb8 module:dtcm
from:0x02111a6c kind:load to:0x02112be4 module:overlay(5)
from:0x02111a70 kind:load to:0x020e56f0 module:overlay(0)
-from:0x02111a78 kind:load to:0x02112c04 module:overlay(5)
+from:0x02111a78 kind:load to:0x02112bfc add:8 module:overlay(5)
from:0x02111a7c kind:load to:0x027e0fe4 module:dtcm
from:0x02111a88 kind:load to:0x027e0ffc module:dtcm
from:0x02111a90 kind:load to:0x021123ac module:overlay(5)
diff --git a/config/eur/arm9/overlays/ov005/symbols.txt b/config/eur/arm9/overlays/ov005/symbols.txt
index 2689f39f..a0c2e66b 100644
--- a/config/eur/arm9/overlays/ov005/symbols.txt
+++ b/config/eur/arm9/overlays/ov005/symbols.txt
@@ -308,7 +308,7 @@ _ZN13LinkStateBase19func_ov005_021113c4Eb kind:function(arm,size=0xc) addr:0x211
_ZN13LinkStateMove19func_ov005_021113d0Ev kind:function(arm,size=0xc) addr:0x21113d0
_ZN13LinkStateMove8vfunc_1cEv kind:function(arm,size=0x6bc) addr:0x21113dc
_ZN13LinkStateMove8vfunc_3cEv kind:function(arm,size=0x60) addr:0x2111a98
-func_ov005_02111af8 kind:function(arm,size=0xc8) addr:0x2111af8
+_ZN14UnkFilterActor6FilterEP5Actor kind:function(arm,size=0xc8) addr:0x2111af8
_ZN7MapBase8vfunc_1cEb kind:function(arm,size=0x40) addr:0x2111bc0
_ZN7MapBase8vfunc_20Ei kind:function(arm,size=0x6c) addr:0x2111c00
_ZN7MapBase8vfunc_24Ev kind:function(arm,size=0x4) addr:0x2111c6c
@@ -329,7 +329,8 @@ data_ov005_02112308 kind:data(any) addr:0x2112308
data_ov005_02112324 kind:data(any) addr:0x2112324
data_ov005_02112360 kind:data(any) addr:0x2112360
data_ov005_021123a0 kind:data(any) addr:0x21123a0
-data_ov005_021123ac kind:data(any) addr:0x21123ac
+data_ov005_021123ac kind:data(any) addr:0x21123ac local
+data_ov005_021123b8 kind:data(any) addr:0x21123b8 local
__sinit_ov005_021123bc kind:function(arm,size=0x24) addr:0x21123bc
__sinit_ov005_021123e0 kind:function(arm,size=0x1c) addr:0x21123e0
__sinit_ov005_021123fc kind:function(arm,size=0x24) addr:0x21123fc
@@ -452,5 +453,8 @@ data_ov005_02112ba4 kind:data(any) addr:0x2112ba4
data_ov005_02112bb4 kind:data(any) addr:0x2112bb4
data_ov005_02112bc4 kind:data(any) addr:0x2112bc4
data_ov005_02112bd4 kind:data(any) addr:0x2112bd4
-data_ov005_02112be4 kind:data(any) addr:0x2112be4
-data_ov005_02112c04 kind:data(any) addr:0x2112c04
+data_ov005_02112be4 kind:data(any) addr:0x2112be4 local
+data_ov005_02112be8 kind:data(any) addr:0x2112be8 local
+data_ov005_02112bec kind:data(any) addr:0x2112bec local
+data_ov005_02112bf0 kind:data(any) addr:0x2112bf0 local
+_ZTV14UnkFilterActor kind:data(any) addr:0x2112bfc
diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt
index ff88bf21..859a6e60 100644
--- a/config/eur/arm9/symbols.txt
+++ b/config/eur/arm9/symbols.txt
@@ -1331,7 +1331,7 @@ func_0202b2e8 kind:function(arm,size=0x10) addr:0x202b2e8
func_0202b2f8 kind:function(arm,size=0x10) addr:0x202b2f8
Vec3p_Lerp kind:function(arm,size=0xb4) addr:0x202b308
func_0202b3bc kind:function(arm,size=0x5c) addr:0x202b3bc
-func_0202b418 kind:function(arm,size=0xcc) addr:0x202b418
+Lerp kind:function(arm,size=0xcc) addr:0x202b418
func_0202b4e4 kind:function(arm,size=0x188) addr:0x202b4e4
func_0202b66c kind:function(arm,size=0xc8) addr:0x202b66c
func_0202b734 kind:function(arm,size=0xb0) addr:0x202b734
diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt
index b4d99de2..1f13b8be 100644
--- a/config/usa/arm9/overlays/ov000/symbols.txt
+++ b/config/usa/arm9/overlays/ov000/symbols.txt
@@ -1893,7 +1893,7 @@ _ZN13LinkStateBase22UpdateSwordShieldInUseEv kind:function(arm,size=0x18) addr:0
_ZN13LinkStateBase18func_ov00_020a81b8Eii kind:function(arm,size=0x24) addr:0x20a8158
_ZN13LinkStateBase16GetLinkItemStateEv kind:function(arm,size=0x10) addr:0x20a817c
_ZN13LinkStateBase6LookAtEP5Vec3p kind:function(arm,size=0x10) addr:0x20a818c
-_ZN13LinkStateBase18func_ov00_020a81fcEv kind:function(arm,size=0x10) addr:0x20a819c
+_ZN13LinkStateBase18func_ov00_020a81fcEP5Vec3pi kind:function(arm,size=0x10) addr:0x20a819c
_ZN13LinkStateBase9AddHealthEs kind:function(arm,size=0x18) addr:0x20a81ac
_ZN13LinkStateBase18func_ov00_020a8224Ei kind:function(arm,size=0x14) addr:0x20a81c4
_ZN13LinkStateBase6TurnToEsii kind:function(arm,size=0x44) addr:0x20a81d8
@@ -1915,7 +1915,7 @@ _ZN13LinkStateBase18func_ov00_020a8638Ei kind:function(arm,size=0x30) addr:0x20a
_ZN13LinkStateBase26Clear_PlayerLinkBase_Unk48Et kind:function(arm,size=0x18) addr:0x20a8608
_ZN13LinkStateBase18func_ov00_020a8680Eisb kind:function(arm,size=0x5c) addr:0x20a8620
_ZN13LinkStateBase33PlayerLinkBase_func_ov00_020bccc8Ev kind:function(arm,size=0x10) addr:0x20a867c
-_ZN13LinkStateBase23PlayerLinkBase_vfunc_58Ev kind:function(arm,size=0x18) addr:0x20a868c
+_ZN13LinkStateBase23PlayerLinkBase_vfunc_58EiP8ActorRef kind:function(arm,size=0x18) addr:0x20a868c
_ZN13LinkStateBase18func_ov00_020a8704EPs kind:function(arm,size=0x70) addr:0x20a86a4
_ZN13LinkStateBase18func_ov00_020a8774EP5Vec3pi kind:function(arm,size=0xd0) addr:0x20a8714
_ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) addr:0x20a87e4
@@ -1923,7 +1923,7 @@ _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x2
_ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x20a8934
_ZN13LinkStateBase18func_ov00_020a89bcEii kind:function(arm,size=0x4c) addr:0x20a895c
_ZN13LinkStateBase18func_ov00_020a8a08Ei kind:function(arm,size=0x44) addr:0x20a89a8
-_ZN13LinkStateBase18func_ov00_020a8a4cEii kind:function(arm,size=0x44) addr:0x20a89ec
+_ZN13LinkStateBase18func_ov00_020a8a4cEPKvi kind:function(arm,size=0x44) addr:0x20a89ec
_ZN13LinkStateBase18func_ov00_020a8a90Ei kind:function(arm,size=0x20) addr:0x20a8a30
_ZN13LinkStateBase18func_ov00_020a8ab0Ei kind:function(arm,size=0x20) addr:0x20a8a50
_ZN13LinkStateBase18func_ov00_020a8ad0Ei kind:function(arm,size=0x34) addr:0x20a8a70
@@ -4723,7 +4723,7 @@ data_ov000_020e5674 kind:data(any) addr:0x20e5614
data_ov000_020e5684 kind:data(any) addr:0x20e5624
data_ov000_020e5694 kind:data(any) addr:0x20e5634
_ZTV13LinkStateBase kind:data(any) addr:0x20e564c
-data_ov000_020e56f0 kind:data(any) addr:0x20e5690
+_ZN13LinkStateMove19data_ov000_020e56f0E kind:data(any) addr:0x20e5690
data_ov000_020e56f4$964 kind:data(any) addr:0x20e5694 local
_ZTV13LinkStateMove kind:data(any) addr:0x20e5698
@922 kind:data(any) addr:0x20e56e4 local
diff --git a/config/usa/arm9/overlays/ov005/delinks.txt b/config/usa/arm9/overlays/ov005/delinks.txt
index 54366dda..6908bc9e 100644
--- a/config/usa/arm9/overlays/ov005/delinks.txt
+++ b/config/usa/arm9/overlays/ov005/delinks.txt
@@ -5,3 +5,9 @@
.data start:0x02112400 end:0x02112ba0 kind:data align:32
.bss start:0x02112ba0 end:0x02112ba0 kind:bss align:32
+src/05/Player/LinkStateMove.cpp:
+ complete
+ .text start:0x02111350 end:0x02111b40
+ .rodata start:0x0211232c end:0x0211233c
+ .data start:0x02112b64 end:0x02112ba0
+
diff --git a/config/usa/arm9/overlays/ov005/relocs.txt b/config/usa/arm9/overlays/ov005/relocs.txt
index 788d0a95..eeed1b5e 100644
--- a/config/usa/arm9/overlays/ov005/relocs.txt
+++ b/config/usa/arm9/overlays/ov005/relocs.txt
@@ -2426,7 +2426,7 @@ from:0x021119e4 kind:load to:0x027e0618 module:dtcm
from:0x021119e8 kind:load to:0x027e0fb8 module:dtcm
from:0x021119ec kind:load to:0x02112b64 module:overlay(5)
from:0x021119f0 kind:load to:0x020e5690 module:overlay(0)
-from:0x021119f8 kind:load to:0x02112b84 module:overlay(5)
+from:0x021119f8 kind:load to:0x02112b7c add:8 module:overlay(5)
from:0x021119fc kind:load to:0x027e0fe4 module:dtcm
from:0x02111a08 kind:load to:0x027e0ffc module:dtcm
from:0x02111a10 kind:load to:0x0211232c module:overlay(5)
diff --git a/config/usa/arm9/overlays/ov005/symbols.txt b/config/usa/arm9/overlays/ov005/symbols.txt
index a29c8cc9..26670bd8 100644
--- a/config/usa/arm9/overlays/ov005/symbols.txt
+++ b/config/usa/arm9/overlays/ov005/symbols.txt
@@ -308,7 +308,7 @@ _ZN13LinkStateBase19func_ov005_021113c4Eb kind:function(arm,size=0xc) addr:0x211
_ZN13LinkStateMove19func_ov005_021113d0Ev kind:function(arm,size=0xc) addr:0x2111350
_ZN13LinkStateMove8vfunc_1cEv kind:function(arm,size=0x6bc) addr:0x211135c
_ZN13LinkStateMove8vfunc_3cEv kind:function(arm,size=0x60) addr:0x2111a18
-func_ov005_02111af8 kind:function(arm,size=0xc8) addr:0x2111a78
+_ZN14UnkFilterActor6FilterEP5Actor kind:function(arm,size=0xc8) addr:0x2111a78
_ZN7MapBase8vfunc_1cEb kind:function(arm,size=0x40) addr:0x2111b40
_ZN7MapBase8vfunc_20Ei kind:function(arm,size=0x6c) addr:0x2111b80
_ZN7MapBase8vfunc_24Ev kind:function(arm,size=0x4) addr:0x2111bec
@@ -329,7 +329,8 @@ data_ov005_02112308 kind:data(any) addr:0x2112288
data_ov005_02112324 kind:data(any) addr:0x21122a4
data_ov005_02112360 kind:data(any) addr:0x21122e0
data_ov005_021123a0 kind:data(any) addr:0x2112320
-data_ov005_021123ac kind:data(any) addr:0x211232c
+data_ov005_021123ac kind:data(any) addr:0x211232c local
+data_ov005_021123b8 kind:data(any) addr:0x2112338 local
__sinit_ov005_021123bc kind:function(arm,size=0x24) addr:0x211233c
__sinit_ov005_021123e0 kind:function(arm,size=0x1c) addr:0x2112360
__sinit_ov005_021123fc kind:function(arm,size=0x24) addr:0x211237c
@@ -452,5 +453,8 @@ data_ov005_02112ba4 kind:data(any) addr:0x2112b24
data_ov005_02112bb4 kind:data(any) addr:0x2112b34
data_ov005_02112bc4 kind:data(any) addr:0x2112b44
data_ov005_02112bd4 kind:data(any) addr:0x2112b54
-data_ov005_02112be4 kind:data(any) addr:0x2112b64
-data_ov005_02112c04 kind:data(any) addr:0x2112b84
+data_ov005_02112be4 kind:data(any) addr:0x2112b64 local
+data_ov005_02112be8 kind:data(any) addr:0x2112b68 local
+data_ov005_02112bec kind:data(any) addr:0x2112b6c local
+data_ov005_02112bf0 kind:data(any) addr:0x2112b70 local
+_ZTV14UnkFilterActor kind:data(any) addr:0x2112b7c
diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt
index 05126c43..af09f863 100644
--- a/config/usa/arm9/symbols.txt
+++ b/config/usa/arm9/symbols.txt
@@ -1331,7 +1331,7 @@ func_0202b2e8 kind:function(arm,size=0x10) addr:0x202b2d0
func_0202b2f8 kind:function(arm,size=0x10) addr:0x202b2e0
Vec3p_Lerp kind:function(arm,size=0xb4) addr:0x202b2f0
func_0202b3bc kind:function(arm,size=0x5c) addr:0x202b3a4
-func_0202b418 kind:function(arm,size=0xcc) addr:0x202b400
+Lerp kind:function(arm,size=0xcc) addr:0x202b400
func_0202b4e4 kind:function(arm,size=0x188) addr:0x202b4cc
func_0202b66c kind:function(arm,size=0xc8) addr:0x202b654
func_0202b734 kind:function(arm,size=0xb0) addr:0x202b71c
diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp
index bca6c796..14f4603d 100644
--- a/include/Player/LinkStateBase.hpp
+++ b/include/Player/LinkStateBase.hpp
@@ -14,13 +14,13 @@
typedef unk32 LinkStateId;
enum LinkStateId_ {
- LinkStateId_Move = 0,
- LinkStateId_Item = 1,
- LinkStateId_Grab = 2,
- LinkStateId_Unk3 = 3,
- LinkStateId_Unk4 = 4,
- LinkStateId_Damage = 5,
- LinkStateId_ItemGet = 6,
+ LinkStateId_Move = 0,
+ LinkStateId_Item = 1,
+ LinkStateId_Interact = 2,
+ LinkStateId_Follow = 3,
+ LinkStateId_Roll = 4,
+ LinkStateId_Damage = 5,
+ LinkStateId_Cutscene = 6,
LinkStateId_COUNT
};
@@ -60,7 +60,7 @@ public:
void func_ov00_020a81b8(unk32 param1, unk32 param2);
LinkStateItem *GetLinkItemState();
void LookAt(Vec3p *target);
- void func_ov00_020a81fc();
+ void func_ov00_020a81fc(Vec3p *param1, unk32 param2);
void AddHealth(s16 amount);
void func_ov00_020a8224(unk32 param1);
void TurnTo(s16 angle, unk32 param2, unk32 speed);
@@ -82,7 +82,7 @@ public:
void Clear_PlayerLinkBase_Unk48(u16 flags);
void func_ov00_020a8680(unk32 param1, unk16 param2, bool param3);
void PlayerLinkBase_func_ov00_020bccc8();
- bool PlayerLinkBase_vfunc_58();
+ bool PlayerLinkBase_vfunc_58(unk32 param1, ActorRef *param2);
bool func_ov00_020a8704(s16 *pAngle);
bool func_ov00_020a8774(Vec3p *param1, s32 angle);
void func_ov00_020a8844(Vec3p *param1, bool param2, bool param3);
@@ -90,7 +90,7 @@ public:
void func_ov00_020a8994();
void func_ov00_020a89bc(unk32 param1, unk32 param2);
void func_ov00_020a8a08(unk32 param1);
- void func_ov00_020a8a4c(unk32 param1, unk32 param2);
+ void func_ov00_020a8a4c(const void *param1, unk32 param2);
void func_ov00_020a8a90(unk32 param1);
void func_ov00_020a8ab0(unk32 param1);
void func_ov00_020a8ad0(unk32 param1);
@@ -152,6 +152,6 @@ public:
void func_ov005_021113c4(bool param1);
};
-LinkStateBase *GetLinkState(s32 index);
+LinkStateBase *GetLinkState(LinkStateId index);
extern LinkStateBase **gLinkStates;
diff --git a/include/Player/LinkStateDamage.hpp b/include/Player/LinkStateDamage.hpp
index 0e3a70a7..02e2c526 100644
--- a/include/Player/LinkStateDamage.hpp
+++ b/include/Player/LinkStateDamage.hpp
@@ -8,6 +8,7 @@
#include "Render/ModelRender.hpp"
class LinkStateDamage : public LinkStateBase {
+public:
/* 00 (base) */
/* 0c */ void *mUnk_0c;
/* 10 */ unk32 mUnk_10;
diff --git a/include/Player/LinkStateMove.hpp b/include/Player/LinkStateMove.hpp
index 0b197a27..a782b22d 100644
--- a/include/Player/LinkStateMove.hpp
+++ b/include/Player/LinkStateMove.hpp
@@ -7,6 +7,8 @@
class LinkStateMove : public LinkStateBase {
public:
+ static unk32 data_ov000_020e56f0;
+
/* 00 (base) */
/* 0c */ s32 mUnk_0c;
/* 10 */ unk16 mUnk_10;
diff --git a/include/Unknown/UnkStruct_02037750.hpp b/include/Unknown/UnkStruct_02037750.hpp
index 5fe84a89..2e5ea7b6 100644
--- a/include/Unknown/UnkStruct_02037750.hpp
+++ b/include/Unknown/UnkStruct_02037750.hpp
@@ -31,7 +31,7 @@ public:
/* 34 */
UnkStruct_02037750(unk32 param1, unk32 param2);
- LinkStateInteract *GetLinkStateInteract();
+ static LinkStateInteract *GetLinkStateInteract();
void func_020385d0(s32 param1, unk32 *param2);
};
diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp
index 7479667e..37215e6f 100644
--- a/src/00_Core/Player/LinkStateBase.cpp
+++ b/src/00_Core/Player/LinkStateBase.cpp
@@ -16,7 +16,7 @@ void LinkStateBase::UpdateSwordShieldInUse() {}
void LinkStateBase::func_ov00_020a81b8(unk32 param1, unk32 param2) {}
LinkStateItem *LinkStateBase::GetLinkItemState() {}
void LinkStateBase::LookAt(Vec3p *target) {}
-void LinkStateBase::func_ov00_020a81fc() {}
+void LinkStateBase::func_ov00_020a81fc(Vec3p *param1, unk32 param2) {}
void LinkStateBase::AddHealth(s16 amount) {}
void LinkStateBase::func_ov00_020a8224(unk32 param1) {}
void LinkStateBase::TurnTo(s16 angle, unk32 param2, unk32 speed) {}
@@ -38,7 +38,7 @@ bool LinkStateBase::func_ov00_020a8638(unk32 param1) {}
void LinkStateBase::Clear_PlayerLinkBase_Unk48(u16 flags) {}
void LinkStateBase::func_ov00_020a8680(unk32 param1, unk16 param2, bool param3) {}
void LinkStateBase::PlayerLinkBase_func_ov00_020bccc8() {}
-bool LinkStateBase::PlayerLinkBase_vfunc_58() {}
+bool LinkStateBase::PlayerLinkBase_vfunc_58(unk32 param1, ActorRef *param2) {}
bool LinkStateBase::func_ov00_020a8704(s16 *pAngle) {}
bool LinkStateBase::func_ov00_020a8774(Vec3p *param1, s32 angle) {}
void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool param3) {}
@@ -46,7 +46,7 @@ void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) {}
void LinkStateBase::func_ov00_020a8994() {}
void LinkStateBase::func_ov00_020a89bc(unk32 param1, unk32 param2) {}
void LinkStateBase::func_ov00_020a8a08(unk32 param1) {}
-void LinkStateBase::func_ov00_020a8a4c(unk32 param1, unk32 param2) {}
+void LinkStateBase::func_ov00_020a8a4c(const void *param1, unk32 param2) {}
void LinkStateBase::func_ov00_020a8a90(unk32 param1) {}
void LinkStateBase::func_ov00_020a8ab0(unk32 param1) {}
void LinkStateBase::func_ov00_020a8ad0(unk32 param1) {}
diff --git a/src/00_Core/Player/LinkStateMove.cpp b/src/00_Core/Player/LinkStateMove.cpp
index 889b3743..5509be66 100644
--- a/src/00_Core/Player/LinkStateMove.cpp
+++ b/src/00_Core/Player/LinkStateMove.cpp
@@ -1,6 +1,6 @@
#include "Player/LinkStateMove.hpp"
-unk32 data_ov000_020e56f0 = 0x800;
+unk32 LinkStateMove::data_ov000_020e56f0 = 0x800;
THUMB void LinkStateMove::vfunc_00() {}
diff --git a/src/05/Player/LinkStateMove.cpp b/src/05/Player/LinkStateMove.cpp
index 367fd3f9..815d9060 100644
--- a/src/05/Player/LinkStateMove.cpp
+++ b/src/05/Player/LinkStateMove.cpp
@@ -1,5 +1,246 @@
#include "Player/LinkStateMove.hpp"
+#include "DTCM/UnkStruct_027e0d38.hpp"
+#include "Player/LinkStateDamage.hpp"
+#include "Player/LinkStateFollow.hpp"
+#include "Player/LinkStateInteract.hpp"
+#include "Player/LinkStateItem.hpp"
+#include "Player/LinkStateRoll.hpp"
+#include "Player/PlayerControl.hpp"
+#include "Save/AdventureFlags.hpp"
+#include "Unknown/UnkStruct_02037750.hpp"
-void LinkStateMove::func_ov005_021113d0() {}
-void LinkStateMove::vfunc_1c() {}
-bool LinkStateMove::vfunc_3c() {}
+class UnkFilterActor : public FilterActorBase {
+public:
+ /* 00 (base) */
+ /* 04 */ Actor *mActor;
+ /* 08 */ q20 mUnk_08;
+ /* 0c */ Vec3p mPos;
+ /* 18 */ s16 mAngle;
+ /* 1a */
+
+ /* 0 */ virtual bool Filter(Actor *actor) override;
+ /* 4 */
+};
+
+struct UnkStruct_ov005_021123ac {
+ /* 00 */ unk32 mUnk_00;
+ /* 04 */ unk32 mUnk_04;
+ /* 08 */ unk32 mUnk_08;
+ /* 0c */ unk32 mUnk_0c;
+ /* 10 */
+};
+
+ARM void LinkStateMove::func_ov005_021113d0() {
+ mUnk_12 = 10;
+}
+
+static q4 data_ov005_02112be4 = FLOAT_TO_Q20(16 / 15.0);
+static q20 data_ov005_02112be8 = FLOAT_TO_Q20(1 / 64.0);
+static q20 data_ov005_02112bec = FLOAT_TO_Q20(1 / 3.0);
+static const Vec3p data_ov005_021123ac = {
+ FLOAT_TO_Q20(0.0122),
+ FLOAT_TO_Q20(1.0),
+ FLOAT_TO_Q20(0.0),
+};
+static Vec3p data_ov005_02112bf0 = {
+ FLOAT_TO_Q20(0.3),
+ FLOAT_TO_Q20(0.25),
+ FLOAT_TO_Q20(0.01),
+};
+static const volatile q20 data_ov005_021123b8 = FLOAT_TO_Q20(15.0);
+
+extern LinkStateFollow *GetLinkStateFollow();
+extern unk32 data_027e0618;
+extern "C" bool Lerp(s32 *pValue, s32 dest, s32 factor, unk32 param4, u32 step);
+extern unk32 data_027e0ffc;
+extern "C" void func_ov000_020ceacc(unk32 *param1, unk32 param2, Vec3p *param3, unk32 param4);
+ARM void LinkStateMove::vfunc_1c() {
+ Actor *grabActor = this->GetGrabActor();
+ Vec3p sp4C;
+ s32 temp_r7 = GetLinkStateFollow()->func_ov00_020a9180(&sp4C);
+ s32 temp_r0 = UnkStruct_02037750::GetLinkStateInteract()->func_ov00_020ab770(&sp4C);
+ bool var_r9;
+ if ((temp_r0 == 0) && (temp_r7 == 0)) {
+ var_r9 = false;
+ } else {
+ var_r9 = true;
+ }
+ LinkStateDamage *damage = (LinkStateDamage *) GetLinkState(LinkStateId_Damage);
+ if (damage->vfunc_20(var_r9) != 0) {
+ this->ChangeLinkState(LinkStateId_Damage);
+ return;
+ }
+ if ((gAdventureFlags->func_ov00_02097738() == 0) && (data_027e0d38->mUnk_14 != 1)) {
+ LinkStateInteract *interact = (LinkStateInteract *) GetLinkState(LinkStateId_Interact);
+ if (interact->vfunc_20(var_r9) != 0) {
+ this->ChangeLinkState(LinkStateId_Interact);
+ return;
+ }
+ LinkStateFollow *follow = (LinkStateFollow *) GetLinkState(LinkStateId_Follow);
+ if (follow->vfunc_20(var_r9) != 0) {
+ this->ChangeLinkState(LinkStateId_Follow);
+ return;
+ }
+ LinkStateRoll *roll = (LinkStateRoll *) GetLinkState(LinkStateId_Roll);
+ if (roll->vfunc_20(var_r9) != 0) {
+ this->ChangeLinkState(LinkStateId_Roll);
+ return;
+ }
+ LinkStateItem *item = (LinkStateItem *) GetLinkState(LinkStateId_Item);
+ if (item->vfunc_20(var_r9) != 0) {
+ this->ChangeLinkState(LinkStateId_Item);
+ return;
+ }
+ }
+ if ((temp_r0 == 2) || (temp_r7 == 8)) {
+ this->UpdateSwordShieldInUse();
+ } else {
+ if ((temp_r0 == 3) || (temp_r0 == 4) || (temp_r0 == 5) || (temp_r7 == 3) || (temp_r7 == 4) || (temp_r7 == 5) ||
+ (temp_r7 == 9) || ((temp_r7 - 0xD) <= 1U))
+ {
+ this->EquipItem_vfunc_28();
+ }
+ }
+ if (data_027e0618 != 6) {
+ s32 temp_r7_2 = gPlayerControl->func_ov00_020b0418();
+ if ((this->func_ov00_020a8f2c() == 0) && (temp_r7_2 > 0)) {
+ mUnk_0c = temp_r7_2;
+ }
+ if (mUnk_0c > 0) {
+
+ q4 temp_r8 = data_ov005_02112be4;
+ s16 temp_r1 = *this->GetPlayerAngle() + this->Get_PlayerControlData_Unk32();
+ this->TurnTo(temp_r1, temp_r1, temp_r8);
+ s32 temp_r1_2 = mUnk_0c;
+ if (temp_r7_2 > temp_r1_2) {
+ temp_r1_2 = temp_r7_2 - temp_r1_2;
+ Lerp(&mUnk_0c, temp_r7_2 + temp_r1_2, data_ov005_02112bec, MUL_Q20(data_ov005_02112be8, data_ov005_02112bec),
+ 0x7FFFFFFF);
+ if (mUnk_0c > FLOAT_TO_Q20(1.0)) {
+ mUnk_0c = FLOAT_TO_Q20(1.0);
+ }
+ } else {
+ Lerp(&mUnk_0c, temp_r7_2, data_ov000_020e56f0, MUL_Q20(data_ov005_02112be8, data_ov000_020e56f0), 0x7FFFFFFF);
+ }
+ }
+ }
+ s32 var_r4;
+ if (mUnk_16 != 1) {
+ if (var_r9 != 0) {
+ Vec3p sp40 = {0, 0, 0};
+ sp40.x = sp4C.x - this->GetPlayerPos()->x;
+ sp40.z = sp4C.z - this->GetPlayerPos()->z;
+ if (Vec3p_Length(&sp40) > FLOAT_TO_Q20(0.2)) {
+ var_r4 = this->func_ov005_0210f808(FLOAT_TO_Q20(1.0), &sp4C, grabActor != NULL);
+ } else {
+ gPlayerControl->StopFollowing();
+ }
+ } else {
+ s32 temp_r1_3 = gPlayerControl->func_ov00_020b034c();
+ var_r4 = this->func_ov005_0210f808(temp_r1_3, NULL, grabActor != NULL);
+ if (gAdventureFlags->func_ov00_02097750() == 0) {
+ UnkFilterActor filter;
+ filter.mActor = NULL;
+ filter.mUnk_08 = FLOAT_TO_Q20(4.0);
+ Vec3p pos = *this->GetPlayerPos();
+ filter.mPos = pos;
+ filter.mAngle = *this->GetPlayerAngle();
+ if (gActorManager->FilterActors(&filter, NULL) > 0) {
+ q20 temp_r1_4 = FLOAT_TO_Q20(4.0) - filter.mUnk_08;
+ Vec3p spC = filter.mActor->mPos;
+ spC.y += filter.mActor->mYOffset;
+ q20 var_r2 = MUL_Q20(temp_r1_4, FLOAT_TO_Q20(0.25)) + FLOAT_TO_Q20(0.1);
+ if (var_r2 >= FLOAT_TO_Q20(1.0)) {
+ var_r2 = FLOAT_TO_Q20(1.0);
+ }
+ this->func_ov00_020a81fc(&spC, var_r2);
+ this->func_ov005_021113d0();
+ }
+ }
+ if (mUnk_12 > 0) {
+ this->func_ov005_021107fc();
+ mUnk_12 -= 1;
+ } else if ((this->Get_PlayerLinkBase_Unk5e() != 0) && (var_r4 == 0)) {
+ this->func_ov00_020a8294(0, FLOAT_TO_Q20(0.2));
+ this->func_ov00_020a827c(0, FLOAT_TO_Q20(0.2));
+ }
+ if ((grabActor != NULL) && (grabActor->mType == ActorTypeId_Cucco)) {
+ if (this->func_ov00_020a8b80() != 0) {
+ mUnk_10 = 0x19;
+ } else if (mUnk_10 > 0) {
+ *(unk16 *) ((u32) this->func_ov00_020a8d40() + 0xa8) = 0x4CD;
+ if (mUnk_10 == 0x19) {
+ func_ov000_020ceacc(&data_027e0ffc, 0x23D, this->GetPlayerPos(), 0);
+ }
+ mUnk_10 -= 1;
+ } else {
+ LinkStateInteract *interact = UnkStruct_02037750::GetLinkStateInteract();
+ interact->SetGrabActorVelocity(this->GetPlayerVel());
+ }
+ }
+ }
+ }
+ if (this->GetGrabActor() == NULL) {
+ if (var_r4 <= data_ov005_02112bf0.x) {
+ this->func_ov005_021112ec();
+ }
+ if (mUnk_15) {
+ if (!mUnk_16) {
+ this->func_ov00_020a8a4c(&data_ov005_021123ac, 0);
+ this->func_ov00_020a8ad0(0);
+ mUnk_16 = true;
+ } else if (mUnk_0c > 0) {
+ q20 temp_r4 = data_ov005_021123b8;
+ if (this->func_ov00_020a8d6c() >= temp_r4) {
+ this->func_ov00_020a8ad0(this->func_ov00_020a8d6c() - (temp_r4 - FLOAT_TO_Q20(7.0)));
+ }
+ } else {
+ mUnk_15 = false;
+ mUnk_16 = false;
+ }
+ }
+ ActorRef sp4;
+ this->PlayerLinkBase_vfunc_58(0, &sp4);
+ return;
+ }
+ this->PlayerLinkBase_vfunc_58(1, this->GetGrabActorRef());
+}
+
+ARM bool LinkStateMove::vfunc_3c() {
+ if ((gPlayerControl->GetFollowActor() == NULL) && (gPlayerControl->mFollowActor == NULL) &&
+ (this->Get_PlayerControlData_Unk120() != 2) && (this->Get_PlayerControlData_Unk120() != 3))
+ {
+ return true;
+ }
+ return false;
+}
+
+ARM bool UnkFilterActor::Filter(Actor *actor) {
+ if (!actor->mVisible) {
+ return false;
+ }
+
+ s32 temp_r0 = actor->mUnk_12c;
+ if ((temp_r0 != 2) && (temp_r0 != 5)) {
+ return false;
+ }
+
+ Vec3p sp0;
+ Vec3p_Sub(&actor->mPos, &mPos, &sp0);
+ s16 angle2 = mAngle;
+ s16 angle1 = (s16) Atan2(sp0.x, sp0.z);
+ s32 var_r6 = (s16) (angle1 - angle2) >> 3;
+ if (var_r6 < 0) {
+ var_r6 = -var_r6;
+ }
+
+ q20 length = Vec3p_Length(&sp0);
+ s32 temp_r2 = length + MUL_Q20(var_r6, FLOAT_TO_Q20(4.0));
+ if (temp_r2 < mUnk_08) {
+ mActor = actor;
+ mUnk_08 = temp_r2;
+ return true;
+ }
+
+ return false;
+}
diff --git a/src/Main/Player/LinkState.cpp b/src/Main/Player/LinkState.cpp
index b5e5621e..940f126e 100644
--- a/src/Main/Player/LinkState.cpp
+++ b/src/Main/Player/LinkState.cpp
@@ -1,5 +1,5 @@
#include "Player/LinkStateBase.hpp"
-LinkStateBase *GetLinkState(s32 index) {
+LinkStateBase *GetLinkState(LinkStateId index) {
return gLinkStates[index];
}