From 5bd10bc8f5c722e8ae358759bae41cbc1da387cb Mon Sep 17 00:00:00 2001 From: Max <34987259+mparisi20@users.noreply.github.com> Date: Sun, 18 Jan 2026 20:28:38 -0500 Subject: [PATCH] Match so_model_module_simple.cpp --- config/RSBE01_02/rels/sora_melee/splits.txt | 5 + config/RSBE01_02/rels/sora_melee/symbols.txt | 178 ++++++------- config/RSBE01_02/symbols.txt | 26 +- configure.py | 1 + include/lib/BrawlHeaders | 2 +- .../model/so_model_module_impl_variable.cpp | 20 +- .../so/model/so_model_module_simple.cpp | 234 ++++++++++++++++++ 7 files changed, 353 insertions(+), 113 deletions(-) create mode 100644 src/mo_melee/sora_melee/so/model/so_model_module_simple.cpp diff --git a/config/RSBE01_02/rels/sora_melee/splits.txt b/config/RSBE01_02/rels/sora_melee/splits.txt index 75a009b..794006f 100644 --- a/config/RSBE01_02/rels/sora_melee/splits.txt +++ b/config/RSBE01_02/rels/sora_melee/splits.txt @@ -11,6 +11,11 @@ global_destructor_chain.c: .dtors start:0x00000000 end:0x00000008 .bss start:0x00000000 end:0x00000004 +mo_melee/sora_melee/so/model/so_model_module_simple.cpp: + .text start:0x0000E268 end:0x0000EEAC + .rodata start:0x00000318 end:0x00000320 + .data start:0x000007D0 end:0x00000A88 + mo_melee/sora_melee/so/model/so_model_module_impl_variable.cpp: .text start:0x0000F288 end:0x0000FED0 .data start:0x00000A98 end:0x00000C78 diff --git a/config/RSBE01_02/rels/sora_melee/symbols.txt b/config/RSBE01_02/rels/sora_melee/symbols.txt index 0236f86..3360bda 100644 --- a/config/RSBE01_02/rels/sora_melee/symbols.txt +++ b/config/RSBE01_02/rels/sora_melee/symbols.txt @@ -123,7 +123,7 @@ __ct__17soModelModuleImplFP16soModuleAccesserPvUlUlPvf = .text:0x000077DC; // ty fn_27_7B24 = .text:0x00007B24; // type:function size:0x40 __dt__17soModelModuleImplFv = .text:0x00007B64; // type:function size:0x14C constructInstance__17soModelModuleImplFQ211gfSceneRoot9LayerTypeUlbScQ34nw4r3g3d7ResFilePCcPCcsPvUci = .text:0x00007CB0; // type:function size:0x524 -getScnMdl__19soModelModuleSimpleFv = .text:0x000081D4; // type:function size:0x8 +getScnMdl__19soModelModuleSimpleCFv = .text:0x000081D4; // type:function size:0x8 setLockMtx__17soModelModuleImplFb = .text:0x000081DC; // type:function size:0x10 fn_27_81EC = .text:0x000081EC; // type:function size:0x4 destructInstance__17soModelModuleImplFv = .text:0x000081F0; // type:function size:0x420 @@ -132,7 +132,7 @@ isAddEnvMapMat__17soModelModuleImplFv = .text:0x00008614; // type:function size: deactivate__17soModelModuleImplFv = .text:0x0000861C; // type:function size:0x11C activate__17soModelModuleImplFv = .text:0x00008738; // type:function size:0x158 begin__17soModelModuleImplFb = .text:0x00008890; // type:function size:0x3C -getScnMdl__17soModelModuleImplFb = .text:0x000088CC; // type:function size:0x18 +getScnMdl__17soModelModuleImplCFb = .text:0x000088CC; // type:function size:0x18 fn_27_88E4 = .text:0x000088E4; // type:function size:0x450 fn_27_8D34 = .text:0x00008D34; // type:function size:0x8 fn_27_8D3C = .text:0x00008D3C; // type:function size:0x8 @@ -140,7 +140,7 @@ setScnMdl__17soModelModuleImplFPQ34nw4r3g3d6ScnMdlPvQ211gfSceneRoot9LayerType = setScnMdlExtern__17soModelModuleImplFPQ34nw4r3g3d6ScnMdl = .text:0x00008E0C; // type:function size:0x10 detachScnMdl__17soModelModuleImplFPv = .text:0x00008E1C; // type:function size:0x2B8 fn_27_90D4 = .text:0x000090D4; // type:function size:0x160 -fn_27_9234 = .text:0x00009234; // type:function size:0x8 +getRealNodeId__19soModelModuleSimpleFUl = .text:0x00009234; // type:function size:0x8 fn_27_923C = .text:0x0000923C; // type:function size:0x294 fn_27_94D0 = .text:0x000094D0; // type:function size:0x208 fn_27_96D8 = .text:0x000096D8; // type:function size:0x64 @@ -168,12 +168,12 @@ getCorrectNodeId__17soModelModuleImplFUl = .text:0x0000A9D8; // type:function si getNodeGlobalMtx__17soModelModuleImplFUlP6Matrixb = .text:0x0000A9FC; // type:function size:0x150 setNodeGlobalMtx__17soModelModuleImplFUlP6Matrixb = .text:0x0000AB4C; // type:function size:0xA8 getNodeGlobalPosition__17soModelModuleImplFUlb = .text:0x0000ABF4; // type:function size:0x120 -getNodeGlobalPosition__17soModelModuleImplFUlP5Vec3fbb = .text:0x0000AD14; // type:function size:0x134 +getNodeGlobalPosition__17soModelModuleImplFUlPC5Vec3fbb = .text:0x0000AD14; // type:function size:0x134 getNodeLocalPosition__17soModelModuleImplFUlb = .text:0x0000AE48; // type:function size:0x108 getNodeLocalMtxFromNode__17soModelModuleImplFUlUlP6Matrixb = .text:0x0000AF50; // type:function size:0xD8 getNodeGlobalRotation__17soModelModuleImplFUlb = .text:0x0000B028; // type:function size:0x100 -isNode__17soModelModuleImplFi = .text:0x0000B128; // type:function size:0xC8 -getNodeNum__17soModelModuleImplFb = .text:0x0000B1F0; // type:function size:0x3C +isNode__17soModelModuleImplFUl = .text:0x0000B128; // type:function size:0xC8 +getNodeNum__17soModelModuleImplCFb = .text:0x0000B1F0; // type:function size:0x3C getTransNNodeName__17soModelModuleImplFv = .text:0x0000B22C; // type:function size:0xC getTransNNodeId__17soModelModuleImplFv = .text:0x0000B238; // type:function size:0x68 getResFileNodeTranslate__17soModelModuleImplFUl = .text:0x0000B2A0; // type:function size:0x58 @@ -191,7 +191,7 @@ setVirtualNodeUpdate__17soModelModuleImplFUlb = .text:0x0000DE5C; // type:functi switchEnvMap__17soModelModuleImplFb = .text:0x0000DE9C; // type:function size:0x1C4 preShadowCalcView__17soModelModuleImplFv = .text:0x0000E060; // type:function size:0xA8 getWorldMtxArray__17soModelModuleImplFv = .text:0x0000E108; // type:function size:0xC -fn_27_E114 = .text:0x0000E114; // type:function size:0x4 +setNodeConvertData__19soModelModuleSimpleFPPUl = .text:0x0000E114; // type:function size:0x4 setDisposeInstanceImm__17soModelModuleImplFb = .text:0x0000E118; // type:function size:0x10 setShadowNode__17soModelModuleImplFi = .text:0x0000E128; // type:function size:0x8 isRefFB__17soModelModuleImplFv = .text:0x0000E130; // type:function size:0x18 @@ -209,85 +209,85 @@ fn_27_E240 = .text:0x0000E240; // type:function size:0x10 notifyEventAnimCmd__22soAnimCmdEventObserverFP9acAnimCmdP16soModuleAccesserl = .text:0x0000E250; // type:function size:0x8 @20@isObserv__17soModelModuleImplFc = .text:0x0000E258; // type:function size:0x8 fn_27_E260 = .text:0x0000E260; // type:function size:0x8 -fn_27_E268 = .text:0x0000E268; // type:function size:0x24 -fn_27_E28C = .text:0x0000E28C; // type:function size:0x40 -fn_27_E2CC = .text:0x0000E2CC; // type:function size:0x40 -fn_27_E30C = .text:0x0000E30C; // type:function size:0x5C -fn_27_E368 = .text:0x0000E368; // type:function size:0x60 -resetLayerType__19soModelModuleSimpleFv = .text:0x0000E3C8; // type:function size:0xC0 +__ct__19soModelModuleSimpleFv = .text:0x0000E268; // type:function size:0x24 +__dt__13soModelModuleFv = .text:0x0000E28C; // type:function size:0x40 +__dt__19soModelModuleSimpleFv = .text:0x0000E2CC; // type:function size:0x40 +setScnMdl__19soModelModuleSimpleFPQ34nw4r3g3d6ScnMdlPvQ211gfSceneRoot9LayerType = .text:0x0000E30C; // type:function size:0x5C +detachScnMdl__19soModelModuleSimpleFPv = .text:0x0000E368; // type:function size:0x60 +resetLayerType__19soModelModuleSimpleFQ211gfSceneRoot9LayerType = .text:0x0000E3C8; // type:function size:0xC0 getNodeId__19soModelModuleSimpleFPCc = .text:0x0000E488; // type:function size:0x94 getNodeName__19soModelModuleSimpleFUl = .text:0x0000E51C; // type:function size:0xB4 -fn_27_E5D0 = .text:0x0000E5D0; // type:function size:0x54 -fn_27_E624 = .text:0x0000E624; // type:function size:0x58 -fn_27_E67C = .text:0x0000E67C; // type:function size:0x68 -fn_27_E6E4 = .text:0x0000E6E4; // type:function size:0x58 -fn_27_E73C = .text:0x0000E73C; // type:function size:0x98 -fn_27_E7D4 = .text:0x0000E7D4; // type:function size:0x58 -fn_27_E82C = .text:0x0000E82C; // type:function size:0x58 -getNodeNum__19soModelModuleSimpleFv = .text:0x0000E884; // type:function size:0x3C +getNodeGlobalMtx__19soModelModuleSimpleFUlP6Matrixb = .text:0x0000E5D0; // type:function size:0x54 +getNodeGlobalPosition__19soModelModuleSimpleFUlb = .text:0x0000E624; // type:function size:0x58 +getNodeGlobalPosition__19soModelModuleSimpleFUlPC5Vec3fbb = .text:0x0000E67C; // type:function size:0x68 +getNodeLocalPosition__19soModelModuleSimpleFUlb = .text:0x0000E6E4; // type:function size:0x58 +getNodeLocalMtxFromNode__19soModelModuleSimpleFUlUlP6Matrixb = .text:0x0000E73C; // type:function size:0x98 +getNodeGlobalRotation__19soModelModuleSimpleFUlb = .text:0x0000E7D4; // type:function size:0x58 +isNode__19soModelModuleSimpleFUl = .text:0x0000E82C; // type:function size:0x58 +getNodeNum__19soModelModuleSimpleCFv = .text:0x0000E884; // type:function size:0x3C getNodeGlobalOffsetFromTop__19soModelModuleSimpleFUl = .text:0x0000E8C0; // type:function size:0x9C getTopNodeGlobalPosFromNode__19soModelModuleSimpleFUlP5Vec3f = .text:0x0000E95C; // type:function size:0x68 -setAnmObj__19soModelModuleSimpleFv = .text:0x0000E9C4; // type:function size:0x80 -setOption__19soModelModuleSimpleFv = .text:0x0000EA44; // type:function size:0x8C -getResMdl__19soModelModuleSimpleFv = .text:0x0000EAD0; // type:function size:0x74 -removeAnmObj__19soModelModuleSimpleFv = .text:0x0000EB44; // type:function size:0x88 +setAnmObj__19soModelModuleSimpleFPQ34nw4r3g3d6AnmObj = .text:0x0000E9C4; // type:function size:0x80 +setOption__19soModelModuleSimpleFUlUl = .text:0x0000EA44; // type:function size:0x8C +getResMdl__19soModelModuleSimpleFPQ34nw4r3g3d6ResMdl = .text:0x0000EAD0; // type:function size:0x74 +removeAnmObj__19soModelModuleSimpleFQ44nw4r3g3d12ScnMdlSimple10AnmObjType = .text:0x0000EB44; // type:function size:0x88 setVisibility__19soModelModuleSimpleFb = .text:0x0000EBCC; // type:function size:0x68 setNodeVisibility__19soModelModuleSimpleFUlb = .text:0x0000EC34; // type:function size:0x78 -setNodeVisibility__19soModelModuleSimpleFiPUlb = .text:0x0000ECAC; // type:function size:0x88 -fn_27_ED34 = .text:0x0000ED34; // type:function size:0x4 -fn_27_ED38 = .text:0x0000ED38; // type:function size:0x4 -fn_27_ED3C = .text:0x0000ED3C; // type:function size:0x8 -fn_27_ED44 = .text:0x0000ED44; // type:function size:0x4 -fn_27_ED48 = .text:0x0000ED48; // type:function size:0x8 -fn_27_ED50 = .text:0x0000ED50; // type:function size:0x4 -fn_27_ED54 = .text:0x0000ED54; // type:function size:0x8 -fn_27_ED5C = .text:0x0000ED5C; // type:function size:0x8 -fn_27_ED64 = .text:0x0000ED64; // type:function size:0x4 -fn_27_ED68 = .text:0x0000ED68; // type:function size:0x4 -fn_27_ED6C = .text:0x0000ED6C; // type:function size:0x4 -fn_27_ED70 = .text:0x0000ED70; // type:function size:0x4 -fn_27_ED74 = .text:0x0000ED74; // type:function size:0x4 -fn_27_ED78 = .text:0x0000ED78; // type:function size:0x4 -fn_27_ED7C = .text:0x0000ED7C; // type:function size:0x4 -fn_27_ED80 = .text:0x0000ED80; // type:function size:0x8 -fn_27_ED88 = .text:0x0000ED88; // type:function size:0x4 -fn_27_ED8C = .text:0x0000ED8C; // type:function size:0x4 -fn_27_ED90 = .text:0x0000ED90; // type:function size:0xC -fn_27_ED9C = .text:0x0000ED9C; // type:function size:0x18 -fn_27_EDB4 = .text:0x0000EDB4; // type:function size:0x18 -fn_27_EDCC = .text:0x0000EDCC; // type:function size:0x8 -fn_27_EDD4 = .text:0x0000EDD4; // type:function size:0x8 -fn_27_EDDC = .text:0x0000EDDC; // type:function size:0x4 -fn_27_EDE0 = .text:0x0000EDE0; // type:function size:0x8 -fn_27_EDE8 = .text:0x0000EDE8; // type:function size:0x4 -fn_27_EDEC = .text:0x0000EDEC; // type:function size:0x8 -fn_27_EDF4 = .text:0x0000EDF4; // type:function size:0x4 -fn_27_EDF8 = .text:0x0000EDF8; // type:function size:0x18 -fn_27_EE10 = .text:0x0000EE10; // type:function size:0x4 -fn_27_EE14 = .text:0x0000EE14; // type:function size:0x4 -fn_27_EE18 = .text:0x0000EE18; // type:function size:0x4 -fn_27_EE1C = .text:0x0000EE1C; // type:function size:0x4 -fn_27_EE20 = .text:0x0000EE20; // type:function size:0x18 -fn_27_EE38 = .text:0x0000EE38; // type:function size:0x4 -fn_27_EE3C = .text:0x0000EE3C; // type:function size:0x18 -fn_27_EE54 = .text:0x0000EE54; // type:function size:0x4 -fn_27_EE58 = .text:0x0000EE58; // type:function size:0x4 -fn_27_EE5C = .text:0x0000EE5C; // type:function size:0x4 -fn_27_EE60 = .text:0x0000EE60; // type:function size:0x4 -fn_27_EE64 = .text:0x0000EE64; // type:function size:0x8 -fn_27_EE6C = .text:0x0000EE6C; // type:function size:0x4 -fn_27_EE70 = .text:0x0000EE70; // type:function size:0xC -fn_27_EE7C = .text:0x0000EE7C; // type:function size:0x8 -fn_27_EE84 = .text:0x0000EE84; // type:function size:0x4 -fn_27_EE88 = .text:0x0000EE88; // type:function size:0x4 -fn_27_EE8C = .text:0x0000EE8C; // type:function size:0x4 -fn_27_EE90 = .text:0x0000EE90; // type:function size:0x4 -fn_27_EE94 = .text:0x0000EE94; // type:function size:0x4 -fn_27_EE98 = .text:0x0000EE98; // type:function size:0x4 -fn_27_EE9C = .text:0x0000EE9C; // type:function size:0x4 -fn_27_EEA0 = .text:0x0000EEA0; // type:function size:0x4 -fn_27_EEA4 = .text:0x0000EEA4; // type:function size:0x4 -fn_27_EEA8 = .text:0x0000EEA8; // type:function size:0x4 +setNodeVisibility__19soModelModuleSimpleFlPCUlb = .text:0x0000ECAC; // type:function size:0x88 +setDisposeInstanceImm__19soModelModuleSimpleFb = .text:0x0000ED34; // type:function size:0x4 +setShadowNode__19soModelModuleSimpleFi = .text:0x0000ED38; // type:function size:0x4 +getWorldMtxArray__19soModelModuleSimpleFv = .text:0x0000ED3C; // type:function size:0x8 +preShadowCalcView__19soModelModuleSimpleFv = .text:0x0000ED44; // type:function size:0x4 +isRefFB__19soModelModuleSimpleFv = .text:0x0000ED48; // type:function size:0x8 +switchEnvMap__19soModelModuleSimpleFb = .text:0x0000ED50; // type:function size:0x4 +isEnvMap__19soModelModuleSimpleFv = .text:0x0000ED54; // type:function size:0x8 +isAddEnvMapMat__19soModelModuleSimpleFv = .text:0x0000ED5C; // type:function size:0x8 +setVirtualNodeUpdate__19soModelModuleSimpleFUlb = .text:0x0000ED64; // type:function size:0x4 +initVirtualNode__19soModelModuleSimpleFiUlUlPvP6Matrix = .text:0x0000ED68; // type:function size:0x4 +changeMaterialTex__19soModelModuleSimpleFP16soResourceModulePCcPCcQ34nw4r3g3d7ResFile = .text:0x0000ED6C; // type:function size:0x4 +renderNodeAxis__19soModelModuleSimpleFUlf = .text:0x0000ED70; // type:function size:0x4 +setNodeVisibility__19soModelModuleSimpleFUlbb = .text:0x0000ED74; // type:function size:0x4 +setNodeVisibility__19soModelModuleSimpleFlPCUlbb = .text:0x0000ED78; // type:function size:0x4 +setVisibility__19soModelModuleSimpleFbb = .text:0x0000ED7C; // type:function size:0x4 +getLayerType__19soModelModuleSimpleFv = .text:0x0000ED80; // type:function size:0x8 +setScaleZ__19soModelModuleSimpleFf = .text:0x0000ED88; // type:function size:0x4 +setScale__19soModelModuleSimpleFf = .text:0x0000ED8C; // type:function size:0x4 +getScale__19soModelModuleSimpleFv = .text:0x0000ED90; // type:function size:0xC +getResFileNodeRotation__19soModelModuleSimpleFUl = .text:0x0000ED9C; // type:function size:0x18 +getResFileNodeTranslate__19soModelModuleSimpleFUl = .text:0x0000EDB4; // type:function size:0x18 +getTransNNodeId__19soModelModuleSimpleFv = .text:0x0000EDCC; // type:function size:0x8 +getTransNNodeName__19soModelModuleSimpleFv = .text:0x0000EDD4; // type:function size:0x8 +setTransNNodeId__19soModelModuleSimpleFi = .text:0x0000EDDC; // type:function size:0x4 +getNodeNum__19soModelModuleSimpleCFb = .text:0x0000EDE0; // type:function size:0x8 +setNodeGlobalMtx__19soModelModuleSimpleFUlP6Matrixb = .text:0x0000EDE8; // type:function size:0x4 +getCorrectNodeId__19soModelModuleSimpleFUl = .text:0x0000EDEC; // type:function size:0x8 +setNodeTranslate__19soModelModuleSimpleFUlP5Vec3f = .text:0x0000EDF4; // type:function size:0x4 +getNodeTranslate__19soModelModuleSimpleFUl = .text:0x0000EDF8; // type:function size:0x18 +setNodeRotate__19soModelModuleSimpleFUlP5Vec3f = .text:0x0000EE10; // type:function size:0x4 +setNodeRotateZ__19soModelModuleSimpleFUlf = .text:0x0000EE14; // type:function size:0x4 +setNodeRotateY__19soModelModuleSimpleFUlf = .text:0x0000EE18; // type:function size:0x4 +setNodeRotateX__19soModelModuleSimpleFUlf = .text:0x0000EE1C; // type:function size:0x4 +getNodeRotate__19soModelModuleSimpleFUl = .text:0x0000EE20; // type:function size:0x18 +setNodeScale__19soModelModuleSimpleFUlP5Vec3f = .text:0x0000EE38; // type:function size:0x4 +getNodeScale__19soModelModuleSimpleFUl = .text:0x0000EE3C; // type:function size:0x18 +setNodeSRT__19soModelModuleSimpleFUlP5Vec3fP5Vec3fP5Vec3f = .text:0x0000EE54; // type:function size:0x4 +clearNodeSRT__19soModelModuleSimpleFUl = .text:0x0000EE58; // type:function size:0x4 +clearNodeSetUp__19soModelModuleSimpleFv = .text:0x0000EE5C; // type:function size:0x4 +setLockMtx__19soModelModuleSimpleFb = .text:0x0000EE60; // type:function size:0x4 +setScnMdlExtern__19soModelModuleSimpleFPQ34nw4r3g3d6ScnMdl = .text:0x0000EE64; // type:function size:0x8 +setLoupeNo__19soModelModuleSimpleFSc = .text:0x0000EE6C; // type:function size:0x4 +getLoupeNo__19soModelModuleSimpleFv = .text:0x0000EE70; // type:function size:0xC +getScnMdl__19soModelModuleSimpleCFb = .text:0x0000EE7C; // type:function size:0x8 +begin__19soModelModuleSimpleFb = .text:0x0000EE84; // type:function size:0x4 +activate__19soModelModuleSimpleFv = .text:0x0000EE88; // type:function size:0x4 +deactivate__19soModelModuleSimpleFv = .text:0x0000EE8C; // type:function size:0x4 +destructInstance__19soModelModuleSimpleFv = .text:0x0000EE90; // type:function size:0x4 +constructInstance__19soModelModuleSimpleFQ211gfSceneRoot9LayerTypeUlbScQ34nw4r3g3d7ResFilePCcPCcsPvUci = .text:0x0000EE94; // type:function size:0x4 +clearSetUpMtx__19soModelModuleSimpleFv = .text:0x0000EE98; // type:function size:0x4 +setUpSkinningMtx__19soModelModuleSimpleFv = .text:0x0000EE9C; // type:function size:0x4 +setUpMtx__19soModelModuleSimpleFUl = .text:0x0000EEA0; // type:function size:0x4 +setUpMtx__19soModelModuleSimpleFPUll = .text:0x0000EEA4; // type:function size:0x4 +setUpMtxFinal__19soModelModuleSimpleFv = .text:0x0000EEA8; // type:function size:0x4 fn_27_EEAC = .text:0x0000EEAC; // type:function size:0x20 fn_27_EECC = .text:0x0000EECC; // type:function size:0x40 fn_27_EF0C = .text:0x0000EF0C; // type:function size:0x14 @@ -316,20 +316,20 @@ getNodeId__25soModelModuleImplVariableFPCc = .text:0x0000F7C8; // type:function getCorrectNodeId__25soModelModuleImplVariableFUl = .text:0x0000F810; // type:function size:0x34 getNodeName__25soModelModuleImplVariableFUl = .text:0x0000F844; // type:function size:0x44 getNodeGlobalPosition__25soModelModuleImplVariableFUlb = .text:0x0000F888; // type:function size:0x6C -getNodeGlobalPosition__25soModelModuleImplVariableFUlP5Vec3fbb = .text:0x0000F8F4; // type:function size:0x74 +getNodeGlobalPosition__25soModelModuleImplVariableFUlPC5Vec3fbb = .text:0x0000F8F4; // type:function size:0x74 getNodeLocalPosition__25soModelModuleImplVariableFUlb = .text:0x0000F968; // type:function size:0x6C getNodeLocalMtxFromNode__25soModelModuleImplVariableFUlUlP6Matrixb = .text:0x0000F9D4; // type:function size:0x84 getNodeGlobalMtx__25soModelModuleImplVariableFUlP6Matrixb = .text:0x0000FA58; // type:function size:0x64 setNodeGlobalMtx__25soModelModuleImplVariableFUlP6Matrixb = .text:0x0000FABC; // type:function size:0x64 getNodeGlobalRotation__25soModelModuleImplVariableFUlb = .text:0x0000FB20; // type:function size:0x6C -isNode__25soModelModuleImplVariableFi = .text:0x0000FB8C; // type:function size:0x44 +isNode__25soModelModuleImplVariableFUl = .text:0x0000FB8C; // type:function size:0x44 getResFileNodeTranslate__25soModelModuleImplVariableFUl = .text:0x0000FBD0; // type:function size:0x5C getResFileNodeRotation__25soModelModuleImplVariableFUl = .text:0x0000FC2C; // type:function size:0x5C getNodeGlobalOffsetFromTop__25soModelModuleImplVariableFUl = .text:0x0000FC88; // type:function size:0x5C getTopNodeGlobalPosFromNode__25soModelModuleImplVariableFUlP5Vec3f = .text:0x0000FCE4; // type:function size:0x6C renderNodeAxis__25soModelModuleImplVariableFUlf = .text:0x0000FD50; // type:function size:0x54 setNodeVisibility__25soModelModuleImplVariableFUlbb = .text:0x0000FDA4; // type:function size:0x70 -setNodeVisibility__25soModelModuleImplVariableFlPUlbb = .text:0x0000FE14; // type:function size:0xAC +setNodeVisibility__25soModelModuleImplVariableFlPCUlbb = .text:0x0000FE14; // type:function size:0xAC setNodeConvertData__25soModelModuleImplVariableFPPUl = .text:0x0000FEC0; // type:function size:0x8 @32@__dt__25soModelModuleImplVariableFv = .text:0x0000FEC8; // type:function size:0x8 fn_27_FED0 = .text:0x0000FED0; // type:function size:0x14 @@ -27952,7 +27952,7 @@ lbl_27_data_3C8 = .data:0x000003C8; // type:object size:0xC data:string lbl_27_data_3D4 = .data:0x000003D4; // type:object size:0xC lbl_27_data_3E0 = .data:0x000003E0; // type:object size:0x8 lbl_27_data_3E8 = .data:0x000003E8; // type:object size:0x14 data:string -lbl_27_data_400 = .data:0x00000400; // type:object size:0x8 +__RTTI__19soNullableInterface = .data:0x00000400; // type:object size:0x8 lbl_27_data_408 = .data:0x00000408; // type:object size:0xC lbl_27_data_414 = .data:0x00000414; // type:object size:0xE data:string lbl_27_data_428 = .data:0x00000428; // type:object size:0x8 @@ -27973,11 +27973,11 @@ lbl_27_data_4C8 = .data:0x000004C8; // type:object size:0x3C lbl_27_data_504 = .data:0x00000504; // type:object size:0x29 data:string lbl_27_data_530 = .data:0x00000530; // type:object size:0x18 lbl_27_data_548 = .data:0x00000548; // type:object size:0x8 -lbl_27_data_550 = .data:0x00000550; // type:object size:0x17C data:4byte +__vt__17soModelModuleImpl = .data:0x00000550; // type:object size:0x17C data:4byte lbl_27_data_6CC = .data:0x000006CC; // type:object size:0x12 data:string lbl_27_data_6E0 = .data:0x000006E0; // type:object size:0x38 __RTTI__17soModelModuleImpl = .data:0x00000718; // type:object size:0x8 -lbl_27_data_720 = .data:0x00000720; // type:object size:0xC +__vt__40soEventPresenter<20soModelEventObserver> = .data:0x00000720; // type:object size:0xC lbl_27_data_72C = .data:0x0000072C; // type:object size:0x27 data:string __RTTI__40soEventPresenter<20soModelEventObserver> = .data:0x00000758; // type:object size:0x8 lbl_27_data_760 = .data:0x00000760; // type:object size:0x14 data:string @@ -27989,10 +27989,10 @@ __RTTI__13soModelModule = .data:0x000007B0; // type:object size:0x8 lbl_27_data_7B8 = .data:0x000007B8; // type:object size:0xB data:string __RTTI__10soNullable = .data:0x000007C8; // type:object size:0x8 lbl_27_data_7D0 = .data:0x000007D0; // type:object size:0x1 data:byte -lbl_27_data_7D4 = .data:0x000007D4; // type:object size:0x154 -lbl_27_data_928 = .data:0x00000928; // type:object size:0x154 +__vt__19soModelModuleSimple = .data:0x000007D4; // type:object size:0x154 +__vt__13soModelModule = .data:0x00000928; // type:object size:0x154 __vt__10soNullable = .data:0x00000A7C; // type:object size:0xC -lbl_27_data_A88 = .data:0x00000A88; // type:object size:0x10 +__vt__19soNullableInterface = .data:0x00000A88; // type:object size:0x10 __vt__25soModelModuleImplVariable = .data:0x00000A98; // type:object size:0x17C lbl_27_data_C14 = .data:0x00000C14; // type:object size:0x1A data:string lbl_27_data_C30 = .data:0x00000C30; // type:object size:0x40 diff --git a/config/RSBE01_02/symbols.txt b/config/RSBE01_02/symbols.txt index 920a9e1..a56260b 100644 --- a/config/RSBE01_02/symbols.txt +++ b/config/RSBE01_02/symbols.txt @@ -2120,8 +2120,8 @@ fn_8000CF28 = .text:0x8000CF28; // type:function size:0x144 fn_8000D06C = .text:0x8000D06C; // type:function size:0x8 fn_8000D074 = .text:0x8000D074; // type:function size:0x8 fn_8000D07C = .text:0x8000D07C; // type:function size:0x14 -fn_8000D090 = .text:0x8000D090; // type:function size:0x7C -fn_8000D10C = .text:0x8000D10C; // type:function size:0xAC +add__11gfSceneRootFQ211gfSceneRoot9LayerTypePQ34nw4r3g3d6ScnMdl = .text:0x8000D090; // type:function size:0x7C +remove__11gfSceneRootFPQ34nw4r3g3d6ScnMdl = .text:0x8000D10C; // type:function size:0xAC fn_8000D1B8 = .text:0x8000D1B8; // type:function size:0x7C fn_8000D234 = .text:0x8000D234; // type:function size:0x18 fn_8000D24C = .text:0x8000D24C; // type:function size:0x94 @@ -2904,8 +2904,8 @@ fn_8003F03C = .text:0x8003F03C; // type:function size:0x38 fn_8003F074 = .text:0x8003F074; // type:function size:0x88 fn_8003F0FC = .text:0x8003F0FC; // type:function size:0x1B0 fn_8003F2AC = .text:0x8003F2AC; // type:function size:0x24C -fn_8003F4F8 = .text:0x8003F4F8; // type:function size:0xA8 -fn_8003F5A0 = .text:0x8003F5A0; // type:function size:0x2F8 +mul__6MatrixCFPC6MatrixP6Matrix = .text:0x8003F4F8; // type:function size:0xA8 +inverse__6MatrixCFP6Matrix = .text:0x8003F5A0; // type:function size:0x2F8 fn_8003F898 = .text:0x8003F898; // type:function size:0x64 fn_8003F8FC = .text:0x8003F8FC; // type:function size:0xAC fn_8003F9A8 = .text:0x8003F9A8; // type:function size:0x6C @@ -2976,13 +2976,13 @@ addLog__16mtPrngLogManagerFPC9mtPrngLog = .text:0x80043A94; // type:function siz __sinit_\mt_prng_log_cpp = .text:0x80043AEC; // type:function size:0x2C scope:local moUnResolvedMessage__FPCc = .text:0x80043B18; // type:function size:0x4 moGetStageModuleName__FQ26Stages11srStageKind = .text:0x80043B1C; // type:function size:0x50 -fn_80043B6C = .text:0x80043B6C; // type:function size:0x9C -fn_80043C08 = .text:0x80043C08; // type:function size:0x54 -fn_80043C5C = .text:0x80043C5C; // type:function size:0x54 -fn_80043CB0 = .text:0x80043CB0; // type:function size:0x70 -fn_80043D20 = .text:0x80043D20; // type:function size:0x40 -fn_80043D60 = .text:0x80043D60; // type:function size:0x4C -fn_80043DAC = .text:0x80043DAC; // type:function size:0x70 +nwSMGetGlobalPosition__FPCQ34nw4r3g3d12ScnMdlSimpleUlPC5Vec3f = .text:0x80043B6C; // type:function size:0x9C +nwSMGetGlobalPosition__FPCQ34nw4r3g3d12ScnMdlSimpleUl = .text:0x80043C08; // type:function size:0x54 +nwSMGetLocalPosition__FPCQ34nw4r3g3d12ScnMdlSimpleUl = .text:0x80043C5C; // type:function size:0x54 +nwSMGetGlobalRotation__FPCQ34nw4r3g3d12ScnMdlSimpleUl = .text:0x80043CB0; // type:function size:0x70 +nwSMSetVisibility__FPQ34nw4r3g3d12ScnMdlSimpleb = .text:0x80043D20; // type:function size:0x40 +nwSMSetNodeVisibility__FPQ34nw4r3g3d6ScnMdlUlb = .text:0x80043D60; // type:function size:0x4C +nwSMSetNodeVisibility__FPQ34nw4r3g3d6ScnMdllPCUlb = .text:0x80043DAC; // type:function size:0x70 __ct__10utRelocateFPvUl = .text:0x80043E1C; // type:function size:0x150 __dt__10utRelocateFv = .text:0x80043F6C; // type:function size:0x40 getPublicAddress__10utRelocateFPCc = .text:0x80043FAC; // type:function size:0x90 @@ -7195,7 +7195,7 @@ fn_8018ECCC = .text:0x8018ECCC; // type:function size:0x44 GetResNode__Q34nw4r3g3d6ResMdlCFPCc = .text:0x8018ED10; // type:function size:0x44 fn_8018ED54 = .text:0x8018ED54; // type:function size:0x50 GetResNode__Q34nw4r3g3d6ResMdlCFi = .text:0x8018EDA4; // type:function size:0x54 -GetResNode__Q34nw4r3g3d6ResMdlCFUx = .text:0x8018EDF8; // type:function size:0x54 +GetResNode__Q34nw4r3g3d6ResMdlCFUl = .text:0x8018EDF8; // type:function size:0x54 GetResNodeNumEntries__Q34nw4r3g3d6ResMdlFv = .text:0x8018EE4C; // type:function size:0x34 fn_8018EE80 = .text:0x8018EE80; // type:function size:0x50 fn_8018EED0 = .text:0x8018EED0; // type:function size:0x54 @@ -7857,7 +7857,7 @@ fn_801AE31C = .text:0x801AE31C; // type:function size:0x34C fn_801AE668 = .text:0x801AE668; // type:function size:0x890 fn_801AEEF8 = .text:0x801AEEF8; // type:function size:0x48 fn_801AEF40 = .text:0x801AEF40; // type:function size:0x40 -fn_801AEF80 = .text:0x801AEF80; // type:function size:0x144 +GetScnMtxPos__Q34nw4r3g3d12ScnMdlSimpleCFPQ34nw4r4math5MTX34Q44nw4r3g3d6ScnObj13ScnObjMtxTypeUl = .text:0x801AEF80; // type:function size:0x144 fn_801AF0C4 = .text:0x801AF0C4; // type:function size:0x5FC fn_801AF6C0 = .text:0x801AF6C0; // type:function size:0x178 fn_801AF838 = .text:0x801AF838; // type:function size:0xEC diff --git a/configure.py b/configure.py index 3dd4432..cd3dd44 100755 --- a/configure.py +++ b/configure.py @@ -782,6 +782,7 @@ def MatchingFor(*versions): "cflags": cflags_rel, "host": False, "objects": [ + Object(Matching, "mo_melee/sora_melee/so/model/so_model_module_simple.cpp"), Object(Matching, "mo_melee/sora_melee/so/model/so_model_module_impl_variable.cpp"), Object(Matching, "mo_melee/sora_melee/so/anim/so_anim_chr.cpp"), Object(Matching, "mo_melee/sora_melee/so/so_controller_module_link_ref.cpp"), diff --git a/include/lib/BrawlHeaders b/include/lib/BrawlHeaders index 2701c15..b634fd9 160000 --- a/include/lib/BrawlHeaders +++ b/include/lib/BrawlHeaders @@ -1 +1 @@ -Subproject commit 2701c155c4778091792cbd0fb4dca3a885a1cdc8 +Subproject commit b634fd920254df2c31c092b985e387e5b0ff91ef diff --git a/src/mo_melee/sora_melee/so/model/so_model_module_impl_variable.cpp b/src/mo_melee/sora_melee/so/model/so_model_module_impl_variable.cpp index 3d0fa11..96ba104 100644 --- a/src/mo_melee/sora_melee/so/model/so_model_module_impl_variable.cpp +++ b/src/mo_melee/sora_melee/so/model/so_model_module_impl_variable.cpp @@ -88,7 +88,7 @@ Vec3f soModelModuleImplVariable::getNodeGlobalPosition(u32 p1, bool p2) { return soModelModuleImpl::getNodeGlobalPosition(getRealNodeId(p1), p2); } -Vec3f soModelModuleImplVariable::getNodeGlobalPosition(u32 p1, Vec3f* p2, bool p3, bool p4) { +Vec3f soModelModuleImplVariable::getNodeGlobalPosition(u32 p1, const Vec3f* p2, bool p3, bool p4) { return soModelModuleImpl::getNodeGlobalPosition(getRealNodeId(p1), p2, p3, p4); } @@ -112,8 +112,8 @@ Vec3f soModelModuleImplVariable::getNodeGlobalRotation(u32 p1, bool p2) { return soModelModuleImpl::getNodeGlobalRotation(getRealNodeId(p1), p2); } -bool soModelModuleImplVariable::isNode(int p1) { - return soModelModuleImpl::isNode(getRealNodeId(p1)); +bool soModelModuleImplVariable::isNode(u32 id) { + return soModelModuleImpl::isNode(getRealNodeId(id)); } Vec3f soModelModuleImplVariable::getResFileNodeTranslate(u32 p1) { @@ -136,19 +136,19 @@ void soModelModuleImplVariable::renderNodeAxis(u32 p1, float f1) { return soModelModuleImpl::renderNodeAxis(getRealNodeId(p1), f1); } -void soModelModuleImplVariable::setNodeVisibility(u32 p1, bool p2, bool p3) { - u32 realId = getRealNodeId(p1); +void soModelModuleImplVariable::setNodeVisibility(u32 nodeId, bool vis, bool p3) { + u32 realId = getRealNodeId(nodeId); if (realId != 0xFFFFFFFF) { - soModelModuleImpl::setNodeVisibility(realId, p2, p3); + soModelModuleImpl::setNodeVisibility(realId, vis, p3); } } -void soModelModuleImplVariable::setNodeVisibility(int p1, u32* p2, bool p3, bool p4) { +void soModelModuleImplVariable::setNodeVisibility(s32 numIds, const u32* nodeIds, bool vis, bool p4) { if (getScnMdl(p4)) { - for (s32 i = 0; i < p1; i++) { - u32 realId = getRealNodeId(p2[i]); + for (s32 i = 0; i < numIds; i++) { + u32 realId = getRealNodeId(nodeIds[i]); if (realId != 0xFFFFFFFF) { - soModelModuleImpl::setNodeVisibility(realId, p3, p4); + soModelModuleImpl::setNodeVisibility(realId, vis, p4); } } } diff --git a/src/mo_melee/sora_melee/so/model/so_model_module_simple.cpp b/src/mo_melee/sora_melee/so/model/so_model_module_simple.cpp new file mode 100644 index 0000000..4a319a5 --- /dev/null +++ b/src/mo_melee/sora_melee/so/model/so_model_module_simple.cpp @@ -0,0 +1,234 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static inline gfSceneRoot* getRoot() { + return g_gfSceneRoot; +} + +soModelModuleSimple::soModelModuleSimple() : m_scnMdl(nullptr) { } + +soModelModuleSimple::~soModelModuleSimple() { } + +void soModelModuleSimple::setScnMdl(nw4r::g3d::ScnMdl* mdl, void*, + gfSceneRoot::LayerType lt) { + m_scnMdl = mdl; + getRoot()->add(lt, getScnMdl()); +} + +nw4r::g3d::ScnMdl* soModelModuleSimple::detachScnMdl(void*) { + nw4r::g3d::ScnMdl* mdl = getScnMdl(); + getRoot()->remove(mdl); + m_scnMdl = nullptr; + return mdl; +} + +void soModelModuleSimple::resetLayerType(gfSceneRoot::LayerType lt) { + if (getScnMdl() && + getRoot()->remove(getScnMdl()) && + getRoot()->add(lt, getScnMdl())) { + m_layerType = lt; + } +} + +int soModelModuleSimple::getNodeId(const char* nodeName) { + if (getScnMdl()) { + nw4r::g3d::ResMdl resMdl = getScnMdl()->m_resMdl; + nw4r::g3d::ResNode nd = resMdl.GetResNode(nodeName); + if (nd.IsValid()) { + return nd.IsValid() ? nd->m_nodeIndex : 0; + } + } + return -1; +} + +const char* soModelModuleSimple::getNodeName(u32 p1) { + if (getScnMdl()) { + nw4r::g3d::ResMdl resMdl = getScnMdl()->m_resMdl; + if (p1 >= resMdl.GetResNodeNumEntries()) { + return nullptr; + } + const nw4r::g3d::ResNodeData* nd = resMdl.GetResNode(p1).ptr(); + if (!nd) { + goto end; + } + if (nd->m_nodeNameStrOffset) { + return reinterpret_cast(nd) + + nd->m_nodeNameStrOffset; + } + return nullptr; + } +end: + return nullptr; +} + +void soModelModuleSimple::getNodeGlobalMtx(u32 idx, Matrix* outMtx, bool) { + getScnMdl()->GetScnMtxPos(outMtx, nw4r::g3d::ScnMdl::MTX_WORLD, idx); +} + +Vec3f soModelModuleSimple::getNodeGlobalPosition(u32 correctNodeId, bool) { + return nwSMGetGlobalPosition(getScnMdl(), correctNodeId); +} + +Vec3f soModelModuleSimple::getNodeGlobalPosition(u32 correctNodeId, const Vec3f* pos, bool p3, bool p4) { + return nwSMGetGlobalPosition(getScnMdl(), correctNodeId, pos); +} + +Vec3f soModelModuleSimple::getNodeLocalPosition(u32 correctNodeId, bool p2) { + return nwSMGetLocalPosition(getScnMdl(), correctNodeId); +} + +void soModelModuleSimple::getNodeLocalMtxFromNode(u32 nodeId1, u32 nodeId2, Matrix* outMtx, bool) { + Matrix stack68(true); + Matrix stack38(true); + Matrix stack8(true); + getNodeGlobalMtx(nodeId2, &stack38, false); + getNodeGlobalMtx(nodeId1, &stack68, false); + + stack68.inverse(&stack8); + stack8.mul(&stack38, outMtx); +} + +Vec3f soModelModuleSimple::getNodeGlobalRotation(u32 nodeId, bool p2) { + return nwSMGetGlobalRotation(getScnMdl(), nodeId); +} + +bool soModelModuleSimple::isNode(u32 id) { + if (id != 0xFFFFFFFF && id < getNodeNum()) { + return true; + } + return false; +} + +u32 soModelModuleSimple::getNodeNum() const { + nw4r::g3d::ResMdl resMdl = getScnMdl()->m_resMdl; + return resMdl.GetResNodeNumEntries(); +} + +Vec3f soModelModuleSimple::getNodeGlobalOffsetFromTop(u32 nodeId) { + Vec3f top = getNodeGlobalPosition(0, false); + Vec3f nodePos = getNodeGlobalPosition(nodeId, false); + Vec3f res; + + Vec3fSub(&res, &nodePos, &top); + return res; +} + +Vec3f soModelModuleSimple::getTopNodeGlobalPosFromNode(u32 nodeId, Vec3f* pos) { + Vec3f topOffset = getNodeGlobalOffsetFromTop(nodeId); + Vec3f res; + + Vec3fSub(&res, pos, &topOffset); + return res; +} + +bool soModelModuleSimple::setAnmObj(nw4r::g3d::AnmObj* obj) { + if (getScnMdl()) { + return getScnMdl()->SetAnmObj(obj, nw4r::g3d::ScnMdl::ANMOBJTYPE_NOT_SPECIFIED); + } + return false; +} + +bool soModelModuleSimple::setOption(u32 option, u32 value) { + if (getScnMdl()) { + return getScnMdl()->SetScnObjOption(option, value); + } + return false; +} + +bool soModelModuleSimple::getResMdl(nw4r::g3d::ResMdl* resMdl) { + if (getScnMdl()) { + *resMdl = getScnMdl()->m_resMdl; + return true; + } + return false; +} + +bool soModelModuleSimple::removeAnmObj(nw4r::g3d::ScnMdlSimple::AnmObjType type) { + if (getScnMdl()) { + return getScnMdl()->RemoveAnmObj(type) != nullptr; + } + return false; +} + +void soModelModuleSimple::setVisibility(bool vis) { + if (getScnMdl()) { + nwSMSetVisibility(getScnMdl(), vis); + } +} + +void soModelModuleSimple::setNodeVisibility(u32 nodeId, bool vis) { + if (getScnMdl()) { + nwSMSetNodeVisibility(getScnMdl(), nodeId, vis); + } +} + +void soModelModuleSimple::setNodeVisibility(s32 numIds, const u32* nodeIds, bool vis) { + if (getScnMdl()) { + nwSMSetNodeVisibility(getScnMdl(), numIds, nodeIds, vis); + } +} + +void soModelModuleSimple::setDisposeInstanceImm(bool) { } +void soModelModuleSimple::setShadowNode(int) { } +Matrix* soModelModuleSimple::getWorldMtxArray() { return nullptr; } +void soModelModuleSimple::preShadowCalcView() { } +bool soModelModuleSimple::isRefFB() { return false; } +void soModelModuleSimple::switchEnvMap(bool) { } +bool soModelModuleSimple::isEnvMap() { return false; } +bool soModelModuleSimple::isAddEnvMapMat() { return false; } +void soModelModuleSimple::setVirtualNodeUpdate(u32 virtualNodeIndex, bool) { } +void soModelModuleSimple::initVirtualNode(int, u32, u32, void*, Matrix*) { } +void soModelModuleSimple::changeMaterialTex(soResourceModule*, const char* resMat, const char* resPlt, nw4r::g3d::ResFile) { } +void soModelModuleSimple::renderNodeAxis(u32 nodeIndex, float) { } +void soModelModuleSimple::setNodeVisibility(u32 nodeId, bool visibility, bool) { } +void soModelModuleSimple::setNodeVisibility(s32 numIds, const u32* nodeIds, bool visibility, bool) { } +void soModelModuleSimple::setVisibility(bool visibility, bool) { } +gfSceneRoot::LayerType soModelModuleSimple::getLayerType() { return m_layerType; } +void soModelModuleSimple::setScaleZ(float) { } +void soModelModuleSimple::setScale(float) { } +float soModelModuleSimple::getScale() { return 1.0f; } +Vec3f soModelModuleSimple::getResFileNodeRotation(u32 nodeIndex) { return Vec3f(0, 0, 0); } +Vec3f soModelModuleSimple::getResFileNodeTranslate(u32 nodeIndex) { return Vec3f(0, 0, 0); } +int soModelModuleSimple::getTransNNodeId() { return -1; } +const char* soModelModuleSimple::getTransNNodeName() { return nullptr; } +void soModelModuleSimple::setTransNNodeId(int) { } +u32 soModelModuleSimple::getNodeNum(bool) const { return 0; } +void soModelModuleSimple::setNodeGlobalMtx(u32 index, Matrix*, bool) { } +int soModelModuleSimple::getCorrectNodeId(u32) { return -1; } +void soModelModuleSimple::setNodeTranslate(u32, Vec3f* xlate) { } +Vec3f soModelModuleSimple::getNodeTranslate(u32 p1) { return Vec3f(0, 0, 0); } +void soModelModuleSimple::setNodeRotate(u32 , Vec3f* rot) { } +void soModelModuleSimple::setNodeRotateZ(u32 , float z) { } +void soModelModuleSimple::setNodeRotateY(u32 , float y) { } +void soModelModuleSimple::setNodeRotateX(u32 , float x) { } +Vec3f soModelModuleSimple::getNodeRotate(u32 nodeIndex) { return Vec3f(0, 0, 0); } +void soModelModuleSimple::setNodeScale(u32 , Vec3f* ) { } +Vec3f soModelModuleSimple::getNodeScale(u32 nodeIndex) { return Vec3f(1, 1, 1); } +void soModelModuleSimple::setNodeSRT(u32 , Vec3f* scale, Vec3f* rot, Vec3f* xlate) { } +void soModelModuleSimple::clearNodeSRT(u32 p1) { } +void soModelModuleSimple::clearNodeSetUp() { } +void soModelModuleSimple::setLockMtx(bool) { } +void soModelModuleSimple::setScnMdlExtern(nw4r::g3d::ScnMdl* p) { m_scnMdl = p; } +void soModelModuleSimple::setLoupeNo(s8) { } +s8 soModelModuleSimple::getLoupeNo() { static s8 val = 0xFF; return val; } +nw4r::g3d::ScnMdl* soModelModuleSimple::getScnMdl(bool) const { return nullptr; } +void soModelModuleSimple::begin(bool) { } +void soModelModuleSimple::activate() { } +void soModelModuleSimple::deactivate() { } +void soModelModuleSimple::destructInstance() { } +void soModelModuleSimple::constructInstance(gfSceneRoot::LayerType, u32 flags, + bool, s8, nw4r::g3d::ResFile, const char*, const char*, s16 mdlResId, + void*, u8 loupeNo, int priorityDrawXlu) { } +void soModelModuleSimple::clearSetUpMtx() { } +void soModelModuleSimple::setUpSkinningMtx() { } +void soModelModuleSimple::setUpMtx(u32 nodeId) { } +void soModelModuleSimple::setUpMtx(u32* nodeIds, s32 numNodeIds) { } +void soModelModuleSimple::setUpMtxFinal() { }