feat(profile): CMapBaseObjLink structures

This commit is contained in:
gromchek 2025-10-22 00:27:45 +03:00
parent 57430d2995
commit a36752d3a0
12 changed files with 5348 additions and 124 deletions

View file

@ -78,6 +78,7 @@
#include "m2/shared.h" #include "m2/shared.h"
#include "m2/types.h" #include "m2/types.h"
#include "map/CMapBaseObj.h"
#include "map/ADTchunks.h" #include "map/ADTchunks.h"
#include "map/CMapArea.h" #include "map/CMapArea.h"
#include "map/WMOchunks.h" #include "map/WMOchunks.h"
@ -86,8 +87,10 @@
#include "map/CDetailDoodadInst.h" #include "map/CDetailDoodadInst.h"
#include "map/CMapRenderChunk.h" #include "map/CMapRenderChunk.h"
#include "map/CMapObjDef.h" #include "map/CMapObjDef.h"
#include "map/CMapStaticEntity.h"
#include "map/CMapDoodadDef.h" #include "map/CMapDoodadDef.h"
#include "map/CMapEntity.h" #include "map/CMapEntity.h"
#include "map/CMapBaseObjLink.h"
#include "net/message.h" #include "net/message.h"

View file

@ -6,7 +6,13 @@ DECLARE_STRUCT(SMChunkInfo);
DECLARE_STRUCT(SMDoodadDef); DECLARE_STRUCT(SMDoodadDef);
DECLARE_STRUCT(SMMapObjDef); DECLARE_STRUCT(SMMapObjDef);
DECLARE_STRUCT(SMChunk); DECLARE_STRUCT(SMChunk);
DECLARE_STRUCT(SLVert);
DECLARE_STRUCT(SMLayer); DECLARE_STRUCT(SMLayer);
DECLARE_STRUCT(SLTiles);
DECLARE_STRUCT(SWFlowv);
DECLARE_STRUCT(SOVert);
DECLARE_STRUCT(SMVert);
DECLARE_STRUCT(SWVert);
DECLARE_STRUCT(SMLiquidChunk); DECLARE_STRUCT(SMLiquidChunk);
DECLARE_STRUCT(CWSoundEmitter); DECLARE_STRUCT(CWSoundEmitter);
@ -106,52 +112,65 @@ struct SMLayer
uint32_t offectId; uint32_t offectId;
}; };
struct SWVert
{
char depth;
char flow0Pct;
char flow1Pct;
char filler;
float height;
};
struct SOVert
{
char depth;
char foam;
char wet;
char filler;
};
struct SMVert
{
uint16_t s;
uint16_t t;
float height;
};
struct SLVert
{
union
{
SWVert waterVert;
SOVert oceanVert;
SMVert magmaVert;
};
};
struct SLTiles
{
char tiles[8][8];
};
struct SWFlowv
{
CAaSphere sphere;
C3Vector dir;
float velocity;
float amplitude;
float frequency;
};
struct SMLiquidChunk struct SMLiquidChunk
{ {
float minHeight; float minHeight;
float maxHeight; float maxHeight;
struct SLVert
{
union
{
struct SWVert
{
char depth;
char flow0Pct;
char flow1Pct;
char filler;
float height;
} waterVert;
struct SOVert
{
char depth;
char foam;
char wet;
char filler;
} oceanVert;
struct SMVert
{
uint16_t s;
uint16_t t;
float height;
} magmaVert;
};
} verts[9*9];
struct SLTiles SLVert verts[9*9];
{
char tiles[8][8]; SLTiles tiles;
} tiles;
uint32_t nFlowvs; uint32_t nFlowvs;
struct SWFlowv SWFlowv flowvs[2];
{
CAaSphere sphere;
C3Vector dir;
float velocity;
float amplitude;
float frequency;
} flowvs[2];
}; };
struct CWSoundEmitter struct CWSoundEmitter

View file

