===============
DCM File Format
===============
Version: 0.1.0
Author: Santos
===============

------
HEADER
------

UINT32		header size
UINT32		data size
UINT32		num meshes
FOR (num meshes) DO
	// Mesh
	UINT8		flag (0-2)
	IF (flag == 1) THEN
		UINT32		num mesh vertices
		UINT32		? (40)
		UINT32		num mesh indices
		UINT32		index data offset
		UINT32		num sub meshes
		UINT32		num skin bones
		FLOAT[6]	bounding box
		UINT32		vertex data offset (0)
		UINT32		vertex data offset (1)
		UINT32		vertex data offset (2)
		FOR (num skin bones) DO
			UINT8		? (FF)
			UINT16		name length
			CHAR[N]		name
			FLOAT[16]	inverse bind world matrix
			UINT32		parent index?
	ELSE IF (flag == 0 OR flag == 2) THEN
		UINT8		? (0)
		UINT32		num mesh vertices
		UINT32		? (60)
		UINT32		num mesh indices
		UINT32		index data offset
		UINT32		? (2)
		UINT32		num sub meshes
		FLOAT[6]	bounding box
		UINT32		vertex data offset (0)
		UINT32		vertex data offset (1)

	// Sub meshes
	FOR (num sub meshes)
		UINT8		? (-1)
		UINT16		name length
		CHAR[N]		name
		UINT32		sub mesh index? (0-N, 1 if one sub mesh)
		UINT32		? (0)
		UINT32		num vertices
		UINT32		vertex offset
		UINT32		num indices
		UINT32		index offset
		UINT32		num skin bones
		FOR (num skin bones) DO
			UINT32	skin bone index

		// Cloth
		IF flag== 2 THEN
			UINT32		hkx data offset
			UINT32		hkx data size

----
DATA
----

// Buffers
FOR (num meshes) DO
	// Index Buffer
	FOR (num sub meshes) DO
		FOR (num indices) DO
			UINT16	index

	// Vertex Buffer
	FOR (num sub meshes) DO
		// Vertex Stream 0	
		FOR (num vertices) DO
			FLOAT	vertex x
			FLOAT	vertex y
			FLOAT	vertex z
			IF (flag == 1) THEN
				FLOAT	blend weight 1
				FLOAT	blend weight 2
				FLOAT	blend weight 3
				FLOAT	blend weight 4
				UINT8	blend index 1
				UINT8	blend index 2
				UINT8	blend index 3
				UINT8	blend index 4

		// Vertex Stream 1
		FOR (num vertices) DO
			FLOAT	normal.x
			FLOAT	normal.y
			FLOAT	normal.z
			FLOAT	binormal.x?
			FLOAT	binormal.y?
			FLOAT	binormal.z?
			FLOAT	? (1.0, -1.0, ?)
			IF (flag != 1) THEN
				FLOAT	u0
				FLOAT	v0
				FLOAT	u1
				FLOAT	v1
				UINT32	? (-1)

		// Vertex Stream 2
		FOR (num vertices) DO
			FLOAT		u0
			FLOAT		v0
			FLOAT		u1
			FLOAT		v1
			UINT32		?
		FOR (num vertices) DO
			UINT32		? (1, ?)
			FLOAT		position.x
			FLOAT		position.y
			FLOAT		position.z
			FLOAT		normal.x
			FLOAT		normal.y
			FLOAT		normal.z
			FLOAT		binormal.x?
			FLOAT		binormal.y?
			FLOAT		binormal.z?
			FLOAT		? (1.0, -1.0, ?)
		FOR (num vertices) DO
			FLOAT		blend weight 1
			FLOAT		blend weight 2
			FLOAT		blend weight 3
			FLOAT		blend weight 4
		FOR (num vertices) DO
			UINT8		blend index 1
			UINT8		blend index 2
			UINT8		blend index 3
			UINT8		blend index 4

// Havok Cloth Animation
IF (flag == 2) THEN
	UINT32 		? (0)
	DATA[N]		hkx file with cloth animation
