PD4: Difference between revisions
Jump to navigation
Jump to search
(Created page with "PD4 files are the PM4 equivalent for WMOs. There is one file per root WMO. They are not supposed to be shipped to the client and are used by the server only....") |
mNo edit summary |
||
Line 2: | Line 2: | ||
=MVER= | =MVER= | ||
uint32_t version; | |||
enum { | |||
version_48 = 48, // seen in {{Template:Sandbox/PrettyVersion|expansionlevel=6|build=6.0.1.18297}}, {{Template:Sandbox/PrettyVersion|expansionlevel=6|build=6.0.1.18443}} | |||
}; | |||
=MCRC= | =MCRC= | ||
uint32_t _0x00; // {{Template:Unverified|Always 0 in version_48.}} | |||
=MSHD= | =MSHD= | ||
struct { | |||
uint32_t _0x00; | |||
uint32_t _0x04; | |||
uint32_t _0x08; | |||
uint32_t _0x0c[5]; // {{Template:Unverified|Always 0 in version_48, likely placeholders.}} | |||
} header; | |||
=MSPV= | =MSPV= | ||
{{Template:Type|C3Vector}} msp_vertices[]; | |||
=MSPI= | =MSPI= | ||
uint32_t msp_indices[]; // index into [[#MSPV]] | |||
=MSCN= | =MSCN= | ||
Not related to [[#MSPV]] and [[#MSLK]]: Seen to have one entry while [[#MSPV]] and [[#MSLK]] has none. | |||
{{Template:Type|C3Vector}} mscn[]; // {{Template:Unverified|n ≠ normals.}} | |||
=MSLK= | =MSLK= | ||
struct { | |||
uint8_t _0x00; | |||
uint8_t _0x01; | |||
uint16_t _0x02; // {{Template:Unverified|Always 0 in version_48, likely padding.}} | |||
uint32_t _0x04; // {{Template:Unverified|An index somewhere.}} | |||
int24_t _0x08; // -1 if _0x0b is 0 | |||
uint8_t _0x0b; | |||
uint32_t _0x0c; // {{Template:Unverified|Always 0xffffffff in version_48.}} | |||
uint16_t _0x10; | |||
uint16_t _0x12; // {{Template:Unverified|Always 0x8000 in version_48.}} | |||
} mslk[]; | |||
=MSVT= | =MSVT= | ||
{{Template:Type|C3Vector}} msvt[]; // {{Template:Unverified|1=t ≠ tangents. vt = vertices?}} | |||
=MSVI= | =MSVI= | ||
Likely not triangles but quads, or an n-gon described somewhere, possibly [[#MSUR]] where <tt>_0x01</tt> is count and <tt>_0x14</tt> is offset. | |||
uint32_t msv_indices[]; // index into [[#MSVT]] | |||
=MSUR= | =MSUR= | ||
struct { | |||
uint8_t _0x00; | |||
uint8_t _0x01; // {{Template:Unverified|count of indices in [[#MSVI]]}} | |||
uint8_t _0x02; | |||
uint8_t _0x03; // {{Template:Unverified|Always 0 in version_48, likely padding.}} | |||
float _0x04; | |||
float _0x08; | |||
float _0x0c; | |||
float _0x10; | |||
uint32_t _0x14; // {{Template:Unverified|start offset of indices in [[#MSVI]]}} | |||
uint32_t _0x18; | |||
uint32_t _0x1c; | |||
} msur[]; |
Revision as of 00:53, 12 September 2017
PD4 files are the PM4 equivalent for WMOs. There is one file per root WMO. They are not supposed to be shipped to the client and are used by the server only.
MVER
uint32_t version; enum { version_48 = 48, // seen in (6.0.1.18297), (6.0.1.18443) };
MCRC
uint32_t _0x00; // Always 0 in version_48.ᵘ
MSHD
struct { uint32_t _0x00; uint32_t _0x04; uint32_t _0x08; uint32_t _0x0c[5]; // Always 0 in version_48, likely placeholders.ᵘ } header;
MSPV
C3Vectorⁱ msp_vertices[];
MSPI
uint32_t msp_indices[]; // index into #MSPV
MSCN
Not related to #MSPV and #MSLK: Seen to have one entry while #MSPV and #MSLK has none.
C3Vectorⁱ mscn[]; // n ≠ normals.ᵘ
MSLK
struct { uint8_t _0x00; uint8_t _0x01; uint16_t _0x02; // Always 0 in version_48, likely padding.ᵘ uint32_t _0x04; // An index somewhere.ᵘ int24_t _0x08; // -1 if _0x0b is 0 uint8_t _0x0b; uint32_t _0x0c; // Always 0xffffffff in version_48.ᵘ uint16_t _0x10; uint16_t _0x12; // Always 0x8000 in version_48.ᵘ } mslk[];
MSVT
C3Vectorⁱ msvt[]; // t ≠ tangents. vt = vertices?ᵘ
MSVI
Likely not triangles but quads, or an n-gon described somewhere, possibly #MSUR where _0x01 is count and _0x14 is offset.
uint32_t msv_indices[]; // index into #MSVT
MSUR
struct { uint8_t _0x00; uint8_t _0x01; // count of indices in #MSVIᵘ uint8_t _0x02; uint8_t _0x03; // Always 0 in version_48, likely padding.ᵘ float _0x04; float _0x08; float _0x0c; float _0x10; uint32_t _0x14; // start offset of indices in #MSVIᵘ uint32_t _0x18; uint32_t _0x1c; } msur[];