From 347ac5860d1f1b3701d057ba82e0e0c349136862 Mon Sep 17 00:00:00 2001 From: Mityno <84503460+Mityno@users.noreply.github.com> Date: Sat, 15 Aug 2026 16:11:44 +0000 Subject: [PATCH] Decompiling MapObjectUnkSTAT (#134) * feat: Match MapObjectUnkSTAT ctor and decompile its profile, rename vfuncs * feat: Decompile vfuncs (match 3/4) * feat: Start decompiling func_ov063_0215f7ac * fix: Update symbols and fix wrong behavior * feat: Improve func_ov063_0215f7ac * feat: Investigate func_ov063_0215f7ac conditions * feat: Decompile funcs, rename symbols, update .bss * feat: Improvements to functions * feat: Add .data for jp --- config/eur/arm9/overlays/ov063/delinks.txt | 1 + config/eur/arm9/overlays/ov063/relocs.txt | 24 +- config/eur/arm9/overlays/ov063/symbols.txt | 20 +- config/jp/arm9/overlays/ov063/delinks.txt | 1 + config/jp/arm9/overlays/ov063/relocs.txt | 24 +- config/jp/arm9/overlays/ov063/symbols.txt | 22 +- config/jp/arm9/symbols.txt | 2 +- include/MapObject/MapObject.hpp | 5 +- include/MapObject/MapObjectUnkSTAT.hpp | 41 +++- src/063_Shrine/MapObject/MapObjectUnkSTAT.cpp | 227 +++++++++++++++++- 10 files changed, 301 insertions(+), 66 deletions(-) diff --git a/config/eur/arm9/overlays/ov063/delinks.txt b/config/eur/arm9/overlays/ov063/delinks.txt index 7647229b..6ad77295 100644 --- a/config/eur/arm9/overlays/ov063/delinks.txt +++ b/config/eur/arm9/overlays/ov063/delinks.txt @@ -58,6 +58,7 @@ src/063_Shrine/MapObject/MapObjectUnkSTAT.cpp: .text start:0x0215f544 end:0x0215fd94 .init start:0x02162b7c end:0x02162bcc .ctor start:0x02162e64 end:0x02162e68 + .data start:0x02163820 end:0x021638c0 .bss start:0x02164400 end:0x02164514 src/063_Shrine/MapObject/MapObjectUnkWLMS.cpp: diff --git a/config/eur/arm9/overlays/ov063/relocs.txt b/config/eur/arm9/overlays/ov063/relocs.txt index c1be0aae..6569529f 100644 --- a/config/eur/arm9/overlays/ov063/relocs.txt +++ b/config/eur/arm9/overlays/ov063/relocs.txt @@ -993,14 +993,14 @@ from:0x0215f560 kind:arm_call to:0x02011f3c module:main from:0x0215f56c kind:arm_call to:0x0215f608 module:overlay(63) from:0x0215f584 kind:arm_call to:0x0209c9a8 module:overlay(0) from:0x0215f594 kind:arm_call to:0x0207c018 module:overlay(0) -from:0x0215f5f4 kind:load to:0x02163828 module:overlay(63) -from:0x0215f5f8 kind:load to:0x02163860 module:overlay(63) -from:0x0215f5fc kind:load to:0x02163844 module:overlay(63) +from:0x0215f5f4 kind:load to:0x02163820 module:overlay(63) add:0x8 +from:0x0215f5f8 kind:load to:0x02163858 module:overlay(63) add:0x8 +from:0x0215f5fc kind:load to:0x0216383c module:overlay(63) add:0x8 from:0x0215f610 kind:arm_call to:0x0209cfe0 module:overlay(0) -from:0x0215f6c0 kind:load to:0x02163888 module:overlay(63) +from:0x0215f6c0 kind:load to:0x02163880 module:overlay(63) add:0x8 from:0x0215f6c4 kind:load to:0x02164410 module:overlay(63) from:0x0215f6c8 kind:load to:0x020b1960 add:0x8 module:overlay(0) -from:0x0215f6cc kind:load to:0x021644e4 module:overlay(63) +from:0x0215f6cc kind:load to:0x02164410 add:0xd4 module:overlay(63) from:0x0215f6f0 kind:arm_call to:0x0215fc40 module:overlay(63) from:0x0215f72c kind:arm_call to:0x01ffb428 module:itcm from:0x0215f758 kind:arm_call to:0x0215f7ac module:overlay(63) @@ -1062,8 +1062,8 @@ from:0x0215fdb0 kind:arm_call to:0x02011f3c module:main from:0x0215fdbc kind:arm_call to:0x0215fec4 module:overlay(63) from:0x0215fdd8 kind:arm_call to:0x0209c9a8 module:overlay(0) from:0x0215fde8 kind:arm_call to:0x0207c018 module:overlay(0) -from:0x0215fe60 kind:load to:0x02163828 module:overlay(63) -from:0x0215fe64 kind:load to:0x02163860 module:overlay(63) +from:0x0215fe60 kind:load to:0x02163820 module:overlay(63) add:0x8 +from:0x0215fe64 kind:load to:0x02163858 module:overlay(63) add:0x8 from:0x0215fe68 kind:load to:0x02163928 module:overlay(63) from:0x0215fe84 kind:load to:0x02163910 module:overlay(63) from:0x0215fea8 kind:load to:0x0204a088 module:main @@ -1210,8 +1210,8 @@ from:0x02160eb4 kind:arm_call to:0x02011f3c module:main from:0x02160ec0 kind:arm_call to:0x02160f64 module:overlay(63) from:0x02160ed8 kind:arm_call to:0x0209c9a8 module:overlay(0) from:0x02160ee8 kind:arm_call to:0x0207c018 module:overlay(0) -from:0x02160f48 kind:load to:0x02163828 module:overlay(63) -from:0x02160f4c kind:load to:0x02163860 module:overlay(63) +from:0x02160f48 kind:load to:0x02163820 module:overlay(63) add:0x8 +from:0x02160f4c kind:load to:0x02163858 module:overlay(63) add:0x8 from:0x02160f50 kind:load to:0x02163a9c module:overlay(63) from:0x02160f6c kind:arm_call to:0x0209cfe0 module:overlay(0) from:0x02160fc4 kind:arm_call_thumb to:0x02057b70 module:overlay(0) @@ -1252,8 +1252,8 @@ from:0x0216144c kind:arm_call to:0x02011f3c module:main from:0x02161458 kind:arm_call to:0x0216163c module:overlay(63) from:0x02161470 kind:arm_call to:0x0209c9a8 module:overlay(0) from:0x02161480 kind:arm_call to:0x0207c018 module:overlay(0) -from:0x021614e0 kind:load to:0x02163828 module:overlay(63) -from:0x021614e4 kind:load to:0x02163860 module:overlay(63) +from:0x021614e0 kind:load to:0x02163820 module:overlay(63) add:0x8 +from:0x021614e4 kind:load to:0x02163858 module:overlay(63) add:0x8 from:0x021614e8 kind:load to:0x02163b0c module:overlay(63) from:0x02161508 kind:load to:0x02163af8 module:overlay(63) from:0x02161518 kind:load to:0x0216153c module:overlay(63) @@ -1486,7 +1486,7 @@ from:0x02162d00 kind:load to:0x02163900 module:overlay(63) from:0x02162d04 kind:load to:0x021638fc module:overlay(63) from:0x02162d08 kind:load to:0x02164514 module:overlay(63) from:0x02162d0c kind:load to:0x0216458c module:overlay(63) -from:0x02162d10 kind:load to:0x02164504 module:overlay(63) +from:0x02162d10 kind:load to:0x02164410 add:0xf4 module:overlay(63) from:0x02162d14 kind:load to:0x02164604 module:overlay(63) from:0x02162d18 kind:load to:0x02160a4c module:overlay(63) from:0x02162d1c kind:load to:0x02164508 module:overlay(63) diff --git a/config/eur/arm9/overlays/ov063/symbols.txt b/config/eur/arm9/overlays/ov063/symbols.txt index 9ff00512..300c0a29 100644 --- a/config/eur/arm9/overlays/ov063/symbols.txt +++ b/config/eur/arm9/overlays/ov063/symbols.txt @@ -264,12 +264,12 @@ _ZN23MapObjectProfileUnkSTAT10GetProfileEv kind:function(arm,size=0xc) addr:0x02 _ZN23MapObjectProfileUnkSTAT6CreateEv kind:function(arm,size=0x24) addr:0x0215f550 _ZN23MapObjectProfileUnkSTATC1Ev kind:function(arm,size=0x94) addr:0x0215f574 _ZN16MapObjectUnkSTATC1Ev kind:function(arm,size=0xc8) addr:0x0215f608 -_ZN16MapObjectUnkSTAT19func_ov063_0215f6d0Ev kind:function(arm,size=0x40) addr:0x0215f6d0 -_ZN16MapObjectUnkSTAT19func_ov063_0215f710Ev kind:function(arm,size=0x88) addr:0x0215f710 -_ZN16MapObjectUnkSTAT19func_ov063_0215f798Ev kind:function(arm,size=0x14) addr:0x0215f798 +_ZN16MapObjectUnkSTAT8vfunc_00Ev kind:function(arm,size=0x40) addr:0x0215f6d0 +_ZN16MapObjectUnkSTAT8vfunc_08Ev kind:function(arm,size=0x88) addr:0x0215f710 +_ZN16MapObjectUnkSTAT8vfunc_0CEv kind:function(arm,size=0x14) addr:0x0215f798 _ZN16MapObjectUnkSTAT19func_ov063_0215f7acEv kind:function(arm,size=0x494) addr:0x0215f7ac -_ZN16MapObjectUnkSTAT19func_ov063_0215fc40Ev kind:function(arm,size=0x48) addr:0x0215fc40 -_ZN16MapObjectUnkSTAT19func_ov063_0215fc88Ev kind:function(arm,size=0x58) addr:0x0215fc88 +_ZN16MapObjectUnkSTAT19func_ov063_0215fc40Ei kind:function(arm,size=0x48) addr:0x0215fc40 +_ZN16MapObjectUnkSTAT8vfunc_14Ev kind:function(arm,size=0x58) addr:0x0215fc88 _ZN16MapObjectUnkSTAT19func_ov063_0215fce0Ev kind:function(arm,size=0x58) addr:0x0215fce0 _ZN16MapObjectUnkSTATD1Ev kind:function(arm,size=0x20) addr:0x0215fd38 _ZN16MapObjectUnkSTATD0Ev kind:function(arm,size=0x28) addr:0x0215fd58 @@ -468,10 +468,10 @@ data_ov063_02163740 kind:data(any) addr:0x02163740 _ZTV19ActorProfileUnkRBLS kind:data(any) addr:0x02163758 data_ov063_02163784 kind:data(any) addr:0x02163784 _ZTV19data_ov063_021637c4 kind:data(any) addr:0x021637c4 -data_ov063_02163828 kind:data(any) addr:0x02163828 -data_ov063_02163844 kind:data(any) addr:0x02163844 -data_ov063_02163860 kind:data(any) addr:0x02163860 -data_ov063_02163888 kind:data(any) addr:0x02163888 +_ZTV28MapObjectProfileUnkSTAT_Base kind:data(any) addr:0x02163820 +_ZTV23MapObjectProfileUnkSTAT kind:data(any) addr:0x0216383c +_ZTV31MapObjectProfileUnkSTAT_Base_D4 kind:data(any) addr:0x02163858 +_ZTV16MapObjectUnkSTAT kind:data(any) addr:0x02163880 data_ov063_021638c0 kind:data(any) addr:0x021638c0 data_ov063_021638c8 kind:data(any) addr:0x021638c8 data_ov063_021638d4 kind:data(any) addr:0x021638d4 @@ -533,8 +533,6 @@ _ZN15ProfileInstanceI19ActorProfileUnkRBLSE8sProfileE kind:bss addr:0x02164328 _ZGVN15ProfileInstanceI23MapObjectProfileUnkSTATE8sProfileE kind:bss addr:0x02164400 @12245 kind:bss addr:0x02164404 _ZN15ProfileInstanceI23MapObjectProfileUnkSTATE8sProfileE kind:bss addr:0x02164410 -data_ov063_021644e4 kind:bss addr:0x021644e4 -data_ov063_02164504 kind:bss addr:0x02164504 data_ov063_02164508 kind:bss addr:0x02164508 _ZGVN15ProfileInstanceI23MapObjectProfileUnkWLMSE8sProfileE kind:bss addr:0x02164514 @12251 kind:bss addr:0x0216458c diff --git a/config/jp/arm9/overlays/ov063/delinks.txt b/config/jp/arm9/overlays/ov063/delinks.txt index 2606270a..9b303be6 100644 --- a/config/jp/arm9/overlays/ov063/delinks.txt +++ b/config/jp/arm9/overlays/ov063/delinks.txt @@ -58,6 +58,7 @@ src/063_Shrine/MapObject/MapObjectUnkSTAT.cpp: .text start:0x02161318 end:0x02161b68 .init start:0x02164994 end:0x021649e4 .ctor start:0x02164c7c end:0x02164c80 + .data start:0x02165640 end:0x021656e0 .bss start:0x02166220 end:0x021663a4 src/063_Shrine/MapObject/MapObjectUnkWLMS.cpp: diff --git a/config/jp/arm9/overlays/ov063/relocs.txt b/config/jp/arm9/overlays/ov063/relocs.txt index 4d4ad6a5..b549c288 100644 --- a/config/jp/arm9/overlays/ov063/relocs.txt +++ b/config/jp/arm9/overlays/ov063/relocs.txt @@ -1000,14 +1000,14 @@ from:0x02161334 kind:arm_call to:0x02011f3c module:main from:0x02161340 kind:arm_call to:0x021613dc module:overlay(63) from:0x02161358 kind:arm_call to:0x0209e16c module:overlay(0) from:0x02161368 kind:arm_call to:0x0207d6d0 module:overlay(0) -from:0x021613c8 kind:load to:0x02165648 module:overlay(63) -from:0x021613cc kind:load to:0x02165680 module:overlay(63) -from:0x021613d0 kind:load to:0x02165664 module:overlay(63) +from:0x021613c8 kind:load to:0x02165640 module:overlay(63) add:0x8 +from:0x021613cc kind:load to:0x02165678 module:overlay(63) add:0x8 +from:0x021613d0 kind:load to:0x0216565c module:overlay(63) add:0x8 from:0x021613e4 kind:arm_call to:0x0209e7a4 module:overlay(0) -from:0x02161494 kind:load to:0x021656a8 module:overlay(63) +from:0x02161494 kind:load to:0x021656a0 module:overlay(63) add:0x8 from:0x02161498 kind:load to:0x02166230 module:overlay(63) from:0x0216149c kind:load to:0x020b3160 add:0x8 module:overlay(0) -from:0x021614a0 kind:load to:0x02166304 module:overlay(63) +from:0x021614a0 kind:load to:0x02166230 add:0xd4 module:overlay(63) from:0x021614c4 kind:arm_call to:0x02161a14 module:overlay(63) from:0x02161500 kind:arm_call to:0x01ffb428 module:itcm from:0x0216152c kind:arm_call to:0x02161580 module:overlay(63) @@ -1069,8 +1069,8 @@ from:0x02161b84 kind:arm_call to:0x02011f3c module:main from:0x02161b90 kind:arm_call to:0x02161c98 module:overlay(63) from:0x02161bac kind:arm_call to:0x0209e16c module:overlay(0) from:0x02161bbc kind:arm_call to:0x0207d6d0 module:overlay(0) -from:0x02161c34 kind:load to:0x02165648 module:overlay(63) -from:0x02161c38 kind:load to:0x02165680 module:overlay(63) +from:0x02161c34 kind:load to:0x02165640 module:overlay(63) add:0x8 +from:0x02161c38 kind:load to:0x02165678 module:overlay(63) add:0x8 from:0x02161c3c kind:load to:0x02165748 module:overlay(63) from:0x02161c58 kind:load to:0x02165730 module:overlay(63) from:0x02161c7c kind:load to:0x0204b608 module:main @@ -1218,8 +1218,8 @@ from:0x02162ccc kind:arm_call to:0x02011f3c module:main from:0x02162cd8 kind:arm_call to:0x02162d7c module:overlay(63) from:0x02162cf0 kind:arm_call to:0x0209e16c module:overlay(0) from:0x02162d00 kind:arm_call to:0x0207d6d0 module:overlay(0) -from:0x02162d60 kind:load to:0x02165648 module:overlay(63) -from:0x02162d64 kind:load to:0x02165680 module:overlay(63) +from:0x02162d60 kind:load to:0x02165640 module:overlay(63) add:0x8 +from:0x02162d64 kind:load to:0x02165678 module:overlay(63) add:0x8 from:0x02162d68 kind:load to:0x021658bc module:overlay(63) from:0x02162d84 kind:arm_call to:0x0209e7a4 module:overlay(0) from:0x02162ddc kind:arm_call_thumb to:0x020590f0 module:overlay(0) @@ -1260,8 +1260,8 @@ from:0x02163264 kind:arm_call to:0x02011f3c module:main from:0x02163270 kind:arm_call to:0x02163454 module:overlay(63) from:0x02163288 kind:arm_call to:0x0209e16c module:overlay(0) from:0x02163298 kind:arm_call to:0x0207d6d0 module:overlay(0) -from:0x021632f8 kind:load to:0x02165648 module:overlay(63) -from:0x021632fc kind:load to:0x02165680 module:overlay(63) +from:0x021632f8 kind:load to:0x02165640 module:overlay(63) add:0x8 +from:0x021632fc kind:load to:0x02165678 module:overlay(63) add:0x8 from:0x02163300 kind:load to:0x0216592c module:overlay(63) from:0x02163320 kind:load to:0x02165918 module:overlay(63) from:0x02163330 kind:load to:0x02163354 module:overlay(63) @@ -1494,7 +1494,7 @@ from:0x02164b18 kind:load to:0x02165720 module:overlay(63) from:0x02164b1c kind:load to:0x0216571c module:overlay(63) from:0x02164b20 kind:load to:0x02166334 module:overlay(63) from:0x02164b24 kind:load to:0x021663ac module:overlay(63) -from:0x02164b28 kind:load to:0x02166324 module:overlay(63) +from:0x02164b28 kind:load to:0x02166230 add:0xf4 module:overlay(63) from:0x02164b2c kind:load to:0x02166424 module:overlay(63) from:0x02164b30 kind:load to:0x02162864 module:overlay(63) from:0x02164b34 kind:load to:0x02166328 module:overlay(63) diff --git a/config/jp/arm9/overlays/ov063/symbols.txt b/config/jp/arm9/overlays/ov063/symbols.txt index 528e418c..b8a1f070 100644 --- a/config/jp/arm9/overlays/ov063/symbols.txt +++ b/config/jp/arm9/overlays/ov063/symbols.txt @@ -265,12 +265,12 @@ _ZN23MapObjectProfileUnkSTAT10GetProfileEv kind:function(arm,size=0xc) addr:0x02 _ZN23MapObjectProfileUnkSTAT6CreateEv kind:function(arm,size=0x24) addr:0x02161324 _ZN23MapObjectProfileUnkSTATC1Ev kind:function(arm,size=0x94) addr:0x02161348 _ZN16MapObjectUnkSTATC1Ev kind:function(arm,size=0xc8) addr:0x021613dc -_ZN16MapObjectUnkSTAT19func_ov063_0215f6d0Ev kind:function(arm,size=0x40) addr:0x021614a4 -_ZN16MapObjectUnkSTAT19func_ov063_0215f710Ev kind:function(arm,size=0x88) addr:0x021614e4 -_ZN16MapObjectUnkSTAT19func_ov063_0215f798Ev kind:function(arm,size=0x14) addr:0x0216156c +_ZN16MapObjectUnkSTAT8vfunc_00Ev kind:function(arm,size=0x40) addr:0x021614a4 +_ZN16MapObjectUnkSTAT8vfunc_08Ev kind:function(arm,size=0x88) addr:0x021614e4 +_ZN16MapObjectUnkSTAT8vfunc_0CEv kind:function(arm,size=0x14) addr:0x0216156c _ZN16MapObjectUnkSTAT19func_ov063_0215f7acEv kind:function(arm,size=0x494) addr:0x02161580 -_ZN16MapObjectUnkSTAT19func_ov063_0215fc40Ev kind:function(arm,size=0x48) addr:0x02161a14 -_ZN16MapObjectUnkSTAT19func_ov063_0215fc88Ev kind:function(arm,size=0x58) addr:0x02161a5c +_ZN16MapObjectUnkSTAT19func_ov063_0215fc40Ei kind:function(arm,size=0x48) addr:0x02161a14 +_ZN16MapObjectUnkSTAT8vfunc_14Ev kind:function(arm,size=0x58) addr:0x02161a5c _ZN16MapObjectUnkSTAT19func_ov063_0215fce0Ev kind:function(arm,size=0x58) addr:0x02161ab4 _ZN16MapObjectUnkSTATD1Ev kind:function(arm,size=0x20) addr:0x02161b0c _ZN16MapObjectUnkSTATD0Ev kind:function(arm,size=0x28) addr:0x02161b2c @@ -469,10 +469,10 @@ data_ov063_02165560 kind:data(any) addr:0x02165560 _ZTV19ActorProfileUnkRBLS kind:data(any) addr:0x02165578 data_ov063_021655a4 kind:data(any) addr:0x021655a4 _ZTV19data_ov063_021655e4 kind:data(any) addr:0x021655e4 -data_ov063_02165648 kind:data(any) addr:0x02165648 -data_ov063_02165664 kind:data(any) addr:0x02165664 -data_ov063_02165680 kind:data(any) addr:0x02165680 -data_ov063_021656a8 kind:data(any) addr:0x021656a8 +_ZTV28MapObjectProfileUnkSTAT_Base kind:data(any) addr:0x02165640 +_ZTV23MapObjectProfileUnkSTAT kind:data(any) addr:0x0216565c +_ZTV31MapObjectProfileUnkSTAT_Base_D4 kind:data(any) addr:0x02165678 +_ZTV16MapObjectUnkSTAT kind:data(any) addr:0x021656a0 data_ov063_021656e0 kind:data(any) addr:0x021656e0 data_ov063_021656e8 kind:data(any) addr:0x021656e8 data_ov063_021656f4 kind:data(any) addr:0x021656f4 @@ -533,9 +533,7 @@ _ZN15ProfileInstanceI19ActorProfileUnkRBLSE8sProfileE kind:bss addr:0x02166148 _ZGVN15ProfileInstanceI23MapObjectProfileUnkSTATE8sProfileE kind:bss addr:0x02166220 @32251 kind:bss addr:0x02166224 _ZN15ProfileInstanceI23MapObjectProfileUnkSTATE8sProfileE kind:bss addr:0x02166230 -data_ov063_02166304 kind:bss addr:0x02166304 -data_ov063_02166324 kind:bss addr:0x02166324 -data_ov063_02166328 kind:bss addr:0x02166328 +data_ov063_02164508 kind:bss addr:0x02166328 data_ov063_02166334 kind:bss addr:0x02166334 _ZGVN15ProfileInstanceI23MapObjectProfileUnkWLMSE8sProfileE kind:bss addr:0x021663a4 ambiguous @32257 kind:bss addr:0x021663ac diff --git a/config/jp/arm9/symbols.txt b/config/jp/arm9/symbols.txt index f073806c..d1fbfb8f 100644 --- a/config/jp/arm9/symbols.txt +++ b/config/jp/arm9/symbols.txt @@ -842,7 +842,7 @@ func_02016928 kind:function(arm,size=0x44) addr:0x02016928 func_020169d4 kind:function(arm,size=0x9c) addr:0x0201696c func_02016a08 kind:function(arm,size=0x70) addr:0x02016a08 func_02016a78 kind:function(arm,size=0xac) addr:0x02016a78 -func_02016b24 kind:function(arm,size=0xdc) addr:0x02016b24 +func_02016b8c kind:function(arm,size=0xdc) addr:0x02016b24 func_02016c00 kind:function(arm,size=0x88) addr:0x02016c00 func_02016c88 kind:function(arm,size=0x8c) addr:0x02016c88 func_02016d14 kind:function(arm,size=0xf8) addr:0x02016d14 diff --git a/include/MapObject/MapObject.hpp b/include/MapObject/MapObject.hpp index 80357857..ab5b584f 100644 --- a/include/MapObject/MapObject.hpp +++ b/include/MapObject/MapObject.hpp @@ -120,7 +120,10 @@ public: /* 00 (vtable) */ /* 04 */ VecFx32 mPos; /* 10 */ MapObject_10 *mUnk_10; - /* 14 */ s16 mUnk_14; + /* 14 */ union { + s16 mUnk_14; + UnkAngleStruct mUnk_14_AngleStruct; + }; /* 16 */ MapObjState mState; /* 18 */ unk8 mUnk_18[2]; // related to Link walking to the map object when touched /* 1A */ unk8 mUnk_1A; diff --git a/include/MapObject/MapObjectUnkSTAT.hpp b/include/MapObject/MapObjectUnkSTAT.hpp index fc1c81ee..0c89bddf 100644 --- a/include/MapObject/MapObjectUnkSTAT.hpp +++ b/include/MapObject/MapObjectUnkSTAT.hpp @@ -4,30 +4,63 @@ #include "MapObject/MapObject.hpp" #include "MapObject/MapObjectProfile.hpp" +#include "Render/ModelRender.hpp" #include "global.h" #include "types.h" class MapObjectUnkSTAT : public MapObject { public: /* 00 (base) */ - /* 40 */ + /* 40 */ UnkSystem6_Derived2 mUnk_40; + /* 48 */ unk8 mUnk_48; + /* 49 */ STRUCT_PAD(0x49, 0x4C); + /* 4C */ unk32 mUnk_4C; + /* 50 */ unk32 mUnk_50; + /* 54 */ unk32 mUnk_54; + /* 58 */ unk16 mUnk_58; + /* 5A */ volatile u16 mUnk_5A; + /* 5C */ u16 mUnk_5C; + /* 5E */ STRUCT_PAD(0x5E, 0x60); + /* 60 */ unk32 mUnk_60; + /* 64 */ unk32 mUnk_64; + /* 68 */ unk32 mUnk_68; MapObjectUnkSTAT(); + /* 00 */ virtual bool vfunc_00() override; // Init + /* 08 */ virtual void vfunc_08() override; + /* 0C */ virtual void vfunc_0C() override; + /* 14 */ virtual void vfunc_14() override; /* 30 */ virtual ~MapObjectUnkSTAT() override; void func_ov063_0215f6d0(void); void func_ov063_0215f710(void); void func_ov063_0215f798(void); void func_ov063_0215f7ac(void); - void func_ov063_0215fc40(void); + void func_ov063_0215fc40(unk32 param1); void func_ov063_0215fc88(void); - void func_ov063_0215fce0(void); + unk32 func_ov063_0215fce0(void); }; -class MapObjectProfileUnkSTAT : public MapObjectProfile { +class MapObjectProfileUnkSTAT_Base_D4 : public MapObject_10 { +public: +}; + +class MapObjectProfileUnkSTAT_Base : public MapObjectProfile_Derived2 { public: /* 00 (base) */ + /* D4 */ MapObjectProfileUnkSTAT_Base_D4 mUnk_D4; + /* F8 */ + + MapObjectProfileUnkSTAT_Base(MapObjectId mapObjId1, MapObjectId mapObjId2) : + MapObjectProfile_Derived2(mapObjId1, mapObjId2), + mUnk_D4() {}; +}; + +class MapObjectProfileUnkSTAT : public MapObjectProfileUnkSTAT_Base { +public: + /* 00 (base) */ + /* F8 */ MapObjectProfileUnkSTAT(); ~MapObjectProfileUnkSTAT(); diff --git a/src/063_Shrine/MapObject/MapObjectUnkSTAT.cpp b/src/063_Shrine/MapObject/MapObjectUnkSTAT.cpp index 45828420..14ac4bdb 100644 --- a/src/063_Shrine/MapObject/MapObjectUnkSTAT.cpp +++ b/src/063_Shrine/MapObject/MapObjectUnkSTAT.cpp @@ -1,26 +1,227 @@ -//! TODO: This file was generated automatically and might contain errors - #include "MapObject/MapObjectUnkSTAT.hpp" -#include "System/SysNew.hpp" +#include "MapObject/MapObjectProfile.hpp" +#include "System/Random.hpp" +#include "Unknown/Common.hpp" +#include "Unknown/UnkStruct_027e09a8.hpp" +#include "Unknown/UnkStruct_027e09b8.hpp" +#include "Unknown/UnkStruct_027e0ce0.hpp" +#include "Unknown/UnkStruct_027e0cec.hpp" +#include "flags.h" +#include "math.hpp" +#include "nitro/fx.h" +#include "nitro/math.h" +#include "profile.hpp" + +extern "C" unk32 func_02039d60(f32, unk32); +extern "C" f32 func_0203ab58(unk32, f32); +extern "C" f32 func_0203ad88(f32, unk32); +extern "C" f32 func_02039f04(unk32); +extern "C" fx32 func_01ffb428(unk32, unk32); +extern "C" unk32 func_02016b8c(VecFx32 *, VecFx32 *, unk32, UnkAngleStruct, u16, unk32); + +// Overlay 0 +struct UnkStruct_ov000_02077590 { + /* 00 */ s16 mUnk_00; + /* 02 */ s16 mUnk_02; + /* 04 */ s16 mUnk_04; + /* 06 */ s16 mUnk_06; + /* 08 */ unk32 mUnk_08; + /* 0C */ VecFx32 mUnk_0C; + /* 18 */ u16 mUnk_18; + /* 1A */ u16 mUnk_1A; + /* 1C */ u16 mUnk_1C; + /* 1E */ u16 mUnk_1E; +}; + +extern "C" UnkStruct_ov000_02077590 *func_ov000_02077590(unk32); DECL_PROFILE(MapObjectProfileUnkSTAT); +unk32 data_ov063_02164508[3]; // Is probably part of the profile? MapObject *MapObjectProfileUnkSTAT::Create() { - return new(HeapIndex_2) MapObjectUnkSTAT(); + return new(HeapIndex_ITCM) MapObjectUnkSTAT(); } MapObjectProfileUnkSTAT::MapObjectProfileUnkSTAT() : - MapObjectProfile(MapObjectId_STAT) {} + MapObjectProfileUnkSTAT_Base(MapObjectId_STAT, MapObjectId_STAT) { + mUnk_D4.mUnk_08 = 0x7007; + VecFx32_Init(0, 0, 0, &mUnk_D4.mUnk_0C); + mUnk_D4.mUnk_18.x = 0x800; + mUnk_D4.mUnk_18.y = 0x1000; -MapObjectUnkSTAT::MapObjectUnkSTAT() {} + mUnk_06 = -1; + UNSET_FLAG2(mUnk_1E, 0); +} -void MapObjectUnkSTAT::func_ov063_0215f6d0(void) {} -void MapObjectUnkSTAT::func_ov063_0215f710(void) {} -void MapObjectUnkSTAT::func_ov063_0215f798(void) {} -void MapObjectUnkSTAT::func_ov063_0215f7ac(void) {} -void MapObjectUnkSTAT::func_ov063_0215fc40(void) {} -void MapObjectUnkSTAT::func_ov063_0215fc88(void) {} -void MapObjectUnkSTAT::func_ov063_0215fce0(void) {} +MapObjectUnkSTAT::MapObjectUnkSTAT() : + mUnk_40(G3d_GetModelPtr(GET_PROFILE(MapObjectProfileUnkSTAT)->mUnk_20.mUnk_50)), + mUnk_48(1), + mUnk_4C(4), + mUnk_50(-1), + mUnk_54(0x8000), + mUnk_58(500), + mUnk_5A(0), + mUnk_5C(0), + mUnk_60(0), + mUnk_64(0), + mUnk_68(0) { + mUnk_10 = GET_PROFILE_D4(MapObjectProfileUnkSTAT); +} + +bool MapObjectUnkSTAT::vfunc_00(void) { + unk32 val; + switch (mUnk_20.mParams[0]) { + case 0: + val = 0; + break; + default: + val = 1; + break; + } + this->func_ov063_0215fc40(val); + + if (mUnk_20.mParams[2] == 1) { + mPos.x += FLOAT_TO_FX32(.5f); + } + + return true; +} + +void MapObjectUnkSTAT::vfunc_08(void) { + if (mUnk_20.mParams[1]) { + mUnk_54 = func_01ffb428(mUnk_20.mParams[1] << 0xC, 0xA000); + } + + switch (mUnk_4C) { + case 1: + this->func_ov063_0215f7ac(); + break; + case 3: + if (!this->func_ov063_0215fce0()) { + this->func_ov063_0215fc40(1); + } + break; + case 0: + case 2: + default: + break; + } + + if (mUnk_5A < mUnk_5C) { + mUnk_5A++; + } +} + +void MapObjectUnkSTAT::vfunc_0C(void) { + this->vfunc_08(); +} + +void MapObjectUnkSTAT::vfunc_14(void) { + VecFx32 vec; + VecFx32_Init(mPos.x + mUnk_60, mPos.y + mUnk_64, mPos.z + mUnk_68, &vec); + mUnk_40.func_01ffc6d4(mUnk_14_AngleStruct, &vec); +} + +void MapObjectUnkSTAT::func_ov063_0215f7ac(void) { + if (!this->func_ov000_0209d29c(0) || this->func_ov000_0209d29c(1)) { + return; + } + + if (mUnk_50 != -1) { + if (data_027e09b8->func_ov000_020732ec(mUnk_50) == 0) { + this->func_ov000_0209d2c4(0, 0); + this->func_ov063_0215fc40(3); + } + + if (mUnk_5A == 35) { + VecFx32 vec = mPos; + + data_027e0cec->func_ov000_0209feac(0x87D, &vec, 4, 0, 0); + data_027e0cec->func_ov000_0209feac(0x821, &vec, 4, 0, 0); + data_027e09a8->func_ov000_02071b30(0x127, &vec, 0); + } + + u16 counter = mUnk_5A; + if (30 < counter && counter < 50) { + u32 randomVal = gRandom.Next32(0x15); + s32 gRandomVal = ((u32 *) gRandom.mRandomValue)[0]; + func_02039d60(func_02039f04(randomVal - 10) * 0.004f, 0); + + fx32 z; + // if (((s32) gRandom.mRandomValue[0]) >= 0) { + // bls on gRandomVal (u32) + if (gRandomVal >= 0) { + z = func_0203ab58(0x3F000000, func_02039f04(gRandom.Next32(0x15) - 10) * 0.004f * 4096.f); + } else { + z = func_0203ad88(func_02039f04(gRandom.Next32(0x15) - 10) * 0.004f * 4096.f, 0x3F000000); + } + + func_02039d60(func_02039f04(gRandom.Next32(0x15) - 10) * 0.004f, 0); + gRandomVal = ((u32 *) gRandom.mRandomValue)[0]; + + fx32 x; + if (gRandomVal >= 0) { + x = func_0203ab58(0x3F000000, func_02039f04(gRandom.Next32(0x15) - 10) * 0.004f * 4096.f); + } else { + x = func_0203ad88(func_02039f04(gRandom.Next32(0x15) - 10) * 0.004f * 4096.f, 0x3F000000); + } + + VecFx32_Init(x, 0, z, (VecFx32 *) &mUnk_60); + } + } else { + if (this->func_ov063_0215fce0()) { + UnkStackStruct1 stackStruct; + func_ov000_02072fd0(&stackStruct); + stackStruct.mUnk_08 = 0x3C; + stackStruct.mUnk_00 = 0x80; + stackStruct.mUnk_3A = 7; + stackStruct.mUnk_3B = 7; + + UnkStruct_ov000_02077590 *res1 = func_ov000_02077590(1); + + stackStruct.mUnk_18 = res1->mUnk_00; + stackStruct.mUnk_1A = res1->mUnk_02; + stackStruct.mUnk_1C = res1->mUnk_04; + stackStruct.mUnk_1E = res1->mUnk_06; + stackStruct.mUnk_20 = res1->mUnk_08; + stackStruct.mUnk_24 = res1->mUnk_0C; + stackStruct.mUnk_30 = res1->mUnk_18; + stackStruct.mUnk_32 = res1->mUnk_1A; + stackStruct.mUnk_34 = res1->mUnk_1C; + stackStruct.mUnk_36 = res1->mUnk_1E; + stackStruct.mUnk_38 |= 0x80; + VecFx32_Copy(&mPos, &stackStruct.mUnk_0C); + + mUnk_50 = data_027e09b8->func_ov000_02073388(&stackStruct, 0); + mUnk_5C = -1; + mUnk_5A = 0; + data_027e09a8->func_ov000_02071bd4(0x126, &mPos, 0); + return; + } + } +} + +void MapObjectUnkSTAT::func_ov063_0215fc40(unk32 param1) { + mUnk_4C = param1; + mUnk_5C = -1; + mUnk_5A = 0; + mUnk_60 = 0; + mUnk_64 = 0; + mUnk_68 = 0; + + switch (param1) { + case 0: + this->mUnk_50 = -1; + break; + case 1: + this->mUnk_50 = -1; + break; + } +} + +unk32 MapObjectUnkSTAT::func_ov063_0215fce0(void) { + return func_02016b8c(&mPos, data_027e0ce0->func_01fff148(0), mUnk_54, mUnk_14_AngleStruct, mUnk_58, 1); +} MapObjectUnkSTAT::~MapObjectUnkSTAT() {} MapObjectProfileUnkSTAT::~MapObjectProfileUnkSTAT() {}