Identify model-related structures (#75)

This commit is contained in:
Yanis
2026-06-04 21:57:16 +02:00
committed by GitHub
parent 5a892963cd
commit 14cae7cbb1
29 changed files with 354 additions and 347 deletions
+3 -2
View File
@@ -1,6 +1,7 @@
#pragma once
#include "Actor/Actor.hpp"
#include "Render/ModelRender.hpp"
#include "Unknown/Common.hpp"
#include "types.h"
@@ -45,7 +46,7 @@ public:
class ActorUnk_ov000_020a8bb0_a4 {
public:
/* 00 */ UnkSystem4 *mUnk_00;
/* 00 */ ModelRender *mUnk_00;
/* 08 */ unk16 mUnk_04;
/* 08 */ unk16 mUnk_06;
/* 0A */ unk32 mUnk_08;
@@ -135,7 +136,7 @@ public:
/* BC */
void func_ov000_020a8ae0(fx32 param1);
ActorUnk_ov000_020a8bb0(UnkSystem4 *param1, unk32 param2);
ActorUnk_ov000_020a8bb0(ModelRender *param1, unk32 param2);
bool func_ov000_020a8db0();
bool func_ov000_020a8dd0();
void func_ov000_020a8df0(ActorRef param1, unk32 param2);
+1
View File
@@ -4,6 +4,7 @@
#include "Map/MapObjectId.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "Physics/Cylinder.hpp"
#include "Render/ModelRender.hpp"
#include "System/SysNew.hpp"
#include "flags.h"
#include "global.h"
+3 -2
View File
@@ -2,11 +2,12 @@
#include "Item/Item.hpp"
#include "MapObject/MapObject.hpp"
#include "Render/ModelRender.hpp"
#include "Unknown/Common.hpp"
#include "global.h"
#include "types.h"
class MapObjectTreasureSpawned_74 : public UnkSystem4 {
class MapObjectTreasureSpawned_74 : public ModelRender {
public:
/* 00 (base) */
/* 60 */ bool mUnk_60;
@@ -15,7 +16,7 @@ public:
/* 63 */ unk8 mUnk_63; // pad?
/* 64 */
MapObjectTreasureSpawned_74(unk32 param1);
MapObjectTreasureSpawned_74(G3d_Model *param1);
// data_ov031_02115844
/* 00 */ virtual ~MapObjectTreasureSpawned_74() override {}
+3 -2
View File
@@ -3,6 +3,7 @@
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectDoorBase.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "Render/ModelRender.hpp"
#include "global.h"
#include "types.h"
#include "versions.h"
@@ -10,7 +11,7 @@
class MapObjectDoorSwitch : public MapObjectDoorBase {
public:
/* 000 (base) */
/* 094 */ UnkSystem4 mUnk_094;
/* 094 */ ModelRender mUnk_094;
/* 0F4 */ MapObject_10 mUnk_0F4;
#if IS_JP
/* 118 */ MapObject_10 mUnk_118;
@@ -45,7 +46,7 @@ public:
/* 74 */ virtual void vfunc_74() override;
// (MapObject_UnkStruct1_Derived1)
/* 10 */ virtual void *vfunc2_10();
/* 10 */ virtual G3d_Model *GetModel();
};
class MapObjectProfileDoorSwitch : public MapObjectProfile_Derived2 {
@@ -4,77 +4,18 @@
#include "Unknown/Common.hpp"
#include "types.h"
class MapObjectProfile_Derived2_20_Base_18 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */
MapObjectProfile_Derived2_20_Base_18(); // func_02016620
};
class MapObjectProfile_Derived2_20_Base_20 {
public:
/* 00 */ void *mUnk_00;
/* 04 */ void *mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0C */
MapObjectProfile_Derived2_20_Base_20(unk32 param1, unk32 param2, unk32 param3, unk32 param4,
unk32 param5); // func_020153fc
};
class MapObjectProfile_Derived2_20_Base_54 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 10 */
MapObjectProfile_Derived2_20_Base_54();
~MapObjectProfile_Derived2_20_Base_54();
};
class MapObjectProfile_Derived2_20_Base {
public:
/* 00 (vtable) */
/* 04 */ const char *mUnk_04;
/* 08 */ const char *mUnk_08;
/* 0C */ UnkResourceStruct_Base mUnk_0C;
/* 18 */ MapObjectProfile_Derived2_20_Base_18 mUnk_18;
/* 20 */ MapObjectProfile_Derived2_20_Base_20 mUnk_20;
/* 2C */ UnkFileSystem3 mUnk_2C;
/* 3C */ UnkFileSystem5 mUnk_3C;
/* 50 */ UnkResourceStruct *mUnk_50;
/* 54 */ MapObjectProfile_Derived2_20_Base_54 mUnk_54[4];
/* 94 */
MapObjectProfile_Derived2_20_Base(const char *directory, void *param2, void *param3, void *param4, unk32 param5,
unk32 param6); // func_ov000_02058540
// data_ov000_020b1b14
/* 00 */ virtual ~MapObjectProfile_Derived2_20_Base();
/* 08 */
void func_ov000_020586b4(unk32 param1, unk32 param2, unk32 param3, unk32 param4);
void func_ov000_020588f0(void);
void func_ov000_02058900(void);
void func_ov000_02058914(unk32 param1);
void func_ov000_020589e4(void);
unk32 func_ov000_02058a24();
void unc_ov000_02058a58(void);
unk32 func_ov000_02058a84(unk32 param1, const char *param2);
void func_ov000_02058ab0(void);
};
class MapObjectProfile_Derived2_20 : public MapObjectProfile_Derived2_20_Base {
public:
/* 00 (base) */
/* 94 */ unk16 mUnk_94;
/* 96 */ unk16 mUnk_96;
/* 98 */ unk16 mUnk_98;
/* 9A */ unk16 mUnk_9A;
/* 94 */ union {
wchar_t mUnk_94[4];
struct {
u16 unk_94;
u16 unk_96;
u16 unk_98;
u16 unk_9A;
};
};
/* 9C */ UnkFileSystem5 mUnk_9C;
/* B0 */ bool mUnk_B0;
/* B1 */ unk8 mUnk_B1; // bool?
+2 -1
View File
@@ -2,11 +2,12 @@
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "Render/ModelRender.hpp"
#include "Unknown/Common.hpp"
#include "global.h"
#include "types.h"
class MapObjectSwitchStep_40 : public UnkSystem4 {
class MapObjectSwitchStep_40 : public ModelRender {
public:
/* 00 (base) */
/* 60 */ unk16 mUnk_60;
+2 -1
View File
@@ -4,6 +4,7 @@
#include "types.h"
#include "versions.h"
#include "Render/ModelRender.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkStruct_027e0ce0.hpp"
#include "Unknown/UnkStruct_ov000_0208f820.hpp"
@@ -168,7 +169,7 @@ public:
/* 070 */ u8 mUnk_72; // probably bools
/* 070 */ u8 mUnk_73; // probably bools
/* 074 */ UnkStruct_PlayerGet_74 mUnk_74;
/* 08C */ UnkSystem4 mUnk_8C;
/* 08C */ ModelRender mUnk_8C;
/* 0EC */ UnkStruct_PlayerGet_ec mUnk_EC[4];
/* 0FC */ void *mUnk_FC;
/* 100 */
+119
View File
@@ -0,0 +1,119 @@
#pragma once
#include "global.h"
#include "types.h"
#include <nns/g3d/g3d.h>
typedef void (*UnkSystem4_UnkCallback)(void);
class UnkSystem4_vfunc_1C_B4 {
public:
/* 00 */ unk32 mUnk_00;
/* 00 */ STRUCT_PAD(0x04, 0x4C);
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk32 mUnk_50;
/* 54 */ unk32 mUnk_54;
};
class UnkSystem4_vfunc_1C {
public:
/* 00 */ u8 *mUnk_00;
/* 04 */ unk32 *mUnk_04;
/* 08 */ STRUCT_PAD(0x08, 0xB4);
/* B4 */ UnkSystem4_vfunc_1C_B4 *mUnk_B4;
/* 00 */ unk32 *mUnk_B8;
};
class ModelRenderBase {
public:
/* 00 (vtable) */
/* 04 */ G3d_Model *mpModel;
/* 08 */
ModelRenderBase(G3d_Model *pModel) :
mpModel(pModel) {}
// data_ov000_020b1a98
/* 00 */ virtual ~ModelRenderBase();
/* 08 */ virtual void vfunc_08(G3d_Model *pModel);
/* 0C */ virtual void vfunc_0C() = 0;
/* 10 */ virtual void vfunc_10() = 0;
/* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) = 0;
/* 18 */ virtual void vfunc_18() = 0;
/* 1C */
};
class ModelRender : public ModelRenderBase {
public:
/* 00 (base) */
/* 08 */ G3d_RenderObject mRenderObj;
/* 5C */ unk32 mUnk_5C; // G3d_BoneMtxStruct?
/* 60 */
ModelRender(G3d_Model *pModel);
// data_ov000_020b1a6c
/* 00 */ virtual ~ModelRender();
/* 08 */ virtual void vfunc_08(G3d_Model *pModel);
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2); // SetRotationTranslation?
/* 18 */ virtual void vfunc_18();
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1);
/* 20 */ virtual void vfunc_20();
void func_ov000_02057c38(unk32 param1, unk32 param2);
void func_ov000_0209a7b8(void *param1, UnkSystem4_UnkCallback param2);
};
class UnkSystem6_Derived1 : public ModelRenderBase {
public:
/* 00 (base) */
/* 08 */
UnkSystem6_Derived1(G3d_Model *pModel) :
ModelRenderBase(pModel) {}
// data_ov000_020b1a48
/* 00 */ virtual ~UnkSystem6_Derived1() override {}
/* 10 */ virtual void vfunc_10() override;
/* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) override;
/* 18 */ virtual void vfunc_18() override;
};
class UnkSystem6_Derived2 : public UnkSystem6_Derived1 {
public:
/* 00 (base) */
/* 08 */
UnkSystem6_Derived2() :
UnkSystem6_Derived1(NULL) {}
UnkSystem6_Derived2(G3d_Model *pModel) :
UnkSystem6_Derived1(pModel) {}
// data_ov000_020b1968
/* 00 */ virtual ~UnkSystem6_Derived2() {}
/* 0C */ virtual void vfunc_0C() override;
};
class UnkSystem5 {
public:
/* 00 */ G3d_Model *mpModel;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk32 mUnk_18;
/* 1C */ unk32 mUnk_1C;
/* 20 */
UnkSystem5(void *param1, G3d_Model *pModel);
void func_01ffc3b4();
void func_ov000_020577a4(unk32 param1, unk32 param2, unk32 param3);
void func_ov000_020577f8(unk32 param1);
};
+71 -180
View File
@@ -9,6 +9,7 @@
#include "types.h"
#include <nitro/mi.h>
#include <nns/g3d/g3d.h>
#include <nns/text.h>
class UnkDataStruct2;
@@ -951,186 +952,6 @@ struct UnkStruct_StackTitleScreen {
void func_ov000_02059288(unk32 param1, char *param2, unk32 param3);
};
typedef void (*UnkSystem4_UnkCallback)(void);
class UnkSystem4_vfunc_1C_B4 {
public:
/* 00 */ unk32 mUnk_00;
/* 00 */ STRUCT_PAD(0x04, 0x4C);
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk32 mUnk_50;
/* 54 */ unk32 mUnk_54;
};
class UnkSystem4_vfunc_1C {
public:
/* 00 */ u8 *mUnk_00;
/* 04 */ unk32 *mUnk_04;
/* 08 */ STRUCT_PAD(0x08, 0xB4);
/* B4 */ UnkSystem4_vfunc_1C_B4 *mUnk_B4;
/* 00 */ unk32 *mUnk_B8;
};
class UnkSystem4 {
public:
/* 00 (vtable) */
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 *mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 10 */ unk32 *mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk32 *mUnk_18;
/* 1C */ unk32 mUnk_1C;
/* 20 */ unk32 *mUnk_20;
/* 24 */ unk32 mUnk_24;
/* 28 */ unk32 *mUnk_28;
/* 2C */ unk32 mUnk_2C;
/* 30 */ unk32 mUnk_30;
/* 34 */ unk32 mUnk_34;
/* 38 */ unk32 mUnk_38;
/* 3C */ unk32 mUnk_3C;
/* 40 */ unk32 mUnk_40;
/* 44 */ unk32 mUnk_44;
/* 48 */ unk32 mUnk_48;
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk32 mUnk_50;
/* 54 */ unk32 mUnk_54;
/* 58 */ unk32 mUnk_58;
/* 5C */ unk32 mUnk_5C;
/* 60 */
UnkSystem4(unk32 param1); // func_ov000_02057b54
// data_ov000_020b1a6c
/* 00 */ virtual ~UnkSystem4();
/* 08 */ virtual void vfunc_08(void *param1); // resource thing? (GetUnkPointer1_Impl as param1)
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2);
/* 18 */ virtual void vfunc_18();
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1);
/* 20 */ virtual void vfunc_20();
void func_ov000_02057c38(unk32 param1, unk32 param2);
void func_ov000_0209a7b8(void *param1, UnkSystem4_UnkCallback param2);
};
struct UnkResourceStruct_Base {
/* 00 */ void *mUnk_00;
/* 04 */ void *mUnk_04;
/* 08 */ u8 mUnk_08;
/* 09 */ u8 mUnk_09;
/* 0A */ u8 mUnk_0A;
/* 0B */ u8 mUnk_0B;
/* 0C */
};
struct UnkResourceStruct : public UnkResourceStruct_Base {
/* 0C */ unk8 mUnk_0C;
/* 0D */ unk8 mUnk_0D;
/* 0E */ u16 mUnk_0E;
/* 10 */
};
static inline void *GetUnkPointer1_Impl(UnkResourceStruct *ptr) {
if (ptr != NULL) {
u8 *temp_r1 = (u8 *) ptr + 8;
u32 *var_r0;
u8 zero = 0;
if (temp_r1 != NULL && ptr->mUnk_09 > zero) {
var_r0 = (u32 *) (temp_r1 + *(u16 *) ((u8 *) ptr + 14) + 4);
} else {
var_r0 = NULL;
}
if (var_r0 != NULL) {
return (void *) ((u8 *) ptr + *var_r0);
}
}
return NULL;
}
template <typename T> static inline void *GetUnkPointer1() {
return GetUnkPointer1_Impl((UnkResourceStruct *) GET_PROFILE_20_50(T));
}
template <typename T> static inline void *GetUnkPointer2(unk32 param1, u32 resId) {
T *pProfile = GET_PROFILE(T);
pProfile->func_ov000_0209ccd8(param1, resId);
return GetUnkPointer1_Impl((UnkResourceStruct *) pProfile->mUnk_20[param1]->mUnk_50);
}
class UnkSystem5 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk32 mUnk_18;
/* 1C */ unk32 mUnk_1C;
/* 20 */
UnkSystem5(void *param1, unk32 param2); // func_ov000_0205778c
void func_01ffc3b4();
void func_ov000_020577a4(unk32 param1, unk32 param2, unk32 param3);
void func_ov000_020577f8(unk32 param1);
};
// related to UnkSystem5?
class UnkSystem6 {
public:
/* 00 (vtable) */
/* 04 */
UnkSystem6() {}
// data_ov000_020b1a98
/* 00 */ virtual ~UnkSystem6();
/* 08 */ virtual void vfunc_08(void *param1); // resource thing like UnkSystem4?
/* 0C */ virtual void vfunc_0C() = 0;
/* 10 */ virtual void vfunc_10() = 0;
/* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) = 0;
/* 18 */ virtual void vfunc_18() = 0;
/* 1C */
};
class UnkSystem6_Derived1 : public UnkSystem6 {
public:
/* 00 (base) */
/* 04 */ void *mUnk_04;
UnkSystem6_Derived1(void *ptr) :
mUnk_04(ptr) {}
// data_ov000_020b1a48
/* 00 */ virtual ~UnkSystem6_Derived1() override {}
/* 10 */ virtual void vfunc_10() override;
/* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) override;
/* 18 */ virtual void vfunc_18() override;
};
class UnkSystem6_Derived2 : public UnkSystem6_Derived1 {
public:
/* 00 (base) */
/* 08 */
UnkSystem6_Derived2() :
UnkSystem6_Derived1(NULL) {}
UnkSystem6_Derived2(void *ptr) :
UnkSystem6_Derived1(ptr) {}
// data_ov000_020b1968
/* 00 */ virtual ~UnkSystem6_Derived2() {}
/* 0C */ virtual void vfunc_0C() override;
};
class MapObject;
struct UnkStackStruct1 {
@@ -1283,3 +1104,73 @@ struct InputInformations {
void *unk_08;
void *unk_0C;
};
class MapObjectProfile_Derived2_20_Base_18 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */
MapObjectProfile_Derived2_20_Base_18(); // func_02016620
};
class MapObjectProfile_Derived2_20_Base_20 {
public:
/* 00 */ void *mUnk_00;
/* 04 */ void *mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0C */
MapObjectProfile_Derived2_20_Base_20(unk32 param1, unk32 param2, unk32 param3, unk32 param4,
unk32 param5); // func_020153fc
};
class MapObjectProfile_Derived2_20_Base_54 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 10 */
MapObjectProfile_Derived2_20_Base_54();
~MapObjectProfile_Derived2_20_Base_54();
};
class MapObjectProfile_Derived2_20_Base {
public:
/* 00 (vtable) */
/* 04 */ const char *mDirName;
/* 08 */ const char *mArchiveName;
/* 0C */ void *mUnk_0C;
/* 10 */ void *mUnk_10;
/* 14 */ u8 mUnk_14;
/* 15 */ u8 mUnk_15;
/* 16 */ u8 mUnk_16;
/* 17 */ u8 mUnk_17;
/* 18 */ MapObjectProfile_Derived2_20_Base_18 mUnk_18;
/* 20 */ MapObjectProfile_Derived2_20_Base_20 mUnk_20;
/* 2C */ UnkFileSystem3 mUnk_2C;
/* 3C */ UnkFileSystem5 mUnk_3C;
/* 50 */ BMDSectionModel *mUnk_50;
/* 54 */ MapObjectProfile_Derived2_20_Base_54 mUnk_54[4];
/* 94 */
MapObjectProfile_Derived2_20_Base(const char *directory, const char *archiveName, const char *param3, const char *param4,
unk32 param5,
unk32 param6); // func_ov000_02058540
// data_ov000_020b1b14
/* 00 */ virtual ~MapObjectProfile_Derived2_20_Base();
/* 08 */
void func_ov000_020586b4(unk32 param1, unk32 param2, unk32 param3, unk32 param4);
void func_ov000_020588f0(void);
void func_ov000_02058900(void);
void func_ov000_02058914(unk32 param1);
void func_ov000_020589e4(void);
unk32 func_ov000_02058a24();
void unc_ov000_02058a58(void);
unk32 func_ov000_02058a84(unk32 param1, const char *param2);
void func_ov000_02058ab0(void);
};
+12
View File
@@ -1,5 +1,7 @@
#pragma once
#include <nns/g3d/g3d.h>
#define GET_PROFILE(T) (&ProfileInstance<T>::sProfile)
#define GET_PROFILE_20(T) (&ProfileInstance<T>::sProfile.mUnk_20)
#define GET_PROFILE_20_50(T) (ProfileInstance<T>::sProfile.mUnk_20.mUnk_50)
@@ -14,3 +16,13 @@
template <typename T> struct ProfileInstance {
static T sProfile;
};
template <typename T> static inline G3d_Model *GetModelFromProfile() {
return G3d_GetModelPtr((BMDSectionModel *) GET_PROFILE_20_50(T));
}
template <typename T> static inline G3d_Model *GetModelFromProfile2(s32 param1, u32 resId) {
T *pProfile = GET_PROFILE(T);
pProfile->func_ov000_0209ccd8(param1, resId);
return G3d_GetModelPtr((BMDSectionModel *) pProfile->mUnk_20[param1]->mUnk_50);
}