summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/eur/arm9/overlays/ov000/delinks.txt6
-rw-r--r--config/eur/arm9/overlays/ov000/relocs.txt10
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt23
-rw-r--r--config/eur/arm9/symbols.txt4
-rw-r--r--config/usa/arm9/overlays/ov000/delinks.txt6
-rw-r--r--config/usa/arm9/overlays/ov000/relocs.txt10
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt25
-rw-r--r--config/usa/arm9/symbols.txt4
-rw-r--r--include/Actor/Navi/ActorNavi.hpp4
-rw-r--r--include/Render/ModelRender.hpp70
-rw-r--r--src/00_Core/Item/ItemManager.cpp2
-rw-r--r--src/00_Core/Render/ModelRender.cpp195
-rw-r--r--src/04_Load/Actor/Navi/ActorNavi_04.cpp4
-rw-r--r--src/58_Bombchu/Player/EquipBombchu.cpp4
-rw-r--r--src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp2
15 files changed, 278 insertions, 91 deletions
diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt
index 5d53bcbc..fdd47cf9 100644
--- a/config/eur/arm9/overlays/ov000/delinks.txt
+++ b/config/eur/arm9/overlays/ov000/delinks.txt
@@ -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 \ 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 29d455ef..971f6546 100644
--- a/config/eur/arm9/overlays/ov000/relocs.txt
+++ b/config/eur/arm9/overlays/ov000/relocs.txt
@@ -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
diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt
index 95d61cf2..4ed2a2d1 100644
--- a/config/eur/arm9/overlays/ov000/symbols.txt
+++ b/config/eur/arm9/overlays/ov000/symbols.txt
@@ -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
diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt
index 5f15907d..b5cfcfa7 100644
--- a/config/eur/arm9/symbols.txt
+++ b/config/eur/arm9/symbols.txt
@@ -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
diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt
index c80d50a1..cae2e579 100644
--- a/config/usa/arm9/overlays/ov000/delinks.txt
+++ b/config/usa/arm9/overlays/ov000/delinks.txt
@@ -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 \ 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 abe8bf8e..82e14c8d 100644
--- a/config/usa/arm9/overlays/ov000/relocs.txt
+++ b/config/usa/arm9/overlays/ov000/relocs.txt
@@ -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
diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt
index e8604eff..25db19b7 100644
--- a/config/usa/arm9/overlays/ov000/symbols.txt
+++ b/config/usa/arm9/overlays/ov000/symbols.txt
@@ -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
diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt
index cece0af2..f5117022 100644
--- a/config/usa/arm9/symbols.txt
+++ b/config/usa/arm9/symbols.txt
@@ -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
diff --git a/include/Actor/Navi/ActorNavi.hpp b/include/Actor/Navi/ActorNavi.hpp
index 4dbad5fe..841c91f1 100644
--- a/include/Actor/Navi/ActorNavi.hpp
+++ b/include/Actor/Navi/ActorNavi.hpp
@@ -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;
diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp
index 8698d5b9..d0fca92a 100644
--- a/include/Render/ModelRender.hpp
+++ b/include/Render/ModelRender.hpp
@@ -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);
};
diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp
index c15eafe4..2e1f3c01 100644
--- a/src/00_Core/Item/ItemManager.cpp
+++ b/src/00_Core/Item/ItemManager.cpp
@@ -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 {
diff --git a/src/00_Core/Render/ModelRender.cpp b/src/00_Core/Render/ModelRender.cpp
index 92d32375..cd984739 100644
--- a/src/00_Core/Render/ModelRender.cpp
+++ b/src/00_Core/Render/ModelRender.cpp
@@ -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);
+} \ No newline at end of file
diff --git a/src/04_Load/Actor/Navi/ActorNavi_04.cpp b/src/04_Load/Actor/Navi/ActorNavi_04.cpp
index 13bac706..d442f909 100644
--- a/src/04_Load/Actor/Navi/ActorNavi_04.cpp
+++ b/src/04_Load/Actor/Navi/ActorNavi_04.cpp
@@ -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();
diff --git a/src/58_Bombchu/Player/EquipBombchu.cpp b/src/58_Bombchu/Player/EquipBombchu.cpp
index 8b28d754..d52dc6c7 100644
--- a/src/58_Bombchu/Player/EquipBombchu.cpp
+++ b/src/58_Bombchu/Player/EquipBombchu.cpp
@@ -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);
diff --git a/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp b/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp
index 07b8a4a5..9df98e3d 100644
--- a/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp
+++ b/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp
@@ -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;