.MDX
Encyclopedia
.MDX files are 3D model files engineered and used by Blizzard Entertainment
Blizzard Entertainment
Blizzard Entertainment, Inc. is an American video game developer and publisher founded on February 8, 1991 under the name Silicon & Synapse by three graduates of UCLA, Michael Morhaime, Allen Adham and Frank Pearce and currently owned by French company Activision Blizzard...

 in its games. Several variations exist. The document focuses on the format used in Warcraft 3 and Frozen Throne. The format comes in two flavors: .MDX and .MDL. .MDX is a binary format. It's harder to edit and has generally smaller filesizes. .MDL is a text format, which can be edited with a text editor
Text editor
A text editor is a type of program used for editing plain text files.Text editors are often provided with operating systems or software development packages, and can be used to change configuration files and programming language source code....

. The text formatting increases the filesize. Several converters exist to convert between these formats.

The .MDX suffix also appears on CD and DVD image files, Media Data Extended
Media Data Extended
Daemon Tools is a disk image emulator and optical disc authoring program for Microsoft Windows. Daemon Tools was originally a furtherance in the development of another program, Generic SafeDisc emulator, and incorporated all of its features. The program claims to be able to defeat most copy...

, apparently native to Daemon Tools. Daemon Tools 4.1, however, cannot open them.

Converters

This is a list of known converters to convert to and from the MDX format.

Editors

This is a list of known editors for manipulating the MDX files.

Code syntax

All code samples below will be given in a C/C++ like pseudo-code. To simplify syntax and readability some have been split into substructures. The following notations are used to describe this.
  • X - A structure X that must be present and in the given order
  • {X} - A structure X that may or may not be present. They may also be in a different order.


A few special fields exists which has specific meanings.
  • ChunkSize - The size of the chunk (see General structure below)
  • InclusiveSize - The size of the structure including the size of this variable
  • ExclusiveSize - The size of the structure NOT including the size of this variable


Other notations.
  • #X - A flag value. Multiple flags can be combined in a single variable.

Datatypes

In the code below various datatypes are used. This is a table describing these datatypes.
  • UINT8 - An 8-bit unsigned integer, little endian
  • UINT16 - A 16-bit unsigned integer, little endian
  • UINT32 - A 32-bit unsigned integer, little endian
  • FLOAT - A 32-bit floating point number, IEEE single precision
  • FLOAT[N] - A sequence of N 32-bit floating point numbers forming a vector
  • STRING[N] - A sequence of N 8-bit characters forming a string

General structure

All models have a tree hiearchy of components, or chunks. Many components lie directly under the root while others are subcomponents. The contents vary from type to type though most of them have the same kind of header as shown below.

struct Chunk
{
UINT32 Tag;
UINT32 ChunkSize;

...
};

Each chunk begins with two 32-bit unsigned integers. The first is a tag describing the type. It is constructed as a sequence of four 8-bit characters giving them a descriptive ID if viewed in a hex editor (or Notepad). The second integer tells the size of the chunk. This size does not include the tag and size itself; it includes only the following contents. The ChunkSize is useful for determining the number of subcomponents. It is useful for skipping whole chunks in the writing of a non-complete MDX loader, in which case the tag and size are read and then that many bytes are skipped to start reading the next chunk.

Some structures have IDs to refer to other objects. These are 0-based indexes, referring to the object in the order in which they appear in the file. The special value 0xFFFFFFFF (or -1 in signed format) represents "No ID", or in some cases "Many IDs". In the latter case, the reference has to be made in some other way, usually from the other object.
The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK