From 24e81bf19c0d060a55ce2eb07104f2499787a5d9 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 8 Jul 2025 20:36:39 +0200 Subject: [PATCH 1/9] match `LinkStateBase::vfunc_24` --- include/DTCM/UnkStruct_027e0f64.hpp | 7 +- include/Player/LinkStateBase.hpp | 3 +- src/00_Core/Player/LinkStateBase.cpp | 231 +++++++++++++++++---------- 3 files changed, 156 insertions(+), 85 deletions(-) diff --git a/include/DTCM/UnkStruct_027e0f64.hpp b/include/DTCM/UnkStruct_027e0f64.hpp index 975c68186..31e09426f 100644 --- a/include/DTCM/UnkStruct_027e0f64.hpp +++ b/include/DTCM/UnkStruct_027e0f64.hpp @@ -5,10 +5,15 @@ #include "Debug/DebugHierarchy.hpp" +struct UnkStruct_027e0f64_04 { + /* 000 */ unk8 mUnk_00[0x15c]; + /* 15c */ unk32 mUnk_15c; +}; + class UnkStruct_027e0f64 { public: /* 0 */ DebugHierarchyBase *mUnk_0; - /* 4 */ void *mUnk_4; + /* 4 */ UnkStruct_027e0f64_04 *mUnk_4; /* 8 */ void *mUnk_8; /* c */ diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 8f5ebd6cf..781d0fca3 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -6,6 +6,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorManager.hpp" +#include "DTCM/UnkStruct_027e0fd4.hpp" #include "Debug/DebugHierarchy.hpp" #include "Player/EquipItem.hpp" #include "Player/PlayerControlData.hpp" @@ -124,7 +125,7 @@ class LinkStateBase : public SysObject { s32 Get_PlayerLinkBase_Unk44(); bool IsEquipBeingUsed(ItemFlag id); EquipItem *GetEquipItem(ItemFlag id); - void *func_ov00_020a8d40(); + UnkStruct_027e0fd4 *func_ov00_020a8d40(); unk32 func_ov00_020a8d50(); unk32 func_ov00_020a8d6c(); s32 PlayerControlData_vfunc_14(s32 param1); diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index a750d2768..78cd572ec 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -1,85 +1,150 @@ #include "Player/LinkStateBase.hpp" +#include "DTCM/UnkStruct_027e0f64.hpp" +#include "Message/MessageManager.hpp" +#include "Player/PlayerControl.hpp" -void LinkStateBase::vfunc_00() {} -void LinkStateBase::OnStateEnter() {} -void LinkStateBase::OnStateLeave(s32 param1) {} -bool LinkStateBase::vfunc_20(s32 param1) {} -bool LinkStateBase::vfunc_24(s32 param1) {} -bool LinkStateBase::vfunc_28() {} -bool LinkStateBase::vfunc_34(Vec3p *param1) {} -void LinkStateBase::GiveControlToLink() {} -void LinkStateBase::SetPlayerCharacter(PlayerCharacter character) {} -void LinkStateBase::ChangeLinkState(LinkStateId id) {} -void LinkStateBase::ChangeLinkSubState(LinkStateId id, s32 subState) {} -void LinkStateBase::EquipItem_vfunc_28() {} -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(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) {} -void LinkStateBase::func_ov00_020a827c(s32 param1, u32 param2) {} -void LinkStateBase::func_ov00_020a8294(s32 param1, u32 param2) {} -void LinkStateBase::func_ov00_020a82ac() {} -void LinkStateBase::ApplyImpulse(s32 angle, s32 power) {} -void LinkStateBase::func_ov00_020a8360(unk32 param1) {} -void LinkStateBase::func_ov00_020a8390(unk32 param1, void *param2) {} -void LinkStateBase::func_ov00_020a84bc(s32 param1) {} -void LinkStateBase::func_ov00_020a8508() {} -void LinkStateBase::func_ov00_020a853c(Vec3p *param1) {} -void LinkStateBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) {} -void LinkStateBase::PlayerBase_vfunc_38(Vec3p *pos) {} -void LinkStateBase::PlayerLinkBase_vfunc_74() {} -void LinkStateBase::PlayerLinkBase_vfunc_88() {} -unk16 LinkStateBase::Get_PlayerLinkBase_Unk48() {} -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(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) {} -void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) {} -void LinkStateBase::func_ov00_020a8994() {} -void LinkStateBase::func_ov00_020a89bc(LinkStateBase_UnkStruct1 *param1, unk32 param2) {} -void LinkStateBase::func_ov00_020a8a08(unk32 param1) {} -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) {} -void LinkStateBase::func_ov00_020a8b04(s32 param1, bool param2) {} -unk32 LinkStateBase::func_ov00_020a8b3c(s32 param1) {} -bool LinkStateBase::func_ov00_020a8b80() {} -bool LinkStateBase::HasFlags_PlayerLinkBase_Unk48(u16 flags) {} -unk8 LinkStateBase::Get_PlayerLinkBase_Unk5e() {} -unk32 LinkStateBase::Get_PlayerControlData_Unk004() {} -PlayerCharacter LinkStateBase::GetCurrentCharacter() {} -PlayerControlData *LinkStateBase::GetPlayerControlData() {} -LinkStateId LinkStateBase::GetStateId() {} -s32 LinkStateBase::GetHealth() {} -s32 LinkStateBase::GetCurrentCharacterHealth() {} -bool LinkStateBase::func_ov00_020a8c34() {} -Vec3p *LinkStateBase::GetPlayerPos() {} -Vec3p *LinkStateBase::GetPlayerVel() {} -unk8 *LinkStateBase::func_ov00_020a8c64() {} -s16 *LinkStateBase::GetPlayerAngle() {} -void *LinkStateBase::GetPlayer_Unk18() {} -s32 LinkStateBase::Get_PlayerControlData_Unk32() {} -Actor *LinkStateBase::GetGrabActor() {} -ActorRef *LinkStateBase::GetGrabActorRef() {} -unk32 LinkStateBase::Grab() {} -s32 LinkStateBase::Get_PlayerLinkBase_Unk44() {} -bool LinkStateBase::IsEquipBeingUsed(ItemFlag id) {} -EquipItem *LinkStateBase::GetEquipItem(ItemFlag id) {} -void *LinkStateBase::func_ov00_020a8d40() {} -unk32 LinkStateBase::func_ov00_020a8d50() {} -unk32 LinkStateBase::func_ov00_020a8d6c() {} -s32 LinkStateBase::PlayerControlData_vfunc_14(s32 param1) {} -unk32 LinkStateBase::Get_PlayerControlData_Unk100() {} -unk32 LinkStateBase::Get_PlayerControlData_Unk120() {} -s32 LinkStateBase::Get_PlayerLinkBase_Unk38() {} -DebugHierarchy *LinkStateBase::GetDebugHierarchy0() {} -DebugHierarchy *LinkStateBase::GetDebugHierarchy1() {} +THUMB void LinkStateBase::vfunc_00() {} + +ARM void LinkStateBase::OnStateEnter() {} + +ARM void LinkStateBase::OnStateLeave(s32 param1) {} + +ARM bool LinkStateBase::vfunc_20(s32 param1) { + return false; +} + +ARM bool LinkStateBase::vfunc_24(s32 param1) { + bool bVar1; + bool bVar2; + + bVar1 = false; + bVar2 = false; + + if (this->func_ov00_020a8b80()) { + UnkStruct_027e0fd4 *pUnkStruct_027e0fd4 = this->func_ov00_020a8d40(); + + if (pUnkStruct_027e0fd4->mUnk_0c8 < 0) { + bVar2 = true; + } + } + + if (bVar2 && this->mLink->mUnk_5a <= 0) { + bVar1 = true; + } + + switch (param1) { + case 0: break; + case 1: break; + case 2: break; + case 3: + case 6: + case 7: + if (bVar1 && PlayerControl::func_ov00_020aeeac()) { + return true; + } + + return false; + case 5: + if (bVar1 && !this->HasFlags_PlayerLinkBase_Unk48(0x3F) && PlayerControl::func_ov00_020aeeac()) { + return true; + } + + return false; + case 4: + if (gAdventureFlags->func_ov00_02097bbc()) { + return false; + } + + if (gMessageManager.mUnk_04 == 0 && data_027e0f64->mUnk_4->mUnk_15c == 4) { + return false; + } + + if (bVar1 && gPlayerControl->func_ov00_020af4a4()) { + return true; + } + + return false; + default: break; + } + + return true; +} + +ARM bool LinkStateBase::vfunc_28() {} +ARM bool LinkStateBase::vfunc_34(Vec3p *param1) {} +ARM void LinkStateBase::GiveControlToLink() {} +ARM void LinkStateBase::SetPlayerCharacter(PlayerCharacter character) {} +ARM void LinkStateBase::ChangeLinkState(LinkStateId id) {} +ARM void LinkStateBase::ChangeLinkSubState(LinkStateId id, s32 subState) {} +ARM void LinkStateBase::EquipItem_vfunc_28() {} +ARM void LinkStateBase::UpdateSwordShieldInUse() {} +ARM void LinkStateBase::func_ov00_020a81b8(unk32 param1, unk32 param2) {} +ARM LinkStateItem *LinkStateBase::GetLinkItemState() {} +ARM void LinkStateBase::LookAt(Vec3p *target) {} +ARM void LinkStateBase::func_ov00_020a81fc(Vec3p *param1, unk32 param2) {} +ARM void LinkStateBase::AddHealth(s16 amount) {} +ARM void LinkStateBase::func_ov00_020a8224(unk32 param1) {} +ARM void LinkStateBase::TurnTo(s16 angle, unk32 param2, unk32 speed) {} +ARM void LinkStateBase::func_ov00_020a827c(s32 param1, u32 param2) {} +ARM void LinkStateBase::func_ov00_020a8294(s32 param1, u32 param2) {} +ARM void LinkStateBase::func_ov00_020a82ac() {} +ARM void LinkStateBase::ApplyImpulse(s32 angle, s32 power) {} +ARM void LinkStateBase::func_ov00_020a8360(unk32 param1) {} +ARM void LinkStateBase::func_ov00_020a8390(unk32 param1, void *param2) {} +ARM void LinkStateBase::func_ov00_020a84bc(s32 param1) {} +ARM void LinkStateBase::func_ov00_020a8508() {} +ARM void LinkStateBase::func_ov00_020a853c(Vec3p *param1) {} +ARM void LinkStateBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) {} +ARM void LinkStateBase::PlayerBase_vfunc_38(Vec3p *pos) {} +ARM void LinkStateBase::PlayerLinkBase_vfunc_74() {} +ARM void LinkStateBase::PlayerLinkBase_vfunc_88() {} +ARM unk16 LinkStateBase::Get_PlayerLinkBase_Unk48() {} +ARM bool LinkStateBase::func_ov00_020a8638(unk32 param1) {} +ARM void LinkStateBase::Clear_PlayerLinkBase_Unk48(u16 flags) {} +ARM void LinkStateBase::func_ov00_020a8680(unk32 param1, unk16 param2, bool param3) {} +ARM void LinkStateBase::PlayerLinkBase_func_ov00_020bccc8() {} +ARM bool LinkStateBase::PlayerLinkBase_vfunc_58(unk32 param1, ActorRef *param2) {} +ARM bool LinkStateBase::func_ov00_020a8704(s16 *pAngle) {} +ARM bool LinkStateBase::func_ov00_020a8774(Vec3p *param1, s32 angle) {} +ARM void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool param3) {} +ARM void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) {} +ARM void LinkStateBase::func_ov00_020a8994() {} +ARM void LinkStateBase::func_ov00_020a89bc(LinkStateBase_UnkStruct1 *param1, unk32 param2) {} +ARM void LinkStateBase::func_ov00_020a8a08(unk32 param1) {} +ARM void LinkStateBase::func_ov00_020a8a4c(const void *param1, unk32 param2) {} +ARM void LinkStateBase::func_ov00_020a8a90(unk32 param1) {} +ARM void LinkStateBase::func_ov00_020a8ab0(unk32 param1) {} +ARM void LinkStateBase::func_ov00_020a8ad0(unk32 param1) {} +ARM void LinkStateBase::func_ov00_020a8b04(s32 param1, bool param2) {} +ARM unk32 LinkStateBase::func_ov00_020a8b3c(s32 param1) {} +ARM bool LinkStateBase::func_ov00_020a8b80() {} +ARM bool LinkStateBase::HasFlags_PlayerLinkBase_Unk48(u16 flags) {} +ARM unk8 LinkStateBase::Get_PlayerLinkBase_Unk5e() {} +ARM unk32 LinkStateBase::Get_PlayerControlData_Unk004() {} +ARM PlayerCharacter LinkStateBase::GetCurrentCharacter() {} +ARM PlayerControlData *LinkStateBase::GetPlayerControlData() {} +ARM LinkStateId LinkStateBase::GetStateId() {} +ARM s32 LinkStateBase::GetHealth() {} +ARM s32 LinkStateBase::GetCurrentCharacterHealth() {} +ARM bool LinkStateBase::func_ov00_020a8c34() {} +ARM Vec3p *LinkStateBase::GetPlayerPos() {} +ARM Vec3p *LinkStateBase::GetPlayerVel() {} +ARM unk8 *LinkStateBase::func_ov00_020a8c64() {} +ARM s16 *LinkStateBase::GetPlayerAngle() {} +ARM void *LinkStateBase::GetPlayer_Unk18() {} +ARM s32 LinkStateBase::Get_PlayerControlData_Unk32() {} +ARM Actor *LinkStateBase::GetGrabActor() {} +ARM ActorRef *LinkStateBase::GetGrabActorRef() {} +ARM unk32 LinkStateBase::Grab() {} +ARM s32 LinkStateBase::Get_PlayerLinkBase_Unk44() {} +ARM bool LinkStateBase::IsEquipBeingUsed(ItemFlag id) {} +ARM EquipItem *LinkStateBase::GetEquipItem(ItemFlag id) {} +ARM UnkStruct_027e0fd4 *LinkStateBase::func_ov00_020a8d40() {} +ARM unk32 LinkStateBase::func_ov00_020a8d50() {} +ARM unk32 LinkStateBase::func_ov00_020a8d6c() {} +ARM s32 LinkStateBase::PlayerControlData_vfunc_14(s32 param1) {} +ARM unk32 LinkStateBase::Get_PlayerControlData_Unk100() {} +ARM unk32 LinkStateBase::Get_PlayerControlData_Unk120() {} +ARM s32 LinkStateBase::Get_PlayerLinkBase_Unk38() {} +ARM DebugHierarchy *LinkStateBase::GetDebugHierarchy0() {} +ARM DebugHierarchy *LinkStateBase::GetDebugHierarchy1() {} From e071f23310a00ef68b8881102f917b71e3706b4f Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 8 Jul 2025 23:31:30 +0200 Subject: [PATCH 2/9] decomp up to PlayerLinkBase_func_ov00_020bccc8 (51% total) --- config/eur/arm9/overlays/ov000/symbols.txt | 16 +- config/eur/arm9/overlays/ov023/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 18 +- config/usa/arm9/overlays/ov023/symbols.txt | 2 +- include/Actor/ActorSpawner.hpp | 2 + include/Player/EquipShield.hpp | 12 +- include/Player/EquipSword.hpp | 3 +- include/Player/LinkStateBase.hpp | 19 +- include/Player/PlayerBase.hpp | 4 +- include/Player/PlayerControlData.hpp | 2 +- include/Player/PlayerLinkBase.hpp | 12 +- src/00_Core/Player/LinkStateBase.cpp | 254 ++++++++++++++++++--- src/00_Core/Player/PlayerControlData.cpp | 2 +- src/00_Core/Player/PlayerLinkBase.cpp | 6 +- 14 files changed, 276 insertions(+), 78 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 97208bfba..390c8938f 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1890,7 +1890,7 @@ _ZN13LinkStateBase15ChangeLinkStateEi kind:function(arm,size=0x10) addr:0x020a81 _ZN13LinkStateBase18ChangeLinkSubStateEii kind:function(arm,size=0x10) addr:0x020a8148 _ZN13LinkStateBase18EquipItem_vfunc_28Ev kind:function(arm,size=0x48) addr:0x020a8158 _ZN13LinkStateBase22UpdateSwordShieldInUseEv kind:function(arm,size=0x18) addr:0x020a81a0 -_ZN13LinkStateBase18func_ov00_020a81b8Eii kind:function(arm,size=0x24) addr:0x020a81b8 +_ZN13LinkStateBase18func_ov00_020a81b8EiPi kind:function(arm,size=0x24) addr:0x020a81b8 _ZN13LinkStateBase16GetLinkItemStateEv kind:function(arm,size=0x10) addr:0x020a81dc _ZN13LinkStateBase6LookAtEP5Vec3p kind:function(arm,size=0x10) addr:0x020a81ec _ZN13LinkStateBase18func_ov00_020a81fcEP5Vec3pi kind:function(arm,size=0x10) addr:0x020a81fc @@ -1901,13 +1901,13 @@ _ZN13LinkStateBase18func_ov00_020a827cEij kind:function(arm,size=0x18) addr:0x02 _ZN13LinkStateBase18func_ov00_020a8294Eij kind:function(arm,size=0x18) addr:0x020a8294 _ZN13LinkStateBase18func_ov00_020a82acEv kind:function(arm,size=0x18) addr:0x020a82ac _ZN13LinkStateBase12ApplyImpulseEii kind:function(arm,size=0x9c) addr:0x020a82c4 -_ZN13LinkStateBase18func_ov00_020a8360Ei kind:function(arm,size=0x30) addr:0x020a8360 -_ZN13LinkStateBase18func_ov00_020a8390EiPv kind:function(arm,size=0x12c) addr:0x020a8390 -_ZN13LinkStateBase18func_ov00_020a84bcEi kind:function(arm,size=0x4c) addr:0x020a84bc -_ZN13LinkStateBase18func_ov00_020a8508Ev kind:function(arm,size=0x34) addr:0x020a8508 +_ZN13LinkStateBase18func_ov00_020a8360Ej kind:function(arm,size=0x30) addr:0x020a8360 +_ZN13LinkStateBase18func_ov00_020a8390EjP19Actor_UnkStruct_020 kind:function(arm,size=0x12c) addr:0x020a8390 +_ZN13LinkStateBase18func_ov00_020a84bcEb kind:function(arm,size=0x4c) addr:0x020a84bc +_ZN13LinkStateBase18func_ov00_020a8508Ei kind:function(arm,size=0x34) addr:0x020a8508 _ZN13LinkStateBase18func_ov00_020a853cEP5Vec3p kind:function(arm,size=0x70) addr:0x020a853c _ZN13LinkStateBase8TeleportEP5Vec3psibb kind:function(arm,size=0x34) addr:0x020a85ac -_ZN13LinkStateBase19PlayerBase_vfunc_38EP5Vec3p kind:function(arm,size=0x1c) addr:0x020a85e0 +_ZN13LinkStateBase18TeleportToEntranceEP5Vec3p kind:function(arm,size=0x1c) addr:0x020a85e0 _ZN13LinkStateBase23PlayerLinkBase_vfunc_74Ev kind:function(arm,size=0x18) addr:0x020a85fc _ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ev kind:function(arm,size=0x18) addr:0x020a8614 _ZN13LinkStateBase24Get_PlayerLinkBase_Unk48Ev kind:function(arm,size=0xc) addr:0x020a862c @@ -2565,7 +2565,7 @@ _ZN14PlayerLinkBase19func_ov000_020bc808Ev kind:function(arm,size=0x44) addr:0x0 _ZN14PlayerLinkBase19func_ov000_020bc84cEv kind:function(arm,size=0x8) addr:0x020bc84c _ZN14PlayerLinkBase19func_ov000_020bc854EP5Vec3p kind:function(arm,size=0x64) addr:0x020bc854 _ZN14PlayerLinkBase13UpdateTilePosEP5Vec3pi kind:function(arm,size=0x54) addr:0x020bc8b8 -_ZN14PlayerLinkBase19func_ov000_020bc90cEPii kind:function(arm,size=0x54) addr:0x020bc90c +_ZN14PlayerLinkBase19func_ov000_020bc90cEP5Vec3pi kind:function(arm,size=0x54) addr:0x020bc90c _ZN14PlayerLinkBase19func_ov000_020bc960Eiii kind:function(arm,size=0xec) addr:0x020bc960 _ZN14PlayerLinkBase22TeleportToLastEntranceEb kind:function(thumb,size=0x48) addr:0x020bca4c _ZN14PlayerLinkBase18TeleportToEntranceEib kind:function(arm,size=0x44) addr:0x020bca94 @@ -2594,7 +2594,7 @@ _ZN14PlayerLinkBase19func_ov000_020bd304Ev kind:function(arm,size=0x14) addr:0x0 _ZN14PlayerLinkBase19func_ov000_020bd318Ev kind:function(arm,size=0x48) addr:0x020bd318 _ZN14PlayerLinkBase8vfunc_7cEv kind:function(arm,size=0x4) addr:0x020bd360 _ZN14PlayerLinkBase18SetPlayerCharacterEi kind:function(arm,size=0x4c) addr:0x020bd364 -_ZN14PlayerLinkBase19func_ov000_020bd3b0Eiiis kind:function(arm,size=0x128) addr:0x020bd3b0 +_ZN14PlayerLinkBase19func_ov000_020bd3b0EiP8ActorRefis kind:function(arm,size=0x128) addr:0x020bd3b0 _ZN14PlayerLinkBase11SetPositionEP5Vec3p kind:function(arm,size=0x24) addr:0x020bd4d8 _ZN14PlayerLinkBase8SetAngleEPs kind:function(arm,size=0x14) addr:0x020bd4fc _ZN14PlayerLinkBase19func_ov000_020bd510EiPi kind:function(arm,size=0xe0) addr:0x020bd510 diff --git a/config/eur/arm9/overlays/ov023/symbols.txt b/config/eur/arm9/overlays/ov023/symbols.txt index d3ad83e17..fae1acc00 100644 --- a/config/eur/arm9/overlays/ov023/symbols.txt +++ b/config/eur/arm9/overlays/ov023/symbols.txt @@ -271,7 +271,7 @@ func_ov023_02177a88 kind:function(arm,size=0x1c) addr:0x02177a88 func_ov023_02177aa4 kind:function(arm,size=0xa8) addr:0x02177aa4 func_ov023_02177b4c kind:function(arm,size=0x4) addr:0x02177b4c func_ov023_02177b50 kind:function(arm,size=0x50) addr:0x02177b50 -func_ov023_02177ba0 kind:function(arm,size=0x284) addr:0x02177ba0 +_ZN13LinkStateBase19func_ov023_02177ba0EP5Vec3p kind:function(arm,size=0x284) addr:0x02177ba0 func_ov023_02177e24 kind:function(arm,size=0x3c) addr:0x02177e24 func_ov023_02177e60 kind:function(arm,size=0x1c) addr:0x02177e60 _ZN10PlayerLink19func_ov023_02177e7cEv kind:function(arm,size=0x8) addr:0x02177e7c diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 60e20642c..b10ff082d 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1890,7 +1890,7 @@ _ZN13LinkStateBase15ChangeLinkStateEi kind:function(arm,size=0x10) addr:0x020a80 _ZN13LinkStateBase18ChangeLinkSubStateEii kind:function(arm,size=0x10) addr:0x020a80e8 _ZN13LinkStateBase18EquipItem_vfunc_28Ev kind:function(arm,size=0x48) addr:0x020a80f8 _ZN13LinkStateBase22UpdateSwordShieldInUseEv kind:function(arm,size=0x18) addr:0x020a8140 -_ZN13LinkStateBase18func_ov00_020a81b8Eii kind:function(arm,size=0x24) addr:0x020a8158 +_ZN13LinkStateBase18func_ov00_020a81b8EiPi kind:function(arm,size=0x24) addr:0x020a8158 _ZN13LinkStateBase16GetLinkItemStateEv kind:function(arm,size=0x10) addr:0x020a817c _ZN13LinkStateBase6LookAtEP5Vec3p kind:function(arm,size=0x10) addr:0x020a818c _ZN13LinkStateBase18func_ov00_020a81fcEP5Vec3pi kind:function(arm,size=0x10) addr:0x020a819c @@ -1901,13 +1901,13 @@ _ZN13LinkStateBase18func_ov00_020a827cEij kind:function(arm,size=0x18) addr:0x02 _ZN13LinkStateBase18func_ov00_020a8294Eij kind:function(arm,size=0x18) addr:0x020a8234 _ZN13LinkStateBase18func_ov00_020a82acEv kind:function(arm,size=0x18) addr:0x020a824c _ZN13LinkStateBase12ApplyImpulseEii kind:function(arm,size=0x9c) addr:0x020a8264 -_ZN13LinkStateBase18func_ov00_020a8360Ei kind:function(arm,size=0x30) addr:0x020a8300 -_ZN13LinkStateBase18func_ov00_020a8390EiPv kind:function(arm,size=0x12c) addr:0x020a8330 -_ZN13LinkStateBase18func_ov00_020a84bcEi kind:function(arm,size=0x4c) addr:0x020a845c -_ZN13LinkStateBase18func_ov00_020a8508Ev kind:function(arm,size=0x34) addr:0x020a84a8 +_ZN13LinkStateBase18func_ov00_020a8360Ej kind:function(arm,size=0x30) addr:0x020a8300 +_ZN13LinkStateBase18func_ov00_020a8390EjP19Actor_UnkStruct_020 kind:function(arm,size=0x12c) addr:0x020a8330 +_ZN13LinkStateBase18func_ov00_020a84bcEb kind:function(arm,size=0x4c) addr:0x020a845c +_ZN13LinkStateBase18func_ov00_020a8508Ei kind:function(arm,size=0x34) addr:0x020a84a8 _ZN13LinkStateBase18func_ov00_020a853cEP5Vec3p kind:function(arm,size=0x70) addr:0x020a84dc _ZN13LinkStateBase8TeleportEP5Vec3psibb kind:function(arm,size=0x34) addr:0x020a854c -_ZN13LinkStateBase19PlayerBase_vfunc_38EP5Vec3p kind:function(arm,size=0x1c) addr:0x020a8580 +_ZN13LinkStateBase18TeleportToEntranceEP5Vec3p kind:function(arm,size=0x1c) addr:0x020a8580 _ZN13LinkStateBase23PlayerLinkBase_vfunc_74Ev kind:function(arm,size=0x18) addr:0x020a859c _ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ev kind:function(arm,size=0x18) addr:0x020a85b4 _ZN13LinkStateBase24Get_PlayerLinkBase_Unk48Ev kind:function(arm,size=0xc) addr:0x020a85cc @@ -2553,7 +2553,7 @@ _ZN14PlayerLinkBase19func_ov000_020bc320Eiii kind:function(arm,size=0x78) addr:0 _ZN14PlayerLinkBase19func_ov000_020bc398Eii kind:function(arm,size=0xd4) addr:0x020bc338 _ZN14PlayerLinkBase19GetCurrentCharacterEv kind:function(arm,size=0x20) addr:0x020bc40c _ZN14PlayerLinkBase9GetHealthEi kind:function(arm,size=0x8) addr:0x020bc42c -_ZN14PlayerLinkBase9AddHealthEsi kind:function(arm,size=0x18) addr:0x020bc434 +_ZN14PlayerLinkBase10AddHealth2Esi kind:function(arm,size=0x18) addr:0x020bc434 _ZN14PlayerLinkBase19func_ov000_020bc4acEv kind:function(arm,size=0x54) addr:0x020bc44c _ZN14PlayerLinkBase10GetStateIdEv kind:function(arm,size=0x20) addr:0x020bc4a0 _ZN14PlayerLinkBase19func_ov000_020bc520EP5Vec3p kind:function(arm,size=0x1b4) addr:0x020bc4c0 @@ -2565,7 +2565,7 @@ _ZN14PlayerLinkBase19func_ov000_020bc808Ev kind:function(arm,size=0x44) addr:0x0 _ZN14PlayerLinkBase19func_ov000_020bc84cEv kind:function(arm,size=0x8) addr:0x020bc7ec _ZN14PlayerLinkBase19func_ov000_020bc854EP5Vec3p kind:function(arm,size=0x64) addr:0x020bc7f4 _ZN14PlayerLinkBase13UpdateTilePosEP5Vec3pi kind:function(arm,size=0x54) addr:0x020bc858 -_ZN14PlayerLinkBase19func_ov000_020bc90cEPii kind:function(arm,size=0x54) addr:0x020bc8ac +_ZN14PlayerLinkBase19func_ov000_020bc90cEP5Vec3pi kind:function(arm,size=0x54) addr:0x020bc8ac _ZN14PlayerLinkBase19func_ov000_020bc960Eiii kind:function(arm,size=0xec) addr:0x020bc900 _ZN14PlayerLinkBase22TeleportToLastEntranceEb kind:function(thumb,size=0x48) addr:0x020bc9ec _ZN14PlayerLinkBase18TeleportToEntranceEib kind:function(arm,size=0x44) addr:0x020bca34 @@ -2594,7 +2594,7 @@ _ZN14PlayerLinkBase19func_ov000_020bd304Ev kind:function(arm,size=0x14) addr:0x0 _ZN14PlayerLinkBase19func_ov000_020bd318Ev kind:function(arm,size=0x48) addr:0x020bd2b8 _ZN14PlayerLinkBase8vfunc_7cEv kind:function(arm,size=0x4) addr:0x020bd300 _ZN14PlayerLinkBase18SetPlayerCharacterEi kind:function(arm,size=0x4c) addr:0x020bd304 -_ZN14PlayerLinkBase19func_ov000_020bd3b0Eiiis kind:function(arm,size=0x128) addr:0x020bd350 +_ZN14PlayerLinkBase19func_ov000_020bd3b0EiP8ActorRefis kind:function(arm,size=0x128) addr:0x020bd350 _ZN14PlayerLinkBase11SetPositionEP5Vec3p kind:function(arm,size=0x24) addr:0x020bd478 _ZN14PlayerLinkBase8SetAngleEPs kind:function(arm,size=0x14) addr:0x020bd49c _ZN14PlayerLinkBase19func_ov000_020bd510EiPi kind:function(arm,size=0xe0) addr:0x020bd4b0 diff --git a/config/usa/arm9/overlays/ov023/symbols.txt b/config/usa/arm9/overlays/ov023/symbols.txt index 4986a396d..873ee6955 100644 --- a/config/usa/arm9/overlays/ov023/symbols.txt +++ b/config/usa/arm9/overlays/ov023/symbols.txt @@ -271,7 +271,7 @@ func_ov023_02177a88 kind:function(arm,size=0x1c) addr:0x021779e8 func_ov023_02177aa4 kind:function(arm,size=0xa8) addr:0x02177a04 func_ov023_02177b4c kind:function(arm,size=0x4) addr:0x02177aac func_ov023_02177b50 kind:function(arm,size=0x50) addr:0x02177ab0 -func_ov023_02177ba0 kind:function(arm,size=0x284) addr:0x02177b00 +_ZN13LinkStateBase19func_ov023_02177ba0EP5Vec3p kind:function(arm,size=0x284) addr:0x02177b00 func_ov023_02177e24 kind:function(arm,size=0x3c) addr:0x02177d84 func_ov023_02177e60 kind:function(arm,size=0x1c) addr:0x02177dc0 _ZN10PlayerLink19func_ov023_02177e7cEv kind:function(arm,size=0x8) addr:0x02177ddc diff --git a/include/Actor/ActorSpawner.hpp b/include/Actor/ActorSpawner.hpp index e99bafb35..5146010f8 100644 --- a/include/Actor/ActorSpawner.hpp +++ b/include/Actor/ActorSpawner.hpp @@ -19,6 +19,8 @@ struct ActorSpawnOptions { /* 24 */ unk32 mUnk_24; /* 28 */ unk32 mUnk_28; /* 2c */ + + void func_ov000_020c3348(); }; class ActorSpawner : public SysObject { diff --git a/include/Player/EquipShield.hpp b/include/Player/EquipShield.hpp index 9da2599d1..0904363f9 100644 --- a/include/Player/EquipShield.hpp +++ b/include/Player/EquipShield.hpp @@ -4,10 +4,15 @@ #include "Player/EquipItem.hpp" -class EquipShield { -private: +class EquipShield : public EquipItem { +public: /* 00 (base) */ - /* 09 */ unk8 mUnk_09[7]; + /* 09 */ unk8 mUnk_09; + /* 0a */ unk8 mUnk_0a; + /* 0b */ unk8 mUnk_0b; + /* 0c */ unk8 mUnk_0c; + /* 0d */ unk8 mUnk_0d; + /* 0e */ unk16 mUnk_0e; /* 10 */ void *mUnk_10; /* 14 */ void *mUnk_14; /* 18 */ unk8 mUnk_18[4]; @@ -17,7 +22,6 @@ class EquipShield { /* 28 */ void *mUnk_28; /* 2c */ -public: EquipShield(); /* 00 */ virtual void vfunc_00() override; diff --git a/include/Player/EquipSword.hpp b/include/Player/EquipSword.hpp index 2a48d2177..7d3d99188 100644 --- a/include/Player/EquipSword.hpp +++ b/include/Player/EquipSword.hpp @@ -6,7 +6,7 @@ #include "Player/EquipRope.hpp" class EquipSword : public EquipItem { -private: +public: /* 00 (base) */ /* 09 */ unk8 mUnk_09[3]; // padding? /* 0c */ void *mUnk_0c; @@ -40,7 +40,6 @@ class EquipSword : public EquipItem { /* 6f */ unk8 mUnk_6f; /* 70 */ -public: EquipSword(); /* 00 */ virtual void vfunc_00() override; diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 781d0fca3..8c7882169 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -6,6 +6,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorManager.hpp" +#include "DTCM/UnkStruct_027e0d38.hpp" #include "DTCM/UnkStruct_027e0fd4.hpp" #include "Debug/DebugHierarchy.hpp" #include "Player/EquipItem.hpp" @@ -64,7 +65,7 @@ class LinkStateBase : public SysObject { void ChangeLinkSubState(LinkStateId id, s32 subState); void EquipItem_vfunc_28(); void UpdateSwordShieldInUse(); - void func_ov00_020a81b8(unk32 param1, unk32 param2); + void func_ov00_020a81b8(unk32 param1, s32 *param2); LinkStateItem *GetLinkItemState(); void LookAt(Vec3p *target); void func_ov00_020a81fc(Vec3p *param1, unk32 param2); @@ -75,16 +76,16 @@ class LinkStateBase : public SysObject { void func_ov00_020a8294(s32 param1, u32 param2); void func_ov00_020a82ac(); void ApplyImpulse(s32 angle, s32 power); - void func_ov00_020a8360(unk32 param1); - void func_ov00_020a8390(unk32 param1, void *param2); - void func_ov00_020a84bc(s32 param1); - void func_ov00_020a8508(); + void func_ov00_020a8360(ActorTypeId type); + Actor *func_ov00_020a8390(ActorTypeId type, Actor_UnkStruct_020 *param2); + void func_ov00_020a84bc(bool isVisible); + void func_ov00_020a8508(unk32 param_1); void func_ov00_020a853c(Vec3p *param1); - void Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5); - void PlayerBase_vfunc_38(Vec3p *pos); + void Teleport(Vec3p *pos, s16 angle, unk32 param3, unk32 param4, unk32 param5); + void TeleportToEntrance(Vec3p *pos); void PlayerLinkBase_vfunc_74(); void PlayerLinkBase_vfunc_88(); - unk16 Get_PlayerLinkBase_Unk48(); + u16 Get_PlayerLinkBase_Unk48(); bool func_ov00_020a8638(unk32 param1); void Clear_PlayerLinkBase_Unk48(u16 flags); void func_ov00_020a8680(unk32 param1, unk16 param2, bool param3); @@ -157,6 +158,8 @@ class LinkStateBase : public SysObject { bool func_ov005_0211139c(); bool func_ov005_021113b4(); void func_ov005_021113c4(bool param1); + + void func_ov023_02177ba0(Vec3p *param_1); }; LinkStateBase *GetLinkState(LinkStateId index); diff --git a/include/Player/PlayerBase.hpp b/include/Player/PlayerBase.hpp index 744ff4642..535d5d769 100644 --- a/include/Player/PlayerBase.hpp +++ b/include/Player/PlayerBase.hpp @@ -37,7 +37,7 @@ class PlayerBase : public SysObject { /* 2c */ virtual void vfunc_2c(s32 param1, unk8 param2) = 0; /* 30 */ virtual bool vfunc_30(s32 param1, Vec3p *param2, s32 param3) = 0; /* 34 */ virtual bool Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5); - /* 38 */ virtual bool TeleportToEntrance(unk32 entranceId, bool param2); + /* 38 */ virtual bool TeleportToEntrance(Vec3p *pos, unk32 entranceId); /* 3c */ virtual bool TeleportToLastEntrance(bool param1); /* 40 */ virtual void AddHealth(s16 amount); /* 44 */ virtual void vfunc_44() = 0; @@ -64,4 +64,4 @@ class PlayerBase : public SysObject { extern PlayerBase *gPlayer; extern Vec3p gPlayerPos; extern Vec3p gPlayerVel; -extern u16 gPlayerAngle; +extern s16 gPlayerAngle; diff --git a/include/Player/PlayerControlData.hpp b/include/Player/PlayerControlData.hpp index cdcd8db85..625d7b941 100644 --- a/include/Player/PlayerControlData.hpp +++ b/include/Player/PlayerControlData.hpp @@ -86,7 +86,7 @@ class PlayerControlData : public SysObject { /* 64 */ virtual void vfunc_64(u32 param1); /* 68 */ virtual void vfunc_68(unk32 param1, unk32 param2); /* 6c */ virtual void vfunc_6c(s32 param1, Vec3p *param2); - /* 70 */ virtual void vfunc_70(s32 param1); + /* 70 */ virtual void vfunc_70(s32 param1, Vec3p *param2); /* 74 */ virtual unk32 vfunc_74(s32 param1); /* 78 */ virtual unk32 vfunc_78(s32 param1); /* 7c */ virtual unk32 vfunc_7c(); diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp index b5bf77ed4..06859349d 100644 --- a/include/Player/PlayerLinkBase.hpp +++ b/include/Player/PlayerLinkBase.hpp @@ -29,7 +29,7 @@ class PlayerLinkBase : public PlayerBase { /* 38 */ s32 mUnk_38; /* 3c */ ActorRef mGrabActor; /* 44 */ s32 mUnk_44; - /* 48 */ unk16 mUnk_48; + /* 48 */ u16 mUnk_48; /* 4a */ unk16 mUnk_4a; /* 4c */ unk32 mUnk_4c; /* 50 */ unk32 mUnk_50; @@ -58,7 +58,7 @@ class PlayerLinkBase : public PlayerBase { /* 2c */ virtual void vfunc_2c(s32 param1, unk8 param2) override; /* 30 */ virtual bool vfunc_30(s32 param1, Vec3p *param2, s32 param3) override; /* 34 */ virtual bool Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) override; - /* 38 */ virtual bool TeleportToEntrance(unk32 entranceId, bool param2) override; + /* 38 */ virtual bool TeleportToEntrance(Vec3p *pos, unk32 entranceId) override; /* 3c */ virtual bool TeleportToLastEntrance(bool param1) override; /* 50 */ virtual ~PlayerLinkBase() override; /* 58 */ virtual bool vfunc_58(); @@ -73,7 +73,7 @@ class PlayerLinkBase : public PlayerBase { /* 7c */ virtual void vfunc_7c(); /* 80 */ virtual void SetUnk_5e(); /* 84 */ virtual void ResetUnk_5e(); - /* 88 */ + /* 88 */ virtual void vfunc_88(); void UnequipPotion(); void ChangeLinkState(s32 index); @@ -114,7 +114,7 @@ class PlayerLinkBase : public PlayerBase { void func_ov000_020bc398(unk32 param1, s32 param2); PlayerCharacter GetCurrentCharacter(); s32 GetHealth(PlayerCharacter character); - void AddHealth(s16 amount, PlayerCharacter character); + void AddHealth2(s16 amount, PlayerCharacter character); void func_ov000_020bc4ac(); s32 GetStateId(); s32 func_ov000_020bc520(Vec3p *param1); @@ -125,7 +125,7 @@ class PlayerLinkBase : public PlayerBase { unk32 func_ov000_020bc84c(); void func_ov000_020bc854(Vec3p *param1); void UpdateTilePos(Vec3p *param1, PlayerCharacter character); - void func_ov000_020bc90c(unk32 *param1, s32 param2); + void func_ov000_020bc90c(Vec3p *param1, s32 param2); bool func_ov000_020bc960(unk32 param1, unk32 param2, unk32 param3); bool GongoronCollidesWith(Cylinder *hitbox); bool func_ov000_020bcc78(); @@ -148,7 +148,7 @@ class PlayerLinkBase : public PlayerBase { bool func_ov000_020bd304(); bool func_ov000_020bd318(); void SetPlayerCharacter(PlayerCharacter character); - bool func_ov000_020bd3b0(unk32 param1, unk32 param2, unk32 param3, unk16 param4); + bool func_ov000_020bd3b0(unk32 param1, ActorRef *param2, unk32 param3, unk16 param4); void SetPosition(Vec3p *position); void SetAngle(s16 *angle); bool func_ov000_020bd510(s32 param1, unk32 *param2); diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index 78cd572ec..61eded0ed 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -1,8 +1,16 @@ #include "Player/LinkStateBase.hpp" +#include "Actor/ActorSpawner.hpp" #include "DTCM/UnkStruct_027e0f64.hpp" +#include "Item/ItemManager.hpp" #include "Message/MessageManager.hpp" +#include "Player/LinkStateItem.hpp" #include "Player/PlayerControl.hpp" +extern "C" void ApproachAngle_thunk(s16 *src, s16 dst, u32 param3); +extern "C" void func_ov000_020b1a4c(Vec3p *, Vec3p *); +extern "C" void func_ov000_0207c5d4(unk32 *, unk32, s32); +extern unk32 *data_027e0e58; + THUMB void LinkStateBase::vfunc_00() {} ARM void LinkStateBase::OnStateEnter() {} @@ -70,39 +78,221 @@ ARM bool LinkStateBase::vfunc_24(s32 param1) { return true; } -ARM bool LinkStateBase::vfunc_28() {} -ARM bool LinkStateBase::vfunc_34(Vec3p *param1) {} +ARM bool LinkStateBase::vfunc_28() { + return true; +} + +ARM bool LinkStateBase::vfunc_34(Vec3p *param1) { + return false; +} + ARM void LinkStateBase::GiveControlToLink() {} -ARM void LinkStateBase::SetPlayerCharacter(PlayerCharacter character) {} -ARM void LinkStateBase::ChangeLinkState(LinkStateId id) {} -ARM void LinkStateBase::ChangeLinkSubState(LinkStateId id, s32 subState) {} -ARM void LinkStateBase::EquipItem_vfunc_28() {} -ARM void LinkStateBase::UpdateSwordShieldInUse() {} -ARM void LinkStateBase::func_ov00_020a81b8(unk32 param1, unk32 param2) {} -ARM LinkStateItem *LinkStateBase::GetLinkItemState() {} -ARM void LinkStateBase::LookAt(Vec3p *target) {} -ARM void LinkStateBase::func_ov00_020a81fc(Vec3p *param1, unk32 param2) {} -ARM void LinkStateBase::AddHealth(s16 amount) {} -ARM void LinkStateBase::func_ov00_020a8224(unk32 param1) {} -ARM void LinkStateBase::TurnTo(s16 angle, unk32 param2, unk32 speed) {} -ARM void LinkStateBase::func_ov00_020a827c(s32 param1, u32 param2) {} -ARM void LinkStateBase::func_ov00_020a8294(s32 param1, u32 param2) {} -ARM void LinkStateBase::func_ov00_020a82ac() {} -ARM void LinkStateBase::ApplyImpulse(s32 angle, s32 power) {} -ARM void LinkStateBase::func_ov00_020a8360(unk32 param1) {} -ARM void LinkStateBase::func_ov00_020a8390(unk32 param1, void *param2) {} -ARM void LinkStateBase::func_ov00_020a84bc(s32 param1) {} -ARM void LinkStateBase::func_ov00_020a8508() {} -ARM void LinkStateBase::func_ov00_020a853c(Vec3p *param1) {} -ARM void LinkStateBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) {} -ARM void LinkStateBase::PlayerBase_vfunc_38(Vec3p *pos) {} -ARM void LinkStateBase::PlayerLinkBase_vfunc_74() {} -ARM void LinkStateBase::PlayerLinkBase_vfunc_88() {} -ARM unk16 LinkStateBase::Get_PlayerLinkBase_Unk48() {} -ARM bool LinkStateBase::func_ov00_020a8638(unk32 param1) {} -ARM void LinkStateBase::Clear_PlayerLinkBase_Unk48(u16 flags) {} -ARM void LinkStateBase::func_ov00_020a8680(unk32 param1, unk16 param2, bool param3) {} -ARM void LinkStateBase::PlayerLinkBase_func_ov00_020bccc8() {} + +ARM void LinkStateBase::SetPlayerCharacter(PlayerCharacter character) { + this->mLink->SetPlayerCharacter(character); +} + +ARM void LinkStateBase::ChangeLinkState(LinkStateId id) { + this->mLink->ChangeLinkState(id); +} + +ARM void LinkStateBase::ChangeLinkSubState(LinkStateId id, s32 subState) { + this->mLink->SetLinkSubState(id, subState); +} + +ARM void LinkStateBase::EquipItem_vfunc_28() { + for (s32 i = 0; i < 11; i++) { + EquipItem *pEquipItem = gItemManager->GetEquipItem(i); + + if (pEquipItem != NULL) { + pEquipItem->UpdateInUse(0); + } + } +} + +ARM void LinkStateBase::UpdateSwordShieldInUse() { + gItemManager->UpdateSwordShieldInUse(); +} + +ARM void LinkStateBase::func_ov00_020a81b8(unk32 param1, s32 *param2) { + this->GetLinkItemState()->func_ov005_02106980(0, param1, param2); +} + +ARM LinkStateItem *LinkStateBase::GetLinkItemState() { + return (LinkStateItem *) GetLinkState(LinkStateId_Item); +} + +ARM void LinkStateBase::LookAt(Vec3p *target) { + this->mLink->LookAt(target); +} + +ARM void LinkStateBase::func_ov00_020a81fc(Vec3p *param1, unk32 param2) { + this->mLink->func_ov000_020bb810(param1, param2); +} + +ARM void LinkStateBase::AddHealth(s16 amount) { + this->mLink->AddHealth(amount); +} + +ARM void LinkStateBase::func_ov00_020a8224(unk32 param1) { + this->mLink->func_ov000_020bbbd0(param1, 1); +} + +ARM void LinkStateBase::TurnTo(s16 angle, unk32 param2, unk32 speed) { + ApproachAngle_thunk(&gPlayerAngle, angle, speed); + + //! TODO: optimization or conversion macro? + gPlayerControlData->func_ov000_020b4558((param2 - gPlayerAngle) * 0x10000 >> 0x10, 0x1000); +} + +ARM void LinkStateBase::func_ov00_020a827c(s32 param1, u32 param2) { + gPlayerControlData->func_ov000_020b4558(param1, param2); +} + +ARM void LinkStateBase::func_ov00_020a8294(s32 param1, u32 param2) { + gPlayerControlData->func_ov000_020b44d4(param1, param2); +} + +ARM void LinkStateBase::func_ov00_020a82ac() { + this->mLink->GetPlayerControlData(0)->func_ov000_020b45e0(); +} + +// non-matching +ARM void LinkStateBase::ApplyImpulse(s32 angle, s32 power) { + PlayerLinkBase *link; + int angle2; + s32 cos; + unk32 cos2; + s32 sin; + + sin = SIN(angle & 0xFFFF) * power; + cos = COS(angle & 0xFFFF) * power; + + this->mLink->mVel = gVec3p_ZERO; + + this->mLink->mVel.x += (sin >> 12 | (sin >> 32) * 0x100000); + this->mLink->mVel.z += (cos >> 12 | (cos >> 32) * 0x100000); +} + +ARM void LinkStateBase::func_ov00_020a8360(ActorTypeId type) { + Actor_UnkStruct_020 unkStruct_020; + this->func_ov00_020a8390(type, &unkStruct_020); +} + +// non-matching +ARM Actor *LinkStateBase::func_ov00_020a8390(ActorTypeId type, Actor_UnkStruct_020 *param2) { + Actor *pActor; + ActorRef *pGrabRef; + ActorSpawnOptions local_44; + ActorRef local_4c; + ActorSpawner *pActorSpawner; + + local_44.mUnk_1c.id = -1; + local_44.mUnk_1c.index = -1; + local_44.func_ov000_020c3348(); + + pActorSpawner = gActorSpawner; + + local_44.mUnk_00 = *param2; + local_44.mUnk_1c.id = 0; + + local_4c.id = -1; + local_4c.index = -1; + + pActorSpawner->Spawn(type, this->GetPlayerPos(), &local_44, &local_4c); + pActor = gActorManager->GetActor(&local_4c); + + if (pActor != NULL) { + pGrabRef = this->GetGrabActorRef(); + pGrabRef->id = pActor->mRef.id; + pGrabRef->index = pActor->mRef.index; + pActor->SetUnk_11b(); + } + + return pActor; +} + +ARM void LinkStateBase::func_ov00_020a84bc(bool isVisible) { + s16 sVar1; + + this->mLink->mVisible = isVisible; + sVar1 = isVisible ? 0x1F : 0; + PlayerBase::GetEquipSword()->mUnk_5c = sVar1; + PlayerBase::GetEquipShield()->mUnk_0e = sVar1; + func_ov000_0207c5d4(data_027e0e58, 1, isVisible); +} + +ARM void LinkStateBase::func_ov00_020a8508(unk32 param_1) { + PlayerControlData *pPlayerControlData; + pPlayerControlData = gPlayerControlData; + pPlayerControlData->vfunc_70(param_1, this->GetPlayerPos()); +} + +ARM void LinkStateBase::func_ov00_020a853c(Vec3p *param1) { + PlayerLinkBase *pLink; + Vec3p VStack_18; + + if (data_027e0d38->mUnk_0c.func_ov000_020a5e9c() == 0x2E) { + this->func_ov023_02177ba0(param1); + return; + } + + pLink = this->mLink; + pLink->func_ov000_020bc90c(&VStack_18, pLink->GetCurrentCharacter()); + func_ov000_020b1a4c(param1, &VStack_18); +} + +// non-matching +ARM void LinkStateBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, unk32 param4, unk32 param5) { + this->mLink->Teleport(pos, angle, param3, 0, 1); +} + +ARM void LinkStateBase::TeleportToEntrance(Vec3p *pos) { + this->mLink->TeleportToEntrance(pos, false); +} + +ARM void LinkStateBase::PlayerLinkBase_vfunc_74() { + this->mLink->vfunc_74(); +} + +// non-matching +ARM void LinkStateBase::PlayerLinkBase_vfunc_88() { + this->mLink->vfunc_88(); // fake? +} + +ARM u16 LinkStateBase::Get_PlayerLinkBase_Unk48() { + return this->mLink->mUnk_48; +} + +ARM bool LinkStateBase::func_ov00_020a8638(unk32 param1) { + ActorRef local_c; + local_c.id = -1; + local_c.index = -1; + this->mLink->func_ov000_020bd3b0(param1, &local_c, 0, 0); +} + +ARM void LinkStateBase::Clear_PlayerLinkBase_Unk48(u16 flags) { + this->mLink->mUnk_48 &= ~flags; +} + +// non-matching +ARM void LinkStateBase::func_ov00_020a8680(unk32 param1, unk16 param2, bool param3) { + UnkStruct_027e0fd4 *pUVar1 = data_027e0fd4; + + data_027e0fd4->mUnk_098 = param1; + data_027e0fd4->mUnk_0a0 = param2; + + if (pUVar1->func_ov000_020b6e70()) { + data_027e0fd4->mUnk_0a2 = -1; + } else { + data_027e0fd4->mUnk_0a2 = !param3; + } +} + +ARM void LinkStateBase::PlayerLinkBase_func_ov00_020bccc8() { + this->mLink->func_ov000_020bccc8(); +} + ARM bool LinkStateBase::PlayerLinkBase_vfunc_58(unk32 param1, ActorRef *param2) {} ARM bool LinkStateBase::func_ov00_020a8704(s16 *pAngle) {} ARM bool LinkStateBase::func_ov00_020a8774(Vec3p *param1, s32 angle) {} diff --git a/src/00_Core/Player/PlayerControlData.cpp b/src/00_Core/Player/PlayerControlData.cpp index 1485048a8..55b979d8f 100644 --- a/src/00_Core/Player/PlayerControlData.cpp +++ b/src/00_Core/Player/PlayerControlData.cpp @@ -28,7 +28,7 @@ void PlayerControlData::vfunc_40(u16 *param1, Vec3p *param2, unk32 param3, char void PlayerControlData::vfunc_44(unk32 param1, unk32 *param2, unk32 param3, unk16 param4) {} void PlayerControlData::vfunc_48(unk32 param1, unk32 param2, unk32 param3, s16 param4) {} void PlayerControlData::vfunc_4c(unk32 param1, Vec3p *param2) {} -void PlayerControlData::vfunc_70(s32 param1) {} +void PlayerControlData::vfunc_70(s32 param1, Vec3p *param2) {} void PlayerControlData::vfunc_50() {} void PlayerControlData::vfunc_54() {} void PlayerControlData::vfunc_58() {} diff --git a/src/00_Core/Player/PlayerLinkBase.cpp b/src/00_Core/Player/PlayerLinkBase.cpp index bc2480448..0198365b0 100644 --- a/src/00_Core/Player/PlayerLinkBase.cpp +++ b/src/00_Core/Player/PlayerLinkBase.cpp @@ -51,7 +51,7 @@ unk32 PlayerLinkBase::func_ov000_020bc320(unk32 param1, unk32 param2, unk32 para void PlayerLinkBase::func_ov000_020bc398(unk32 param1, s32 param2) {} PlayerCharacter PlayerLinkBase::GetCurrentCharacter() {} s32 PlayerLinkBase::GetHealth(PlayerCharacter character) {} -void PlayerLinkBase::AddHealth(s16 amount, PlayerCharacter character) {} +void PlayerLinkBase::AddHealth2(s16 amount, PlayerCharacter character) {} void PlayerLinkBase::func_ov000_020bc4ac() {} s32 PlayerLinkBase::GetStateId() {} s32 PlayerLinkBase::func_ov000_020bc520(Vec3p *param1) {} @@ -63,7 +63,7 @@ s32 PlayerLinkBase::func_ov000_020bc808() {} unk32 PlayerLinkBase::func_ov000_020bc84c() {} void PlayerLinkBase::func_ov000_020bc854(Vec3p *param1) {} void PlayerLinkBase::UpdateTilePos(Vec3p *param1, PlayerCharacter character) {} -void PlayerLinkBase::func_ov000_020bc90c(unk32 *param1, s32 param2) {} +void PlayerLinkBase::func_ov000_020bc90c(Vec3p *param1, s32 param2) {} bool PlayerLinkBase::func_ov000_020bc960(unk32 param1, unk32 param2, unk32 param3) {} bool PlayerLinkBase::TeleportToLastEntrance(bool param1) {} bool PlayerLinkBase::TeleportToEntrance(unk32 entranceId, bool param2) {} @@ -92,7 +92,7 @@ bool PlayerLinkBase::func_ov000_020bd304() {} bool PlayerLinkBase::func_ov000_020bd318() {} void PlayerLinkBase::vfunc_7c() {} void PlayerLinkBase::SetPlayerCharacter(PlayerCharacter character) {} -bool PlayerLinkBase::func_ov000_020bd3b0(unk32 param1, unk32 param2, unk32 param3, unk16 param4) {} +bool PlayerLinkBase::func_ov000_020bd3b0(unk32 param1, ActorRef *param2, unk32 param3, unk16 param4) {} void PlayerLinkBase::SetPosition(Vec3p *position) {} void PlayerLinkBase::SetAngle(s16 *angle) {} bool PlayerLinkBase::func_ov000_020bd510(s32 param1, unk32 *param2) {} From 5fc6ae57212b4521967010f738f46edb58eaeef5 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 9 Jul 2025 01:36:28 +0200 Subject: [PATCH 3/9] decomp the other half --- config/eur/arm9/overlays/ov000/symbols.txt | 18 +- config/eur/arm9/overlays/ov005/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 18 +- config/usa/arm9/overlays/ov005/symbols.txt | 2 +- include/DTCM/UnkStruct_027e0fd4.hpp | 6 +- include/Game/Game.hpp | 2 +- include/Player/LinkStateBase.hpp | 28 +- include/Player/PlayerControlData.hpp | 21 +- include/Player/PlayerLinkBase.hpp | 4 +- include/Unknown/UnkStruct_0202e1a0.hpp | 2 +- src/00_Core/Player/LinkStateBase.cpp | 329 ++++++++++++++++++--- src/00_Core/Player/PlayerControlData.cpp | 3 +- src/05/Player/LinkStateBase.cpp | 2 +- 13 files changed, 345 insertions(+), 92 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 390c8938f..22bbe9d27 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1909,7 +1909,7 @@ _ZN13LinkStateBase18func_ov00_020a853cEP5Vec3p kind:function(arm,size=0x70) addr _ZN13LinkStateBase8TeleportEP5Vec3psibb kind:function(arm,size=0x34) addr:0x020a85ac _ZN13LinkStateBase18TeleportToEntranceEP5Vec3p kind:function(arm,size=0x1c) addr:0x020a85e0 _ZN13LinkStateBase23PlayerLinkBase_vfunc_74Ev kind:function(arm,size=0x18) addr:0x020a85fc -_ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ev kind:function(arm,size=0x18) addr:0x020a8614 +_ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ei kind:function(arm,size=0x18) addr:0x020a8614 _ZN13LinkStateBase24Get_PlayerLinkBase_Unk48Ev kind:function(arm,size=0xc) addr:0x020a862c _ZN13LinkStateBase18func_ov00_020a8638Ei kind:function(arm,size=0x30) addr:0x020a8638 _ZN13LinkStateBase26Clear_PlayerLinkBase_Unk48Et kind:function(arm,size=0x18) addr:0x020a8668 @@ -1922,10 +1922,10 @@ _ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) a _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x020a8954 _ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x020a8994 _ZN13LinkStateBase18func_ov00_020a89bcEP24LinkStateBase_UnkStruct1i kind:function(arm,size=0x4c) addr:0x020a89bc -_ZN13LinkStateBase18func_ov00_020a8a08Ei kind:function(arm,size=0x44) addr:0x020a8a08 -_ZN13LinkStateBase18func_ov00_020a8a4cEPKvi kind:function(arm,size=0x44) addr:0x020a8a4c -_ZN13LinkStateBase18func_ov00_020a8a90Ei kind:function(arm,size=0x20) addr:0x020a8a90 -_ZN13LinkStateBase18func_ov00_020a8ab0Ei kind:function(arm,size=0x20) addr:0x020a8ab0 +_ZN13LinkStateBase18func_ov00_020a8a08EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x44) addr:0x020a8a08 +_ZN13LinkStateBase18func_ov00_020a8a4cEP24LinkStateBase_UnkStruct1c kind:function(arm,size=0x44) addr:0x020a8a4c +_ZN13LinkStateBase18func_ov00_020a8a90EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x20) addr:0x020a8a90 +_ZN13LinkStateBase18func_ov00_020a8ab0EPi kind:function(arm,size=0x20) addr:0x020a8ab0 _ZN13LinkStateBase18func_ov00_020a8ad0Ei kind:function(arm,size=0x34) addr:0x020a8ad0 _ZN13LinkStateBase18func_ov00_020a8b04Eib kind:function(arm,size=0x38) addr:0x020a8b04 _ZN13LinkStateBase18func_ov00_020a8b3cEi kind:function(arm,size=0x44) addr:0x020a8b3c @@ -1938,7 +1938,7 @@ _ZN13LinkStateBase20GetPlayerControlDataEv kind:function(arm,size=0x10) addr:0x0 _ZN13LinkStateBase10GetStateIdEv kind:function(arm,size=0x10) addr:0x020a8bf8 _ZN13LinkStateBase9GetHealthEv kind:function(arm,size=0xc) addr:0x020a8c08 _ZN13LinkStateBase25GetCurrentCharacterHealthEv kind:function(arm,size=0x20) addr:0x020a8c14 -_ZN13LinkStateBase18func_ov00_020a8c34Ev kind:function(arm,size=0x18) addr:0x020a8c34 +_ZN13LinkStateBase18func_ov00_020a8c34EiP5Vec3pi kind:function(arm,size=0x18) addr:0x020a8c34 _ZN13LinkStateBase12GetPlayerPosEv kind:function(arm,size=0xc) addr:0x020a8c4c _ZN13LinkStateBase12GetPlayerVelEv kind:function(arm,size=0xc) addr:0x020a8c58 _ZN13LinkStateBase18func_ov00_020a8c64Ev kind:function(arm,size=0x14) addr:0x020a8c64 @@ -2313,7 +2313,7 @@ _ZN17PlayerControlData19func_ov000_020b4460Ei kind:function(arm,size=0x74) addr: _ZN17PlayerControlData19func_ov000_020b44d4Eij kind:function(arm,size=0x84) addr:0x020b44d4 _ZN17PlayerControlData19func_ov000_020b4558Eij kind:function(arm,size=0x88) addr:0x020b4558 _ZN17PlayerControlData19func_ov000_020b45e0Ev kind:function(arm,size=0x18) addr:0x020b45e0 -_ZN17PlayerControlData19func_ov000_020b45f8EPicc kind:function(arm,size=0x54) addr:0x020b45f8 +_ZN17PlayerControlData19func_ov000_020b45f8EP24LinkStateBase_UnkStruct1cc kind:function(arm,size=0x54) addr:0x020b45f8 _ZN17PlayerControlData19func_ov000_020b464cEPicc kind:function(arm,size=0x2c) addr:0x020b464c _ZN17PlayerControlData8vfunc_60Eiii kind:function(arm,size=0x2c) addr:0x020b4678 _ZN17PlayerControlData8vfunc_68Eii kind:function(arm,size=0x34) addr:0x020b46a4 @@ -2712,11 +2712,11 @@ func_ov000_020c0cc8 kind:function(arm,size=0x54) addr:0x020c0cc8 func_ov000_020c0d1c kind:function(arm,size=0x30) addr:0x020c0d1c func_ov000_020c0d4c kind:function(arm,size=0x8) addr:0x020c0d4c func_ov000_020c0d54 kind:function(arm,size=0x14) addr:0x020c0d54 -func_ov000_020c0d68 kind:function(arm,size=0x8) addr:0x020c0d68 +_ZN21PlayerControlData_11819func_ov000_020c0d68Ev kind:function(arm,size=0x8) addr:0x020c0d68 func_ov000_020c0d70 kind:function(arm,size=0x24) addr:0x020c0d70 func_ov000_020c0d94 kind:function(arm,size=0x70) addr:0x020c0d94 func_ov000_020c0e04 kind:function(arm,size=0x20) addr:0x020c0e04 -func_ov000_020c0e24 kind:function(arm,size=0x38) addr:0x020c0e24 +_ZN21PlayerControlData_11819func_ov000_020c0e24Ei kind:function(arm,size=0x38) addr:0x020c0e24 func_ov000_020c0e5c kind:function(arm,size=0x38) addr:0x020c0e5c func_ov000_020c0e94 kind:function(arm,size=0xc) addr:0x020c0e94 func_ov000_020c0ea0 kind:function(arm,size=0x20) addr:0x020c0ea0 diff --git a/config/eur/arm9/overlays/ov005/symbols.txt b/config/eur/arm9/overlays/ov005/symbols.txt index ce09a2889..7390875ff 100644 --- a/config/eur/arm9/overlays/ov005/symbols.txt +++ b/config/eur/arm9/overlays/ov005/symbols.txt @@ -292,7 +292,7 @@ _ZN13LinkStateBase19func_ov005_02110228Eiiicc kind:function(arm,size=0x364) addr _ZN13LinkStateBase19func_ov005_0211058cEi kind:function(arm,size=0x270) addr:0x0211058c _ZN13LinkStateBase19func_ov005_021107fcEv kind:function(arm,size=0x70) addr:0x021107fc _ZN13LinkStateBase19func_ov005_0211086cEi kind:function(arm,size=0x110) addr:0x0211086c -_ZN13LinkStateBase19func_ov005_0211097cEicc kind:function(arm,size=0x44) addr:0x0211097c +_ZN13LinkStateBase19func_ov005_0211097cEP24LinkStateBase_UnkStruct1cc kind:function(arm,size=0x44) addr:0x0211097c _ZN13LinkStateBase19func_ov005_021109c0Ev kind:function(arm,size=0x180) addr:0x021109c0 _ZN13LinkStateBase19func_ov005_02110b40Ei kind:function(arm,size=0x74) addr:0x02110b40 _ZN13LinkStateBase19func_ov005_02110bb4Ev kind:function(arm,size=0x34) addr:0x02110bb4 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index b10ff082d..2d99d2add 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1909,7 +1909,7 @@ _ZN13LinkStateBase18func_ov00_020a853cEP5Vec3p kind:function(arm,size=0x70) addr _ZN13LinkStateBase8TeleportEP5Vec3psibb kind:function(arm,size=0x34) addr:0x020a854c _ZN13LinkStateBase18TeleportToEntranceEP5Vec3p kind:function(arm,size=0x1c) addr:0x020a8580 _ZN13LinkStateBase23PlayerLinkBase_vfunc_74Ev kind:function(arm,size=0x18) addr:0x020a859c -_ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ev kind:function(arm,size=0x18) addr:0x020a85b4 +_ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ei kind:function(arm,size=0x18) addr:0x020a85b4 _ZN13LinkStateBase24Get_PlayerLinkBase_Unk48Ev kind:function(arm,size=0xc) addr:0x020a85cc _ZN13LinkStateBase18func_ov00_020a8638Ei kind:function(arm,size=0x30) addr:0x020a85d8 _ZN13LinkStateBase26Clear_PlayerLinkBase_Unk48Et kind:function(arm,size=0x18) addr:0x020a8608 @@ -1922,10 +1922,10 @@ _ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) a _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x020a88f4 _ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x020a8934 _ZN13LinkStateBase18func_ov00_020a89bcEP24LinkStateBase_UnkStruct1i kind:function(arm,size=0x4c) addr:0x020a895c -_ZN13LinkStateBase18func_ov00_020a8a08Ei kind:function(arm,size=0x44) addr:0x020a89a8 -_ZN13LinkStateBase18func_ov00_020a8a4cEPKvi kind:function(arm,size=0x44) addr:0x020a89ec -_ZN13LinkStateBase18func_ov00_020a8a90Ei kind:function(arm,size=0x20) addr:0x020a8a30 -_ZN13LinkStateBase18func_ov00_020a8ab0Ei kind:function(arm,size=0x20) addr:0x020a8a50 +_ZN13LinkStateBase18func_ov00_020a8a08EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x44) addr:0x020a89a8 +_ZN13LinkStateBase18func_ov00_020a8a4cEP24LinkStateBase_UnkStruct1c kind:function(arm,size=0x44) addr:0x020a89ec +_ZN13LinkStateBase18func_ov00_020a8a90EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x20) addr:0x020a8a30 +_ZN13LinkStateBase18func_ov00_020a8ab0EPi kind:function(arm,size=0x20) addr:0x020a8a50 _ZN13LinkStateBase18func_ov00_020a8ad0Ei kind:function(arm,size=0x34) addr:0x020a8a70 _ZN13LinkStateBase18func_ov00_020a8b04Eib kind:function(arm,size=0x38) addr:0x020a8aa4 _ZN13LinkStateBase18func_ov00_020a8b3cEi kind:function(arm,size=0x44) addr:0x020a8adc @@ -1938,7 +1938,7 @@ _ZN13LinkStateBase20GetPlayerControlDataEv kind:function(arm,size=0x10) addr:0x0 _ZN13LinkStateBase10GetStateIdEv kind:function(arm,size=0x10) addr:0x020a8b98 _ZN13LinkStateBase9GetHealthEv kind:function(arm,size=0xc) addr:0x020a8ba8 _ZN13LinkStateBase25GetCurrentCharacterHealthEv kind:function(arm,size=0x20) addr:0x020a8bb4 -_ZN13LinkStateBase18func_ov00_020a8c34Ev kind:function(arm,size=0x18) addr:0x020a8bd4 +_ZN13LinkStateBase18func_ov00_020a8c34EiP5Vec3pi kind:function(arm,size=0x18) addr:0x020a8bd4 _ZN13LinkStateBase12GetPlayerPosEv kind:function(arm,size=0xc) addr:0x020a8bec _ZN13LinkStateBase12GetPlayerVelEv kind:function(arm,size=0xc) addr:0x020a8bf8 _ZN13LinkStateBase18func_ov00_020a8c64Ev kind:function(arm,size=0x14) addr:0x020a8c04 @@ -2313,7 +2313,7 @@ _ZN17PlayerControlData19func_ov000_020b4460Ei kind:function(arm,size=0x74) addr: _ZN17PlayerControlData19func_ov000_020b44d4Eij kind:function(arm,size=0x84) addr:0x020b4474 _ZN17PlayerControlData19func_ov000_020b4558Eij kind:function(arm,size=0x88) addr:0x020b44f8 _ZN17PlayerControlData19func_ov000_020b45e0Ev kind:function(arm,size=0x18) addr:0x020b4580 -_ZN17PlayerControlData19func_ov000_020b45f8EPicc kind:function(arm,size=0x54) addr:0x020b4598 +_ZN17PlayerControlData19func_ov000_020b45f8EP24LinkStateBase_UnkStruct1cc kind:function(arm,size=0x54) addr:0x020b4598 _ZN17PlayerControlData19func_ov000_020b464cEPicc kind:function(arm,size=0x2c) addr:0x020b45ec _ZN17PlayerControlData8vfunc_60Eiii kind:function(arm,size=0x2c) addr:0x020b4618 _ZN17PlayerControlData8vfunc_68Eii kind:function(arm,size=0x34) addr:0x020b4644 @@ -2712,11 +2712,11 @@ func_ov000_020c0cc8 kind:function(arm,size=0x54) addr:0x020c0c68 func_ov000_020c0d1c kind:function(arm,size=0x30) addr:0x020c0cbc func_ov000_020c0d4c kind:function(arm,size=0x8) addr:0x020c0cec func_ov000_020c0d54 kind:function(arm,size=0x14) addr:0x020c0cf4 -func_ov000_020c0d68 kind:function(arm,size=0x8) addr:0x020c0d08 +_ZN21PlayerControlData_11819func_ov000_020c0d68Ev kind:function(arm,size=0x8) addr:0x020c0d08 func_ov000_020c0d70 kind:function(arm,size=0x24) addr:0x020c0d10 func_ov000_020c0d94 kind:function(arm,size=0x70) addr:0x020c0d34 func_ov000_020c0e04 kind:function(arm,size=0x20) addr:0x020c0da4 -func_ov000_020c0e24 kind:function(arm,size=0x38) addr:0x020c0dc4 +_ZN21PlayerControlData_11819func_ov000_020c0e24Ei kind:function(arm,size=0x38) addr:0x020c0dc4 func_ov000_020c0e5c kind:function(arm,size=0x38) addr:0x020c0dfc func_ov000_020c0e94 kind:function(arm,size=0xc) addr:0x020c0e34 func_ov000_020c0ea0 kind:function(arm,size=0x20) addr:0x020c0e40 diff --git a/config/usa/arm9/overlays/ov005/symbols.txt b/config/usa/arm9/overlays/ov005/symbols.txt index 2c4e1df07..c7415adc3 100644 --- a/config/usa/arm9/overlays/ov005/symbols.txt +++ b/config/usa/arm9/overlays/ov005/symbols.txt @@ -292,7 +292,7 @@ _ZN13LinkStateBase19func_ov005_02110228Eiiicc kind:function(arm,size=0x364) addr _ZN13LinkStateBase19func_ov005_0211058cEi kind:function(arm,size=0x270) addr:0x0211050c _ZN13LinkStateBase19func_ov005_021107fcEv kind:function(arm,size=0x70) addr:0x0211077c _ZN13LinkStateBase19func_ov005_0211086cEi kind:function(arm,size=0x110) addr:0x021107ec -_ZN13LinkStateBase19func_ov005_0211097cEicc kind:function(arm,size=0x44) addr:0x021108fc +_ZN13LinkStateBase19func_ov005_0211097cEP24LinkStateBase_UnkStruct1cc kind:function(arm,size=0x44) addr:0x021108fc _ZN13LinkStateBase19func_ov005_021109c0Ev kind:function(arm,size=0x180) addr:0x02110940 _ZN13LinkStateBase19func_ov005_02110b40Ei kind:function(arm,size=0x74) addr:0x02110ac0 _ZN13LinkStateBase19func_ov005_02110bb4Ev kind:function(arm,size=0x34) addr:0x02110b34 diff --git a/include/DTCM/UnkStruct_027e0fd4.hpp b/include/DTCM/UnkStruct_027e0fd4.hpp index e8e899546..2aebe64f2 100644 --- a/include/DTCM/UnkStruct_027e0fd4.hpp +++ b/include/DTCM/UnkStruct_027e0fd4.hpp @@ -22,6 +22,10 @@ class UnkStruct_027e0fd4_Unk1 { /* 18 */ }; +struct UnkStruct_027e0fd4_90 { + /* 00 */ unk32 mUnk_00; +}; + class UnkStruct_027e0fd4 : public UnkStruct_ov000_020b1528 { public: /* 000 (base) */ @@ -46,7 +50,7 @@ class UnkStruct_027e0fd4 : public UnkStruct_ov000_020b1528 { /* 070 */ unk32 mUnk_070; /* 074 */ unk32 mUnk_074; /* 078 */ unk8 mUnk_078[0x18]; - /* 090 */ unk32 mUnk_090; + /* 090 */ UnkStruct_027e0fd4_90 mUnk_090; /* 094 */ u32 mUnk_094; /* 098 */ s32 mUnk_098; /* 09c */ unk32 mUnk_09c; diff --git a/include/Game/Game.hpp b/include/Game/Game.hpp index 4c60c0abf..fa2b1732d 100644 --- a/include/Game/Game.hpp +++ b/include/Game/Game.hpp @@ -38,7 +38,7 @@ class Game { /* 0fc */ u16 mUnk_0fc; /* 0fe */ u16 mUnk_0fe; /* 100 */ unk8 mUnk_100; - /* 101 */ s8 mUnk_101; + /* 101 */ bool mUnk_101; /* 102 */ bool mUnk_102; /* 103 */ u8 mUnk_103; /* 104 */ diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 8c7882169..f326e9ca6 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -84,7 +84,7 @@ class LinkStateBase : public SysObject { void Teleport(Vec3p *pos, s16 angle, unk32 param3, unk32 param4, unk32 param5); void TeleportToEntrance(Vec3p *pos); void PlayerLinkBase_vfunc_74(); - void PlayerLinkBase_vfunc_88(); + void PlayerLinkBase_vfunc_88(unk32 param_1); u16 Get_PlayerLinkBase_Unk48(); bool func_ov00_020a8638(unk32 param1); void Clear_PlayerLinkBase_Unk48(u16 flags); @@ -96,34 +96,34 @@ class LinkStateBase : public SysObject { void func_ov00_020a8844(Vec3p *param1, bool param2, bool param3); void func_ov00_020a8954(bool param1, unk32 *param2); void func_ov00_020a8994(); - void func_ov00_020a89bc(LinkStateBase_UnkStruct1 *param1, unk32 param2); - void func_ov00_020a8a08(unk32 param1); - void func_ov00_020a8a4c(const void *param1, unk32 param2); - void func_ov00_020a8a90(unk32 param1); - void func_ov00_020a8ab0(unk32 param1); + void func_ov00_020a89bc(LinkStateBase_UnkStruct1 *param1, unk8 param2); + void func_ov00_020a8a08(LinkStateBase_UnkStruct1 *param1); + void func_ov00_020a8a4c(LinkStateBase_UnkStruct1 *param1, unk8 param2); + void func_ov00_020a8a90(LinkStateBase_UnkStruct1 *param1); + void func_ov00_020a8ab0(unk32 *param1); void func_ov00_020a8ad0(unk32 param1); void func_ov00_020a8b04(s32 param1, bool param2); unk32 func_ov00_020a8b3c(s32 param1); bool func_ov00_020a8b80(); bool HasFlags_PlayerLinkBase_Unk48(u16 flags); - unk8 Get_PlayerLinkBase_Unk5e(); - unk32 Get_PlayerControlData_Unk004(); + u8 Get_PlayerLinkBase_Unk5e(); // bool? + unk32 *Get_PlayerControlData_Unk004(); PlayerCharacter GetCurrentCharacter(); PlayerControlData *GetPlayerControlData(); LinkStateId GetStateId(); s32 GetHealth(); s32 GetCurrentCharacterHealth(); - bool func_ov00_020a8c34(); + bool func_ov00_020a8c34(unk32 param1, Vec3p *param2, unk32 param3); Vec3p *GetPlayerPos(); Vec3p *GetPlayerVel(); - unk8 *func_ov00_020a8c64(); + UnkStruct_027e0fd4_90 *func_ov00_020a8c64(); s16 *GetPlayerAngle(); - void *GetPlayer_Unk18(); + unk32 *GetPlayer_Unk18(); s32 Get_PlayerControlData_Unk32(); Actor *GetGrabActor(); ActorRef *GetGrabActorRef(); unk32 Grab(); - s32 Get_PlayerLinkBase_Unk44(); + s32 *Get_PlayerLinkBase_Unk44(); bool IsEquipBeingUsed(ItemFlag id); EquipItem *GetEquipItem(ItemFlag id); UnkStruct_027e0fd4 *func_ov00_020a8d40(); @@ -132,7 +132,7 @@ class LinkStateBase : public SysObject { s32 PlayerControlData_vfunc_14(s32 param1); unk32 Get_PlayerControlData_Unk100(); unk32 Get_PlayerControlData_Unk120(); - s32 Get_PlayerLinkBase_Unk38(); + s32 *Get_PlayerLinkBase_Unk38(); DebugHierarchy *GetDebugHierarchy0(); DebugHierarchy *GetDebugHierarchy1(); @@ -145,7 +145,7 @@ class LinkStateBase : public SysObject { bool func_ov005_0211058c(s32 param1); void func_ov005_021107fc(); void func_ov005_0211086c(s32 param1); - void func_ov005_0211097c(unk32 param1, unk8 param2, unk8 param3); + void func_ov005_0211097c(LinkStateBase_UnkStruct1 *param1, unk8 param2, unk8 param3); unk32 func_ov005_021109c0(); void func_ov005_02110b40(s32 param1); void func_ov005_02110bb4(); diff --git a/include/Player/PlayerControlData.hpp b/include/Player/PlayerControlData.hpp index 625d7b941..6365f2302 100644 --- a/include/Player/PlayerControlData.hpp +++ b/include/Player/PlayerControlData.hpp @@ -5,6 +5,19 @@ #include "types.h" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_0202e1a0.hpp" + +class PlayerControlData_118 { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0c */ UnkStruct_0202e1a0 mUnk_0c; + /* 24 */ + + void func_ov000_020c0e24(unk32 param1); + unk32 func_ov000_020c0d68(); +}; class PlayerControlData : public SysObject { public: @@ -26,11 +39,11 @@ class PlayerControlData : public SysObject { /* 040 */ unk8 mUnk_040[0xc0]; /* 100 */ unk32 mUnk_100; /* 104 */ unk8 mUnk_104[0x14]; - /* 118 */ unk32 mUnk_118; + /* 118 */ PlayerControlData_118 *mUnk_118; /* 11c */ unk8 mUnk_11c[4]; /* 120 */ unk32 mUnk_120; /* 124 */ unk8 mUnk_124[0x14]; - /* 138 */ unk32 mUnk_138; + /* 138 */ PlayerControlData_118 *mUnk_138; /* 13c */ unk8 mUnk_13c[4]; /* 140 */ unk32 mUnk_140; /* 144 */ unk32 mUnk_144; @@ -63,7 +76,7 @@ class PlayerControlData : public SysObject { /* 04 */ virtual ~PlayerControlData(); /* 0c */ virtual unk32 vfunc_0c(); /* 10 */ virtual unk32 GetCharacterId() = 0; - /* 14 */ virtual void vfunc_14(s32 param1) = 0; + /* 14 */ virtual u16 *vfunc_14(s32 param1) = 0; /* 18 */ virtual void vfunc_18(); /* 1c */ virtual void vfunc_1c(); /* 20 */ virtual void vfunc_20(); @@ -97,7 +110,7 @@ class PlayerControlData : public SysObject { void func_ov000_020b44d4(s32 param1, u32 param2); void func_ov000_020b4558(s32 param1, u32 param2); void func_ov000_020b45e0(); - void func_ov000_020b45f8(unk32 *param1, unk8 param2, unk8 param3); + void func_ov000_020b45f8(struct LinkStateBase_UnkStruct1 *param1, unk8 param2, unk8 param3); void func_ov000_020b464c(unk32 *param1, unk8 param2, unk8 param3); void func_ov000_020b484c(s32 param1, s32 param2, s32 param3); void func_ov000_020b4944(unk32 param1, u32 param2, s32 param3); diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp index 06859349d..9a626682c 100644 --- a/include/Player/PlayerLinkBase.hpp +++ b/include/Player/PlayerLinkBase.hpp @@ -61,7 +61,7 @@ class PlayerLinkBase : public PlayerBase { /* 38 */ virtual bool TeleportToEntrance(Vec3p *pos, unk32 entranceId) override; /* 3c */ virtual bool TeleportToLastEntrance(bool param1) override; /* 50 */ virtual ~PlayerLinkBase() override; - /* 58 */ virtual bool vfunc_58(); + /* 58 */ virtual bool vfunc_58(unk32 param1, ActorRef *param2); /* 5c */ virtual bool vfunc_5c(); /* 60 */ virtual bool vfunc_60(); /* 64 */ virtual void vfunc_64(); @@ -73,7 +73,7 @@ class PlayerLinkBase : public PlayerBase { /* 7c */ virtual void vfunc_7c(); /* 80 */ virtual void SetUnk_5e(); /* 84 */ virtual void ResetUnk_5e(); - /* 88 */ virtual void vfunc_88(); + /* 88 */ virtual void vfunc_88(unk32 param_1); void UnequipPotion(); void ChangeLinkState(s32 index); diff --git a/include/Unknown/UnkStruct_0202e1a0.hpp b/include/Unknown/UnkStruct_0202e1a0.hpp index d6d6a7933..25df74a44 100644 --- a/include/Unknown/UnkStruct_0202e1a0.hpp +++ b/include/Unknown/UnkStruct_0202e1a0.hpp @@ -6,7 +6,7 @@ // astruct_11 struct UnkStruct_0202e1a0 { /* 00 */ unk16 mUnk_00; - /* 02 */ unk16 mUnk_02; + /* 02 */ u16 mUnk_02; /* 04 */ s32 mUnk_04; /* 08 */ u32 mUnk_08; /* 0c */ s32 mUnk_0c; diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index 61eded0ed..21472ef44 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -6,10 +6,16 @@ #include "Player/LinkStateItem.hpp" #include "Player/PlayerControl.hpp" +extern "C" bool func_01ffe468(unk32 param1, Vec3p *param2, s32 *param3, s32 *param4, bool param5); extern "C" void ApproachAngle_thunk(s16 *src, s16 dst, u32 param3); extern "C" void func_ov000_020b1a4c(Vec3p *, Vec3p *); +extern "C" void func_ov000_020b1498(s32, s32, s16); extern "C" void func_ov000_0207c5d4(unk32 *, unk32, s32); extern unk32 *data_027e0e58; +extern unk32 data_ov000_020e5650; +extern LinkStateBase_UnkStruct1 data_ov000_020e5674; +extern unk32 data_ov000_020dc510[]; +extern unk32 data_027e0fb0; THUMB void LinkStateBase::vfunc_00() {} @@ -255,9 +261,8 @@ ARM void LinkStateBase::PlayerLinkBase_vfunc_74() { this->mLink->vfunc_74(); } -// non-matching -ARM void LinkStateBase::PlayerLinkBase_vfunc_88() { - this->mLink->vfunc_88(); // fake? +ARM void LinkStateBase::PlayerLinkBase_vfunc_88(unk32 param_1) { + this->mLink->vfunc_88(param_1); // fake? } ARM u16 LinkStateBase::Get_PlayerLinkBase_Unk48() { @@ -293,48 +298,278 @@ ARM void LinkStateBase::PlayerLinkBase_func_ov00_020bccc8() { this->mLink->func_ov000_020bccc8(); } -ARM bool LinkStateBase::PlayerLinkBase_vfunc_58(unk32 param1, ActorRef *param2) {} -ARM bool LinkStateBase::func_ov00_020a8704(s16 *pAngle) {} +ARM bool LinkStateBase::PlayerLinkBase_vfunc_58(unk32 param1, ActorRef *param2) { + this->mLink->vfunc_58(param1, param2); +} + +// non-matching +ARM bool LinkStateBase::func_ov00_020a8704(s16 *pAngle) { + UnkStruct_027e0fd4 *iVar2; + UnkStruct_027e0fd4 *iVar3; + + iVar2 = func_ov00_020a8d40(); + iVar3 = func_ov00_020a8d40(); + + if (iVar3->mUnk_05c > 0 && (iVar3->mUnk_064 != 0 || iVar2->mUnk_06c != 0)) { + s16 uVar1 = Atan2(iVar2->mUnk_064, iVar2->mUnk_06c); + s16 *angle = GetPlayerAngle(); + + *pAngle = *angle - uVar1; + return true; + } + + return false; +} + +// non-matching ARM bool LinkStateBase::func_ov00_020a8774(Vec3p *param1, s32 angle) {} -ARM void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool param3) {} -ARM void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) {} -ARM void LinkStateBase::func_ov00_020a8994() {} -ARM void LinkStateBase::func_ov00_020a89bc(LinkStateBase_UnkStruct1 *param1, unk32 param2) {} -ARM void LinkStateBase::func_ov00_020a8a08(unk32 param1) {} -ARM void LinkStateBase::func_ov00_020a8a4c(const void *param1, unk32 param2) {} -ARM void LinkStateBase::func_ov00_020a8a90(unk32 param1) {} -ARM void LinkStateBase::func_ov00_020a8ab0(unk32 param1) {} -ARM void LinkStateBase::func_ov00_020a8ad0(unk32 param1) {} -ARM void LinkStateBase::func_ov00_020a8b04(s32 param1, bool param2) {} -ARM unk32 LinkStateBase::func_ov00_020a8b3c(s32 param1) {} -ARM bool LinkStateBase::func_ov00_020a8b80() {} -ARM bool LinkStateBase::HasFlags_PlayerLinkBase_Unk48(u16 flags) {} -ARM unk8 LinkStateBase::Get_PlayerLinkBase_Unk5e() {} -ARM unk32 LinkStateBase::Get_PlayerControlData_Unk004() {} -ARM PlayerCharacter LinkStateBase::GetCurrentCharacter() {} -ARM PlayerControlData *LinkStateBase::GetPlayerControlData() {} -ARM LinkStateId LinkStateBase::GetStateId() {} -ARM s32 LinkStateBase::GetHealth() {} -ARM s32 LinkStateBase::GetCurrentCharacterHealth() {} -ARM bool LinkStateBase::func_ov00_020a8c34() {} -ARM Vec3p *LinkStateBase::GetPlayerPos() {} -ARM Vec3p *LinkStateBase::GetPlayerVel() {} -ARM unk8 *LinkStateBase::func_ov00_020a8c64() {} -ARM s16 *LinkStateBase::GetPlayerAngle() {} -ARM void *LinkStateBase::GetPlayer_Unk18() {} -ARM s32 LinkStateBase::Get_PlayerControlData_Unk32() {} -ARM Actor *LinkStateBase::GetGrabActor() {} -ARM ActorRef *LinkStateBase::GetGrabActorRef() {} -ARM unk32 LinkStateBase::Grab() {} -ARM s32 LinkStateBase::Get_PlayerLinkBase_Unk44() {} -ARM bool LinkStateBase::IsEquipBeingUsed(ItemFlag id) {} -ARM EquipItem *LinkStateBase::GetEquipItem(ItemFlag id) {} -ARM UnkStruct_027e0fd4 *LinkStateBase::func_ov00_020a8d40() {} -ARM unk32 LinkStateBase::func_ov00_020a8d50() {} -ARM unk32 LinkStateBase::func_ov00_020a8d6c() {} -ARM s32 LinkStateBase::PlayerControlData_vfunc_14(s32 param1) {} -ARM unk32 LinkStateBase::Get_PlayerControlData_Unk100() {} -ARM unk32 LinkStateBase::Get_PlayerControlData_Unk120() {} -ARM s32 LinkStateBase::Get_PlayerLinkBase_Unk38() {} -ARM DebugHierarchy *LinkStateBase::GetDebugHierarchy0() {} -ARM DebugHierarchy *LinkStateBase::GetDebugHierarchy1() {} + +// non-matching +ARM void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool param3) { + Vec3p uStack_1c; + s32 uStack_20; + s32 uStack_24; + + if (gPlayerControl->mUnk_7d == false) { + return; + } + + if (gGame.mUnk_101) { + return; + } + + uStack_1c = *param1; + + if (func_01ffe468(data_027e0f64->func_ov000_0208b180(), &uStack_1c, &uStack_20, &uStack_24, false)) { + return; + } + + if (param2) { + func_ov000_020b1498(uStack_20, uStack_24, *GetPlayerAngle()); + } + + if (param3) { + func_ov000_020b1498(uStack_20, uStack_24, (*GetPlayerAngle() - 0x8000) * 0x10000 >> 0x10); + } +} + +// non-matching +ARM void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) { + if (param1) { + data_ov000_020e5650 = 0x29; + } else { + data_ov000_020e5650 = 0x27; + } + + this->func_ov00_020a8a4c(&data_ov000_020e5674, 1); + *param2 = 0; +} + +ARM void LinkStateBase::func_ov00_020a8994() { + this->ChangeLinkState(data_ov000_020dc510[this->func_ov00_020a8d40()->mUnk_05a]); +} + +ARM void LinkStateBase::func_ov00_020a89bc(LinkStateBase_UnkStruct1 *param1, unk8 param2) { + UnkStruct_027e0fd4 *pUVar1 = this->func_ov00_020a8d40(); + + if (!(pUVar1->mUnk_05a != 1 && pUVar1->mUnk_05a != 2)) { + this->func_ov005_0211097c(param1, 1, param2); + return; + } + + this->func_ov00_020a8a4c(param1, param2); +} + +ARM void LinkStateBase::func_ov00_020a8a08(LinkStateBase_UnkStruct1 *param1) { + UnkStruct_027e0fd4 *pUVar1 = this->func_ov00_020a8d40(); + + if (!(pUVar1->mUnk_05a != 1 && pUVar1->mUnk_05a != 2)) { + this->func_ov005_0211097c(param1, 0, 1); + return; + } + + this->func_ov00_020a8a90(param1); +} + +ARM void LinkStateBase::func_ov00_020a8a4c(LinkStateBase_UnkStruct1 *param1, unk8 param2) { + PlayerControlData *pPVar1 = gPlayerControlData; + + pPVar1->func_ov000_020b45f8(param1, 1, param2); + + if (pPVar1->mUnk_118 != NULL) { + pPVar1->mUnk_118->mUnk_0c.mUnk_02 = 0; + } + + if (pPVar1->mUnk_138 != NULL) { + pPVar1->mUnk_138->mUnk_0c.mUnk_02 = 0; + } +} + +ARM void LinkStateBase::func_ov00_020a8a90(LinkStateBase_UnkStruct1 *param1) { + gPlayerControlData->func_ov000_020b45f8(param1, 0, 1); +} + +ARM void LinkStateBase::func_ov00_020a8ab0(unk32 *param1) { + gPlayerControlData->func_ov000_020b464c(param1, 1, 1); +} + +ARM void LinkStateBase::func_ov00_020a8ad0(unk32 param1) { + gPlayerControlData->mUnk_118->func_ov000_020c0e24(param1); + gPlayerControlData->mUnk_138->func_ov000_020c0e24(param1); +} + +ARM void LinkStateBase::func_ov00_020a8b04(s32 param1, bool param2) { + PlayerControlData *pPlayerControlData = gPlayerControlData; + + if (param2) { + pPlayerControlData->mUnk_118->mUnk_0c.func_0202e310(param1); + } else { + pPlayerControlData->mUnk_138->mUnk_0c.func_0202e310(param1); + } +} + +ARM unk32 LinkStateBase::func_ov00_020a8b3c(s32 param1) { + PlayerControlData *pPlayerControlData = gPlayerControlData; + unk32 uVar2 = 0; + PlayerControlData_118 *iVar3; + + if (param1 != 0) { + iVar3 = pPlayerControlData->mUnk_118; + } else { + iVar3 = pPlayerControlData->mUnk_138; + } + + if (iVar3->mUnk_0c.func_0202e58c() && !(iVar3->mUnk_0c.mUnk_02 & 5)) { + uVar2 = 1; + } + + return uVar2; +} + +ARM bool LinkStateBase::func_ov00_020a8b80() { + return data_027e0fd4->mUnk_0c6 >= 0; +} + +ARM bool LinkStateBase::HasFlags_PlayerLinkBase_Unk48(u16 flags) { + return this->mLink->mUnk_48 & flags; +} + +ARM u8 LinkStateBase::Get_PlayerLinkBase_Unk5e() { + return this->mLink->mUnk_5c[2]; +} + +ARM unk32 *LinkStateBase::Get_PlayerControlData_Unk004() { + return &gPlayerControlData->mUnk_004; +} + +ARM PlayerCharacter LinkStateBase::GetCurrentCharacter() { + return this->mLink->GetCurrentCharacter(); +} + +ARM PlayerControlData *LinkStateBase::GetPlayerControlData() { + return gPlayerControlData; +} + +ARM LinkStateId LinkStateBase::GetStateId() { + return this->mLink->GetStateId(); +} + +ARM s32 LinkStateBase::GetHealth() { + return this->mLink->mHealth; +} + +ARM s32 LinkStateBase::GetCurrentCharacterHealth() { + PlayerLinkBase *pLink = this->mLink; + + pLink->GetHealth(pLink->GetCurrentCharacter()); +} + +ARM bool LinkStateBase::func_ov00_020a8c34(unk32 param1, Vec3p *param2, unk32 param3) { + return data_027e0fd4->func_ov000_020b5268(param1, param2, param3); +} + +ARM Vec3p *LinkStateBase::GetPlayerPos() { + return &gPlayerPos; +} + +ARM Vec3p *LinkStateBase::GetPlayerVel() { + return &gPlayerVel; +} + +ARM UnkStruct_027e0fd4_90 *LinkStateBase::func_ov00_020a8c64() { + return &data_027e0fd4->mUnk_090; +} + +ARM s16 *LinkStateBase::GetPlayerAngle() { + return &gPlayerAngle; +} + +ARM unk32 *LinkStateBase::GetPlayer_Unk18() { + return &data_027e0fb0; +} + +ARM s32 LinkStateBase::Get_PlayerControlData_Unk32() { + return gPlayerControlData->mUnk_032; +} + +ARM Actor *LinkStateBase::GetGrabActor() { + return gActorManager->GetActor(&this->mLink->mGrabActor); +} + +ARM ActorRef *LinkStateBase::GetGrabActorRef() { + return &this->mLink->mGrabActor; +} + +ARM unk32 LinkStateBase::Grab() { + return this->mLink->Grab(); +} + +ARM s32 *LinkStateBase::Get_PlayerLinkBase_Unk44() { + return &this->mLink->mUnk_44; +} + +ARM bool LinkStateBase::IsEquipBeingUsed(ItemFlag id) { + EquipItem *pEquipItem = gItemManager->GetEquipItem(id); + return pEquipItem != NULL && pEquipItem->IsInUse(); +} + +ARM EquipItem *LinkStateBase::GetEquipItem(ItemFlag id) { + return gItemManager->GetEquipItem(id); +} + +ARM UnkStruct_027e0fd4 *LinkStateBase::func_ov00_020a8d40() { + return data_027e0fd4; +} + +ARM unk32 LinkStateBase::func_ov00_020a8d50() { + return gPlayerControlData->mUnk_138->func_ov000_020c0d68(); +} + +ARM unk32 LinkStateBase::func_ov00_020a8d6c() { + return gPlayerControlData->mUnk_118->func_ov000_020c0d68(); +} + +ARM s32 LinkStateBase::PlayerControlData_vfunc_14(s32 param1) { + u16 *iVar1 = gPlayerControlData->vfunc_14(param1); + return iVar1 != 0 ? iVar1[2] << 12 : 0x1000; +} + +ARM unk32 LinkStateBase::Get_PlayerControlData_Unk100() { + return gPlayerControlData->mUnk_100; +} + +ARM unk32 LinkStateBase::Get_PlayerControlData_Unk120() { + return gPlayerControlData->mUnk_120; +} + +ARM s32 *LinkStateBase::Get_PlayerLinkBase_Unk38() { + return &this->mLink->mUnk_38; +} + +ARM DebugHierarchy *LinkStateBase::GetDebugHierarchy0() { + return this->mLink->mDebugHierarchy_0; +} + +ARM DebugHierarchy *LinkStateBase::GetDebugHierarchy1() { + return this->mLink->mDebugHierarchy_1; +} diff --git a/src/00_Core/Player/PlayerControlData.cpp b/src/00_Core/Player/PlayerControlData.cpp index 55b979d8f..bd81efdf7 100644 --- a/src/00_Core/Player/PlayerControlData.cpp +++ b/src/00_Core/Player/PlayerControlData.cpp @@ -1,4 +1,5 @@ #include "Player/PlayerControlData.hpp" +#include "Player/LinkStateBase.hpp" void PlayerControlData::vfunc_00() {} void PlayerControlData::func_ov000_020b4440() {} @@ -6,7 +7,7 @@ void PlayerControlData::func_ov000_020b4460(s32 param1) {} void PlayerControlData::func_ov000_020b44d4(s32 param1, u32 param2) {} void PlayerControlData::func_ov000_020b4558(s32 param1, u32 param2) {} void PlayerControlData::func_ov000_020b45e0() {} -void PlayerControlData::func_ov000_020b45f8(unk32 *param1, unk8 param2, unk8 param3) {} +void PlayerControlData::func_ov000_020b45f8(LinkStateBase_UnkStruct1 *param1, unk8 param2, unk8 param3) {} void PlayerControlData::func_ov000_020b464c(unk32 *param1, unk8 param2, unk8 param3) {} void PlayerControlData::vfunc_60(unk32 param1, unk32 param2, s32 param3) {} void PlayerControlData::vfunc_68(unk32 param1, unk32 param2) {} diff --git a/src/05/Player/LinkStateBase.cpp b/src/05/Player/LinkStateBase.cpp index 1a8982631..2d2162daf 100644 --- a/src/05/Player/LinkStateBase.cpp +++ b/src/05/Player/LinkStateBase.cpp @@ -15,7 +15,7 @@ void LinkStateBase::func_ov005_02110228(s32 param1, s32 param2, s32 param3, char bool LinkStateBase::func_ov005_0211058c(s32 param1) {} void LinkStateBase::func_ov005_021107fc() {} void LinkStateBase::func_ov005_0211086c(s32 param1) {} -void LinkStateBase::func_ov005_0211097c(unk32 param1, unk8 param2, unk8 param3) {} +void LinkStateBase::func_ov005_0211097c(LinkStateBase_UnkStruct1 *param1, unk8 param2, unk8 param3) {} unk32 LinkStateBase::func_ov005_021109c0() {} void LinkStateBase::func_ov005_02110b40(s32 param1) {} void LinkStateBase::func_ov005_02110bb4() {} From c02ec807f7c89cdbe53d78e359a5446fb8ff113f Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 9 Jul 2025 01:48:48 +0200 Subject: [PATCH 4/9] add data --- include/Player/LinkStateBase.hpp | 5 +++-- src/00_Core/Player/LinkStateBase.cpp | 13 ++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index f326e9ca6..1fdae35f6 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -28,8 +28,9 @@ enum LinkStateId_ { struct LinkStateBase_UnkStruct1 { /* 00 */ unk32 mUnk_00; - /* 04 */ Vec3p mUnk_04; - /* 10 */ + /* 04 */ unk32 mUnk_04; + /* 08 */ Vec3p mUnk_08; + /* 14 */ }; class LinkStateItem; diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index 21472ef44..2bb1f6702 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -13,10 +13,11 @@ extern "C" void func_ov000_020b1498(s32, s32, s16); extern "C" void func_ov000_0207c5d4(unk32 *, unk32, s32); extern unk32 *data_027e0e58; extern unk32 data_ov000_020e5650; -extern LinkStateBase_UnkStruct1 data_ov000_020e5674; extern unk32 data_ov000_020dc510[]; extern unk32 data_027e0fb0; +char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; + THUMB void LinkStateBase::vfunc_00() {} ARM void LinkStateBase::OnStateEnter() {} @@ -353,6 +354,16 @@ ARM void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool para } } +LinkStateBase_UnkStruct1 data_ov000_020e5674 = { + .mUnk_00 = 0x29, + .mUnk_04 = 0x27, + .mUnk_08.x = 0x1000, + .mUnk_08.y = 0, + .mUnk_08.z = 0x5000, +}; +unk32 data_ov000_020e5684[] = {1, 0x1333, 0, 0x3C000}; +unk32 data_ov000_020e5694[] = {0x1F, 0x1000, 0, 0x3C000}; + // non-matching ARM void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) { if (param1) { From 396d6fe7dbf5697c0526f0785c3cb21f1d8013cc Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 9 Jul 2025 01:59:27 +0200 Subject: [PATCH 5/9] build issues --- include/Player/Battle/PlayerBattleLinkControlData.hpp | 2 +- include/Player/LinkStateBase.hpp | 5 ++--- src/00_Core/Map/MapManager.cpp | 2 +- src/00_Core/Player/LinkStateBase.cpp | 10 +++++----- src/00_Core/Player/PlayerBase.cpp | 2 +- src/00_Core/Player/PlayerLinkBase.cpp | 4 ++-- src/05/Player/LinkStateMove.cpp | 9 +++++---- .../Player/Battle/PlayerBattleLinkControlData.cpp | 2 +- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/include/Player/Battle/PlayerBattleLinkControlData.hpp b/include/Player/Battle/PlayerBattleLinkControlData.hpp index f3f9deaf6..ef9d863ff 100644 --- a/include/Player/Battle/PlayerBattleLinkControlData.hpp +++ b/include/Player/Battle/PlayerBattleLinkControlData.hpp @@ -26,7 +26,7 @@ class PlayerBattleLinkControlData : public PlayerControlData { /* 04 */ virtual ~PlayerBattleLinkControlData() override; /* 10 */ virtual unk32 GetCharacterId() override; - /* 14 */ virtual void vfunc_14(s32 param1) override; + /* 14 */ virtual u16 *vfunc_14(s32 param1) override; /* 18 */ virtual void vfunc_18() override; /* 20 */ virtual void vfunc_20() override; /* 2c */ virtual void vfunc_2c() override; diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 1fdae35f6..f326e9ca6 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -28,9 +28,8 @@ enum LinkStateId_ { struct LinkStateBase_UnkStruct1 { /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ Vec3p mUnk_08; - /* 14 */ + /* 04 */ Vec3p mUnk_04; + /* 10 */ }; class LinkStateItem; diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index dcc1124e7..e0f9f75f5 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -567,7 +567,7 @@ void MapManager::func_ov00_02082b3c(unk32 *param_2, Vec2b *param_3) { { gAdventureFlags->func_ov00_020976c8(); this->mUnk_0c = *(unk32 *) (param_2 + 0x13); - gPlayer->TeleportToEntrance(*(unk32 *) (param_2 + 0x13), false); + gPlayer->TeleportToEntrance((Vec3p *) (param_2 + 0x13), false); func_ov004_02106db8(data_027e0c68); this->mMap->vfunc_18(); } else { diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index 2bb1f6702..b16c5e6f6 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -354,12 +354,12 @@ ARM void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool para } } +unk32 data_ov000_020e5670 = 0x29; LinkStateBase_UnkStruct1 data_ov000_020e5674 = { - .mUnk_00 = 0x29, - .mUnk_04 = 0x27, - .mUnk_08.x = 0x1000, - .mUnk_08.y = 0, - .mUnk_08.z = 0x5000, + .mUnk_00 = 0x27, + .mUnk_04.x = 0x1000, + .mUnk_04.y = 0, + .mUnk_04.z = 0x5000, }; unk32 data_ov000_020e5684[] = {1, 0x1333, 0, 0x3C000}; unk32 data_ov000_020e5694[] = {0x1F, 0x1000, 0, 0x3C000}; diff --git a/src/00_Core/Player/PlayerBase.cpp b/src/00_Core/Player/PlayerBase.cpp index a33dc210d..782e249b5 100644 --- a/src/00_Core/Player/PlayerBase.cpp +++ b/src/00_Core/Player/PlayerBase.cpp @@ -16,5 +16,5 @@ s32 PlayerBase::EquipItem_vfunc_2c() {} void PlayerBase::SetHealth(s16 health) {} void PlayerBase::AddHealth(s16 amount) {} bool PlayerBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) {} -bool PlayerBase::TeleportToEntrance(unk32 entranceId, bool param2) {} +bool PlayerBase::TeleportToEntrance(Vec3p *pos, unk32 entranceId) {} bool PlayerBase::TeleportToLastEntrance(bool param1) {} diff --git a/src/00_Core/Player/PlayerLinkBase.cpp b/src/00_Core/Player/PlayerLinkBase.cpp index 0198365b0..a89cffaf6 100644 --- a/src/00_Core/Player/PlayerLinkBase.cpp +++ b/src/00_Core/Player/PlayerLinkBase.cpp @@ -22,7 +22,7 @@ bool PlayerLinkBase::func_ov000_020bba28() {} void PlayerLinkBase::func_ov000_020bba48() {} bool PlayerLinkBase::vfunc_18(s32 param1) {} bool PlayerLinkBase::CanMove() {} -bool PlayerLinkBase::vfunc_58() {} +bool PlayerLinkBase::vfunc_58(unk32 param1, ActorRef *param2) {} bool PlayerLinkBase::vfunc_5c() {} bool PlayerLinkBase::vfunc_60() {} void PlayerLinkBase::vfunc_64() {} @@ -66,7 +66,7 @@ void PlayerLinkBase::UpdateTilePos(Vec3p *param1, PlayerCharacter character) {} void PlayerLinkBase::func_ov000_020bc90c(Vec3p *param1, s32 param2) {} bool PlayerLinkBase::func_ov000_020bc960(unk32 param1, unk32 param2, unk32 param3) {} bool PlayerLinkBase::TeleportToLastEntrance(bool param1) {} -bool PlayerLinkBase::TeleportToEntrance(unk32 entranceId, bool param2) {} +bool PlayerLinkBase::TeleportToEntrance(Vec3p *pos, unk32 entranceId) {} bool PlayerLinkBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) {} void PlayerLinkBase::vfunc_74() {} bool PlayerLinkBase::GongoronCollidesWith(Cylinder *hitbox) {} diff --git a/src/05/Player/LinkStateMove.cpp b/src/05/Player/LinkStateMove.cpp index 0ca480897..9807b674b 100644 --- a/src/05/Player/LinkStateMove.cpp +++ b/src/05/Player/LinkStateMove.cpp @@ -34,10 +34,11 @@ 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 = { +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 LinkStateBase_UnkStruct1 data_ov005_021123ac = { + 0, FLOAT_TO_Q20(0.0122), FLOAT_TO_Q20(1.0), FLOAT_TO_Q20(0.0), diff --git a/src/12_Battle/Player/Battle/PlayerBattleLinkControlData.cpp b/src/12_Battle/Player/Battle/PlayerBattleLinkControlData.cpp index 59cfa4a69..3fc29ed75 100644 --- a/src/12_Battle/Player/Battle/PlayerBattleLinkControlData.cpp +++ b/src/12_Battle/Player/Battle/PlayerBattleLinkControlData.cpp @@ -3,7 +3,7 @@ PlayerBattleLinkControlData::PlayerBattleLinkControlData() {} PlayerBattleLinkControlData::~PlayerBattleLinkControlData() {} void PlayerBattleLinkControlData::vfunc_18() {} -void PlayerBattleLinkControlData::vfunc_14(s32 param1) {} +u16 *PlayerBattleLinkControlData::vfunc_14(s32 param1) {} void PlayerBattleLinkControlData::vfunc_60(unk32 param1, unk32 param2, s32 param3) {} void PlayerBattleLinkControlData::vfunc_68(unk32 param1, unk32 param2) {} void PlayerBattleLinkControlData::vfunc_64(u32 param1) {} From d88757555cb0757be0b1764e667ca70b2954a9c2 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:32:09 +0200 Subject: [PATCH 6/9] fix vtable addresses and relocs --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov004/relocs.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov004/relocs.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 22bbe9d27..afe074f7b 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -4722,7 +4722,7 @@ data_ov000_020e5650 kind:data(any) addr:0x020e5650 data_ov000_020e5674 kind:data(any) addr:0x020e5674 data_ov000_020e5684 kind:data(any) addr:0x020e5684 data_ov000_020e5694 kind:data(any) addr:0x020e5694 -_ZTV13LinkStateBase kind:data(any) addr:0x020e56ac +_ZTV13LinkStateBase kind:data(any) addr:0x020e56a4 _ZN13LinkStateMove19data_ov000_020e56f0E kind:data(any) addr:0x020e56f0 data_ov000_020e56f4$1005 kind:data(any) addr:0x020e56f4 local _ZTV13LinkStateMove kind:data(any) addr:0x020e56f8 diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index 5b9dcff46..dd24c0656 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -2213,7 +2213,7 @@ from:0x0210adb6 kind:thumb_call_arm to:0x0203780c module:main from:0x0210adbe kind:thumb_call_arm to:0x020350ac module:main from:0x0210adc4 kind:thumb_call to:0x0210adf4 module:overlay(4) from:0x0210adca kind:thumb_call_arm to:0x0202ea0c module:main -from:0x0210ade0 kind:load to:0x020e56ac module:overlay(0) +from:0x0210ade0 kind:load to:0x020e56a4 add:8 module:overlay(0) from:0x0210adec kind:thumb_call_arm to:0x0202ea0c module:main from:0x0210ae02 kind:thumb_call to:0x0210add4 module:overlay(4) from:0x0210ae40 kind:thumb_call_arm to:0x0204f614 module:main diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 2d99d2add..20f104cb0 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -4722,7 +4722,7 @@ data_ov000_020e5650 kind:data(any) addr:0x020e55f0 data_ov000_020e5674 kind:data(any) addr:0x020e5614 data_ov000_020e5684 kind:data(any) addr:0x020e5624 data_ov000_020e5694 kind:data(any) addr:0x020e5634 -_ZTV13LinkStateBase kind:data(any) addr:0x020e564c +_ZTV13LinkStateBase kind:data(any) addr:0x020e5644 _ZN13LinkStateMove19data_ov000_020e56f0E kind:data(any) addr:0x020e5690 data_ov000_020e56f4$1005 kind:data(any) addr:0x020e5694 local _ZTV13LinkStateMove kind:data(any) addr:0x020e5698 diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt index 21d9b0c80..afff38aaf 100644 --- a/config/usa/arm9/overlays/ov004/relocs.txt +++ b/config/usa/arm9/overlays/ov004/relocs.txt @@ -2213,7 +2213,7 @@ from:0x0210ad36 kind:thumb_call_arm to:0x020377c8 module:main from:0x0210ad3e kind:thumb_call_arm to:0x02035068 module:main from:0x0210ad44 kind:thumb_call to:0x0210ad74 module:overlay(4) from:0x0210ad4a kind:thumb_call_arm to:0x0202ea08 module:main -from:0x0210ad60 kind:load to:0x020e564c module:overlay(0) +from:0x0210ad60 kind:load to:0x020e5644 add:8 module:overlay(0) from:0x0210ad6c kind:thumb_call_arm to:0x0202ea08 module:main from:0x0210ad82 kind:thumb_call to:0x0210ad54 module:overlay(4) from:0x0210adc0 kind:thumb_call_arm to:0x0204f5d0 module:main From c2f4b29e837564dd029193823b4b16303ab0d072 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:35:12 +0200 Subject: [PATCH 7/9] add data_ov000_020dc510 rodata --- src/00_Core/Player/LinkStateBase.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index b16c5e6f6..6235977dc 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -13,11 +13,14 @@ extern "C" void func_ov000_020b1498(s32, s32, s16); extern "C" void func_ov000_0207c5d4(unk32 *, unk32, s32); extern unk32 *data_027e0e58; extern unk32 data_ov000_020e5650; -extern unk32 data_ov000_020dc510[]; extern unk32 data_027e0fb0; char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; +const LinkStateId data_ov000_020dc510[] = { + LinkStateId_Move, LinkStateId_Follow, LinkStateId_Move, LinkStateId_Move, LinkStateId_Move, LinkStateId_Move, +}; + THUMB void LinkStateBase::vfunc_00() {} ARM void LinkStateBase::OnStateEnter() {} From 50d0b0643ce5454a4318fbcf0f1e66bfb1a9923b Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:54:05 +0200 Subject: [PATCH 8/9] improve data and fix linker issues --- config/eur/arm9/overlays/ov000/symbols.txt | 7 ++--- config/usa/arm9/overlays/ov000/symbols.txt | 7 ++--- src/00_Core/Player/LinkStateBase.cpp | 31 +++++++++++----------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index afe074f7b..81a94ec36 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1921,7 +1921,7 @@ _ZN13LinkStateBase18func_ov00_020a8774EP5Vec3pi kind:function(arm,size=0xd0) add _ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) addr:0x020a8844 _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x020a8954 _ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x020a8994 -_ZN13LinkStateBase18func_ov00_020a89bcEP24LinkStateBase_UnkStruct1i kind:function(arm,size=0x4c) addr:0x020a89bc +_ZN13LinkStateBase18func_ov00_020a89bcEP24LinkStateBase_UnkStruct1c kind:function(arm,size=0x4c) addr:0x020a89bc _ZN13LinkStateBase18func_ov00_020a8a08EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x44) addr:0x020a8a08 _ZN13LinkStateBase18func_ov00_020a8a4cEP24LinkStateBase_UnkStruct1c kind:function(arm,size=0x44) addr:0x020a8a4c _ZN13LinkStateBase18func_ov00_020a8a90EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x20) addr:0x020a8a90 @@ -4718,8 +4718,9 @@ data_ov000_020e5640 kind:data(any) addr:0x020e5640 data_ov000_020e5644 kind:data(any) addr:0x020e5644 data_ov000_020e5648 kind:data(any) addr:0x020e5648 data_ov000_020e564c kind:data(any) addr:0x020e564c -data_ov000_020e5650 kind:data(any) addr:0x020e5650 -data_ov000_020e5674 kind:data(any) addr:0x020e5674 +gShipParts kind:data(any) addr:0x020e5650 +data_ov000_020e5670$2102 kind:data(any) addr:0x020e5670 +data_ov000_020e5674$2103 kind:data(any) addr:0x020e5674 data_ov000_020e5684 kind:data(any) addr:0x020e5684 data_ov000_020e5694 kind:data(any) addr:0x020e5694 _ZTV13LinkStateBase kind:data(any) addr:0x020e56a4 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 20f104cb0..aa5e568ad 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1921,7 +1921,7 @@ _ZN13LinkStateBase18func_ov00_020a8774EP5Vec3pi kind:function(arm,size=0xd0) add _ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) addr:0x020a87e4 _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x020a88f4 _ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x020a8934 -_ZN13LinkStateBase18func_ov00_020a89bcEP24LinkStateBase_UnkStruct1i kind:function(arm,size=0x4c) addr:0x020a895c +_ZN13LinkStateBase18func_ov00_020a89bcEP24LinkStateBase_UnkStruct1c kind:function(arm,size=0x4c) addr:0x020a895c _ZN13LinkStateBase18func_ov00_020a8a08EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x44) addr:0x020a89a8 _ZN13LinkStateBase18func_ov00_020a8a4cEP24LinkStateBase_UnkStruct1c kind:function(arm,size=0x44) addr:0x020a89ec _ZN13LinkStateBase18func_ov00_020a8a90EP24LinkStateBase_UnkStruct1 kind:function(arm,size=0x20) addr:0x020a8a30 @@ -4718,8 +4718,9 @@ data_ov000_020e5640 kind:data(any) addr:0x020e55e0 data_ov000_020e5644 kind:data(any) addr:0x020e55e4 data_ov000_020e5648 kind:data(any) addr:0x020e55e8 data_ov000_020e564c kind:data(any) addr:0x020e55ec -data_ov000_020e5650 kind:data(any) addr:0x020e55f0 -data_ov000_020e5674 kind:data(any) addr:0x020e5614 +gShipParts kind:data(any) addr:0x020e55f0 +data_ov000_020e5670$2102 kind:data(any) addr:0x020e5610 +data_ov000_020e5674$2103 kind:data(any) addr:0x020e5614 data_ov000_020e5684 kind:data(any) addr:0x020e5624 data_ov000_020e5694 kind:data(any) addr:0x020e5634 _ZTV13LinkStateBase kind:data(any) addr:0x020e5644 diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index 6235977dc..ff5a2fd71 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -12,12 +12,11 @@ extern "C" void func_ov000_020b1a4c(Vec3p *, Vec3p *); extern "C" void func_ov000_020b1498(s32, s32, s16); extern "C" void func_ov000_0207c5d4(unk32 *, unk32, s32); extern unk32 *data_027e0e58; -extern unk32 data_ov000_020e5650; extern unk32 data_027e0fb0; -char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; +static char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; -const LinkStateId data_ov000_020dc510[] = { +static const LinkStateId data_ov000_020dc510[] = { LinkStateId_Move, LinkStateId_Follow, LinkStateId_Move, LinkStateId_Move, LinkStateId_Move, LinkStateId_Move, }; @@ -357,28 +356,28 @@ ARM void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool para } } -unk32 data_ov000_020e5670 = 0x29; -LinkStateBase_UnkStruct1 data_ov000_020e5674 = { - .mUnk_00 = 0x27, - .mUnk_04.x = 0x1000, - .mUnk_04.y = 0, - .mUnk_04.z = 0x5000, -}; -unk32 data_ov000_020e5684[] = {1, 0x1333, 0, 0x3C000}; -unk32 data_ov000_020e5694[] = {0x1F, 0x1000, 0, 0x3C000}; - -// non-matching ARM void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) { + static unk32 data_ov000_020e5670 = 0x29; + static LinkStateBase_UnkStruct1 data_ov000_020e5674 = { + .mUnk_00 = 0x27, + .mUnk_04.x = FLOAT_TO_Q20(1.0), + .mUnk_04.y = FLOAT_TO_Q20(0.0), + .mUnk_04.z = FLOAT_TO_Q20(5.0), + }; + if (param1) { - data_ov000_020e5650 = 0x29; + data_ov000_020e5670 = 0x29; } else { - data_ov000_020e5650 = 0x27; + data_ov000_020e5670 = 0x27; } this->func_ov00_020a8a4c(&data_ov000_020e5674, 1); *param2 = 0; } +unk32 data_ov000_020e5684[] = {1, 0x1333, 0, 0x3C000}; +unk32 data_ov000_020e5694[] = {0x1F, 0x1000, 0, 0x3C000}; + ARM void LinkStateBase::func_ov00_020a8994() { this->ChangeLinkState(data_ov000_020dc510[this->func_ov00_020a8d40()->mUnk_05a]); } From 3863869875a357ee891067cab0c9f1533b4dce9a Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Fri, 30 Jan 2026 18:25:08 +0100 Subject: [PATCH 9/9] fix oddities --- config/eur/arm9/overlays/ov000/symbols.txt | 14 +++---- config/usa/arm9/overlays/ov000/delinks.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 14 +++---- include/DTCM/UnkStruct_027e0f64.hpp | 7 +--- include/Player/LinkStateBase.hpp | 6 +-- include/Player/PlayerBase.hpp | 2 +- include/Player/PlayerControlData.hpp | 17 ++------ include/Player/PlayerLinkBase.hpp | 2 +- include/Unknown/UnkStruct_ov000_020c0c08.hpp | 6 ++- src/00_Core/Player/LinkStateBase.cpp | 43 ++++++++------------ src/00_Core/Player/LinkStateDamage.cpp | 2 +- src/00_Core/Player/PlayerBase.cpp | 7 +++- src/00_Core/Player/PlayerLinkBase.cpp | 2 +- src/59_Hammer/Player/EquipHammer.cpp | 2 +- 14 files changed, 54 insertions(+), 72 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index c1ca59d1d..cfd8a9f6e 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1874,7 +1874,7 @@ _ZN10PlayerBase17EquipCollidesWithEP8Cylinderi kind:function(arm,size=0x18) addr _ZN10PlayerBase18EquipItem_vfunc_2cEv kind:function(arm,size=0x38) addr:0x020a7cfc _ZN10PlayerBase9SetHealthEs kind:function(arm,size=0x58) addr:0x020a7d34 _ZN10PlayerBase9AddHealthEs kind:function(arm,size=0x68) addr:0x020a7d8c -_ZN10PlayerBase18TeleportToEntranceEib kind:function(arm,size=0x7c) addr:0x020a7df4 +_ZN10PlayerBase18TeleportToEntranceEtb kind:function(arm,size=0x7c) addr:0x020a7df4 _ZN10PlayerBase8TeleportEP5Vec3psibb kind:function(arm,size=0x118) addr:0x020a7e70 _ZN10PlayerBase22TeleportToLastEntranceEb kind:function(arm,size=0x1c) addr:0x020a7f88 _ZN13LinkStateBase8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020a7fa4 @@ -1906,8 +1906,8 @@ _ZN13LinkStateBase18func_ov00_020a8390EjP19Actor_UnkStruct_020 kind:function(arm _ZN13LinkStateBase18func_ov00_020a84bcEb kind:function(arm,size=0x4c) addr:0x020a84bc _ZN13LinkStateBase18func_ov00_020a8508Ei kind:function(arm,size=0x34) addr:0x020a8508 _ZN13LinkStateBase18func_ov00_020a853cEP5Vec3p kind:function(arm,size=0x70) addr:0x020a853c -_ZN13LinkStateBase8TeleportEP5Vec3psibb kind:function(arm,size=0x34) addr:0x020a85ac -_ZN13LinkStateBase18TeleportToEntranceEP5Vec3p kind:function(arm,size=0x1c) addr:0x020a85e0 +_ZN13LinkStateBase8TeleportEP5Vec3p kind:function(arm,size=0x34) addr:0x020a85ac +_ZN13LinkStateBase18TeleportToEntranceEt kind:function(arm,size=0x1c) addr:0x020a85e0 _ZN13LinkStateBase23PlayerLinkBase_vfunc_74Ev kind:function(arm,size=0x18) addr:0x020a85fc _ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ei kind:function(arm,size=0x18) addr:0x020a8614 _ZN13LinkStateBase24Get_PlayerLinkBase_Unk48Ev kind:function(arm,size=0xc) addr:0x020a862c @@ -2712,11 +2712,11 @@ func_ov000_020c0cc8 kind:function(arm,size=0x54) addr:0x020c0cc8 func_ov000_020c0d1c kind:function(arm,size=0x30) addr:0x020c0d1c func_ov000_020c0d4c kind:function(arm,size=0x8) addr:0x020c0d4c func_ov000_020c0d54 kind:function(arm,size=0x14) addr:0x020c0d54 -_ZN21PlayerControlData_11819func_ov000_020c0d68Ev kind:function(arm,size=0x8) addr:0x020c0d68 +_ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0d68Ev kind:function(arm,size=0x8) addr:0x020c0d68 func_ov000_020c0d70 kind:function(arm,size=0x24) addr:0x020c0d70 func_ov000_020c0d94 kind:function(arm,size=0x70) addr:0x020c0d94 _ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0e04Ev kind:function(arm,size=0x20) addr:0x020c0e04 -_ZN21PlayerControlData_11819func_ov000_020c0e24Ei kind:function(arm,size=0x38) addr:0x020c0e24 +_ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0e24Ei kind:function(arm,size=0x38) addr:0x020c0e24 _ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0e5cEi kind:function(arm,size=0x38) addr:0x020c0e5c func_ov000_020c0e94 kind:function(arm,size=0xc) addr:0x020c0e94 func_ov000_020c0ea0 kind:function(arm,size=0x20) addr:0x020c0ea0 @@ -4777,7 +4777,7 @@ data_ov000_020e5640 kind:data(any) addr:0x020e5640 data_ov000_020e5644 kind:data(any) addr:0x020e5644 data_ov000_020e5648 kind:data(any) addr:0x020e5648 data_ov000_020e564c kind:data(any) addr:0x020e564c -gShipParts kind:data(any) addr:0x020e5650 +gShipParts kind:data(any) addr:0x020e5650 local data_ov000_020e5670$2102 kind:data(any) addr:0x020e5670 data_ov000_020e5674$2103 kind:data(any) addr:0x020e5674 data_ov000_020e5684 kind:data(any) addr:0x020e5684 @@ -4839,7 +4839,7 @@ _ZTV13LinkStateItem kind:data(any) addr:0x020e5a40 @1121 kind:data(any) addr:0x020e5aa0 @1120 kind:data(any) addr:0x020e5aa4 @1119 kind:data(any) addr:0x020e5aa8 -gShipParts kind:data(any) addr:0x020e5aac +gShipParts kind:data(any) addr:0x020e5aac local _ZN15LinkStateDamage19data_ov000_020e5accE kind:data(any) addr:0x020e5acc _ZN15LinkStateDamage19data_ov000_020e5adcE kind:data(any) addr:0x020e5adc _ZN15LinkStateDamage19data_ov000_020e5aecE kind:data(any) addr:0x020e5aec diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index cae2e579a..e84a7d02e 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -156,4 +156,4 @@ src/00_Core/Game/GameModePlay.cpp: src/00_Core/Render/ModelRender.cpp: .text start:0x020a950c end:0x020a9980 - .data start:0x020e57b8 end:0x020e5800 \ No newline at end of file + .data start:0x020e57b8 end:0x020e5800 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 6453a5ce4..1f0c81442 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1874,7 +1874,7 @@ _ZN10PlayerBase17EquipCollidesWithEP8Cylinderi kind:function(arm,size=0x18) addr _ZN10PlayerBase18EquipItem_vfunc_2cEv kind:function(arm,size=0x38) addr:0x020a7c9c _ZN10PlayerBase9SetHealthEs kind:function(arm,size=0x58) addr:0x020a7cd4 _ZN10PlayerBase9AddHealthEs kind:function(arm,size=0x68) addr:0x020a7d2c -_ZN10PlayerBase18TeleportToEntranceEib kind:function(arm,size=0x7c) addr:0x020a7d94 +_ZN10PlayerBase18TeleportToEntranceEtb kind:function(arm,size=0x7c) addr:0x020a7d94 _ZN10PlayerBase8TeleportEP5Vec3psibb kind:function(arm,size=0x118) addr:0x020a7e10 _ZN10PlayerBase22TeleportToLastEntranceEb kind:function(arm,size=0x1c) addr:0x020a7f28 _ZN13LinkStateBase8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020a7f44 @@ -1906,8 +1906,8 @@ _ZN13LinkStateBase18func_ov00_020a8390EjP19Actor_UnkStruct_020 kind:function(arm _ZN13LinkStateBase18func_ov00_020a84bcEb kind:function(arm,size=0x4c) addr:0x020a845c _ZN13LinkStateBase18func_ov00_020a8508Ei kind:function(arm,size=0x34) addr:0x020a84a8 _ZN13LinkStateBase18func_ov00_020a853cEP5Vec3p kind:function(arm,size=0x70) addr:0x020a84dc -_ZN13LinkStateBase8TeleportEP5Vec3psibb kind:function(arm,size=0x34) addr:0x020a854c -_ZN13LinkStateBase18TeleportToEntranceEP5Vec3p kind:function(arm,size=0x1c) addr:0x020a8580 +_ZN13LinkStateBase8TeleportEP5Vec3p kind:function(arm,size=0x34) addr:0x020a854c +_ZN13LinkStateBase18TeleportToEntranceEt kind:function(arm,size=0x1c) addr:0x020a8580 _ZN13LinkStateBase23PlayerLinkBase_vfunc_74Ev kind:function(arm,size=0x18) addr:0x020a859c _ZN13LinkStateBase23PlayerLinkBase_vfunc_88Ei kind:function(arm,size=0x18) addr:0x020a85b4 _ZN13LinkStateBase24Get_PlayerLinkBase_Unk48Ev kind:function(arm,size=0xc) addr:0x020a85cc @@ -2712,11 +2712,11 @@ func_ov000_020c0cc8 kind:function(arm,size=0x54) addr:0x020c0c68 func_ov000_020c0d1c kind:function(arm,size=0x30) addr:0x020c0cbc func_ov000_020c0d4c kind:function(arm,size=0x8) addr:0x020c0cec func_ov000_020c0d54 kind:function(arm,size=0x14) addr:0x020c0cf4 -_ZN21PlayerControlData_11819func_ov000_020c0d68Ev kind:function(arm,size=0x8) addr:0x020c0d08 +_ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0d68Ev kind:function(arm,size=0x8) addr:0x020c0d08 func_ov000_020c0d70 kind:function(arm,size=0x24) addr:0x020c0d10 func_ov000_020c0d94 kind:function(arm,size=0x70) addr:0x020c0d34 _ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0e04Ev kind:function(arm,size=0x20) addr:0x020c0da4 -_ZN21PlayerControlData_11819func_ov000_020c0e24Ei kind:function(arm,size=0x38) addr:0x020c0dc4 +_ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0e24Ei kind:function(arm,size=0x38) addr:0x020c0dc4 _ZN24UnkStruct_ov000_020c0c0819func_ov000_020c0e5cEi kind:function(arm,size=0x38) addr:0x020c0dfc func_ov000_020c0e94 kind:function(arm,size=0xc) addr:0x020c0e34 func_ov000_020c0ea0 kind:function(arm,size=0x20) addr:0x020c0e40 @@ -4777,7 +4777,7 @@ data_ov000_020e5640 kind:data(any) addr:0x020e55e0 data_ov000_020e5644 kind:data(any) addr:0x020e55e4 data_ov000_020e5648 kind:data(any) addr:0x020e55e8 data_ov000_020e564c kind:data(any) addr:0x020e55ec -gShipParts kind:data(any) addr:0x020e55f0 +gShipParts kind:data(any) addr:0x020e55f0 local data_ov000_020e5670$2102 kind:data(any) addr:0x020e5610 data_ov000_020e5674$2103 kind:data(any) addr:0x020e5614 data_ov000_020e5684 kind:data(any) addr:0x020e5624 @@ -4839,7 +4839,7 @@ _ZTV13LinkStateItem kind:data(any) addr:0x020e59e0 @1121 kind:data(any) addr:0x020e5a40 @1120 kind:data(any) addr:0x020e5a44 @1119 kind:data(any) addr:0x020e5a48 -gShipParts kind:data(any) addr:0x020e5a4c +gShipParts kind:data(any) addr:0x020e5a4c local _ZN15LinkStateDamage19data_ov000_020e5accE kind:data(any) addr:0x020e5a6c _ZN15LinkStateDamage19data_ov000_020e5adcE kind:data(any) addr:0x020e5a7c _ZN15LinkStateDamage19data_ov000_020e5aecE kind:data(any) addr:0x020e5a8c diff --git a/include/DTCM/UnkStruct_027e0f64.hpp b/include/DTCM/UnkStruct_027e0f64.hpp index 1e7074b5a..f556316e6 100644 --- a/include/DTCM/UnkStruct_027e0f64.hpp +++ b/include/DTCM/UnkStruct_027e0f64.hpp @@ -5,14 +5,11 @@ #include "Player/Bhio.hpp" -struct UnkStruct_027e0f64_04 { - /* 000 */ u8 pad[0x1B4 - 0x00]; - /* 1b4 */ unk32 mUnk_1b4; -}; - struct UnkStruct_027e0f64_04 { /* 000 */ unk8 mUnk_00[0x15c]; /* 15c */ unk32 mUnk_15c; + /* 160 */ unk8 mUnk_160[0x1B4 - 0x160]; + /* 1b4 */ unk32 mUnk_1b4; }; class UnkStruct_027e0f64 { diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 0d48dfc0e..f545b26eb 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -81,8 +81,8 @@ class LinkStateBase : public SysObject { void func_ov00_020a84bc(bool isVisible); void func_ov00_020a8508(unk32 param_1); void func_ov00_020a853c(Vec3p *param1); - void Teleport(Vec3p *pos, s16 angle, unk32 param3, unk32 param4, unk32 param5); - void TeleportToEntrance(Vec3p *pos); + void Teleport(Vec3p *pos); + void TeleportToEntrance(u16 entranceId); void PlayerLinkBase_vfunc_74(); void PlayerLinkBase_vfunc_88(unk32 param_1); u16 Get_PlayerLinkBase_Unk48(); @@ -117,7 +117,7 @@ class LinkStateBase : public SysObject { Vec3p *GetPlayerPos(); Vec3p *GetPlayerVel(); UnkStruct_027e0fd4_90 *func_ov00_020a8c64(); - u16 *GetPlayerAngle(); + s16 *GetPlayerAngle(); void *GetPlayer_Unk18(); s32 Get_PlayerControlData_Unk32(); Actor *GetGrabActor(); diff --git a/include/Player/PlayerBase.hpp b/include/Player/PlayerBase.hpp index 722c0a61f..a94290b9f 100644 --- a/include/Player/PlayerBase.hpp +++ b/include/Player/PlayerBase.hpp @@ -37,7 +37,7 @@ class PlayerBase : public SysObject { /* 2c */ virtual void vfunc_2c(s32 param1, unk8 param2) = 0; /* 30 */ virtual bool vfunc_30(s32 param1, Vec3p *param2, s32 param3) = 0; /* 34 */ virtual bool Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5); - /* 38 */ virtual bool TeleportToEntrance(Vec3p *pos, unk32 entranceId); + /* 38 */ virtual bool TeleportToEntrance(u16 entranceId, bool param2); /* 3c */ virtual bool TeleportToLastEntrance(bool param1); /* 40 */ virtual void AddHealth(s16 amount); /* 44 */ virtual void vfunc_44() = 0; diff --git a/include/Player/PlayerControlData.hpp b/include/Player/PlayerControlData.hpp index d9ddd4b7e..cc2083838 100644 --- a/include/Player/PlayerControlData.hpp +++ b/include/Player/PlayerControlData.hpp @@ -6,18 +6,7 @@ #include "System/SysNew.hpp" #include "Unknown/UnkStruct_0202e1a0.hpp" - -class PlayerControlData_118 { -public: - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ unk32 mUnk_08; - /* 0c */ UnkStruct_0202e1a0 mUnk_0c; - /* 24 */ - - void func_ov000_020c0e24(unk32 param1); - unk32 func_ov000_020c0d68(); -}; +#include "Unknown/UnkStruct_ov000_020c0c08.hpp" class PlayerControlData : public SysObject { public: @@ -39,11 +28,11 @@ class PlayerControlData : public SysObject { /* 040 */ unk8 mUnk_040[0xc0]; /* 100 */ unk32 mUnk_100; /* 104 */ unk8 mUnk_104[0x14]; - /* 118 */ PlayerControlData_118 *mUnk_118; + /* 118 */ UnkStruct_ov000_020c0c08 *mUnk_118; /* 11c */ unk8 mUnk_11c[4]; /* 120 */ unk32 mUnk_120; /* 124 */ unk8 mUnk_124[0x14]; - /* 138 */ PlayerControlData_118 *mUnk_138; + /* 138 */ UnkStruct_ov000_020c0c08 *mUnk_138; /* 13c */ unk8 mUnk_13c[4]; /* 140 */ unk32 mUnk_140; /* 144 */ unk32 mUnk_144; diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp index 24e7862a9..bf12e2697 100644 --- a/include/Player/PlayerLinkBase.hpp +++ b/include/Player/PlayerLinkBase.hpp @@ -58,7 +58,7 @@ class PlayerLinkBase : public PlayerBase { /* 2c */ virtual void vfunc_2c(s32 param1, unk8 param2) override; /* 30 */ virtual bool vfunc_30(s32 param1, Vec3p *param2, s32 param3) override; /* 34 */ virtual bool Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) override; - /* 38 */ virtual bool TeleportToEntrance(Vec3p *pos, unk32 entranceId) override; + /* 38 */ virtual bool TeleportToEntrance(u16 entranceId, bool param2) override; /* 3c */ virtual bool TeleportToLastEntrance(bool param1) override; /* 50 */ virtual ~PlayerLinkBase() override; /* 58 */ virtual bool vfunc_58(unk32 param1, ActorRef *param2); diff --git a/include/Unknown/UnkStruct_ov000_020c0c08.hpp b/include/Unknown/UnkStruct_ov000_020c0c08.hpp index 2e16bed32..4570e8b87 100644 --- a/include/Unknown/UnkStruct_ov000_020c0c08.hpp +++ b/include/Unknown/UnkStruct_ov000_020c0c08.hpp @@ -34,7 +34,9 @@ class UnkStruct_ov000_020c0c08 : public SysObject { UnkStruct_ov000_020c0c08(UnkStruct_ov000_020c0c08_04 *param1, ItemModel *param2); - void func_ov000_020c0c44(void *); + void func_ov000_020c0c44(void *param1); + unk32 func_ov000_020c0d68(); void func_ov000_020c0e04(); - void func_ov000_020c0e5c(unk32); + void func_ov000_020c0e24(unk32 param1); + void func_ov000_020c0e5c(unk32 param1); }; diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index e7fee569b..7606d45fa 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -1,5 +1,6 @@ #include "Player/LinkStateBase.hpp" #include "Actor/ActorSpawner.hpp" +#include "DTCM/UnkStruct_027e0e58.hpp" #include "DTCM/UnkStruct_027e0f64.hpp" #include "Item/ItemManager.hpp" #include "Message/MessageManager.hpp" @@ -10,8 +11,6 @@ extern "C" bool func_01ffe468(unk32 param1, Vec3p *param2, s32 *param3, s32 *par extern "C" void ApproachAngle_thunk(s16 *src, s16 dst, u32 param3); extern "C" void func_ov000_020b1a4c(Vec3p *, Vec3p *); extern "C" void func_ov000_020b1498(s32, s32, s16); -extern "C" void func_ov000_0207c5d4(unk32 *, unk32, s32); -extern unk32 *data_027e0e58; extern unk32 data_027e0fb0; static char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; @@ -196,30 +195,25 @@ ARM void LinkStateBase::func_ov00_020a8360(ActorTypeId type) { ARM Actor *LinkStateBase::func_ov00_020a8390(ActorTypeId type, Actor_UnkStruct_020 *param2) { Actor *pActor; ActorRef *pGrabRef; - ActorSpawnOptions local_44; - ActorRef local_4c; - ActorSpawner *pActorSpawner; - - local_44.mUnk_1c.id = -1; - local_44.mUnk_1c.index = -1; - local_44.func_ov000_020c3348(); - - pActorSpawner = gActorSpawner; + ActorSpawnOptions local_44; local_44.mUnk_00 = *param2; local_44.mUnk_1c.id = 0; + ActorRef local_4c; local_4c.id = -1; local_4c.index = -1; + ActorSpawner *pActorSpawner = gActorSpawner; pActorSpawner->Spawn(type, this->GetPlayerPos(), &local_44, &local_4c); + pActor = gActorManager->GetActor(&local_4c); if (pActor != NULL) { pGrabRef = this->GetGrabActorRef(); pGrabRef->id = pActor->mRef.id; pGrabRef->index = pActor->mRef.index; - // pActor->SetUnk_11b(); + pActor->Grab(); } return pActor; @@ -232,7 +226,7 @@ ARM void LinkStateBase::func_ov00_020a84bc(bool isVisible) { sVar1 = isVisible ? 0x1F : 0; PlayerBase::GetEquipSword()->mUnk_5c = sVar1; PlayerBase::GetEquipShield()->mUnk_0e = sVar1; - func_ov000_0207c5d4(data_027e0e58, 1, isVisible); + data_027e0e58->func_ov000_0207c5d4(1, isVisible); } ARM void LinkStateBase::func_ov00_020a8508(unk32 param_1) { @@ -255,13 +249,12 @@ ARM void LinkStateBase::func_ov00_020a853c(Vec3p *param1) { func_ov000_020b1a4c(param1, &VStack_18); } -// non-matching -ARM void LinkStateBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, unk32 param4, unk32 param5) { - this->mLink->Teleport(pos, angle, param3, 0, 1); +ARM void LinkStateBase::Teleport(Vec3p *pos) { + this->mLink->Teleport(pos, 0, 0, 0, 1); } -ARM void LinkStateBase::TeleportToEntrance(Vec3p *pos) { - this->mLink->TeleportToEntrance(pos, false); +ARM void LinkStateBase::TeleportToEntrance(u16 entranceId) { + this->mLink->TeleportToEntrance(entranceId, false); } ARM void LinkStateBase::PlayerLinkBase_vfunc_74() { @@ -318,10 +311,8 @@ ARM bool LinkStateBase::func_ov00_020a8704(s16 *pAngle) { iVar3 = func_ov00_020a8d40(); if (iVar3->mUnk_05c > 0 && (iVar3->mUnk_064 != 0 || iVar2->mUnk_06c != 0)) { - s16 uVar1 = FX_Atan2Idx(iVar2->mUnk_064, iVar2->mUnk_06c); - s16 *angle = (s16 *) GetPlayerAngle(); - - *pAngle = *angle - uVar1; + s16 uVar1 = FX_Atan2Idx(iVar2->mUnk_064, iVar2->mUnk_06c); + *pAngle = *GetPlayerAngle() - uVar1; return true; } @@ -347,7 +338,7 @@ ARM void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool para uStack_1c = *param1; - if (func_01ffe468(data_027e0f64->func_ov000_0208b180(), &uStack_1c, &uStack_20, &uStack_24, false)) { + if (func_01ffe468(data_027e0f64->func_ov000_0208b180(), &uStack_1c, &uStack_20, &uStack_24, false) ? false : true) { return; } @@ -448,7 +439,7 @@ ARM void LinkStateBase::func_ov00_020a8b04(s32 param1, bool param2) { ARM unk32 LinkStateBase::func_ov00_020a8b3c(s32 param1) { PlayerControlData *pPlayerControlData = gPlayerControlData; unk32 uVar2 = 0; - PlayerControlData_118 *iVar3; + UnkStruct_ov000_020c0c08 *iVar3; if (param1 != 0) { iVar3 = pPlayerControlData->mUnk_118; @@ -517,8 +508,8 @@ ARM UnkStruct_027e0fd4_90 *LinkStateBase::func_ov00_020a8c64() { return &data_027e0fd4->mUnk_090; } -ARM u16 *LinkStateBase::GetPlayerAngle() { - return (u16 *) &gPlayerAngle; +ARM s16 *LinkStateBase::GetPlayerAngle() { + return &gPlayerAngle; } ARM void *LinkStateBase::GetPlayer_Unk18() { diff --git a/src/00_Core/Player/LinkStateDamage.cpp b/src/00_Core/Player/LinkStateDamage.cpp index 62968434c..478f9ca39 100644 --- a/src/00_Core/Player/LinkStateDamage.cpp +++ b/src/00_Core/Player/LinkStateDamage.cpp @@ -123,7 +123,7 @@ ARM void LinkStateDamage::Knockback(Vec3p *knockbackVec, unk32 param2) { playerVel->y = knockbackVec->y; playerVel->z = knockbackVec->z; s16 groundAngle = FX_Atan2Idx(knockbackVec->x, knockbackVec->z); - u16 *playerAngle = this->GetPlayerAngle(); + s16 *playerAngle = this->GetPlayerAngle(); *playerAngle = groundAngle - 0x8000; this->mUnk_24[12] = 0; this->mUnk_22 = param2; diff --git a/src/00_Core/Player/PlayerBase.cpp b/src/00_Core/Player/PlayerBase.cpp index 23babf392..2e2fea51c 100644 --- a/src/00_Core/Player/PlayerBase.cpp +++ b/src/00_Core/Player/PlayerBase.cpp @@ -122,13 +122,16 @@ ARM void PlayerBase::AddHealth(s16 amount) { } } -ARM bool PlayerBase::TeleportToEntrance(unk32 entranceId, bool param2) { +ARM bool PlayerBase::TeleportToEntrance(u16 entranceId, bool param2) { Entrance entrance; + gMapManager->GetEntrancePos(&entrance, entranceId); + if (this->Teleport(&entrance.mPos, entrance.mAngle, entrance.mUnk_10, param2, false)) { mEntranceId = entranceId; return true; } + return false; } @@ -163,5 +166,5 @@ ARM bool PlayerBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, } ARM bool PlayerBase::TeleportToLastEntrance(bool param1) { - // this->TeleportToEntrance(mEntranceId, param1); + this->TeleportToEntrance(mEntranceId, param1); } diff --git a/src/00_Core/Player/PlayerLinkBase.cpp b/src/00_Core/Player/PlayerLinkBase.cpp index a89cffaf6..9cd820fb6 100644 --- a/src/00_Core/Player/PlayerLinkBase.cpp +++ b/src/00_Core/Player/PlayerLinkBase.cpp @@ -66,7 +66,7 @@ void PlayerLinkBase::UpdateTilePos(Vec3p *param1, PlayerCharacter character) {} void PlayerLinkBase::func_ov000_020bc90c(Vec3p *param1, s32 param2) {} bool PlayerLinkBase::func_ov000_020bc960(unk32 param1, unk32 param2, unk32 param3) {} bool PlayerLinkBase::TeleportToLastEntrance(bool param1) {} -bool PlayerLinkBase::TeleportToEntrance(Vec3p *pos, unk32 entranceId) {} +bool PlayerLinkBase::TeleportToEntrance(u16 entranceId, bool param2) {} bool PlayerLinkBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) {} void PlayerLinkBase::vfunc_74() {} bool PlayerLinkBase::GongoronCollidesWith(Cylinder *hitbox) {} diff --git a/src/59_Hammer/Player/EquipHammer.cpp b/src/59_Hammer/Player/EquipHammer.cpp index 0e869d3ab..900e43c34 100644 --- a/src/59_Hammer/Player/EquipHammer.cpp +++ b/src/59_Hammer/Player/EquipHammer.cpp @@ -10,7 +10,7 @@ static char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; -extern "C" void ApproachAngle_thunk(u16 *src, s16 dst, u32 param3); +extern "C" void ApproachAngle_thunk(s16 *src, s16 dst, u32 param3); ARM bool EquipHammer::IsUsable(unk32 param1) const { ActorNavi *pAVar3;