From cf3a4f88578d9f1ef85cf8f2b43b2dc823da9411 Mon Sep 17 00:00:00 2001 From: enzo Date: Tue, 13 Jan 2026 23:59:04 -0300 Subject: [PATCH 01/14] add MapModelRender --- config/eur/arm9/overlays/ov000/delinks.txt | 4 +++ config/eur/arm9/overlays/ov000/relocs.txt | 4 +-- config/eur/arm9/overlays/ov000/symbols.txt | 14 ++++----- config/eur/arm9/overlays/ov004/relocs.txt | 2 +- config/usa/arm9/overlays/ov000/delinks.txt | 4 +++ config/usa/arm9/overlays/ov000/relocs.txt | 4 +-- config/usa/arm9/overlays/ov000/symbols.txt | 14 ++++----- config/usa/arm9/overlays/ov004/relocs.txt | 2 +- include/Map/MapBase.hpp | 22 +++---------- include/Render/MapModelRender.hpp | 14 +++++++++ include/Render/ModelRender.hpp | 33 ++++++++++++++++++-- include/Unknown/UnkStruct_ov000_020c0c08.hpp | 7 ++++- src/00_Core/Map/MapBase.cpp | 26 +++++++-------- src/00_Core/Render/MapModelRender.cpp | 21 +++++++++++++ src/04_Load/Map/MapBase.cpp | 2 +- 15 files changed, 118 insertions(+), 55 deletions(-) create mode 100644 include/Render/MapModelRender.hpp create mode 100644 src/00_Core/Render/MapModelRender.cpp diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 5be51f0bf..fe6ea3831 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -157,3 +157,7 @@ src/00_Core/Game/GameModePlay.cpp: src/00_Core/Render/ModelRender.cpp: .text start:0x020a956c end:0x020a99e0 .data start:0x020e5818 end:0x020e5860 + +src/00_Core/Render/MapModelRender.cpp: + .text start:0x0209d944 end:0x0209d9e0 + .data start:0x020e4bb0 end:0x020e4bf8 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 971f6546c..54f5dadf6 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -3559,7 +3559,7 @@ from:0x0209d920 kind:arm_call to:0x020a41cc module:overlay(0) from:0x0209d93c kind:arm_call to:0x020a41d8 module:overlay(0) from:0x0209d94c kind:arm_call_thumb to:0x020a956c module:overlay(0) from:0x0209d970 kind:arm_call to:0x02018cb8 module:main -from:0x0209d97c kind:load to:0x020e4bb8 module:overlay(0) +from:0x0209d97c kind:load to:0x020e4bb0 add:8 module:overlay(0) from:0x0209d980 kind:load to:0x0209d9e0 module:overlay(0) from:0x0209d98c kind:arm_call_thumb to:0x020a95ec module:overlay(0) from:0x0209d9a0 kind:arm_call_thumb to:0x020a95ec module:overlay(0) @@ -3633,7 +3633,7 @@ from:0x0209e8d0 kind:arm_call to:0x0202e9dc module:main from:0x0209e8dc kind:arm_call to:0x0209e8e8 module:overlay(0) from:0x0209e8e4 kind:load to:0x027e0fe0 module:dtcm from:0x0209e8f0 kind:arm_call to:0x020c1554 module:overlay(0) -from:0x0209e958 kind:load to:0x020e4c50 module:overlay(0) +from:0x0209e958 kind:load to:0x020e4c48 add:8 module:overlay(0) from:0x0209e964 kind:arm_call to:0x020c1730 module:overlay(0) from:0x0209e978 kind:arm_call to:0x020c1730 module:overlay(0) from:0x0209e980 kind:arm_call to:0x0202ea0c module:main diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index d2166e0c9..5ae08030b 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1475,10 +1475,10 @@ func_ov000_0209d8d8 kind:function(arm,size=0x1c) addr:0x0209d8d8 func_ov000_0209d8f4 kind:function(arm,size=0x18) addr:0x0209d8f4 func_ov000_0209d90c kind:function(arm,size=0x1c) addr:0x0209d90c func_ov000_0209d928 kind:function(arm,size=0x1c) addr:0x0209d928 -func_ov000_0209d944 kind:function(arm,size=0x40) addr:0x0209d944 -func_ov000_0209d984 kind:function(arm,size=0x14) addr:0x0209d984 -func_ov000_0209d998 kind:function(arm,size=0x1c) addr:0x0209d998 -func_ov000_0209d9b4 kind:function(arm,size=0x2c) addr:0x0209d9b4 +_ZN14MapModelRenderC2EP9ItemModel kind:function(arm,size=0x40) addr:0x0209d944 +_ZN14MapModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0209d984 +_ZN14MapModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0209d998 +_ZN14MapModelRender15HideModelCoversEP23ModelRenderCommandsData kind:function(arm,size=0x2c) addr:0x0209d9b4 func_ov000_0209d9e0 kind:function(arm,size=0x18) addr:0x0209d9e0 func_ov000_0209d9f8 kind:function(arm,size=0x18) addr:0x0209d9f8 func_ov000_0209da10 kind:function(arm,size=0x34) addr:0x0209da10 @@ -4693,9 +4693,9 @@ data_ov000_020e4ad0 kind:data(any) addr:0x020e4ad0 data_ov000_020e4b00 kind:data(any) addr:0x020e4b00 data_ov000_020e4b18 kind:data(any) addr:0x020e4b18 data_ov000_020e4b68 kind:data(any) addr:0x020e4b68 -data_ov000_020e4bb8 kind:data(any) addr:0x020e4bb8 -data_ov000_020e4c00 kind:data(any) addr:0x020e4c00 -data_ov000_020e4c50 kind:data(any) addr:0x020e4c50 +_ZTV14MapModelRender kind:data(any) addr:0x020e4bb0 +data_ov000_020e4c00 kind:data(any) addr:0x020e4bf8 +data_ov000_020e4c50 kind:data(any) addr:0x020e4c48 data_ov000_020e4d0c kind:data(any) addr:0x020e4d0c data_ov000_020e4d30 kind:data(any) addr:0x020e4d30 data_ov000_020e4d4c kind:data(any) addr:0x020e4d4c diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index fe9777c46..cb2d40745 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -503,7 +503,7 @@ from:0x021033d8 kind:thumb_call_arm to:0x0202e9dc module:main from:0x02103418 kind:load to:0x020e2b5c add:8 module:overlay(0) from:0x0210341c kind:load to:0x020e4b68 module:overlay(0) from:0x02103420 kind:load to:0x027e0ce0 module:dtcm -from:0x02103424 kind:load to:0x020e4c00 module:overlay(0) +from:0x02103424 kind:load to:0x020e4c00 add:8 module:overlay(0) from:0x02103428 kind:load to:0x027e0618 module:dtcm from:0x0210342c kind:load to:0x02136cc0 module:overlay(12) from:0x02103430 kind:load to:0x020e4fb4 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index a93dda37a..bd4aef272 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -157,3 +157,7 @@ src/00_Core/Game/GameModePlay.cpp: src/00_Core/Render/ModelRender.cpp: .text start:0x020a950c end:0x020a9980 .data start:0x020e57b8 end:0x020e5800 + +src/00_Core/Render/MapModelRender.cpp: + .text start:0x0209d8e4 end:0x0209d980 + .data start:0x020e4b50 end:0x020e4b98 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index 82e14c8d1..09f378a08 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -3559,7 +3559,7 @@ from:0x0209d8c0 kind:arm_call to:0x020a416c module:overlay(0) from:0x0209d8dc kind:arm_call to:0x020a4178 module:overlay(0) from:0x0209d8ec kind:arm_call_thumb to:0x020a950c module:overlay(0) from:0x0209d910 kind:arm_call to:0x02018cb8 module:main -from:0x0209d91c kind:load to:0x020e4b58 module:overlay(0) +from:0x0209d91c kind:load to:0x020e4b50 add:8 module:overlay(0) from:0x0209d920 kind:load to:0x0209d980 module:overlay(0) from:0x0209d92c kind:arm_call_thumb to:0x020a958c module:overlay(0) from:0x0209d940 kind:arm_call_thumb to:0x020a958c module:overlay(0) @@ -3633,7 +3633,7 @@ from:0x0209e870 kind:arm_call to:0x0202e9d8 module:main from:0x0209e87c kind:arm_call to:0x0209e888 module:overlay(0) from:0x0209e884 kind:load to:0x027e0fe0 module:dtcm from:0x0209e890 kind:arm_call to:0x020c14f4 module:overlay(0) -from:0x0209e8f8 kind:load to:0x020e4bf0 module:overlay(0) +from:0x0209e8f8 kind:load to:0x020e4be8 add:8 module:overlay(0) from:0x0209e904 kind:arm_call to:0x020c16d0 module:overlay(0) from:0x0209e918 kind:arm_call to:0x020c16d0 module:overlay(0) from:0x0209e920 kind:arm_call to:0x0202ea08 module:main diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 2b0059c34..9dd9c2ae4 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1475,10 +1475,10 @@ func_ov000_0209d8d8 kind:function(arm,size=0x1c) addr:0x0209d878 func_ov000_0209d8f4 kind:function(arm,size=0x18) addr:0x0209d894 func_ov000_0209d90c kind:function(arm,size=0x1c) addr:0x0209d8ac func_ov000_0209d928 kind:function(arm,size=0x1c) addr:0x0209d8c8 -func_ov000_0209d944 kind:function(arm,size=0x40) addr:0x0209d8e4 -func_ov000_0209d984 kind:function(arm,size=0x14) addr:0x0209d924 -func_ov000_0209d998 kind:function(arm,size=0x1c) addr:0x0209d938 -func_ov000_0209d9b4 kind:function(arm,size=0x2c) addr:0x0209d954 +_ZN14MapModelRenderC2EP9ItemModel kind:function(arm,size=0x40) addr:0x0209d8e4 +_ZN14MapModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0209d924 +_ZN14MapModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0209d938 +_ZN14MapModelRender15HideModelCoversEP23ModelRenderCommandsData kind:function(arm,size=0x2c) addr:0x0209d954 func_ov000_0209d9e0 kind:function(arm,size=0x18) addr:0x0209d980 func_ov000_0209d9f8 kind:function(arm,size=0x18) addr:0x0209d998 func_ov000_0209da10 kind:function(arm,size=0x34) addr:0x0209d9b0 @@ -4693,9 +4693,9 @@ data_ov000_020e4ad0 kind:data(any) addr:0x020e4a70 data_ov000_020e4b00 kind:data(any) addr:0x020e4aa0 data_ov000_020e4b18 kind:data(any) addr:0x020e4ab8 data_ov000_020e4b68 kind:data(any) addr:0x020e4b08 -data_ov000_020e4bb8 kind:data(any) addr:0x020e4b58 -data_ov000_020e4c00 kind:data(any) addr:0x020e4ba0 -data_ov000_020e4c50 kind:data(any) addr:0x020e4bf0 +_ZTV14MapModelRender kind:data(any) addr:0x020e4b50 +data_ov000_020e4c00 kind:data(any) addr:0x020e4b98 +data_ov000_020e4c50 kind:data(any) addr:0x020e4be8 data_ov000_020e4d0c kind:data(any) addr:0x020e4cac data_ov000_020e4d30 kind:data(any) addr:0x020e4cd0 data_ov000_020e4d4c kind:data(any) addr:0x020e4cec diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt index 07a60ef96..5291fa660 100644 --- a/config/usa/arm9/overlays/ov004/relocs.txt +++ b/config/usa/arm9/overlays/ov004/relocs.txt @@ -503,7 +503,7 @@ from:0x02103358 kind:thumb_call_arm to:0x0202e9d8 module:main from:0x02103398 kind:load to:0x020e2afc add:8 module:overlay(0) from:0x0210339c kind:load to:0x020e4b08 module:overlay(0) from:0x021033a0 kind:load to:0x027e0ce0 module:dtcm -from:0x021033a4 kind:load to:0x020e4ba0 module:overlay(0) +from:0x021033a4 kind:load to:0x020e4b98 add:8 module:overlay(0) from:0x021033a8 kind:load to:0x027e0618 module:dtcm from:0x021033ac kind:load to:0x02136c40 module:overlay(12) from:0x021033b0 kind:load to:0x020e4f54 module:overlay(0) diff --git a/include/Map/MapBase.hpp b/include/Map/MapBase.hpp index 831775a25..0b063e3d9 100644 --- a/include/Map/MapBase.hpp +++ b/include/Map/MapBase.hpp @@ -13,6 +13,7 @@ #include "Map/Entrance.hpp" #include "Map/Exit.hpp" #include "Map/TriggerBase.hpp" +#include "Render/MapModelRender.hpp" #include "System/SysNew.hpp" #define MAX_ENTRANCES 0x40 @@ -21,21 +22,6 @@ #define MAX_VIEWPOINTS 8 #define MAX_MAP_UNK_130 0x20 -struct MapBase_Unk_13c { - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ unk32 mUnk_08; - /* 0c */ -}; - -struct MapBase_Unk_140 { - /* 00 */ unk8 mUnk_00[0x5c]; - /* 5c */ unk8 mUnk_5c; - /* 5d */ unk8 mUnk_5d[3]; - /* 60 */ unk32 *mUnk_60; - /* 64 */ -}; - struct MapBase_Unk_144 { /* 00 */ unk8 mUnk_00[0xc]; /* 0c */ unk32 mUnk_0c; @@ -142,8 +128,8 @@ class MapBase : public SysObject { /* 118 */ std::vector mExits; /* 124 */ std::vector mViewpoints; /* 130 */ std::vector mUnk_130; - /* 13c */ MapBase_Unk_13c *mUnk_13c; - /* 140 */ MapBase_Unk_140 *mUnk_140; + /* 13c */ ItemModel *modelFile; + /* 140 */ MapModelRender *modelRender; /* 144 */ MapBase_Unk_144 *mUnk_144; /* 148 */ s32 mUnk_148; /* 14c */ unk32 mUnk_14c; @@ -171,7 +157,7 @@ class MapBase : public SysObject { /* 28 */ virtual void vfunc_28(s32 param_2); /* 2c */ virtual void vfunc_2c(); /* 30 */ virtual void vfunc_30(s32 param_2); - /* 34 */ virtual bool vfunc_34(char *param_2); + /* 34 */ virtual bool LoadModelFromFile(char *filename); /* 38 */ virtual void vfunc_38(); /* 3c */ virtual void vfunc_3c(); /* 40 */ virtual void vfunc_40(); diff --git a/include/Render/MapModelRender.hpp b/include/Render/MapModelRender.hpp new file mode 100644 index 000000000..194620eda --- /dev/null +++ b/include/Render/MapModelRender.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include "ModelRender.hpp" + +class MapModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ u8 modelCoverTransparency; + /* 5d */ unk8 mUnk_5d[3]; + /* 60 */ unk32 *mUnk_60; + + MapModelRender(ItemModel *itemModel); + void HideModelCovers(ModelRenderCommandsData *renderData); +}; \ No newline at end of file diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index d0fca92ab..0e3028a0e 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -40,10 +40,39 @@ struct ModelRender_UnkStruct_4 { /* 54 */ }; +struct ModelRender_MaterialData { + /* 00 */ u32 flags; + /* 04 */ u32 dif_amb; + /* 08 */ u32 spe_emi; + /* 0c */ u32 polygon_attr; + /* 10 */ u32 teximage_params; + /* 14 */ u32 pltt_base; + /* 18 */ u8 mUnk_18[0x14]; + /* 2c */ u16 width; + /* 2e */ u16 height; + /* 30 */ u8 mUnk_30[0x8]; + /* 38 */ +}; + +// Struct containing data used to render an NSBMD model struct ModelRenderCommandsData { - /* 00 */ u8 command; + /* 00 */ u8 *currentCommand; /* 04 */ ModelRender_UnkStruct_4 *unkStruct4; - /* 08 */ + /* 08 */ u32 flags; + /* 0c */ unk8 mUnk_0c[0xa4]; + /* b0 */ ModelRender_MaterialData *unkMaterialDataPTR; + /* b4 */ unk8 mUnk_b4[0x20]; + /* d4 */ void *boneList; + /* d8 */ void *materialList; + /* dc */ void *meshList; + /* e0 */ u32 modelUpScale; + /* e4 */ u32 modelDownScale; + /* e8 */ void *scalingHandler; + /* ec */ void *transformationsHandler; + /* f0 */ void *materialHandler; + /* f4 */ ModelRender_MaterialData materialData; + /* 12c */ unk8 mUnk_12c[0x5c]; + /* 188 */ }; class ItemModel; diff --git a/include/Unknown/UnkStruct_ov000_020c0c08.hpp b/include/Unknown/UnkStruct_ov000_020c0c08.hpp index 2e16bed32..e7732b88e 100644 --- a/include/Unknown/UnkStruct_ov000_020c0c08.hpp +++ b/include/Unknown/UnkStruct_ov000_020c0c08.hpp @@ -19,7 +19,12 @@ struct UnkStruct_ov000_020c0c08_04 { /* 20 */ }; -class ItemModel; +class ItemModel { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; +}; class UnkStruct_ov000_020c0c08 : public SysObject { public: diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index e0cdf2642..b3153b6f7 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -181,11 +181,11 @@ ARM void MapBase::func_ov00_0207dea0(bool param_2) { } ARM void MapBase::vfunc_b0(unk32 param_2, unk32 param_3) { - if (this->mUnk_13c == NULL) { + if (this->modelFile == NULL) { return; } - func_020196fc((ItemModel *) this->mUnk_13c, param_2); - func_020196bc((ItemModel *) this->mUnk_13c, param_3); + func_020196fc((ItemModel *) this->modelFile, param_2); + func_020196bc((ItemModel *) this->modelFile, param_3); return; } @@ -194,10 +194,10 @@ ARM bool MapBase::func_ov00_0207e08c(s32 *param_2, s32 param_3) { int iVar1; int iVar2; - if (this->mUnk_13c == NULL) { + if (this->modelFile == NULL) { return false; } - iVar1 = this->mUnk_13c->mUnk_00 + this->mUnk_13c->mUnk_08; + iVar1 = this->modelFile->mUnk_00 + this->modelFile->mUnk_08; if (iVar1 == 0) { return false; } @@ -224,7 +224,7 @@ ARM s32 MapBase::func_ov00_0207e0f0(s32 param_2) { int *iVar8; int iVar7; u32 uVar8; - MapBase_Unk_13c *pMVar9; + ItemModel *pMVar9; int *iVar9; int iVar13; int *iVar10; @@ -232,7 +232,7 @@ ARM s32 MapBase::func_ov00_0207e0f0(s32 param_2) { int iVar15; u32 uStack_30; - pMVar9 = this->mUnk_13c; + pMVar9 = this->modelFile; if (pMVar9 == NULL) { return -1; } @@ -303,7 +303,7 @@ ARM s32 MapBase::func_ov00_0207e28c(s32 param_2) { int iVar13; u32 uVar14; int *iVar10; - MapBase_Unk_13c *pMVar15; + ItemModel *pMVar15; int iVar16; int iVar17; u32 uVar18; @@ -312,7 +312,7 @@ ARM s32 MapBase::func_ov00_0207e28c(s32 param_2) { u32 uStack_30; int *iVar5; - pMVar15 = this->mUnk_13c; + pMVar15 = this->modelFile; if (pMVar15 == NULL) { return -1; } @@ -1346,12 +1346,12 @@ ARM void MapBase::func_ov00_0207f924(unk32 param_2) { } ARM unk32 *MapBase::func_ov00_0207f934() { - return !this->mUnk_140 ? NULL : this->mUnk_140->mUnk_60; + return !this->modelRender ? NULL : this->modelRender->mUnk_60; } ARM void MapBase::func_ov00_0207f948(unk32 *param_2) { - if (this->mUnk_140 != NULL) { - this->mUnk_140->mUnk_60 = param_2; + if (this->modelRender != NULL) { + this->modelRender->mUnk_60 = param_2; } } @@ -2235,7 +2235,7 @@ ARM void MapBase::func_ov00_02080de8(unk32 param_2) { uVar2 = 0x1f; } LAB_arm9_ov000__02080ec8: - this->mUnk_140->mUnk_5c = uVar2; + this->modelRender->mUnk_5c = uVar2; } ARM void MapBase::func_ov00_02080edc() { diff --git a/src/00_Core/Render/MapModelRender.cpp b/src/00_Core/Render/MapModelRender.cpp new file mode 100644 index 000000000..6eefc866d --- /dev/null +++ b/src/00_Core/Render/MapModelRender.cpp @@ -0,0 +1,21 @@ +#include "Render/MapModelRender.hpp" + +extern "C" void func_02018cb8(ModelRender_UnkStruct_4 *param_1, void *param_2); +extern "C" void func_ov000_0209d9e0(ModelRenderCommandsData *param_1); + +ARM MapModelRender::MapModelRender(ItemModel *itemModel) : + ModelRender(itemModel) { + this->modelCoverTransparency = 0; + this->mUnk_60 = NULL; + this->mUnk_04.mUnk_2c = this; + func_02018cb8(&this->mUnk_04, func_ov000_0209d9e0); +} + +void MapModelRender::HideModelCovers(ModelRenderCommandsData *renderData) { + u32 polygonId = (renderData->unkMaterialDataPTR->polygon_attr & 0x3f000000) >> 0x18; + if (polygonId == 0x1b) { // Polygon ID for model covers (e.g. cv_section) + u32 transparency = this->modelCoverTransparency << 0x10; + renderData->unkMaterialDataPTR->polygon_attr = + renderData->unkMaterialDataPTR->polygon_attr & 0xffe0ffff | transparency; + } +} \ No newline at end of file diff --git a/src/04_Load/Map/MapBase.cpp b/src/04_Load/Map/MapBase.cpp index 7e93b2f07..fe044dc7e 100644 --- a/src/04_Load/Map/MapBase.cpp +++ b/src/04_Load/Map/MapBase.cpp @@ -9,7 +9,7 @@ void MapBase::vfunc_0c(Course *param_2) {} void MapBase::vfunc_10() {} void MapBase::vfunc_2c() {} void MapBase::vfunc_30(s32 param_2) {} -bool MapBase::vfunc_34(char *param_2) {} +bool MapBase::LoadModelFromFile(char *filename) {} void MapBase::vfunc_38() {} void MapBase::vfunc_3c() {} void MapBase::vfunc_40() {} From 41c40934016975bd31a0998ccff5cede0bb93654 Mon Sep 17 00:00:00 2001 From: enzo Date: Wed, 14 Jan 2026 00:44:58 -0300 Subject: [PATCH 02/14] add new functions --- config/eur/arm9/overlays/ov000/delinks.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 4 ++-- config/usa/arm9/overlays/ov000/delinks.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 4 ++-- include/Render/ModelRender.hpp | 6 +++++- src/00_Core/Render/MapModelRender.cpp | 15 ++++++++++++--- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index fe6ea3831..37b6f4788 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -159,5 +159,5 @@ src/00_Core/Render/ModelRender.cpp: .data start:0x020e5818 end:0x020e5860 src/00_Core/Render/MapModelRender.cpp: - .text start:0x0209d944 end:0x0209d9e0 + .text start:0x0209d944 end:0x0209da10 .data start:0x020e4bb0 end:0x020e4bf8 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 5ae08030b..ac6e5f6ad 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1479,8 +1479,8 @@ _ZN14MapModelRenderC2EP9ItemModel kind:function(arm,size=0x40) addr:0x0209d944 _ZN14MapModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0209d984 _ZN14MapModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0209d998 _ZN14MapModelRender15HideModelCoversEP23ModelRenderCommandsData kind:function(arm,size=0x2c) addr:0x0209d9b4 -func_ov000_0209d9e0 kind:function(arm,size=0x18) addr:0x0209d9e0 -func_ov000_0209d9f8 kind:function(arm,size=0x18) addr:0x0209d9f8 +_Z19func_ov000_0209d9e0P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d9e0 +_Z19func_ov000_0209d9f8P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d9f8 func_ov000_0209da10 kind:function(arm,size=0x34) addr:0x0209da10 func_ov000_0209da44 kind:function(arm,size=0x24) addr:0x0209da44 func_ov000_0209da68 kind:function(arm,size=0x28) addr:0x0209da68 diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index bd4aef272..de343124a 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -159,5 +159,5 @@ src/00_Core/Render/ModelRender.cpp: .data start:0x020e57b8 end:0x020e5800 src/00_Core/Render/MapModelRender.cpp: - .text start:0x0209d8e4 end:0x0209d980 + .text start:0x0209d8e4 end:0x0209d9b0 .data start:0x020e4b50 end:0x020e4b98 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 9dd9c2ae4..4ce029dd3 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1479,8 +1479,8 @@ _ZN14MapModelRenderC2EP9ItemModel kind:function(arm,size=0x40) addr:0x0209d8e4 _ZN14MapModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0209d924 _ZN14MapModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0209d938 _ZN14MapModelRender15HideModelCoversEP23ModelRenderCommandsData kind:function(arm,size=0x2c) addr:0x0209d954 -func_ov000_0209d9e0 kind:function(arm,size=0x18) addr:0x0209d980 -func_ov000_0209d9f8 kind:function(arm,size=0x18) addr:0x0209d998 +_Z19func_ov000_0209d9e0P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d980 +_Z19func_ov000_0209d9f8P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d998 func_ov000_0209da10 kind:function(arm,size=0x34) addr:0x0209d9b0 func_ov000_0209da44 kind:function(arm,size=0x24) addr:0x0209d9e4 func_ov000_0209da68 kind:function(arm,size=0x28) addr:0x0209da08 diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index 0e3028a0e..f96fc313c 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -59,7 +59,11 @@ struct ModelRenderCommandsData { /* 00 */ u8 *currentCommand; /* 04 */ ModelRender_UnkStruct_4 *unkStruct4; /* 08 */ u32 flags; - /* 0c */ unk8 mUnk_0c[0xa4]; + /* 0c */ unk8 mUnk_0c[0x10]; + /* 1c */ void *mUnkFunc_1c; + /* 20 */ unk8 mUnk_20[0x70]; + /* 90 */ unk8 mUnk_90; + /* 91 */ unk8 mUnk_91[0x1f]; /* b0 */ ModelRender_MaterialData *unkMaterialDataPTR; /* b4 */ unk8 mUnk_b4[0x20]; /* d4 */ void *boneList; diff --git a/src/00_Core/Render/MapModelRender.cpp b/src/00_Core/Render/MapModelRender.cpp index 6eefc866d..26b9c03c4 100644 --- a/src/00_Core/Render/MapModelRender.cpp +++ b/src/00_Core/Render/MapModelRender.cpp @@ -1,14 +1,23 @@ #include "Render/MapModelRender.hpp" -extern "C" void func_02018cb8(ModelRender_UnkStruct_4 *param_1, void *param_2); -extern "C" void func_ov000_0209d9e0(ModelRenderCommandsData *param_1); +extern "C" void func_02018cb8(ModelRender_UnkStruct_4 *param_1, void (*param_2)(ModelRenderCommandsData *)); + +void func_ov000_0209d9f8(ModelRenderCommandsData *renderData) { + ((MapModelRender *) renderData->unkStruct4->mUnk_2c)->HideModelCovers(renderData); + return; +} + +void func_ov000_0209d9e0(ModelRenderCommandsData *renderData) { + renderData->mUnkFunc_1c = &func_ov000_0209d9f8; + renderData->mUnk_90 = 2; +} ARM MapModelRender::MapModelRender(ItemModel *itemModel) : ModelRender(itemModel) { this->modelCoverTransparency = 0; this->mUnk_60 = NULL; this->mUnk_04.mUnk_2c = this; - func_02018cb8(&this->mUnk_04, func_ov000_0209d9e0); + func_02018cb8(&this->mUnk_04, &func_ov000_0209d9e0); } void MapModelRender::HideModelCovers(ModelRenderCommandsData *renderData) { From ccb26d7f02f77c6cff2945b22f87ba90bc1fe260 Mon Sep 17 00:00:00 2001 From: enzo Date: Mon, 19 Jan 2026 16:46:06 -0300 Subject: [PATCH 03/14] aadd skyboxmodelrender.cpp --- config/eur/arm9/overlays/ov000/delinks.txt | 7 +++++- config/eur/arm9/overlays/ov000/relocs.txt | 4 ++-- config/eur/arm9/overlays/ov000/symbols.txt | 21 ++++++++--------- config/usa/arm9/overlays/ov000/delinks.txt | 7 +++++- config/usa/arm9/overlays/ov000/relocs.txt | 4 ++-- config/usa/arm9/overlays/ov000/symbols.txt | 21 ++++++++--------- include/Render/SkyboxModelRender.hpp | 26 ++++++++++++++++++++++ src/00_Core/Map/MapBase.cpp | 2 +- src/00_Core/Render/MapModelRender.cpp | 4 ++-- src/00_Core/Render/SkyboxModelRender.cpp | 22 ++++++++++++++++++ 10 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 include/Render/SkyboxModelRender.hpp create mode 100644 src/00_Core/Render/SkyboxModelRender.cpp diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 37b6f4788..0d84c4c34 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -160,4 +160,9 @@ src/00_Core/Render/ModelRender.cpp: src/00_Core/Render/MapModelRender.cpp: .text start:0x0209d944 end:0x0209da10 - .data start:0x020e4bb0 end:0x020e4bf8 \ No newline at end of file + .data start:0x020e4bb0 end:0x020e4bf8 + +src/00_Core/Render/SkyboxModelRender.cpp: + .text start:0x020a4b4c end:0x020a4c38 + .data start:0x020e518c end:0x020e51e8 + .init start:0x020e120c end:0x020e1250 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 54f5dadf6..3d26a41a5 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -4206,10 +4206,10 @@ from:0x020a4a94 kind:load to:0x020a4a58 module:overlay(0) from:0x020a4ac8 kind:arm_call to:0x0201e388 module:main from:0x020a4b20 kind:load to:0x020dc280 module:overlay(0) from:0x020a4b54 kind:arm_call_thumb to:0x020a956c module:overlay(0) -from:0x020a4b88 kind:load to:0x020e51a0 module:overlay(0) +from:0x020a4b88 kind:load to:0x020e5198 add:8 module:overlay(0) from:0x020a4b8c kind:load to:0x020e518c module:overlay(0) from:0x020a4b98 kind:arm_call_thumb to:0x020a956c module:overlay(0) -from:0x020a4bcc kind:load to:0x020e51a0 module:overlay(0) +from:0x020a4bcc kind:load to:0x020e5198 add:8 module:overlay(0) from:0x020a4bd0 kind:load to:0x020e518c module:overlay(0) from:0x020a4bdc kind:arm_call_thumb to:0x020a95ec module:overlay(0) from:0x020a4bf0 kind:arm_call_thumb to:0x020a95ec module:overlay(0) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index ac6e5f6ad..2f91f120f 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1480,7 +1480,7 @@ _ZN14MapModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0209d984 _ZN14MapModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0209d998 _ZN14MapModelRender15HideModelCoversEP23ModelRenderCommandsData kind:function(arm,size=0x2c) addr:0x0209d9b4 _Z19func_ov000_0209d9e0P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d9e0 -_Z19func_ov000_0209d9f8P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d9f8 +_Z17HideMapModelCoverP23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d9f8 func_ov000_0209da10 kind:function(arm,size=0x34) addr:0x0209da10 func_ov000_0209da44 kind:function(arm,size=0x24) addr:0x0209da44 func_ov000_0209da68 kind:function(arm,size=0x28) addr:0x0209da68 @@ -1745,13 +1745,13 @@ func_ov000_020a4a58 kind:function(arm,size=0x18) addr:0x020a4a58 func_ov000_020a4a70 kind:function(arm,size=0x28) addr:0x020a4a70 func_ov000_020a4a98 kind:function(arm,size=0x8c) addr:0x020a4a98 func_ov000_020a4b24 kind:function(arm,size=0x28) addr:0x020a4b24 -func_ov000_020a4b4c kind:function(arm,size=0x44) addr:0x020a4b4c -func_ov000_020a4b90 kind:function(arm,size=0x44) addr:0x020a4b90 -func_ov000_020a4bd4 kind:function(arm,size=0x14) addr:0x020a4bd4 -func_ov000_020a4be8 kind:function(arm,size=0x1c) addr:0x020a4be8 -func_ov000_020a4c04 kind:function(arm,size=0x14) addr:0x020a4c04 -func_ov000_020a4c18 kind:function(arm,size=0x18) addr:0x020a4c18 -func_ov000_020a4c30 kind:function(arm,size=0x8) addr:0x020a4c30 +_ZN17SkyboxModelRenderC2EP9ItemModel kind:function(arm,size=0x44) addr:0x020a4b4c +_ZN17SkyboxModelRenderC1EP9ItemModel kind:function(arm,size=0x44) addr:0x020a4b90 +_ZN17SkyboxModelRenderD1Ev kind:function(arm,size=0x14) addr:0x020a4bd4 +_ZN17SkyboxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x020a4be8 +_ZN17SkyboxModelRenderD2Ev kind:function(arm,size=0x14) addr:0x020a4c04 +_ZN17SkyboxModelRender8vfunc_40Ev kind:function(arm,size=0x18) addr:0x020a4c18 +_ZN17SkyboxModelRender8vfunc_44Ev kind:function(arm,size=0x8) addr:0x020a4c30 func_ov000_020a4c38 kind:function(arm,size=0x44) addr:0x020a4c38 func_ov000_020a4c7c kind:function(arm,size=0x14) addr:0x020a4c7c func_ov000_020a4c90 kind:function(arm,size=0x1c) addr:0x020a4c90 @@ -4726,8 +4726,9 @@ data_ov000_020e510c kind:data(any) addr:0x020e510c data_ov000_020e5120 kind:data(any) addr:0x020e5120 data_ov000_020e5134 kind:data(any) addr:0x020e5134 data_ov000_020e5144 kind:data(any) addr:0x020e5144 -data_ov000_020e518c kind:data(any) addr:0x020e518c -data_ov000_020e51a0 kind:data(any) addr:0x020e51a0 +_ZN17SkyboxModelRender19data_ov000_020e518cE kind:data(any) addr:0x020e518c +_ZTV17SkyboxModelRender kind:data(any) addr:0x020e5198 +data_ov000_020e51e8 kind:data(any) addr:0x020e51e8 data_ov000_020e51f0 kind:data(any) addr:0x020e51f0 data_ov000_020e5230 kind:data(any) addr:0x020e5230 data_ov000_020e5234 kind:data(any) addr:0x020e5234 diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index de343124a..3383ad5a3 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -160,4 +160,9 @@ src/00_Core/Render/ModelRender.cpp: src/00_Core/Render/MapModelRender.cpp: .text start:0x0209d8e4 end:0x0209d9b0 - .data start:0x020e4b50 end:0x020e4b98 \ No newline at end of file + .data start:0x020e4b50 end:0x020e4b98 + +src/00_Core/Render/SkyboxModelRender.cpp: + .text start:0x020a4aec end:0x020a4bd8 + .data start:0x020e512c end:0x020e5188 + .init start:0x020e11ac end:0x020e11f0 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index 09f378a08..8d3c1fdf1 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -4206,10 +4206,10 @@ from:0x020a4a34 kind:load to:0x020a49f8 module:overlay(0) from:0x020a4a68 kind:arm_call to:0x0201e388 module:main from:0x020a4ac0 kind:load to:0x020dc220 module:overlay(0) from:0x020a4af4 kind:arm_call_thumb to:0x020a950c module:overlay(0) -from:0x020a4b28 kind:load to:0x020e5140 module:overlay(0) +from:0x020a4b28 kind:load to:0x020e5138 add:8 module:overlay(0) from:0x020a4b2c kind:load to:0x020e512c module:overlay(0) from:0x020a4b38 kind:arm_call_thumb to:0x020a950c module:overlay(0) -from:0x020a4b6c kind:load to:0x020e5140 module:overlay(0) +from:0x020a4b6c kind:load to:0x020e5138 add:8 module:overlay(0) from:0x020a4b70 kind:load to:0x020e512c module:overlay(0) from:0x020a4b7c kind:arm_call_thumb to:0x020a958c module:overlay(0) from:0x020a4b90 kind:arm_call_thumb to:0x020a958c module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 4ce029dd3..6b4395aeb 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1480,7 +1480,7 @@ _ZN14MapModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0209d924 _ZN14MapModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0209d938 _ZN14MapModelRender15HideModelCoversEP23ModelRenderCommandsData kind:function(arm,size=0x2c) addr:0x0209d954 _Z19func_ov000_0209d9e0P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d980 -_Z19func_ov000_0209d9f8P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d998 +_Z17HideMapModelCoverP23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0209d998 func_ov000_0209da10 kind:function(arm,size=0x34) addr:0x0209d9b0 func_ov000_0209da44 kind:function(arm,size=0x24) addr:0x0209d9e4 func_ov000_0209da68 kind:function(arm,size=0x28) addr:0x0209da08 @@ -1745,13 +1745,13 @@ func_ov000_020a4a58 kind:function(arm,size=0x18) addr:0x020a49f8 func_ov000_020a4a70 kind:function(arm,size=0x28) addr:0x020a4a10 func_ov000_020a4a98 kind:function(arm,size=0x8c) addr:0x020a4a38 func_ov000_020a4b24 kind:function(arm,size=0x28) addr:0x020a4ac4 -func_ov000_020a4b4c kind:function(arm,size=0x44) addr:0x020a4aec -func_ov000_020a4b90 kind:function(arm,size=0x44) addr:0x020a4b30 -func_ov000_020a4bd4 kind:function(arm,size=0x14) addr:0x020a4b74 -func_ov000_020a4be8 kind:function(arm,size=0x1c) addr:0x020a4b88 -func_ov000_020a4c04 kind:function(arm,size=0x14) addr:0x020a4ba4 -func_ov000_020a4c18 kind:function(arm,size=0x18) addr:0x020a4bb8 -func_ov000_020a4c30 kind:function(arm,size=0x8) addr:0x020a4bd0 +_ZN17SkyboxModelRenderC2EP9ItemModel kind:function(arm,size=0x44) addr:0x020a4aec +_ZN17SkyboxModelRenderC1EP9ItemModel kind:function(arm,size=0x44) addr:0x020a4b30 +_ZN17SkyboxModelRenderD1Ev kind:function(arm,size=0x14) addr:0x020a4b74 +_ZN17SkyboxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x020a4b88 +_ZN17SkyboxModelRenderD2Ev kind:function(arm,size=0x14) addr:0x020a4ba4 +_ZN17SkyboxModelRender8vfunc_40Ev kind:function(arm,size=0x18) addr:0x020a4bb8 +_ZN17SkyboxModelRender8vfunc_44Ev kind:function(arm,size=0x8) addr:0x020a4bd0 func_ov000_020a4c38 kind:function(arm,size=0x44) addr:0x020a4bd8 func_ov000_020a4c7c kind:function(arm,size=0x14) addr:0x020a4c1c func_ov000_020a4c90 kind:function(arm,size=0x1c) addr:0x020a4c30 @@ -4726,8 +4726,9 @@ data_ov000_020e510c kind:data(any) addr:0x020e50ac data_ov000_020e5120 kind:data(any) addr:0x020e50c0 data_ov000_020e5134 kind:data(any) addr:0x020e50d4 data_ov000_020e5144 kind:data(any) addr:0x020e50e4 -data_ov000_020e518c kind:data(any) addr:0x020e512c -data_ov000_020e51a0 kind:data(any) addr:0x020e5140 +_ZN17SkyboxModelRender19data_ov000_020e518cE kind:data(any) addr:0x020e512c +_ZTV17SkyboxModelRender kind:data(any) addr:0x020e5138 +data_ov000_020e51e8 kind:data(any) addr:0x020e5188 data_ov000_020e51f0 kind:data(any) addr:0x020e5190 data_ov000_020e5230 kind:data(any) addr:0x020e51d0 data_ov000_020e5234 kind:data(any) addr:0x020e51d4 diff --git a/include/Render/SkyboxModelRender.hpp b/include/Render/SkyboxModelRender.hpp new file mode 100644 index 000000000..062248db1 --- /dev/null +++ b/include/Render/SkyboxModelRender.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "ModelRender.hpp" + +struct UnkStruct_SkyboxModelRender_020e518c { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0c */ +}; + +class SkyboxModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ u8 mUnk_5c; + /* 5d */ unk8 mUnk_5d; + /* 5e */ unk16 mUnk_5e; + /* 60 */ UnkStruct_SkyboxModelRender_020e518c mUnk_60; + /* 6c */ + + /* 00 */ virtual ~SkyboxModelRender(); + /* 40 */ virtual void vfunc_40(); + /* 44 */ virtual s32 vfunc_44(); + + SkyboxModelRender(ItemModel *itemModel); +}; \ No newline at end of file diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index b3153b6f7..2349647ad 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -2235,7 +2235,7 @@ ARM void MapBase::func_ov00_02080de8(unk32 param_2) { uVar2 = 0x1f; } LAB_arm9_ov000__02080ec8: - this->modelRender->mUnk_5c = uVar2; + this->modelRender->modelCoverTransparency = uVar2; } ARM void MapBase::func_ov00_02080edc() { diff --git a/src/00_Core/Render/MapModelRender.cpp b/src/00_Core/Render/MapModelRender.cpp index 26b9c03c4..4a43599f9 100644 --- a/src/00_Core/Render/MapModelRender.cpp +++ b/src/00_Core/Render/MapModelRender.cpp @@ -2,13 +2,13 @@ extern "C" void func_02018cb8(ModelRender_UnkStruct_4 *param_1, void (*param_2)(ModelRenderCommandsData *)); -void func_ov000_0209d9f8(ModelRenderCommandsData *renderData) { +void HideMapModelCover(ModelRenderCommandsData *renderData) { ((MapModelRender *) renderData->unkStruct4->mUnk_2c)->HideModelCovers(renderData); return; } void func_ov000_0209d9e0(ModelRenderCommandsData *renderData) { - renderData->mUnkFunc_1c = &func_ov000_0209d9f8; + renderData->mUnkFunc_1c = &HideMapModelCover; renderData->mUnk_90 = 2; } diff --git a/src/00_Core/Render/SkyboxModelRender.cpp b/src/00_Core/Render/SkyboxModelRender.cpp new file mode 100644 index 000000000..efa3f1af4 --- /dev/null +++ b/src/00_Core/Render/SkyboxModelRender.cpp @@ -0,0 +1,22 @@ +#include "Render/SkyboxModelRender.hpp" + +static UnkStruct_SkyboxModelRender_020e518c data_ov000_020e518c = {0, 0x180000, + 0x280000}; // this is initialized by a static initializer + +ARM SkyboxModelRender::SkyboxModelRender(ItemModel *itemModel) : + ModelRender(itemModel), + mUnk_5c(1), + mUnk_5e(0), + mUnk_60(data_ov000_020e518c) {} + +SkyboxModelRender::~SkyboxModelRender() {} + +void SkyboxModelRender::vfunc_40() { + if (this->mUnk_5c != 0) { + this->mUnk_5e += 7; + } +} + +s32 SkyboxModelRender::vfunc_44() { + return 1; +} \ No newline at end of file From c59d6c7839958c52b1fa50c86b18d6cf4ebf1897 Mon Sep 17 00:00:00 2001 From: enzo Date: Mon, 19 Jan 2026 19:56:05 -0300 Subject: [PATCH 04/14] add NaviModelRender --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov004/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov004/symbols.txt | 2 +- include/Actor/Navi/ActorNaviBase.hpp | 8 ++++---- src/04_Load/Actor/Navi/ActorNavi_04.cpp | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 2f91f120f..7759093a6 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -5028,7 +5028,7 @@ data_ov000_020e67ac kind:data(any) addr:0x020e67ac data_ov000_020e67b8 kind:data(any) addr:0x020e67b8 data_ov000_020e67d8 kind:data(any) addr:0x020e67d8 _ZTV13ActorNaviBase kind:data(any) addr:0x020e67dc -_ZTV18ActorNaviBase_Unk3 kind:data(any) addr:0x020e68d4 +_ZTV15NaviModelRender kind:data(any) addr:0x020e68d4 data_ov000_020e691c kind:data(any) addr:0x020e691c data_ov000_020e6934 kind:data(any) addr:0x020e6934 data_ov000_020e6974 kind:data(any) addr:0x020e6974 diff --git a/config/eur/arm9/overlays/ov004/symbols.txt b/config/eur/arm9/overlays/ov004/symbols.txt index 740920d81..b1a38984a 100644 --- a/config/eur/arm9/overlays/ov004/symbols.txt +++ b/config/eur/arm9/overlays/ov004/symbols.txt @@ -226,7 +226,7 @@ _ZN13ActorNaviBaseD0Ev kind:function(thumb,size=0x48) addr:0x0210794c _ZN13ActorNaviBaseD2Ev kind:function(thumb,size=0x40) addr:0x02107994 _ZN18ActorNaviBase_Unk1C1Ev kind:function(thumb,size=0x6) addr:0x021079d4 _ZN13ActorNaviBase4InitEv kind:function(thumb,size=0xa4) addr:0x021079dc -_ZN18ActorNaviBase_Unk3C1EP9ItemModel kind:function(thumb,size=0x20) addr:0x02107a80 +_ZN15NaviModelRenderC2EP9ItemModel kind:function(thumb,size=0x20) addr:0x02107a80 _ZN9ActorNaviC1Ev kind:function(thumb,size=0xc4) addr:0x02107aa0 _ZN9ActorNavi4InitEv kind:function(thumb,size=0x9c) addr:0x02107b64 func_ov004_02107c00 kind:function(thumb,size=0x2c) addr:0x02107c00 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 6b4395aeb..b0d595655 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -5028,7 +5028,7 @@ data_ov000_020e67ac kind:data(any) addr:0x020e674c data_ov000_020e67b8 kind:data(any) addr:0x020e6758 data_ov000_020e67d8 kind:data(any) addr:0x020e6778 _ZTV13ActorNaviBase kind:data(any) addr:0x020e677c -_ZTV18ActorNaviBase_Unk3 kind:data(any) addr:0x020e6874 +_ZTV15NaviModelRender kind:data(any) addr:0x020e6874 data_ov000_020e691c kind:data(any) addr:0x020e68bc data_ov000_020e6934 kind:data(any) addr:0x020e68d4 data_ov000_020e6974 kind:data(any) addr:0x020e6914 diff --git a/config/usa/arm9/overlays/ov004/symbols.txt b/config/usa/arm9/overlays/ov004/symbols.txt index 18887b0a8..c3d7c65e0 100644 --- a/config/usa/arm9/overlays/ov004/symbols.txt +++ b/config/usa/arm9/overlays/ov004/symbols.txt @@ -226,7 +226,7 @@ _ZN13ActorNaviBaseD0Ev kind:function(thumb,size=0x48) addr:0x021078cc _ZN13ActorNaviBaseD2Ev kind:function(thumb,size=0x40) addr:0x02107914 _ZN18ActorNaviBase_Unk1C1Ev kind:function(thumb,size=0x6) addr:0x02107954 _ZN13ActorNaviBase4InitEv kind:function(thumb,size=0xa4) addr:0x0210795c -_ZN18ActorNaviBase_Unk3C1EP9ItemModel kind:function(thumb,size=0x20) addr:0x02107a00 +_ZN15NaviModelRenderC2EP9ItemModel kind:function(thumb,size=0x20) addr:0x02107a00 _ZN9ActorNaviC1Ev kind:function(thumb,size=0xc4) addr:0x02107a20 _ZN9ActorNavi4InitEv kind:function(thumb,size=0x9c) addr:0x02107ae4 func_ov004_02107c00 kind:function(thumb,size=0x2c) addr:0x02107b80 diff --git a/include/Actor/Navi/ActorNaviBase.hpp b/include/Actor/Navi/ActorNaviBase.hpp index 4434c1ff8..9d7d4cc89 100644 --- a/include/Actor/Navi/ActorNaviBase.hpp +++ b/include/Actor/Navi/ActorNaviBase.hpp @@ -40,13 +40,13 @@ class ActorNaviBase_Unk2 : public UnkStruct_ov000_020c0c08 { } }; -class ActorNaviBase_Unk3 : public ModelRender { +class NaviModelRender : public ModelRender { public: - /* 00 */ virtual ~ActorNaviBase_Unk3() {} + /* 00 */ virtual ~NaviModelRender() override; /* 3c */ virtual void vfunc_3c() override; /* 40 */ - ActorNaviBase_Unk3(ItemModel *param1); + NaviModelRender(ItemModel *param1); }; class ActorNaviBase : public Actor { @@ -54,7 +54,7 @@ class ActorNaviBase : public Actor { /* 000 (base) */ /* 158 */ Vec3p mOffsetPos; /* 164 */ unk32 mUnk_164; - /* 168 */ ActorNaviBase_Unk3 mUnk_168; + /* 168 */ NaviModelRender modelRender; /* 1c4 */ unk8 mUnk_1c4[0xc]; /* 1d0 */ ActorNaviBase_Unk2 mUnk_1d0; /* 214 */ unk16 mUnk_214; diff --git a/src/04_Load/Actor/Navi/ActorNavi_04.cpp b/src/04_Load/Actor/Navi/ActorNavi_04.cpp index d442f9091..43fa801b6 100644 --- a/src/04_Load/Actor/Navi/ActorNavi_04.cpp +++ b/src/04_Load/Actor/Navi/ActorNavi_04.cpp @@ -6,7 +6,7 @@ extern NsFile *data_ov000_020e67ac; THUMB ActorNaviBase::ActorNaviBase() : mUnk_164(0), - mUnk_168(data_ov000_020ee1f8), + modelRender(data_ov000_020ee1f8), mUnk_1d0(GetJntAnimation(FindJntSection(data_ov000_020e67ac), 0), data_ov000_020ee1f8), mUnk_214(0), mUnk_222(-1), @@ -48,7 +48,7 @@ THUMB bool ActorNaviBase::Init() { return true; } -ActorNaviBase_Unk3::ActorNaviBase_Unk3(ItemModel *param1) : +THUMB NaviModelRender::NaviModelRender(ItemModel *param1) : ModelRender(param1) { this->UnkInit_Struct4_Params(6, 3); } From d0aadb4691db7c9e9d1e80d8466b873ef92af69f Mon Sep 17 00:00:00 2001 From: enzo Date: Tue, 20 Jan 2026 14:19:50 -0300 Subject: [PATCH 05/14] full match linkmodelrender_04 --- config/eur/arm9/overlays/ov000/delinks.txt | 1 + config/eur/arm9/overlays/ov000/relocs.txt | 4 +-- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov004/delinks.txt | 5 +++ config/eur/arm9/overlays/ov004/relocs.txt | 2 +- config/eur/arm9/overlays/ov004/symbols.txt | 6 ++-- config/usa/arm9/overlays/ov000/delinks.txt | 1 + config/usa/arm9/overlays/ov000/relocs.txt | 4 +-- config/usa/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov004/delinks.txt | 5 +++ config/usa/arm9/overlays/ov004/relocs.txt | 2 +- config/usa/arm9/overlays/ov004/symbols.txt | 6 ++-- include/Render/LinkModelRender.hpp | 19 +++++++++++ include/Render/MapModelRender.hpp | 2 ++ include/Render/ModelRender.hpp | 2 -- include/Unknown/UnkStruct_ov000_020c0c08.hpp | 12 +++++-- src/00_Core/Map/MapBase.cpp | 6 ++-- src/00_Core/Render/MapModelRender.cpp | 23 +++++++------ src/04_Load/Render/LinkModelRender_04.cpp | 34 ++++++++++++++++++++ 19 files changed, 107 insertions(+), 31 deletions(-) create mode 100644 include/Render/LinkModelRender.hpp create mode 100644 src/04_Load/Render/LinkModelRender_04.cpp diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 0d84c4c34..47153f1aa 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -159,6 +159,7 @@ src/00_Core/Render/ModelRender.cpp: .data start:0x020e5818 end:0x020e5860 src/00_Core/Render/MapModelRender.cpp: + complete .text start:0x0209d944 end:0x0209da10 .data start:0x020e4bb0 end:0x020e4bf8 diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 3d26a41a5..5308ecd38 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -4892,11 +4892,11 @@ from:0x020a9b7c kind:thumb_call to:0x020c0c40 module:overlay(0) from:0x020a9b82 kind:thumb_call_arm to:0x0202ea0c module:main from:0x020a9ba0 kind:arm_call to:0x0202ea18 module:main from:0x020a9ba8 kind:arm_call_thumb to:0x020a95ec module:overlay(0) -from:0x020a9bb4 kind:load to:0x020e5878 module:overlay(0) +from:0x020a9bb4 kind:load to:0x020e5870 add:8 module:overlay(0) from:0x020a9bcc kind:arm_call to:0x0202ea18 module:main from:0x020a9bd4 kind:arm_call_thumb to:0x020a95ec module:overlay(0) from:0x020a9bdc kind:arm_call to:0x0202ea0c module:main -from:0x020a9be8 kind:load to:0x020e5878 module:overlay(0) +from:0x020a9be8 kind:load to:0x020e5870 add:8 module:overlay(0) from:0x020a9c00 kind:arm_call to:0x020a9998 module:overlay(0) from:0x020a9c0c kind:arm_call to:0x02018ca4 module:main from:0x020a9c3c kind:arm_call to:0x020a9624 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 7759093a6..8fe4f99af 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -4801,7 +4801,7 @@ data_ov000_020e5808 kind:data(any) addr:0x020e5808 _ZTV11ModelRender kind:data(any) addr:0x020e5818 data_ov000_020e5868_pad kind:data(any) addr:0x020e5860 data_ov000_020e5868 kind:data(any) addr:0x020e5868 -data_ov000_020e5878 kind:data(any) addr:0x020e5878 +_ZTV15LinkModelRender kind:data(any) addr:0x020e5870 data_ov000_020e58e8 kind:data(any) addr:0x020e58e8 data_ov000_020e58ec kind:data(any) addr:0x020e58ec data_ov000_020e58f0 kind:data(any) addr:0x020e58f0 diff --git a/config/eur/arm9/overlays/ov004/delinks.txt b/config/eur/arm9/overlays/ov004/delinks.txt index 86850f15d..4429b76d7 100644 --- a/config/eur/arm9/overlays/ov004/delinks.txt +++ b/config/eur/arm9/overlays/ov004/delinks.txt @@ -15,3 +15,8 @@ src/04_Load/Actor/Navi/ActorNavi_04.cpp: src/04_Load/Actor/ActorManager_04.cpp: complete .text start:0x021051e0 end:0x021056c8 + +src/04_Load/Render/LinkModelRender_04.cpp: + complete + .text start:0x0210b2d8 end:0x0210b390 + .data start:0x02110bc4 end:0x02110cb4 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index cb2d40745..96af44f19 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -2298,7 +2298,7 @@ from:0x0210b336 kind:thumb_call_arm to:0x0202e9f4 module:main from:0x0210b362 kind:thumb_call_arm to:0x020aa084 module:overlay(0) from:0x0210b36c kind:thumb_call_arm to:0x020aa0f0 module:overlay(0) from:0x0210b376 kind:thumb_call_arm to:0x020aa0f0 module:overlay(0) -from:0x0210b380 kind:load to:0x020e5878 module:overlay(0) +from:0x0210b380 kind:load to:0x020e5870 add:8 module:overlay(0) from:0x0210b384 kind:load to:0x02110c14 module:overlay(4) from:0x0210b388 kind:load to:0x02110bc4 module:overlay(4) from:0x0210b38c kind:load to:0x027e0ce0 module:dtcm diff --git a/config/eur/arm9/overlays/ov004/symbols.txt b/config/eur/arm9/overlays/ov004/symbols.txt index b1a38984a..4434ba42e 100644 --- a/config/eur/arm9/overlays/ov004/symbols.txt +++ b/config/eur/arm9/overlays/ov004/symbols.txt @@ -314,7 +314,7 @@ _ZN10PlayerBaseC2Ev kind:function(thumb,size=0x48) addr:0x0210b210 _ZN10PlayerBaseD1Ev kind:function(thumb,size=0x28) addr:0x0210b258 _ZN10PlayerBaseD0Ev kind:function(thumb,size=0x30) addr:0x0210b280 _ZN10PlayerBaseD2Ev kind:function(thumb,size=0x28) addr:0x0210b2b0 -func_ov004_0210b2d8 kind:function(thumb,size=0xb8) addr:0x0210b2d8 +_ZN15LinkModelRenderC1EP9ItemModel kind:function(thumb,size=0xb8) addr:0x0210b2d8 func_ov004_0210b390 kind:function(thumb,size=0x12) addr:0x0210b390 func_ov004_0210b3a4 kind:function(thumb,size=0x2c) addr:0x0210b3a4 func_ov004_0210b3d0 kind:function(arm,size=0x4) addr:0x0210b3d0 @@ -735,8 +735,8 @@ data_ov004_02110b88 kind:data(any) addr:0x02110b88 data_ov004_02110b98 kind:data(any) addr:0x02110b98 data_ov004_02110ba8 kind:data(any) addr:0x02110ba8 data_ov004_02110bb4 kind:data(any) addr:0x02110bb4 -data_ov004_02110bc4 kind:data(any) addr:0x02110bc4 -data_ov004_02110c14 kind:data(any) addr:0x02110c14 +gLinkMaterials kind:data(any) addr:0x02110bc4 +gLinkBodyParts kind:data(any) addr:0x02110c14 data_ov004_02110cb4 kind:data(any) addr:0x02110cb4 data_ov004_02110cb8 kind:data(any) addr:0x02110cb8 data_ov004_02110ccc kind:data(any) addr:0x02110ccc diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index 3383ad5a3..5f4a3a5c0 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -159,6 +159,7 @@ src/00_Core/Render/ModelRender.cpp: .data start:0x020e57b8 end:0x020e5800 src/00_Core/Render/MapModelRender.cpp: + complete .text start:0x0209d8e4 end:0x0209d9b0 .data start:0x020e4b50 end:0x020e4b98 diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index 8d3c1fdf1..ea05277cb 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -4892,11 +4892,11 @@ from:0x020a9b1c kind:thumb_call to:0x020c0be0 module:overlay(0) from:0x020a9b22 kind:thumb_call_arm to:0x0202ea08 module:main from:0x020a9b40 kind:arm_call to:0x0202ea14 module:main from:0x020a9b48 kind:arm_call_thumb to:0x020a958c module:overlay(0) -from:0x020a9b54 kind:load to:0x020e5818 module:overlay(0) +from:0x020a9b54 kind:load to:0x020e5810 add:8 module:overlay(0) from:0x020a9b6c kind:arm_call to:0x0202ea14 module:main from:0x020a9b74 kind:arm_call_thumb to:0x020a958c module:overlay(0) from:0x020a9b7c kind:arm_call to:0x0202ea08 module:main -from:0x020a9b88 kind:load to:0x020e5818 module:overlay(0) +from:0x020a9b88 kind:load to:0x020e5810 add:8 module:overlay(0) from:0x020a9ba0 kind:arm_call to:0x020a9938 module:overlay(0) from:0x020a9bac kind:arm_call to:0x02018ca4 module:main from:0x020a9bdc kind:arm_call to:0x020a95c4 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index b0d595655..8a1d13545 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -4801,7 +4801,7 @@ data_ov000_020e5808 kind:data(any) addr:0x020e57a8 _ZTV11ModelRender kind:data(any) addr:0x020e57b8 data_ov000_020e5868_pad kind:data(any) addr:0x020e5800 data_ov000_020e5868 kind:data(any) addr:0x020e5808 -data_ov000_020e5878 kind:data(any) addr:0x020e5818 +_ZTV15LinkModelRender kind:data(any) addr:0x020e5810 data_ov000_020e58e8 kind:data(any) addr:0x020e5888 data_ov000_020e58ec kind:data(any) addr:0x020e588c data_ov000_020e58f0 kind:data(any) addr:0x020e5890 diff --git a/config/usa/arm9/overlays/ov004/delinks.txt b/config/usa/arm9/overlays/ov004/delinks.txt index d7cf827e9..cf189a7af 100644 --- a/config/usa/arm9/overlays/ov004/delinks.txt +++ b/config/usa/arm9/overlays/ov004/delinks.txt @@ -15,3 +15,8 @@ src/04_Load/Actor/Navi/ActorNavi_04.cpp: src/04_Load/Actor/ActorManager_04.cpp: complete .text start:0x02105160 end:0x02105648 + +src/04_Load/Render/LinkModelRender_04.cpp: + complete + .text start:0x0210b258 end:0x0210b310 + .data start:0x02110b44 end:0x02110c34 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt index 5291fa660..4cfae7b41 100644 --- a/config/usa/arm9/overlays/ov004/relocs.txt +++ b/config/usa/arm9/overlays/ov004/relocs.txt @@ -2298,7 +2298,7 @@ from:0x0210b2b6 kind:thumb_call_arm to:0x0202e9f0 module:main from:0x0210b2e2 kind:thumb_call_arm to:0x020aa024 module:overlay(0) from:0x0210b2ec kind:thumb_call_arm to:0x020aa090 module:overlay(0) from:0x0210b2f6 kind:thumb_call_arm to:0x020aa090 module:overlay(0) -from:0x0210b300 kind:load to:0x020e5818 module:overlay(0) +from:0x0210b300 kind:load to:0x020e5810 add:8 module:overlay(0) from:0x0210b304 kind:load to:0x02110b94 module:overlay(4) from:0x0210b308 kind:load to:0x02110b44 module:overlay(4) from:0x0210b30c kind:load to:0x027e0ce0 module:dtcm diff --git a/config/usa/arm9/overlays/ov004/symbols.txt b/config/usa/arm9/overlays/ov004/symbols.txt index c3d7c65e0..d0bbe4274 100644 --- a/config/usa/arm9/overlays/ov004/symbols.txt +++ b/config/usa/arm9/overlays/ov004/symbols.txt @@ -314,7 +314,7 @@ _ZN10PlayerBaseC2Ev kind:function(thumb,size=0x48) addr:0x0210b190 _ZN10PlayerBaseD1Ev kind:function(thumb,size=0x28) addr:0x0210b1d8 _ZN10PlayerBaseD0Ev kind:function(thumb,size=0x30) addr:0x0210b200 _ZN10PlayerBaseD2Ev kind:function(thumb,size=0x28) addr:0x0210b230 -func_ov004_0210b2d8 kind:function(thumb,size=0xb8) addr:0x0210b258 +_ZN15LinkModelRenderC1EP9ItemModel kind:function(thumb,size=0xb8) addr:0x0210b258 func_ov004_0210b390 kind:function(thumb,size=0x12) addr:0x0210b310 func_ov004_0210b3a4 kind:function(thumb,size=0x2c) addr:0x0210b324 func_ov004_0210b3d0 kind:function(arm,size=0x4) addr:0x0210b350 @@ -735,8 +735,8 @@ data_ov004_02110b88 kind:data(any) addr:0x02110b08 data_ov004_02110b98 kind:data(any) addr:0x02110b18 data_ov004_02110ba8 kind:data(any) addr:0x02110b28 data_ov004_02110bb4 kind:data(any) addr:0x02110b34 -data_ov004_02110bc4 kind:data(any) addr:0x02110b44 -data_ov004_02110c14 kind:data(any) addr:0x02110b94 +gLinkMaterials kind:data(any) addr:0x02110b44 +gLinkBodyParts kind:data(any) addr:0x02110b94 data_ov004_02110cb4 kind:data(any) addr:0x02110c34 data_ov004_02110cb8 kind:data(any) addr:0x02110c38 data_ov004_02110ccc kind:data(any) addr:0x02110c4c diff --git a/include/Render/LinkModelRender.hpp b/include/Render/LinkModelRender.hpp new file mode 100644 index 000000000..ec43e9435 --- /dev/null +++ b/include/Render/LinkModelRender.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include "ModelRender.hpp" + +class LinkModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ s32 modelObjects[10]; + /* 84 */ s32 modelMaterials[5]; + /* 98 */ u8 *mUnk_98; + /* 9c */ unk32 mUnk_9c; + /* a0 */ unk32 mUnk_a0; + /* a4 */ + + /* 00 */ virtual ~LinkModelRender(); + /* 3c */ virtual s32 vfunc_3c(); + + LinkModelRender(ItemModel *itemModel); +}; \ No newline at end of file diff --git a/include/Render/MapModelRender.hpp b/include/Render/MapModelRender.hpp index 194620eda..3e22e59cb 100644 --- a/include/Render/MapModelRender.hpp +++ b/include/Render/MapModelRender.hpp @@ -9,6 +9,8 @@ class MapModelRender : public ModelRender { /* 5d */ unk8 mUnk_5d[3]; /* 60 */ unk32 *mUnk_60; + virtual ~MapModelRender(); + MapModelRender(ItemModel *itemModel); void HideModelCovers(ModelRenderCommandsData *renderData); }; \ No newline at end of file diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index f96fc313c..48781c76f 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -79,8 +79,6 @@ struct ModelRenderCommandsData { /* 188 */ }; -class ItemModel; - class ModelRender : public SysObject { public: /* 00 (vtable) */ diff --git a/include/Unknown/UnkStruct_ov000_020c0c08.hpp b/include/Unknown/UnkStruct_ov000_020c0c08.hpp index e7732b88e..462387687 100644 --- a/include/Unknown/UnkStruct_ov000_020c0c08.hpp +++ b/include/Unknown/UnkStruct_ov000_020c0c08.hpp @@ -21,9 +21,15 @@ struct UnkStruct_ov000_020c0c08_04 { class ItemModel { public: - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ unk32 mUnk_08; + /* 00 */ s32 fileSize; + /* 04 */ s32 renderCmdsOffset; + /* 08 */ s32 materialsOffset; + /* 0c */ s32 meshesOffset; + /* 10 */ s32 invBindsOffset; + /* 14 */ unk8 mUnk_14[3]; + /* 17 */ u8 numBoneMatrices; + /* 18 */ u8 numMaterials; + /* 19 */ }; class UnkStruct_ov000_020c0c08 : public SysObject { diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index 2349647ad..8f9c96900 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -197,7 +197,7 @@ ARM bool MapBase::func_ov00_0207e08c(s32 *param_2, s32 param_3) { if (this->modelFile == NULL) { return false; } - iVar1 = this->modelFile->mUnk_00 + this->modelFile->mUnk_08; + iVar1 = this->modelFile->fileSize + this->modelFile->materialsOffset; if (iVar1 == 0) { return false; } @@ -236,7 +236,7 @@ ARM s32 MapBase::func_ov00_0207e0f0(s32 param_2) { if (pMVar9 == NULL) { return -1; } - puVar4 = (u16 *) ((int) &pMVar9->mUnk_00 + pMVar9->mUnk_08); + puVar4 = (u16 *) ((int) &pMVar9->fileSize + pMVar9->materialsOffset); if (puVar4 != (u16 *) 0x0) { iVar6 = (int) puVar4 + (u32) *puVar4; if (iVar6 == 0) { @@ -316,7 +316,7 @@ ARM s32 MapBase::func_ov00_0207e28c(s32 param_2) { if (pMVar15 == NULL) { return -1; } - iVar3 = (int *) ((int) &pMVar15->mUnk_00 + pMVar15->mUnk_08); + iVar3 = (int *) ((int) &pMVar15->fileSize + pMVar15->materialsOffset); if (iVar3 != NULL) { iVar4 = (int *) ((int) iVar3 + (u32) * (u16 *) ((int) iVar3 + 2)); if (iVar4 == NULL) { diff --git a/src/00_Core/Render/MapModelRender.cpp b/src/00_Core/Render/MapModelRender.cpp index 4a43599f9..8201f619c 100644 --- a/src/00_Core/Render/MapModelRender.cpp +++ b/src/00_Core/Render/MapModelRender.cpp @@ -2,15 +2,8 @@ extern "C" void func_02018cb8(ModelRender_UnkStruct_4 *param_1, void (*param_2)(ModelRenderCommandsData *)); -void HideMapModelCover(ModelRenderCommandsData *renderData) { - ((MapModelRender *) renderData->unkStruct4->mUnk_2c)->HideModelCovers(renderData); - return; -} - -void func_ov000_0209d9e0(ModelRenderCommandsData *renderData) { - renderData->mUnkFunc_1c = &HideMapModelCover; - renderData->mUnk_90 = 2; -} +void func_ov000_0209d9e0(ModelRenderCommandsData *renderData); +void HideMapModelCover(ModelRenderCommandsData *renderData); ARM MapModelRender::MapModelRender(ItemModel *itemModel) : ModelRender(itemModel) { @@ -20,6 +13,8 @@ ARM MapModelRender::MapModelRender(ItemModel *itemModel) : func_02018cb8(&this->mUnk_04, &func_ov000_0209d9e0); } +MapModelRender::~MapModelRender() {} + void MapModelRender::HideModelCovers(ModelRenderCommandsData *renderData) { u32 polygonId = (renderData->unkMaterialDataPTR->polygon_attr & 0x3f000000) >> 0x18; if (polygonId == 0x1b) { // Polygon ID for model covers (e.g. cv_section) @@ -27,4 +22,14 @@ void MapModelRender::HideModelCovers(ModelRenderCommandsData *renderData) { renderData->unkMaterialDataPTR->polygon_attr = renderData->unkMaterialDataPTR->polygon_attr & 0xffe0ffff | transparency; } +} + +void func_ov000_0209d9e0(ModelRenderCommandsData *renderData) { + renderData->mUnkFunc_1c = &HideMapModelCover; + renderData->mUnk_90 = 2; +} + +void HideMapModelCover(ModelRenderCommandsData *renderData) { + ((MapModelRender *) renderData->unkStruct4->mUnk_2c)->HideModelCovers(renderData); + return; } \ No newline at end of file diff --git a/src/04_Load/Render/LinkModelRender_04.cpp b/src/04_Load/Render/LinkModelRender_04.cpp new file mode 100644 index 000000000..0ea427b09 --- /dev/null +++ b/src/04_Load/Render/LinkModelRender_04.cpp @@ -0,0 +1,34 @@ +#include "Render/LinkModelRender.hpp" + +char gLinkBodyParts[10][16] = {"center", "body_chn", "waist_chn", "neck_jnt", "cl_podA", + "cl_LhandA", "cl_RhandA", "LlegB_jnt", "RlegB_jnt", "head_jnt"}; +char gLinkMaterials[5][16] = {"swA", "sheath", "swB", "sheathB", "body_all"}; + +extern "C" u32 *data_027e0ce0[]; +extern "C" void func_ov000_020aa084(LinkModelRender *param1, s32 param2); +extern "C" void func_ov000_020aa0f0(LinkModelRender *param1, s32 param2, s32 param3); + +THUMB LinkModelRender::LinkModelRender(ItemModel *itemModel) : + ModelRender(itemModel), + mUnk_9c(0), + mUnk_a0(0) { + for (int i = 0; i < 10; i++) { + char *modelObj = gLinkBodyParts[i]; + this->modelObjects[i] = this->GetObjectIndex(modelObj); + } + + for (int i = 0; i < 5; i++) { + char *modelMat = gLinkMaterials[i]; + this->modelMaterials[i] = this->GetMaterialIndex(modelMat); + } + + this->mUnk_98 = (u8 *) SysObject::operator new[](itemModel->numBoneMatrices, data_027e0ce0[1], 4); + + for (int i = 0; i < itemModel->numBoneMatrices; i++) { + this->mUnk_98[i] = 0; + } + + func_ov000_020aa084(this, this->modelObjects[1]); + func_ov000_020aa0f0(this, 0, 0); + func_ov000_020aa0f0(this, 2, 0); +} \ No newline at end of file From 8e0c1139ae8c85fdad94adcd00b770645bbd085c Mon Sep 17 00:00:00 2001 From: enzo Date: Tue, 20 Jan 2026 18:36:39 -0300 Subject: [PATCH 06/14] add MistModelRender.cpp --- config/eur/arm9/overlays/ov000/delinks.txt | 7 +++- config/eur/arm9/overlays/ov000/relocs.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 11 +++--- config/usa/arm9/overlays/ov000/delinks.txt | 7 +++- config/usa/arm9/overlays/ov000/relocs.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 11 +++--- include/Render/MistModelRender.hpp | 18 ++++++++++ include/Render/ModelRender.hpp | 4 ++- src/00_Core/Render/MistModelRender.cpp | 39 ++++++++++++++++++++++ 9 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 include/Render/MistModelRender.hpp create mode 100644 src/00_Core/Render/MistModelRender.cpp diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 47153f1aa..ef0d62e0d 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -166,4 +166,9 @@ src/00_Core/Render/MapModelRender.cpp: src/00_Core/Render/SkyboxModelRender.cpp: .text start:0x020a4b4c end:0x020a4c38 .data start:0x020e518c end:0x020e51e8 - .init start:0x020e120c end:0x020e1250 \ No newline at end of file + .init start:0x020e120c end:0x020e1250 + +src/00_Core/Render/MistModelRender.cpp: + complete + .text start:0x020a4c38 end:0x020a4d3c + .data start:0x020e51e8 end:0x020e5230 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 5308ecd38..c5d80ab9e 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -4217,7 +4217,7 @@ from:0x020a4bf8 kind:arm_call to:0x0202ea0c module:main from:0x020a4c0c kind:arm_call_thumb to:0x020a95ec module:overlay(0) from:0x020a4c40 kind:arm_call_thumb to:0x020a956c module:overlay(0) from:0x020a4c6c kind:arm_call to:0x020a9998 module:overlay(0) -from:0x020a4c78 kind:load to:0x020e51f0 module:overlay(0) +from:0x020a4c78 kind:load to:0x020e51e8 add:8 module:overlay(0) from:0x020a4c84 kind:arm_call_thumb to:0x020a95ec module:overlay(0) from:0x020a4c98 kind:arm_call_thumb to:0x020a95ec module:overlay(0) from:0x020a4ca0 kind:arm_call to:0x0202ea0c module:main diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 8fe4f99af..8545fb638 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1752,10 +1752,10 @@ _ZN17SkyboxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x020a4be8 _ZN17SkyboxModelRenderD2Ev kind:function(arm,size=0x14) addr:0x020a4c04 _ZN17SkyboxModelRender8vfunc_40Ev kind:function(arm,size=0x18) addr:0x020a4c18 _ZN17SkyboxModelRender8vfunc_44Ev kind:function(arm,size=0x8) addr:0x020a4c30 -func_ov000_020a4c38 kind:function(arm,size=0x44) addr:0x020a4c38 -func_ov000_020a4c7c kind:function(arm,size=0x14) addr:0x020a4c7c -func_ov000_020a4c90 kind:function(arm,size=0x1c) addr:0x020a4c90 -func_ov000_020a4cac kind:function(arm,size=0x90) addr:0x020a4cac +_ZN15MistModelRenderC1EP9ItemModel kind:function(arm,size=0x44) addr:0x020a4c38 +_ZN15MistModelRenderD1Ev kind:function(arm,size=0x14) addr:0x020a4c7c +_ZN15MistModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x020a4c90 +_ZN15MistModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x90) addr:0x020a4cac func_ov000_020a4d3c kind:function(arm,size=0x80) addr:0x020a4d3c func_ov000_020a4dbc kind:function(arm,size=0x14) addr:0x020a4dbc func_ov000_020a4dd0 kind:function(arm,size=0x3c) addr:0x020a4dd0 @@ -4728,8 +4728,7 @@ data_ov000_020e5134 kind:data(any) addr:0x020e5134 data_ov000_020e5144 kind:data(any) addr:0x020e5144 _ZN17SkyboxModelRender19data_ov000_020e518cE kind:data(any) addr:0x020e518c _ZTV17SkyboxModelRender kind:data(any) addr:0x020e5198 -data_ov000_020e51e8 kind:data(any) addr:0x020e51e8 -data_ov000_020e51f0 kind:data(any) addr:0x020e51f0 +_ZTV15MistModelRender kind:data(any) addr:0x020e51e8 data_ov000_020e5230 kind:data(any) addr:0x020e5230 data_ov000_020e5234 kind:data(any) addr:0x020e5234 data_ov000_020e5238 kind:data(any) addr:0x020e5238 diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index 5f4a3a5c0..2614cbb23 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -166,4 +166,9 @@ src/00_Core/Render/MapModelRender.cpp: src/00_Core/Render/SkyboxModelRender.cpp: .text start:0x020a4aec end:0x020a4bd8 .data start:0x020e512c end:0x020e5188 - .init start:0x020e11ac end:0x020e11f0 \ No newline at end of file + .init start:0x020e11ac end:0x020e11f0 + +src/00_Core/Render/MistModelRender.cpp: + complete + .text start:0x020a4bd8 end:0x020a4cdc + .data start:0x020e5188 end:0x020e51d0 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index ea05277cb..0cf543d14 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -4217,7 +4217,7 @@ from:0x020a4b98 kind:arm_call to:0x0202ea08 module:main from:0x020a4bac kind:arm_call_thumb to:0x020a958c module:overlay(0) from:0x020a4be0 kind:arm_call_thumb to:0x020a950c module:overlay(0) from:0x020a4c0c kind:arm_call to:0x020a9938 module:overlay(0) -from:0x020a4c18 kind:load to:0x020e5190 module:overlay(0) +from:0x020a4c18 kind:load to:0x020e5188 add:8 module:overlay(0) from:0x020a4c24 kind:arm_call_thumb to:0x020a958c module:overlay(0) from:0x020a4c38 kind:arm_call_thumb to:0x020a958c module:overlay(0) from:0x020a4c40 kind:arm_call to:0x0202ea08 module:main diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 8a1d13545..4c2040254 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1752,10 +1752,10 @@ _ZN17SkyboxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x020a4b88 _ZN17SkyboxModelRenderD2Ev kind:function(arm,size=0x14) addr:0x020a4ba4 _ZN17SkyboxModelRender8vfunc_40Ev kind:function(arm,size=0x18) addr:0x020a4bb8 _ZN17SkyboxModelRender8vfunc_44Ev kind:function(arm,size=0x8) addr:0x020a4bd0 -func_ov000_020a4c38 kind:function(arm,size=0x44) addr:0x020a4bd8 -func_ov000_020a4c7c kind:function(arm,size=0x14) addr:0x020a4c1c -func_ov000_020a4c90 kind:function(arm,size=0x1c) addr:0x020a4c30 -func_ov000_020a4cac kind:function(arm,size=0x90) addr:0x020a4c4c +_ZN15MistModelRenderC1EP9ItemModel kind:function(arm,size=0x44) addr:0x020a4bd8 +_ZN15MistModelRenderD1Ev kind:function(arm,size=0x14) addr:0x020a4c1c +_ZN15MistModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x020a4c30 +_ZN15MistModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x90) addr:0x020a4c4c func_ov000_020a4d3c kind:function(arm,size=0x80) addr:0x020a4cdc func_ov000_020a4dbc kind:function(arm,size=0x14) addr:0x020a4d5c func_ov000_020a4dd0 kind:function(arm,size=0x3c) addr:0x020a4d70 @@ -4728,8 +4728,7 @@ data_ov000_020e5134 kind:data(any) addr:0x020e50d4 data_ov000_020e5144 kind:data(any) addr:0x020e50e4 _ZN17SkyboxModelRender19data_ov000_020e518cE kind:data(any) addr:0x020e512c _ZTV17SkyboxModelRender kind:data(any) addr:0x020e5138 -data_ov000_020e51e8 kind:data(any) addr:0x020e5188 -data_ov000_020e51f0 kind:data(any) addr:0x020e5190 +_ZTV15MistModelRender kind:data(any) addr:0x020e5188 data_ov000_020e5230 kind:data(any) addr:0x020e51d0 data_ov000_020e5234 kind:data(any) addr:0x020e51d4 data_ov000_020e5238 kind:data(any) addr:0x020e51d8 diff --git a/include/Render/MistModelRender.hpp b/include/Render/MistModelRender.hpp new file mode 100644 index 000000000..9fd90c8bc --- /dev/null +++ b/include/Render/MistModelRender.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "ModelRender.hpp" + +class MistModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ unk32 mUnk_5c; + /* 60 */ unk32 mUnk_60; + /* 64 */ unk32 mUnk_64; + /* 68 */ unk32 mUnk_68; + /* 6c */ + + /* 00 */ virtual ~MistModelRender() override; + /* 3c */ virtual void vfunc_3c(ModelRenderCommandsData *renderData) override; + + MistModelRender(ItemModel *itemModel); +}; \ No newline at end of file diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index 48781c76f..a34448ce5 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -47,7 +47,9 @@ struct ModelRender_MaterialData { /* 0c */ u32 polygon_attr; /* 10 */ u32 teximage_params; /* 14 */ u32 pltt_base; - /* 18 */ u8 mUnk_18[0x14]; + /* 18 */ u8 mUnk_18[0xc]; + /* 24 */ unk32 mUnk_24; + /* 28 */ unk32 mUnk_28; /* 2c */ u16 width; /* 2e */ u16 height; /* 30 */ u8 mUnk_30[0x8]; diff --git a/src/00_Core/Render/MistModelRender.cpp b/src/00_Core/Render/MistModelRender.cpp new file mode 100644 index 000000000..70d245e17 --- /dev/null +++ b/src/00_Core/Render/MistModelRender.cpp @@ -0,0 +1,39 @@ +#include "Render/MistModelRender.hpp" +#include "Game/Game.hpp" + +ARM MistModelRender::MistModelRender(ItemModel *itemModel) : + ModelRender(itemModel), + mUnk_5c(0), + mUnk_60(4), + mUnk_64(0), + mUnk_68(0) { + this->UnkInit_Struct4_Params(4, 2); +} + +ARM MistModelRender::~MistModelRender() {} + +ARM void MistModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { + ModelRender_MaterialData *matPtr = renderData->unkMaterialDataPTR; + matPtr->flags &= ~(0x4); + + if (gGame.mUnk_101 == 0) { + this->mUnk_68 += this->mUnk_60; + + if (this->mUnk_68 >= 0x1000) { + this->mUnk_68 = 0; + } else if (this->mUnk_68 <= 0) { + this->mUnk_68 = 0x1000; + } + + this->mUnk_64 += this->mUnk_5c; + + if (this->mUnk_64 >= 0x2000) { + this->mUnk_64 = 0; + } else if (this->mUnk_64 <= 0) { + this->mUnk_64 = 0x2000; + } + } + + matPtr->mUnk_24 = this->mUnk_64; + matPtr->mUnk_28 = this->mUnk_68; +} \ No newline at end of file From cc44f642d400e37bdbced513c45ebdb48107ebf0 Mon Sep 17 00:00:00 2001 From: enzo Date: Mon, 2 Feb 2026 10:11:20 -0300 Subject: [PATCH 07/14] add BoxModelRender --- config/eur/arm9/overlays/ov014/delinks.txt | 5 +++++ config/eur/arm9/overlays/ov014/relocs.txt | 4 ++-- config/eur/arm9/overlays/ov014/symbols.txt | 14 +++++++------- config/usa/arm9/overlays/ov014/delinks.txt | 5 +++++ config/usa/arm9/overlays/ov014/relocs.txt | 4 ++-- config/usa/arm9/overlays/ov014/symbols.txt | 14 +++++++------- include/Render/BoxModelRender.hpp | 15 +++++++++++++++ include/Render/ModelRender.hpp | 6 ++++-- include/Unknown/UnkStruct_ov000_020c0c08.hpp | 12 +++++++++++- src/14_Land/Render/BoxModelRender.cpp | 20 ++++++++++++++++++++ 10 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 include/Render/BoxModelRender.hpp create mode 100644 src/14_Land/Render/BoxModelRender.cpp diff --git a/config/eur/arm9/overlays/ov014/delinks.txt b/config/eur/arm9/overlays/ov014/delinks.txt index 533b842dc..4dce9a115 100644 --- a/config/eur/arm9/overlays/ov014/delinks.txt +++ b/config/eur/arm9/overlays/ov014/delinks.txt @@ -20,3 +20,8 @@ src/14_Land/Actor/Player/ActorRefill.cpp: .ctor start:0x021558ec end:0x021558f0 .data start:0x021578b0 end:0x02157d70 .bss start:0x0215af94 end:0x0215b034 + +src/14_Land/Render/BoxModelRender.cpp: + .text start:0x02125f00 end:0x02125f9c + .rodata start:0x02153c24 end:0x02153c38 + .data start:0x021561b8 end:0x02156200 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov014/relocs.txt b/config/eur/arm9/overlays/ov014/relocs.txt index 2916d174a..fd959771f 100644 --- a/config/eur/arm9/overlays/ov014/relocs.txt +++ b/config/eur/arm9/overlays/ov014/relocs.txt @@ -815,7 +815,7 @@ from:0x02125eec kind:arm_call to:0x02125290 module:overlay(14) from:0x02125ef4 kind:arm_call to:0x0202ea0c module:main from:0x02125f08 kind:arm_call_thumb to:0x020a956c module:overlay(0) from:0x02125f28 kind:arm_call to:0x020a9998 module:overlay(0) -from:0x02125f34 kind:load to:0x021561c0 module:overlay(14) +from:0x02125f34 kind:load to:0x021561b8 add:8 module:overlay(14) from:0x02125f54 kind:arm_call to:0x0201e388 module:main from:0x02125f7c kind:load to:0x02153c24 module:overlay(14) from:0x02125f88 kind:arm_call_thumb to:0x020a95ec module:overlay(0) @@ -823,7 +823,7 @@ from:0x02125f90 kind:arm_call to:0x0202ea0c module:main from:0x02125fbc kind:arm_call to:0x0202e9dc module:main from:0x02125fdc kind:arm_call to:0x02125168 module:overlay(14) from:0x02125ff4 kind:load to:0x027e0f84 module:dtcm -from:0x02125ff8 kind:load to:0x02156208 module:overlay(14) +from:0x02125ff8 kind:load to:0x02156200 add:8 module:overlay(14) from:0x02126018 kind:load to:0x021252b8 module:overlay(14) from:0x02126024 kind:arm_call to:0x0208c468 module:overlay(0) from:0x0212603c kind:arm_call to:0x0208b9e4 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index db56cc1d3..64f3e7e8d 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -130,7 +130,7 @@ func_ov014_02125130 kind:function(arm,size=0x14) addr:0x02125130 func_ov014_02125144 kind:function(arm,size=0x8) addr:0x02125144 func_ov014_0212514c kind:function(arm,size=0x1c) addr:0x0212514c func_ov014_02125168 kind:function(arm,size=0xbc) addr:0x02125168 -func_ov014_02125224 kind:function(arm,size=0x14) addr:0x02125224 +_ZN14BoxModelRenderD1Ev kind:function(arm,size=0x14) addr:0x02125224 func_ov014_02125238 kind:function(arm,size=0x28) addr:0x02125238 func_ov014_02125260 kind:function(arm,size=0x30) addr:0x02125260 func_ov014_02125290 kind:function(arm,size=0x28) addr:0x02125290 @@ -153,9 +153,9 @@ func_ov014_02125e60 kind:function(arm,size=0x68) addr:0x02125e60 func_ov014_02125ec8 kind:function(arm,size=0x14) addr:0x02125ec8 func_ov014_02125edc kind:function(arm,size=0x8) addr:0x02125edc func_ov014_02125ee4 kind:function(arm,size=0x1c) addr:0x02125ee4 -func_ov014_02125f00 kind:function(arm,size=0x38) addr:0x02125f00 -func_ov014_02125f38 kind:function(arm,size=0x48) addr:0x02125f38 -func_ov014_02125f80 kind:function(arm,size=0x1c) addr:0x02125f80 +_ZN14BoxModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125f00 +_ZN14BoxModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125f38 +_ZN14BoxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f80 func_ov014_02125f9c kind:function(arm,size=0x60) addr:0x02125f9c func_ov014_02125ffc kind:function(arm,size=0x20) addr:0x02125ffc func_ov014_0212601c kind:function(arm,size=0x28) addr:0x0212601c @@ -1550,7 +1550,7 @@ data_ov014_02153be8 kind:data(any) addr:0x02153be8 data_ov014_02153bfc kind:data(any) addr:0x02153bfc data_ov014_02153c04 kind:data(any) addr:0x02153c04 data_ov014_02153c18 kind:data(any) addr:0x02153c18 -data_ov014_02153c24 kind:data(any) addr:0x02153c24 +boxBModelName kind:data(any) addr:0x02153c24 data_ov014_02153c38 kind:data(any) addr:0x02153c38 data_ov014_02153c4c kind:data(any) addr:0x02153c4c data_ov014_02153c64 kind:data(any) addr:0x02153c64 @@ -1844,8 +1844,8 @@ data_ov014_02155fb0 kind:data(any) addr:0x02155fb0 data_ov014_02155fd4 kind:data(any) addr:0x02155fd4 data_ov014_02156078 kind:data(any) addr:0x02156078 data_ov014_0215611c kind:data(any) addr:0x0215611c -data_ov014_021561c0 kind:data(any) addr:0x021561c0 -data_ov014_02156208 kind:data(any) addr:0x02156208 +_ZTV14BoxModelRender kind:data(any) addr:0x021561b8 +data_ov014_02156208 kind:data(any) addr:0x02156200 data_ov014_021562ac kind:data(any) addr:0x021562ac data_ov014_02156350 kind:data(any) addr:0x02156350 data_ov014_021563f4 kind:data(any) addr:0x021563f4 diff --git a/config/usa/arm9/overlays/ov014/delinks.txt b/config/usa/arm9/overlays/ov014/delinks.txt index dcd2d7053..fd6a14da5 100644 --- a/config/usa/arm9/overlays/ov014/delinks.txt +++ b/config/usa/arm9/overlays/ov014/delinks.txt @@ -20,3 +20,8 @@ src/14_Land/Actor/Player/ActorRefill.cpp: .ctor start:0x02155848 end:0x0215584c .data start:0x02157810 end:0x02157cd0 .bss start:0x0215aef4 end:0x0215af94 + +src/14_Land/Render/BoxModelRender.cpp: + .text start:0x02125e80 end:0x02125f1c + .rodata start:0x02153b80 end:0x02153b94 + .data start:0x02156118 end:0x02156160 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov014/relocs.txt b/config/usa/arm9/overlays/ov014/relocs.txt index 71735c51d..53072accf 100644 --- a/config/usa/arm9/overlays/ov014/relocs.txt +++ b/config/usa/arm9/overlays/ov014/relocs.txt @@ -815,7 +815,7 @@ from:0x02125e6c kind:arm_call to:0x02125210 module:overlay(14) from:0x02125e74 kind:arm_call to:0x0202ea08 module:main from:0x02125e88 kind:arm_call_thumb to:0x020a950c module:overlay(0) from:0x02125ea8 kind:arm_call to:0x020a9938 module:overlay(0) -from:0x02125eb4 kind:load to:0x02156120 module:overlay(14) +from:0x02125eb4 kind:load to:0x02156118 add:8 module:overlay(14) from:0x02125ed4 kind:arm_call to:0x0201e388 module:main from:0x02125efc kind:load to:0x02153b80 module:overlay(14) from:0x02125f08 kind:arm_call_thumb to:0x020a958c module:overlay(0) @@ -823,7 +823,7 @@ from:0x02125f10 kind:arm_call to:0x0202ea08 module:main from:0x02125f3c kind:arm_call to:0x0202e9d8 module:main from:0x02125f5c kind:arm_call to:0x021250e8 module:overlay(14) from:0x02125f74 kind:load to:0x027e0f84 module:dtcm -from:0x02125f78 kind:load to:0x02156168 module:overlay(14) +from:0x02125f78 kind:load to:0x02156160 add:8 module:overlay(14) from:0x02125f98 kind:load to:0x02125238 module:overlay(14) from:0x02125fa4 kind:arm_call to:0x0208c408 module:overlay(0) from:0x02125fbc kind:arm_call to:0x0208b984 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index f4991334a..297854d3c 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -130,7 +130,7 @@ func_ov014_02125130 kind:function(arm,size=0x14) addr:0x021250b0 func_ov014_02125144 kind:function(arm,size=0x8) addr:0x021250c4 func_ov014_0212514c kind:function(arm,size=0x1c) addr:0x021250cc func_ov014_02125168 kind:function(arm,size=0xbc) addr:0x021250e8 -func_ov014_02125224 kind:function(arm,size=0x14) addr:0x021251a4 +_ZN14BoxModelRenderD1Ev kind:function(arm,size=0x14) addr:0x021251a4 func_ov014_02125238 kind:function(arm,size=0x28) addr:0x021251b8 func_ov014_02125260 kind:function(arm,size=0x30) addr:0x021251e0 func_ov014_02125290 kind:function(arm,size=0x28) addr:0x02125210 @@ -153,9 +153,9 @@ func_ov014_02125e60 kind:function(arm,size=0x68) addr:0x02125de0 func_ov014_02125ec8 kind:function(arm,size=0x14) addr:0x02125e48 func_ov014_02125edc kind:function(arm,size=0x8) addr:0x02125e5c func_ov014_02125ee4 kind:function(arm,size=0x1c) addr:0x02125e64 -func_ov014_02125f00 kind:function(arm,size=0x38) addr:0x02125e80 -func_ov014_02125f38 kind:function(arm,size=0x48) addr:0x02125eb8 -func_ov014_02125f80 kind:function(arm,size=0x1c) addr:0x02125f00 +_ZN14BoxModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125e80 +_ZN14BoxModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125eb8 +_ZN14BoxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f00 func_ov014_02125f9c kind:function(arm,size=0x60) addr:0x02125f1c func_ov014_02125ffc kind:function(arm,size=0x20) addr:0x02125f7c func_ov014_0212601c kind:function(arm,size=0x28) addr:0x02125f9c @@ -1550,7 +1550,7 @@ data_ov014_02153be8 kind:data(any) addr:0x02153b44 data_ov014_02153bfc kind:data(any) addr:0x02153b58 data_ov014_02153c04 kind:data(any) addr:0x02153b60 data_ov014_02153c18 kind:data(any) addr:0x02153b74 -data_ov014_02153c24 kind:data(any) addr:0x02153b80 +boxBModelName kind:data(any) addr:0x02153b80 data_ov014_02153c38 kind:data(any) addr:0x02153b94 data_ov014_02153c4c kind:data(any) addr:0x02153ba8 data_ov014_02153c64 kind:data(any) addr:0x02153bc0 @@ -1844,8 +1844,8 @@ data_ov014_02155fb0 kind:data(any) addr:0x02155f10 data_ov014_02155fd4 kind:data(any) addr:0x02155f34 data_ov014_02156078 kind:data(any) addr:0x02155fd8 data_ov014_0215611c kind:data(any) addr:0x0215607c -data_ov014_021561c0 kind:data(any) addr:0x02156120 -data_ov014_02156208 kind:data(any) addr:0x02156168 +_ZTV14BoxModelRender kind:data(any) addr:0x02156118 +data_ov014_02156208 kind:data(any) addr:0x02156160 data_ov014_021562ac kind:data(any) addr:0x0215620c data_ov014_02156350 kind:data(any) addr:0x021562b0 data_ov014_021563f4 kind:data(any) addr:0x02156354 diff --git a/include/Render/BoxModelRender.hpp b/include/Render/BoxModelRender.hpp new file mode 100644 index 000000000..a9b107b56 --- /dev/null +++ b/include/Render/BoxModelRender.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "ModelRender.hpp" + +class BoxModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ bool isClosed; + /* 5d */ + + /* 00 */ virtual ~BoxModelRender() override; + /* 3c */ virtual void vfunc_3c(ModelRenderCommandsData *renderData) override; + + BoxModelRender(ItemModel *itemModel); +}; \ No newline at end of file diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index a34448ce5..4bac7cc9d 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -19,7 +19,7 @@ struct ModelRender_UnkBoneMatrixStruct { struct ModelRender_UnkStruct_4 { /* 00 */ unk32 flags; - /* 04 */ void *mLcdcAddr; + /* 04 */ ItemModel *mLcdcAddr; /* 08 */ void *mUnk_08; // this attribute is related to UnkStruct_ov000_020c0c08 /* 0c */ void *mUnkTransformFunc; /* 10 */ void *mUnk_10; // also related to UnkStruct_ov000_020c0c08 @@ -67,7 +67,9 @@ struct ModelRenderCommandsData { /* 90 */ unk8 mUnk_90; /* 91 */ unk8 mUnk_91[0x1f]; /* b0 */ ModelRender_MaterialData *unkMaterialDataPTR; - /* b4 */ unk8 mUnk_b4[0x20]; + /* b4 */ unk8 mUnk_b4[0x4]; + /* b8 */ u32 *boneVisibilityPtr; + /* bc */ unk8 mUnk_bc[0x18]; /* d4 */ void *boneList; /* d8 */ void *materialList; /* dc */ void *meshList; diff --git a/include/Unknown/UnkStruct_ov000_020c0c08.hpp b/include/Unknown/UnkStruct_ov000_020c0c08.hpp index 462387687..82b6193b0 100644 --- a/include/Unknown/UnkStruct_ov000_020c0c08.hpp +++ b/include/Unknown/UnkStruct_ov000_020c0c08.hpp @@ -29,7 +29,17 @@ class ItemModel { /* 14 */ unk8 mUnk_14[3]; /* 17 */ u8 numBoneMatrices; /* 18 */ u8 numMaterials; - /* 19 */ + /* 19 */ u8 numMeshes; + /* 1a */ unk8 mUnk_1a[2]; + /* 1c */ s32 up_scale; + /* 20 */ s32 down_scale; + /* 24 */ s16 numVertices; + /* 26 */ s16 numPolygons; + /* 28 */ s16 numTriangles; + /* 2a */ s16 numQuads; + /* 2c */ unk8 boundingBox[0xc]; + /* 38 */ unk8 mUnk_38[0x8]; + /* 40 */ void *boneList; }; class UnkStruct_ov000_020c0c08 : public SysObject { diff --git a/src/14_Land/Render/BoxModelRender.cpp b/src/14_Land/Render/BoxModelRender.cpp new file mode 100644 index 000000000..f03a67227 --- /dev/null +++ b/src/14_Land/Render/BoxModelRender.cpp @@ -0,0 +1,20 @@ +#include "Render/BoxModelRender.hpp" + +extern "C" unk32 func_0201e388(void *param1, const char *param2); + +const char boxBModelName[20] = "box_B"; + +BoxModelRender::BoxModelRender(ItemModel *itemModel) : + ModelRender(itemModel), + isClosed(true) { + this->UnkInit_Struct4_Params(2, 2); +} + +void BoxModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { + s32 boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, boxBModelName); + if (renderData->currentCommand[1] == boneIndex && !this->isClosed) { + *renderData->boneVisibilityPtr = 0; + } +} + +BoxModelRender::~BoxModelRender() {} \ No newline at end of file From 5a7cba4088236394810194b29232cd0f6c790780 Mon Sep 17 00:00:00 2001 From: enzo Date: Mon, 2 Feb 2026 12:01:31 -0300 Subject: [PATCH 08/14] rename boxmodelrender --- config/eur/arm9/overlays/ov004/relocs.txt | 2 +- config/eur/arm9/overlays/ov014/delinks.txt | 2 +- config/eur/arm9/overlays/ov014/symbols.txt | 8 ++++---- config/usa/arm9/overlays/ov014/delinks.txt | 2 +- config/usa/arm9/overlays/ov014/symbols.txt | 8 ++++---- .../{BoxModelRender.hpp => TreasureChestModelRender.hpp} | 6 +++--- .../{BoxModelRender.cpp => TreasureChestModelRender.cpp} | 8 ++++---- 7 files changed, 18 insertions(+), 18 deletions(-) rename include/Render/{BoxModelRender.hpp => TreasureChestModelRender.hpp} (54%) rename src/14_Land/Render/{BoxModelRender.cpp => TreasureChestModelRender.cpp} (62%) diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index 96af44f19..8fffdf20f 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -503,7 +503,7 @@ from:0x021033d8 kind:thumb_call_arm to:0x0202e9dc module:main from:0x02103418 kind:load to:0x020e2b5c add:8 module:overlay(0) from:0x0210341c kind:load to:0x020e4b68 module:overlay(0) from:0x02103420 kind:load to:0x027e0ce0 module:dtcm -from:0x02103424 kind:load to:0x020e4c00 add:8 module:overlay(0) +from:0x02103424 kind:load to:0x020e4bf8 add:8 module:overlay(0) from:0x02103428 kind:load to:0x027e0618 module:dtcm from:0x0210342c kind:load to:0x02136cc0 module:overlay(12) from:0x02103430 kind:load to:0x020e4fb4 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov014/delinks.txt b/config/eur/arm9/overlays/ov014/delinks.txt index 4dce9a115..8d6c4a47b 100644 --- a/config/eur/arm9/overlays/ov014/delinks.txt +++ b/config/eur/arm9/overlays/ov014/delinks.txt @@ -21,7 +21,7 @@ src/14_Land/Actor/Player/ActorRefill.cpp: .data start:0x021578b0 end:0x02157d70 .bss start:0x0215af94 end:0x0215b034 -src/14_Land/Render/BoxModelRender.cpp: +src/14_Land/Render/TreasureChestModelRender.cpp: .text start:0x02125f00 end:0x02125f9c .rodata start:0x02153c24 end:0x02153c38 .data start:0x021561b8 end:0x02156200 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 64f3e7e8d..dff38d146 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -130,7 +130,7 @@ func_ov014_02125130 kind:function(arm,size=0x14) addr:0x02125130 func_ov014_02125144 kind:function(arm,size=0x8) addr:0x02125144 func_ov014_0212514c kind:function(arm,size=0x1c) addr:0x0212514c func_ov014_02125168 kind:function(arm,size=0xbc) addr:0x02125168 -_ZN14BoxModelRenderD1Ev kind:function(arm,size=0x14) addr:0x02125224 +_ZN14TreasureChestModelRenderD1Ev kind:function(arm,size=0x14) addr:0x02125224 func_ov014_02125238 kind:function(arm,size=0x28) addr:0x02125238 func_ov014_02125260 kind:function(arm,size=0x30) addr:0x02125260 func_ov014_02125290 kind:function(arm,size=0x28) addr:0x02125290 @@ -153,9 +153,9 @@ func_ov014_02125e60 kind:function(arm,size=0x68) addr:0x02125e60 func_ov014_02125ec8 kind:function(arm,size=0x14) addr:0x02125ec8 func_ov014_02125edc kind:function(arm,size=0x8) addr:0x02125edc func_ov014_02125ee4 kind:function(arm,size=0x1c) addr:0x02125ee4 -_ZN14BoxModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125f00 -_ZN14BoxModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125f38 -_ZN14BoxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f80 +_ZN14TreasureChestModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125f00 +_ZN14TreasureChestModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125f38 +_ZN14TreasureChestModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f80 func_ov014_02125f9c kind:function(arm,size=0x60) addr:0x02125f9c func_ov014_02125ffc kind:function(arm,size=0x20) addr:0x02125ffc func_ov014_0212601c kind:function(arm,size=0x28) addr:0x0212601c diff --git a/config/usa/arm9/overlays/ov014/delinks.txt b/config/usa/arm9/overlays/ov014/delinks.txt index fd6a14da5..4cb5aa736 100644 --- a/config/usa/arm9/overlays/ov014/delinks.txt +++ b/config/usa/arm9/overlays/ov014/delinks.txt @@ -21,7 +21,7 @@ src/14_Land/Actor/Player/ActorRefill.cpp: .data start:0x02157810 end:0x02157cd0 .bss start:0x0215aef4 end:0x0215af94 -src/14_Land/Render/BoxModelRender.cpp: +src/14_Land/Render/TreasureChestModelRender.cpp: .text start:0x02125e80 end:0x02125f1c .rodata start:0x02153b80 end:0x02153b94 .data start:0x02156118 end:0x02156160 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 297854d3c..22cf9035d 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -130,7 +130,7 @@ func_ov014_02125130 kind:function(arm,size=0x14) addr:0x021250b0 func_ov014_02125144 kind:function(arm,size=0x8) addr:0x021250c4 func_ov014_0212514c kind:function(arm,size=0x1c) addr:0x021250cc func_ov014_02125168 kind:function(arm,size=0xbc) addr:0x021250e8 -_ZN14BoxModelRenderD1Ev kind:function(arm,size=0x14) addr:0x021251a4 +_ZN24TreasureChestModelRenderD1Ev kind:function(arm,size=0x14) addr:0x021251a4 func_ov014_02125238 kind:function(arm,size=0x28) addr:0x021251b8 func_ov014_02125260 kind:function(arm,size=0x30) addr:0x021251e0 func_ov014_02125290 kind:function(arm,size=0x28) addr:0x02125210 @@ -153,9 +153,9 @@ func_ov014_02125e60 kind:function(arm,size=0x68) addr:0x02125de0 func_ov014_02125ec8 kind:function(arm,size=0x14) addr:0x02125e48 func_ov014_02125edc kind:function(arm,size=0x8) addr:0x02125e5c func_ov014_02125ee4 kind:function(arm,size=0x1c) addr:0x02125e64 -_ZN14BoxModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125e80 -_ZN14BoxModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125eb8 -_ZN14BoxModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f00 +_ZN24TreasureChestModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125e80 +_ZN24TreasureChestModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125eb8 +_ZN24TreasureChestModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f00 func_ov014_02125f9c kind:function(arm,size=0x60) addr:0x02125f1c func_ov014_02125ffc kind:function(arm,size=0x20) addr:0x02125f7c func_ov014_0212601c kind:function(arm,size=0x28) addr:0x02125f9c diff --git a/include/Render/BoxModelRender.hpp b/include/Render/TreasureChestModelRender.hpp similarity index 54% rename from include/Render/BoxModelRender.hpp rename to include/Render/TreasureChestModelRender.hpp index a9b107b56..de254441e 100644 --- a/include/Render/BoxModelRender.hpp +++ b/include/Render/TreasureChestModelRender.hpp @@ -2,14 +2,14 @@ #include "ModelRender.hpp" -class BoxModelRender : public ModelRender { +class TreasureChestModelRender : public ModelRender { public: /* 00 (base) */ /* 5c */ bool isClosed; /* 5d */ - /* 00 */ virtual ~BoxModelRender() override; + /* 00 */ virtual ~TreasureChestModelRender() override; /* 3c */ virtual void vfunc_3c(ModelRenderCommandsData *renderData) override; - BoxModelRender(ItemModel *itemModel); + TreasureChestModelRender(ItemModel *itemModel); }; \ No newline at end of file diff --git a/src/14_Land/Render/BoxModelRender.cpp b/src/14_Land/Render/TreasureChestModelRender.cpp similarity index 62% rename from src/14_Land/Render/BoxModelRender.cpp rename to src/14_Land/Render/TreasureChestModelRender.cpp index f03a67227..7def3acec 100644 --- a/src/14_Land/Render/BoxModelRender.cpp +++ b/src/14_Land/Render/TreasureChestModelRender.cpp @@ -1,20 +1,20 @@ -#include "Render/BoxModelRender.hpp" +#include "Render/TreasureChestModelRender.hpp" extern "C" unk32 func_0201e388(void *param1, const char *param2); const char boxBModelName[20] = "box_B"; -BoxModelRender::BoxModelRender(ItemModel *itemModel) : +TreasureChestModelRender::TreasureChestModelRender(ItemModel *itemModel) : ModelRender(itemModel), isClosed(true) { this->UnkInit_Struct4_Params(2, 2); } -void BoxModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { +void TreasureChestModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { s32 boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, boxBModelName); if (renderData->currentCommand[1] == boneIndex && !this->isClosed) { *renderData->boneVisibilityPtr = 0; } } -BoxModelRender::~BoxModelRender() {} \ No newline at end of file +TreasureChestModelRender::~TreasureChestModelRender() {} \ No newline at end of file From cf36ad664573ae0bbe50fa7b4086d73f4789971d Mon Sep 17 00:00:00 2001 From: enzo Date: Mon, 2 Feb 2026 12:21:19 -0300 Subject: [PATCH 09/14] fix broken EUR matches --- config/eur/arm9/overlays/ov014/symbols.txt | 8 ++++---- config/usa/arm9/overlays/ov014/symbols.txt | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index dff38d146..5a40b98d4 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -153,9 +153,9 @@ func_ov014_02125e60 kind:function(arm,size=0x68) addr:0x02125e60 func_ov014_02125ec8 kind:function(arm,size=0x14) addr:0x02125ec8 func_ov014_02125edc kind:function(arm,size=0x8) addr:0x02125edc func_ov014_02125ee4 kind:function(arm,size=0x1c) addr:0x02125ee4 -_ZN14TreasureChestModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125f00 -_ZN14TreasureChestModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125f38 -_ZN14TreasureChestModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f80 +_ZN24TreasureChestModelRenderC2EP9ItemModel kind:function(arm,size=0x38) addr:0x02125f00 +_ZN24TreasureChestModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x48) addr:0x02125f38 +_ZN24TreasureChestModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02125f80 func_ov014_02125f9c kind:function(arm,size=0x60) addr:0x02125f9c func_ov014_02125ffc kind:function(arm,size=0x20) addr:0x02125ffc func_ov014_0212601c kind:function(arm,size=0x28) addr:0x0212601c @@ -1844,7 +1844,7 @@ data_ov014_02155fb0 kind:data(any) addr:0x02155fb0 data_ov014_02155fd4 kind:data(any) addr:0x02155fd4 data_ov014_02156078 kind:data(any) addr:0x02156078 data_ov014_0215611c kind:data(any) addr:0x0215611c -_ZTV14BoxModelRender kind:data(any) addr:0x021561b8 +_ZTV24TreasureChestModelRender kind:data(any) addr:0x021561b8 data_ov014_02156208 kind:data(any) addr:0x02156200 data_ov014_021562ac kind:data(any) addr:0x021562ac data_ov014_02156350 kind:data(any) addr:0x02156350 diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 22cf9035d..bc55dc0e8 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -1844,7 +1844,7 @@ data_ov014_02155fb0 kind:data(any) addr:0x02155f10 data_ov014_02155fd4 kind:data(any) addr:0x02155f34 data_ov014_02156078 kind:data(any) addr:0x02155fd8 data_ov014_0215611c kind:data(any) addr:0x0215607c -_ZTV14BoxModelRender kind:data(any) addr:0x02156118 +_ZTV24TreasureChestModelRender kind:data(any) addr:0x02156118 data_ov014_02156208 kind:data(any) addr:0x02156160 data_ov014_021562ac kind:data(any) addr:0x0215620c data_ov014_02156350 kind:data(any) addr:0x021562b0 From bca71345221ca44ffba7bce2ccf6f72f13d1b509 Mon Sep 17 00:00:00 2001 From: enzo Date: Thu, 5 Feb 2026 19:27:16 -0300 Subject: [PATCH 10/14] finished SignModelRender --- config/eur/arm9/overlays/ov014/delinks.txt | 5 +- config/eur/arm9/overlays/ov014/relocs.txt | 2 +- config/eur/arm9/overlays/ov014/symbols.txt | 24 ++--- config/usa/arm9/overlays/ov014/delinks.txt | 5 +- config/usa/arm9/overlays/ov014/relocs.txt | 2 +- config/usa/arm9/overlays/ov014/symbols.txt | 24 ++--- include/Render/ModelRender.hpp | 19 +++- include/Render/SignModelRender.hpp | 24 +++++ src/14_Land/Render/SignModelRender.cpp | 119 +++++++++++++++++++++ 9 files changed, 193 insertions(+), 31 deletions(-) create mode 100644 include/Render/SignModelRender.hpp create mode 100644 src/14_Land/Render/SignModelRender.cpp diff --git a/config/eur/arm9/overlays/ov014/delinks.txt b/config/eur/arm9/overlays/ov014/delinks.txt index 8d6c4a47b..c1777fccb 100644 --- a/config/eur/arm9/overlays/ov014/delinks.txt +++ b/config/eur/arm9/overlays/ov014/delinks.txt @@ -24,4 +24,7 @@ src/14_Land/Actor/Player/ActorRefill.cpp: src/14_Land/Render/TreasureChestModelRender.cpp: .text start:0x02125f00 end:0x02125f9c .rodata start:0x02153c24 end:0x02153c38 - .data start:0x021561b8 end:0x02156200 \ No newline at end of file + .data start:0x021561b8 end:0x02156200 + +src/14_Land/Render/SignModelRender.cpp: + .text start:0x0212d218 end:0x0212d598 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov014/relocs.txt b/config/eur/arm9/overlays/ov014/relocs.txt index fd959771f..123089ddb 100644 --- a/config/eur/arm9/overlays/ov014/relocs.txt +++ b/config/eur/arm9/overlays/ov014/relocs.txt @@ -1652,7 +1652,7 @@ from:0x0212d1e8 kind:arm_call_thumb to:0x01ff8214 module:itcm from:0x0212d20c kind:load to:0x02050f54 module:main from:0x0212d220 kind:arm_call_thumb to:0x020a956c module:overlay(0) from:0x0212d264 kind:arm_call to:0x02018cb8 module:main -from:0x0212d270 kind:load to:0x02156f78 module:overlay(14) +from:0x0212d270 kind:load to:0x02156f70 add:8 module:overlay(14) from:0x0212d274 kind:load to:0x0212d564 module:overlay(14) from:0x0212d298 kind:arm_call to:0x01fffb4c module:itcm from:0x0212d2ac kind:arm_call to:0x01fffbec module:itcm diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 5a40b98d4..253009934 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -389,16 +389,16 @@ func_ov014_0212d040 kind:function(arm,size=0x184) addr:0x0212d040 func_ov014_0212d1c4 kind:function(arm,size=0x8) addr:0x0212d1c4 func_ov014_0212d1cc kind:function(arm,size=0x44) addr:0x0212d1cc func_ov014_0212d210 kind:function(arm,size=0x8) addr:0x0212d210 -func_ov014_0212d218 kind:function(arm,size=0x60) addr:0x0212d218 -func_ov014_0212d278 kind:function(arm,size=0x74) addr:0x0212d278 -func_ov014_0212d2ec kind:function(arm,size=0x98) addr:0x0212d2ec -func_ov014_0212d384 kind:function(arm,size=0x118) addr:0x0212d384 -func_ov014_0212d49c kind:function(arm,size=0x70) addr:0x0212d49c -func_ov014_0212d50c kind:function(arm,size=0x28) addr:0x0212d50c -func_ov014_0212d534 kind:function(arm,size=0x18) addr:0x0212d534 -func_ov014_0212d54c kind:function(arm,size=0x18) addr:0x0212d54c -func_ov014_0212d564 kind:function(arm,size=0x18) addr:0x0212d564 -func_ov014_0212d57c kind:function(arm,size=0x1c) addr:0x0212d57c +_ZN15SignModelRenderC2EP9ItemModel kind:function(arm,size=0x60) addr:0x0212d218 +_ZN15SignModelRender18SetImpactDirectionEP5Vec3p kind:function(arm,size=0x74) addr:0x0212d278 +_ZN15SignModelRender24CalculateBrokenSignStateEv kind:function(arm,size=0x98) addr:0x0212d2ec +_ZN15SignModelRender25UpdateBrokenPiecePositionEP23ModelRenderCommandsData kind:function(arm,size=0x118) addr:0x0212d384 +_ZN15SignModelRender26SetTransparencyAfterDamageEP23ModelRenderCommandsData kind:function(arm,size=0x70) addr:0x0212d49c +_ZN15SignModelRender19func_ov014_0212d50cEP23ModelRenderCommandsData kind:function(arm,size=0x28) addr:0x0212d50c +_Z19func_ov014_0212d534P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0212d534 +_Z19func_ov014_0212d54cP23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0212d54c +_Z19func_ov014_0212d564P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0212d564 +_ZN15SignModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212d57c func_ov014_0212d598 kind:function(arm,size=0x38) addr:0x0212d598 func_ov014_0212d5d0 kind:function(arm,size=0x88) addr:0x0212d5d0 func_ov014_0212d658 kind:function(arm,size=0x28) addr:0x0212d658 @@ -1562,7 +1562,7 @@ data_ov014_02153cc0 kind:data(any) addr:0x02153cc0 data_ov014_02153cd4 kind:data(any) addr:0x02153cd4 data_ov014_02153ce8 kind:data(any) addr:0x02153ce8 data_ov014_02153cf8 kind:data(any) addr:0x02153cf8 -data_ov014_02153d0c kind:data(any) addr:0x02153d0c +@338 kind:data(any) addr:0x02153d0c data_ov014_02153d20 kind:data(any) addr:0x02153d20 data_ov014_02153d34 kind:data(any) addr:0x02153d34 data_ov014_02153d48 kind:data(any) addr:0x02153d48 @@ -1898,7 +1898,7 @@ data_ov014_02156e28 kind:data(any) addr:0x02156e28 data_ov014_02156ebc kind:data(any) addr:0x02156ebc data_ov014_02156ec4 kind:data(any) addr:0x02156ec4 data_ov014_02156ee4 kind:data(any) addr:0x02156ee4 -data_ov014_02156f78 kind:data(any) addr:0x02156f78 +_ZTV15SignModelRender kind:data(any) addr:0x02156f70 data_ov014_02156fc0 kind:data(any) addr:0x02156fc0 data_ov014_02157054 kind:data(any) addr:0x02157054 data_ov014_021570e0 kind:data(any) addr:0x021570e0 diff --git a/config/usa/arm9/overlays/ov014/delinks.txt b/config/usa/arm9/overlays/ov014/delinks.txt index 4cb5aa736..9c7ba5762 100644 --- a/config/usa/arm9/overlays/ov014/delinks.txt +++ b/config/usa/arm9/overlays/ov014/delinks.txt @@ -24,4 +24,7 @@ src/14_Land/Actor/Player/ActorRefill.cpp: src/14_Land/Render/TreasureChestModelRender.cpp: .text start:0x02125e80 end:0x02125f1c .rodata start:0x02153b80 end:0x02153b94 - .data start:0x02156118 end:0x02156160 \ No newline at end of file + .data start:0x02156118 end:0x02156160 + +src/14_Land/Render/SignModelRender.cpp: + .text start:0x0212d198 end:0x0212d518 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov014/relocs.txt b/config/usa/arm9/overlays/ov014/relocs.txt index 53072accf..3e4e0f7fa 100644 --- a/config/usa/arm9/overlays/ov014/relocs.txt +++ b/config/usa/arm9/overlays/ov014/relocs.txt @@ -1652,7 +1652,7 @@ from:0x0212d168 kind:arm_call_thumb to:0x01ff8214 module:itcm from:0x0212d18c kind:load to:0x02050f10 module:main from:0x0212d1a0 kind:arm_call_thumb to:0x020a950c module:overlay(0) from:0x0212d1e4 kind:arm_call to:0x02018cb8 module:main -from:0x0212d1f0 kind:load to:0x02156ed8 module:overlay(14) +from:0x0212d1f0 kind:load to:0x02156ed0 add:8 module:overlay(14) from:0x0212d1f4 kind:load to:0x0212d4e4 module:overlay(14) from:0x0212d218 kind:arm_call to:0x01fffb4c module:itcm from:0x0212d22c kind:arm_call to:0x01fffbec module:itcm diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index bc55dc0e8..8382a9be7 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -389,16 +389,16 @@ func_ov014_0212d040 kind:function(arm,size=0x184) addr:0x0212cfc0 func_ov014_0212d1c4 kind:function(arm,size=0x8) addr:0x0212d144 func_ov014_0212d1cc kind:function(arm,size=0x44) addr:0x0212d14c func_ov014_0212d210 kind:function(arm,size=0x8) addr:0x0212d190 -func_ov014_0212d218 kind:function(arm,size=0x60) addr:0x0212d198 -func_ov014_0212d278 kind:function(arm,size=0x74) addr:0x0212d1f8 -func_ov014_0212d2ec kind:function(arm,size=0x98) addr:0x0212d26c -func_ov014_0212d384 kind:function(arm,size=0x118) addr:0x0212d304 -func_ov014_0212d49c kind:function(arm,size=0x70) addr:0x0212d41c -func_ov014_0212d50c kind:function(arm,size=0x28) addr:0x0212d48c -func_ov014_0212d534 kind:function(arm,size=0x18) addr:0x0212d4b4 -func_ov014_0212d54c kind:function(arm,size=0x18) addr:0x0212d4cc -func_ov014_0212d564 kind:function(arm,size=0x18) addr:0x0212d4e4 -func_ov014_0212d57c kind:function(arm,size=0x1c) addr:0x0212d4fc +_ZN15SignModelRenderC2EP9ItemModel kind:function(arm,size=0x60) addr:0x0212d198 +_ZN15SignModelRender18SetImpactDirectionEP5Vec3p kind:function(arm,size=0x74) addr:0x0212d1f8 +_ZN15SignModelRender24CalculateBrokenSignStateEv kind:function(arm,size=0x98) addr:0x0212d26c +_ZN15SignModelRender25UpdateBrokenPiecePositionEP23ModelRenderCommandsData kind:function(arm,size=0x118) addr:0x0212d304 +_ZN15SignModelRender26SetTransparencyAfterDamageEP23ModelRenderCommandsData kind:function(arm,size=0x70) addr:0x0212d41c +_ZN15SignModelRender19func_ov014_0212d50cEP23ModelRenderCommandsData kind:function(arm,size=0x28) addr:0x0212d48c +_Z19func_ov014_0212d534P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0212d4b4 +_Z19func_ov014_0212d54cP23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0212d4cc +_Z19func_ov014_0212d564P23ModelRenderCommandsData kind:function(arm,size=0x18) addr:0x0212d4e4 +_ZN15SignModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212d4fc func_ov014_0212d598 kind:function(arm,size=0x38) addr:0x0212d518 func_ov014_0212d5d0 kind:function(arm,size=0x88) addr:0x0212d550 func_ov014_0212d658 kind:function(arm,size=0x28) addr:0x0212d5d8 @@ -1562,7 +1562,7 @@ data_ov014_02153cc0 kind:data(any) addr:0x02153c1c data_ov014_02153cd4 kind:data(any) addr:0x02153c30 data_ov014_02153ce8 kind:data(any) addr:0x02153c44 data_ov014_02153cf8 kind:data(any) addr:0x02153c54 -data_ov014_02153d0c kind:data(any) addr:0x02153c68 +@338 kind:data(any) addr:0x02153c68 data_ov014_02153d20 kind:data(any) addr:0x02153c7c data_ov014_02153d34 kind:data(any) addr:0x02153c90 data_ov014_02153d48 kind:data(any) addr:0x02153ca4 @@ -1898,7 +1898,7 @@ data_ov014_02156e28 kind:data(any) addr:0x02156d88 data_ov014_02156ebc kind:data(any) addr:0x02156e1c data_ov014_02156ec4 kind:data(any) addr:0x02156e24 data_ov014_02156ee4 kind:data(any) addr:0x02156e44 -data_ov014_02156f78 kind:data(any) addr:0x02156ed8 +_ZTV15SignModelRender kind:data(any) addr:0x02156ed0 data_ov014_02156fc0 kind:data(any) addr:0x02156f20 data_ov014_02157054 kind:data(any) addr:0x02156fb4 data_ov014_021570e0 kind:data(any) addr:0x02157040 diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index 4bac7cc9d..082ff8645 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -10,6 +10,13 @@ class ModelRender; +struct TransformationsStruct { + /* 00 */ u32 flags; + /* 04 */ unk8 mUnk_04[0x24]; + /* 28 */ Mat3p rotationMatrix; + /* 4c */ Vec3p translationVector; +}; + struct ModelRender_UnkBoneMatrixStruct { /* 00 */ unk8 mUnk_00[0x28]; /* 28 */ Mat3p mUnk_28; @@ -63,11 +70,17 @@ struct ModelRenderCommandsData { /* 08 */ u32 flags; /* 0c */ unk8 mUnk_0c[0x10]; /* 1c */ void *mUnkFunc_1c; - /* 20 */ unk8 mUnk_20[0x70]; + /* 20 */ unk8 mUnk_20[0x4]; + /* 24 */ void *mUnkFunc_24; + /* 28 */ unk8 mUnk_28[0x68]; /* 90 */ unk8 mUnk_90; - /* 91 */ unk8 mUnk_91[0x1f]; + /* 91 */ unk8 mUnk_91; + /* 92 */ unk8 mUnk_92; + /* 93 */ unk8 mUnk_93[0x1a]; + /* ad */ u8 currentMaterial; + /* ae */ unk8 mUnk_ae[2]; /* b0 */ ModelRender_MaterialData *unkMaterialDataPTR; - /* b4 */ unk8 mUnk_b4[0x4]; + /* b4 */ TransformationsStruct *transformations; /* b8 */ u32 *boneVisibilityPtr; /* bc */ unk8 mUnk_bc[0x18]; /* d4 */ void *boneList; diff --git a/include/Render/SignModelRender.hpp b/include/Render/SignModelRender.hpp new file mode 100644 index 000000000..af60a477d --- /dev/null +++ b/include/Render/SignModelRender.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "ModelRender.hpp" + +class SignModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ u16 transparency; + /* 5e */ s16 xRotationAngle; + /* 60 */ s16 yRotationAngle; + /* 62 */ u16 impactAngle; + /* 64 */ Vec3p position; + /* 70 */ Vec3p acceleration; + /* 7c */ + + /* 00 */ virtual ~SignModelRender() override; + + SignModelRender(ItemModel *itemModel); + void SetImpactDirection(Vec3p *dir); + bool CalculateBrokenSignState(); + void UpdateBrokenPiecePosition(ModelRenderCommandsData *renderData); + void SetTransparencyAfterDamage(ModelRenderCommandsData *renderData); + void func_ov014_0212d50c(ModelRenderCommandsData *renderData); +}; \ No newline at end of file diff --git a/src/14_Land/Render/SignModelRender.cpp b/src/14_Land/Render/SignModelRender.cpp new file mode 100644 index 000000000..790ea89fd --- /dev/null +++ b/src/14_Land/Render/SignModelRender.cpp @@ -0,0 +1,119 @@ +#include "Render/SignModelRender.hpp" + +extern "C" void func_02018cb8(ModelRender_UnkStruct_4 *param_1, void (*param_2)(ModelRenderCommandsData *)); +extern "C" void ApproachAngle_thunk(u16 *src, s16 dst, u32 param3); +extern "C" unk32 func_0201e388(void *param1, const char *param2); + +void func_ov014_0212d564(ModelRenderCommandsData *renderData); +void func_ov014_0212d534(ModelRenderCommandsData *renderData); +void func_ov014_0212d54c(ModelRenderCommandsData *renderData); + +SignModelRender::SignModelRender(ItemModel *itemModel) : + ModelRender(itemModel), + transparency(0), + xRotationAngle(0), + yRotationAngle(0), + impactAngle(0) { + position.x = 0; + position.y = 0; + position.z = 0; + acceleration.x = 0; + acceleration.y = 0; + acceleration.z = 0; + this->mUnk_04.mUnk_2c = this; + func_02018cb8(&this->mUnk_04, &func_ov014_0212d564); +} + +void SignModelRender::SetImpactDirection(Vec3p *dir) { + Vec3p tempVec = *dir; + if (Vec3p_TryNormalize(&tempVec)) { + Vec3p_Scale(&tempVec, FLOAT_TO_Q20(0.04)); + } + + q20 tempz = tempVec.z; + q20 tempx = tempVec.x; + + this->acceleration.x = tempx; + this->acceleration.y = FLOAT_TO_Q20(0.15); + this->acceleration.z = tempz; + this->impactAngle = FX_Atan2Idx(dir->x, dir->z); + this->transparency = 0; +} + +bool SignModelRender::CalculateBrokenSignState() { + this->acceleration.y -= FLOAT_TO_Q20(0.05); + Vec3p_Add(&this->position, &this->acceleration, &this->position); + if (this->position.y <= -FLOAT_TO_Q20(0.8)) { + this->acceleration.x = 0; + this->acceleration.y = 0; + this->acceleration.z = 0; + this->position.y = -FLOAT_TO_Q20(0.8); + this->transparency += 1; + } else { + ApproachAngle_thunk((u16 *) &this->yRotationAngle, this->impactAngle, 1000); + } + ApproachAngle_thunk((u16 *) &this->xRotationAngle, -FLOAT_TO_Q20(4), 3000); + return 0x1e <= this->transparency; +} + +void SignModelRender::UpdateBrokenPiecePosition(ModelRenderCommandsData *renderData) { + if (renderData->currentCommand[1] == func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "kanbanB")) { + u32 flag = renderData->transformations->flags; + u32 newFlag = flag & ~4; + if (this->xRotationAngle != 0) { + newFlag = flag & ~2; + } + renderData->transformations->flags = newFlag; + + (renderData->transformations->translationVector).y = (this->position).y + FLOAT_TO_Q20(0.8); + (renderData->transformations->translationVector).x = (this->position).x; + (renderData->transformations->translationVector).z = (this->position).z; + + if (this->xRotationAngle != 0) { + Mat3p_InitXRotation(&renderData->transformations->rotationMatrix, SIN((u16) this->xRotationAngle), + COS((u16) this->xRotationAngle)); + Mat3p rotMatrix; + Mat3p_InitYRotation(&rotMatrix, SIN((u16) this->yRotationAngle), COS((u16) this->yRotationAngle)); + Mat3p_Multiply(&renderData->transformations->rotationMatrix, &rotMatrix, + &renderData->transformations->rotationMatrix); + } + } +} + +void SignModelRender::SetTransparencyAfterDamage(ModelRenderCommandsData *renderData) { + if (this->transparency != 0) { + ItemModel *itemPTR = renderData->unkStruct4->mLcdcAddr; + u32 matIndex = func_0201e388((void *) ((int) itemPTR + itemPTR->materialsOffset + 4), "kanban_mat"); + s32 currentMaterial; + ModelRender_MaterialData *materialPtr = renderData->unkMaterialDataPTR; + if ((renderData->flags & 8) != 0) { + currentMaterial = (s32) renderData->currentMaterial; + } else { + currentMaterial = -1; + } + if (matIndex == currentMaterial) { + materialPtr->polygon_attr = materialPtr->polygon_attr & 0xffe0ffff | (0x1f - this->transparency) << 16; + } + } +} + +void SignModelRender::func_ov014_0212d50c(ModelRenderCommandsData *renderData) { + renderData->mUnkFunc_24 = (void *) &func_ov014_0212d534; + renderData->mUnk_92 = 2; + renderData->mUnkFunc_1c = (void *) &func_ov014_0212d54c; + renderData->mUnk_90 = 2; +} + +void func_ov014_0212d534(ModelRenderCommandsData *renderData) { + ((SignModelRender *) renderData->unkStruct4->mUnk_2c)->UpdateBrokenPiecePosition(renderData); +} + +void func_ov014_0212d54c(ModelRenderCommandsData *renderData) { + ((SignModelRender *) renderData->unkStruct4->mUnk_2c)->SetTransparencyAfterDamage(renderData); +} + +void func_ov014_0212d564(ModelRenderCommandsData *renderData) { + ((SignModelRender *) renderData->unkStruct4->mUnk_2c)->func_ov014_0212d50c(renderData); +} + +SignModelRender::~SignModelRender() {} \ No newline at end of file From 0382d1d13e3168b0b5579a139d1d38bc6de83110 Mon Sep 17 00:00:00 2001 From: enzo Date: Thu, 5 Feb 2026 22:50:24 -0300 Subject: [PATCH 11/14] started BombModelRender.cpp --- config/eur/arm9/overlays/ov014/delinks.txt | 5 +- config/eur/arm9/overlays/ov014/symbols.txt | 16 ++-- config/usa/arm9/overlays/ov014/delinks.txt | 5 +- config/usa/arm9/overlays/ov014/symbols.txt | 16 ++-- include/Render/BombModelRender.hpp | 18 ++++ include/Render/ModelRender.hpp | 10 ++- src/14_Land/Render/BombModelRender.cpp | 95 ++++++++++++++++++++++ 7 files changed, 144 insertions(+), 21 deletions(-) create mode 100644 include/Render/BombModelRender.hpp create mode 100644 src/14_Land/Render/BombModelRender.cpp diff --git a/config/eur/arm9/overlays/ov014/delinks.txt b/config/eur/arm9/overlays/ov014/delinks.txt index c1777fccb..00aa365a6 100644 --- a/config/eur/arm9/overlays/ov014/delinks.txt +++ b/config/eur/arm9/overlays/ov014/delinks.txt @@ -27,4 +27,7 @@ src/14_Land/Render/TreasureChestModelRender.cpp: .data start:0x021561b8 end:0x02156200 src/14_Land/Render/SignModelRender.cpp: - .text start:0x0212d218 end:0x0212d598 \ No newline at end of file + .text start:0x0212d218 end:0x0212d598 + +src/14_Land/Render/BombModelRender.cpp: + .text start:0x0212e1f4 end:0x0212e448 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 253009934..64a14ba9f 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -431,8 +431,8 @@ func_ov014_0212e1b0 kind:function(arm,size=0x3c) addr:0x0212e1b0 func_ov014_0212e1ec kind:function(arm,size=0x8) addr:0x0212e1ec func_ov014_0212e1f4 kind:function(arm,size=0x40) addr:0x0212e1f4 func_ov014_0212e234 kind:function(arm,size=0x30) addr:0x0212e234 -func_ov014_0212e264 kind:function(arm,size=0x1c8) addr:0x0212e264 -func_ov014_0212e42c kind:function(arm,size=0x1c) addr:0x0212e42c +_ZN15BombModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x1c8) addr:0x0212e264 +_ZN15BombModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212e42c func_ov014_0212e448 kind:function(arm,size=0x38) addr:0x0212e448 func_ov014_0212e480 kind:function(arm,size=0x80) addr:0x0212e480 func_ov014_0212e500 kind:function(arm,size=0x28) addr:0x0212e500 @@ -1563,12 +1563,12 @@ data_ov014_02153cd4 kind:data(any) addr:0x02153cd4 data_ov014_02153ce8 kind:data(any) addr:0x02153ce8 data_ov014_02153cf8 kind:data(any) addr:0x02153cf8 @338 kind:data(any) addr:0x02153d0c -data_ov014_02153d20 kind:data(any) addr:0x02153d20 -data_ov014_02153d34 kind:data(any) addr:0x02153d34 -data_ov014_02153d48 kind:data(any) addr:0x02153d48 -data_ov014_02153d5c kind:data(any) addr:0x02153d5c -data_ov014_02153d70 kind:data(any) addr:0x02153d70 -data_ov014_02153d84 kind:data(any) addr:0x02153d84 +@319 kind:data(any) addr:0x02153d20 +@320 kind:data(any) addr:0x02153d34 +@321 kind:data(any) addr:0x02153d48 +@322 kind:data(any) addr:0x02153d5c +@323 kind:data(any) addr:0x02153d70 +@324 kind:data(any) addr:0x02153d84 data_ov014_02153d98 kind:data(any) addr:0x02153d98 data_ov014_02153dc0 kind:data(any) addr:0x02153dc0 data_ov014_02153dd4 kind:data(any) addr:0x02153dd4 diff --git a/config/usa/arm9/overlays/ov014/delinks.txt b/config/usa/arm9/overlays/ov014/delinks.txt index 9c7ba5762..87358a062 100644 --- a/config/usa/arm9/overlays/ov014/delinks.txt +++ b/config/usa/arm9/overlays/ov014/delinks.txt @@ -27,4 +27,7 @@ src/14_Land/Render/TreasureChestModelRender.cpp: .data start:0x02156118 end:0x02156160 src/14_Land/Render/SignModelRender.cpp: - .text start:0x0212d198 end:0x0212d518 \ No newline at end of file + .text start:0x0212d198 end:0x0212d518 + +src/14_Land/Render/BombModelRender.cpp: + .text start:0x0212e174 end:0x0212e3c8 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 8382a9be7..425a8a906 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -431,8 +431,8 @@ func_ov014_0212e1b0 kind:function(arm,size=0x3c) addr:0x0212e130 func_ov014_0212e1ec kind:function(arm,size=0x8) addr:0x0212e16c func_ov014_0212e1f4 kind:function(arm,size=0x40) addr:0x0212e174 func_ov014_0212e234 kind:function(arm,size=0x30) addr:0x0212e1b4 -func_ov014_0212e264 kind:function(arm,size=0x1c8) addr:0x0212e1e4 -func_ov014_0212e42c kind:function(arm,size=0x1c) addr:0x0212e3ac +_ZN15BombModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x1c8) addr:0x0212e1e4 +_ZN15BombModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212e3ac func_ov014_0212e448 kind:function(arm,size=0x38) addr:0x0212e3c8 func_ov014_0212e480 kind:function(arm,size=0x80) addr:0x0212e400 func_ov014_0212e500 kind:function(arm,size=0x28) addr:0x0212e480 @@ -1563,12 +1563,12 @@ data_ov014_02153cd4 kind:data(any) addr:0x02153c30 data_ov014_02153ce8 kind:data(any) addr:0x02153c44 data_ov014_02153cf8 kind:data(any) addr:0x02153c54 @338 kind:data(any) addr:0x02153c68 -data_ov014_02153d20 kind:data(any) addr:0x02153c7c -data_ov014_02153d34 kind:data(any) addr:0x02153c90 -data_ov014_02153d48 kind:data(any) addr:0x02153ca4 -data_ov014_02153d5c kind:data(any) addr:0x02153cb8 -data_ov014_02153d70 kind:data(any) addr:0x02153ccc -data_ov014_02153d84 kind:data(any) addr:0x02153ce0 +@319 kind:data(any) addr:0x02153c7c +@320 kind:data(any) addr:0x02153c90 +@321 kind:data(any) addr:0x02153ca4 +@322 kind:data(any) addr:0x02153cb8 +@323 kind:data(any) addr:0x02153ccc +@324 kind:data(any) addr:0x02153ce0 data_ov014_02153d98 kind:data(any) addr:0x02153cf4 data_ov014_02153dc0 kind:data(any) addr:0x02153d1c data_ov014_02153dd4 kind:data(any) addr:0x02153d30 diff --git a/include/Render/BombModelRender.hpp b/include/Render/BombModelRender.hpp new file mode 100644 index 000000000..8e2f87ccd --- /dev/null +++ b/include/Render/BombModelRender.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "ModelRender.hpp" + +class BombModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ unk32 mUnk_5c; + /* 60 */ unk32 mUnk_60; + /* 64 */ q20 mUnk_64; + /* 68 */ + + /* 00 */ virtual ~BombModelRender() override; + /* 3c */ virtual void vfunc_3c(ModelRenderCommandsData *renderData) override; + + BombModelRender(ItemModel *itemModel, unk32 param2, unk32 param3); + void func_ov014_0212e234(); +}; \ No newline at end of file diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index 082ff8645..24090e8ed 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -12,9 +12,11 @@ class ModelRender; struct TransformationsStruct { /* 00 */ u32 flags; - /* 04 */ unk8 mUnk_04[0x24]; + /* 04 */ Vec3p scaleVector; + /* 10 */ unk8 mUnk_10[0x18]; /* 28 */ Mat3p rotationMatrix; /* 4c */ Vec3p translationVector; + /* 50 */ }; struct ModelRender_UnkBoneMatrixStruct { @@ -76,9 +78,11 @@ struct ModelRenderCommandsData { /* 90 */ unk8 mUnk_90; /* 91 */ unk8 mUnk_91; /* 92 */ unk8 mUnk_92; - /* 93 */ unk8 mUnk_93[0x1a]; + /* 93 */ unk8 mUnk_93[0x19]; + /* ac */ u8 boneVisibilityIndex; /* ad */ u8 currentMaterial; - /* ae */ unk8 mUnk_ae[2]; + /* ae */ u8 boneMatrixIndex; + /* af */ unk8 mUnk_af; /* b0 */ ModelRender_MaterialData *unkMaterialDataPTR; /* b4 */ TransformationsStruct *transformations; /* b8 */ u32 *boneVisibilityPtr; diff --git a/src/14_Land/Render/BombModelRender.cpp b/src/14_Land/Render/BombModelRender.cpp new file mode 100644 index 000000000..ad0d23fb6 --- /dev/null +++ b/src/14_Land/Render/BombModelRender.cpp @@ -0,0 +1,95 @@ +#include "Render/BombModelRender.hpp" + +extern "C" unk32 func_0201e388(void *param1, const char *param2); + +void func_ov014_0212e234(); + +BombModelRender::BombModelRender(ItemModel *itemModel, unk32 param2, unk32 param3) : + ModelRender(itemModel), + mUnk_5c(param3), + mUnk_60(param2), + mUnk_64(0x1000) { + this->func_ov014_0212e234(); +} + +void BombModelRender::func_ov014_0212e234() { + if (this->mUnk_60 != 0) { + this->UnkInit_Struct4_Params(2, 2); + } else { + this->UnkInit_Struct4_Params(6, 2); + } +} + +void BombModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { + u32 boneIndex; + u32 visibilityIndex; + + switch (this->mUnk_60) { + case 1: + if (this->mUnk_5c == 1) { + boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "base"); + } else { + boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "Fbomb_h"); + } + + if ((renderData->flags & 4) != 0) { + visibilityIndex = renderData->boneVisibilityIndex; + } else { + visibilityIndex = -1; + } + + if (boneIndex == visibilityIndex) { + *renderData->boneVisibilityPtr = 0; + } + break; + + case 2: + if (this->mUnk_5c == 1) { + boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "seed"); + } else { + boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "Fbomb_f"); + } + if ((renderData->flags & 4) != 0) { + visibilityIndex = renderData->boneVisibilityIndex; + } else { + visibilityIndex = -1; + } + if (boneIndex == visibilityIndex) { + *renderData->boneVisibilityPtr = 0; + } + break; + + default: + if (this->mUnk_5c == 1) { + boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "seed"); + } else { + boneIndex = func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "Fbomb_f"); + } + + if ((renderData->flags & 0x10) != 0) { + visibilityIndex = renderData->boneMatrixIndex; + } else { + visibilityIndex = -1; + } + + if (boneIndex == visibilityIndex) { + TransformationsStruct *tf = renderData->transformations; + u32 flags = tf->flags; + flags &= ~1; + if (this->mUnk_64 != INT_TO_Q20(1)) { + flags &= ~4; + } + tf->flags = flags; + tf->scaleVector.y = this->mUnk_64; + tf->scaleVector.x = this->mUnk_64; + tf->scaleVector.z = this->mUnk_64; + if (this->mUnk_64 != INT_TO_Q20(1)) { + renderData->transformations->translationVector.y = MUL_Q20(this->mUnk_64, FLOAT_TO_Q20(0.2)); + renderData->transformations->translationVector.x = 0; + renderData->transformations->translationVector.z = 0; + } + } + } +} + +BombModelRender::~BombModelRender() {} \ No newline at end of file From ba17024e2a59d651278951f2dae060e7d66f85cc Mon Sep 17 00:00:00 2001 From: enzo Date: Fri, 6 Feb 2026 09:57:51 -0300 Subject: [PATCH 12/14] renamed BombModelRender to FlowerModelRender --- config/eur/arm9/overlays/ov014/delinks.txt | 6 ++++-- config/eur/arm9/overlays/ov014/relocs.txt | 2 +- config/eur/arm9/overlays/ov014/symbols.txt | 12 ++++++------ config/usa/arm9/overlays/ov014/delinks.txt | 6 ++++-- config/usa/arm9/overlays/ov014/relocs.txt | 2 +- config/usa/arm9/overlays/ov014/symbols.txt | 12 ++++++------ ...{BombModelRender.hpp => FlowerModelRender.hpp} | 6 +++--- ...{BombModelRender.cpp => FlowerModelRender.cpp} | 15 +++++++++------ 8 files changed, 34 insertions(+), 27 deletions(-) rename include/Render/{BombModelRender.hpp => FlowerModelRender.hpp} (62%) rename src/14_Land/Render/{BombModelRender.cpp => FlowerModelRender.cpp} (88%) diff --git a/config/eur/arm9/overlays/ov014/delinks.txt b/config/eur/arm9/overlays/ov014/delinks.txt index 00aa365a6..c8267fcdb 100644 --- a/config/eur/arm9/overlays/ov014/delinks.txt +++ b/config/eur/arm9/overlays/ov014/delinks.txt @@ -29,5 +29,7 @@ src/14_Land/Render/TreasureChestModelRender.cpp: src/14_Land/Render/SignModelRender.cpp: .text start:0x0212d218 end:0x0212d598 -src/14_Land/Render/BombModelRender.cpp: - .text start:0x0212e1f4 end:0x0212e448 \ No newline at end of file +src/14_Land/Render/FlowerModelRender.cpp: + .text start:0x0212e1f4 end:0x0212e448 + .rodata start:0x02153d20 end:0x02153d98 + .data start:0x02157108 end:0x02157150 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov014/relocs.txt b/config/eur/arm9/overlays/ov014/relocs.txt index 123089ddb..788e0d872 100644 --- a/config/eur/arm9/overlays/ov014/relocs.txt +++ b/config/eur/arm9/overlays/ov014/relocs.txt @@ -1746,7 +1746,7 @@ from:0x0212e168 kind:arm_call to:0x0212e234 module:overlay(14) from:0x0212e1a0 kind:arm_call to:0x0208b8e0 module:overlay(0) from:0x0212e204 kind:arm_call_thumb to:0x020a956c module:overlay(0) from:0x0212e224 kind:arm_call to:0x0212e234 module:overlay(14) -from:0x0212e230 kind:load to:0x02157110 module:overlay(14) +from:0x0212e230 kind:load to:0x02157108 add:8 module:overlay(14) from:0x0212e24c kind:arm_call to:0x020a9998 module:overlay(0) from:0x0212e25c kind:arm_call to:0x020a9998 module:overlay(0) from:0x0212e2a4 kind:arm_call to:0x0201e388 module:main diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 64a14ba9f..5be667a58 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -413,7 +413,7 @@ func_ov014_0212d8d0 kind:function(arm,size=0x20) addr:0x0212d8d0 func_ov014_0212d8f0 kind:function(arm,size=0x8) addr:0x0212d8f0 func_ov014_0212d8f8 kind:function(arm,size=0x38) addr:0x0212d8f8 func_ov014_0212d930 kind:function(arm,size=0xa4) addr:0x0212d930 -func_ov014_0212d9d4 kind:function(arm,size=0x14) addr:0x0212d9d4 +_ZN17FlowerModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0212d9d4 func_ov014_0212d9e8 kind:function(arm,size=0x28) addr:0x0212d9e8 func_ov014_0212da10 kind:function(arm,size=0x30) addr:0x0212da10 func_ov014_0212da40 kind:function(arm,size=0xa0) addr:0x0212da40 @@ -429,10 +429,10 @@ func_ov014_0212e110 kind:function(arm,size=0x2c) addr:0x0212e110 func_ov014_0212e13c kind:function(arm,size=0x74) addr:0x0212e13c func_ov014_0212e1b0 kind:function(arm,size=0x3c) addr:0x0212e1b0 func_ov014_0212e1ec kind:function(arm,size=0x8) addr:0x0212e1ec -func_ov014_0212e1f4 kind:function(arm,size=0x40) addr:0x0212e1f4 -func_ov014_0212e234 kind:function(arm,size=0x30) addr:0x0212e234 -_ZN15BombModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x1c8) addr:0x0212e264 -_ZN15BombModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212e42c +_ZN17FlowerModelRenderC1EP9ItemModelii kind:function(arm,size=0x40) addr:0x0212e1f4 +_ZN17FlowerModelRender19func_ov014_0212e234Ev kind:function(arm,size=0x30) addr:0x0212e234 +_ZN17FlowerModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x1c8) addr:0x0212e264 +_ZN17FlowerModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212e42c func_ov014_0212e448 kind:function(arm,size=0x38) addr:0x0212e448 func_ov014_0212e480 kind:function(arm,size=0x80) addr:0x0212e480 func_ov014_0212e500 kind:function(arm,size=0x28) addr:0x0212e500 @@ -1904,7 +1904,7 @@ data_ov014_02157054 kind:data(any) addr:0x02157054 data_ov014_021570e0 kind:data(any) addr:0x021570e0 data_ov014_021570e8 kind:data(any) addr:0x021570e8 data_ov014_021570f0 kind:data(any) addr:0x021570f0 -data_ov014_02157110 kind:data(any) addr:0x02157110 +_ZTV17FlowerModelRender kind:data(any) addr:0x02157108 data_ov014_02157150 kind:data(any) addr:0x02157150 data_ov014_02157160 kind:data(any) addr:0x02157160 data_ov014_021571f4 kind:data(any) addr:0x021571f4 diff --git a/config/usa/arm9/overlays/ov014/delinks.txt b/config/usa/arm9/overlays/ov014/delinks.txt index 87358a062..1bdf57daf 100644 --- a/config/usa/arm9/overlays/ov014/delinks.txt +++ b/config/usa/arm9/overlays/ov014/delinks.txt @@ -29,5 +29,7 @@ src/14_Land/Render/TreasureChestModelRender.cpp: src/14_Land/Render/SignModelRender.cpp: .text start:0x0212d198 end:0x0212d518 -src/14_Land/Render/BombModelRender.cpp: - .text start:0x0212e174 end:0x0212e3c8 \ No newline at end of file +src/14_Land/Render/FlowerModelRender.cpp: + .text start:0x0212e174 end:0x0212e3c8 + .rodata start:0x02153c7c end:0x02153cf4 + .data start:0x02157068 end:0x021570b0 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov014/relocs.txt b/config/usa/arm9/overlays/ov014/relocs.txt index 3e4e0f7fa..d74cf7429 100644 --- a/config/usa/arm9/overlays/ov014/relocs.txt +++ b/config/usa/arm9/overlays/ov014/relocs.txt @@ -1746,7 +1746,7 @@ from:0x0212e0e8 kind:arm_call to:0x0212e1b4 module:overlay(14) from:0x0212e120 kind:arm_call to:0x0208b880 module:overlay(0) from:0x0212e184 kind:arm_call_thumb to:0x020a950c module:overlay(0) from:0x0212e1a4 kind:arm_call to:0x0212e1b4 module:overlay(14) -from:0x0212e1b0 kind:load to:0x02157070 module:overlay(14) +from:0x0212e1b0 kind:load to:0x02157068 add:8 module:overlay(14) from:0x0212e1cc kind:arm_call to:0x020a9938 module:overlay(0) from:0x0212e1dc kind:arm_call to:0x020a9938 module:overlay(0) from:0x0212e224 kind:arm_call to:0x0201e388 module:main diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 425a8a906..ef635a00c 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -413,7 +413,7 @@ func_ov014_0212d8d0 kind:function(arm,size=0x20) addr:0x0212d850 func_ov014_0212d8f0 kind:function(arm,size=0x8) addr:0x0212d870 func_ov014_0212d8f8 kind:function(arm,size=0x38) addr:0x0212d878 func_ov014_0212d930 kind:function(arm,size=0xa4) addr:0x0212d8b0 -func_ov014_0212d9d4 kind:function(arm,size=0x14) addr:0x0212d954 +_ZN17FlowerModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0212d954 func_ov014_0212d9e8 kind:function(arm,size=0x28) addr:0x0212d968 func_ov014_0212da10 kind:function(arm,size=0x30) addr:0x0212d990 func_ov014_0212da40 kind:function(arm,size=0xa0) addr:0x0212d9c0 @@ -429,10 +429,10 @@ func_ov014_0212e110 kind:function(arm,size=0x2c) addr:0x0212e090 func_ov014_0212e13c kind:function(arm,size=0x74) addr:0x0212e0bc func_ov014_0212e1b0 kind:function(arm,size=0x3c) addr:0x0212e130 func_ov014_0212e1ec kind:function(arm,size=0x8) addr:0x0212e16c -func_ov014_0212e1f4 kind:function(arm,size=0x40) addr:0x0212e174 -func_ov014_0212e234 kind:function(arm,size=0x30) addr:0x0212e1b4 -_ZN15BombModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x1c8) addr:0x0212e1e4 -_ZN15BombModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212e3ac +_ZN17FlowerModelRenderC1EP9ItemModelii kind:function(arm,size=0x40) addr:0x0212e174 +_ZN17FlowerModelRender19func_ov014_0212e234Ev kind:function(arm,size=0x30) addr:0x0212e1b4 +_ZN17FlowerModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x1c8) addr:0x0212e1e4 +_ZN17FlowerModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x0212e3ac func_ov014_0212e448 kind:function(arm,size=0x38) addr:0x0212e3c8 func_ov014_0212e480 kind:function(arm,size=0x80) addr:0x0212e400 func_ov014_0212e500 kind:function(arm,size=0x28) addr:0x0212e480 @@ -1904,7 +1904,7 @@ data_ov014_02157054 kind:data(any) addr:0x02156fb4 data_ov014_021570e0 kind:data(any) addr:0x02157040 data_ov014_021570e8 kind:data(any) addr:0x02157048 data_ov014_021570f0 kind:data(any) addr:0x02157050 -data_ov014_02157110 kind:data(any) addr:0x02157070 +_ZTV17FlowerModelRender kind:data(any) addr:0x02157068 data_ov014_02157150 kind:data(any) addr:0x021570b0 data_ov014_02157160 kind:data(any) addr:0x021570c0 data_ov014_021571f4 kind:data(any) addr:0x02157154 diff --git a/include/Render/BombModelRender.hpp b/include/Render/FlowerModelRender.hpp similarity index 62% rename from include/Render/BombModelRender.hpp rename to include/Render/FlowerModelRender.hpp index 8e2f87ccd..96a892a83 100644 --- a/include/Render/BombModelRender.hpp +++ b/include/Render/FlowerModelRender.hpp @@ -2,7 +2,7 @@ #include "ModelRender.hpp" -class BombModelRender : public ModelRender { +class FlowerModelRender : public ModelRender { public: /* 00 (base) */ /* 5c */ unk32 mUnk_5c; @@ -10,9 +10,9 @@ class BombModelRender : public ModelRender { /* 64 */ q20 mUnk_64; /* 68 */ - /* 00 */ virtual ~BombModelRender() override; + /* 00 */ virtual ~FlowerModelRender() override; /* 3c */ virtual void vfunc_3c(ModelRenderCommandsData *renderData) override; - BombModelRender(ItemModel *itemModel, unk32 param2, unk32 param3); + FlowerModelRender(ItemModel *itemModel, unk32 param2, unk32 param3); void func_ov014_0212e234(); }; \ No newline at end of file diff --git a/src/14_Land/Render/BombModelRender.cpp b/src/14_Land/Render/FlowerModelRender.cpp similarity index 88% rename from src/14_Land/Render/BombModelRender.cpp rename to src/14_Land/Render/FlowerModelRender.cpp index ad0d23fb6..81ffefcaa 100644 --- a/src/14_Land/Render/BombModelRender.cpp +++ b/src/14_Land/Render/FlowerModelRender.cpp @@ -1,18 +1,18 @@ -#include "Render/BombModelRender.hpp" +#include "Render/FlowerModelRender.hpp" extern "C" unk32 func_0201e388(void *param1, const char *param2); void func_ov014_0212e234(); -BombModelRender::BombModelRender(ItemModel *itemModel, unk32 param2, unk32 param3) : +FlowerModelRender::FlowerModelRender(ItemModel *itemModel, unk32 param2, unk32 param3) : ModelRender(itemModel), mUnk_5c(param3), mUnk_60(param2), - mUnk_64(0x1000) { + mUnk_64(INT_TO_Q20(1)) { this->func_ov014_0212e234(); } -void BombModelRender::func_ov014_0212e234() { +void FlowerModelRender::func_ov014_0212e234() { if (this->mUnk_60 != 0) { this->UnkInit_Struct4_Params(2, 2); } else { @@ -20,7 +20,8 @@ void BombModelRender::func_ov014_0212e234() { } } -void BombModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { +#pragma readonly_strings on +void FlowerModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { u32 boneIndex; u32 visibilityIndex; @@ -89,7 +90,9 @@ void BombModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { renderData->transformations->translationVector.z = 0; } } + break; } } +#pragma readonly_strings reset -BombModelRender::~BombModelRender() {} \ No newline at end of file +FlowerModelRender::~FlowerModelRender() {} \ No newline at end of file From bd093a17f6a36ca5c58a88ac0d78aabe23cc132b Mon Sep 17 00:00:00 2001 From: enzo Date: Fri, 6 Feb 2026 10:13:46 -0300 Subject: [PATCH 13/14] fix eur TreasureChestModelRender match --- config/eur/arm9/overlays/ov014/symbols.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 5be667a58..15ca18514 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -130,7 +130,7 @@ func_ov014_02125130 kind:function(arm,size=0x14) addr:0x02125130 func_ov014_02125144 kind:function(arm,size=0x8) addr:0x02125144 func_ov014_0212514c kind:function(arm,size=0x1c) addr:0x0212514c func_ov014_02125168 kind:function(arm,size=0xbc) addr:0x02125168 -_ZN14TreasureChestModelRenderD1Ev kind:function(arm,size=0x14) addr:0x02125224 +_ZN24TreasureChestModelRenderD1Ev kind:function(arm,size=0x14) addr:0x02125224 func_ov014_02125238 kind:function(arm,size=0x28) addr:0x02125238 func_ov014_02125260 kind:function(arm,size=0x30) addr:0x02125260 func_ov014_02125290 kind:function(arm,size=0x28) addr:0x02125290 From 0c6c57416d2db6bfa7b019e8ad4cacb7af3468f7 Mon Sep 17 00:00:00 2001 From: enzo Date: Fri, 6 Feb 2026 12:13:18 -0300 Subject: [PATCH 14/14] add SpikeModelRender.cpp --- config/eur/arm9/overlays/ov014/delinks.txt | 7 +++++- config/eur/arm9/overlays/ov014/relocs.txt | 4 ++-- config/eur/arm9/overlays/ov014/symbols.txt | 14 +++++------ config/usa/arm9/overlays/ov014/delinks.txt | 7 +++++- config/usa/arm9/overlays/ov014/relocs.txt | 4 ++-- config/usa/arm9/overlays/ov014/symbols.txt | 14 +++++------ include/Render/SpikeModelRender.hpp | 16 +++++++++++++ src/14_Land/Render/SpikeModelRender.cpp | 27 ++++++++++++++++++++++ 8 files changed, 73 insertions(+), 20 deletions(-) create mode 100644 include/Render/SpikeModelRender.hpp create mode 100644 src/14_Land/Render/SpikeModelRender.cpp diff --git a/config/eur/arm9/overlays/ov014/delinks.txt b/config/eur/arm9/overlays/ov014/delinks.txt index c8267fcdb..f912f6629 100644 --- a/config/eur/arm9/overlays/ov014/delinks.txt +++ b/config/eur/arm9/overlays/ov014/delinks.txt @@ -32,4 +32,9 @@ src/14_Land/Render/SignModelRender.cpp: src/14_Land/Render/FlowerModelRender.cpp: .text start:0x0212e1f4 end:0x0212e448 .rodata start:0x02153d20 end:0x02153d98 - .data start:0x02157108 end:0x02157150 \ No newline at end of file + .data start:0x02157108 end:0x02157150 + +src/14_Land/Render/SpikeModelRender.cpp: + .text start:0x0213174c end:0x02131824 + .rodata start:0x02153dc0 end:0x02153dd4 + .data start:0x021573cc end:0x02157414 \ No newline at end of file diff --git a/config/eur/arm9/overlays/ov014/relocs.txt b/config/eur/arm9/overlays/ov014/relocs.txt index 788e0d872..454d770d9 100644 --- a/config/eur/arm9/overlays/ov014/relocs.txt +++ b/config/eur/arm9/overlays/ov014/relocs.txt @@ -2068,7 +2068,7 @@ from:0x02131730 kind:arm_call to:0x020ceacc module:overlay(0) from:0x0213173c kind:load to:0x027e0ffc module:dtcm from:0x02131754 kind:arm_call_thumb to:0x020a956c module:overlay(0) from:0x0213177c kind:arm_call to:0x020a9998 module:overlay(0) -from:0x02131788 kind:load to:0x021573d4 module:overlay(14) +from:0x02131788 kind:load to:0x021573cc add:8 module:overlay(14) from:0x021317a8 kind:arm_call to:0x0201e388 module:main from:0x02131804 kind:load to:0x02153dc0 module:overlay(14) from:0x02131810 kind:arm_call_thumb to:0x020a95ec module:overlay(0) @@ -2082,7 +2082,7 @@ from:0x021318d4 kind:arm_call_thumb to:0x020bd618 module:overlay(0) from:0x021318e0 kind:load to:0x020e2748 module:overlay(0) from:0x021318e4 kind:load to:0x020e2f04 module:overlay(0) from:0x021318e8 kind:load to:0x020e2e3c module:overlay(0) -from:0x021318ec kind:load to:0x0215741c module:overlay(14) +from:0x021318ec kind:load to:0x02157414 add:8 module:overlay(14) from:0x021318f0 kind:load to:0x027e0f68 module:dtcm from:0x02131900 kind:arm_call_thumb to:0x020b3ea8 module:overlay(0) from:0x02131908 kind:arm_call to:0x02094824 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 15ca18514..1e231da24 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -476,7 +476,7 @@ func_ov014_0213067c kind:function(arm,size=0x64) addr:0x0213067c func_ov014_021306e0 kind:function(arm,size=0x64) addr:0x021306e0 func_ov014_02130744 kind:function(arm,size=0x38) addr:0x02130744 func_ov014_0213077c kind:function(arm,size=0xb4) addr:0x0213077c -func_ov014_02130830 kind:function(arm,size=0x14) addr:0x02130830 +_ZN16SpikeModelRenderD1Ev kind:function(arm,size=0x14) addr:0x02130830 func_ov014_02130844 kind:function(arm,size=0x28) addr:0x02130844 func_ov014_0213086c kind:function(arm,size=0x30) addr:0x0213086c func_ov014_0213089c kind:function(arm,size=0x120) addr:0x0213089c @@ -491,9 +491,9 @@ func_ov014_02131450 kind:function(arm,size=0x68) addr:0x02131450 func_ov014_021314b8 kind:function(arm,size=0x20c) addr:0x021314b8 func_ov014_021316c4 kind:function(arm,size=0x80) addr:0x021316c4 func_ov014_02131744 kind:function(arm,size=0x8) addr:0x02131744 -func_ov014_0213174c kind:function(arm,size=0x40) addr:0x0213174c -func_ov014_0213178c kind:function(arm,size=0x7c) addr:0x0213178c -func_ov014_02131808 kind:function(arm,size=0x1c) addr:0x02131808 +_ZN16SpikeModelRenderC1EP9ItemModel kind:function(arm,size=0x40) addr:0x0213174c +_ZN16SpikeModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x7c) addr:0x0213178c +_ZN16SpikeModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02131808 func_ov014_02131824 kind:function(arm,size=0x38) addr:0x02131824 func_ov014_0213185c kind:function(arm,size=0x98) addr:0x0213185c func_ov014_021318f4 kind:function(arm,size=0x28) addr:0x021318f4 @@ -1570,7 +1570,7 @@ data_ov014_02153cf8 kind:data(any) addr:0x02153cf8 @323 kind:data(any) addr:0x02153d70 @324 kind:data(any) addr:0x02153d84 data_ov014_02153d98 kind:data(any) addr:0x02153d98 -data_ov014_02153dc0 kind:data(any) addr:0x02153dc0 +@242 kind:data(any) addr:0x02153dc0 data_ov014_02153dd4 kind:data(any) addr:0x02153dd4 data_ov014_02153de4 kind:data(any) addr:0x02153de4 data_ov014_02153df8 kind:data(any) addr:0x02153df8 @@ -1913,8 +1913,8 @@ data_ov014_02157314 kind:data(any) addr:0x02157314 data_ov014_02157320 kind:data(any) addr:0x02157320 data_ov014_0215732c kind:data(any) addr:0x0215732c data_ov014_02157340 kind:data(any) addr:0x02157340 -data_ov014_021573d4 kind:data(any) addr:0x021573d4 -data_ov014_0215741c kind:data(any) addr:0x0215741c +_ZTV16SpikeModelRender kind:data(any) addr:0x021573cc +data_ov014_0215741c kind:data(any) addr:0x02157414 data_ov014_021574b0 kind:data(any) addr:0x021574b0 data_ov014_02157544 kind:data(any) addr:0x02157544 data_ov014_02157554 kind:data(any) addr:0x02157554 diff --git a/config/usa/arm9/overlays/ov014/delinks.txt b/config/usa/arm9/overlays/ov014/delinks.txt index 1bdf57daf..25acabbd9 100644 --- a/config/usa/arm9/overlays/ov014/delinks.txt +++ b/config/usa/arm9/overlays/ov014/delinks.txt @@ -32,4 +32,9 @@ src/14_Land/Render/SignModelRender.cpp: src/14_Land/Render/FlowerModelRender.cpp: .text start:0x0212e174 end:0x0212e3c8 .rodata start:0x02153c7c end:0x02153cf4 - .data start:0x02157068 end:0x021570b0 \ No newline at end of file + .data start:0x02157068 end:0x021570b0 + +src/14_Land/Render/SpikeModelRender.cpp: + .text start:0x021316a8 end:0x02131780 + .rodata start:0x02153d1c end:0x02153d30 + .data start:0x0215732c end:0x02157374 \ No newline at end of file diff --git a/config/usa/arm9/overlays/ov014/relocs.txt b/config/usa/arm9/overlays/ov014/relocs.txt index d74cf7429..e2ca3088d 100644 --- a/config/usa/arm9/overlays/ov014/relocs.txt +++ b/config/usa/arm9/overlays/ov014/relocs.txt @@ -2068,7 +2068,7 @@ from:0x0213168c kind:arm_call to:0x020cea6c module:overlay(0) from:0x02131698 kind:load to:0x027e0ffc module:dtcm from:0x021316b0 kind:arm_call_thumb to:0x020a950c module:overlay(0) from:0x021316d8 kind:arm_call to:0x020a9938 module:overlay(0) -from:0x021316e4 kind:load to:0x02157334 module:overlay(14) +from:0x021316e4 kind:load to:0x0215732c add:8 module:overlay(14) from:0x02131704 kind:arm_call to:0x0201e388 module:main from:0x02131760 kind:load to:0x02153d1c module:overlay(14) from:0x0213176c kind:arm_call_thumb to:0x020a958c module:overlay(0) @@ -2082,7 +2082,7 @@ from:0x02131830 kind:arm_call_thumb to:0x020bd5b8 module:overlay(0) from:0x0213183c kind:load to:0x020e26e8 module:overlay(0) from:0x02131840 kind:load to:0x020e2ea4 module:overlay(0) from:0x02131844 kind:load to:0x020e2ddc module:overlay(0) -from:0x02131848 kind:load to:0x0215737c module:overlay(14) +from:0x02131848 kind:load to:0x02157374 add:8 module:overlay(14) from:0x0213184c kind:load to:0x027e0f68 module:dtcm from:0x0213185c kind:arm_call_thumb to:0x020b3e48 module:overlay(0) from:0x02131864 kind:arm_call to:0x020947c4 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index ef635a00c..871e01c6a 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -476,7 +476,7 @@ func_ov014_0213067c kind:function(arm,size=0x64) addr:0x021305d8 func_ov014_021306e0 kind:function(arm,size=0x64) addr:0x0213063c func_ov014_02130744 kind:function(arm,size=0x38) addr:0x021306a0 func_ov014_0213077c kind:function(arm,size=0xb4) addr:0x021306d8 -func_ov014_02130830 kind:function(arm,size=0x14) addr:0x0213078c +_ZN16SpikeModelRenderD1Ev kind:function(arm,size=0x14) addr:0x0213078c func_ov014_02130844 kind:function(arm,size=0x28) addr:0x021307a0 func_ov014_0213086c kind:function(arm,size=0x30) addr:0x021307c8 func_ov014_0213089c kind:function(arm,size=0x120) addr:0x021307f8 @@ -491,9 +491,9 @@ func_ov014_02131450 kind:function(arm,size=0x68) addr:0x021313ac func_ov014_021314b8 kind:function(arm,size=0x20c) addr:0x02131414 func_ov014_021316c4 kind:function(arm,size=0x80) addr:0x02131620 func_ov014_02131744 kind:function(arm,size=0x8) addr:0x021316a0 -func_ov014_0213174c kind:function(arm,size=0x40) addr:0x021316a8 -func_ov014_0213178c kind:function(arm,size=0x7c) addr:0x021316e8 -func_ov014_02131808 kind:function(arm,size=0x1c) addr:0x02131764 +_ZN16SpikeModelRenderC1EP9ItemModel kind:function(arm,size=0x40) addr:0x021316a8 +_ZN16SpikeModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x7c) addr:0x021316e8 +_ZN16SpikeModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x02131764 func_ov014_02131824 kind:function(arm,size=0x38) addr:0x02131780 func_ov014_0213185c kind:function(arm,size=0x98) addr:0x021317b8 func_ov014_021318f4 kind:function(arm,size=0x28) addr:0x02131850 @@ -1570,7 +1570,7 @@ data_ov014_02153cf8 kind:data(any) addr:0x02153c54 @323 kind:data(any) addr:0x02153ccc @324 kind:data(any) addr:0x02153ce0 data_ov014_02153d98 kind:data(any) addr:0x02153cf4 -data_ov014_02153dc0 kind:data(any) addr:0x02153d1c +@242 kind:data(any) addr:0x02153d1c data_ov014_02153dd4 kind:data(any) addr:0x02153d30 data_ov014_02153de4 kind:data(any) addr:0x02153d40 data_ov014_02153df8 kind:data(any) addr:0x02153d54 @@ -1913,8 +1913,8 @@ data_ov014_02157314 kind:data(any) addr:0x02157274 data_ov014_02157320 kind:data(any) addr:0x02157280 data_ov014_0215732c kind:data(any) addr:0x0215728c data_ov014_02157340 kind:data(any) addr:0x021572a0 -data_ov014_021573d4 kind:data(any) addr:0x02157334 -data_ov014_0215741c kind:data(any) addr:0x0215737c +_ZTV16SpikeModelRender kind:data(any) addr:0x0215732c +data_ov014_0215741c kind:data(any) addr:0x02157374 data_ov014_021574b0 kind:data(any) addr:0x02157410 data_ov014_02157544 kind:data(any) addr:0x021574a4 data_ov014_02157554 kind:data(any) addr:0x021574b4 diff --git a/include/Render/SpikeModelRender.hpp b/include/Render/SpikeModelRender.hpp new file mode 100644 index 000000000..b4a927d8e --- /dev/null +++ b/include/Render/SpikeModelRender.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "ModelRender.hpp" + +class SpikeModelRender : public ModelRender { +public: + /* 00 (base) */ + /* 5c */ q20 spikeRetractionPosition; + /* 60 */ u8 mUnk_60; + /* 61 */ + + /* 00 */ virtual ~SpikeModelRender() override; + /* 3c */ virtual void vfunc_3c(ModelRenderCommandsData *renderData) override; + + SpikeModelRender(ItemModel *itemModel); +}; \ No newline at end of file diff --git a/src/14_Land/Render/SpikeModelRender.cpp b/src/14_Land/Render/SpikeModelRender.cpp new file mode 100644 index 000000000..51115b4ed --- /dev/null +++ b/src/14_Land/Render/SpikeModelRender.cpp @@ -0,0 +1,27 @@ +#include "Render/SpikeModelRender.hpp" + +extern "C" unk32 func_0201e388(void *param1, const char *param2); + +SpikeModelRender::SpikeModelRender(ItemModel *itemModel) : + ModelRender(itemModel), + spikeRetractionPosition(0), + mUnk_60(1) { + this->UnkInit_Struct4_Params(6, 2); +} + +#pragma readonly_strings on +void SpikeModelRender::vfunc_3c(ModelRenderCommandsData *renderData) { + if (renderData->currentCommand[1] == func_0201e388(&renderData->unkStruct4->mLcdcAddr->boneList, "spike")) { + if (this->mUnk_60 != '\0') { + renderData->transformations->flags = renderData->transformations->flags & ~4; + renderData->transformations->translationVector.y = this->spikeRetractionPosition; + renderData->transformations->translationVector.x = 0; + renderData->transformations->translationVector.z = 0; + } else { + *renderData->boneVisibilityPtr = 0; + } + } +} +#pragma readonly_strings reset + +SpikeModelRender::~SpikeModelRender() {} \ No newline at end of file