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
This commit is contained in:
Mityno
2026-08-15 16:11:44 +00:00
committed by GitHub
parent 0d066f6447
commit 347ac5860d
10 changed files with 301 additions and 66 deletions
@@ -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:
+12 -12
View File
@@ -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)
+9 -11
View File
@@ -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
@@ -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:
+12 -12
View File
@@ -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)
+10 -12
View File
@@ -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
+1 -1
View File
@@ -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
+4 -1
View File
@@ -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;
+37 -4
View File
@@ -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();
+214 -13
View File
@@ -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() {}