From wowdev
Revision as of 05:18, 24 March 2012 by Mjollna (talk | contribs) (Added ADT information)
Jump to: navigation, search

This site contains information about the alphafiles

For information added on 2012-03-24 : files I looked at come from build 3368 (Mjollnà).


In the Alpha the ADTs and the WDT were just one big file with this structure :


See the new files.


struct MphdInfo
/*0x00*/ int32 unknown1;   // Something related to M2 number.
/*0x04*/ MDNM* mdnm;
/*0x08*/ int32 unknown2;   // Something related to Wmo number.
/*0x0C*/ MONM* monm;
/*0x10*/ int32 unused[28]; // only zeroes


struct SMAreaInfo
 struct SMAreaInfoEntry
  MHDR* mhdr;        // absolute offset
  MCNK* firstMcnk;   // offset relative to MHDR start (so value can also be read as : all ADT chunks total size from MHDR to first MCNK)
  int32 unknown1;    // unused ?
  int32 unknown2;    // unused ?
 } entries[64*64];


Filenames Doodads.


Filenames WMOS.

MODF (optional)

See the new files. Unique and at the end of the file for WMO based maps, which contain no ADT parts. First entry looks like a dummy one (2nd int32 is all 0xff, rest of entry is full of 0x0). Total 2 entries counting the dummy one.

RazorfenDowns is "hybrid", it contains both WDT-part optional MODF with the dummy entry, and a MODF for each of its ADTs.


struct MhdrInfo
/*0x00*/ MCIN* mcin;
/*0x04*/ MTEX* mtex;
/*0x08*/ int32 MtexSize;   // includes chunk name and size
/*0x0C*/ MDDF* mddf;
/*0x10*/ int32 unknown1;   // always 0 ?
/*0x14*/ MODF* modf;
/*0x18*/ int32 unused[10]; // seem unused


256 Entries, so a 16*16 Chunkmap. See the new files.


See the new files.


See the new files.

MODF (in ADT part)

See the new files.


The header is 128 bytes like later versions, but information inside is placed slightly differently. Offsets are relative to the end of MCNK header.

struct SMChunk
/*0x00*/ int32 flags;
/*0x04*/ int32 IndexX;
/*0x08*/ int32 IndexY;
/*0x0C*/ float unknown3;
/*0x10*/ int32 nLayers;
/*0x14*/ int32 unknown4;
/*0x18*/ MCVT* mcvt;      // (= 0x00)
/*0x1C*/ MCNR* mcnr;
/*0x20*/ MCLY* mcly;
/*0x24*/ MCRF* mcrf;
/*0x28*/ MCAL* mcal;
/*0x2C*/ int32 McalSize;
/*0x30*/ MCSH* mcsh;
/*0x34*/ int32 McshSize;
/*0x38*/       // unknown
/*0x3C*/       // unknown
/*0x40*/       // unknown
/*0x44*/ UINT2[8][8] ReallyLowQualityTexturingMap;
/*0x54*/       // unknown
/*0x58*/       // unknown
/*0x5C*/ int32 McnkSize; // (minus header size)
/*0x60*/       // unknown
/*0x64*/ MCLQ* mclq;     // If (value == MCNK size) it means there's no MCLQ.
/*0x68 to 0x80*/         // unused ?

FLAG_IMPASS seems to be at the same place as later versions, other flags not verified.

(MCVT) sub-chunk

No chunk name and no size.

It's composed of the usual 145 floats, but their order is different : alpha vertices are not interleaved... Which means there are all outer vertices first (all 81), then all inner vertices (all 64) in MCVT (and not 9-8-9-8 etc.). Unlike 3.x format, MCVT have absolute height values (no height relative to MCNK header 0x70).

(MCNR) sub-chunk

No chunk name and no size.

Same as 3.x format, except values order which is like alpha MCVT : all outer values first, then all inner ones.

MCLY sub-chunk

