From 14cae7cbb1ee20bcb44690588937c22738a909e2 Mon Sep 17 00:00:00 2001 From: Yanis <35189056+Yanis002@users.noreply.github.com> Date: Thu, 4 Jun 2026 21:57:16 +0200 Subject: [PATCH] Identify model-related structures (#75) --- config/eur/arm9/itcm/symbols.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 36 +-- config/eur/arm9/overlays/ov031/symbols.txt | 2 +- config/jp/arm9/itcm/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 32 +-- config/jp/arm9/overlays/ov031/symbols.txt | 2 +- include/Actor/ActorUnk_ov000_020a8bb0.hpp | 5 +- include/MapObject/MapObject.hpp | 1 + include/MapObject/MapObjectChestBase.hpp | 5 +- include/MapObject/MapObjectDoorSwitch.hpp | 5 +- .../MapObjectProfile_Derived2_20.hpp | 77 +----- include/MapObject/MapObjectSwitchStep.hpp | 3 +- include/Player/PlayerGet.hpp | 3 +- include/Render/ModelRender.hpp | 119 +++++++++ include/Unknown/Common.hpp | 251 +++++------------- include/profile.hpp | 12 + libs/nns/include/nns/g3d/g3d.h | 59 ++++ .../Actor/ActorUnk_ov000_020a8bb0.cpp | 2 +- .../MapObject/MapObjectMiniBlocks.cpp | 26 +- .../MapObjectProfile_Derived2_20.cpp | 9 +- .../MapObject/MapObjectSwitchStep.cpp | 14 +- src/031_Land/MapObject/MapObjectChestBase.cpp | 8 +- src/031_Land/MapObject/MapObjectDoorClick.cpp | 2 +- .../MapObject/MapObjectDoorDangerSpawn.cpp | 2 +- src/031_Land/MapObject/MapObjectDoorKey.cpp | 2 +- .../MapObject/MapObjectDoorSwitch.cpp | 6 +- src/031_Land/MapObject/MapObjectDoorTouch.cpp | 2 +- .../MapObject/MapObjectTreasureSpawned.cpp | 2 +- src/110_PlayerGet/PlayerGet.cpp | 10 +- 29 files changed, 354 insertions(+), 347 deletions(-) create mode 100644 include/Render/ModelRender.hpp diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index 83c8e53a..52c9041e 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -125,7 +125,7 @@ func_01ffc3d4 kind:function(arm,size=0x88) addr:0x01ffc3d4 func_01ffc45c kind:function(arm,size=0x70) addr:0x01ffc45c func_01ffc4cc kind:function(arm,size=0x54) addr:0x01ffc4cc func_01ffc520 kind:function(arm,size=0x5c) addr:0x01ffc520 -_ZN10UnkSystem48vfunc_0CEv kind:function(arm,size=0x24) addr:0x01ffc57c +_ZN11ModelRender8vfunc_0CEv kind:function(arm,size=0x24) addr:0x01ffc57c func_01ffc5a0 kind:function(arm,size=0x94) addr:0x01ffc5a0 func_01ffc634 kind:function(arm,size=0xa0) addr:0x01ffc634 func_01ffc6d4 kind:function(arm,size=0x70) addr:0x01ffc6d4 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 703f84a0..b2257e28 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -66,7 +66,7 @@ _ZN19func_ov000_02057734D0Ev kind:function(arm,size=0x1c) addr:0x02057734 func_ov000_02057750 kind:function(thumb,size=0xc) addr:0x02057750 func_ov000_0205775c kind:function(thumb,size=0x20) addr:0x0205775c func_ov000_0205777c kind:function(thumb,size=0xe) addr:0x0205777c -_ZN10UnkSystem5C1EPvi kind:function(thumb,size=0x18) addr:0x0205778c +_ZN10UnkSystem5C1EPvP10G3d_Model_ kind:function(thumb,size=0x18) addr:0x0205778c _ZN10UnkSystem519func_ov000_020577a4Eiii kind:function(arm,size=0x54) addr:0x020577a4 _ZN10UnkSystem519func_ov000_020577f8Ei kind:function(arm,size=0x38) addr:0x020577f8 func_ov000_02057830 kind:function(arm,size=0x3c) addr:0x02057830 @@ -90,15 +90,15 @@ func_ov000_02057af4 kind:function(arm,size=0x14) addr:0x02057af4 _ZN19func_ov000_02057b08D0Ev kind:function(arm,size=0x1c) addr:0x02057b08 _ZN19func_ov000_02057b24D1Ev kind:function(arm,size=0x14) addr:0x02057b24 _ZN19func_ov000_02057b38D0Ev kind:function(arm,size=0x1c) addr:0x02057b38 -_ZN10UnkSystem4C2Ei kind:function(thumb,size=0x1c) addr:0x02057b54 -_ZN10UnkSystem4C1Ei kind:function(thumb,size=0x1c) addr:0x02057b70 -_ZN10UnkSystem4D1Ev kind:function(thumb,size=0x20) addr:0x02057b8c -_ZN10UnkSystem4D0Ev kind:function(thumb,size=0x28) addr:0x02057bac -_ZN10UnkSystem4D2Ev kind:function(thumb,size=0x20) addr:0x02057bd4 -_ZN10UnkSystem48vfunc_08Ei kind:function(arm,size=0x20) addr:0x02057bf4 +_ZN11ModelRenderC2EP10G3d_Model_ kind:function(thumb,size=0x1c) addr:0x02057b54 +_ZN11ModelRenderC1EP10G3d_Model_ kind:function(thumb,size=0x1c) addr:0x02057b70 +_ZN11ModelRenderD1Ev kind:function(thumb,size=0x20) addr:0x02057b8c +_ZN11ModelRenderD0Ev kind:function(thumb,size=0x28) addr:0x02057bac +_ZN11ModelRenderD2Ev kind:function(thumb,size=0x20) addr:0x02057bd4 +_ZN11ModelRender8vfunc_08EP10G3d_Model_ kind:function(arm,size=0x20) addr:0x02057bf4 func_ov000_02057c14 kind:function(arm,size=0x20) addr:0x02057c14 -_ZN10UnkSystem48vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x4) addr:0x02057c34 -_ZN10UnkSystem419func_ov000_02057c38Eii kind:function(arm,size=0x34) addr:0x02057c38 +_ZN11ModelRender8vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x4) addr:0x02057c34 +_ZN11ModelRender19func_ov000_02057c38Eii kind:function(arm,size=0x34) addr:0x02057c38 func_ov000_02057c6c kind:function(arm,size=0x2c) addr:0x02057c6c func_ov000_02057c98 kind:function(arm,size=0x18) addr:0x02057c98 func_ov000_02057cb0 kind:function(arm,size=0x18) addr:0x02057cb0 @@ -107,14 +107,14 @@ func_ov000_02057cf4 kind:function(arm,size=0x2c) addr:0x02057cf4 func_ov000_02057d20 kind:function(thumb,size=0x1c) addr:0x02057d20 func_ov000_02057d3c kind:function(arm,size=0x30) addr:0x02057d3c func_ov000_02057d6c kind:function(arm,size=0x18) addr:0x02057d6c -_ZN10UnkSystem48vfunc_20Ev kind:function(arm,size=0x18) addr:0x02057d84 +_ZN11ModelRender8vfunc_20Ev kind:function(arm,size=0x18) addr:0x02057d84 func_ov000_02057d9c kind:function(arm,size=0x2c) addr:0x02057d9c -_ZN10UnkSystem48vfunc_10Ev kind:function(arm,size=0x7c) addr:0x02057dc8 -_ZN10UnkSystem48vfunc_14Ev kind:function(arm,size=0x64) addr:0x02057e44 -_ZN10UnkSystem48vfunc_18Ev kind:function(arm,size=0x1c) addr:0x02057ea8 -_ZN10UnkSystem6D1Ev kind:function(thumb,size=0x2) addr:0x02057ec4 -_ZN10UnkSystem6D0Ev kind:function(thumb,size=0xc) addr:0x02057ec8 -_ZN10UnkSystem6D2Ev kind:function(thumb,size=0x2) addr:0x02057ed4 +_ZN11ModelRender8vfunc_10Ev kind:function(arm,size=0x7c) addr:0x02057dc8 +_ZN11ModelRender8vfunc_14EP5Mat3pP7VecFx32 kind:function(arm,size=0x64) addr:0x02057e44 +_ZN11ModelRender8vfunc_18Ev kind:function(arm,size=0x1c) addr:0x02057ea8 +_ZN15ModelRenderBaseD1Ev kind:function(thumb,size=0x2) addr:0x02057ec4 +_ZN15ModelRenderBaseD0Ev kind:function(thumb,size=0xc) addr:0x02057ec8 +_ZN15ModelRenderBaseD2Ev kind:function(thumb,size=0x2) addr:0x02057ed4 func_ov000_02057ed8 kind:function(arm,size=0x8) addr:0x02057ed8 func_ov000_02057ee0 kind:function(arm,size=0x14) addr:0x02057ee0 func_ov000_02057ef4 kind:function(arm,size=0x24) addr:0x02057ef4 @@ -144,7 +144,7 @@ _ZN19func_ov000_02058390D0Ev kind:function(arm,size=0x1c) addr:0x02058390 _ZN19func_ov000_020583acD2Ev kind:function(arm,size=0x14) addr:0x020583ac func_ov000_020583c0 kind:function(arm,size=0x138) addr:0x020583c0 func_ov000_020584f8 kind:function(arm,size=0x48) addr:0x020584f8 -_ZN33MapObjectProfile_Derived2_20_BaseC2EPKcPvS2_S2_ii kind:function(thumb,size=0x84) addr:0x02058540 +_ZN33MapObjectProfile_Derived2_20_BaseC2EPKcS1_S1_S1_ii kind:function(thumb,size=0x84) addr:0x02058540 func_ov000_020585c4 kind:function(thumb,size=0x14) addr:0x020585c4 _ZN33MapObjectProfile_Derived2_20_BaseD1Ev kind:function(thumb,size=0x48) addr:0x020585d8 _ZN33MapObjectProfile_Derived2_20_BaseD0Ev kind:function(thumb,size=0x4c) addr:0x02058620 @@ -3024,7 +3024,7 @@ _ZN23ActorUnk_ov000_020a8bb019func_ov000_020a8ae0Ei kind:function(arm,size=0x14) func_ov000_020a8af4 kind:function(arm,size=0x54) addr:0x020a8af4 func_ov000_020a8b48 kind:function(arm,size=0x34) addr:0x020a8b48 func_ov000_020a8b7c kind:function(arm,size=0x34) addr:0x020a8b7c -_ZN23ActorUnk_ov000_020a8bb0C1EP10UnkSystem4i kind:function(arm,size=0x110) addr:0x020a8bb0 +_ZN23ActorUnk_ov000_020a8bb0C1EP11ModelRenderi kind:function(arm,size=0x110) addr:0x020a8bb0 _ZN23ActorUnk_ov000_020a8bb0D1Ev kind:function(arm,size=0x20) addr:0x020a8cc0 _ZN23ActorUnk_ov000_020a8bb0D0Ev kind:function(arm,size=0x28) addr:0x020a8ce0 _ZN23ActorUnk_ov000_020a8bb0D2Ev kind:function(arm,size=0x20) addr:0x020a8d08 diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index cd7f1d32..a7451bb9 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -1381,7 +1381,7 @@ _ZN19MapObjectDoorSwitch8vfunc_6CEv kind:function(arm,size=0x20) addr:0x020ff110 _ZN19MapObjectDoorSwitch8vfunc_14Ev kind:function(arm,size=0x80) addr:0x020ff130 _ZN19MapObjectDoorSwitch8vfunc_18EPcc kind:function(arm,size=0xc) addr:0x020ff1b0 _ZN19MapObjectDoorSwitch8vfunc_74Ev kind:function(arm,size=0xcc) addr:0x020ff1bc -_ZN19MapObjectDoorSwitch9vfunc2_10Ev kind:function(arm,size=0x50) addr:0x020ff288 +_ZN19MapObjectDoorSwitch8GetModelEv kind:function(arm,size=0x50) addr:0x020ff288 _ZN19MapObjectDoorSwitch8vfunc_50Ev kind:function(arm,size=0x40) addr:0x020ff2d8 _ZN19MapObjectDoorSwitch8vfunc_54Ev kind:function(arm,size=0x74) addr:0x020ff318 _ZN19MapObjectDoorSwitch8vfunc_58Ev kind:function(arm,size=0x44) addr:0x020ff38c diff --git a/config/jp/arm9/itcm/symbols.txt b/config/jp/arm9/itcm/symbols.txt index 8c310e7c..c94ba616 100644 --- a/config/jp/arm9/itcm/symbols.txt +++ b/config/jp/arm9/itcm/symbols.txt @@ -125,7 +125,7 @@ func_01ffc3d4 kind:function(arm,size=0x88) addr:0x01ffc3d4 func_01ffc45c kind:function(arm,size=0x70) addr:0x01ffc45c func_01ffc4cc kind:function(arm,size=0x54) addr:0x01ffc4cc func_01ffc520 kind:function(arm,size=0x5c) addr:0x01ffc520 -_ZN10UnkSystem48vfunc_0CEv kind:function(arm,size=0x24) addr:0x01ffc57c +_ZN11ModelRender8vfunc_0CEv kind:function(arm,size=0x24) addr:0x01ffc57c func_01ffc5a0 kind:function(arm,size=0x94) addr:0x01ffc5a0 func_01ffc634 kind:function(arm,size=0xa0) addr:0x01ffc634 func_01ffc6d4 kind:function(arm,size=0x70) addr:0x01ffc6d4 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 3c7fc6b7..e49483b3 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -66,7 +66,7 @@ _ZN19func_ov000_02058cb4D0Ev kind:function(arm,size=0x1c) addr:0x02058cb4 func_ov000_02058cd0 kind:function(thumb,size=0xc) addr:0x02058cd0 func_ov000_02058cdc kind:function(thumb,size=0x20) addr:0x02058cdc func_ov000_02058cfc kind:function(thumb,size=0xe) addr:0x02058cfc -_ZN10UnkSystem5C1EPvi kind:function(thumb,size=0x18) addr:0x02058d0c +_ZN10UnkSystem5C1EPvP10G3d_Model_ kind:function(thumb,size=0x18) addr:0x02058d0c _ZN10UnkSystem519func_ov000_020577a4Eiii kind:function(arm,size=0x54) addr:0x02058d24 _ZN10UnkSystem519func_ov000_020577f8Ei kind:function(arm,size=0x38) addr:0x02058d78 func_ov000_02058db0 kind:function(arm,size=0x3c) addr:0x02058db0 @@ -90,15 +90,15 @@ func_ov000_02059074 kind:function(arm,size=0x14) addr:0x02059074 _ZN19func_ov000_02059088D0Ev kind:function(arm,size=0x1c) addr:0x02059088 _ZN19func_ov000_020590a4D1Ev kind:function(arm,size=0x14) addr:0x020590a4 _ZN19func_ov000_020590b8D0Ev kind:function(arm,size=0x1c) addr:0x020590b8 -_ZN10UnkSystem4C2Ei kind:function(thumb,size=0x1c) addr:0x020590d4 -_ZN10UnkSystem4C1Ei kind:function(thumb,size=0x1c) addr:0x020590f0 -_ZN10UnkSystem4D1Ev kind:function(thumb,size=0x20) addr:0x0205910c -_ZN10UnkSystem4D0Ev kind:function(thumb,size=0x28) addr:0x0205912c -_ZN10UnkSystem4D2Ev kind:function(thumb,size=0x20) addr:0x02059154 -_ZN10UnkSystem48vfunc_08Ei kind:function(arm,size=0x20) addr:0x02059174 +_ZN11ModelRenderC2EP10G3d_Model_ kind:function(thumb,size=0x1c) addr:0x020590d4 +_ZN11ModelRenderC1EP10G3d_Model_ kind:function(thumb,size=0x1c) addr:0x020590f0 +_ZN11ModelRenderD1Ev kind:function(thumb,size=0x20) addr:0x0205910c +_ZN11ModelRenderD0Ev kind:function(thumb,size=0x28) addr:0x0205912c +_ZN11ModelRenderD2Ev kind:function(thumb,size=0x20) addr:0x02059154 +_ZN11ModelRender8vfunc_08EP10G3d_Model_ kind:function(arm,size=0x20) addr:0x02059174 func_ov000_02059194 kind:function(arm,size=0x20) addr:0x02059194 -_ZN10UnkSystem48vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x4) addr:0x020591b4 -_ZN10UnkSystem419func_ov000_02057c38Eii kind:function(arm,size=0x34) addr:0x020591b8 +_ZN11ModelRender8vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x4) addr:0x020591b4 +_ZN11ModelRender19func_ov000_02057c38Eii kind:function(arm,size=0x34) addr:0x020591b8 func_ov000_020591ec kind:function(arm,size=0x2c) addr:0x020591ec func_ov000_02059218 kind:function(arm,size=0x18) addr:0x02059218 func_ov000_02059230 kind:function(arm,size=0x18) addr:0x02059230 @@ -107,14 +107,14 @@ func_ov000_02059274 kind:function(arm,size=0x2c) addr:0x02059274 func_ov000_020592a0 kind:function(thumb,size=0x1c) addr:0x020592a0 func_ov000_020592bc kind:function(arm,size=0x30) addr:0x020592bc func_ov000_020592ec kind:function(arm,size=0x18) addr:0x020592ec -_ZN10UnkSystem48vfunc_20Ev kind:function(arm,size=0x18) addr:0x02059304 +_ZN11ModelRender8vfunc_20Ev kind:function(arm,size=0x18) addr:0x02059304 func_ov000_0205931c kind:function(arm,size=0x2c) addr:0x0205931c -_ZN10UnkSystem48vfunc_10Ev kind:function(arm,size=0x7c) addr:0x02059348 -_ZN10UnkSystem48vfunc_14Ev kind:function(arm,size=0x64) addr:0x020593c4 -_ZN10UnkSystem48vfunc_18Ev kind:function(arm,size=0x1c) addr:0x02059428 +_ZN11ModelRender8vfunc_10Ev kind:function(arm,size=0x7c) addr:0x02059348 +_ZN11ModelRender8vfunc_14EP5Mat3pP7VecFx32 kind:function(arm,size=0x64) addr:0x020593c4 +_ZN11ModelRender8vfunc_18Ev kind:function(arm,size=0x1c) addr:0x02059428 func_ov000_02059444 kind:function(thumb,size=0x2) addr:0x02059444 _ZN19func_ov000_02059448D0Ev kind:function(thumb,size=0xc) addr:0x02059448 -_ZN10UnkSystem6D2Ev kind:function(thumb,size=0x2) addr:0x02059454 +_ZN15ModelRenderBaseD2Ev kind:function(thumb,size=0x2) addr:0x02059454 func_ov000_02059458 kind:function(arm,size=0x8) addr:0x02059458 func_ov000_02059460 kind:function(arm,size=0x14) addr:0x02059460 func_ov000_02059474 kind:function(arm,size=0x24) addr:0x02059474 @@ -144,7 +144,7 @@ _ZN19func_ov000_02059910D0Ev kind:function(arm,size=0x1c) addr:0x02059910 _ZN19func_ov000_0205992cD2Ev kind:function(arm,size=0x14) addr:0x0205992c func_ov000_02059940 kind:function(arm,size=0x138) addr:0x02059940 func_ov000_02059a78 kind:function(arm,size=0x48) addr:0x02059a78 -_ZN33MapObjectProfile_Derived2_20_BaseC2EPKcPvS2_S2_ii kind:function(thumb,size=0x84) addr:0x02059ac0 +_ZN33MapObjectProfile_Derived2_20_BaseC2EPKcS1_S1_S1_ii kind:function(thumb,size=0x84) addr:0x02059ac0 func_ov000_02059b44 kind:function(thumb,size=0x14) addr:0x02059b44 _ZN33MapObjectProfile_Derived2_20_BaseD1Ev kind:function(thumb,size=0x48) addr:0x02059b58 _ZN33MapObjectProfile_Derived2_20_BaseD0Ev kind:function(thumb,size=0x4c) addr:0x02059ba0 @@ -3023,7 +3023,7 @@ _ZN23ActorUnk_ov000_020a8bb019func_ov000_020a8ae0Ei kind:function(arm,size=0x14) func_ov000_020aa2f4 kind:function(arm,size=0x54) addr:0x020aa2f4 func_ov000_020aa348 kind:function(arm,size=0x34) addr:0x020aa348 func_ov000_020aa37c kind:function(arm,size=0x34) addr:0x020aa37c -_ZN23ActorUnk_ov000_020a8bb0C1EP10UnkSystem4i kind:function(arm,size=0x110) addr:0x020aa3b0 +_ZN23ActorUnk_ov000_020a8bb0C1EP11ModelRenderi kind:function(arm,size=0x110) addr:0x020aa3b0 _ZN23ActorUnk_ov000_020a8bb0D1Ev kind:function(arm,size=0x20) addr:0x020aa4c0 _ZN23ActorUnk_ov000_020a8bb0D0Ev kind:function(arm,size=0x28) addr:0x020aa4e0 _ZN23ActorUnk_ov000_020a8bb0D2Ev kind:function(arm,size=0x20) addr:0x020aa508 diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index 01c735e3..c83a788a 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -1380,7 +1380,7 @@ _ZN19MapObjectDoorSwitch8vfunc_6CEv kind:function(arm,size=0x20) addr:0x02100c38 _ZN19MapObjectDoorSwitch8vfunc_14Ev kind:function(arm,size=0x80) addr:0x02100c58 _ZN19MapObjectDoorSwitch8vfunc_18EPcc kind:function(arm,size=0xc) addr:0x02100cd8 _ZN19MapObjectDoorSwitch8vfunc_74Ev kind:function(arm,size=0xcc) addr:0x02100ce4 -_ZN19MapObjectDoorSwitch9vfunc2_10Ev kind:function(arm,size=0x50) addr:0x02100db0 +_ZN19MapObjectDoorSwitch8GetModelEv kind:function(arm,size=0x50) addr:0x02100db0 _ZN19MapObjectDoorSwitch8vfunc_50Ev kind:function(arm,size=0xec) addr:0x02100e00 _ZN19MapObjectDoorSwitch8vfunc_54Ev kind:function(arm,size=0x170) addr:0x02100eec _ZN19MapObjectDoorSwitch8vfunc_58Ev kind:function(arm,size=0xbc) addr:0x0210105c diff --git a/include/Actor/ActorUnk_ov000_020a8bb0.hpp b/include/Actor/ActorUnk_ov000_020a8bb0.hpp index 3288d69d..25be9552 100644 --- a/include/Actor/ActorUnk_ov000_020a8bb0.hpp +++ b/include/Actor/ActorUnk_ov000_020a8bb0.hpp @@ -1,6 +1,7 @@ #pragma once #include "Actor/Actor.hpp" +#include "Render/ModelRender.hpp" #include "Unknown/Common.hpp" #include "types.h" @@ -45,7 +46,7 @@ public: class ActorUnk_ov000_020a8bb0_a4 { public: - /* 00 */ UnkSystem4 *mUnk_00; + /* 00 */ ModelRender *mUnk_00; /* 08 */ unk16 mUnk_04; /* 08 */ unk16 mUnk_06; /* 0A */ unk32 mUnk_08; @@ -135,7 +136,7 @@ public: /* BC */ void func_ov000_020a8ae0(fx32 param1); - ActorUnk_ov000_020a8bb0(UnkSystem4 *param1, unk32 param2); + ActorUnk_ov000_020a8bb0(ModelRender *param1, unk32 param2); bool func_ov000_020a8db0(); bool func_ov000_020a8dd0(); void func_ov000_020a8df0(ActorRef param1, unk32 param2); diff --git a/include/MapObject/MapObject.hpp b/include/MapObject/MapObject.hpp index fbf34634..0a4e218c 100644 --- a/include/MapObject/MapObject.hpp +++ b/include/MapObject/MapObject.hpp @@ -4,6 +4,7 @@ #include "Map/MapObjectId.hpp" #include "MapObject/MapObjectProfile.hpp" #include "Physics/Cylinder.hpp" +#include "Render/ModelRender.hpp" #include "System/SysNew.hpp" #include "flags.h" #include "global.h" diff --git a/include/MapObject/MapObjectChestBase.hpp b/include/MapObject/MapObjectChestBase.hpp index 944259d8..12383bb9 100644 --- a/include/MapObject/MapObjectChestBase.hpp +++ b/include/MapObject/MapObjectChestBase.hpp @@ -2,11 +2,12 @@ #include "Item/Item.hpp" #include "MapObject/MapObject.hpp" +#include "Render/ModelRender.hpp" #include "Unknown/Common.hpp" #include "global.h" #include "types.h" -class MapObjectTreasureSpawned_74 : public UnkSystem4 { +class MapObjectTreasureSpawned_74 : public ModelRender { public: /* 00 (base) */ /* 60 */ bool mUnk_60; @@ -15,7 +16,7 @@ public: /* 63 */ unk8 mUnk_63; // pad? /* 64 */ - MapObjectTreasureSpawned_74(unk32 param1); + MapObjectTreasureSpawned_74(G3d_Model *param1); // data_ov031_02115844 /* 00 */ virtual ~MapObjectTreasureSpawned_74() override {} diff --git a/include/MapObject/MapObjectDoorSwitch.hpp b/include/MapObject/MapObjectDoorSwitch.hpp index baae4c13..0be299ee 100644 --- a/include/MapObject/MapObjectDoorSwitch.hpp +++ b/include/MapObject/MapObjectDoorSwitch.hpp @@ -3,6 +3,7 @@ #include "MapObject/MapObject.hpp" #include "MapObject/MapObjectDoorBase.hpp" #include "MapObject/MapObjectProfile.hpp" +#include "Render/ModelRender.hpp" #include "global.h" #include "types.h" #include "versions.h" @@ -10,7 +11,7 @@ class MapObjectDoorSwitch : public MapObjectDoorBase { public: /* 000 (base) */ - /* 094 */ UnkSystem4 mUnk_094; + /* 094 */ ModelRender mUnk_094; /* 0F4 */ MapObject_10 mUnk_0F4; #if IS_JP /* 118 */ MapObject_10 mUnk_118; @@ -45,7 +46,7 @@ public: /* 74 */ virtual void vfunc_74() override; // (MapObject_UnkStruct1_Derived1) - /* 10 */ virtual void *vfunc2_10(); + /* 10 */ virtual G3d_Model *GetModel(); }; class MapObjectProfileDoorSwitch : public MapObjectProfile_Derived2 { diff --git a/include/MapObject/MapObjectProfile_Derived2_20.hpp b/include/MapObject/MapObjectProfile_Derived2_20.hpp index 5536711b..51fa38ab 100644 --- a/include/MapObject/MapObjectProfile_Derived2_20.hpp +++ b/include/MapObject/MapObjectProfile_Derived2_20.hpp @@ -4,77 +4,18 @@ #include "Unknown/Common.hpp" #include "types.h" -class MapObjectProfile_Derived2_20_Base_18 { -public: - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ - - MapObjectProfile_Derived2_20_Base_18(); // func_02016620 -}; - -class MapObjectProfile_Derived2_20_Base_20 { -public: - /* 00 */ void *mUnk_00; - /* 04 */ void *mUnk_04; - /* 08 */ unk32 mUnk_08; - /* 0C */ - - MapObjectProfile_Derived2_20_Base_20(unk32 param1, unk32 param2, unk32 param3, unk32 param4, - unk32 param5); // func_020153fc -}; - -class MapObjectProfile_Derived2_20_Base_54 { -public: - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ unk32 mUnk_08; - /* 0C */ unk32 mUnk_0C; - /* 10 */ - - MapObjectProfile_Derived2_20_Base_54(); - ~MapObjectProfile_Derived2_20_Base_54(); -}; - -class MapObjectProfile_Derived2_20_Base { -public: - /* 00 (vtable) */ - /* 04 */ const char *mUnk_04; - /* 08 */ const char *mUnk_08; - /* 0C */ UnkResourceStruct_Base mUnk_0C; - /* 18 */ MapObjectProfile_Derived2_20_Base_18 mUnk_18; - /* 20 */ MapObjectProfile_Derived2_20_Base_20 mUnk_20; - /* 2C */ UnkFileSystem3 mUnk_2C; - /* 3C */ UnkFileSystem5 mUnk_3C; - /* 50 */ UnkResourceStruct *mUnk_50; - /* 54 */ MapObjectProfile_Derived2_20_Base_54 mUnk_54[4]; - /* 94 */ - - MapObjectProfile_Derived2_20_Base(const char *directory, void *param2, void *param3, void *param4, unk32 param5, - unk32 param6); // func_ov000_02058540 - - // data_ov000_020b1b14 - /* 00 */ virtual ~MapObjectProfile_Derived2_20_Base(); - /* 08 */ - - void func_ov000_020586b4(unk32 param1, unk32 param2, unk32 param3, unk32 param4); - void func_ov000_020588f0(void); - void func_ov000_02058900(void); - void func_ov000_02058914(unk32 param1); - void func_ov000_020589e4(void); - unk32 func_ov000_02058a24(); - void unc_ov000_02058a58(void); - unk32 func_ov000_02058a84(unk32 param1, const char *param2); - void func_ov000_02058ab0(void); -}; - class MapObjectProfile_Derived2_20 : public MapObjectProfile_Derived2_20_Base { public: /* 00 (base) */ - /* 94 */ unk16 mUnk_94; - /* 96 */ unk16 mUnk_96; - /* 98 */ unk16 mUnk_98; - /* 9A */ unk16 mUnk_9A; + /* 94 */ union { + wchar_t mUnk_94[4]; + struct { + u16 unk_94; + u16 unk_96; + u16 unk_98; + u16 unk_9A; + }; + }; /* 9C */ UnkFileSystem5 mUnk_9C; /* B0 */ bool mUnk_B0; /* B1 */ unk8 mUnk_B1; // bool? diff --git a/include/MapObject/MapObjectSwitchStep.hpp b/include/MapObject/MapObjectSwitchStep.hpp index 2e534a26..a8ef6d17 100644 --- a/include/MapObject/MapObjectSwitchStep.hpp +++ b/include/MapObject/MapObjectSwitchStep.hpp @@ -2,11 +2,12 @@ #include "MapObject/MapObject.hpp" #include "MapObject/MapObjectProfile.hpp" +#include "Render/ModelRender.hpp" #include "Unknown/Common.hpp" #include "global.h" #include "types.h" -class MapObjectSwitchStep_40 : public UnkSystem4 { +class MapObjectSwitchStep_40 : public ModelRender { public: /* 00 (base) */ /* 60 */ unk16 mUnk_60; diff --git a/include/Player/PlayerGet.hpp b/include/Player/PlayerGet.hpp index f106ba92..42554eb2 100644 --- a/include/Player/PlayerGet.hpp +++ b/include/Player/PlayerGet.hpp @@ -4,6 +4,7 @@ #include "types.h" #include "versions.h" +#include "Render/ModelRender.hpp" #include "Unknown/Common.hpp" #include "Unknown/UnkStruct_027e0ce0.hpp" #include "Unknown/UnkStruct_ov000_0208f820.hpp" @@ -168,7 +169,7 @@ public: /* 070 */ u8 mUnk_72; // probably bools /* 070 */ u8 mUnk_73; // probably bools /* 074 */ UnkStruct_PlayerGet_74 mUnk_74; - /* 08C */ UnkSystem4 mUnk_8C; + /* 08C */ ModelRender mUnk_8C; /* 0EC */ UnkStruct_PlayerGet_ec mUnk_EC[4]; /* 0FC */ void *mUnk_FC; /* 100 */ diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp new file mode 100644 index 00000000..fa3a4d92 --- /dev/null +++ b/include/Render/ModelRender.hpp @@ -0,0 +1,119 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include + +typedef void (*UnkSystem4_UnkCallback)(void); + +class UnkSystem4_vfunc_1C_B4 { +public: + /* 00 */ unk32 mUnk_00; + /* 00 */ STRUCT_PAD(0x04, 0x4C); + /* 4C */ unk32 mUnk_4C; + /* 50 */ unk32 mUnk_50; + /* 54 */ unk32 mUnk_54; +}; + +class UnkSystem4_vfunc_1C { +public: + /* 00 */ u8 *mUnk_00; + /* 04 */ unk32 *mUnk_04; + /* 08 */ STRUCT_PAD(0x08, 0xB4); + /* B4 */ UnkSystem4_vfunc_1C_B4 *mUnk_B4; + /* 00 */ unk32 *mUnk_B8; +}; + +class ModelRenderBase { +public: + /* 00 (vtable) */ + /* 04 */ G3d_Model *mpModel; + /* 08 */ + + ModelRenderBase(G3d_Model *pModel) : + mpModel(pModel) {} + + // data_ov000_020b1a98 + /* 00 */ virtual ~ModelRenderBase(); + /* 08 */ virtual void vfunc_08(G3d_Model *pModel); + /* 0C */ virtual void vfunc_0C() = 0; + /* 10 */ virtual void vfunc_10() = 0; + /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) = 0; + /* 18 */ virtual void vfunc_18() = 0; + /* 1C */ +}; + +class ModelRender : public ModelRenderBase { +public: + /* 00 (base) */ + /* 08 */ G3d_RenderObject mRenderObj; + /* 5C */ unk32 mUnk_5C; // G3d_BoneMtxStruct? + /* 60 */ + + ModelRender(G3d_Model *pModel); + + // data_ov000_020b1a6c + /* 00 */ virtual ~ModelRender(); + /* 08 */ virtual void vfunc_08(G3d_Model *pModel); + /* 0C */ virtual void vfunc_0C(); + /* 10 */ virtual void vfunc_10(); + /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2); // SetRotationTranslation? + /* 18 */ virtual void vfunc_18(); + /* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1); + /* 20 */ virtual void vfunc_20(); + + void func_ov000_02057c38(unk32 param1, unk32 param2); + void func_ov000_0209a7b8(void *param1, UnkSystem4_UnkCallback param2); +}; + +class UnkSystem6_Derived1 : public ModelRenderBase { +public: + /* 00 (base) */ + /* 08 */ + + UnkSystem6_Derived1(G3d_Model *pModel) : + ModelRenderBase(pModel) {} + + // data_ov000_020b1a48 + /* 00 */ virtual ~UnkSystem6_Derived1() override {} + /* 10 */ virtual void vfunc_10() override; + /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) override; + /* 18 */ virtual void vfunc_18() override; +}; + +class UnkSystem6_Derived2 : public UnkSystem6_Derived1 { +public: + /* 00 (base) */ + /* 08 */ + + UnkSystem6_Derived2() : + UnkSystem6_Derived1(NULL) {} + + UnkSystem6_Derived2(G3d_Model *pModel) : + UnkSystem6_Derived1(pModel) {} + + // data_ov000_020b1968 + /* 00 */ virtual ~UnkSystem6_Derived2() {} + /* 0C */ virtual void vfunc_0C() override; +}; + +class UnkSystem5 { +public: + /* 00 */ G3d_Model *mpModel; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0C */ unk32 mUnk_0C; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk32 mUnk_14; + /* 18 */ unk32 mUnk_18; + /* 1C */ unk32 mUnk_1C; + /* 20 */ + + UnkSystem5(void *param1, G3d_Model *pModel); + + void func_01ffc3b4(); + + void func_ov000_020577a4(unk32 param1, unk32 param2, unk32 param3); + void func_ov000_020577f8(unk32 param1); +}; diff --git a/include/Unknown/Common.hpp b/include/Unknown/Common.hpp index 2f7245d2..3e16cfaa 100644 --- a/include/Unknown/Common.hpp +++ b/include/Unknown/Common.hpp @@ -9,6 +9,7 @@ #include "types.h" #include +#include #include class UnkDataStruct2; @@ -951,186 +952,6 @@ struct UnkStruct_StackTitleScreen { void func_ov000_02059288(unk32 param1, char *param2, unk32 param3); }; -typedef void (*UnkSystem4_UnkCallback)(void); - -class UnkSystem4_vfunc_1C_B4 { -public: - /* 00 */ unk32 mUnk_00; - /* 00 */ STRUCT_PAD(0x04, 0x4C); - /* 4C */ unk32 mUnk_4C; - /* 50 */ unk32 mUnk_50; - /* 54 */ unk32 mUnk_54; -}; - -class UnkSystem4_vfunc_1C { -public: - /* 00 */ u8 *mUnk_00; - /* 04 */ unk32 *mUnk_04; - /* 08 */ STRUCT_PAD(0x08, 0xB4); - /* B4 */ UnkSystem4_vfunc_1C_B4 *mUnk_B4; - /* 00 */ unk32 *mUnk_B8; -}; - -class UnkSystem4 { -public: - /* 00 (vtable) */ - /* 04 */ unk32 mUnk_04; - /* 08 */ unk32 *mUnk_08; - /* 0C */ unk32 mUnk_0C; - /* 10 */ unk32 *mUnk_10; - /* 14 */ unk32 mUnk_14; - /* 18 */ unk32 *mUnk_18; - /* 1C */ unk32 mUnk_1C; - /* 20 */ unk32 *mUnk_20; - /* 24 */ unk32 mUnk_24; - /* 28 */ unk32 *mUnk_28; - /* 2C */ unk32 mUnk_2C; - /* 30 */ unk32 mUnk_30; - /* 34 */ unk32 mUnk_34; - /* 38 */ unk32 mUnk_38; - /* 3C */ unk32 mUnk_3C; - /* 40 */ unk32 mUnk_40; - /* 44 */ unk32 mUnk_44; - /* 48 */ unk32 mUnk_48; - /* 4C */ unk32 mUnk_4C; - /* 50 */ unk32 mUnk_50; - /* 54 */ unk32 mUnk_54; - /* 58 */ unk32 mUnk_58; - /* 5C */ unk32 mUnk_5C; - /* 60 */ - - UnkSystem4(unk32 param1); // func_ov000_02057b54 - - // data_ov000_020b1a6c - /* 00 */ virtual ~UnkSystem4(); - /* 08 */ virtual void vfunc_08(void *param1); // resource thing? (GetUnkPointer1_Impl as param1) - /* 0C */ virtual void vfunc_0C(); - /* 10 */ virtual void vfunc_10(); - /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2); - /* 18 */ virtual void vfunc_18(); - /* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1); - /* 20 */ virtual void vfunc_20(); - - void func_ov000_02057c38(unk32 param1, unk32 param2); - void func_ov000_0209a7b8(void *param1, UnkSystem4_UnkCallback param2); -}; - -struct UnkResourceStruct_Base { - /* 00 */ void *mUnk_00; - /* 04 */ void *mUnk_04; - /* 08 */ u8 mUnk_08; - /* 09 */ u8 mUnk_09; - /* 0A */ u8 mUnk_0A; - /* 0B */ u8 mUnk_0B; - /* 0C */ -}; - -struct UnkResourceStruct : public UnkResourceStruct_Base { - /* 0C */ unk8 mUnk_0C; - /* 0D */ unk8 mUnk_0D; - /* 0E */ u16 mUnk_0E; - /* 10 */ -}; - -static inline void *GetUnkPointer1_Impl(UnkResourceStruct *ptr) { - if (ptr != NULL) { - u8 *temp_r1 = (u8 *) ptr + 8; - u32 *var_r0; - u8 zero = 0; - - if (temp_r1 != NULL && ptr->mUnk_09 > zero) { - var_r0 = (u32 *) (temp_r1 + *(u16 *) ((u8 *) ptr + 14) + 4); - } else { - var_r0 = NULL; - } - - if (var_r0 != NULL) { - return (void *) ((u8 *) ptr + *var_r0); - } - } - - return NULL; -} - -template static inline void *GetUnkPointer1() { - return GetUnkPointer1_Impl((UnkResourceStruct *) GET_PROFILE_20_50(T)); -} - -template static inline void *GetUnkPointer2(unk32 param1, u32 resId) { - T *pProfile = GET_PROFILE(T); - pProfile->func_ov000_0209ccd8(param1, resId); - return GetUnkPointer1_Impl((UnkResourceStruct *) pProfile->mUnk_20[param1]->mUnk_50); -} - -class UnkSystem5 { -public: - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ unk32 mUnk_08; - /* 0C */ unk32 mUnk_0C; - /* 10 */ unk32 mUnk_10; - /* 14 */ unk32 mUnk_14; - /* 18 */ unk32 mUnk_18; - /* 1C */ unk32 mUnk_1C; - /* 20 */ - - UnkSystem5(void *param1, unk32 param2); // func_ov000_0205778c - - void func_01ffc3b4(); - - void func_ov000_020577a4(unk32 param1, unk32 param2, unk32 param3); - void func_ov000_020577f8(unk32 param1); -}; - -// related to UnkSystem5? -class UnkSystem6 { -public: - /* 00 (vtable) */ - /* 04 */ - - UnkSystem6() {} - - // data_ov000_020b1a98 - /* 00 */ virtual ~UnkSystem6(); - /* 08 */ virtual void vfunc_08(void *param1); // resource thing like UnkSystem4? - /* 0C */ virtual void vfunc_0C() = 0; - /* 10 */ virtual void vfunc_10() = 0; - /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) = 0; - /* 18 */ virtual void vfunc_18() = 0; - /* 1C */ -}; - -class UnkSystem6_Derived1 : public UnkSystem6 { -public: - /* 00 (base) */ - /* 04 */ void *mUnk_04; - - UnkSystem6_Derived1(void *ptr) : - mUnk_04(ptr) {} - - // data_ov000_020b1a48 - /* 00 */ virtual ~UnkSystem6_Derived1() override {} - /* 10 */ virtual void vfunc_10() override; - /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) override; - /* 18 */ virtual void vfunc_18() override; -}; - -class UnkSystem6_Derived2 : public UnkSystem6_Derived1 { -public: - /* 00 (base) */ - /* 08 */ - - UnkSystem6_Derived2() : - UnkSystem6_Derived1(NULL) {} - - UnkSystem6_Derived2(void *ptr) : - UnkSystem6_Derived1(ptr) {} - - // data_ov000_020b1968 - /* 00 */ virtual ~UnkSystem6_Derived2() {} - /* 0C */ virtual void vfunc_0C() override; -}; - class MapObject; struct UnkStackStruct1 { @@ -1283,3 +1104,73 @@ struct InputInformations { void *unk_08; void *unk_0C; }; + +class MapObjectProfile_Derived2_20_Base_18 { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ + + MapObjectProfile_Derived2_20_Base_18(); // func_02016620 +}; + +class MapObjectProfile_Derived2_20_Base_20 { +public: + /* 00 */ void *mUnk_00; + /* 04 */ void *mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0C */ + + MapObjectProfile_Derived2_20_Base_20(unk32 param1, unk32 param2, unk32 param3, unk32 param4, + unk32 param5); // func_020153fc +}; + +class MapObjectProfile_Derived2_20_Base_54 { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0C */ unk32 mUnk_0C; + /* 10 */ + + MapObjectProfile_Derived2_20_Base_54(); + ~MapObjectProfile_Derived2_20_Base_54(); +}; + +class MapObjectProfile_Derived2_20_Base { +public: + /* 00 (vtable) */ + /* 04 */ const char *mDirName; + /* 08 */ const char *mArchiveName; + /* 0C */ void *mUnk_0C; + /* 10 */ void *mUnk_10; + /* 14 */ u8 mUnk_14; + /* 15 */ u8 mUnk_15; + /* 16 */ u8 mUnk_16; + /* 17 */ u8 mUnk_17; + /* 18 */ MapObjectProfile_Derived2_20_Base_18 mUnk_18; + /* 20 */ MapObjectProfile_Derived2_20_Base_20 mUnk_20; + /* 2C */ UnkFileSystem3 mUnk_2C; + /* 3C */ UnkFileSystem5 mUnk_3C; + /* 50 */ BMDSectionModel *mUnk_50; + /* 54 */ MapObjectProfile_Derived2_20_Base_54 mUnk_54[4]; + /* 94 */ + + MapObjectProfile_Derived2_20_Base(const char *directory, const char *archiveName, const char *param3, const char *param4, + unk32 param5, + unk32 param6); // func_ov000_02058540 + + // data_ov000_020b1b14 + /* 00 */ virtual ~MapObjectProfile_Derived2_20_Base(); + /* 08 */ + + void func_ov000_020586b4(unk32 param1, unk32 param2, unk32 param3, unk32 param4); + void func_ov000_020588f0(void); + void func_ov000_02058900(void); + void func_ov000_02058914(unk32 param1); + void func_ov000_020589e4(void); + unk32 func_ov000_02058a24(); + void unc_ov000_02058a58(void); + unk32 func_ov000_02058a84(unk32 param1, const char *param2); + void func_ov000_02058ab0(void); +}; diff --git a/include/profile.hpp b/include/profile.hpp index 35ff9215..9ded035d 100644 --- a/include/profile.hpp +++ b/include/profile.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #define GET_PROFILE(T) (&ProfileInstance::sProfile) #define GET_PROFILE_20(T) (&ProfileInstance::sProfile.mUnk_20) #define GET_PROFILE_20_50(T) (ProfileInstance::sProfile.mUnk_20.mUnk_50) @@ -14,3 +16,13 @@ template struct ProfileInstance { static T sProfile; }; + +template static inline G3d_Model *GetModelFromProfile() { + return G3d_GetModelPtr((BMDSectionModel *) GET_PROFILE_20_50(T)); +} + +template static inline G3d_Model *GetModelFromProfile2(s32 param1, u32 resId) { + T *pProfile = GET_PROFILE(T); + pProfile->func_ov000_0209ccd8(param1, resId); + return G3d_GetModelPtr((BMDSectionModel *) pProfile->mUnk_20[param1]->mUnk_50); +} diff --git a/libs/nns/include/nns/g3d/g3d.h b/libs/nns/include/nns/g3d/g3d.h index 02cd9755..7a3e6de4 100644 --- a/libs/nns/include/nns/g3d/g3d.h +++ b/libs/nns/include/nns/g3d/g3d.h @@ -1,4 +1,11 @@ +#pragma once + #include +#include + +#ifdef __cplusplus +extern "C" { +#endif struct G3d_RenderState_; typedef void (*G3d_CallbackFunction)(struct G3d_RenderState_ *); @@ -163,3 +170,55 @@ typedef struct G3d_MaterialAnimation_ { extern void *G3d_gScaleHandlers[3]; extern void *G3d_gSRTTransformHandlers[3]; extern void *G3d_gTextureHandlers[4]; + +typedef struct BMDHeader { + /* 00 */ u32 type; // always 'BMD0' + /* 04 */ u16 byteOrder; // 0xFEFF + /* 06 */ u16 version; // always 2 + /* 08 */ size_t fileSize; + /* 0C */ u16 headerSize; // excluding the section offsets (always 0x10) + /* 0E */ u16 numSections; // 1 for 'MDL0' or 2 for 'MDL0' + 'TEX0' + /* 10 */ u32 offsetMDL0; // from the beginning of the file + /* 14 */ u32 offsetTEX0; // from the beginning of the file +} BMDHeader; + +typedef struct BMDSectionHeader { + /* 00 */ u32 type; + /* 04 */ size_t sectionSize; +} BMDSectionHeader; + +typedef struct BMDSectionModel { + /* 00 */ BMDSectionHeader header; // type will be 'MDL0' + /* 08 */ G3d_NameList modelList; +} BMDSectionModel; + +static inline u32 *G3d_GetModelOffsetPtr(const BMDSectionModel *pSection, u8 modelIndex) { + const G3d_NameList *pList = &pSection->modelList; + + if (pList != NULL && modelIndex < pSection->modelList.numElmnts) { + G3d_NameList_Header *pHeader = (G3d_NameList_Header *) ((u8 *) pList + pSection->modelList.ofsHeader); + return (u32 *) ((u8 *) pHeader + offsetof(G3d_NameList_Header, data) + pHeader->element_size * modelIndex); + } + + return NULL; +} + +static inline G3d_Model *G3d_GetModelVariantPtr(const BMDSectionModel *pSection, u8 modelIndex) { + if (pSection != NULL) { + u32 *pOffset = G3d_GetModelOffsetPtr(pSection, modelIndex); + + if (pOffset != NULL) { + return (G3d_Model *) ((u8 *) pSection + *pOffset); + } + } + + return NULL; +} + +static inline G3d_Model *G3d_GetModelPtr(const BMDSectionModel *pSection) { + return G3d_GetModelVariantPtr(pSection, 0); +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp index f406a24b..23b8a40d 100644 --- a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp +++ b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp @@ -14,7 +14,7 @@ ARM void ActorUnk_ov000_020a8bb0::func_ov000_020a8ae0(fx32 param1) { this->mVel.y = posY; } -ARM ActorUnk_ov000_020a8bb0::ActorUnk_ov000_020a8bb0(UnkSystem4 *param1, unk32 param2) { +ARM ActorUnk_ov000_020a8bb0::ActorUnk_ov000_020a8bb0(ModelRender *param1, unk32 param2) { unk32 uVar2; this->mUnk_0B0 = 0; diff --git a/src/000_Second/MapObject/MapObjectMiniBlocks.cpp b/src/000_Second/MapObject/MapObjectMiniBlocks.cpp index 57dcea99..b959379d 100644 --- a/src/000_Second/MapObject/MapObjectMiniBlocks.cpp +++ b/src/000_Second/MapObject/MapObjectMiniBlocks.cpp @@ -76,30 +76,8 @@ ARM bool MapObjectMiniBlocks::vfunc_00(void) { break; } - UnkResourceStruct *ptr = GET_PROFILE(MapObjectProfileMiniBlocks)->vfunc_1C(this->mUnk_20.mUnk_00[1])->mUnk_50; - void *var_r1; - if (ptr != NULL) { - u16 *temp_r1 = (u16 *) ((u8 *) ptr + 8); - u32 *var_r0; - - if (temp_r1 != NULL && uVar6 < ptr->mUnk_09) { - u32 unk_0E = ptr->mUnk_0E; - u16 temp = *((u16 *) ((u8 *) temp_r1 + unk_0E)); - var_r0 = (u32 *) ((u8 *) temp_r1 + unk_0E + 4 + temp * uVar6); - } else { - var_r0 = NULL; - } - - if (var_r0 != NULL) { - var_r1 = (void *) ((u8 *) ptr + *var_r0); - goto next; - } - } - - var_r1 = NULL; - -next: - this->mUnk_40.vfunc_08(var_r1); + BMDSectionModel *pSectionModel = GET_PROFILE(MapObjectProfileMiniBlocks)->vfunc_1C(this->mUnk_20.mUnk_00[1])->mUnk_50; + this->mUnk_40.vfunc_08(G3d_GetModelVariantPtr(pSectionModel, uVar6)); unk32 var_r0_2; unk32 var_r0; diff --git a/src/000_Second/MapObject/MapObjectProfile_Derived2_20.cpp b/src/000_Second/MapObject/MapObjectProfile_Derived2_20.cpp index 2b9cf27d..3b7d5eb7 100644 --- a/src/000_Second/MapObject/MapObjectProfile_Derived2_20.cpp +++ b/src/000_Second/MapObject/MapObjectProfile_Derived2_20.cpp @@ -8,9 +8,10 @@ unk32 func_02012fa8(const char *); } ARM MapObjectProfile_Derived2_20::MapObjectProfile_Derived2_20(MapObjectId mapObjId2) : - MapObjectProfile_Derived2_20_Base("MapObj", &mUnk_94, &mUnk_94, &mUnk_94, 0, 0), - mUnk_94(0), - mUnk_98(0), + MapObjectProfile_Derived2_20_Base("MapObj", (const char *) &mUnk_94, (const char *) &mUnk_94, (const char *) &mUnk_94, 0, + 0), + unk_94(0), + unk_98(0), mUnk_B0(false), mUnk_B1(0) { func_02015ea8(mapObjId2, &this->mUnk_94); @@ -31,7 +32,7 @@ ARM void MapObjectProfile_Derived2_20::func_ov000_0209cef0() { strncpy(&path[0], "MapObj/", sizeof(path) - 1); curLength = strlen(path); - strncpy(&path[curLength], this->mUnk_08, sizeof(path) - 1 - curLength); + strncpy(&path[curLength], this->mArchiveName, sizeof(path) - 1 - curLength); const char *ext = ".zcb"; curLength = strlen(path); diff --git a/src/000_Second/MapObject/MapObjectSwitchStep.cpp b/src/000_Second/MapObject/MapObjectSwitchStep.cpp index 303fea24..c2d421e2 100644 --- a/src/000_Second/MapObject/MapObjectSwitchStep.cpp +++ b/src/000_Second/MapObject/MapObjectSwitchStep.cpp @@ -32,13 +32,13 @@ ARM MapObjectProfileSwitchStep::MapObjectProfileSwitchStep() : this->mUnk_D4.mUnk_18.y = FLOAT_TO_FX32(0.5f); this->mUnk_D4.mUnk_18.z = FLOAT_TO_FX32(0.5f); - this->mUnk_06 = 1; - this->mUnk_0C = 0xC00; - this->mUnk_20.mUnk_0C.mUnk_09 = 1; + this->mUnk_06 = 1; + this->mUnk_0C = 0xC00; + this->mUnk_20.mUnk_15 = 1; } ARM MapObjectSwitchStep_40::MapObjectSwitchStep_40(void) : - UnkSystem4(0) { + ModelRender(NULL) { this->mUnk_60 = 0; this->mUnk_62 = true; this->func_ov000_0209dde0(); @@ -81,15 +81,15 @@ ARM void MapObjectSwitchStep_40::vfunc_1C(UnkSystem4_vfunc_1C *param1) { } ARM MapObjectSwitchStep::MapObjectSwitchStep() : - mUnk_A4(&mUnk_C4, 0) { + mUnk_A4(&mUnk_C4, NULL) { this->mUnk_E4 = 0; this->mUnk_E6 = 0; this->mUnk_E8 = 0; this->mUnk_EA = 0; this->mUnk_EB = 0; - this->mUnk_40.vfunc_08(GetUnkPointer1()); - this->mUnk_A4.mUnk_00 = this->mUnk_40.mUnk_04; + this->mUnk_40.vfunc_08(GetModelFromProfile()); + this->mUnk_A4.mpModel = this->mUnk_40.mpModel; MapObjectProfile_Derived2_20 *temp_r6 = GET_PROFILE_20(MapObjectProfileSwitchStep); unk32 temp_r5 = temp_r6->func_ov000_02058a24(); diff --git a/src/031_Land/MapObject/MapObjectChestBase.cpp b/src/031_Land/MapObject/MapObjectChestBase.cpp index 2892af9a..44c9fafe 100644 --- a/src/031_Land/MapObject/MapObjectChestBase.cpp +++ b/src/031_Land/MapObject/MapObjectChestBase.cpp @@ -7,7 +7,7 @@ #pragma readonly_strings on extern "C" unk32 func_0200f218(unk32, const char *); -extern "C" void func_0200b58c(void *); +extern "C" void func_0200b58c(G3d_RenderObject *); extern "C" void func_01ffb714(VecFx32 *, VecFx32 *, void *); extern "C" void func_01ffcfcc(VecFx32 *, VecFx32 *, VecFx32 *); @@ -23,8 +23,8 @@ static const Vec2pCpp data_ov031_02115830(0x800, 0x800); static const UnkStruct_ov031_02117c84 data_ov031_02117c84(0x3C); static const UnkSubStruct19 data_ov031_02115c84; -ARM MapObjectTreasureSpawned_74::MapObjectTreasureSpawned_74(unk32 param1) : - UnkSystem4(param1), +ARM MapObjectTreasureSpawned_74::MapObjectTreasureSpawned_74(G3d_Model *param1) : + ModelRender(param1), mUnk_60(1) {} ARM void MapObjectTreasureSpawned_74::vfunc_1C(UnkSystem4_vfunc_1C *param1) { @@ -51,7 +51,7 @@ ARM void MapObjectTreasureSpawned_74::vfunc_1C(UnkSystem4_vfunc_1C *param1) { } ARM void MapObjectTreasureSpawned_74::func_ov031_0210306c() { - func_0200b58c(&this->mUnk_08); + func_0200b58c(&this->mRenderObj); } ARM MapObjectChestBase::MapObjectChestBase(unk32 param1) : diff --git a/src/031_Land/MapObject/MapObjectDoorClick.cpp b/src/031_Land/MapObject/MapObjectDoorClick.cpp index 9c437092..288bd3d7 100644 --- a/src/031_Land/MapObject/MapObjectDoorClick.cpp +++ b/src/031_Land/MapObject/MapObjectDoorClick.cpp @@ -406,7 +406,7 @@ ARM void MapObjectDoorClick::vfunc_78(void) { ARM void MapObjectDoorClick::vfunc2_10(void) { unk32 index = this->mUnk_20.mUnk_00[0]; - this->mUnk_94.vfunc_08(GetUnkPointer2(index, data_ov031_02110c1c[index])); + this->mUnk_94.vfunc_08(GetModelFromProfile2(index, data_ov031_02110c1c[index])); } ARM void MapObjectDoorClick::vfunc_40(void) { diff --git a/src/031_Land/MapObject/MapObjectDoorDangerSpawn.cpp b/src/031_Land/MapObject/MapObjectDoorDangerSpawn.cpp index df28c985..593ac24f 100644 --- a/src/031_Land/MapObject/MapObjectDoorDangerSpawn.cpp +++ b/src/031_Land/MapObject/MapObjectDoorDangerSpawn.cpp @@ -37,7 +37,7 @@ ARM MapObjectProfileDoorDangerSpawn::MapObjectProfileDoorDangerSpawn() : } ARM MapObjectDoorDangerSpawn::MapObjectDoorDangerSpawn() : - mUnk_94(GetUnkPointer1()), + mUnk_94(GetModelFromProfile()), mUnk_9C(1), mUnk_A0(0), mUnk_A1(false), diff --git a/src/031_Land/MapObject/MapObjectDoorKey.cpp b/src/031_Land/MapObject/MapObjectDoorKey.cpp index 91d6605b..232b2b6d 100644 --- a/src/031_Land/MapObject/MapObjectDoorKey.cpp +++ b/src/031_Land/MapObject/MapObjectDoorKey.cpp @@ -24,7 +24,7 @@ ARM MapObjectProfileDoorKey::MapObjectProfileDoorKey() : } ARM MapObjectDoorKey::MapObjectDoorKey() : - mUnk_94(GetUnkPointer1()), + mUnk_94(GetModelFromProfile()), mUnk_9C(1), mUnk_A0(0), mUnk_A4(false) { diff --git a/src/031_Land/MapObject/MapObjectDoorSwitch.cpp b/src/031_Land/MapObject/MapObjectDoorSwitch.cpp index 3ced7e07..36514893 100644 --- a/src/031_Land/MapObject/MapObjectDoorSwitch.cpp +++ b/src/031_Land/MapObject/MapObjectDoorSwitch.cpp @@ -38,7 +38,7 @@ ARM MapObjectDoorSwitch::MapObjectDoorSwitch() : } ARM bool MapObjectDoorSwitch::vfunc_00(void) { - this->mUnk_094.vfunc_08(this->vfunc2_10()); + this->mUnk_094.vfunc_08(this->GetModel()); this->func_ov031_020fbf10(true, true); if (this->mUnk_20.mUnk_00[3] == 1) { @@ -146,8 +146,8 @@ ARM void MapObjectDoorSwitch::vfunc_74(void) { } } -ARM void *MapObjectDoorSwitch::vfunc2_10(void) { - return GetUnkPointer1(); +ARM G3d_Model *MapObjectDoorSwitch::GetModel(void) { + return GetModelFromProfile(); } ARM void MapObjectDoorSwitch::vfunc_50(void) { diff --git a/src/031_Land/MapObject/MapObjectDoorTouch.cpp b/src/031_Land/MapObject/MapObjectDoorTouch.cpp index f45b0961..13cf927e 100644 --- a/src/031_Land/MapObject/MapObjectDoorTouch.cpp +++ b/src/031_Land/MapObject/MapObjectDoorTouch.cpp @@ -30,7 +30,7 @@ ARM bool MapObjectDoorTouch::vfunc_00(void) { ARM void MapObjectDoorTouch::vfunc2_10(void) { MapObjectProfileDoorTouch *p = GET_PROFILE(MapObjectProfileDoorTouch); unk32 index = this->mUnk_20.mUnk_00[0]; - this->mUnk_94.vfunc_08(GetUnkPointer2(index, data_ov031_02110c3c[index])); + this->mUnk_94.vfunc_08(GetModelFromProfile2(index, data_ov031_02110c3c[index])); } ARM void MapObjectDoorTouch::vfunc_40(void) { diff --git a/src/031_Land/MapObject/MapObjectTreasureSpawned.cpp b/src/031_Land/MapObject/MapObjectTreasureSpawned.cpp index a30e6b2d..d77a92ac 100644 --- a/src/031_Land/MapObject/MapObjectTreasureSpawned.cpp +++ b/src/031_Land/MapObject/MapObjectTreasureSpawned.cpp @@ -20,7 +20,7 @@ ARM MapObjectProfileTreasureSpawned::MapObjectProfileTreasureSpawned() : ARM MapObjectTreasureSpawned::MapObjectTreasureSpawned() : MapObjectChestBase(1) { - this->mUnk_074.vfunc_08(GetUnkPointer1()); + this->mUnk_074.vfunc_08(GetModelFromProfile()); } ARM unk32 MapObjectTreasureSpawned::vfunc_3C() { diff --git a/src/110_PlayerGet/PlayerGet.cpp b/src/110_PlayerGet/PlayerGet.cpp index d343f994..1df6b98a 100644 --- a/src/110_PlayerGet/PlayerGet.cpp +++ b/src/110_PlayerGet/PlayerGet.cpp @@ -35,7 +35,7 @@ extern const char *data_ov000_020aa248; // .nsbmd extern "C" void func_ov000_0205ca74(unk32); extern "C" void func_01ffb6e4(unk32, const void *, void *); -extern "C" void func_01ffc5a0(UnkSystem4 *, unk32, u16, void *, unk32); +extern "C" void func_01ffc5a0(ModelRender *, unk32, u16, void *, unk32); extern "C" void func_ov000_0208f820(); extern "C" unk32 func_ov024_020d5354(unk32 *, u16 *); extern "C" void func_ov000_02058fc4(unk32 *, UnkStruct_PlayerGet_74 *, VecFx32 *); @@ -48,7 +48,7 @@ extern "C" void func_020156c8(char *, char *, unk32); extern "C" void func_020156f4(char *); extern "C" void func_02015644(char *); -extern "C" UnkResourceStruct *func_ov000_0205abcc(void *, void *, unk32, unk32, unk32); +extern "C" BMDSectionModel *func_ov000_0205abcc(void *, void *, unk32, unk32, unk32); extern "C" unk32 func_ov000_02077590(unk32); static const unk32 data_ov110_02185dc4[1] = {8}; @@ -612,9 +612,9 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { strncpy(modelPath + l, data_ov000_020aa240, 0x3F - l); UnkFileSystem2 fs2(modelPath, 0); - UnkResourceStruct *res = func_ov000_0205abcc((void *) &fs4, (void *) &fs2, 0, 1, this->mUnk_30->mUnk_24); + BMDSectionModel *res = func_ov000_0205abcc((void *) &fs4, (void *) &fs2, 0, 1, this->mUnk_30->mUnk_24); - this->mUnk_8C.vfunc_08(GetUnkPointer1_Impl(res)); + this->mUnk_8C.vfunc_08(G3d_GetModelPtr(res)); } switch (this->mUnk_54.mItemId) { @@ -1009,7 +1009,7 @@ ARM void PlayerGet::vfunc_18(unk32 param1, unk32 param2, unk32 param3) { case 0x3A: break; case 0x3B: - if (param3 != 0 && this->mUnk_54.mItemId != ItemId_Nothing && this->mUnk_8C.mUnk_04 != 0) { + if (param3 != 0 && this->mUnk_54.mItemId != ItemId_Nothing && this->mUnk_8C.mpModel != NULL) { VecFx32_Add(this->mUnk_34, (VecFx32 *) &data_ov110_021861ec.mUnk_00, &auStack_18); func_ov000_02058fc4(data_027e0958, &this->mUnk_74, &auStack_18); }