From e66cbc23e1c80e904451558317d2eba3524fcb41 Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 22 May 2025 21:39:25 +0200 Subject: [PATCH] Match `LinkStateMove` in overlay 5 --- config/eur/arm9/overlays/ov000/symbols.txt | 8 +- config/eur/arm9/overlays/ov005/delinks.txt | 5 + config/eur/arm9/overlays/ov005/relocs.txt | 2 +- config/eur/arm9/overlays/ov005/symbols.txt | 12 +- config/eur/arm9/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 8 +- config/usa/arm9/overlays/ov005/delinks.txt | 6 + config/usa/arm9/overlays/ov005/relocs.txt | 2 +- config/usa/arm9/overlays/ov005/symbols.txt | 12 +- config/usa/arm9/symbols.txt | 2 +- include/Player/LinkStateBase.hpp | 22 +- include/Player/LinkStateDamage.hpp | 1 + include/Player/LinkStateMove.hpp | 2 + include/Unknown/UnkStruct_02037750.hpp | 2 +- src/00_Core/Player/LinkStateBase.cpp | 6 +- src/00_Core/Player/LinkStateMove.cpp | 2 +- src/05/Player/LinkStateMove.cpp | 247 ++++++++++++++++++++- src/Main/Player/LinkState.cpp | 2 +- 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]; }