See the new files.

MCRF sub-chunk

Not studied yet. Seems identical to later versions.

(MCSH) sub-chunk

No chunk name and no size.

See the new files.

(MCAL) sub-chunk

No chunk name and no size.

See the new files.

(MCLQ) sub-chunk

No chunk name and no size.

See the new files.


See also WMO/v14 page for more detailed information.

Again one big file: This is, what now is stored in the Rootfile
















And this is what now is stored in the Groupfiles















repeated n-times, where n is the number of what now is groupfiles.


The old Model-Format, it's a lightly modified WC3-Modelformat. ChunkedStructure

'MDLX' Identifier(no chunk size!)

'VERS' 0x514 Version Chunk


  • char Name[80];
  • char AnimationFileName[260];
  • float BoundsRadius;
  • Vector3D MinimumExtent;
  • Vector3D MaximumExtent;
  • int BlendTime;
  • char unk;//oO


  • int nSequences;

array[nSequences] of:

  • char Name[80];
  • int IntervalStart;
  • int IntervalEnd;
  • float MoveSpeed;//only for animations were you move
  • int Flags; //0 - Looping 1 - NonLooping
  • Vector3D MinimumExtent;
  • Vector3D MaximumExtent;
  • float Rarity;//?
  • int SyncPoint;//?
  • float BoundsRadius;//?
  • int unknown;//?
  • int PlaybackSpeed;//?


  • int GlobalSequence;


  • int nMaterials;
  • int unk;

array[nMaterials] of:

  • int InclusiveSize;
  • int PriorityPlane;
  • int Flags;
  • int InclusiveSize2;
  • int FilterMode;
  • int ShadingFlags;
  • int TextureId;
  • int TextureAnimationId;
  • int CoordId;
  • float Alpha;

'TEXS' array of:

  • int ReplaceableId;
  • char FileName[260] ;
  • int Flags


  • int nGeos;
  • int unk;

array[nGeos] of:

  • char vert[4];//'VRTX'
  • int NrOfVertexPositions;
  • Vector3D vpos[NrOfVertexPositions];
  • char norm[4];//'NRMS'
  • int NrOfVertexNormals;
  • Vector3D vnorm[NrOfVertexNormals];
  • char uvas[4];//'UVAS'
  • int NrOfTextureVertexGroups;
  • Vector2D unk[NrOfVertexNormals];
  • char ptyp[4];//'PTYP'
  • int NrOfFaceTypeGroups;
  • char FaceType[NrOfFaceTypeGroups];
  • char pcnt[4];//'PCNT'
  • int NrOfFaceGroups;
  • int NrOfIndexes[NrOfFaceGroups];
  • char pvtx[4];//'PVTX'
  • int TotalNrOfIndexes;

local int TotalNrOfFaces = TotalNrOfIndexes / 3;

  • Triangle Face[TotalNrOfFaces] ;
  • char gndx[4];//'GNDX'
  • int NrOfVertexGroups;
  • byte MatrixGroup[NrOfVertexGroups];
  • char mtgc[4];//'MTGC'
  • int NrOfMatrixGroups;
  • int MatrixGroupSize[NrOfMatrixGroups];
  • char mats[4];//'MATS'
  • int NrOfMatrixIndexes;
  • int MatrixIndex[NrOfMatrixIndexes];
  • char bidx[4];//'BIDX'
  • int nBidx;
  • int Bidx[nBidx];
  • char bwgt[4];
  • int nBwgt;//'BWGT'
  • float Bwgt[nBwgt];
  • int MaterialId;
  • int SelectionGroup;
  • int SelectionFlags;
  • float BoundsRadius;
  • Vector3D MinimumExtent;
  • Vector3D MaximumExtent;
  • int NrOfExtents;
  • Vector6D Extent[NrOfExtents];
  • float unk_[15];


'KGRT' Animated geoset rotation


'KGSC' Animated geoset scaling