@ -14,25 +14,49 @@ struct CMapAreaTexture
struct CMapChunk; struct CMapChunk;
#include "async/object.h" #include "async/object.h"
#include "ADTchunks.h" #include "map/ADTchunks.h"
#include "storm/array.h" #include "storm/array.h"
#include "texture/texture.h" #include "texture/texture.h"
#include "map/CMapBaseObj.h"
#include "map/CMapBaseObjLink.h"
#include "map/CMapDoodadDef.h"
#include "map/CMapObjDef.h"
STORM_TS_GROWABLE_ARRAY(CMapAreaTexture); STORM_TS_GROWABLE_ARRAY(CMapAreaTexture);
typedef struct CMapAreaLink CMapAreaLink;
STORM_TS_LIST(CMapAreaLink);
struct CMapAreaLink
{
uint32_t objectIndex; //0x00
CMapArea* owner; //0x04
void* ref; //0x08
TSLink_CMapAreaLink refLink; //0x0C - 0x14
TSLink_CMapAreaLink ownerLink; //0x14 - 0x1C
};
typedef struct CMapAreaChunkLink CMapAreaChunkLink;
STORM_TS_LIST(CMapAreaChunkLink);
struct CMapAreaChunkLink
{
uint32_t objectIndex; //0x00
CMapChunk* owner; //0x04
CMapArea* ref; //0x08
TSLink_CMapAreaChunkLink refLink; //0x0C - 0x14
TSLink_CMapAreaChunkLink ownerLink; //0x14 - 0x1C
};
struct CMapArea struct CMapArea
{ {
void** vtable; void** vtable;
uint32_t objectIndex; uint32_t objectIndex;
uint16_t flags; uint16_t type;
uint16_t pad_0A; uint16_t refCount;
uint32_t unk_0C; uint32_t unk_0C;
CMapArea* perv; CMapArea* perv;
CMapArea* next; CMapArea* next;
int32_t TSExplicitList__m_linkoffset_18; TSExplicitList_CMapAreaLink linkList;
void* TSExplicitList__ptr_1C;
void* TSExplicitList__ptr2_20;
C3Vector bottomRight; C3Vector bottomRight;
C3Vector topLeft; C3Vector topLeft;
@ -48,9 +72,7 @@ struct CMapArea
int32_t unk_6C; int32_t unk_6C;
CAsyncObject* asyncObject; CAsyncObject* asyncObject;
int32_t TSExplicitList__m_linkoffset_unk_74; TSExplicitList_CMapAreaChunkLink chunkLinkList;
void* TSExplicitList__ptr_unk_78;
void* TSExplicitList__ptr2_unk_7C;
void* filePtr; void* filePtr;
int32_t fileSize; int32_t fileSize;
@ -72,19 +94,54 @@ struct CMapArea
CMapChunk* mapChunks[256]; CMapChunk* mapChunks[256];
}; };
typedef struct CMapChunkLink CMapChunkLink;
STORM_TS_LIST(CMapChunkLink);
struct CMapChunkLink
{
uint32_t objectIndex; //0x00
CMapChunk* owner; //0x04
CMapArea* ref; //0x08
TSLink_CMapChunkLink refLink; //0x0C - 0x14
TSLink_CMapChunkLink ownerLink; //0x14 - 0x1C
};
typedef struct CMapChunkDoodadDefLink CMapChunkDoodadDefLink;
STORM_TS_LIST(CMapChunkDoodadDefLink);
struct CMapChunkDoodadDefLink
{
uint32_t objectIndex; //0x00
CMapDoodadDef* owner; //0x04
CMapChunk* ref; //0x08
TSLink_CMapChunkDoodadDefLink refLink; //0x0C - 0x14
TSLink_CMapChunkDoodadDefLink ownerLink; //0x14 - 0x1C
};
typedef struct CMapChunkMapObjDefLink CMapChunkMapObjDefLink;
STORM_TS_LIST(CMapChunkMapObjDefLink);
struct CMapChunkMapObjDefLink
{
uint32_t objectIndex; //0x00
CMapObjDef* owner; //0x04
CMapChunk* ref; //0x08
TSLink_CMapChunkMapObjDefLink refLink; //0x0C - 0x14
TSLink_CMapChunkMapObjDefLink ownerLink; //0x14 - 0x1C
};
typedef struct CChunkLiquid CChunkLiquid;
STORM_TS_LIST(CChunkLiquid);
struct CMapChunk struct CMapChunk
{ {
void** vtable; void** vtable;
uint32_t objectIndex; uint32_t objectIndex;
uint16_t flags; uint16_t type;
uint16_t pad_0A; uint16_t refCount;
uint32_t unk_0C; uint32_t unk_0C;
CMapChunk* prev; CMapChunk* prev;
CMapChunk* next; CMapChunk* next;
int32_t TSExplicitList__m_linkoffset_18; TSExplicitList_CMapChunkLink linkList;
void* TSExplicitList__ptr1_1C;
void* TSExplicitList__ptr2_20;
C2iVector aIndex; C2iVector aIndex;
C2iVector sOffset; C2iVector sOffset;
@ -109,15 +166,8 @@ struct CMapChunk
int32_t unk_BC; int32_t unk_BC;
int32_t unk_C0; int32_t unk_C0;
// CMapDoodadDef TSExplicitList_CMapChunkDoodadDefLink doodadDefLinkList;
int32_t TSExplicitList__m_linkoffset_C4; TSExplicitList_CMapChunkMapObjDefLink mapObjDefLinkList;
void* TSExplicitList__ptr_C8;
void* TSExplicitList__ptr2_CC;
// CMapObjDef
int32_t TSExplicitList__m_linkoffset_D0;
void* TSExplicitList__ptr_D4;
void* TSExplicitList__ptr2_D8;
int32_t TSExplicitList__m_linkoffset_DC; int32_t TSExplicitList__m_linkoffset_DC;
void* TSExplicitList__ptr_E0; void* TSExplicitList__ptr_E0;
@ -134,9 +184,7 @@ struct CMapChunk
void* TSExplicitList__ptr2_FC; void* TSExplicitList__ptr2_FC;
// CChunkLiquid // CChunkLiquid
int32_t TSExplicitList__m_linkoffset_100; TSExplicitList_CChunkLiquid liquidChunkLinkList;
void* TSExplicitList__ptr_104;
void* TSExplicitList__ptr2_108;
uint8_t* chunkInfoBeginPtr; uint8_t* chunkInfoBeginPtr;
SMChunk* header; SMChunk* header;

View file

@ -0,0 +1,23 @@
#ifndef CMAPBASEOBJ_H
#define CMAPBASEOBJ_H
DECLARE_STRUCT(CMapBaseObj);
#include "system/types.h"
#include "map/CMapBaseObjLink.h"
struct CMapBaseObj
{
void** vtable; //0x00
int32_t objectIndex; //0x04
uint16_t type; //0x08
uint16_t refCount; //0x0A
int32_t unk_C; //0x0C
CMapBaseObj* prev; //0x10
CMapBaseObj* next; //0x14
TSExplicitList_CMapBaseObjLink list; //0x18 - 0x24
};
#endif

View file

@ -0,0 +1,24 @@
#ifndef CMAPBASEOBJLINK_H
#define CMAPBASEOBJLINK_H
DECLARE_STRUCT(CMapBaseObjLink);
#include "system/types.h"
#include "storm/list.h"
STORM_TS_LIST(CMapBaseObjLink);
struct CMapBaseObj;
struct CMapBaseObjLink
{
uint32_t objectIndex; //0x00
CMapBaseObj* owner; //0x04
CMapBaseObj* ref; //0x08
TSLink_CMapBaseObjLink refLink; //0x0C - 0x14
TSLink_CMapBaseObjLink ownerLink; //0x14 - 0x1C
};
#endif

View file

@ -6,21 +6,31 @@ DECLARE_STRUCT(CMapDoodadDef);
#include "tempest/box.h" #include "tempest/box.h"
#include "tempest/matrix.h" #include "tempest/matrix.h"
#include "tempest/vector.h" #include "tempest/vector.h"
#include "storm/list.h"
#include "map/CMapArea.h"
typedef struct CMapDoodadDefMapChunkLink CMapDoodadDefMapChunkLink;
STORM_TS_LIST(CMapDoodadDefMapChunkLink);
struct CMapDoodadDefMapChunkLink
{
uint32_t objectIndex; //0x00
CMapDoodadDef* owner; //0x04
CMapBaseObj* ref; //0x08 //could be CMapChunk* or CMapObjDefGroup*
TSLink_CMapDoodadDefMapChunkLink refLink; //0x0C - 0x14
TSLink_CMapDoodadDefMapChunkLink ownerLink; //0x14 - 0x1C
};
struct CMapDoodadDef struct CMapDoodadDef
{ {
void** vtable; //0x00 void** vtable; //0x00
int32_t objectIndex; //0x04 int32_t objectIndex; //0x04
uint16_t flags; //0x08 uint16_t type; //0x08
uint16_t pad_0A; //0x0A uint16_t refCount; //0x0A
int32_t unk_C; //0x0C int32_t unk_C; //0x0C
void* prev; //0x10 CMapDoodadDef* prev; //0x10
void* next; //0x14 CMapDoodadDef* next; //0x14
int32_t TSExplicitList__m_linkoffset_unk_18; //0x18 TSExplicitList_CMapDoodadDefMapChunkLink linkList;
void* TSExplicitList__m_ptr1_unk_1C; //0x1C
void* TSExplicitList__m_ptr2_unk_20; //0x20
//CMapStaticEntity fields //CMapStaticEntity fields
int32_t unk_024; //0x24 int32_t unk_024; //0x24

View file

@ -6,21 +6,32 @@ DECLARE_STRUCT(CMapEntity);
#include "system/types.h" #include "system/types.h"
#include "tempest/vector.h" #include "tempest/vector.h"
#include "tempest/box.h" #include "tempest/box.h"
#include "storm/list.h"
#include "map/CMapBaseObj.h"
typedef struct CMapEntityMapChunkLink CMapEntityMapChunkLink;
STORM_TS_LIST(CMapEntityMapChunkLink);
struct CMapEntityMapChunkLink
{
uint32_t objectIndex; //0x00
CMapEntity* owner; //0x04
void* ref; //0x08 //could be CMapChunk* or CMapObjDefGroup*
TSLink_CMapEntityMapChunkLink refLink; //0x0C - 0x14
TSLink_CMapEntityMapChunkLink ownerLink; //0x14 - 0x1C
};
struct CMapEntity struct CMapEntity
{ {
//CMapBaseObj fields //CMapBaseObj fields
void** vtable; //0x00 void** vtable; //0x00
int32_t objectIndex; //0x04 int32_t objectIndex; //0x04
uint16_t flags; //0x08 uint16_t type; //0x08
uint16_t pad_0A; //0x0A uint16_t refCount; //0x0A
int32_t unk_C; //0x0C int32_t unk_C; //0x0C
CMapEntity* prev; //0x10 CMapEntity* prev; //0x10
CMapEntity* next; //0x14 CMapEntity* next; //0x14
int32_t TSExplicitList__m_linkoffset_unk_18; //0x18 TSExplicitList_CMapEntityMapChunkLink linkList;
void* TSExplicitList__m_ptr1_unk_1C; //0x1C
void* TSExplicitList__m_ptr2_unk_20; //0x20
//end //end
//CMapStaticEntity fields //CMapStaticEntity fields

View file

@ -3,12 +3,15 @@
#include "tempest/box.h" #include "tempest/box.h"
#include "async/object.h" #include "async/object.h"
#include "WMOchunks.h" #include "map/WMOchunks.h"
#include "tempest/vector.h" #include "tempest/vector.h"
#include "storm/list.h"
DECLARE_STRUCT(CMapObj); DECLARE_STRUCT(CMapObj);
DECLARE_STRUCT(CMapObjGroup); DECLARE_STRUCT(CMapObjGroup);
STORM_TS_LIST(CMapObjGroup);
struct CMapObjGroup; struct CMapObjGroup;
struct CMapObj struct CMapObj
@ -66,9 +69,7 @@ struct CMapObj
CAsyncObject* asyncObject; CAsyncObject* asyncObject;
int32_t isGroupLoaded; int32_t isGroupLoaded;
int32_t unk_1E4; int32_t unk_1E4;
int32_t TSExplicitList__m_linkOffset; TSExplicitList_CMapObjGroup mapObjGroupList;
void* TSExplicitList__ptr1;
void* TSExplicitList__ptr2;
int32_t mapObjGroupCount; int32_t mapObjGroupCount;
CMapObjGroup* mapObjGroupArray[512]; CMapObjGroup* mapObjGroupArray[512];
}; };

View file

@ -9,22 +9,46 @@ DECLARE_STRUCT(CMapObjDefGroup);
#include "tempest/matrix.h" #include "tempest/matrix.h"
#include "tempest/vector.h" #include "tempest/vector.h"
#include "storm/array.h" #include "storm/array.h"
#include "storm/list.h"
#include "map/CMapDoodadDef.h"
#include "map/CMapArea.h"
STORM_TS_GROWABLE_ARRAY(CMapObjDefGroup); STORM_TS_GROWABLE_ARRAY(CMapObjDefGroup);
struct CMapChunk;
typedef struct CMapObjDefMapChunkLink CMapObjDefMapChunkLink;
STORM_TS_LIST(CMapObjDefMapChunkLink);
struct CMapObjDefMapChunkLink
{
uint32_t objectIndex; //0x00
CMapObjDef* owner; //0x04
CMapChunk* ref; //0x08
TSLink_CMapObjDefMapChunkLink refLink; //0x0C - 0x14
TSLink_CMapObjDefMapChunkLink ownerLink; //0x14 - 0x1C
};
typedef struct CMapObjDefMapObjDefGroupLink CMapObjDefMapObjDefGroupLink;
STORM_TS_LIST(CMapObjDefMapObjDefGroupLink);
struct CMapObjDefMapObjDefGroupLink
{
uint32_t objectIndex; //0x00
CMapObjDefGroup* owner; //0x04
CMapObjDef* ref; //0x08
TSLink_CMapObjDefMapObjDefGroupLink refLink; //0x0C - 0x14
TSLink_CMapObjDefMapObjDefGroupLink ownerLink; //0x14 - 0x1C
};
struct CMapObjDef struct CMapObjDef
{ {
void** vtable; //0x00 void** vtable; //0x00
int32_t objectIndex; //0x04 int32_t objectIndex; //0x04
uint16_t flags; //0x08 uint16_t type; //0x08
uint16_t pad_0A; //0x0A uint16_t refCount; //0x0A
int32_t unk_C; //0x0C int32_t unk_C; //0x0C
CMapObjDef* prev; //0x10 CMapObjDef* prev; //0x10
CMapObjDef* next; //0x14 CMapObjDef* next; //0x14
int32_t TSExplicitList__m_linkoffset_unk_18; //0x18 TSExplicitList_CMapObjDefMapChunkLink linkList;
void* TSExplicitList__m_ptr1_unk_1C; //0x1C
void* TSExplicitList__m_ptr2_unk_1C; //0x20
void* unk_24; //0x24 void* unk_24; //0x24
void* unk_28; //0x28 void* unk_28; //0x28
@ -49,9 +73,7 @@ struct CMapObjDef
int32_t unk_10C; //0x10C int32_t unk_10C; //0x10C
int32_t unk_110; //0x110 int32_t unk_110; //0x110
int32_t TSExplicitList__m_linkoffset_unk_114; //0x114 TSExplicitList_CMapObjDefMapObjDefGroupLink mapObjDefGroupLinkList;
void* TSExplicitList__m_ptr1_unk_118; //0x118
void* TSExplicitList__m_ptr2_unk_11C; //0x11C
TSGrowableArray_CMapObjDefGroup defGroups; TSGrowableArray_CMapObjDefGroup defGroups;
@ -69,19 +91,39 @@ struct CMapObjDef
void* unk_154; //0x154 void* unk_154; //0x154
}; };
typedef struct CMapObjDefGroupMapObjDefLink CMapObjDefGroupMapObjDefLink;
STORM_TS_LIST(CMapObjDefGroupMapObjDefLink);
struct CMapObjDefGroupMapObjDefLink
{
uint32_t objectIndex; //0x00
CMapObjDefGroup* owner; //0x04
CMapObjDef* ref; //0x08
TSLink_CMapObjDefGroupMapObjDefLink refLink; //0x0C - 0x14
TSLink_CMapObjDefGroupMapObjDefLink ownerLink; //0x14 - 0x1C
};
typedef struct CMapObjDefGroupDoodadDefLink CMapObjDefGroupDoodadDefLink;
STORM_TS_LIST(CMapObjDefGroupDoodadDefLink);
struct CMapObjDefGroupDoodadDefLink
{
uint32_t objectIndex; //0x00
CMapDoodadDef* owner; //0x04
CMapObjDef* ref; //0x08
TSLink_CMapObjDefGroupDoodadDefLink refLink; //0x0C - 0x14
TSLink_CMapObjDefGroupDoodadDefLink ownerLink; //0x14 - 0x1C
};
struct CMapObjDefGroup struct CMapObjDefGroup
{ {
void* vtable; //0x00 void* vtable; //0x00
int32_t objectIndex; //0x04 int32_t objectIndex; //0x04
uint16_t flags; //0x08 uint16_t type; //0x08
uint16_t pad_0A; //0x0A uint16_t refCount; //0x0A
int32_t unk_C; //0x0C int32_t unk_C; //0x0C
CMapObjDefGroup* prev; //0x10 CMapObjDefGroup* prev; //0x10
CMapObjDefGroup* next; //0x14 CMapObjDefGroup* next; //0x14
int32_t TSExplicitList__m_linkoffset_unk_18; //0x18 TSExplicitList_CMapObjDefGroupMapObjDefLink linkList;
void* TSExplicitList__m_ptr1_unk_1C; //0x1C
void* TSExplicitList__m_ptr2_unk_1C; //0x20
CAaBox bbox; CAaBox bbox;
CAaSphere sphere; CAaSphere sphere;
@ -96,13 +138,13 @@ struct CMapObjDefGroup
int32_t unk_64; //0x64 int32_t unk_64; //0x64
int32_t unk_68; //0x68 int32_t unk_68; //0x68
//CWFrustum
int32_t TSExplicitList__m_linkoffset_unk_6C; //0x6C int32_t TSExplicitList__m_linkoffset_unk_6C; //0x6C
void* TSExplicitList__m_ptr1_unk_70; //0x70 void* TSExplicitList__m_ptr1_unk_70; //0x70
void* TSExplicitList__m_ptr2_unk_74; //0x74 void* TSExplicitList__m_ptr2_unk_74; //0x74
int32_t TSExplicitList__m_linkoffset_unk_78; //0x78 // CMapDoodadDef
void* TSExplicitList__m_ptr1_unk_7C; //0x7C TSExplicitList_CMapObjDefGroupDoodadDefLink doodadDefLinkList;
void* TSExplicitList__m_ptr2_unk_80; //0x80
int32_t TSExplicitList__m_linkoffset_unk_84; //0x84 int32_t TSExplicitList__m_linkoffset_unk_84; //0x84
void* TSExplicitList__m_ptr1_unk_88; //0x88 void* TSExplicitList__m_ptr1_unk_88; //0x88

View file

@ -0,0 +1,54 @@
#ifndef CMAPSTATICENTITY_H
#define CMAPSTATICENTITY_H
DECLARE_STRUCT(CMapStaticEntity);
#include "system/types.h"
#include "tempest/vector.h"
#include "tempest/box.h"
#include "storm/list.h"
#include "map/CMapBaseObj.h"
typedef struct CMapStaticEntityMapChunkLink CMapStaticEntityMapChunkLink;
STORM_TS_LIST(CMapStaticEntityMapChunkLink);
struct CMapStaticEntityMapChunkLink
{
uint32_t objectIndex; //0x00
CMapStaticEntity* owner; //0x04
void* ref; //0x08 //could be CMapChunk* or CMapObjDefGroup*
TSLink_CMapStaticEntityMapChunkLink refLink; //0x0C - 0x14
TSLink_CMapStaticEntityMapChunkLink ownerLink; //0x14 - 0x1C
};
struct CMapStaticEntity
{
void** vtable; //0x00
int32_t objectIndex; //0x04
uint16_t type; //0x08
uint16_t refCount; //0x0A
int32_t unk_C; //0x0C
CMapStaticEntity* prev; //0x10
CMapStaticEntity* next; //0x14
TSExplicitList_CMapStaticEntityMapChunkLink linkList;
int32_t unk_024; //0x24
uint32_t unkFlags_28; //0x28
int32_t unkCounter; //0x2C
float unk_030; //0x30
void* unk_m2Model_034; //0x34
C3Vector vec1;
float unk_044; //0x44
CAaBox bbox;
C3Vector vec2;
C3Vector position;
float scale; //0x78
int32_t unk_07C; //0x7C
int32_t unk_080; //0x80
CImVector m2AmbietColor; //0x84
CImVector m2DiffuseColor; //0x88
float unk_08C; //0x8C
};
#endif

View file

@ -19,6 +19,8 @@ DECLARE_STRUCT(SMOPoly);
DECLARE_STRUCT(SMOBatch); DECLARE_STRUCT(SMOBatch);
DECLARE_STRUCT(SMOLiquidVert); DECLARE_STRUCT(SMOLiquidVert);
DECLARE_STRUCT(SMOLTile); DECLARE_STRUCT(SMOLTile);
DECLARE_STRUCT(SMOWVert);
DECLARE_STRUCT(SMOMVert);
struct SMOHeader struct SMOHeader
{ {
@ -32,13 +34,14 @@ struct SMOHeader
uint32_t ambColor; uint32_t ambColor;
uint32_t wmoID; uint32_t wmoID;
CAaBox bounding_box; CAaBox bounding_box;
uint16_t flag_do_not_attenuate_vertices_based_on_distance_to_portal : 1; /*uint16_t flag_do_not_attenuate_vertices_based_on_distance_to_portal : 1;
uint16_t flag_use_unified_render_path : 1; uint16_t flag_use_unified_render_path : 1;
uint16_t flag_use_liquid_type_dbc_id : 1; uint16_t flag_use_liquid_type_dbc_id : 1;
uint16_t flag_do_not_fix_vertex_color_alpha: 1; uint16_t flag_do_not_fix_vertex_color_alpha: 1;
uint16_t flag_lod : 1; uint16_t flag_lod : 1;
uint16_t flag_default_max_lod : 1; uint16_t flag_default_max_lod : 1;
uint16_t : 10; uint16_t : 10;*/
uint16_t flags;
uint16_t numLod; uint16_t numLod;
}; };
@ -96,12 +99,13 @@ struct SMODoodadSet
struct SMODoodadDef struct SMODoodadDef
{ {
uint32_t nameIndex : 24; /*uint32_t nameIndex : 24;
uint32_t flag_AcceptProjTex : 1; uint32_t flag_AcceptProjTex : 1;
uint32_t flag_0x2 : 1; uint32_t flag_0x2 : 1;
uint32_t flag_0x4 : 1; uint32_t flag_0x4 : 1;
uint32_t flag_0x8 : 1; uint32_t flag_0x8 : 1;
uint32_t unk : 4; uint32_t unk : 4;*/
uint32_t flags;
C3Vector position; C3Vector position;
C4Quaternion orientation; C4Quaternion orientation;
float scale; float scale;
@ -110,10 +114,11 @@ struct SMODoodadDef
struct SMOFog struct SMOFog
{ {
uint32_t flag_infinite_radius : 1; /*uint32_t flag_infinite_radius : 1;
uint32_t : 3; uint32_t : 3;
uint32_t flag_0x10 : 1; uint32_t flag_0x10 : 1;
uint32_t : 27; uint32_t : 27;*/
uint32_t flags;
C3Vector position; C3Vector position;
float smallerRadius; float smallerRadius;
@ -131,7 +136,7 @@ struct SMOFog
struct SMOMaterial struct SMOMaterial
{ {
uint32_t F_UNLIT : 1; /*uint32_t F_UNLIT : 1;
uint32_t F_UNFOGGED : 1; uint32_t F_UNFOGGED : 1;
uint32_t F_UNCULLED : 1; uint32_t F_UNCULLED : 1;
uint32_t F_EXTLIGHT : 1; uint32_t F_EXTLIGHT : 1;
@ -140,7 +145,8 @@ struct SMOMaterial
uint32_t F_CLAMP_S : 1; uint32_t F_CLAMP_S : 1;
uint32_t F_CLAMP_T : 1; uint32_t F_CLAMP_T : 1;
uint32_t flag_0x100 : 1; uint32_t flag_0x100 : 1;
uint32_t : 23; uint32_t : 23;*/
uint32_t flags;
uint32_t shader; uint32_t shader;
@ -163,14 +169,15 @@ struct SMOMaterial
struct SMOPoly struct SMOPoly
{ {
uint8_t F_UNK_0x01: 1; /*uint8_t F_UNK_0x01: 1;
uint8_t F_NOCAMCOLLIDE : 1; uint8_t F_NOCAMCOLLIDE : 1;
uint8_t F_DETAIL : 1; uint8_t F_DETAIL : 1;
uint8_t F_COLLISION : 1; uint8_t F_COLLISION : 1;
uint8_t F_HINT : 1; uint8_t F_HINT : 1;
uint8_t F_RENDER : 1; uint8_t F_RENDER : 1;
uint8_t F_CULL_OBJECTS : 1; uint8_t F_CULL_OBJECTS : 1;
uint8_t F_COLLIDE_HIT : 1; uint8_t F_COLLIDE_HIT : 1;*/
uint8_t flags;
uint8_t materialId; uint8_t materialId;
}; };
@ -186,35 +193,39 @@ struct SMOBatch
uint8_t texture; uint8_t texture;
}; };
struct SMOWVert
{
uint8_t flow1;
uint8_t flow2;
uint8_t flow1Pct;
uint8_t filler;
float height;
};
struct SMOMVert
{
int16_t s;
int16_t t;
float height;
};
struct SMOLiquidVert struct SMOLiquidVert
{ {
union union
{ {
struct SMOWVert SMOWVert waterVert;
{ SMOMVert magmaVert;
uint8_t flow1;
uint8_t flow2;
uint8_t flow1Pct;
uint8_t filler;
float height;
} waterVert;
struct SMOMVert
{
int16_t s;
int16_t t;
float height;
} magmaVert;
}; };
}; };
struct SMOLTile struct SMOLTile
{ {
uint8_t legacyLiquidType : 4; /*uint8_t legacyLiquidType : 4;
uint8_t unknown1 : 1; uint8_t unknown1 : 1;
uint8_t unknown2 : 1; uint8_t unknown2 : 1;
uint8_t fishable : 1; uint8_t fishable : 1;
uint8_t shared : 1; uint8_t shared : 1;*/
uint8_t flags;
}; };

File diff suppressed because it is too large Load diff