These structures work correctly in my project:
Scene data from Object manager:
Code:
//sizeof = 0x54
class NavZoneRaw
{
public:
DWORD id_navzone; // 0x000
DWORD id_world; // 0x004
DWORD id_unknown_008; // 0x008
Vec2 unknown_00C; // 0x00C
DWORD unknown_014; // 0x014
Vec2 zoneMin; // 0x018
Vec2 zoneMax; // 0x020
DWORD unknown_028[8]; // 0x028
DWORD pNavZoneDefRaw; // 0x048
DWORD pSceneRecord; // 0x04C
DWORD unknown_050; // 0x050
};
//sizeof = 0x1C8
class NavMeshRaw
{
public:
DWORD id_navmesh; // 0x000
DWORD id_world; // 0x004
DWORD unknown_008[3]; // 0x008
DWORD sno_levelarea; // 0x014
DWORD unknown_018[3]; // 0x018
DWORD sno_portalWorld; // 0x024
DWORD unknown_028[10]; // 0x028
float unknown_050; // 0x050
DWORD unknown_054[5]; // 0x054
float unknown_068; // 0x068
DWORD unknown_06C[8]; // 0x06C
DWORD sizeX; // 0x08C
DWORD sizeY; // 0x090
AABB unknown_094; // 0x094
AABB unknown_0AC; // 0x0AC
DWORD unknown_0C4[5]; // 0x0C4
DWORD id_sno; // 0x0D8
DWORD unknown_0DC[4]; // 0x0DC
Vec2 MeshMin; // 0x0EC
DWORD unknown_0F4[16]; // 0x0F4
AABB bounds; // 0x134
AABB boundsMarker; // 0x14C
Vec2 MeshMax; // 0x164
float unknown_16C[3]; // 0x16C
DWORD unknown_178; // 0x178
NavZoneRaw* pZone; // 0x17C
DWORD unknown_180[9]; // 0x180
DWORD unknown_1A4; // 0x1A4 Read by D3::NavMesh::GetFlags
DWORD unknown_1A8; // 0x1A8
DWORD unknown_1AC[7]; // 0x1AC
};
//sizeof = 0x2A8
class SceneRaw
{
public:
int id_scene; // 0x000
NavMeshRaw navmesh; // 0x004
DWORD unknown_1CC[55]; // 0x1CC
};
SNO related:
Code:
//sizeof = 0x10
class DataPtr
{
public:
DWORD file_offset; // 0x000
DWORD size; // 0x004
DWORD mem_offset; // 0x008
DWORD unused; // 0x00C
};
//sizeof = 0x8
class DataPtr2
{
public:
DWORD file_offset; // 0x000
DWORD size; // 0x004
};
//sizeof = 0x8
class NavMeshSquare
{
public:
float z; // 0x000
NavCellFlagsDW flags; // 0x004
};
//sizeof = 0x6
class NavGridSquare
{
public:
NavCellFlagsW Flags; // 0x000
WORD W1; // 0x002
WORD CellLookupIndex; // 0x004
};
//sizeof = 0x20
class NavCell
{
public:
Vec3 Min; // 0x000
Vec3 Max; // 0x00C
NavCellFlagsW Flag; // 0x018
WORD NeighbourCount; // 0x01A
DWORD NeighborsIndex; // 0x01C
};
//sizeof = 0x4
class NavCellLookup
{
public:
NavCellFlagsW Flags; // 0x000
WORD WCell; // 0x002
};
//sizeof = 0x128
class NavMeshDef
{
public:
DWORD SquaresX; // 0x000
DWORD SquaresY; // 0x004
DWORD pad_008; // 0x008
DWORD SquareCount; // 0x00C
float pad_010; // 0x010
DataPtr2 Squares; // 0x014
DWORD pad_01C; // 0x01C
NavMeshSquare* array_ptr; // 0x020
DWORD pad_024; // 0x024
char name[256]; // 0x028
};
//sizeof = 0x84
class NavZoneDef
{
public:
DWORD NavCellCount; // 0x000
DWORD pad_004[3]; // 0x004
DataPtr2 NavCells; // 0x010
DWORD NeighbourCount; // 0x018
DWORD pad_01C[3]; // 0x01C
DataPtr2 NavCellNeighbours; // 0x024
float pad_02C[2]; // 0x02C
DWORD pad_034; // 0x034
Vec2 V0; // 0x038
DWORD pad_040[3]; // 0x040
DataPtr2 GridSquares; // 0x04C
DWORD pad_054[4]; // 0x054
DataPtr2 CellLookups; // 0x064
DWORD BorderDataCount; // 0x06C
DWORD pad_070[3]; // 0x070
DataPtr2 BorderData; // 0x07C
};
//sizeof = 0x30C
class SNOScene
{
public:
MemHeader header; // 0x000
AABB AABBBounds; // 0x010
AABB AABBMarketSetBounds; // 0x028
NavMeshDef navmesh; // 0x040
DataPtr2 Exclusions; // 0x168
DWORD pad_170[14]; // 0x170
DataPtr2 Inclusions; // 0x1A8
DWORD pad_1B0[14]; // 0x1B0
DataPtr2 MarkerSets; // 0x1E8
DWORD pad_1F0[14]; // 0x1F0
char lootlink[64]; // 0x228
DataPtr2 MapTrigEvent; // 0x268
DWORD pad_270[4]; // 0x270
NavZoneDef NavZone; // 0x280
DWORD SNOAppearance; // 0x304
DWORD SNOPhysMesh; // 0x308
};