summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAetias <144526980+AetiasHax@users.noreply.github.com>2025-11-16 17:14:48 +0100
committerGitHub <noreply@github.com>2025-11-16 17:14:48 +0100
commitfc691f4c8f76d11d6b47149fefadaca4470ab2a1 (patch)
treefe987a191d96ca71ce32776be09a57408f491050
parent5b15874c4d2d7c185c98f2791cf8fa6a9d86a440 (diff)
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
-rw-r--r--.gitignore1
-rw-r--r--config/eur/arm9/itcm/symbols.txt2
-rw-r--r--config/eur/arm9/overlays/ov000/delinks.txt3
-rw-r--r--config/eur/arm9/overlays/ov000/relocs.txt12
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt38
-rw-r--r--config/eur/arm9/overlays/ov004/symbols.txt8
-rw-r--r--config/eur/arm9/symbols.txt40
-rw-r--r--config/usa/arm9/itcm/symbols.txt2
-rw-r--r--config/usa/arm9/overlays/ov000/delinks.txt3
-rw-r--r--config/usa/arm9/overlays/ov000/relocs.txt12
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt38
-rw-r--r--config/usa/arm9/overlays/ov004/symbols.txt8
-rw-r--r--config/usa/arm9/symbols.txt42
-rw-r--r--include/Actor/ActorTypeId.hpp4
-rw-r--r--include/DTCM/UnkStruct_027e0c68.hpp4
-rw-r--r--include/DTCM/UnkStruct_027e0f64.hpp4
-rw-r--r--include/DTCM/UnkStruct_027e0fd4.hpp2
-rw-r--r--include/Debug/DebugHierarchy.hpp15
-rw-r--r--include/Debug/DebugHierarchyBase.hpp35
-rw-r--r--include/Debug/DebugHierarchyChild.hpp11
-rw-r--r--include/Debug/DebugHierarchyNode.hpp19
-rw-r--r--include/Map/MapManager.hpp20
-rw-r--r--include/Message/MessageManager.hpp4
-rw-r--r--include/Player/Bhio.hpp70
-rw-r--r--include/Player/LinkStateBase.hpp14
-rw-r--r--include/Player/LinkStateCutscene.hpp2
-rw-r--r--include/Player/LinkStateDamage.hpp2
-rw-r--r--include/Player/LinkStateInteract.hpp18
-rw-r--r--include/Player/LinkStateMove.hpp2
-rw-r--r--include/Player/LinkStateRoll.hpp2
-rw-r--r--include/Player/PlayerControl.hpp4
-rw-r--r--include/Player/PlayerLinkBase.hpp8
-rw-r--r--include/Unknown/UnkStruct_020eec9c.hpp4
-rw-r--r--libs/nds/include/nds/math.h7
-rw-r--r--src/00_Core/Actor/Actor.cpp12
-rw-r--r--src/00_Core/Map/MapManager.cpp82
-rw-r--r--src/00_Core/Player/LinkStateBase.cpp10
-rw-r--r--src/00_Core/Player/LinkStateCutscene.cpp2
-rw-r--r--src/00_Core/Player/LinkStateDamage.cpp85
-rw-r--r--src/00_Core/Player/LinkStateInteract.cpp722
-rw-r--r--src/00_Core/Player/LinkStateMove.cpp12
-rw-r--r--src/00_Core/Player/LinkStateRoll.cpp2
-rw-r--r--src/00_Core/Player/PlayerControl.cpp4
-rw-r--r--src/04_Load/Debug/DebugHierarchy.cpp3
-rw-r--r--src/04_Load/Player/Bhio.cpp3
-rw-r--r--src/04_Load/Player/LinkStateBase.cpp2
-rw-r--r--src/05/Player/LinkStateMove_05.cpp4
-rw-r--r--src/58_Bombchu/Player/EquipBombchu.cpp59
-rw-r--r--src/59_Hammer/Player/EquipHammer.cpp2
-rw-r--r--src/ITCM/Map/MapManager.cpp3
-rw-r--r--src/Main/Debug/BhioBase.cpp20
-rw-r--r--src/Main/Debug/DebugHierarchyBase.cpp20
-rwxr-xr-xtools/configure.py19
-rw-r--r--tools/download_tool.py4
54 files changed, 1055 insertions, 475 deletions
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 <nds/math.h>
+
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, &param1->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 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 end frame "後小ダメ終了フレーム"
- const char *description6 = "\x8C\xE3\x8F\xAC\x83_\x83\x81\x8FI\x97\xB9\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00";
-
- 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] "ビリビリ回数"
- const char *description7 = "\x83r\x83\x8A\x83r\x83\x8A\x89\xF1\x90\x94\x00\x00\x00";
-
- 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();
+ // Back minor damage regeneration speed
+ this->GetBhio0()->GetField2(true, 'LDMG', "後小ダメ再生速度", &data_ov000_020e5b00.mUnk_04.x, 8, 0, 0x2000);
+
+ // 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
+ this->GetBhio0()->GetField2(true, 'LDMG', "後小ダメ終了フレーム", &data_ov000_020e5b00.mUnk_04.z, 8, unk1 / 2, unk1);
+
+ // Number of tears [verb]
+ this->GetBhio0()->GetField2(false, 'LDMG', "ビリビリ回数", &data_ov000_020e5aec, 6, 0, 0x14);
+
+ // Tear [verb] playback speed
+ this->GetBhio0()->GetField2(true, 'LDMG', "ビリビリ再生速度", &data_ov000_020e5adc.mUnk_04.x, 8, 0, 0x2000);
+
+ 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,
}