Decomp ModelRender (#139)

* decomp ModelRender

* fix ModelRender function name

* fix other ModelRender references

* reloc vtables

* fix ModelRender obect size

* fix matches

* match 100%
This commit is contained in:
enzofc708
2026-01-30 12:30:17 -03:00
committed by GitHub
parent 90b0175de6
commit 63b823ef2c
15 changed files with 278 additions and 91 deletions
+5 -1
View File
@@ -111,7 +111,7 @@ src/00_Core/Player/LinkStateDamage.cpp:
src/00_Core/Player/LinkStateFollow.cpp:
.text start:0x020a8f74 end:0x020a92a4
.data start:0x020e575c end:0x020e58e8
.data start:0x020e575c end:0x020e57f0
src/00_Core/Player/LinkStateInteract.cpp:
.text start:0x020aa32c end:0x020abd78
@@ -153,3 +153,7 @@ src/00_Core/Save/AdventureFlags.cpp:
src/00_Core/Game/GameModePlay.cpp:
.text start:0x02079d28 end:0x02079ddc
src/00_Core/Render/ModelRender.cpp:
.text start:0x020a956c end:0x020a99e0
.data start:0x020e5818 end:0x020e5860
+5 -5
View File
@@ -4799,18 +4799,18 @@ from:0x020a92f8 kind:load to:0x020e57f0 module:overlay(0)
from:0x020a9524 kind:load to:0x027e0d78 module:dtcm
from:0x020a9538 kind:arm_call to:0x0202ea0c module:main
from:0x020a9560 kind:arm_call to:0x0202ea0c module:main
from:0x020a9584 kind:load to:0x020e5820 module:overlay(0)
from:0x020a95a0 kind:load to:0x020e5820 module:overlay(0)
from:0x020a9584 kind:load to:0x020e5818 add:8 module:overlay(0)
from:0x020a95a0 kind:load to:0x020e5818 add:8 module:overlay(0)
from:0x020a95b2 kind:thumb_call_arm to:0x0202ea18 module:main
from:0x020a95b8 kind:thumb_call to:0x020b3ea8 module:overlay(0)
from:0x020a95c0 kind:load to:0x020e5820 module:overlay(0)
from:0x020a95c0 kind:load to:0x020e5818 add:8 module:overlay(0)
from:0x020a95d2 kind:thumb_call_arm to:0x0202ea18 module:main
from:0x020a95d8 kind:thumb_call to:0x020b3ea8 module:overlay(0)
from:0x020a95de kind:thumb_call_arm to:0x0202ea0c module:main
from:0x020a95e8 kind:load to:0x020e5820 module:overlay(0)
from:0x020a95e8 kind:load to:0x020e5818 add:8 module:overlay(0)
from:0x020a95fa kind:thumb_call_arm to:0x0202ea18 module:main
from:0x020a9600 kind:thumb_call to:0x020b3ea8 module:overlay(0)
from:0x020a9608 kind:load to:0x020e5820 module:overlay(0)
from:0x020a9608 kind:load to:0x020e5818 add:8 module:overlay(0)
from:0x020a9620 kind:load to:0x020189dc module:main
from:0x020a9664 kind:arm_call to:0x020183b4 module:main
from:0x020a9670 kind:arm_call to:0x020079d8 module:main
+12 -11
View File
@@ -1992,26 +1992,26 @@ _ZN11ModelRenderD1Ev kind:function(thumb,size=0x20) addr:0x020a95a4
_ZN11ModelRenderD0Ev kind:function(thumb,size=0x28) addr:0x020a95c4
_ZN11ModelRenderD2Ev kind:function(thumb,size=0x20) addr:0x020a95ec
_ZN11ModelRender14GetLcdcAddressEv kind:function(arm,size=0x8) addr:0x020a960c
_ZN11ModelRender8vfunc_0cEP9ItemModel kind:function(arm,size=0x10) addr:0x020a9614
_ZN11ModelRender19func_ov000_020a9624Ei kind:function(arm,size=0x2c) addr:0x020a9624
_ZN11ModelRender28Init_ModelRender_UnkStruct_4EP9ItemModel kind:function(arm,size=0x10) addr:0x020a9614
_ZN11ModelRender16UnkGetBoneMatrixEi kind:function(arm,size=0x2c) addr:0x020a9624
_ZN11ModelRender12SetTransformEP5Vec3pP5Mat3pS1_ kind:function(arm,size=0x84) addr:0x020a9650
_ZN11ModelRender22SetRotationTranslationEP5Mat3pP5Vec3p kind:function(arm,size=0x6c) addr:0x020a96d4
_ZN11ModelRender14SetTranslationEP5Vec3p kind:function(arm,size=0x24) addr:0x020a9740
_ZN11ModelRender20PushGeometryCommandsEv kind:function(arm,size=0x6c) addr:0x020a9764
_ZN11ModelRender8vfunc_20Ev kind:function(arm,size=0x10) addr:0x020a97d0
_ZN11ModelRender18ExecRenderCommandsEv kind:function(arm,size=0x10) addr:0x020a97d0
_ZN11ModelRender8vfunc_24EP24UnkStruct_ov000_020c0c08 kind:function(arm,size=0x18) addr:0x020a97e0
_ZN11ModelRender8vfunc_28Ev kind:function(arm,size=0x6c) addr:0x020a97f8
_ZN11ModelRender8vfunc_2cEv kind:function(arm,size=0x2c) addr:0x020a9864
_ZN11ModelRender8vfunc_34Ev kind:function(arm,size=0x2c) addr:0x020a9890
_ZN11ModelRender8vfunc_30Ev kind:function(arm,size=0x2c) addr:0x020a98bc
_ZN11ModelRender19func_ov000_020a98e8Ei kind:function(arm,size=0x24) addr:0x020a98e8
_ZN11ModelRender19func_ov000_020a990cEi kind:function(arm,size=0x2c) addr:0x020a990c
_ZN11ModelRender19func_ov000_020a9938Ei kind:function(thumb,size=0x28) addr:0x020a9938
_ZN11ModelRender19func_ov000_020a9960EPv kind:function(arm,size=0x8) addr:0x020a9960
_ZN11ModelRender14GetObjectIndexEPc kind:function(arm,size=0x24) addr:0x020a98e8
_ZN11ModelRender16GetMaterialIndexEPc kind:function(arm,size=0x2c) addr:0x020a990c
_ZN11ModelRender20InitBoneMatrixArraysEj kind:function(thumb,size=0x28) addr:0x020a9938
_ZN11ModelRender22SetUnkBoneMatrixArray1EP31ModelRender_UnkBoneMatrixStruct kind:function(arm,size=0x8) addr:0x020a9960
_ZN11ModelRender8vfunc_38Ev kind:function(arm,size=0x2c) addr:0x020a9968
_ZN11ModelRender8vfunc_3cEv kind:function(arm,size=0x4) addr:0x020a9994
_ZN11ModelRender19func_ov000_020a9998Eii kind:function(arm,size=0x28) addr:0x020a9998
_ZN11ModelRender19func_ov000_020a99c0Ev kind:function(arm,size=0x20) addr:0x020a99c0
_ZN11ModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x4) addr:0x020a9994
_ZN11ModelRender22UnkInit_Struct4_ParamsEhh kind:function(arm,size=0x28) addr:0x020a9998
_Z19func_ov000_020a99c0P23ModelRenderCommandsData kind:function(arm,size=0x20) addr:0x020a99c0
func_ov000_020a99e0 kind:function(thumb,size=0x40) addr:0x020a99e0
func_ov000_020a9a20 kind:function(thumb,size=0x20) addr:0x020a9a20
func_ov000_020a9a40 kind:function(thumb,size=0x28) addr:0x020a9a40
@@ -4797,7 +4797,8 @@ data_ov000_020e5778 kind:data(any) addr:0x020e5778
_ZTV15LinkStateFollow kind:data(any) addr:0x020e57a4
data_ov000_020e57f0 kind:data(any) addr:0x020e57f0
data_ov000_020e5808 kind:data(any) addr:0x020e5808
data_ov000_020e5820 kind:data(any) addr:0x020e5820
_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
data_ov000_020e58e8 kind:data(any) addr:0x020e58e8
+2 -2
View File
@@ -802,7 +802,7 @@ func_02018ae8 kind:function(arm,size=0x68) addr:0x02018ae8
func_02018b50 kind:function(arm,size=0x78) addr:0x02018b50
func_02018bc8 kind:function(arm,size=0x74) addr:0x02018bc8
func_02018c3c kind:function(arm,size=0x54) addr:0x02018c3c
func_02018c90 kind:function(arm,size=0x14) addr:0x02018c90
UnkInit_ModelRender_Struct4_Params kind:function(arm,size=0x14) addr:0x02018c90
func_02018ca4 kind:function(arm,size=0x14) addr:0x02018ca4
func_02018cb8 kind:function(arm,size=0x8) addr:0x02018cb8
func_02018cc0 kind:function(arm,size=0xc) addr:0x02018cc0
@@ -847,7 +847,7 @@ func_0201987c kind:function(arm,size=0x40) addr:0x0201987c
func_020198bc kind:function(arm,size=0x48) addr:0x020198bc
func_02019904 kind:function(arm,size=0x17c) addr:0x02019904
func_02019a80 kind:function(arm,size=0x68) addr:0x02019a80
func_02019ae8 kind:function(arm,size=0xdc) addr:0x02019ae8
ExecModelRenderCommands kind:function(arm,size=0xdc) addr:0x02019ae8
func_02019bc4 kind:function(arm,size=0x28) addr:0x02019bc4
func_02019bec kind:function(arm,size=0x28) addr:0x02019bec
func_02019c14 kind:function(arm,size=0x308) addr:0x02019c14
+5 -1
View File
@@ -111,7 +111,7 @@ src/00_Core/Player/LinkStateDamage.cpp:
src/00_Core/Player/LinkStateFollow.cpp:
.text start:0x020a8f14 end:0x020a9244
.data start:0x020e56fc end:0x020e5888
.data start:0x020e56fc end:0x020e5790
src/00_Core/Player/LinkStateInteract.cpp:
.text start:0x020aa2cc end:0x020abd18
@@ -153,3 +153,7 @@ src/00_Core/Save/AdventureFlags.cpp:
src/00_Core/Game/GameModePlay.cpp:
.text start:0x02079cc8 end:0x02079d7c
src/00_Core/Render/ModelRender.cpp:
.text start:0x020a950c end:0x020a9980
.data start:0x020e57b8 end:0x020e5800
+5 -5
View File
@@ -4799,18 +4799,18 @@ from:0x020a9298 kind:load to:0x020e5790 module:overlay(0)
from:0x020a94c4 kind:load to:0x027e0d78 module:dtcm
from:0x020a94d8 kind:arm_call to:0x0202ea08 module:main
from:0x020a9500 kind:arm_call to:0x0202ea08 module:main
from:0x020a9524 kind:load to:0x020e57c0 module:overlay(0)
from:0x020a9540 kind:load to:0x020e57c0 module:overlay(0)
from:0x020a9524 kind:load to:0x020e57b8 add:8 module:overlay(0)
from:0x020a9540 kind:load to:0x020e57b8 add:8 module:overlay(0)
from:0x020a9552 kind:thumb_call_arm to:0x0202ea14 module:main
from:0x020a9558 kind:thumb_call to:0x020b3e48 module:overlay(0)
from:0x020a9560 kind:load to:0x020e57c0 module:overlay(0)
from:0x020a9560 kind:load to:0x020e57b8 add:8 module:overlay(0)
from:0x020a9572 kind:thumb_call_arm to:0x0202ea14 module:main
from:0x020a9578 kind:thumb_call to:0x020b3e48 module:overlay(0)
from:0x020a957e kind:thumb_call_arm to:0x0202ea08 module:main
from:0x020a9588 kind:load to:0x020e57c0 module:overlay(0)
from:0x020a9588 kind:load to:0x020e57b8 add:8 module:overlay(0)
from:0x020a959a kind:thumb_call_arm to:0x0202ea14 module:main
from:0x020a95a0 kind:thumb_call to:0x020b3e48 module:overlay(0)
from:0x020a95a8 kind:load to:0x020e57c0 module:overlay(0)
from:0x020a95a8 kind:load to:0x020e57b8 add:8 module:overlay(0)
from:0x020a95c0 kind:load to:0x020189dc module:main
from:0x020a9604 kind:arm_call to:0x020183b4 module:main
from:0x020a9610 kind:arm_call to:0x020079d8 module:main
+13 -12
View File
@@ -1992,26 +1992,26 @@ _ZN11ModelRenderD1Ev kind:function(thumb,size=0x20) addr:0x020a9544
_ZN11ModelRenderD0Ev kind:function(thumb,size=0x28) addr:0x020a9564
_ZN11ModelRenderD2Ev kind:function(thumb,size=0x20) addr:0x020a958c
_ZN11ModelRender14GetLcdcAddressEv kind:function(arm,size=0x8) addr:0x020a95ac
_ZN11ModelRender8vfunc_0cEP9ItemModel kind:function(arm,size=0x10) addr:0x020a95b4
_ZN11ModelRender19func_ov000_020a9624Ei kind:function(arm,size=0x2c) addr:0x020a95c4
_ZN11ModelRender28Init_ModelRender_UnkStruct_4EP9ItemModel kind:function(arm,size=0x10) addr:0x020a95b4
_ZN11ModelRender16UnkGetBoneMatrixEi kind:function(arm,size=0x2c) addr:0x020a95c4
_ZN11ModelRender12SetTransformEP5Vec3pP5Mat3pS1_ kind:function(arm,size=0x84) addr:0x020a95f0
_ZN11ModelRender22SetRotationTranslationEP5Mat3pP5Vec3p kind:function(arm,size=0x6c) addr:0x020a9674
_ZN11ModelRender14SetTranslationEP5Vec3p kind:function(arm,size=0x24) addr:0x020a96e0
_ZN11ModelRender20PushGeometryCommandsEv kind:function(arm,size=0x6c) addr:0x020a9704
_ZN11ModelRender8vfunc_20Ev kind:function(arm,size=0x10) addr:0x020a9770
_ZN11ModelRender18ExecRenderCommandsEv kind:function(arm,size=0x10) addr:0x020a9770
_ZN11ModelRender8vfunc_24EP24UnkStruct_ov000_020c0c08 kind:function(arm,size=0x18) addr:0x020a9780
_ZN11ModelRender8vfunc_28Ev kind:function(arm,size=0x6c) addr:0x020a9798
_ZN11ModelRender8vfunc_2cEv kind:function(arm,size=0x2c) addr:0x020a9804
_ZN11ModelRender8vfunc_34Ev kind:function(arm,size=0x2c) addr:0x020a9830
_ZN11ModelRender8vfunc_30Ev kind:function(arm,size=0x2c) addr:0x020a985c
_ZN11ModelRender19func_ov000_020a98e8Ei kind:function(arm,size=0x24) addr:0x020a9888
_ZN11ModelRender19func_ov000_020a990cEi kind:function(arm,size=0x2c) addr:0x020a98ac
_ZN11ModelRender19func_ov000_020a9938Ei kind:function(thumb,size=0x28) addr:0x020a98d8
_ZN11ModelRender19func_ov000_020a9960EPv kind:function(arm,size=0x8) addr:0x020a9900
_ZN11ModelRender14GetObjectIndexEPc kind:function(arm,size=0x24) addr:0x020a9888
_ZN11ModelRender16GetMaterialIndexEPc kind:function(arm,size=0x2c) addr:0x020a98ac
_ZN11ModelRender20InitBoneMatrixArraysEj kind:function(thumb,size=0x28) addr:0x020a98d8
_ZN11ModelRender22SetUnkBoneMatrixArray1EP31ModelRender_UnkBoneMatrixStruct kind:function(arm,size=0x8) addr:0x020a9900
_ZN11ModelRender8vfunc_38Ev kind:function(arm,size=0x2c) addr:0x020a9908
_ZN11ModelRender8vfunc_3cEv kind:function(arm,size=0x4) addr:0x020a9934
_ZN11ModelRender19func_ov000_020a9998Eii kind:function(arm,size=0x28) addr:0x020a9938
_ZN11ModelRender19func_ov000_020a99c0Ev kind:function(arm,size=0x20) addr:0x020a9960
_ZN11ModelRender8vfunc_3cEP23ModelRenderCommandsData kind:function(arm,size=0x4) addr:0x020a9934
_ZN11ModelRender22UnkInit_Struct4_ParamsEhh kind:function(arm,size=0x28) addr:0x020a9938
_Z19func_ov000_020a99c0P23ModelRenderCommandsData kind:function(arm,size=0x20) addr:0x020a9960
func_ov000_020a99e0 kind:function(thumb,size=0x40) addr:0x020a9980
func_ov000_020a9a20 kind:function(thumb,size=0x20) addr:0x020a99c0
func_ov000_020a9a40 kind:function(thumb,size=0x28) addr:0x020a99e0
@@ -2289,7 +2289,7 @@ _ZN17LinkStateCutscene8vfunc_38Ev kind:function(arm,size=0x94) addr:0x020b3d84
_ZN24UnkStruct_ov004_0210abb8D1Ev kind:function(arm,size=0x1c) addr:0x020b3e18
_ZN24UnkStruct_ov004_0210abb8D0Ev kind:function(arm,size=0x14) addr:0x020b3e34
func_ov000_020b3ea8 kind:function(thumb,size=0x2) addr:0x020b3e48
func_ov000_020b3eac kind:function(arm,size=0x18) addr:0x020b3e4c
GetModelUnknownHeader kind:function(arm,size=0x18) addr:0x020b3e4c
func_ov000_020b3ec4 kind:function(arm,size=0x24) addr:0x020b3e64
func_ov000_020b3ee8 kind:function(arm,size=0x3c) addr:0x020b3e88
func_ov000_020b3f24 kind:function(arm,size=0x54) addr:0x020b3ec4
@@ -4797,7 +4797,8 @@ data_ov000_020e5778 kind:data(any) addr:0x020e5718
_ZTV15LinkStateFollow kind:data(any) addr:0x020e5744
data_ov000_020e57f0 kind:data(any) addr:0x020e5790
data_ov000_020e5808 kind:data(any) addr:0x020e57a8
data_ov000_020e5820 kind:data(any) addr:0x020e57c0
_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
data_ov000_020e58e8 kind:data(any) addr:0x020e5888
+2 -2
View File
@@ -802,7 +802,7 @@ func_02018ae8 kind:function(arm,size=0x68) addr:0x02018ae8
func_02018b50 kind:function(arm,size=0x78) addr:0x02018b50
func_02018bc8 kind:function(arm,size=0x74) addr:0x02018bc8
func_02018c3c kind:function(arm,size=0x54) addr:0x02018c3c
func_02018c90 kind:function(arm,size=0x14) addr:0x02018c90
UnkInit_ModelRender_Struct4_Params kind:function(arm,size=0x14) addr:0x02018c90
func_02018ca4 kind:function(arm,size=0x14) addr:0x02018ca4
func_02018cb8 kind:function(arm,size=0x8) addr:0x02018cb8
func_02018cc0 kind:function(arm,size=0xc) addr:0x02018cc0
@@ -847,7 +847,7 @@ func_0201987c kind:function(arm,size=0x40) addr:0x0201987c
func_020198bc kind:function(arm,size=0x48) addr:0x020198bc
func_02019904 kind:function(arm,size=0x17c) addr:0x02019904
func_02019a80 kind:function(arm,size=0x68) addr:0x02019a80
func_02019ae8 kind:function(arm,size=0xdc) addr:0x02019ae8
ExecModelRenderCommands kind:function(arm,size=0xdc) addr:0x02019ae8
func_02019bc4 kind:function(arm,size=0x28) addr:0x02019bc4
func_02019bec kind:function(arm,size=0x28) addr:0x02019bec
func_02019c14 kind:function(arm,size=0x308) addr:0x02019c14
+1 -3
View File
@@ -45,9 +45,7 @@ public:
/* 344 */ q20 mUnk_344;
/* 348 */ unk32 mUnk_348;
/* 34c */ ActorNaviBase_Unk1 mUnk_34c[4];
/* 35c */ unk8 mUnk_35c[0x28];
/* 384 */ Mat3p mUnk_384;
/* 3a8 */ unk8 mUnk_3a8[0xC];
/* 35c */ ModelRender_UnkBoneMatrixStruct unkBoneMatrixStruct;
/* 3b4 */ EquipHammer *mHammer;
/* 3b8 */ UnkStruct_02057200 mUnk_3b8;
/* 3c0 */ u8 mUnk_3c0;
+50 -20
View File
@@ -8,46 +8,76 @@
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_ov000_020c0c08.hpp"
class ModelRender;
struct ModelRender_UnkBoneMatrixStruct {
/* 00 */ unk8 mUnk_00[0x28];
/* 28 */ Mat3p mUnk_28;
/* 4c */ unk8 mUnk_4c[0xC];
/* 58 */
};
struct ModelRender_UnkStruct_4 {
/* 00 */ unk32 flags;
/* 04 */ void *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
/* 14 */ void *mUnkMaterialFunc;
/* 18 */ void *mUnk_18; // also related to UnkStruct_ov000_020c0c08
/* 1c */ void *mUnkVisibilityFunc;
/* 20 */ void *mUnkFunc_20;
/* 24 */ unk8 mUnk_24;
/* 25 */ unk8 mUnk_25;
/* 26 */ unk8 mUnk_26[2];
/* 28 */ void *mUnk_28;
/* 2c */ ModelRender *mUnk_2c; // pointer to self?
/* 30 */ unk32 mUnk_30;
/* 34 */ ModelRender_UnkBoneMatrixStruct *unkBoneMatrixArray1;
/* 38 */ unk32 mUnk_38[3];
/* 44 */ unk32 mUnk_44[2];
/* 4c */ unk32 mUnk_4c[2];
/* 54 */
};
struct ModelRenderCommandsData {
/* 00 */ u8 command;
/* 04 */ ModelRender_UnkStruct_4 *unkStruct4;
/* 08 */
};
class ItemModel;
class ModelRender : public SysObject {
public:
/* 00 (vtable) */
/* 04 */ u32 mUnk_04;
/* 08 */ void *mLcdcAddr;
/* 0c */ s32 mUnk_0c;
/* 10 */ unk32 mUnk_10;
/* 14 */ s32 mUnk_14;
/* 18 */ unk32 mUnk_18;
/* 1c */ s32 mUnk_1c;
/* 20 */ unk8 mUnk_20[0x38];
/* 58 */ void *mUnk_58;
/* 04 */ ModelRender_UnkStruct_4 mUnk_04;
/* 58 */ ModelRender_UnkBoneMatrixStruct *unkBoneMatrixArray2;
/* 5c */
/* 00 */ virtual ~ModelRender();
/* 08 */ virtual void *GetLcdcAddress();
/* 0c */ virtual void vfunc_0c(ItemModel *model);
/* 0c */ virtual void Init_ModelRender_UnkStruct_4(ItemModel *model);
/* 10 */ virtual void SetTransform(Vec3p *scale, Mat3p *rotation, Vec3p *translation);
/* 14 */ virtual void SetRotationTranslation(Mat3p *rotation, Vec3p *translation);
/* 18 */ virtual void SetTranslation(Vec3p *translation);
/* 1c */ virtual void PushGeometryCommands();
/* 20 */ virtual void vfunc_20();
/* 20 */ virtual void ExecRenderCommands(); // Reads the NSBMD Render Commands and push instructions to the FIFO
/* 24 */ virtual void vfunc_24(UnkStruct_ov000_020c0c08 *param1);
/* 28 */ virtual void vfunc_28();
/* 2c */ virtual void vfunc_2c();
/* 30 */ virtual void vfunc_30();
/* 34 */ virtual void vfunc_34();
/* 38 */ virtual void vfunc_38();
/* 3c */ virtual void vfunc_3c();
/* 3c */ virtual void vfunc_3c(ModelRenderCommandsData *renderData);
/* 40 */
ModelRender(ItemModel *param1);
void *func_ov000_020a9624(s32 param1);
void func_ov000_020a98e8(unk32 param1);
void func_ov000_020a990c(unk32 param1);
void func_ov000_020a9938(unk32 param1);
void func_ov000_020a9960(void *param1);
void func_ov000_020a9998(unk32 param1, unk32 param2);
void func_ov000_020a99c0();
ModelRender(ItemModel *itemModel);
ModelRender_UnkBoneMatrixStruct *UnkGetBoneMatrix(s32 index);
s32 GetObjectIndex(char *objectName);
s32 GetMaterialIndex(char *materialName);
void InitBoneMatrixArrays(u32 idLength);
void SetUnkBoneMatrixArray1(ModelRender_UnkBoneMatrixStruct *boneMatrix);
void UnkInit_Struct4_Params(u8 param1, u8 param2);
void func_ov000_020b413c(unk16 param1, Vec3p *param2);
};
+1 -1
View File
@@ -556,7 +556,7 @@ THUMB void ItemManager::LoadFanfareItem(ItemId id) {
strcat(textureName, sSpecialItemModelNames[6]);
model = LoadNsbTexturedModel(mFanfareItemModel, modelName, textureName, 0, 0, 0, true);
}
mUnk_114->vfunc_0c(model);
mUnk_114->Init_ModelRender_UnkStruct_4(model);
}
THUMB bool ItemManager::GetFanfareItemScale(Vec3p *scale) const {
+172 -23
View File
@@ -1,25 +1,174 @@
#include "Render/ModelRender.hpp"
#include "DTCM/UnkStruct_027e037c.hpp"
ModelRender::ModelRender(ItemModel *param1) {}
ModelRender::~ModelRender() {}
void *ModelRender::GetLcdcAddress() {}
void ModelRender::vfunc_0c(ItemModel *model) {}
void *ModelRender::func_ov000_020a9624(s32 param1) {}
void ModelRender::SetTransform(Vec3p *scale, Mat3p *rotation, Vec3p *translation) {}
void ModelRender::SetRotationTranslation(Mat3p *rotation, Vec3p *translation) {}
void ModelRender::SetTranslation(Vec3p *translation) {}
void ModelRender::PushGeometryCommands() {}
void ModelRender::vfunc_20() {}
void ModelRender::vfunc_24(UnkStruct_ov000_020c0c08 *param1) {}
void ModelRender::vfunc_28() {}
void ModelRender::vfunc_2c() {}
void ModelRender::vfunc_34() {}
void ModelRender::vfunc_30() {}
void ModelRender::func_ov000_020a98e8(unk32 param1) {}
void ModelRender::func_ov000_020a990c(unk32 param1) {}
void ModelRender::func_ov000_020a9938(unk32 param1) {}
void ModelRender::func_ov000_020a9960(void *param1) {}
void ModelRender::vfunc_38() {}
void ModelRender::vfunc_3c() {}
void ModelRender::func_ov000_020a9998(unk32 param1, unk32 param2) {}
void ModelRender::func_ov000_020a99c0() {}
extern "C" void func_020189dc(ModelRender_UnkStruct_4 *unkStruct4, ItemModel *model);
extern "C" void func_02018c3c(ModelRender_UnkStruct_4 *unkStruct4, void *param2);
extern "C" void UnkInit_ModelRender_Struct4_Params(ModelRender_UnkStruct_4 *unkStruct4,
void (*func)(ModelRenderCommandsData *), unk32 param3, u8 param4,
u8 param5);
extern "C" void ExecModelRenderCommands(ModelRender_UnkStruct_4 *unkStruct4);
extern "C" void CopySingle288(Mat3p *src, Mat3p *dest);
extern "C" void SetGeometryScale(Vec3p *scale);
extern "C" void SetGeometryTranslation(Vec3p *translation);
extern "C" void PushGeometryCommand(u32 command, void *data, s32 length);
extern "C" void func_ov000_020c0d70(UnkStruct_ov000_020c0c08 *param1, ModelRender_UnkStruct_4 *param2);
extern "C" void func_ov000_020b3ea8(void *param1);
extern "C" unk32 func_0201e388(void *param1, const char *param2);
extern "C" u8 *GetModelUnknownHeader(ModelRender *modelRender);
extern "C" Mat3p gGeomMatrix;
extern "C" Vec3p gGeomTranslation;
extern "C" Vec3p gGeomScale;
extern "C" UnkStruct_027e037c data_027e037c;
extern "C" void *data_027e03c8;
extern "C" Vec3p gDefaultScale;
extern "C" Mat3p gDefaultMatrix;
extern "C" u32 *data_027e0ce0[];
THUMB ModelRender::ModelRender(ItemModel *itemModel) {
this->unkBoneMatrixArray2 = NULL;
this->Init_ModelRender_UnkStruct_4(itemModel);
}
THUMB ModelRender::~ModelRender() {
if (this->unkBoneMatrixArray2 != NULL) {
SysObject::operator delete[](this->unkBoneMatrixArray2);
}
func_ov000_020b3ea8(this);
}
ARM void *ModelRender::GetLcdcAddress() {
return mUnk_04.mLcdcAddr;
}
void ModelRender::Init_ModelRender_UnkStruct_4(ItemModel *model) {
func_020189dc(&this->mUnk_04, model);
}
ModelRender_UnkBoneMatrixStruct *ModelRender::UnkGetBoneMatrix(s32 index) {
if (this->unkBoneMatrixArray2 != NULL) {
return &this->unkBoneMatrixArray2[index];
}
if (this->mUnk_04.unkBoneMatrixArray1 != NULL) {
return &this->mUnk_04.unkBoneMatrixArray1[index];
}
return NULL;
}
void ModelRender::SetTransform(Vec3p *scale, Mat3p *rotation, Vec3p *translation) {
SetGeometryScale(scale);
CopySingle288(rotation, &gGeomMatrix);
data_027e037c.flags = data_027e037c.flags & 0xffffff5b;
SetGeometryTranslation(translation);
this->PushGeometryCommands();
SetGeometryScale(&gDefaultScale);
CopySingle288(&gDefaultMatrix, &gGeomMatrix);
data_027e037c.flags = data_027e037c.flags & 0xffffff5b;
}
void ModelRender::SetRotationTranslation(Mat3p *rotation, Vec3p *translation) {
CopySingle288(rotation, &gGeomMatrix);
data_027e037c.flags = data_027e037c.flags & 0xffffff5b;
SetGeometryTranslation(translation);
this->PushGeometryCommands();
CopySingle288(&gDefaultMatrix, &gGeomMatrix);
data_027e037c.flags = data_027e037c.flags & 0xffffff5b;
}
void ModelRender::SetTranslation(Vec3p *translation) {
SetGeometryTranslation(translation);
this->PushGeometryCommands();
}
void ModelRender::PushGeometryCommands() {
PushGeometryCommand(0x1c, &gGeomTranslation.x, 3);
PushGeometryCommand(0x1a, &gGeomMatrix, 9);
PushGeometryCommand(0x1b, &gGeomScale.x, 3);
this->ExecRenderCommands();
PushGeometryCommand(0x17, &data_027e03c8, 0xc);
}
void ModelRender::ExecRenderCommands() {
ExecModelRenderCommands(&this->mUnk_04);
}
void ModelRender::vfunc_24(UnkStruct_ov000_020c0c08 *param1) {
func_ov000_020c0d70(param1, &this->mUnk_04);
}
void ModelRender::vfunc_28() {
while (this->mUnk_04.mUnk_10 != NULL) {
func_02018c3c(&this->mUnk_04, this->mUnk_04.mUnk_10);
}
while (this->mUnk_04.mUnk_08 != NULL) {
func_02018c3c(&this->mUnk_04, this->mUnk_04.mUnk_08);
}
while (this->mUnk_04.mUnk_18 != NULL) {
func_02018c3c(&this->mUnk_04, this->mUnk_04.mUnk_18);
}
}
void ModelRender::vfunc_2c() {
while (this->mUnk_04.mUnk_10 != NULL) {
func_02018c3c(&this->mUnk_04, this->mUnk_04.mUnk_10);
}
}
void ModelRender::vfunc_34() {
while (this->mUnk_04.mUnk_18 != NULL) {
func_02018c3c(&this->mUnk_04, this->mUnk_04.mUnk_18);
}
}
void ModelRender::vfunc_30() {
while (this->mUnk_04.mUnk_08 != NULL) {
func_02018c3c(&this->mUnk_04, this->mUnk_04.mUnk_08);
}
}
// An object is a subdivision of a model e.g.: link's arm, link's head, etc.
ARM s32 ModelRender::GetObjectIndex(char *objectName) {
char *model = (char *) GetLcdcAddress();
void *objectList = model + 0x40;
unk32 index = func_0201e388(objectList, objectName);
return index;
}
ARM s32 ModelRender::GetMaterialIndex(char *materialName) {
char *model = (char *) GetLcdcAddress();
u32 materialsOffset = *(u32 *) ((u32) model + 8);
void *materialList = (void *) ((u32) model + materialsOffset + 4);
unk32 index = func_0201e388(materialList, materialName);
return index;
}
THUMB void ModelRender::InitBoneMatrixArrays(u32 idLength) {
u32 *id = data_027e0ce0[1];
u8 *unkPtr = GetModelUnknownHeader(this);
u8 boneMatrixCount = *(unkPtr + 3);
ModelRender_UnkBoneMatrixStruct *boneMatrixArray =
(ModelRender_UnkBoneMatrixStruct *) SysObject::operator new[](boneMatrixCount * 0x58, id, idLength);
this->unkBoneMatrixArray2 = boneMatrixArray;
this->mUnk_04.unkBoneMatrixArray1 = boneMatrixArray;
}
ARM void ModelRender::SetUnkBoneMatrixArray1(ModelRender_UnkBoneMatrixStruct *boneMatrix) {
this->mUnk_04.unkBoneMatrixArray1 = boneMatrix;
}
void ModelRender::vfunc_38() {
this->mUnk_04.flags |= 3;
ExecModelRenderCommands(&this->mUnk_04);
this->mUnk_04.flags &= 0xfffffffd;
}
void ModelRender::vfunc_3c(ModelRenderCommandsData *renderData) {}
void func_ov000_020a99c0(ModelRenderCommandsData *renderData) {
renderData->unkStruct4->mUnk_2c->vfunc_3c(renderData);
}
void ModelRender::UnkInit_Struct4_Params(u8 param1, u8 param2) {
this->mUnk_04.mUnk_2c = this;
UnkInit_ModelRender_Struct4_Params(&this->mUnk_04, &func_ov000_020a99c0, 0, param1, param2);
}
+2 -2
View File
@@ -50,7 +50,7 @@ THUMB bool ActorNaviBase::Init() {
ActorNaviBase_Unk3::ActorNaviBase_Unk3(ItemModel *param1) :
ModelRender(param1) {
this->func_ov000_020a9998(6, 3);
this->UnkInit_Struct4_Params(6, 3);
}
THUMB ActorNavi::ActorNavi() :
@@ -69,7 +69,7 @@ extern const ItemManager_Unk1 data_ov000_020dc7d0;
THUMB bool ActorNavi::Init() {
mUnk_2f0.func_ov000_020c0c44(gItemManager->func_ov00_020ad538(&data_ov000_020dc7d0));
mUnk_2f0.func_ov000_020c0e5c(0);
mUnk_294.func_ov000_020a9960(&mUnk_35c);
mUnk_294.SetUnkBoneMatrixArray1(&unkBoneMatrixStruct);
mUnk_294.vfunc_24(&mUnk_2f0);
mUnk_3c4 = ActorNaviBase::vfunc_c4();
mUnk_3c6 = ActorNaviBase::vfunc_c8();
+2 -2
View File
@@ -87,8 +87,8 @@ static const ItemManager_Unk1 sEquipBombchu_Unk1 = {
};
THUMB void EquipBombchu::vfunc_00() {
gModelRenderBombchu.vfunc_0c(gItemManager->GetItemModel(ItemModelId_Bombchu));
gModelRenderBombchuPt.vfunc_0c(gItemManager->GetItemModel(ItemModelId_BombchuPt));
gModelRenderBombchu.Init_ModelRender_UnkStruct_4(gItemManager->GetItemModel(ItemModelId_Bombchu));
gModelRenderBombchuPt.Init_ModelRender_UnkStruct_4(gItemManager->GetItemModel(ItemModelId_BombchuPt));
data_ov058_0219b0a0.mUnk_08 = gItemManager->GetItemModel(ItemModelId_BombchuPt);
data_ov058_0219b0a0.func_ov000_020c0c44(gItemManager->func_ov00_020ad538(&sEquipBombchu_Unk1));
data_ov058_0219b0a0.func_ov000_020c0e5c(0);
@@ -45,7 +45,7 @@ ARM void ActorNavi::func_ov059_0219aa08(bool param1) {
this->mUnk_334.mUnk_00.x =
ROUND_Q20(uVar4) | ((this->mUnk_344 >> 0x1F) * 0x666 + (lVar2 >> 0x20) + (~0x800 < uVar4)) * 0x100000;
Mat3p_MultiplyVec(&this->mUnk_334.mUnk_00, &this->mUnk_384, &this->mUnk_334.mUnk_00);
Mat3p_MultiplyVec(&this->mUnk_334.mUnk_00, &this->unkBoneMatrixStruct.mUnk_28, &this->mUnk_334.mUnk_00);
Vec3p_RotateY(uVar3, &this->mUnk_334.mUnk_00);
Vec3p_Add(&this->mUnk_334.mUnk_00, &VStack_24, &this->mUnk_334.mUnk_00);
VStack_60.z = this->mUnk_334.mUnk_00.z;