From Valve Developer Community
Jump to: navigation, search

Version 5

class BinaryDMX_v5
	char* header = "<!-- dmx encoding binary 5 format %s %i -->\n";

	int		nStrings; // number of strings in StringDict
	char*	StringDict[]; // null-terminated, tightly packed

	int	nElements; // number of elements in the entire data model

	DmeHeader	ElementIndex; // the root element
	DmeBody		ElementBodies[]; // in the same order as the nested index

class DmeHeader
	int		Type; // string dictionary index
	int		Name; // string dictionary index
	char	GUID[16]; // little-endian

	DmeHeader SubElems[]; // skip elements which already have an index entry

class DmeBody
	int	nAttributes;
	DmeAttribute Attributes[];

class DmAttribute
	int		Name; // string dictionary index
	char	AttributeType; // see below
	void*	Value; // see below

Attribute Types

Check DmAttributeType_t in public/datamodel/dmattributetypes.h to get the index of each attribute type.

Note.png Note: DmAttributeType_t changes over time, so make sure that you're looking at the right version! Use Alien Swarm for binary v5.

Attribute Values

Most values are stored in their native binary format (check tier0 for the layout of the fancier types). Exceptions are:

String values are stored as an int index in the string dictionary. String array values are stored inline as a null-terminated char array.
Element values are represented by an int. The value is the element's position in the element index.
  • -1 means "no value"
  • -2 followed by an ASCII GUID (yes, ASCII!) means a "stub element" which exists but was excluded from the DMX
Arrays start with an int defining the number of items they contained and are tightly-packed.
Time values are float in memory but are stored in binary DMX as (int)(this*10000).
Color values are objects with four ints in memory but stored in binary DMX as char[4].

Previous versions

Version Changes
Binary_v2 Earliest known version. Header is <!-- DMXVersion binary_v2 -->\n.
1 Standard DMX header introduced: <!-- dmx encoding binary %i format %s %i -->\n.
2 String dictionary added for element types and attribute names; length and indices are short.
3 Time attribute type added.
  • String dictionary length is now int, even though indices are still short.
  • String values (non-array) and element names moved to string dictionary.
  • String dictionary indices are now int too.
  • Stub elements added.