WDT: Difference between revisions
m (→MPHD chunk) |
|||
Line 2: | Line 2: | ||
== MPHD chunk == | == MPHD chunk == | ||
Contains 8 32-bit integers. | |||
Contains 8 32-bit integers. | |||
uint32 flags; | uint32 flags; | ||
uint32 something; | uint32 something; | ||
uint32 unused[6]; | uint32 unused[6]; | ||
These are the only flags checked: | |||
'''Flag Description''' | '''Flag Description''' | ||
0b0001 No Terrain/no terraincollision | 0b0001 No Terrain/no terraincollision | ||
0b0010 | 0b0010 Is checked pretty often and has some effect on rendering. Maybe search for an WDT having this value. | ||
0b0100 [http://imagr.eu/upload/66886112164390_WoWScrnShot_022809_122447.jpg funky] | 0b0100 Decides whether to use _env terrain shaders or not: [http://imagr.eu/upload/66886112164390_WoWScrnShot_022809_122447.jpg funky] | ||
0b1000 | 0b1000 Disables something. No idea what. Another rendering thing. Someone may check all them in wild life.. | ||
if ( WDT_MPHD & 8 ) | |||
return result; | |||
The second integer is '''not''' ignored but stores something too: | The second integer is '''not''' ignored but stores something too: |
Revision as of 00:02, 14 July 2009
WDT files specify exactly which map tiles are present in a world, if any, and can also reference a "global" WMO. They have a chunked file structure.
MPHD chunk
Contains 8 32-bit integers.
uint32 flags; uint32 something; uint32 unused[6];
These are the only flags checked:
Flag Description 0b0001 No Terrain/no terraincollision 0b0010 Is checked pretty often and has some effect on rendering. Maybe search for an WDT having this value. 0b0100 Decides whether to use _env terrain shaders or not: funky 0b1000 Disables something. No idea what. Another rendering thing. Someone may check all them in wild life..
if ( WDT_MPHD & 8 ) return result;
The second integer is not ignored but stores something too:
for( int i = 0; i < WDT_MPHD.something/8; i++ ) { WDT_MAIN[i].flags = 0; WDT_MAIN[i].somedata = 0; }
The other bytes seem to be unused from what I can tell.
MAIN chunk
- Map tile table.
Contains 64x64 = 4096 records of 8 bytes each.
int32 flags; void * somedata;
Flags&1 tells us, if a tile is holding an ADT. Flags&2 gets set ingame when an ADT is loaded at that position. The pointer to some data is set if the tile is loaded asynchronous.
if ( !(MAIN.flags & 2) ) LoadADTByPosition( x, y ); if ( *(Main.somedata) ) AsyncFileReadWait( *(Main.somedata) );
Blizzard was just too lazy to compress the files here. A simple bool array and adding the fields when parsing would the alternative. We just need to know the &1 flag.
MWMO, MODF chunks
For worlds with terrain, the MWMO chunk is empty and there is no MODF chunk. For a global-WMO-only world, these chunks specify an object in the same format as it is already done in ADT files. See the ADT format description for details.
MWMO chunk
- List of filenames for WMOs (world map objects) that appear in this map tile. A contiguous block of zero-terminated strings.
MODF chunk
- Placement information for WMOs. 64 bytes per wmo instance.
Offset Type Description 0x00 uint32 ID (index in the MWMO list) 0x04 uint32 unique identifier for this instance 0x08 3*floats Position (X,Y,Z) 0x14 3*floats Orientation (A,B,C) 0x20 6*floats Extents 0x38 uint32 Flags 0x3A uint16 Doodad set index 0x3C uint32 Name set
struct SMMapObjDef // 03-29-2005 By ObscuR { /*000h*/ UINT32 nameId; /*004h*/ UINT32 uniqueId; /*008h*/ float pos[3]; /*00Ch*/ /*010h*/ /*014h*/ float rot[3]; /*018h*/ /*01Ch*/ /*020h*/ float extents[6]; /*024h*/ /*028h*/ /*02Ch*/ /*030h*/ /*034h*/ /*038h*/ UINT32 flags; /*03Ch*/ UINT16 doodadSet; /*03Eh*/ UINT16 nameSet; /*040h*/ };