From fc691f4c8f76d11d6b47149fefadaca4470ab2a1 Mon Sep 17 00:00:00 2001 From: Aetias <144526980+AetiasHax@users.noreply.github.com> Date: Sun, 16 Nov 2025 17:14:48 +0100 Subject: [PATCH] LinkStateInteract (#135) * Map symbol in Game * LinkStateInteract 19% * DebugHierarchy -> Bhio * LinkStateInteract 89% * LinkStateInteract 93% * Japanese strings * Fix build * Fix regression * Fix regressions * Rename BhioBase.cpp --- .gitignore | 1 + config/eur/arm9/itcm/symbols.txt | 2 +- config/eur/arm9/overlays/ov000/delinks.txt | 3 +- config/eur/arm9/overlays/ov000/relocs.txt | 12 +- config/eur/arm9/overlays/ov000/symbols.txt | 38 +- config/eur/arm9/overlays/ov004/symbols.txt | 8 +- config/eur/arm9/symbols.txt | 40 +- config/usa/arm9/itcm/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/delinks.txt | 3 +- config/usa/arm9/overlays/ov000/relocs.txt | 12 +- config/usa/arm9/overlays/ov000/symbols.txt | 38 +- config/usa/arm9/overlays/ov004/symbols.txt | 8 +- config/usa/arm9/symbols.txt | 42 +- include/Actor/ActorTypeId.hpp | 4 +- include/DTCM/UnkStruct_027e0c68.hpp | 4 +- include/DTCM/UnkStruct_027e0f64.hpp | 4 +- include/DTCM/UnkStruct_027e0fd4.hpp | 2 +- include/Debug/DebugHierarchy.hpp | 15 - include/Debug/DebugHierarchyBase.hpp | 35 - include/Debug/DebugHierarchyChild.hpp | 11 - include/Debug/DebugHierarchyNode.hpp | 19 - include/Map/MapManager.hpp | 20 +- include/Message/MessageManager.hpp | 4 +- include/Player/Bhio.hpp | 70 ++ include/Player/LinkStateBase.hpp | 14 +- include/Player/LinkStateCutscene.hpp | 2 +- include/Player/LinkStateDamage.hpp | 2 +- include/Player/LinkStateInteract.hpp | 18 +- include/Player/LinkStateMove.hpp | 2 +- include/Player/LinkStateRoll.hpp | 2 +- include/Player/PlayerControl.hpp | 4 +- include/Player/PlayerLinkBase.hpp | 8 +- include/Unknown/UnkStruct_020eec9c.hpp | 4 + libs/nds/include/nds/math.h | 7 +- src/00_Core/Actor/Actor.cpp | 12 +- src/00_Core/Map/MapManager.cpp | 82 +-- src/00_Core/Player/LinkStateBase.cpp | 10 +- src/00_Core/Player/LinkStateCutscene.cpp | 2 +- src/00_Core/Player/LinkStateDamage.cpp | 75 +-- src/00_Core/Player/LinkStateInteract.cpp | 722 ++++++++++++++++++++- src/00_Core/Player/LinkStateMove.cpp | 12 +- src/00_Core/Player/LinkStateRoll.cpp | 2 +- src/00_Core/Player/PlayerControl.cpp | 4 +- src/04_Load/Debug/DebugHierarchy.cpp | 3 - src/04_Load/Player/Bhio.cpp | 3 + src/04_Load/Player/LinkStateBase.cpp | 2 +- src/05/Player/LinkStateMove_05.cpp | 4 +- src/58_Bombchu/Player/EquipBombchu.cpp | 59 +- src/59_Hammer/Player/EquipHammer.cpp | 2 +- src/ITCM/Map/MapManager.cpp | 3 +- src/Main/Debug/BhioBase.cpp | 20 + src/Main/Debug/DebugHierarchyBase.cpp | 20 - tools/configure.py | 19 +- tools/download_tool.py | 4 + 54 files changed, 1050 insertions(+), 470 deletions(-) delete mode 100644 include/Debug/DebugHierarchy.hpp delete mode 100644 include/Debug/DebugHierarchyBase.hpp delete mode 100644 include/Debug/DebugHierarchyChild.hpp delete mode 100644 include/Debug/DebugHierarchyNode.hpp create mode 100644 include/Player/Bhio.hpp delete mode 100644 src/04_Load/Debug/DebugHierarchy.cpp create mode 100644 src/04_Load/Player/Bhio.cpp create mode 100644 src/Main/Debug/BhioBase.cpp delete mode 100644 src/Main/Debug/DebugHierarchyBase.cpp diff --git a/.gitignore b/.gitignore index 13c0d1af..1e38a48e 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ build.ninja .ninja_lock .ninja_deps /wibo +/sjiswrap.exe diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index a4f84da8..378b3a6c 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -82,7 +82,7 @@ func_01ffbbcc kind:function(arm,size=0x2c) addr:0x01ffbbcc func_01ffbbf8 kind:function(arm,size=0x1d8) addr:0x01ffbbf8 func_01ffbdd0 kind:function(arm,size=0x64) addr:0x01ffbdd0 func_01ffbe34 kind:function(arm,size=0x44) addr:0x01ffbe34 -_ZN10MapManager13func_01ffbe78EP5Vec3pS1_S1_P5Vec4p kind:function(arm,size=0xe4) addr:0x01ffbe78 +_ZN10MapManager13func_01ffbe78EP9UnkStructP5Vec3pS3_P6Sphereitii kind:function(arm,size=0xe4) addr:0x01ffbe78 _ZN10MapManager13func_01ffbf5cEP9UnkStructP5Vec3pS3_iiiP24UnkStruct_ov000_020beba8i kind:function(arm,size=0x1bc) addr:0x01ffbf5c _ZN10MapManager13func_01ffc118EPiP5Vec3pS2_iS0_jS0_ kind:function(arm,size=0x10c8) addr:0x01ffc118 _ZN10MapManager13func_01ffd1e0EPiP5Vec3pS2_iS0_jS0_ kind:function(arm,size=0xfec) addr:0x01ffd1e0 diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 83d6cf72..5d53bcbc 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -106,7 +106,7 @@ src/00_Core/Player/LinkStateBase.cpp: src/00_Core/Player/LinkStateDamage.cpp: .text start:0x020abfa4 end:0x020ad020 - .rodata start:0x020dc560 end:0x020dc574 + .rodata start:0x020dc528 end:0x020dc574 .data start:0x020e5a8c end:0x020e5c58 src/00_Core/Player/LinkStateFollow.cpp: @@ -115,7 +115,6 @@ src/00_Core/Player/LinkStateFollow.cpp: src/00_Core/Player/LinkStateInteract.cpp: .text start:0x020aa32c end:0x020abd78 - .rodata start:0x020dc528 end:0x020dc560 .data start:0x020e58e8 end:0x020e5a40 src/00_Core/Player/LinkStateItem.cpp: diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 4736fe83..29d455ef 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -4970,17 +4970,17 @@ from:0x020aa4b8 kind:thumb_call_arm to:0x020a8dec module:overlay(0) from:0x020aa4c6 kind:thumb_call_arm to:0x020a8dec module:overlay(0) from:0x020aa4e6 kind:thumb_call_arm to:0x020a8dec module:overlay(0) from:0x020aa4f0 kind:load to:0x020e59b8 module:overlay(0) -from:0x020aa4f8 kind:load to:0x020e5940 module:overlay(0) +from:0x020aa4f8 kind:load to:0x020e593c add:0x4 module:overlay(0) from:0x020aa4fc kind:load to:0x020e5908 module:overlay(0) from:0x020aa500 kind:load to:0x020e59cc module:overlay(0) -from:0x020aa504 kind:load to:0x020e5944 module:overlay(0) +from:0x020aa504 kind:load to:0x020e593c add:0x8 module:overlay(0) from:0x020aa508 kind:load to:0x020e59e4 module:overlay(0) -from:0x020aa50c kind:load to:0x020e5948 module:overlay(0) +from:0x020aa50c kind:load to:0x020e593c add:0xc module:overlay(0) from:0x020aa510 kind:load to:0x020e59fc module:overlay(0) -from:0x020aa514 kind:load to:0x020e5960 module:overlay(0) -from:0x020aa518 kind:load to:0x020e5964 module:overlay(0) +from:0x020aa514 kind:load to:0x020e595c add:0x4 module:overlay(0) +from:0x020aa518 kind:load to:0x020e595c add:0x8 module:overlay(0) from:0x020aa51c kind:load to:0x020e5a0c module:overlay(0) -from:0x020aa520 kind:load to:0x020e5968 module:overlay(0) +from:0x020aa520 kind:load to:0x020e595c add:0xc module:overlay(0) from:0x020aa524 kind:load to:0x020e5a20 module:overlay(0) from:0x020aa528 kind:load to:0x020e5a34 module:overlay(0) from:0x020aa52c kind:load to:0x020e5928 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 18f31359..95d61cf2 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -682,7 +682,7 @@ _ZN10MapManager18func_ov00_02085594EP5Vec3p kind:function(arm,size=0x2a8) addr:0 _ZN10MapManager18func_ov00_0208583cEPS_P5Vec3pi kind:function(arm,size=0x74) addr:0x0208583c _ZN10MapManager18func_ov00_020858b0EPS_P5Vec3pi kind:function(arm,size=0x184) addr:0x020858b0 _ZN10MapManager18func_ov00_02085a34EP5Vec3pi kind:function(arm,size=0x22c) addr:0x02085a34 -_ZN10MapManager18func_ov00_02085c60EP5Vec3pPiS2_j kind:function(arm,size=0x3e4) addr:0x02085c60 +_ZN10MapManager18func_ov00_02085c60EP9UnkStructPiS2_j kind:function(arm,size=0x3e4) addr:0x02085c60 _ZN10MapManager18func_ov00_02086044EP5Vec3pS1_i kind:function(arm,size=0x240) addr:0x02086044 _ZN10MapManager18func_ov00_02086284EPiP5Vec3pS2_itS2_S2_ kind:function(arm,size=0x800) addr:0x02086284 _ZN10MapManager18func_ov00_02086a84EPiP5Vec3pS2_iiiS2_S2_ kind:function(arm,size=0x24c) addr:0x02086a84 @@ -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_020a81b8EiP5Vec3p 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 @@ -1958,11 +1958,11 @@ _ZN13LinkStateBase26PlayerControlData_vfunc_14Ei kind:function(arm,size=0x30) ad _ZN13LinkStateBase28Get_PlayerControlData_Unk100Ev kind:function(arm,size=0x14) addr:0x020a8db8 _ZN13LinkStateBase28Get_PlayerControlData_Unk120Ev kind:function(arm,size=0x14) addr:0x020a8dcc _ZN13LinkStateBase24Get_PlayerLinkBase_Unk38Ev kind:function(arm,size=0xc) addr:0x020a8de0 -_ZN13LinkStateBase18GetDebugHierarchy0Ev kind:function(arm,size=0xc) addr:0x020a8dec -_ZN13LinkStateBase18GetDebugHierarchy1Ev kind:function(arm,size=0xc) addr:0x020a8df8 +_ZN13LinkStateBase8GetBhio0Ev kind:function(arm,size=0xc) addr:0x020a8dec +_ZN13LinkStateBase8GetBhio1Ev kind:function(arm,size=0xc) addr:0x020a8df8 _ZN13LinkStateMove8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020a8e04 _ZN13LinkStateMove5GetIdEv kind:function(arm,size=0x8) addr:0x020a8e08 -_ZN13LinkStateMove20CreateDebugHierarchyEv kind:function(thumb,size=0x48) addr:0x020a8e10 +_ZN13LinkStateMove8LoadBhioEv kind:function(thumb,size=0x48) addr:0x020a8e10 _ZN13LinkStateMove12OnStateEnterEv kind:function(arm,size=0x74) addr:0x020a8e58 _ZN13LinkStateMove12OnStateLeaveEi kind:function(arm,size=0x20) addr:0x020a8ecc _ZN13LinkStateMove8vfunc_24Ei kind:function(arm,size=0x40) addr:0x020a8eec @@ -2048,8 +2048,8 @@ func_ov000_020aa0f0 kind:function(arm,size=0x34) addr:0x020aa0f0 func_ov000_020aa124 kind:function(arm,size=0x208) addr:0x020aa124 _ZN17LinkStateInteract8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020aa32c _ZN17LinkStateInteract5GetIdEv kind:function(arm,size=0x8) addr:0x020aa330 -_ZN17LinkStateInteract20CreateDebugHierarchyEv kind:function(arm,size=0x24) addr:0x020aa338 -_ZN17LinkStateInteract14GetGrabActorIdEv kind:function(thumb,size=0x1d8) addr:0x020aa35c +_ZN17LinkStateInteract14GetGrabActorIdEv kind:function(arm,size=0x24) addr:0x020aa338 +_ZN17LinkStateInteract8LoadBhioEv kind:function(thumb,size=0x1d8) addr:0x020aa35c _ZN17LinkStateInteract12OnStateEnterEv kind:function(arm,size=0x27c) addr:0x020aa534 _ZN17LinkStateInteract12OnStateLeaveEi kind:function(arm,size=0x68) addr:0x020aa7b0 _ZN17LinkStateInteract18func_ov00_020aa818Ev kind:function(arm,size=0x2c) addr:0x020aa818 @@ -2083,7 +2083,7 @@ _ZN13LinkStateItem16GetLinkStateMoveEv kind:function(arm,size=0x10) addr:0x020ab _ZN13LinkStateItem18func_ov00_020abf70Ev kind:function(arm,size=0x20) addr:0x020abf70 _ZN13LinkStateItem8vfunc_28Ev kind:function(arm,size=0x14) addr:0x020abf90 _ZN15LinkStateDamage8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020abfa4 -_ZN15LinkStateDamage20CreateDebugHierarchyEv kind:function(thumb,size=0x218) addr:0x020abfa8 +_ZN15LinkStateDamage8LoadBhioEv kind:function(thumb,size=0x218) addr:0x020abfa8 _ZN15LinkStateDamage12OnStateEnterEv kind:function(arm,size=0x630) addr:0x020ac1c0 _ZN15LinkStateDamage12OnStateLeaveEi kind:function(arm,size=0x1f4) addr:0x020ac7f0 _ZN15LinkStateDamage18func_ov00_020ac9e4Ei kind:function(arm,size=0x6c) addr:0x020ac9e4 @@ -2172,7 +2172,7 @@ _ZNK11ItemManager21HasTreasurePriceShownEj kind:function(thumb,size=0x26) addr:0 _ZN11ItemManager21AddTreasurePriceShownEj kind:function(thumb,size=0x22) addr:0x020ae76c _ZN13LinkStateRoll8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020ae790 _ZN13LinkStateRoll5GetIdEv kind:function(arm,size=0x8) addr:0x020ae794 -_ZN13LinkStateRoll20CreateDebugHierarchyEv kind:function(thumb,size=0x8) addr:0x020ae79c +_ZN13LinkStateRoll8LoadBhioEv kind:function(thumb,size=0x8) addr:0x020ae79c _ZN13LinkStateRoll12OnStateEnterEv kind:function(arm,size=0x394) addr:0x020ae7a4 _ZN13LinkStateRoll12OnStateLeaveEi kind:function(arm,size=0xd8) addr:0x020aeb38 _ZN13LinkStateRoll8vfunc_20Ei kind:function(arm,size=0x180) addr:0x020aec10 @@ -2257,7 +2257,7 @@ _ZN24UnkStruct_ov004_0210abb88vfunc_08Ei kind:function(arm,size=0x28) addr:0x020 _ZN17LinkStateCutscene19func_ov000_020b1e98Ei kind:function(arm,size=0x20) addr:0x020b1e98 _ZN17LinkStateCutscene19func_ov000_020b1eb8Ev kind:function(arm,size=0x34) addr:0x020b1eb8 _ZN17LinkStateCutscene19func_ov000_020b1eecEv kind:function(arm,size=0x58) addr:0x020b1eec -_ZN17LinkStateCutscene20CreateDebugHierarchyEv kind:function(thumb,size=0x168) addr:0x020b1f44 +_ZN17LinkStateCutscene8LoadBhioEv kind:function(thumb,size=0x168) addr:0x020b1f44 _ZN17LinkStateCutscene12OnStateEnterEv kind:function(arm,size=0x3f4) addr:0x020b20ac _ZN17LinkStateCutscene12OnStateLeaveEi kind:function(arm,size=0x60) addr:0x020b24a0 _ZN17LinkStateCutscene5GetIdEv kind:function(arm,size=0x8) addr:0x020b2500 @@ -3613,9 +3613,9 @@ func_ov000_020d75dc kind:function(arm,size=0x208) addr:0x020d75dc _ZN18UnkStruct_020eec9c19func_ov000_020d77e4Ei kind:function(arm,size=0x9c) addr:0x020d77e4 func_ov000_020d7880 kind:function(arm,size=0x20) addr:0x020d7880 func_ov000_020d78a0 kind:function(arm,size=0x1e4) addr:0x020d78a0 -func_ov000_020d7a84 kind:function(arm,size=0x50) addr:0x020d7a84 +_ZN18UnkStruct_020eec9c19func_ov000_020d7a84EiP5Vec3p kind:function(arm,size=0x50) addr:0x020d7a84 _ZN18UnkStruct_020eec9c19func_ov000_020d7ad4Ei kind:function(arm,size=0x4c) addr:0x020d7ad4 -func_ov000_020d7b20 kind:function(arm,size=0x40) addr:0x020d7b20 +_ZN18UnkStruct_020eec9c19func_ov000_020d7b20EiP5Vec3p kind:function(arm,size=0x40) addr:0x020d7b20 func_ov000_020d7b60 kind:function(arm,size=0x20) addr:0x020d7b60 func_ov000_020d7b80 kind:function(arm,size=0xec) addr:0x020d7b80 func_ov000_020d7c6c kind:function(arm,size=0x20) addr:0x020d7c6c @@ -4821,13 +4821,13 @@ data_ov000_020e5960 kind:data(any) addr:0x020e5960 data_ov000_020e5964 kind:data(any) addr:0x020e5964 data_ov000_020e5968 kind:data(any) addr:0x020e5968 _ZTV17LinkStateInteract kind:data(any) addr:0x020e5974 -data_ov000_020e59b8 kind:data(any) addr:0x020e59b8 -data_ov000_020e59cc kind:data(any) addr:0x020e59cc -data_ov000_020e59e4 kind:data(any) addr:0x020e59e4 -data_ov000_020e59fc kind:data(any) addr:0x020e59fc -data_ov000_020e5a0c kind:data(any) addr:0x020e5a0c -data_ov000_020e5a20 kind:data(any) addr:0x020e5a20 -data_ov000_020e5a34 kind:data(any) addr:0x020e5a34 +@1235 kind:data(any) addr:0x020e59b8 local +@1236 kind:data(any) addr:0x020e59cc local +@1237 kind:data(any) addr:0x020e59e4 local +@1238 kind:data(any) addr:0x020e59fc local +@1239 kind:data(any) addr:0x020e5a0c local +@1240 kind:data(any) addr:0x020e5a20 local +@1241 kind:data(any) addr:0x020e5a34 local _ZTV13LinkStateItem kind:data(any) addr:0x020e5a40 @1126 kind:data(any) addr:0x020e5a8c @1125 kind:data(any) addr:0x020e5a90 diff --git a/config/eur/arm9/overlays/ov004/symbols.txt b/config/eur/arm9/overlays/ov004/symbols.txt index 7b59a721..02a8328f 100644 --- a/config/eur/arm9/overlays/ov004/symbols.txt +++ b/config/eur/arm9/overlays/ov004/symbols.txt @@ -100,8 +100,8 @@ func_ov004_0210372c kind:function(thumb,size=0x12) addr:0x0210372c func_ov004_02103740 kind:function(thumb,size=0x12) addr:0x02103740 func_ov004_02103754 kind:function(thumb,size=0xc94) addr:0x02103754 func_ov004_021043e8 kind:function(thumb,size=0x2) addr:0x021043e8 -_ZN14DebugHierarchyD0Ev kind:function(arm,size=0x1c) addr:0x021043ec -_ZN14DebugHierarchyD1Ev kind:function(arm,size=0x14) addr:0x02104408 +_ZN4BhioD0Ev kind:function(arm,size=0x1c) addr:0x021043ec +_ZN4BhioD1Ev kind:function(arm,size=0x14) addr:0x02104408 _ZN14AdventureFlagsC1Ev kind:function(thumb,size=0x4c) addr:0x0210441c _ZN14AdventureFlagsD1Ev kind:function(thumb,size=0x3e) addr:0x02104468 _ZN14AdventureFlags6CreateEv kind:function(thumb,size=0x2c) addr:0x021044a8 @@ -293,7 +293,7 @@ _ZN13LinkStateBaseC2EP14PlayerLinkBase kind:function(thumb,size=0x10) addr:0x021 _ZN13LinkStateBaseD1Ev kind:function(thumb,size=0x2) addr:0x0210ade4 _ZN13LinkStateBaseD0Ev kind:function(thumb,size=0xc) addr:0x0210ade8 _ZN13LinkStateBaseD2Ev kind:function(thumb,size=0x2) addr:0x0210adf4 -_ZN13LinkStateBase20CreateDebugHierarchyEv kind:function(thumb,size=0x2) addr:0x0210adf8 +_ZN13LinkStateBase8LoadBhioEv kind:function(thumb,size=0x2) addr:0x0210adf8 _ZN13LinkStateRollC2EP14PlayerLinkBase kind:function(thumb,size=0x84) addr:0x0210adfc _ZN13LinkStateRollD1Ev kind:function(thumb,size=0x28) addr:0x0210ae80 _ZN13LinkStateRollD0Ev kind:function(thumb,size=0x2c) addr:0x0210aea8 @@ -587,7 +587,7 @@ data_ov004_02110468 kind:data(any) addr:0x02110468 data_ov004_0211047c kind:data(any) addr:0x0211047c data_ov004_02110484 kind:data(any) addr:0x02110484 data_ov004_0211048c kind:data(any) addr:0x0211048c -_ZTV14DebugHierarchy kind:data(any) addr:0x021104a0 +_ZTV4Bhio kind:data(any) addr:0x021104a0 data_ov004_021104e0 kind:data(any) addr:0x021104e0 data_ov004_021104f0 kind:data(any) addr:0x021104f0 data_ov004_021104f8 kind:data(any) addr:0x021104f8 diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index ff218aae..5f15907d 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1520,25 +1520,25 @@ func_02030204 kind:function(arm,size=0x1c) addr:0x02030204 func_02030220 kind:function(arm,size=0x14) addr:0x02030220 CopyDebugNodeDescription kind:function(arm,size=0x10) addr:0x02030234 DebugNodeDescriptionEquals kind:function(arm,size=0x30) addr:0x02030244 -_ZN18DebugHierarchyBaseC2Ev kind:function(thumb,size=0x10) addr:0x02030274 -_ZN18DebugHierarchyBaseD1Ev kind:function(thumb,size=0x2) addr:0x02030284 -_ZN18DebugHierarchyBaseD0Ev kind:function(thumb,size=0xc) addr:0x02030288 -_ZN18DebugHierarchyBaseD2Ev kind:function(thumb,size=0x2) addr:0x02030294 -_ZN18DebugHierarchyBase8FindNodeEj kind:function(thumb,size=0x3c) addr:0x02030298 -_ZN18DebugHierarchyBase12GetChildNodeEiPKcjPi kind:function(thumb,size=0x4c) addr:0x020302d4 -_ZN18DebugHierarchyBase8vfunc_08Ev kind:function(thumb,size=0x2) addr:0x02030320 -_ZN18DebugHierarchyBase8vfunc_0cEv kind:function(thumb,size=0x2) addr:0x02030324 -_ZN18DebugHierarchyBase8vfunc_10Ev kind:function(thumb,size=0x2) addr:0x02030328 -_ZN18DebugHierarchyBase8vfunc_14Ev kind:function(thumb,size=0x2) addr:0x0203032c -_ZN18DebugHierarchyBase8vfunc_18Ev kind:function(thumb,size=0x2) addr:0x02030330 -_ZN18DebugHierarchyBase8vfunc_1cEv kind:function(thumb,size=0x2) addr:0x02030334 -_ZN18DebugHierarchyBase8vfunc_20Ev kind:function(thumb,size=0x4) addr:0x02030338 -_ZN18DebugHierarchyBase8vfunc_24Ev kind:function(thumb,size=0x2) addr:0x0203033c -_ZN18DebugHierarchyBase8vfunc_28Ev kind:function(thumb,size=0x2) addr:0x02030340 -_ZN18DebugHierarchyBase8vfunc_2cEv kind:function(thumb,size=0x2) addr:0x02030344 -_ZN18DebugHierarchyBase8vfunc_30Ev kind:function(thumb,size=0x2) addr:0x02030348 -_ZN18DebugHierarchyBase8vfunc_38Ev kind:function(thumb,size=0x2) addr:0x0203034c -_ZN18DebugHierarchyBase8vfunc_3cEv kind:function(thumb,size=0x2) addr:0x02030350 +_ZN8BhioBaseC2Ev kind:function(thumb,size=0x10) addr:0x02030274 +_ZN8BhioBaseD1Ev kind:function(thumb,size=0x2) addr:0x02030284 +_ZN8BhioBaseD0Ev kind:function(thumb,size=0xc) addr:0x02030288 +_ZN8BhioBaseD2Ev kind:function(thumb,size=0x2) addr:0x02030294 +_ZN8BhioBase9FindGroupEj kind:function(thumb,size=0x3c) addr:0x02030298 +_ZN8BhioBase8GetFieldEbPKcjPiiiii kind:function(thumb,size=0x4c) addr:0x020302d4 +_ZN8BhioBase8vfunc_08Ev kind:function(thumb,size=0x2) addr:0x02030320 +_ZN8BhioBase8vfunc_0cEv kind:function(thumb,size=0x2) addr:0x02030324 +_ZN8BhioBase8vfunc_10Ev kind:function(thumb,size=0x2) addr:0x02030328 +_ZN8BhioBase8vfunc_14Ev kind:function(thumb,size=0x2) addr:0x0203032c +_ZN8BhioBase8vfunc_18Ev kind:function(thumb,size=0x2) addr:0x02030330 +_ZN8BhioBase8vfunc_1cEv kind:function(thumb,size=0x2) addr:0x02030334 +_ZN8BhioBase8vfunc_20EiPKciiii kind:function(thumb,size=0x4) addr:0x02030338 +_ZN8BhioBase8vfunc_24Ev kind:function(thumb,size=0x2) addr:0x0203033c +_ZN8BhioBase8vfunc_28Ev kind:function(thumb,size=0x2) addr:0x02030340 +_ZN8BhioBase8vfunc_2cEv kind:function(thumb,size=0x2) addr:0x02030344 +_ZN8BhioBase8vfunc_30Ev kind:function(thumb,size=0x2) addr:0x02030348 +_ZN8BhioBase8vfunc_38Ev kind:function(thumb,size=0x2) addr:0x0203034c +_ZN8BhioBase8vfunc_3cEjPi kind:function(thumb,size=0x2) addr:0x02030350 _ZN18UnkStruct_0206322c13func_02030354Ebb kind:function(thumb,size=0xb4) addr:0x02030354 _ZN18UnkStruct_0206322c13func_02030408Ev kind:function(thumb,size=0x16) addr:0x02030408 func_02030420 kind:function(thumb,size=0x44) addr:0x02030420 @@ -2710,7 +2710,7 @@ data_02057808 kind:data(any) addr:0x02057808 data_02057840 kind:data(any) addr:0x02057840 data_0205785c kind:data(any) addr:0x0205785c data_02057878 kind:data(any) addr:0x02057878 -_ZTV18DebugHierarchyBase kind:data(any) addr:0x02057894 +_ZTV8BhioBase kind:data(any) addr:0x02057894 data_020578d4 kind:data(any) addr:0x020578d4 data_020578d8 kind:data(any) addr:0x020578d8 data_020578ec kind:data(any) addr:0x020578ec diff --git a/config/usa/arm9/itcm/symbols.txt b/config/usa/arm9/itcm/symbols.txt index a4f84da8..378b3a6c 100644 --- a/config/usa/arm9/itcm/symbols.txt +++ b/config/usa/arm9/itcm/symbols.txt @@ -82,7 +82,7 @@ func_01ffbbcc kind:function(arm,size=0x2c) addr:0x01ffbbcc func_01ffbbf8 kind:function(arm,size=0x1d8) addr:0x01ffbbf8 func_01ffbdd0 kind:function(arm,size=0x64) addr:0x01ffbdd0 func_01ffbe34 kind:function(arm,size=0x44) addr:0x01ffbe34 -_ZN10MapManager13func_01ffbe78EP5Vec3pS1_S1_P5Vec4p kind:function(arm,size=0xe4) addr:0x01ffbe78 +_ZN10MapManager13func_01ffbe78EP9UnkStructP5Vec3pS3_P6Sphereitii kind:function(arm,size=0xe4) addr:0x01ffbe78 _ZN10MapManager13func_01ffbf5cEP9UnkStructP5Vec3pS3_iiiP24UnkStruct_ov000_020beba8i kind:function(arm,size=0x1bc) addr:0x01ffbf5c _ZN10MapManager13func_01ffc118EPiP5Vec3pS2_iS0_jS0_ kind:function(arm,size=0x10c8) addr:0x01ffc118 _ZN10MapManager13func_01ffd1e0EPiP5Vec3pS2_iS0_jS0_ kind:function(arm,size=0xfec) addr:0x01ffd1e0 diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index 3e020e05..c80d50a1 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -106,7 +106,7 @@ src/00_Core/Player/LinkStateBase.cpp: src/00_Core/Player/LinkStateDamage.cpp: .text start:0x020abf44 end:0x020acfc0 - .rodata start:0x020dc500 end:0x020dc514 + .rodata start:0x020dc4c8 end:0x020dc514 .data start:0x020e5a2c end:0x020e5bf8 src/00_Core/Player/LinkStateFollow.cpp: @@ -115,7 +115,6 @@ src/00_Core/Player/LinkStateFollow.cpp: src/00_Core/Player/LinkStateInteract.cpp: .text start:0x020aa2cc end:0x020abd18 - .rodata start:0x020dc4c8 end:0x020dc500 .data start:0x020e5888 end:0x020e59e0 src/00_Core/Player/LinkStateItem.cpp: diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index 8744298a..abe8bf8e 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -4970,17 +4970,17 @@ from:0x020aa458 kind:thumb_call_arm to:0x020a8d8c module:overlay(0) from:0x020aa466 kind:thumb_call_arm to:0x020a8d8c module:overlay(0) from:0x020aa486 kind:thumb_call_arm to:0x020a8d8c module:overlay(0) from:0x020aa490 kind:load to:0x020e5958 module:overlay(0) -from:0x020aa498 kind:load to:0x020e58e0 module:overlay(0) +from:0x020aa498 kind:load to:0x020e58dc add:0x4 module:overlay(0) from:0x020aa49c kind:load to:0x020e58a8 module:overlay(0) from:0x020aa4a0 kind:load to:0x020e596c module:overlay(0) -from:0x020aa4a4 kind:load to:0x020e58e4 module:overlay(0) +from:0x020aa4a4 kind:load to:0x020e58dc add:0x8 module:overlay(0) from:0x020aa4a8 kind:load to:0x020e5984 module:overlay(0) -from:0x020aa4ac kind:load to:0x020e58e8 module:overlay(0) +from:0x020aa4ac kind:load to:0x020e58dc add:0xc module:overlay(0) from:0x020aa4b0 kind:load to:0x020e599c module:overlay(0) -from:0x020aa4b4 kind:load to:0x020e5900 module:overlay(0) -from:0x020aa4b8 kind:load to:0x020e5904 module:overlay(0) +from:0x020aa4b4 kind:load to:0x020e58fc add:0x4 module:overlay(0) +from:0x020aa4b8 kind:load to:0x020e58fc add:0x8 module:overlay(0) from:0x020aa4bc kind:load to:0x020e59ac module:overlay(0) -from:0x020aa4c0 kind:load to:0x020e5908 module:overlay(0) +from:0x020aa4c0 kind:load to:0x020e58fc add:0xc module:overlay(0) from:0x020aa4c4 kind:load to:0x020e59c0 module:overlay(0) from:0x020aa4c8 kind:load to:0x020e59d4 module:overlay(0) from:0x020aa4cc kind:load to:0x020e58c8 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 7e719f53..e8604eff 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -682,7 +682,7 @@ _ZN10MapManager18func_ov00_02085594EP5Vec3p kind:function(arm,size=0x2a8) addr:0 _ZN10MapManager18func_ov00_0208583cEPS_P5Vec3pi kind:function(arm,size=0x74) addr:0x020857dc _ZN10MapManager18func_ov00_020858b0EPS_P5Vec3pi kind:function(arm,size=0x184) addr:0x02085850 _ZN10MapManager18func_ov00_02085a34EP5Vec3pi kind:function(arm,size=0x22c) addr:0x020859d4 -_ZN10MapManager18func_ov00_02085c60EP5Vec3pPiS2_j kind:function(arm,size=0x3e4) addr:0x02085c00 +_ZN10MapManager18func_ov00_02085c60EP9UnkStructPiS2_j kind:function(arm,size=0x3e4) addr:0x02085c00 _ZN10MapManager18func_ov00_02086044EP5Vec3pS1_i kind:function(arm,size=0x240) addr:0x02085fe4 _ZN10MapManager18func_ov00_02086284EPiP5Vec3pS2_itS2_S2_ kind:function(arm,size=0x800) addr:0x02086224 _ZN10MapManager18func_ov00_02086a84EPiP5Vec3pS2_iiiS2_S2_ kind:function(arm,size=0x24c) addr:0x02086a24 @@ -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_020a81b8EiP5Vec3p 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 @@ -1958,11 +1958,11 @@ _ZN13LinkStateBase26PlayerControlData_vfunc_14Ei kind:function(arm,size=0x30) ad _ZN13LinkStateBase28Get_PlayerControlData_Unk100Ev kind:function(arm,size=0x14) addr:0x020a8d58 _ZN13LinkStateBase28Get_PlayerControlData_Unk120Ev kind:function(arm,size=0x14) addr:0x020a8d6c _ZN13LinkStateBase24Get_PlayerLinkBase_Unk38Ev kind:function(arm,size=0xc) addr:0x020a8d80 -_ZN13LinkStateBase18GetDebugHierarchy0Ev kind:function(arm,size=0xc) addr:0x020a8d8c -_ZN13LinkStateBase18GetDebugHierarchy1Ev kind:function(arm,size=0xc) addr:0x020a8d98 +_ZN13LinkStateBase8GetBhio0Ev kind:function(arm,size=0xc) addr:0x020a8d8c +_ZN13LinkStateBase8GetBhio1Ev kind:function(arm,size=0xc) addr:0x020a8d98 _ZN13LinkStateMove8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020a8da4 _ZN13LinkStateMove5GetIdEv kind:function(arm,size=0x8) addr:0x020a8da8 -_ZN13LinkStateMove20CreateDebugHierarchyEv kind:function(thumb,size=0x48) addr:0x020a8db0 +_ZN13LinkStateMove8LoadBhioEv kind:function(thumb,size=0x48) addr:0x020a8db0 _ZN13LinkStateMove12OnStateEnterEv kind:function(arm,size=0x74) addr:0x020a8df8 _ZN13LinkStateMove12OnStateLeaveEi kind:function(arm,size=0x20) addr:0x020a8e6c _ZN13LinkStateMove8vfunc_24Ei kind:function(arm,size=0x40) addr:0x020a8e8c @@ -2048,8 +2048,8 @@ func_ov000_020aa0f0 kind:function(arm,size=0x34) addr:0x020aa090 func_ov000_020aa124 kind:function(arm,size=0x208) addr:0x020aa0c4 _ZN17LinkStateInteract8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020aa2cc _ZN17LinkStateInteract5GetIdEv kind:function(arm,size=0x8) addr:0x020aa2d0 -_ZN17LinkStateInteract20CreateDebugHierarchyEv kind:function(arm,size=0x24) addr:0x020aa2d8 -_ZN17LinkStateInteract14GetGrabActorIdEv kind:function(thumb,size=0x1d8) addr:0x020aa2fc +_ZN17LinkStateInteract14GetGrabActorIdEv kind:function(arm,size=0x24) addr:0x020aa2d8 +_ZN17LinkStateInteract8LoadBhioEv kind:function(thumb,size=0x1d8) addr:0x020aa2fc _ZN17LinkStateInteract12OnStateEnterEv kind:function(arm,size=0x27c) addr:0x020aa4d4 _ZN17LinkStateInteract12OnStateLeaveEi kind:function(arm,size=0x68) addr:0x020aa750 _ZN17LinkStateInteract18func_ov00_020aa818Ev kind:function(arm,size=0x2c) addr:0x020aa7b8 @@ -2083,7 +2083,7 @@ _ZN13LinkStateItem16GetLinkStateMoveEv kind:function(arm,size=0x10) addr:0x020ab _ZN13LinkStateItem18func_ov00_020abf70Ev kind:function(arm,size=0x20) addr:0x020abf10 _ZN13LinkStateItem8vfunc_28Ev kind:function(arm,size=0x14) addr:0x020abf30 _ZN15LinkStateDamage8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020abf44 -_ZN15LinkStateDamage20CreateDebugHierarchyEv kind:function(thumb,size=0x218) addr:0x020abf48 +_ZN15LinkStateDamage8LoadBhioEv kind:function(thumb,size=0x218) addr:0x020abf48 _ZN15LinkStateDamage12OnStateEnterEv kind:function(arm,size=0x630) addr:0x020ac160 _ZN15LinkStateDamage12OnStateLeaveEi kind:function(arm,size=0x1f4) addr:0x020ac790 _ZN15LinkStateDamage18func_ov00_020ac9e4Ei kind:function(arm,size=0x6c) addr:0x020ac984 @@ -2172,7 +2172,7 @@ _ZNK11ItemManager21HasTreasurePriceShownEj kind:function(thumb,size=0x26) addr:0 _ZN11ItemManager21AddTreasurePriceShownEj kind:function(thumb,size=0x22) addr:0x020ae70c _ZN13LinkStateRoll8vfunc_00Ev kind:function(thumb,size=0x2) addr:0x020ae730 _ZN13LinkStateRoll5GetIdEv kind:function(arm,size=0x8) addr:0x020ae734 -_ZN13LinkStateRoll20CreateDebugHierarchyEv kind:function(thumb,size=0x8) addr:0x020ae73c +_ZN13LinkStateRoll8LoadBhioEv kind:function(thumb,size=0x8) addr:0x020ae73c _ZN13LinkStateRoll12OnStateEnterEv kind:function(arm,size=0x394) addr:0x020ae744 _ZN13LinkStateRoll12OnStateLeaveEi kind:function(arm,size=0xd8) addr:0x020aead8 _ZN13LinkStateRoll8vfunc_20Ei kind:function(arm,size=0x180) addr:0x020aebb0 @@ -2257,7 +2257,7 @@ _ZN24UnkStruct_ov004_0210abb88vfunc_08Ei kind:function(arm,size=0x28) addr:0x020 _ZN17LinkStateCutscene19func_ov000_020b1e98Ei kind:function(arm,size=0x20) addr:0x020b1e38 _ZN17LinkStateCutscene19func_ov000_020b1eb8Ev kind:function(arm,size=0x34) addr:0x020b1e58 _ZN17LinkStateCutscene19func_ov000_020b1eecEv kind:function(arm,size=0x58) addr:0x020b1e8c -_ZN17LinkStateCutscene20CreateDebugHierarchyEv kind:function(thumb,size=0x168) addr:0x020b1ee4 +_ZN17LinkStateCutscene8LoadBhioEv kind:function(thumb,size=0x168) addr:0x020b1ee4 _ZN17LinkStateCutscene12OnStateEnterEv kind:function(arm,size=0x3f4) addr:0x020b204c _ZN17LinkStateCutscene12OnStateLeaveEi kind:function(arm,size=0x60) addr:0x020b2440 _ZN17LinkStateCutscene5GetIdEv kind:function(arm,size=0x8) addr:0x020b24a0 @@ -3613,9 +3613,9 @@ func_ov000_020d75dc kind:function(arm,size=0x208) addr:0x020d757c _ZN18UnkStruct_020eec9c19func_ov000_020d77e4Ei kind:function(arm,size=0x9c) addr:0x020d7784 func_ov000_020d7880 kind:function(arm,size=0x20) addr:0x020d7820 func_ov000_020d78a0 kind:function(arm,size=0x1e4) addr:0x020d7840 -func_ov000_020d7a84 kind:function(arm,size=0x50) addr:0x020d7a24 +_ZN18UnkStruct_020eec9c19func_ov000_020d7a84EiP5Vec3p kind:function(arm,size=0x50) addr:0x020d7a24 _ZN18UnkStruct_020eec9c19func_ov000_020d7ad4Ei kind:function(arm,size=0x4c) addr:0x020d7a74 -func_ov000_020d7b20 kind:function(arm,size=0x40) addr:0x020d7ac0 +_ZN18UnkStruct_020eec9c19func_ov000_020d7b20EiP5Vec3p kind:function(arm,size=0x40) addr:0x020d7ac0 func_ov000_020d7b60 kind:function(arm,size=0x20) addr:0x020d7b00 func_ov000_020d7b80 kind:function(arm,size=0xec) addr:0x020d7b20 func_ov000_020d7c6c kind:function(arm,size=0x20) addr:0x020d7c0c @@ -4821,13 +4821,13 @@ data_ov000_020e5960 kind:data(any) addr:0x020e5900 data_ov000_020e5964 kind:data(any) addr:0x020e5904 data_ov000_020e5968 kind:data(any) addr:0x020e5908 _ZTV17LinkStateInteract kind:data(any) addr:0x020e5914 -data_ov000_020e59b8 kind:data(any) addr:0x020e5958 -data_ov000_020e59cc kind:data(any) addr:0x020e596c -data_ov000_020e59e4 kind:data(any) addr:0x020e5984 -data_ov000_020e59fc kind:data(any) addr:0x020e599c -data_ov000_020e5a0c kind:data(any) addr:0x020e59ac -data_ov000_020e5a20 kind:data(any) addr:0x020e59c0 -data_ov000_020e5a34 kind:data(any) addr:0x020e59d4 +@1235 kind:data(any) addr:0x020e5958 local +@1236 kind:data(any) addr:0x020e596c local +@1237 kind:data(any) addr:0x020e5984 local +@1238 kind:data(any) addr:0x020e599c local +@1239 kind:data(any) addr:0x020e59ac local +@1240 kind:data(any) addr:0x020e59c0 local +@1241 kind:data(any) addr:0x020e59d4 local _ZTV13LinkStateItem kind:data(any) addr:0x020e59e0 @1126 kind:data(any) addr:0x020e5a2c @1125 kind:data(any) addr:0x020e5a30 diff --git a/config/usa/arm9/overlays/ov004/symbols.txt b/config/usa/arm9/overlays/ov004/symbols.txt index 4434640b..d0c72faa 100644 --- a/config/usa/arm9/overlays/ov004/symbols.txt +++ b/config/usa/arm9/overlays/ov004/symbols.txt @@ -100,8 +100,8 @@ func_ov004_0210372c kind:function(thumb,size=0x12) addr:0x021036ac func_ov004_02103740 kind:function(thumb,size=0x12) addr:0x021036c0 func_ov004_02103754 kind:function(thumb,size=0xc94) addr:0x021036d4 func_ov004_021043e8 kind:function(thumb,size=0x2) addr:0x02104368 -_ZN14DebugHierarchyD0Ev kind:function(arm,size=0x1c) addr:0x0210436c -_ZN14DebugHierarchyD1Ev kind:function(arm,size=0x14) addr:0x02104388 +_ZN4BhioD0Ev kind:function(arm,size=0x1c) addr:0x0210436c +_ZN4BhioD1Ev kind:function(arm,size=0x14) addr:0x02104388 _ZN14AdventureFlagsC1Ev kind:function(thumb,size=0x4c) addr:0x0210439c _ZN14AdventureFlagsD1Ev kind:function(thumb,size=0x3e) addr:0x021043e8 _ZN14AdventureFlags6CreateEv kind:function(thumb,size=0x2c) addr:0x02104428 @@ -293,7 +293,7 @@ _ZN13LinkStateBaseC2EP14PlayerLinkBase kind:function(thumb,size=0x10) addr:0x021 _ZN13LinkStateBaseD1Ev kind:function(thumb,size=0x2) addr:0x0210ad64 _ZN13LinkStateBaseD0Ev kind:function(thumb,size=0xc) addr:0x0210ad68 _ZN13LinkStateBaseD2Ev kind:function(thumb,size=0x2) addr:0x0210ad74 -_ZN13LinkStateBase20CreateDebugHierarchyEv kind:function(thumb,size=0x2) addr:0x0210ad78 +_ZN13LinkStateBase8LoadBhioEv kind:function(thumb,size=0x2) addr:0x0210ad78 _ZN13LinkStateRollC2EP14PlayerLinkBase kind:function(thumb,size=0x84) addr:0x0210ad7c _ZN13LinkStateRollD1Ev kind:function(thumb,size=0x28) addr:0x0210ae00 _ZN13LinkStateRollD0Ev kind:function(thumb,size=0x2c) addr:0x0210ae28 @@ -587,7 +587,7 @@ data_ov004_02110468 kind:data(any) addr:0x021103e8 data_ov004_0211047c kind:data(any) addr:0x021103fc data_ov004_02110484 kind:data(any) addr:0x02110404 data_ov004_0211048c kind:data(any) addr:0x0211040c -_ZTV14DebugHierarchy kind:data(any) addr:0x02110420 +_ZTV4Bhio kind:data(any) addr:0x02110420 data_ov004_021104e0 kind:data(any) addr:0x02110460 data_ov004_021104f0 kind:data(any) addr:0x02110470 data_ov004_021104f8 kind:data(any) addr:0x02110478 diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index 0db49020..cece0af2 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -1520,31 +1520,31 @@ func_02030204 kind:function(arm,size=0x1c) addr:0x02030200 func_02030220 kind:function(arm,size=0x14) addr:0x0203021c CopyDebugNodeDescription kind:function(arm,size=0x10) addr:0x02030230 DebugNodeDescriptionEquals kind:function(arm,size=0x30) addr:0x02030240 -_ZN18DebugHierarchyBaseC2Ev kind:function(thumb,size=0x10) addr:0x02030270 -_ZN18DebugHierarchyBaseD1Ev kind:function(thumb,size=0x2) addr:0x02030280 -_ZN18DebugHierarchyBaseD0Ev kind:function(thumb,size=0xc) addr:0x02030284 -_ZN18DebugHierarchyBaseD2Ev kind:function(thumb,size=0x2) addr:0x02030290 -_ZN18DebugHierarchyBase8FindNodeEj kind:function(thumb,size=0x3c) addr:0x02030294 -_ZN18DebugHierarchyBase12GetChildNodeEiPKcjPi kind:function(thumb,size=0x4c) addr:0x020302d0 -_ZN18DebugHierarchyBase8vfunc_08Ev kind:function(thumb,size=0x2) addr:0x0203031c -_ZN18DebugHierarchyBase8vfunc_0cEv kind:function(thumb,size=0x2) addr:0x02030320 -_ZN18DebugHierarchyBase8vfunc_10Ev kind:function(thumb,size=0x2) addr:0x02030324 -_ZN18DebugHierarchyBase8vfunc_14Ev kind:function(thumb,size=0x2) addr:0x02030328 -_ZN18DebugHierarchyBase8vfunc_18Ev kind:function(thumb,size=0x2) addr:0x0203032c -_ZN18DebugHierarchyBase8vfunc_1cEv kind:function(thumb,size=0x2) addr:0x02030330 -_ZN18DebugHierarchyBase8vfunc_20Ev kind:function(thumb,size=0x4) addr:0x02030334 -_ZN18DebugHierarchyBase8vfunc_24Ev kind:function(thumb,size=0x2) addr:0x02030338 -_ZN18DebugHierarchyBase8vfunc_28Ev kind:function(thumb,size=0x2) addr:0x0203033c -_ZN18DebugHierarchyBase8vfunc_2cEv kind:function(thumb,size=0x2) addr:0x02030340 -_ZN18DebugHierarchyBase8vfunc_30Ev kind:function(thumb,size=0x2) addr:0x02030344 -_ZN18DebugHierarchyBase8vfunc_38Ev kind:function(thumb,size=0x2) addr:0x02030348 -_ZN18DebugHierarchyBase8vfunc_3cEv kind:function(thumb,size=0x2) addr:0x0203034c +_ZN8BhioBaseC2Ev kind:function(thumb,size=0x10) addr:0x02030270 +_ZN8BhioBaseD1Ev kind:function(thumb,size=0x2) addr:0x02030280 +_ZN8BhioBaseD0Ev kind:function(thumb,size=0xc) addr:0x02030284 +_ZN8BhioBaseD2Ev kind:function(thumb,size=0x2) addr:0x02030290 +_ZN8BhioBase9FindGroupEj kind:function(thumb,size=0x3c) addr:0x02030294 +_ZN8BhioBase8GetFieldEbPKcjPiiiii kind:function(thumb,size=0x4c) addr:0x020302d0 +_ZN8BhioBase8vfunc_08Ev kind:function(thumb,size=0x2) addr:0x0203031c +_ZN8BhioBase8vfunc_0cEv kind:function(thumb,size=0x2) addr:0x02030320 +_ZN8BhioBase8vfunc_10Ev kind:function(thumb,size=0x2) addr:0x02030324 +_ZN8BhioBase8vfunc_14Ev kind:function(thumb,size=0x2) addr:0x02030328 +_ZN8BhioBase8vfunc_18Ev kind:function(thumb,size=0x2) addr:0x0203032c +_ZN8BhioBase8vfunc_1cEv kind:function(thumb,size=0x2) addr:0x02030330 +_ZN8BhioBase8vfunc_20EiPKciiii kind:function(thumb,size=0x4) addr:0x02030334 +_ZN8BhioBase8vfunc_24Ev kind:function(thumb,size=0x2) addr:0x02030338 +_ZN8BhioBase8vfunc_28Ev kind:function(thumb,size=0x2) addr:0x0203033c +_ZN8BhioBase8vfunc_2cEv kind:function(thumb,size=0x2) addr:0x02030340 +_ZN8BhioBase8vfunc_30Ev kind:function(thumb,size=0x2) addr:0x02030344 +_ZN8BhioBase8vfunc_38Ev kind:function(thumb,size=0x2) addr:0x02030348 +_ZN8BhioBase8vfunc_3cEjPi kind:function(thumb,size=0x2) addr:0x0203034c _ZN18UnkStruct_0206322c13func_02030354Ebb kind:function(thumb,size=0xb4) addr:0x02030350 _ZN18UnkStruct_0206322c13func_02030408Ev kind:function(thumb,size=0x16) addr:0x02030404 func_02030420 kind:function(thumb,size=0x44) addr:0x0203041c _ZN18UnkStruct_0206322c13func_02030464Ebb kind:function(thumb,size=0x42) addr:0x02030460 _ZN18UnkStruct_0206322c13func_020304a8Ebb kind:function(thumb,size=0x2c) addr:0x020304a4 -DisplayDebugText kind:function(thumb,size=0xd8) addr:0x020304d0 +_Z16DisplayDebugTextiiiiPci kind:function(thumb,size=0xd8) addr:0x020304d0 func_020305ac kind:function(thumb,size=0x88) addr:0x020305a8 _Z22DisplayDebugTextFormatiiiiiPcS_ kind:function(thumb,size=0x30) addr:0x02030630 _Z28DisplayDebugTextFormat_thunkiiiiiPcz kind:function(thumb,size=0x26) addr:0x02030660 @@ -2711,7 +2711,7 @@ data_02057808 kind:data(any) addr:0x020577c0 data_02057840 kind:data(any) addr:0x020577f8 data_0205785c kind:data(any) addr:0x02057814 data_02057878 kind:data(any) addr:0x02057830 -_ZTV18DebugHierarchyBase kind:data(any) addr:0x0205784c +_ZTV8BhioBase kind:data(any) addr:0x0205784c data_020578d4 kind:data(any) addr:0x0205788c data_020578d8 kind:data(any) addr:0x02057890 data_020578ec kind:data(any) addr:0x020578a4 diff --git a/include/Actor/ActorTypeId.hpp b/include/Actor/ActorTypeId.hpp index 9f5925b5..e7e7132f 100644 --- a/include/Actor/ActorTypeId.hpp +++ b/include/Actor/ActorTypeId.hpp @@ -45,6 +45,8 @@ enum ActorTypeId_ { ActorTypeId_StorageDrum = 'DRUM', ActorTypeId_SmallKey = 'NKEY', + ActorTypeId_BossKey = 'BKEY', + ActorTypeId_ForceGem = 'FORC', ActorTypeId_SwitchObject = 'SWOB', ActorTypeId_EventIcon = 'EVIC', ActorTypeId_ActionObject = 'ACOB', @@ -74,7 +76,6 @@ enum ActorTypeId_ { ActorTypeId_Postman = 'PSTM', ActorTypeId_BIGR = 'BIGR', - ActorTypeId_BKEY = 'BKEY', ActorTypeId_BMRN = 'BMRN', ActorTypeId_BMTY = 'BMTY', ActorTypeId_BTRF = 'BTRF', @@ -85,7 +86,6 @@ enum ActorTypeId_ { ActorTypeId_FLBT = 'FLBT', ActorTypeId_FLTB = 'FLTB', ActorTypeId_FLTM = 'FLTM', - ActorTypeId_FORC = 'FORC', ActorTypeId_PWBS = 'PWBS', ActorTypeId_SBEM = 'SBEM', ActorTypeId_STNE = 'STNE', diff --git a/include/DTCM/UnkStruct_027e0c68.hpp b/include/DTCM/UnkStruct_027e0c68.hpp index e172e51e..ef36b3bf 100644 --- a/include/DTCM/UnkStruct_027e0c68.hpp +++ b/include/DTCM/UnkStruct_027e0c68.hpp @@ -3,7 +3,7 @@ #include "global.h" #include "types.h" -#include "Debug/DebugHierarchyBase.hpp" +#include "Player/Bhio.hpp" struct UnkStruct_027e0c68 { /* 00 */ unk8 mUnk_00[4]; @@ -20,7 +20,7 @@ struct UnkStruct_027e0c68 { /* 24 */ unk32 mUnk_24; /* 28 */ s32 *mUnk_28; /* 2c */ unk8 mUnk_2c[0x1c]; - /* 48 */ DebugHierarchyBase *mDebug; + /* 48 */ BhioBase *mDebug; /* 4c */ }; diff --git a/include/DTCM/UnkStruct_027e0f64.hpp b/include/DTCM/UnkStruct_027e0f64.hpp index 8826fd13..9a0bdd36 100644 --- a/include/DTCM/UnkStruct_027e0f64.hpp +++ b/include/DTCM/UnkStruct_027e0f64.hpp @@ -3,7 +3,7 @@ #include "global.h" #include "types.h" -#include "Debug/DebugHierarchy.hpp" +#include "Player/Bhio.hpp" struct UnkStruct_027e0f64_04 { /* 000 */ u8 pad[0x1B4 - 0x00]; @@ -12,7 +12,7 @@ struct UnkStruct_027e0f64_04 { class UnkStruct_027e0f64 { public: - /* 0 */ DebugHierarchyBase *mUnk_0; + /* 0 */ Bhio *mUnk_0; /* 4 */ UnkStruct_027e0f64_04 *mUnk_4; /* 8 */ UnkStruct_027e0f64_04 *mUnk_8; /* c */ diff --git a/include/DTCM/UnkStruct_027e0fd4.hpp b/include/DTCM/UnkStruct_027e0fd4.hpp index e8e89954..a7b984e2 100644 --- a/include/DTCM/UnkStruct_027e0fd4.hpp +++ b/include/DTCM/UnkStruct_027e0fd4.hpp @@ -80,7 +80,7 @@ public: /* 0e0 */ Actor *mUnk_0e0; /* 0e4 */ unk32 mUnk_0e4; /* 0e8 */ unk32 mUnk_0e8; - /* 0ec */ unk32 mUnk_0ec; + /* 0ec */ Actor *mUnk_0ec; /* 0f0 */ unk32 mUnk_0f0; /* 0f4 */ unk32 mUnk_0f4; /* 0f8 */ unk32 mUnk_0f8; diff --git a/include/Debug/DebugHierarchy.hpp b/include/Debug/DebugHierarchy.hpp deleted file mode 100644 index 70e4de9c..00000000 --- a/include/Debug/DebugHierarchy.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "global.h" -#include "types.h" - -#include "Debug/DebugHierarchyBase.hpp" - -class DebugHierarchy : public DebugHierarchyBase { -public: - /* 00 (base) */ - /* 08 */ - - /* 00 */ virtual ~DebugHierarchy() override; - /* 40 */ -}; diff --git a/include/Debug/DebugHierarchyBase.hpp b/include/Debug/DebugHierarchyBase.hpp deleted file mode 100644 index ca1e0eb7..00000000 --- a/include/Debug/DebugHierarchyBase.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include "global.h" -#include "types.h" - -#include "Debug/DebugHierarchyNode.hpp" -#include "System/SysNew.hpp" - -class DebugHierarchyBase : public SysObject { -public: - /* 00 (vtable) */ - /* 04 */ void *mNodes; - /* 08 */ - - /* 00 */ virtual ~DebugHierarchyBase(); - /* 08 */ virtual void vfunc_08(); - /* 0c */ virtual void vfunc_0c(); - /* 10 */ virtual void vfunc_10(); - /* 14 */ virtual void vfunc_14(); - /* 18 */ virtual void vfunc_18(); - /* 1c */ virtual void vfunc_1c(); - /* 20 */ virtual void vfunc_20(unk32 param1, const char *param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6); - /* 24 */ virtual void vfunc_24(); - /* 28 */ virtual void vfunc_28(); - /* 2c */ virtual void vfunc_2c(); - /* 30 */ virtual void vfunc_30(); - /* 34 */ virtual bool GetChildNode(unk32 param1, const char *description, u32 parent, s32 *param4, unk32 param5, - unk32 param6, unk32 param7, unk32 param8); - /* 38 */ virtual void vfunc_38(); - /* 3c */ virtual void vfunc_3c(unk32 param1, void *param2); - /* 40 */ - - DebugHierarchyBase(); - DebugHierarchyNode *FindNode(u32 id); -}; diff --git a/include/Debug/DebugHierarchyChild.hpp b/include/Debug/DebugHierarchyChild.hpp deleted file mode 100644 index c095fae2..00000000 --- a/include/Debug/DebugHierarchyChild.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "global.h" -#include "types.h" - -class DebugHierarchyChild { -public: - /* 00 */ char mUnk_00[0xc]; - /* 0c */ s32 mUnk_0c; - /* 10 */ -}; diff --git a/include/Debug/DebugHierarchyNode.hpp b/include/Debug/DebugHierarchyNode.hpp deleted file mode 100644 index 057d1946..00000000 --- a/include/Debug/DebugHierarchyNode.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include "global.h" -#include "types.h" - -#include "Debug/DebugHierarchyChild.hpp" - -class DebugHierarchyNode { -public: - /* 00 */ u32 mNodeId; - /* 04 */ u32 mUnk_04; - /* 08 */ u32 mUnk_08; - /* 0c */ unk8 mUnk_0c[0x4]; - /* 10 */ u32 mId; - /* 14 */ s32 mUnk_14; - /* 18 */ unk8 mUnk_18[0x8]; - /* 20 */ DebugHierarchyChild mChildren; - /* 30 */ -}; diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 10b8d532..39314640 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -68,7 +68,18 @@ struct UnkStruct_0208210c_param3 { }; struct UnkStruct { - /* 00 */ unk8 mUnk_00[0x24]; + union { + /* 00 */ Vec3p mUnk_00; + struct { + /* 00 */ u16 mUnk_00_x; + /* 02 */ u16 mUnk_02; + /* 04 */ u16 mUnk_04; + /* 06 */ u16 mUnk_06; + /* 08 */ unk32 mUnk_08; + }; + }; + /* 0c */ Vec3p mUnk_0c; + /* 18 */ unk8 mUnk_18[0x24 - 0x18]; /* 24 */ u16 mUnk_24; /* 26 */ u16 mUnk_26; /* 28 */ u16 mUnk_28; @@ -92,7 +103,7 @@ struct UnkStruct { /* 50 */ u8 mUnk_50; /* 51 */ u8 mUnk_51; /* 52 */ unk8 mUnk_52[0x6]; - /* 58 */ u8 mUnk_58; + /* 58 */ volatile u8 mUnk_58; /* 59 */ u8 mUnk_59; /* 5a */ u8 mUnk_5a; /* 5b */ u8 mUnk_5b; @@ -132,7 +143,8 @@ public: /* 0f */ unk8 mUnk_0f; /* 10 */ - bool func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Sphere *param4); + bool func_01ffbe78(UnkStruct *param1, Vec3p *param2, Vec3p *param3, Sphere *param4, s32 actorId, u16 param6, unk32 param7, + unk32 param8); bool func_01ffbf5c(struct UnkStruct *param1, Vec3p *param2, Vec3p *param3, s32 length, unk32 param5, unk32 param6, UnkStruct_ov000_020beba8 *param7, unk32 param8); bool func_01ffc118(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7); @@ -332,7 +344,7 @@ public: static unk32 func_ov00_0208583c(MapManager *param_1, Vec3p *param_2, unk32 param_3); static unk32 func_ov00_020858b0(MapManager *param_1, Vec3p *param_2, unk32 param_3); s32 func_ov00_02085a34(Vec3p *param_2, unk32 param_3); - unk8 func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param_4, u32 param_5); + unk8 func_ov00_02085c60(UnkStruct *param_2, unk32 *param_3, unk32 *param_4, u32 param_5); unk8 func_ov00_02086044(Vec3p *param_2, Vec3p *param_3, unk32 param_4); bool func_ov00_02086284(s32 *param_2, Vec3p *param_3, Vec3p *param_4, s32 param_5, u16 param_6, Vec3p *param_7, Vec3p *param_8); diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp index 8ac42d14..b7588106 100644 --- a/include/Message/MessageManager.hpp +++ b/include/Message/MessageManager.hpp @@ -3,9 +3,9 @@ #include "global.h" #include "types.h" -#include "Debug/DebugHierarchy.hpp" #include "Message/BMG.hpp" #include "Message/MsgProc.hpp" +#include "Player/Bhio.hpp" #include "System/SysNew.hpp" #include "nds/math.h" @@ -36,7 +36,7 @@ public: /* 0x20 */ UnkStruct_02037750 *mUnk_20[2]; /* 0x28 */ UnkStruct_02038aa0 *mUnk_28[6]; //! TODO: is it the right type? /* 0x40 */ UnkStruct_020397f8 *mUnk_40[2]; // is array size 6? - /* 0x48 */ DebugHierarchy *mDebug; + /* 0x48 */ Bhio *mBhio; /* 0x4C */ static void func_0203643c(u32 *param_1, MessageManager *param_2, u32 param_3); diff --git a/include/Player/Bhio.hpp b/include/Player/Bhio.hpp new file mode 100644 index 00000000..ee39c7fd --- /dev/null +++ b/include/Player/Bhio.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include "System/SysNew.hpp" + +#define BHIO_GROUP_MAGIC 'HFND' + +struct BhioField { + /* 00 */ char mName[0xc]; + /* 0c */ s32 mValue; + /* 10 */ +}; + +struct BhioGroup { + /* 00 */ u32 mMagic; + /* 04 */ u32 mUnk_04; + /* 08 */ u32 mUnk_08; + /* 0c */ u32 mUnk_0c; + /* 10 */ u32 mGroupId; + /* 14 */ u32 mNumFields; + /* 18 */ unk8 mUnk_18[0x8]; + /* 20 */ BhioField mFields[]; +}; + +class BhioBase : public SysObject { +public: + /* 00 (vtable) */ + /* 04 */ void *mNodes; + /* 08 */ + + /* 00 */ virtual ~BhioBase(); + /* 08 */ virtual void vfunc_08(); + /* 0c */ virtual void vfunc_0c(); + /* 10 */ virtual void vfunc_10(); + /* 14 */ virtual void vfunc_14(); + /* 18 */ virtual void vfunc_18(); + /* 1c */ virtual void vfunc_1c(); + /* 20 */ virtual void vfunc_20(unk32 param1, const char *param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6); + /* 24 */ virtual void vfunc_24(); + /* 28 */ virtual void vfunc_28(); + /* 2c */ virtual void vfunc_2c(); + /* 30 */ virtual void vfunc_30(); + /* 34 */ virtual bool GetField(bool param1, const char *fieldName, u32 groupId, s32 *pValue, unk32 param5, unk32 param6, + unk32 param7, unk32 param8); + /* 38 */ virtual void vfunc_38(); + /* 3c */ virtual void vfunc_3c(u32 groupId, s32 *pValue); + /* 40 */ + + BhioBase(); + BhioGroup *FindGroup(u32 id); + + inline bool GetField2(bool param1, u32 groupId, const char *fieldName, s32 *pValue, unk32 param5, unk32 param6, + unk32 param7) { + if (param1) { + this->vfunc_3c(groupId, pValue); + } + return this->GetField(param1, fieldName, groupId, pValue, param5, param6, param7, 0); + } +}; + +class Bhio : public BhioBase { +public: + /* 00 (base) */ + /* 08 */ + + /* 00 */ virtual ~Bhio() override; + /* 40 */ +}; diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 781d0fca..75490f47 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -7,7 +7,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorManager.hpp" #include "DTCM/UnkStruct_027e0fd4.hpp" -#include "Debug/DebugHierarchy.hpp" +#include "Player/Bhio.hpp" #include "Player/EquipItem.hpp" #include "Player/PlayerControlData.hpp" #include "Player/PlayerLinkBase.hpp" @@ -43,7 +43,7 @@ public: /* 00 */ virtual void vfunc_00(); /* 04 */ virtual ~LinkStateBase(); /* 0c */ virtual LinkStateId GetId() = 0; - /* 10 */ virtual void CreateDebugHierarchy(); + /* 10 */ virtual void LoadBhio(); /* 14 */ virtual void OnStateEnter(); /* 18 */ virtual void OnStateLeave(s32 param1); /* 1c */ virtual void vfunc_1c(); @@ -64,7 +64,7 @@ public: 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, Vec3p *param2); LinkStateItem *GetLinkItemState(); void LookAt(Vec3p *target); void func_ov00_020a81fc(Vec3p *param1, unk32 param2); @@ -116,13 +116,13 @@ public: Vec3p *GetPlayerPos(); Vec3p *GetPlayerVel(); unk8 *func_ov00_020a8c64(); - s16 *GetPlayerAngle(); + u16 *GetPlayerAngle(); void *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,8 +132,8 @@ public: unk32 Get_PlayerControlData_Unk100(); unk32 Get_PlayerControlData_Unk120(); s32 Get_PlayerLinkBase_Unk38(); - DebugHierarchy *GetDebugHierarchy0(); - DebugHierarchy *GetDebugHierarchy1(); + Bhio *GetBhio0(); + Bhio *GetBhio1(); LinkStateBase(PlayerLinkBase *link); diff --git a/include/Player/LinkStateCutscene.hpp b/include/Player/LinkStateCutscene.hpp index 750f1b8a..9dae13d8 100644 --- a/include/Player/LinkStateCutscene.hpp +++ b/include/Player/LinkStateCutscene.hpp @@ -62,7 +62,7 @@ public: /* 00 */ virtual void vfunc_00() override; /* 04 */ virtual ~LinkStateCutscene() override; /* 0c */ virtual LinkStateId GetId() override; - /* 10 */ virtual void CreateDebugHierarchy() override; + /* 10 */ virtual void LoadBhio() override; /* 14 */ virtual void OnStateEnter() override; /* 18 */ virtual void OnStateLeave(s32 param1) override; /* 1c */ virtual void vfunc_1c() override; diff --git a/include/Player/LinkStateDamage.hpp b/include/Player/LinkStateDamage.hpp index f58de710..1a8b143a 100644 --- a/include/Player/LinkStateDamage.hpp +++ b/include/Player/LinkStateDamage.hpp @@ -43,7 +43,7 @@ public: /* 00 */ virtual void vfunc_00() override; /* 04 */ virtual ~LinkStateDamage() override; /* 0c */ virtual LinkStateId GetId() override; - /* 10 */ virtual void CreateDebugHierarchy() override; + /* 10 */ virtual void LoadBhio() override; /* 14 */ virtual void OnStateEnter() override; /* 18 */ virtual void OnStateLeave(s32 param1) override; /* 1c */ virtual void vfunc_1c() override; diff --git a/include/Player/LinkStateInteract.hpp b/include/Player/LinkStateInteract.hpp index 6151585b..db22bef9 100644 --- a/include/Player/LinkStateInteract.hpp +++ b/include/Player/LinkStateInteract.hpp @@ -8,22 +8,26 @@ #include "Actor/ActorManager.hpp" #include "Player/LinkStateBase.hpp" #include "Player/LinkStateRoll.hpp" +#include "Unknown/UnkStruct_02035064.hpp" class LinkStateInteract : public LinkStateBase { public: /* 00 (base) */ - /* 0c */ void *mUnk_0c; + /* 0c */ unk32 mUnk_0c; /* 10 */ ActorRef mGrabRef; /* 18 */ Vec3p mThrowOffset; - /* 24 */ unk8 mUnk_24[0x88]; // non-documented struct + /* 24 */ UnkStruct_02035064 mUnk_24; /* ac */ unk32 mUnk_ac; - /* b0 */ unk8 mUnk_b0[4]; + /* b0 */ bool mUnk_b0; + /* b1 */ bool mUnk_b1; + /* b2 */ bool mUnk_b2; + /* b3 */ unk8 mUnk_b3; /* b4 */ /* 00 */ virtual void vfunc_00() override; /* 04 */ virtual ~LinkStateInteract() override; /* 0c */ virtual LinkStateId GetId() override; - /* 10 */ virtual void CreateDebugHierarchy() override; + /* 10 */ virtual void LoadBhio() override; /* 14 */ virtual void OnStateEnter() override; /* 18 */ virtual void OnStateLeave(s32 param1) override; /* 1c */ virtual void vfunc_1c() override; @@ -36,7 +40,7 @@ public: s32 GetGrabActorId(); bool func_ov00_020aa818(); void func_ov00_020aa844(Actor *param1); - LinkStateRoll *GetLinkStateRoll(); + static LinkStateRoll *GetLinkStateRoll(); void SetGrabActorVelocity(Vec3p *velocity); void SetBombVelocity(Vec3p *velocity); void func_ov00_020ab6c8(); @@ -46,8 +50,8 @@ public: void SetThrowOffset(Vec3p *target); void func_ov00_020ab934(Vec3p *target); void func_ov00_020ab97c(Vec3p *target); - void func_ov00_020ab9b8(u32 param1, bool param2); - void Grab(ActorRef *ref); + void func_ov00_020ab9b8(s32 param1, bool param2); + bool Grab(ActorRef *ref); void func_ov00_020abba0(ActorRef *ref); void func_ov00_020abbdc(ActorRef *ref); // duplicate of func_ov00_020abba0 void func_ov00_020abc18(ActorRef *ref); diff --git a/include/Player/LinkStateMove.hpp b/include/Player/LinkStateMove.hpp index a782b22d..02109513 100644 --- a/include/Player/LinkStateMove.hpp +++ b/include/Player/LinkStateMove.hpp @@ -22,7 +22,7 @@ public: /* 00 */ virtual void vfunc_00() override; /* 04 */ virtual ~LinkStateMove() override; /* 0c */ virtual LinkStateId GetId() override; - /* 10 */ virtual void CreateDebugHierarchy() override; + /* 10 */ virtual void LoadBhio() override; /* 14 */ virtual void OnStateEnter() override; /* 18 */ virtual void OnStateLeave(s32 param1) override; /* 1c */ virtual void vfunc_1c() override; diff --git a/include/Player/LinkStateRoll.hpp b/include/Player/LinkStateRoll.hpp index a82dbdf1..3eb2d98d 100644 --- a/include/Player/LinkStateRoll.hpp +++ b/include/Player/LinkStateRoll.hpp @@ -32,7 +32,7 @@ public: /* 00 */ virtual void vfunc_00() override; /* 04 */ virtual ~LinkStateRoll() override; /* 0c */ virtual LinkStateId GetId() override; - /* 10 */ virtual void CreateDebugHierarchy() override; + /* 10 */ virtual void LoadBhio() override; /* 14 */ virtual void OnStateEnter() override; /* 18 */ virtual void OnStateLeave(s32 param1) override; /* 1c */ virtual void vfunc_1c() override; diff --git a/include/Player/PlayerControl.hpp b/include/Player/PlayerControl.hpp index adf10925..69f17610 100644 --- a/include/Player/PlayerControl.hpp +++ b/include/Player/PlayerControl.hpp @@ -7,9 +7,9 @@ #include "Actor/Actor.hpp" #include "Actor/ActorManager.hpp" -#include "Debug/DebugHierarchy.hpp" #include "Item/Item.hpp" #include "Map/TilePos.hpp" +#include "Player/Bhio.hpp" #include "Player/TouchControl.hpp" #include "Player/TouchGesture.hpp" @@ -72,7 +72,7 @@ public: /* c8 */ s32 mUnk_c8; /* cc */ s32 mUnk_cc; /* d0 */ TouchGesture **mTouchGesture; - /* d4 */ DebugHierarchy *mDebug; + /* d4 */ Bhio *mBhio; /* d8 */ static bool func_ov00_020aeeac(); diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp index b5bf77ed..9d85416e 100644 --- a/include/Player/PlayerLinkBase.hpp +++ b/include/Player/PlayerLinkBase.hpp @@ -5,8 +5,8 @@ #include "types.h" #include "Actor/ActorManager.hpp" -#include "Debug/DebugHierarchy.hpp" #include "Item/ItemManager.hpp" +#include "Player/Bhio.hpp" #include "Player/MotionParams.hpp" #include "Player/PlayerBase.hpp" #include "Player/PlayerControlData.hpp" @@ -40,9 +40,9 @@ public: /* 5c */ unk8 mUnk_5c[3]; /* 5f */ bool mUnk_5f; /* 60 */ MotionParams *mMotionParams; - /* 64 */ DebugHierarchy *mDebugHierarchy_0; - /* 68 */ DebugHierarchy *mDebugHierarchy_1; - /* 6c */ DebugHierarchy *mDebugHierarchy_2; + /* 64 */ Bhio *mBhio_0; + /* 68 */ Bhio *mBhio_1; + /* 6c */ Bhio *mBhio_2; /* 70 */ /* 00 */ virtual s32 GetMaxHealth() override; diff --git a/include/Unknown/UnkStruct_020eec9c.hpp b/include/Unknown/UnkStruct_020eec9c.hpp index bcb289ff..269b330d 100644 --- a/include/Unknown/UnkStruct_020eec9c.hpp +++ b/include/Unknown/UnkStruct_020eec9c.hpp @@ -4,6 +4,8 @@ #include "global.h" #include "types.h" +#include + struct UnkStruct_020eec9c_28 { /* 00 */ unk32 mUnk_00; /* 04 */ unk16 mUnk_04; @@ -38,7 +40,9 @@ public: void func_ov000_020d77e4(unk32); unk32 func_ov000_020d7f18(unk32); + void func_ov000_020d7a84(unk32, Vec3p *); void func_ov000_020d7ad4(unk32); + void func_ov000_020d7b20(unk32, Vec3p *); void func_ov008_0211337c(); }; diff --git a/libs/nds/include/nds/math.h b/libs/nds/include/nds/math.h index b3f0638e..c021bc0f 100644 --- a/libs/nds/include/nds/math.h +++ b/libs/nds/include/nds/math.h @@ -24,8 +24,8 @@ typedef s16 q4; #define DIV_Q20(a, b) (((a) << 12) / (b)) #define DEG_TO_ANG(n) ((n) * 0x10000 / 360) -#define SIN(n) (gSinCosTable[2 * ((n) >> 4)]) -#define COS(n) (gSinCosTable[2 * ((n) >> 4) + 1]) +#define SIN(n) (FX_SinCosTable_[2 * ((n) >> 4)]) +#define COS(n) (FX_SinCosTable_[2 * ((n) >> 4) + 1]) u32 func_01ff9f3c(s32 a, s32 b); s32 FX_Atan2Idx(s32 x, s32 y); @@ -49,7 +49,7 @@ u32 CoRemainder(u32 a, u32 b); bool Approach(unk32 *src, unk32 dest, unk32 step); bool Approach_thunk(unk32 *src, unk32 dest, unk32 step); -extern q4 gSinCosTable[]; +extern q4 FX_SinCosTable_[]; typedef struct { /* 0 */ s16 x; @@ -121,6 +121,7 @@ bool Vec3p_TryNormalize(Vec3p *vec); q20 Vec3p_DistanceSquared(Vec3p *a, Vec3p *b); void Vec3p_Scale(Vec3p *vec, q20 scale); bool Vec3p_CalculateNormal(Vec3p *vec, Vec3p *a, Vec3p *b, Vec3p *c); +void Vec3p_SetLength(Vec3p *vec, q20 len, Vec3p *out); inline void Vec3p_Rotate(Vec3p *vec, q20 sin, q20 cos, Vec3p *out) { out->x += MUL_Q20(vec->z, sin); diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index efe35900..32915a89 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -604,8 +604,8 @@ ARM bool Actor::func_ov00_020c243c(ActorTypeId *actorTypes, Actor **out) { case ActorTypeId_BTRF: case ActorTypeId_STNE: case ActorTypeId_TARU: - case ActorTypeId_BKEY: - case ActorTypeId_FORC: + case ActorTypeId_BossKey: + case ActorTypeId_ForceGem: case ActorTypeId_FLTB: case ActorTypeId_TSUB: knockback.mUnk_10 = 10; @@ -748,8 +748,8 @@ ARM void Actor::GetHitbox(Cylinder *hitbox) { hitbox->pos.z = mPos.z; hitbox->pos.y += mHitbox.pos.y; - q20 sin = gSinCosTable[angle]; - q20 cos = gSinCosTable[angle + 1]; + q20 sin = FX_SinCosTable_[angle]; + q20 cos = FX_SinCosTable_[angle + 1]; Vec3p_Rotate(&mHitbox.pos, sin, cos, &hitbox->pos); } @@ -761,8 +761,8 @@ ARM void Actor::GetUnk_08c(Cylinder *param1) { param1->pos.z = mPos.z; param1->pos.y += mUnk_08c.pos.y; - q20 sin = gSinCosTable[angle]; - q20 cos = gSinCosTable[angle + 1]; + q20 sin = FX_SinCosTable_[angle]; + q20 cos = FX_SinCosTable_[angle + 1]; Vec3p_Rotate(&mUnk_08c.pos, sin, cos, ¶m1->pos); } diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index 500b9a07..09357983 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -2483,7 +2483,7 @@ s32 MapManager::func_ov00_02085a34(Vec3p *param_2, s32 param_3) { return 0; } -unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param_4, u32 param_5) { +unk8 MapManager::func_ov00_02085c60(UnkStruct *param_2, unk32 *param_3, unk32 *param_4, u32 param_5) { s64 lVar1; s32 *puVar2; unk32 dVar3; // dword @@ -2502,24 +2502,6 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param Vec3p VStack_b0; Vec3p VStack_a4; Vec3p VStack_98; - Vec3p aVStack_8c[3]; - unk16 uStack_68; - unk16 uStack_66; - unk16 uStack_64; - unk16 uStack_62; - unk16 uStack_60; - unk8 uStack_3e; - unk8 uStack_3d; - unk8 uStack_3c; - unk8 uStack_3b; - unk8 uStack_34; - unk8 uStack_33; - unk8 uStack_32; - unk8 uStack_31; - unk8 uStack_30; - unk8 uStack_2f; - unk32 uStack_2c; - unk32 uStack_28; if (param_5 == 0) { return 0; @@ -2565,47 +2547,31 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param VStack_d8.pos.z = 0; VStack_d8.radius = param_5; do { - bVar4 = func_01ffbe78(param_2, &VStack_b0, &VStack_bc, &VStack_d8); + bVar4 = func_01ffbe78(param_2, &VStack_b0, &VStack_bc, &VStack_d8, 0, 0, 0, 0); if (bVar4) { - VStack_e4.x = param_2->x; - VStack_e4.y = param_2->y; - VStack_e4.z = param_2->z; - VStack_f0.x = param_2[1].x; - VStack_f0.y = param_2[1].y; - VStack_f0.z = param_2[1].z; + VStack_e4.x = param_2->mUnk_00.x; + VStack_e4.y = param_2->mUnk_00.y; + VStack_e4.z = param_2->mUnk_00.z; + VStack_f0.x = param_2->mUnk_0c.x; + VStack_f0.y = param_2->mUnk_0c.y; + VStack_f0.z = param_2->mUnk_0c.z; Vec3p_Normalize(&VStack_f0, &VStack_f0); Vec3p_Scale(&VStack_f0, param_5); Vec3p_Add(&VStack_e4, &VStack_f0, &VStack_e4); - dVar3 = 0xffff; - param_2->x = VStack_e4.x; - param_2->y = VStack_e4.y; - param_2->z = VStack_e4.z; - uStack_68 = (u16) dVar3; - uStack_60 = 0; - uStack_3e = 0; - uStack_3d = 0; - uStack_3c = 0; - uStack_3b = 0; - uStack_34 = 0; - uStack_33 = 0; - uStack_32 = 0; - uStack_31 = 0; - uStack_30 = 0; - uStack_2f = 0; - uStack_2c = 0xffffffff; - uStack_28 = 0xffffffff; - uStack_66 = uStack_68; - uStack_64 = uStack_68; - uStack_62 = uStack_68; - bVar5 = func_01ffbe78(aVStack_8c, &VStack_e4, &VStack_e4, &VStack_d8); + dVar3 = 0xffff; + param_2->mUnk_00.x = VStack_e4.x; + param_2->mUnk_00.y = VStack_e4.y; + param_2->mUnk_00.z = VStack_e4.z; + UnkStruct aVStack_8c; + bVar5 = func_01ffbe78(&aVStack_8c, &VStack_e4, &VStack_e4, &VStack_d8, 0, 0, 0, 0); if (bVar5) { - VStack_e4.x = aVStack_8c[0].x; - VStack_e4.y = aVStack_8c[0].y; - VStack_e4.z = aVStack_8c[0].z; + VStack_e4.x = aVStack_8c.mUnk_00.x; + VStack_e4.y = aVStack_8c.mUnk_00.y; + VStack_e4.z = aVStack_8c.mUnk_00.z; } func_ov000_0207920c(data_027e0d3c, &VStack_e4, (unk32 *) &iStack_104, 0); - param_2[8].x = iStack_104.x; - param_2[8].y = iStack_104.y; + ((Vec3p *) param_2 + 8)->x = iStack_104.x; + ((Vec3p *) param_2 + 8)->y = iStack_104.y; return 1; } VStack_bc.x = VStack_b0.x; @@ -2617,12 +2583,12 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param bVar5 = true; } } while (!bVar5); - param_2->x = VStack_98.x; - param_2->y = VStack_98.y; - param_2->z = VStack_98.z; + param_2->mUnk_00.x = VStack_98.x; + param_2->mUnk_00.y = VStack_98.y; + param_2->mUnk_00.z = VStack_98.z; func_ov000_0207920c(puVar2, &VStack_98, &iStack_10c, 0); - param_2[8].x = iStack_10c; - param_2[8].y = iStack_108; + ((Vec3p *) param_2 + 8)->x = iStack_10c; + ((Vec3p *) param_2 + 8)->y = iStack_108; return 0; } diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index d08091cc..1ef00f4a 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -13,7 +13,7 @@ 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) {} +void LinkStateBase::func_ov00_020a81b8(unk32 param1, Vec3p *param2) {} LinkStateItem *LinkStateBase::GetLinkItemState() {} void LinkStateBase::LookAt(Vec3p *target) {} void LinkStateBase::func_ov00_020a81fc(Vec3p *param1, unk32 param2) {} @@ -65,13 +65,13 @@ bool LinkStateBase::func_ov00_020a8c34() {} Vec3p *LinkStateBase::GetPlayerPos() {} Vec3p *LinkStateBase::GetPlayerVel() {} unk8 *LinkStateBase::func_ov00_020a8c64() {} -s16 *LinkStateBase::GetPlayerAngle() {} +u16 *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() {} +s32 *LinkStateBase::Get_PlayerLinkBase_Unk44() {} bool LinkStateBase::IsEquipBeingUsed(ItemFlag id) {} EquipItem *LinkStateBase::GetEquipItem(ItemFlag id) {} UnkStruct_027e0fd4 *LinkStateBase::func_ov00_020a8d40() {} @@ -81,5 +81,5 @@ 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() {} +Bhio *LinkStateBase::GetBhio0() {} +Bhio *LinkStateBase::GetBhio1() {} diff --git a/src/00_Core/Player/LinkStateCutscene.cpp b/src/00_Core/Player/LinkStateCutscene.cpp index be25ba5b..e74fb3c8 100644 --- a/src/00_Core/Player/LinkStateCutscene.cpp +++ b/src/00_Core/Player/LinkStateCutscene.cpp @@ -5,7 +5,7 @@ void UnkStruct_ov004_0210abb8::vfunc_08(unk32 param1) {} bool LinkStateCutscene::func_ov000_020b1e98(s32 param1) {} bool LinkStateCutscene::func_ov000_020b1eb8() {} bool LinkStateCutscene::func_ov000_020b1eec() {} -void LinkStateCutscene::CreateDebugHierarchy() {} +void LinkStateCutscene::LoadBhio() {} void LinkStateCutscene::OnStateEnter() {} void LinkStateCutscene::OnStateLeave(s32 param1) {} LinkStateId LinkStateCutscene::GetId() {} diff --git a/src/00_Core/Player/LinkStateDamage.cpp b/src/00_Core/Player/LinkStateDamage.cpp index d07de354..62968434 100644 --- a/src/00_Core/Player/LinkStateDamage.cpp +++ b/src/00_Core/Player/LinkStateDamage.cpp @@ -21,68 +21,41 @@ LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b30 = {39, {0x1000, 0, LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b40 = {10, {0x800, 0, 0x4000}}; LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b50 = {84, {0x1000, 0, 0x19000}}; -THUMB void LinkStateDamage::CreateDebugHierarchy() { - unk32 id = 'LDMG'; - +THUMB void LinkStateDamage::LoadBhio() { s32 unk1 = this->PlayerControlData_vfunc_14(data_ov000_020e5af0.mUnk_00); - // Front minor damage regeneration speed "前小ダメ再生速度" - const char *description1 = "\x91O\x8f\xac\x83_\x83\x81\x8d\xc4\x90\xb6\x91\xac\x93x\x00\x00\x00"; + // Front minor damage regeneration speed + this->GetBhio0()->GetField2(true, 'LDMG', "前小ダメ再生速度", &data_ov000_020e5af0.mUnk_04.x, 8, 0, 0x2000); - // Front minor damage start frame "前小ダメ開始フレーム" - const char *description2 = "\x91O\x8f\xac\x83_\x83\x81\x8aJ\x8en\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + // Front minor damage start frame + this->GetBhio0()->GetField2(true, 'LDMG', "前小ダメ開始フレーム", &data_ov000_020e5af0.mUnk_04.y, 8, 0, unk1 / 2); - // Front minor damage end frame "前小ダメ終了フレーム" - const char *description3 = "\x91O\x8F\xAC\x83_\x83\x81\x8FI\x97\xB9\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + // Front minor damage end frame + this->GetBhio0()->GetField2(true, 'LDMG', "前小ダメ終了フレーム", &data_ov000_020e5af0.mUnk_04.z, 8, unk1 / 2, unk1); - DebugHierarchy *debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e5af0.mUnk_04.x); - debugHierarchy->GetChildNode(1, description1, id, &data_ov000_020e5af0.mUnk_04.x, 8, 0, 0x2000, 0); - debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e5af0.mUnk_04.y); - debugHierarchy->GetChildNode(1, description2, id, &data_ov000_020e5af0.mUnk_04.y, 8, 0, unk1 / 2, 0); - debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e5af0.mUnk_04.z); - debugHierarchy->GetChildNode(1, description3, id, &data_ov000_020e5af0.mUnk_04.z, 8, unk1 / 2, unk1, 0); unk1 = this->PlayerControlData_vfunc_14(data_ov000_020e5b00.mUnk_00); - // Back minor damage regeneration speed "後小ダメ再生速度" - const char *description4 = "\x8c\xE3\x8F\xAC\x83_\x83\x81\x8D\xC4\x90\xB6\x91\xAC\x93x\x00\x00\x00"; + // Back minor damage regeneration speed + this->GetBhio0()->GetField2(true, 'LDMG', "後小ダメ再生速度", &data_ov000_020e5b00.mUnk_04.x, 8, 0, 0x2000); - // Back minor damage start frame "後小ダメ開始フレーム" - const char *description5 = "\x8C\xE3\x8F\xAC\x83_\x83\x81\x8AJ\x8En\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + // Back minor damage start frame + this->GetBhio0()->GetField2(true, 'LDMG', "後小ダメ開始フレーム", &data_ov000_020e5b00.mUnk_04.y, 8, 0, unk1 / 2); - // Back minor damage end frame "後小ダメ終了フレーム" - const char *description6 = "\x8C\xE3\x8F\xAC\x83_\x83\x81\x8FI\x97\xB9\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + // Back minor damage end frame + this->GetBhio0()->GetField2(true, 'LDMG', "後小ダメ終了フレーム", &data_ov000_020e5b00.mUnk_04.z, 8, unk1 / 2, unk1); - debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e5b00.mUnk_04.x); - debugHierarchy->GetChildNode(1, description4, id, &data_ov000_020e5b00.mUnk_04.x, 8, 0, 0x2000, 0); - debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e5b00.mUnk_04.y); - debugHierarchy->GetChildNode(1, description5, id, &data_ov000_020e5b00.mUnk_04.y, 8, 0, unk1 / 2, 0); - debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e5b00.mUnk_04.z); - debugHierarchy->GetChildNode(1, description6, id, &data_ov000_020e5b00.mUnk_04.z, 8, unk1 / 2, unk1, 0); + // Number of tears [verb] + this->GetBhio0()->GetField2(false, 'LDMG', "ビリビリ回数", &data_ov000_020e5aec, 6, 0, 0x14); - // Number of tears [verb] "ビリビリ回数" - const char *description7 = "\x83r\x83\x8A\x83r\x83\x8A\x89\xF1\x90\x94\x00\x00\x00"; + // Tear [verb] playback speed + this->GetBhio0()->GetField2(true, 'LDMG', "ビリビリ再生速度", &data_ov000_020e5adc.mUnk_04.x, 8, 0, 0x2000); - debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->GetChildNode(0, description7, id, &data_ov000_020e5aec, 6, 0, 0x14, 0); - - // Tear [verb] playback speed "ビリビリ再生速度" - const char *description8 = "\x83r\x83\x8A\x83r\x83\x8A\x8D\xC4\x90\xB6\x91\xAC\x93x\x00\x00\x00"; - - debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e5adc.mUnk_04.x); - debugHierarchy->GetChildNode(1, description8, id, &data_ov000_020e5adc.mUnk_04.x, 8, 0, 0x2000, 0); - this->GetDebugHierarchy0(); - this->GetDebugHierarchy0(); - this->GetDebugHierarchy0(); - this->GetDebugHierarchy0(); - this->GetDebugHierarchy0(); - this->GetDebugHierarchy1(); + this->GetBhio0(); + this->GetBhio0(); + this->GetBhio0(); + this->GetBhio0(); + this->GetBhio0(); + this->GetBhio1(); } ARM void LinkStateDamage::OnStateEnter() { @@ -150,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); - s16 *playerAngle = this->GetPlayerAngle(); + u16 *playerAngle = this->GetPlayerAngle(); *playerAngle = groundAngle - 0x8000; this->mUnk_24[12] = 0; this->mUnk_22 = param2; diff --git a/src/00_Core/Player/LinkStateInteract.cpp b/src/00_Core/Player/LinkStateInteract.cpp index cf71654d..6778b374 100644 --- a/src/00_Core/Player/LinkStateInteract.cpp +++ b/src/00_Core/Player/LinkStateInteract.cpp @@ -1,30 +1,696 @@ #include "Player/LinkStateInteract.hpp" +#include "Map/MapManager.hpp" +#include "Player/PlayerControl.hpp" +#include "Unknown/UnkStruct_020eec9c.hpp" -void LinkStateInteract::vfunc_00() {} -LinkStateId LinkStateInteract::GetId() {} -void LinkStateInteract::CreateDebugHierarchy() {} -s32 LinkStateInteract::GetGrabActorId() {} -void LinkStateInteract::OnStateEnter() {} -void LinkStateInteract::OnStateLeave(s32 param1) {} -bool LinkStateInteract::func_ov00_020aa818() {} -void LinkStateInteract::func_ov00_020aa844(Actor *param1) {} -bool LinkStateInteract::vfunc_20(s32 param1) {} -LinkStateRoll *LinkStateInteract::GetLinkStateRoll() {} -bool LinkStateInteract::vfunc_24(s32 param1) {} -bool LinkStateInteract::vfunc_34(Vec3p *param1) {} -void LinkStateInteract::SetGrabActorVelocity(Vec3p *velocity) {} -void LinkStateInteract::SetBombVelocity(Vec3p *velocity) {} -void LinkStateInteract::func_ov00_020ab6c8() {} -unk32 LinkStateInteract::func_ov00_020ab770(Vec3p *param1) {} -unk32 LinkStateInteract::func_ov00_020ab7bc(Vec3p *param1, Actor *actor) {} -void LinkStateInteract::SetNormalizedThrowOffset(Vec3p *target) {} -void LinkStateInteract::SetThrowOffset(Vec3p *target) {} -void LinkStateInteract::func_ov00_020ab934(Vec3p *target) {} -void LinkStateInteract::func_ov00_020ab97c(Vec3p *target) {} -void LinkStateInteract::func_ov00_020ab9b8(u32 param1, bool param2) {} -void LinkStateInteract::Grab(ActorRef *ref) {} -void LinkStateInteract::func_ov00_020abba0(ActorRef *ref) {} -void LinkStateInteract::func_ov00_020abbdc(ActorRef *ref) {} -void LinkStateInteract::func_ov00_020abc18(ActorRef *ref) {} -bool LinkStateInteract::func_ov00_020abc40() {} -bool LinkStateInteract::func_ov00_020abc78(ActorRef *ref) {} +static char *sShipTypes[] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; + +THUMB void LinkStateInteract::vfunc_00() {} + +ARM LinkStateId LinkStateInteract::GetId() { + return LinkStateId_Interact; +} + +ARM s32 LinkStateInteract::GetGrabActorId() { + switch (mSubState) { + case 7: + case 8: + case 9: + return mGrabRef.id; + default: + return -1; + } +} + +static unk32 data_ov000_020e5928 = 0x2; +static LinkStateBase_UnkStruct1 data_ov000_020e592c = {0x1d, {0x1666, 0x0, 0x5000}}; +static LinkStateBase_UnkStruct1 data_ov000_020e593c = {0x1e, {0x1999, 0x2000, 0xa000}}; +static LinkStateBase_UnkStruct1 data_ov000_020e594c = {0x1e, {0xffffe800, 0xa000, 0x0}}; +static LinkStateBase_UnkStruct1 data_ov000_020e595c = {0x22, {0x1000, 0x0, 0xf000}}; + +THUMB void LinkStateInteract::LoadBhio() { + u32 dVar1; + Bhio *piVar2; + Bhio *piVar3; + int iVar4; + + const char *fieldName; + + // Lift playback speed + this->GetBhio0()->GetField2(true, 'LGRB', "持ち上げ再生速度", &data_ov000_020e593c.mUnk_04.x, 8, 0, 0x3000); + + // Lift start frame + this->GetBhio0()->GetField2(true, 'LGRB', "持ち上げ開始フレーム", &data_ov000_020e593c.mUnk_04.y, 8, 0, + data_ov000_020e593c.mUnk_04.z / 2); + + // Lift end frame + this->GetBhio0()->GetField2(true, 'LGRB', "持ち上げ終了フレーム", &data_ov000_020e593c.mUnk_04.z, 8, + data_ov000_020e593c.mUnk_04.z / 2, data_ov000_020e593c.mUnk_04.z); + + iVar4 = this->PlayerControlData_vfunc_14(data_ov000_020e595c.mUnk_00); + + // Throw playback speed + this->GetBhio0()->GetField2(true, 'LGRB', "投げ再生速度", &data_ov000_020e595c.mUnk_04.x, 8, 0, 0x3000); + + // Throw start frame + this->GetBhio0()->GetField2(true, 'LGRB', "投げ開始フレーム", &data_ov000_020e595c.mUnk_04.y, 8, 0, iVar4 / 2); + + // Throw end frame + this->GetBhio0()->GetField2(true, 'LGRB', "投げ終了フレーム", &data_ov000_020e595c.mUnk_04.z, 8, iVar4 / 2, iVar4); + + this->GetBhio0(); + + // Stop time + this->GetBhio0()->GetField2(false, 'LPSH', "停止時間", &data_ov000_020e5928, 6, 0, data_ov000_020e5928 * 2); + this->GetBhio0(); + return; +} + +ARM void LinkStateInteract::OnStateEnter() { + if (mSubState != 6) { + this->func_ov00_020a82ac(); + this->EquipItem_vfunc_28(); + } + switch (mSubState) { + case 0: + this->ChangeLinkState(0); + break; + case 1: + gPlayerControl->SetUnk_80(); + this->func_ov00_020a8a4c(&data_ov000_020e592c, 1); + break; + case 2: + this->func_ov00_020a8a4c(&data_ov000_020e593c, 1); + break; + case 3: + case 4: + if (this->GetGrabActor() != NULL) { + data_ov000_020eec9c.func_ov000_020d7b20(0x125, this->GetPlayerPos()); + s16 angle = FX_Atan2Idx(mThrowOffset.x, mThrowOffset.z); + *this->GetPlayerAngle() = angle; + this->func_ov00_020a89bc(&data_ov000_020e595c, 1); + } else { + this->func_ov00_020a8994(); + } + break; + case 5: + if (this->GetGrabActor() != NULL) { + s16 angle = FX_Atan2Idx(mThrowOffset.x, mThrowOffset.z); + *this->GetPlayerAngle() = angle; + this->func_ov00_020a8a4c(&data_ov000_020e594c, 1); + } else { + this->ChangeLinkState(0); + } + break; + case 7: + gPlayerControl->SetUnk_80(); + if (gActorManager->GetActor(&mGrabRef) != NULL) { + *this->Get_PlayerLinkBase_Unk44() = 0; + } else { + this->ChangeLinkState(0); + } + mUnk_24.func_020350b4(1, 0, 0, 0, 0); + mUnk_24.func_020351b8(0, 0, 0, 0); + mUnk_b2 = false; + break; + case 8: + if (mUnk_b0) { + *this->Get_PlayerLinkBase_Unk44() = 1; + } + mUnk_0c = data_ov000_020e5928; + break; + case 9: + if (mUnk_b1) { + *this->Get_PlayerLinkBase_Unk44() = -1; + } + mUnk_0c = data_ov000_020e5928; + break; + case 6: + gPlayerControl->SetUnk_80(); + break; + default: + this->ChangeLinkState(0); + break; + } + if (mSubState != 7) { + mUnk_ac = mSubState; + } +} + +ARM void LinkStateInteract::OnStateLeave(s32 param1) { + LinkStateBase::OnStateLeave(param1); + if (gPlayerControl->mUnk_80) { + gPlayerControl->StopFollowing(); + } + Actor *actor = this->GetGrabActor(); + if (mSubState != 1) { + return; + } + if (actor == NULL) { + return; + } + if (actor->mGrabbed) { + return; + } + this->GetGrabActorRef()->Reset(); +} + +ARM bool LinkStateInteract::func_ov00_020aa818() { + ItemManager *temp_r4 = gItemManager; + ActorNaviBase *fairy = temp_r4->GetFairy(temp_r4->GetEquippedFairy()); + fairy->func_ov000_020ba458(); +} + +ARM void LinkStateInteract::func_ov00_020aa844(Actor *actor) { + Vec3p sp20; + Vec3p_Sub(&actor->mPos, this->GetPlayerPos(), &sp20); + u16 temp_r6 = *this->GetPlayerAngle(); + s16 cos = COS(*this->GetPlayerAngle()); + s16 sin = SIN(temp_r6); + q20 rx = MUL_Q20(sp20.x, -cos) + MUL_Q20(sp20.z, sin); + Cylinder sp10; + actor->GetHitbox(&sp10); + q20 rz = MUL_Q20(sp20.x, sin) + MUL_Q20(sp20.z, cos); + rz -= (sp10.size + 0x666); + + this->GetPlayerVel()->x = 0; + this->GetPlayerVel()->z = 0; + + q20 unk = FLOAT_TO_Q20(1 / 12.0); + if (rx > 0) { + q20 var_r6 = unk; + if (rx <= unk) { + var_r6 = rx; + } + this->GetPlayerVel()->x += MUL_Q20(var_r6, -cos); + q20 var_r4_4 = rx; + if (var_r4_4 > unk) { + var_r4_4 = unk; + } + this->GetPlayerVel()->z += MUL_Q20(var_r4_4, sin); + } else if (rx < 0) { + q20 var_r6_2 = -unk; + if (rx >= -unk) { + var_r6_2 = rx; + } + this->GetPlayerVel()->x += MUL_Q20(var_r6_2, -cos); + q20 var_r4_5 = rx; + if (var_r4_5 < -unk) { + var_r4_5 = -unk; + } + this->GetPlayerVel()->z += MUL_Q20(var_r4_5, sin); + } + if (rz > 0) { + q20 var_r4_2 = unk; + if (rz <= unk) { + var_r4_2 = rz; + } + this->GetPlayerVel()->x += MUL_Q20(var_r4_2, sin); + q20 var_r7_2 = rz; + if (var_r7_2 > unk) { + var_r7_2 = unk; + } + this->GetPlayerVel()->z += MUL_Q20(var_r7_2, cos); + } else if (rz < 0) { + q20 var_r4_3 = -unk; + if (rz >= -unk) { + var_r4_3 = rz; + } + this->GetPlayerVel()->x += MUL_Q20(var_r4_3, sin); + q20 var_r7_3 = rz; + if (var_r7_3 < -unk) { + var_r7_3 = -unk; + } + this->GetPlayerVel()->z += MUL_Q20(var_r7_3, cos); + } +} + +extern "C" unk32 GetCardinal(s16 angle); +extern "C" u16 func_0202bba8(unk32); +extern "C" void func_ov023_02171410(LinkStateRoll *, Actor *, Vec3p *); +ARM bool LinkStateInteract::vfunc_20(s32 param1) { + if (this->HasFlags_PlayerLinkBase_Unk48(2) || !this->func_ov00_020a8b80()) { + return false; + } + Actor *temp_r0 = this->GetGrabActor(); + if ((temp_r0 != NULL) && (param1 == 0)) { + bool var_r6 = false; + if ((u32) (gItemManager->mEquippedItem - 9) <= 1) { + mThrowOffset = gVec3p_ZERO; + s32 temp_r3 = *this->GetPlayerAngle(); + s16 temp_ip = SIN(temp_r3); + s16 temp_r2 = COS(temp_r3); + mThrowOffset.x += MUL_Q20(temp_ip, 0x4cd); + mThrowOffset.z += MUL_Q20(temp_r2, 0x4cd); + var_r6 = true; + } + bool var_r5 = temp_r0->vfunc_2c() != -1; + if (!var_r5 && (var_r6 || gPlayerControl->func_ov00_020b05e8(&mThrowOffset))) { + PlayerControl *pPlayerControl = gPlayerControl; + pPlayerControl->mUsingEquipItem = false; + pPlayerControl->mUnk_7b = false; + + mSubState = 5; + return true; + } + if (var_r6 || gPlayerControl->func_ov00_020b049c(&mThrowOffset, var_r5)) { + PlayerControl *pPlayerControl = gPlayerControl; + pPlayerControl->mUsingEquipItem = false; + pPlayerControl->mUnk_7b = false; + + mSubState = 3; + return true; + } + return false; + } + ActorRef sp14 = gPlayerControl->mFollowRef; + Actor *var_r6_2 = gActorManager->GetActor(&sp14); + if (var_r6_2 == NULL) { + if (gPlayerControl->func_ov00_020b0ad0(this->func_ov00_020a8d40()->mUnk_0ec)) { + var_r6_2 = this->func_ov00_020a8d40()->mUnk_0ec; + sp14 = var_r6_2->mRef; + } else { + return false; + } + } else if (gPlayerControl->mUnk_80) { + return false; + } + if (!gPlayerControl->func_ov00_020afe88(var_r6_2->mUnk_12c, temp_r0 != NULL)) { + gPlayerControl->StopFollowing(); + return false; + } + Vec3p sp5C; + if ((var_r6_2->mUnk_12c == 2) && (this->GetGrabActor() == NULL)) { + Vec3p_Axpy(0x6000, &var_r6_2->mVel, &var_r6_2->mPos, &sp5C); + UnkStruct sp68; + Vec3p sp28; + sp28 = var_r6_2->mPos; + if (gMapManager->func_01ffbe78(&sp68, &sp5C, &sp28, (Sphere *) &var_r6_2->mUnk_08c, var_r6_2->mRef.id, + (s32) var_r6_2->mUnk_09c.mUnk_0, 0, 0)) { + sp5C = sp68.mUnk_00; + } + } else { + this->func_ov00_020ab7bc(&sp5C, var_r6_2); + } + Vec3p sp50; + Vec3p_Sub(&sp5C, this->GetPlayerPos(), &sp50); + Cylinder sp40; + var_r6_2->GetHitbox(&sp40); + switch (var_r6_2->mUnk_12c) { + case 1: + if (Vec3p_Length(&sp50) < 0x800) { + gPlayerControl->SetUnk_80(); + } + return false; + case 2: + if (!PlayerBase::GetEquipSword()->UpdateInUse(1)) { + return false; + } + if (this->GetGrabActor() == NULL) { + if (this->GetCurrentCharacter() == PlayerCharacter_Gongoron) { + func_ov023_02171410(this->GetLinkStateRoll(), var_r6_2, &sp50); + return 0; + } + q20 temp_r0_4 = Vec3p_Length(&sp50); + if (temp_r0_4 < (s32) (sp40.size + 0x3800)) { + s16 temp_r6_2 = (s16) FX_Atan2Idx(sp50.x, sp50.z); + if (temp_r0_4 < 0x1CCD) { + s16 temp_r1 = temp_r6_2 - *(s16 *) this->GetPlayerAngle(); + if ((s32) temp_r1 > 0x4000) { + this->func_ov00_020a81b8(1, &sp5C); + } else if ((s32) temp_r1 >= -0x4000) { + this->func_ov00_020a81b8(0, &sp5C); + } else { + this->func_ov00_020a81b8(2, &sp5C); + } + } else { + if (temp_r0_4 < 0x2B33 && ABS(sp50.y) < 0x1333) { + this->func_ov00_020a81b8(3, &sp5C); + } else { + if (this->func_ov00_020a8d40()->mUnk_05a != 0) { + return false; + } + this->func_ov00_020a81b8(4, &sp5C); + } + } + *this->GetPlayerAngle() = temp_r6_2; + } + } else if (Vec3p_Length(&sp50) < 0x4000) { + Vec3p_Sub(&var_r6_2->mPos, this->GetPlayerPos(), &mThrowOffset); + PlayerControl *pPlayerControl = gPlayerControl; + pPlayerControl->mUsingEquipItem = false; + pPlayerControl->mUnk_7b = false; + gPlayerControl->SetUnk_80(); + mSubState = 3; + mGrabRef = sp14; + return true; + } + return false; + case 3: + if (Vec3p_Length(&sp50) < 0x400) { + Vec3p sp34; + Vec3p_Sub(&sp40.pos, this->GetPlayerPos(), &sp34); + if ((sp34.x != 0) || (sp34.z != 0)) { + s16 temp_r0_5 = (s16) FX_Atan2Idx(sp34.x, sp34.z); + u16 temp_r0_6 = func_0202bba8(GetCardinal(temp_r0_5)); + s16 var_r1_2 = temp_r0_5 - temp_r0_6; + if ((s32) var_r1_2 < 0) { + var_r1_2 = 0 - var_r1_2; + } + if ((s32) var_r1_2 > 0x18E4) { + return 0; + } + *this->GetPlayerAngle() = temp_r0_6; + } + mSubState = 7; + mUnk_0c = 0; + mGrabRef = sp14; + return true; + } + return false; + case 4: + if ((Vec3p_Length(&sp50) < (s32) (sp40.size + 0xC00)) && !this->func_ov005_0211139c()) { + *this->GetGrabActorRef() = var_r6_2->mRef; + mSubState = 1; + this->LookAt(&var_r6_2->mPos); + mGrabRef = sp14; + return true; + } + return false; + case 5: + if (var_r6_2->CollidesWithLink() && this->func_ov005_021113b4()) { + var_r6_2->SetUnk_11c(1); + mSubState = 6; + mGrabRef = sp14; + this->EquipItem_vfunc_28(); + return true; + } + return false; + case 6: + gPlayerControl->StopFollowing(); + return true; + } + return false; +} + +ARM LinkStateRoll *LinkStateInteract::GetLinkStateRoll() { + return (LinkStateRoll *) GetLinkState(LinkStateId_Roll); +} + +ARM bool LinkStateInteract::vfunc_24(s32 param1) { + switch (param1) { + case 4: + if (mSubState == 6) { + return LinkStateBase::vfunc_24(param1); + } + break; + + case 5: + switch (mSubState) { + case 3: + case 4: + case 8: + case 9: + return false; + } + return LinkStateBase::vfunc_24(param1); + + case 1: + case 2: + case 3: + break; + + default: + return false; + } + + switch (mSubState) { + case 1: + case 7: + return LinkStateBase::vfunc_24(param1); + + default: + return false; + } +} + +ARM bool LinkStateInteract::vfunc_34(Vec3p *param1) { + if (this->Get_PlayerControlData_Unk120() == 0x1E) { + s32 temp_r0 = this->func_ov00_020a8d50(); + s32 var_r5; + if (temp_r0 < 0x2000) { + var_r5 = 0; + } else if (temp_r0 >= 0x7000) { + var_r5 = 0x1000; + } else { + var_r5 = CoDivide64By32(temp_r0 - 0x2000, 0x5000); + } + s32 playerAngle = *this->GetPlayerAngle(); + u16 var_r1 = ((((s64) var_r5) << 14) + 0x800) >> 12; + s32 var_r3 = ((s64) COS(var_r1)) * 0xb33; + s32 var_r9 = ((s64) SIN(var_r1)) * 0xb33; + s32 var_r2 = ((s64) SIN(playerAngle)); + s32 var_ip = ((s64) COS(playerAngle)); + + // WIP xyz values + param1->x += var_r3; + param1->y += var_r9; + param1->z += var_ip; + } else { + param1->y += 0xB33; + } + return true; +} + +ARM void LinkStateInteract::SetGrabActorVelocity(Vec3p *velocity) { + Actor *grabActor = this->GetGrabActor(); + if (grabActor == NULL) { + return; + } + Vec3p vec = gVec3p_ZERO; + if (velocity == NULL) { + velocity = &vec; + } + grabActor->Drop(velocity); + this->GetGrabActorRef()->Reset(); +} + +ARM void LinkStateInteract::SetBombVelocity(Vec3p *velocity) { + Actor *grabActor = this->GetGrabActor(); + if (grabActor == NULL) { + return; + } + if (grabActor->mType != ActorTypeId_Bomb && grabActor->mType != ActorTypeId_Cucco) { + return; + } + this->SetGrabActorVelocity(velocity); +} + +ARM void LinkStateInteract::func_ov00_020ab6c8() { + Actor *grabActor = this->GetGrabActor(); + if (grabActor == NULL) { + return; + } + switch (grabActor->mType) { + case ActorTypeId_Cucco: + case ActorTypeId_Bomb: + case ActorTypeId_StorageDrum: + case ActorTypeId_TARU: + case ActorTypeId_STNE: + case ActorTypeId_TSUB: + grabActor->Kill(); + return; + } + this->SetGrabActorVelocity(NULL); +} + +ARM unk32 LinkStateInteract::func_ov00_020ab770(Vec3p *param1) { + Actor *followActor = gPlayerControl->GetFollowActor(); + if (followActor == NULL || this->func_ov00_020ab7bc(param1, followActor) == 0) { + return 0; + } + return followActor->mUnk_12c; +} + +extern "C" unk32 GetCardinal(s16 angle); +ARM unk32 LinkStateInteract::func_ov00_020ab7bc(Vec3p *param1, Actor *actor) { + param1->x = actor->mPos.x; + param1->y = actor->mPos.y; + param1->z = actor->mPos.z; + switch (actor->mUnk_12c) { + case 2: + return PlayerBase::GetEquipSword()->IsUsable(1); + case 3: + Vec3p sp10; + Cylinder hitbox; + actor->GetHitbox(&hitbox); + Vec3p_Sub(this->GetPlayerPos(), param1, &sp10); + s32 temp_r4 = hitbox.size + 0x666; + u32 temp_r0_3 = GetCardinal((s16) FX_Atan2Idx(sp10.x, sp10.z)); + switch (temp_r0_3) { + case 0: + param1->x += temp_r4; + break; + case 1: + param1->x -= temp_r4; + break; + case 2: + param1->z += temp_r4; + break; + case 3: + param1->z -= temp_r4; + break; + } + return 1; + default: + return 1; + } +} + +ARM void LinkStateInteract::SetNormalizedThrowOffset(Vec3p *target) { + Vec3p *playerPos = this->GetPlayerPos(); + Vec3p_Sub(target, playerPos, &mThrowOffset); + Vec3p_SetLength(&mThrowOffset, FLOAT_TO_Q20(1.0), &mThrowOffset); + mSubState = 5; +} + +ARM void LinkStateInteract::SetThrowOffset(Vec3p *target) { + Vec3p *playerPos = this->GetPlayerPos(); + Vec3p_Sub(target, playerPos, &mThrowOffset); + mSubState = 3; +} + +ARM void LinkStateInteract::func_ov00_020ab934(Vec3p *target) { + Actor *grabActor = this->GetGrabActor(); + if (grabActor == NULL) { + return; + } + Vec3p *playerPos = this->GetPlayerPos(); + Vec3p_Sub(target, playerPos, &mThrowOffset); + mSubState = 3; + this->ChangeLinkState(2); +} + +ARM void LinkStateInteract::func_ov00_020ab97c(Vec3p *target) { + Actor *grabActor = this->GetGrabActor(); + if (grabActor == NULL) { + return; + } + Vec3p *playerPos = this->GetPlayerPos(); + Vec3p_Sub(target, playerPos, &mThrowOffset); + mSubState = 4; +} + +extern "C" unk32 func_ov017_0215dff0(Actor *param1, Vec3p *param2); +extern "C" unk32 func_ov017_0215e338(Actor *param1, Vec3p *param2); +ARM void LinkStateInteract::func_ov00_020ab9b8(s32 param1, bool param2) { + Actor *grabActor = this->GetGrabActor(); + if (grabActor == NULL) { + return; + } + bool var_r5 = true; + if (param2) { + Vec3p spC = *this->GetPlayerPos(); + Vec3p_Add(this->GetPlayerPos(), &mThrowOffset, &spC); + switch (grabActor->mType) { + case ActorTypeId_BossKey: + if (func_ov017_0215dff0(grabActor, &spC) != 0) { + var_r5 = false; + this->func_ov00_020aa818(); + } + break; + case ActorTypeId_ForceGem: + if (func_ov017_0215e338(grabActor, &spC) != 0) { + this->func_ov00_020aa818(); + } + break; + } + } + if (var_r5) { + Vec3p sp0; + sp0.x = 0; + sp0.y = 0; + sp0.z = 0; + + u16 playerAngle = *this->GetPlayerAngle(); + s32 temp_r1_3 = MUL_Q20(param1, FLOAT_TO_Q20(0.16)); + + sp0.x += MUL_Q20(SIN(playerAngle), temp_r1_3); + sp0.z += MUL_Q20(COS(playerAngle), temp_r1_3); + grabActor->Drop(&sp0); + } + this->GetGrabActorRef()->Reset(); + data_ov000_020eec9c.func_ov000_020d7a84(0xCC, this->GetPlayerPos()); +} + +ARM bool LinkStateInteract::Grab(ActorRef *ref) { + mGrabRef = *ref; + this->ChangeLinkSubState(LinkStateId_Interact, 6); + return true; +} + +ARM void LinkStateInteract::func_ov00_020abba0(ActorRef *ref) { + if (this->func_ov00_020abc40()) { + this->Grab(ref); + return; + } + mGrabRef = *ref; +} + +ARM void LinkStateInteract::func_ov00_020abbdc(ActorRef *ref) { + if (this->func_ov00_020abc40()) { + this->Grab(ref); + return; + } + mGrabRef = *ref; +} + +ARM void LinkStateInteract::func_ov00_020abc18(ActorRef *ref) { + if (this->func_ov00_020abc40()) { + this->Grab(ref); + } +} + +ARM bool LinkStateInteract::func_ov00_020abc40() { + if (this->GetStateId() != 2 || mSubState != 6) { + if (this->GetStateId() != 6) { + return true; + } + } + return false; +} + +ARM bool LinkStateInteract::func_ov00_020abc78(ActorRef *ref) { + s32 temp_r0; + ActorRef *temp_r0_2; + Actor *temp_r6; + + if (!this->func_ov00_020a8b80()) { + return false; + } + if (this->GetGrabActor() != NULL) { + return false; + } + temp_r0 = this->GetStateId(); + switch (temp_r0) { + case 0: + break; + case 1: { + PlayerControl *pPlayerControl = gPlayerControl; + pPlayerControl->mUsingEquipItem = false; + pPlayerControl->mUnk_7b = false; + break; + } + default: + return false; + } + temp_r6 = gActorManager->GetActor(ref); + temp_r0_2 = this->GetGrabActorRef(); + *temp_r0_2 = *ref; + this->LookAt(&temp_r6->mPos); + mGrabRef = *ref; + data_ov000_020eec9c.func_ov000_020d7a84(0xCB, this->GetPlayerPos()); + this->GetGrabActor()->Grab(); + this->ChangeLinkSubState(LinkStateId_Interact, 2); + return 1; +} diff --git a/src/00_Core/Player/LinkStateMove.cpp b/src/00_Core/Player/LinkStateMove.cpp index a7e64be0..0303af85 100644 --- a/src/00_Core/Player/LinkStateMove.cpp +++ b/src/00_Core/Player/LinkStateMove.cpp @@ -9,15 +9,9 @@ ARM LinkStateId LinkStateMove::GetId() { return LinkStateId_Move; } -THUMB void LinkStateMove::CreateDebugHierarchy() { - unk32 id = 'LMOV'; - // Breath volume decay rate "息吹きボリューム低下率" - const char *description = "\x91\xa7\x90\x81\x82\xab\x83{\x83\x8a\x83\x85\x81[\x83\x80\x92\xe1\x89\xba\x97\xa6"; - - DebugHierarchy *debugHierarchy = this->GetDebugHierarchy0(); - debugHierarchy->vfunc_3c(id, &data_ov000_020e56f0); - - debugHierarchy->GetChildNode(1, description, id, &data_ov000_020e56f0, 8, 0, 0x1000, 0); +THUMB void LinkStateMove::LoadBhio() { + // Breath volume decay rate + this->GetBhio0()->GetField2(true, 'LMOV', "息吹きボリューム低下率", &data_ov000_020e56f0, 8, 0, 0x1000); } ARM void LinkStateMove::OnStateEnter() { diff --git a/src/00_Core/Player/LinkStateRoll.cpp b/src/00_Core/Player/LinkStateRoll.cpp index 91044e21..905f55d4 100644 --- a/src/00_Core/Player/LinkStateRoll.cpp +++ b/src/00_Core/Player/LinkStateRoll.cpp @@ -2,7 +2,7 @@ void LinkStateRoll::vfunc_00() {} LinkStateId LinkStateRoll::GetId() {} -void LinkStateRoll::CreateDebugHierarchy() {} +void LinkStateRoll::LoadBhio() {} void LinkStateRoll::OnStateEnter() {} void LinkStateRoll::OnStateLeave(s32 param1) {} bool LinkStateRoll::vfunc_20(s32 param1) {} diff --git a/src/00_Core/Player/PlayerControl.cpp b/src/00_Core/Player/PlayerControl.cpp index 50c08bda..07e20cf6 100644 --- a/src/00_Core/Player/PlayerControl.cpp +++ b/src/00_Core/Player/PlayerControl.cpp @@ -37,9 +37,9 @@ ARM bool PlayerControl::func_ov00_020aeef8() { THUMB void PlayerControl::func_ov00_020aef30() { this->ResetTouchWorld(); - if (mDebug) { + if (mBhio) { // 操作 = Operation - mDebug->vfunc_20(0, "\x91\x80\x8d\xec", 'PCTL', 'PLYR', 0, 0); + mBhio->vfunc_20(0, "\x91\x80\x8d\xec", 'PCTL', 'PLYR', 0, 0); } } diff --git a/src/04_Load/Debug/DebugHierarchy.cpp b/src/04_Load/Debug/DebugHierarchy.cpp deleted file mode 100644 index a759227d..00000000 --- a/src/04_Load/Debug/DebugHierarchy.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "Debug/DebugHierarchy.hpp" - -DebugHierarchy::~DebugHierarchy() {} diff --git a/src/04_Load/Player/Bhio.cpp b/src/04_Load/Player/Bhio.cpp new file mode 100644 index 00000000..03861f77 --- /dev/null +++ b/src/04_Load/Player/Bhio.cpp @@ -0,0 +1,3 @@ +#include "Player/Bhio.hpp" + +Bhio::~Bhio() {} diff --git a/src/04_Load/Player/LinkStateBase.cpp b/src/04_Load/Player/LinkStateBase.cpp index 183d78a4..80848e6c 100644 --- a/src/04_Load/Player/LinkStateBase.cpp +++ b/src/04_Load/Player/LinkStateBase.cpp @@ -2,4 +2,4 @@ LinkStateBase::LinkStateBase(PlayerLinkBase *link) {} LinkStateBase::~LinkStateBase() {} -void LinkStateBase::CreateDebugHierarchy() {} +void LinkStateBase::LoadBhio() {} diff --git a/src/05/Player/LinkStateMove_05.cpp b/src/05/Player/LinkStateMove_05.cpp index 043a05b7..68d44f41 100644 --- a/src/05/Player/LinkStateMove_05.cpp +++ b/src/05/Player/LinkStateMove_05.cpp @@ -108,7 +108,7 @@ ARM void LinkStateMove::vfunc_1c() { if (mUnk_0c > 0) { q4 temp_r8 = data_ov005_02112be4; - s16 temp_r1 = *this->GetPlayerAngle() + this->Get_PlayerControlData_Unk32(); + s16 temp_r1 = *(s16 *) this->GetPlayerAngle() + this->Get_PlayerControlData_Unk32(); this->TurnTo(temp_r1, temp_r1, temp_r8); s32 temp_r1_2 = mUnk_0c; if (temp_r7_2 > temp_r1_2) { @@ -143,7 +143,7 @@ ARM void LinkStateMove::vfunc_1c() { filter.mUnk_08 = FLOAT_TO_Q20(4.0); Vec3p pos = *this->GetPlayerPos(); filter.mPos = pos; - filter.mAngle = *this->GetPlayerAngle(); + filter.mAngle = *(s16 *) this->GetPlayerAngle(); if (gActorManager->FilterActors(&filter, NULL) > 0) { q20 temp_r1_4 = FLOAT_TO_Q20(4.0) - filter.mUnk_08; Vec3p spC = filter.mActor->mPos; diff --git a/src/58_Bombchu/Player/EquipBombchu.cpp b/src/58_Bombchu/Player/EquipBombchu.cpp index 54f2fd76..8b28d754 100644 --- a/src/58_Bombchu/Player/EquipBombchu.cpp +++ b/src/58_Bombchu/Player/EquipBombchu.cpp @@ -251,39 +251,6 @@ THUMB Actor *EquipBombchu::func_ov058_02199400() { extern "C" void func_ov014_02124ff4(Sphere *sphere); extern "C" bool func_0202b2f8(Vec3p *param_1, Vec3p *param_2, unk32 param_3); THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) { - struct TempStruct1 { - /* 00 */ unk8 mUnk_00[0xe]; - /* 0e */ unk8 mUnk_0e; - /* 0f */ unk8 mUnk_0f; - /* 10 */ unk8 mUnk_10; - /* 11 */ unk8 mUnk_11; - /* 12 */ unk8 mUnk_12[0x6]; - /* 18 */ volatile unk8 mUnk_18; - /* 19 */ unk8 mUnk_19; - /* 1a */ unk8 mUnk_1a; - /* 1b */ unk8 mUnk_1b; - /* 1c */ unk8 mUnk_1c; - /* 1d */ unk8 mUnk_1d; - /* 1e */ - }; - - struct TempStruct2 { - union { - /* 00 */ Vec3p mUnk_00; - struct { - /* 00 */ u16 mUnk_00_x; - /* 02 */ u16 mUnk_02; - /* 04 */ u16 mUnk_04; - /* 06 */ u16 mUnk_06; - /* 08 */ unk32 mUnk_08; - }; - }; - /* 0c */ unk8 mUnk_0c[0x34]; - /* 40 */ - }; - - TempStruct1 sp214; - TempStruct2 sp1D4; AABB sp1BC; Vec3p sp1B0; Vec3p sp1A4; @@ -484,21 +451,7 @@ THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) { } } } - sp1D4.mUnk_00_x = -1; - sp1D4.mUnk_02 = -1; - sp1D4.mUnk_04 = -1; - sp1D4.mUnk_06 = -1; - sp1D4.mUnk_00.z = 0; - sp214.mUnk_0e = 0; - sp214.mUnk_0f = 0; - sp214.mUnk_10 = 0; - sp214.mUnk_11 = 0; - sp214.mUnk_18 = 0U; - sp214.mUnk_19 = 0U; - sp214.mUnk_1a = 0; - sp214.mUnk_1b = 0; - sp214.mUnk_1c = 0; - sp214.mUnk_1d = 0; + UnkStruct sp1D4; if (var_r6_2 < sp1B0.y) { if ((sp1B0.y - var_r6_2) < 0x999) { var_r6_2 = sp1B0.y; @@ -528,7 +481,7 @@ THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) { sp194.pos.y = 9; sp194.pos.z = 0xCF; sp194.radius = 1; - temp_r0_8 = gMapManager->func_01ffbe78(&sp1D4.mUnk_00, &spE0, &spD4, &sp194); + temp_r0_8 = gMapManager->func_01ffbe78(&sp1D4, &spE0, &spD4, &sp194, 0, 0, 0, 0); if (sUnk_02198d00.mUnk_10.x != 0) { return 0; } @@ -550,7 +503,7 @@ THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) { mUnk_47 = 0; mUnk_46 = 1; } else { - if (sp214.mUnk_18 != 0) { + if (sp1D4.mUnk_58 != 0) { if (mUnk_18 <= 0) { return 0; } @@ -607,7 +560,7 @@ THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) { sp194.pos.y = 9; sp194.pos.z = 0xCF; sp194.radius = 1; - temp_r0_16 = gMapManager->func_01ffbe78(&sp1D4.mUnk_00, &sp170, &spB0, &sp194); + temp_r0_16 = gMapManager->func_01ffbe78(&sp1D4, &sp170, &spB0, &sp194, 0, 0, 0, 0); if (sUnk_02198d00.mUnk_10.x != 0) { return 0; } @@ -621,7 +574,7 @@ THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) { } gMapManager->func_ov00_02083c7c(&sp170, sp24_unk4); } else { - if (sp214.mUnk_18 == 0) { + if (sp1D4.mUnk_58 == 0) { return false; } sp170.x = sp1D4.mUnk_00.x; @@ -654,7 +607,7 @@ THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) { vec->y = temp_r0_22; vec->z = sp1B0.z; } else { - if (sp214.mUnk_19 == 0) { + if (sp1D4.mUnk_59 == 0) { return 0; } sp158.x = sp1D4.mUnk_00.x; diff --git a/src/59_Hammer/Player/EquipHammer.cpp b/src/59_Hammer/Player/EquipHammer.cpp index 900e43c3..0e869d3a 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(s16 *src, s16 dst, u32 param3); +extern "C" void ApproachAngle_thunk(u16 *src, s16 dst, u32 param3); ARM bool EquipHammer::IsUsable(unk32 param1) const { ActorNavi *pAVar3; diff --git a/src/ITCM/Map/MapManager.cpp b/src/ITCM/Map/MapManager.cpp index 2cf203c7..a2d7e9a9 100644 --- a/src/ITCM/Map/MapManager.cpp +++ b/src/ITCM/Map/MapManager.cpp @@ -1,6 +1,7 @@ #include "Map/MapManager.hpp" -bool MapManager::func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Sphere *param4) {} +bool MapManager::func_01ffbe78(UnkStruct *param1, Vec3p *param2, Vec3p *param3, Sphere *param4, s32 actorId, u16 param6, + unk32 param7, unk32 param8) {} bool MapManager::func_01ffbf5c(struct UnkStruct *param1, Vec3p *param2, Vec3p *param3, s32 length, unk32 param5, unk32 param6, UnkStruct_ov000_020beba8 *param7, unk32 param8) {} bool MapManager::func_01ffc118(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7) {} diff --git a/src/Main/Debug/BhioBase.cpp b/src/Main/Debug/BhioBase.cpp new file mode 100644 index 00000000..0e222bcc --- /dev/null +++ b/src/Main/Debug/BhioBase.cpp @@ -0,0 +1,20 @@ +#include "Player/Bhio.hpp" + +BhioBase::BhioBase() {} +BhioBase::~BhioBase() {} +BhioGroup *BhioBase::FindGroup(u32 id) {} +bool BhioBase::GetField(bool param1, const char *fieldName, u32 groupId, s32 *pValue, unk32 param5, unk32 param6, unk32 param7, + unk32 param8) {} +void BhioBase::vfunc_08() {} +void BhioBase::vfunc_0c() {} +void BhioBase::vfunc_10() {} +void BhioBase::vfunc_14() {} +void BhioBase::vfunc_18() {} +void BhioBase::vfunc_1c() {} +void BhioBase::vfunc_20(unk32 param1, const char *param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6) {} +void BhioBase::vfunc_24() {} +void BhioBase::vfunc_28() {} +void BhioBase::vfunc_2c() {} +void BhioBase::vfunc_30() {} +void BhioBase::vfunc_38() {} +void BhioBase::vfunc_3c(u32 groupId, s32 *pValue) {} diff --git a/src/Main/Debug/DebugHierarchyBase.cpp b/src/Main/Debug/DebugHierarchyBase.cpp deleted file mode 100644 index cdcb1fb7..00000000 --- a/src/Main/Debug/DebugHierarchyBase.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "Debug/DebugHierarchyBase.hpp" - -DebugHierarchyBase::DebugHierarchyBase() {} -DebugHierarchyBase::~DebugHierarchyBase() {} -DebugHierarchyNode *DebugHierarchyBase::FindNode(u32 id) {} -bool DebugHierarchyBase::GetChildNode(unk32 param1, const char *description, u32 parent, s32 *param4, unk32 param5, - unk32 param6, unk32 param7, unk32 param8) {} -void DebugHierarchyBase::vfunc_08() {} -void DebugHierarchyBase::vfunc_0c() {} -void DebugHierarchyBase::vfunc_10() {} -void DebugHierarchyBase::vfunc_14() {} -void DebugHierarchyBase::vfunc_18() {} -void DebugHierarchyBase::vfunc_1c() {} -void DebugHierarchyBase::vfunc_20(unk32 param1, const char *param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6) {} -void DebugHierarchyBase::vfunc_24() {} -void DebugHierarchyBase::vfunc_28() {} -void DebugHierarchyBase::vfunc_2c() {} -void DebugHierarchyBase::vfunc_30() {} -void DebugHierarchyBase::vfunc_38() {} -void DebugHierarchyBase::vfunc_3c(unk32 param1, void *param2) {} diff --git a/tools/configure.py b/tools/configure.py index e3bf934b..0e5d0154 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -28,7 +28,8 @@ args = parser.parse_args() GAME = "ph" DSD_VERSION = 'v0.10.1' WIBO_VERSION = '0.6.16' -OBJDIFF_VERSION = 'v3.0.0-beta.6' +SJISWRAP_VERSION = 'v1.2.2' +OBJDIFF_VERSION = 'v3.4.0' MWCC_VERSION = "2.0/sp1p5" DECOMP_ME_COMPILER = "mwcc_30_131" CC_FLAGS = " ".join([ @@ -112,6 +113,7 @@ EXE = platform.exe WINE = args.wine if platform.system != "windows" else "" DSD = str(args.dsd or os.path.join('.', str(root_path / f"dsd{EXE}"))) OBJDIFF = os.path.join('.', str(root_path / f"objdiff-cli{EXE}")) +SJISWRAP = os.path.join('.', "sjiswrap.exe") CC = os.path.join('.', str(mwcc_path / "mwccarm.exe")) LD = os.path.join('.', str(mwcc_path / "mwldarm.exe")) PYTHON = sys.executable @@ -270,8 +272,8 @@ def main(): n.newline() # -MMD excludes all includes instead of just system includes for some reason, so use -MD instead. - mwcc_cmd = f'{WINE} "{CC}" {CC_FLAGS} {CC_INCLUDES} $cc_flags -d $game_version -MD -c $in -o $basedir' - mwcc_implicit = [CC] + mwcc_cmd = f'{WINE} {SJISWRAP} "{CC}" {CC_FLAGS} {CC_INCLUDES} $cc_flags -d $game_version -MD -c $in -o $basedir' + mwcc_implicit = [CC, SJISWRAP] if platform.system != "windows": transform_dep = "tools/transform_dep.py" mwcc_cmd += f" && $python {transform_dep} $basefile.d $basefile.d" @@ -431,6 +433,17 @@ def add_download_tool_builds(n: ninja_syntax.Writer, project: Project): ) n.newline() + downloads.append(SJISWRAP) + n.build( + rule="download_tool", + outputs=SJISWRAP, + variables={ + "tool": "sjiswrap", + "tag": SJISWRAP_VERSION, + "path": SJISWRAP, + } + ) + n.build( inputs=downloads, rule="phony", diff --git a/tools/download_tool.py b/tools/download_tool.py index 755acd8f..ae43a4da 100644 --- a/tools/download_tool.py +++ b/tools/download_tool.py @@ -32,11 +32,15 @@ def wibo_url(tag: str) -> str: def objdiff_url(tag: str) -> str: return f'https://github.com/encounter/objdiff/releases/download/{tag}/objdiff-cli-{platform.system}-{platform.machine}{platform.exe}' +def sjiswrap_url(tag: str) -> str: + return f'https://github.com/encounter/sjiswrap/releases/download/{tag}/sjiswrap-windows-x86.exe' + TOOLS = { "dsd": dsd_url, "mwccarm": mwccarm_url, "wibo": wibo_url, "objdiff": objdiff_url, + "sjiswrap": sjiswrap_url, }