warcraft 3 MDX 3d model description by mirex (http://mirex.mypage.sk) first there is file ident, 4 bytes long 'MDLX' after that FORM chunks follow. one chunk consists of: { 4b ident (ASCII string, for example 'GEOS') 4b data length (long) data } subchunks do not exist. if there is a chunk ident in a chunk, then usualy its only identifier and next long is not length of subchunk, but count of items in subchunk. chunks (name and length): VERS - 4 { 4 bytes (long) vertexs count ? } MODL - 174h { Name of model ASCII zeroes floats at end } TEXS - x * 268 { 4 bytes (long) - 0 if name present, else 1,2... filename[264] padded with zeroes: Textures\gutz.blg } // note that long after subchunk name is number of items, not length GEOS - ? { 4 bytes (long) - length of one part of this chunk. at the offset (this)+long may start another VRTX, (one long before it there is another long with length) or there shall be end of GEOS chunk 'VRTX', (long) no of verts; verts * 3 * 4 bytes (float) 'NRMS', (long) no of norms; norms * 3 * 4 bytes (float) 'PTYP', (long) (count * longs) 'PCNT', (long) (count * longs) (usually 1, and data is # of verts) 'PVTX', (long) (count * shorts(2bytes)) those are triples of vertex indexes = polygons 'GNDX', (long) count * char (no of material ?) 'MTGC', (long) count, count * longs ? 'MATS', (long) ? 'UVAS', (long) ? 'UVBS', (long) count * 2 * floats - texture coords } PIVT - x * 12 { x * 3 * float } EOL ----------------------------- my notes ----------------------------------- FORM chunks ? subchunks do not exist. if there is a chunk ident in a chunk, then usualy next long is not length of subchunk, but count of items in subchunk chunks can have odd length, not padded ident 4b 'MDLX' one chunk = { 4b ident (ASCII string) 4b data length data } chunks (name - length): VERS - 4 { long vertexs count ? } MODL - 174h { Name of model ASCII zeroes floats at end } SEQS - 108h { maybe 54h = 1frame Name ASCIZ zeroes 0x50: long ? long ? 16b - zeroes 28b (1Ch)- floats toto 2x } GLBS { longs } MTLS - 30h { long partial-chunk length, long ?, long ? sub LAYS - 1 { 1Ch } sub KMTA { long items; long 1, long FF FF FF FF items * ( long, float ) } 3b - 0, maybe padded long 0, 0, 0, FF FF FF FF, 0 float 1.0 } TEXS - 10Ch { k * (size 268) { long - 0 if name present, else 1,2... filename[264] padded with zeroes: Textures\gutz.blg } // note that long after subchunk name is number of items, not length GEOS - 3B4h { long - length of one part of this chunk. at the offset (this)+long may start another VRTX, (one long before it there is another long with length) or there shall be end of GEOS chunk 'VRTX', long no of verts; verts * 3 * float 'NRMS', long no of norms; norms * 3 * float 'PTYP', long 1, 4 (count * longs) 'PCNT', long 1, 48h (count * longs) (usually 1, and data is # of verts) 'PVTX', long 48h, 48 * short. (triples = polygons = vert indexes) 'GNDX', long, count * char = no of material ( 0..........LAYS .........!... ...’’’’....333? 0...........LAYS ..........!... ...’’’’......€? p...........LAYS ...\......... ...’’’’......€? KMTA......’’’’ M......ō..Hįś> X..333?›..ĆõØ> ’......x...... aitbta~1 (30h) 0...........LAYS ............ ....’’’’....¤p=? ailbta (F0h) 0...........LAYS ............ ....’’’’......€? 0...........LAYS ............ ...’’’’......€? ...........LAYS ...|......... ...’’’’......€? KMTA......’’’’ ......€?......€? !.....€?..€?..€? ¼....€?ÜcĮ?B&E? č......pĻó=#”=¾ '.............. muradin (ACh) L...........LAYS ............. ....’’’’......€? ............. ’’’’......€?0... ........LAYS... ............. ’’’’......€?0... ........LAYS... .......!...... ’’’’......€?TEXS muradrin 4D 54 4C 53 B4 02 00 00 34 01 00 00 00 00 00 00 ³ MTLS“..4...... 00 00 00 00 4C 41 59 53 02 00 00 00 8C 00 00 00 ³ ....LAYS...Œ... 01 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF ³ ...........’’’’ 00 00 00 00 00 00 80 3F 4B 4D 54 41 0C 00 00 00 ³ ......€?KMTA ... 01 00 00 00 FF FF FF FF C9 10 01 00 00 00 00 00 ³ ...’’’’É..... 4C 17 01 00 00 00 00 00 EF 20 01 00 00 00 00 00 ³ L.....ļ ..... D3 2D 01 00 00 00 00 00 70 43 01 00 00 00 00 00 ³ Ó-.....pC..... 6D 49 01 00 00 00 00 00 97 50 01 00 00 00 00 00 ³ mI.....—P..... 7F 54 01 00 00 00 00 00 40 64 01 00 00 00 00 00 ³ T.....@d..... CD 6B 01 00 00 00 00 00 8D 7E 01 00 00 00 00 00 ³ Ķk.....~..... 93 8B 01 00 00 00 00 00 94 00 00 00 01 00 00 00 ³ “‹.....”...... 00 00 00 00 01 00 00 00 FF FF FF FF 00 00 00 00 ³ .......’’’’.... 00 00 80 3F 4B 4D 54 41 0D 00 00 00 01 00 00 00 ³ ..€?KMTA...... FF FF FF FF A7 00 00 00 00 00 00 00 29 07 00 00 ³ ’’’’§.......).. 00 00 00 00 CC 10 00 00 00 00 00 00 B0 1D 00 00 ³ ....Ģ......°.. 00 00 00 00 4D 33 00 00 00 00 00 00 4B 39 00 00 ³ ....M3......K9.. 00 00 00 00 74 40 00 00 00 00 00 00 5C 44 00 00 ³ ....t@......\D.. 00 00 00 00 8B 58 00 00 00 00 00 00 81 6D 00 00 ³ ....‹X......m.. 00 00 00 00 0F 75 00 00 00 00 00 00 CF 87 00 00 ³ ....u......Ļ‡.. 00 00 00 00 B4 91 00 00 00 00 00 00 30 00 00 00 ³ ....“‘......0... 00 00 00 00 00 00 00 00 4C 41 59 53 01 00 00 00 ³ ........LAYS... 1C 00 00 00 03 00 00 00 21 00 00 00 02 00 00 00 ³ ......!...... FF FF FF FF 00 00 00 00 00 00 40 3F 50 01 00 00 ³ ’’’’......@?P.. 00 00 00 00 00 00 00 00 4C 41 59 53 03 00 00 00 ³ ........LAYS... 1C 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 ³ ............. FF FF FF FF 00 00 00 00 00 00 80 3F 8C 00 00 00 ³ ’’’’......€?Œ... 02 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF ³ ...........’’’’ 00 00 00 00 00 00 80 3F 4B 4D 54 41 0C 00 00 00 ³ ......€?KMTA ... 01 00 00 00 FF FF FF FF C9 10 01 00 00 00 00 00 ³ ...’’’’É..... 4C 17 01 00 00 00 00 00 EF 20 01 00 00 00 00 00 ³ L.....ļ ..... D3 2D 01 00 00 00 00 00 70 43 01 00 00 00 00 00 ³ Ó-.....pC..... 6D 49 01 00 00 00 00 00 97 50 01 00 00 00 00 00 ³ mI.....—P..... 7F 54 01 00 00 00 00 00 40 64 01 00 00 00 00 00 ³ T.....@d..... CD 6B 01 00 00 00 00 00 8D 7E 01 00 00 00 00 00 ³ Ķk.....~..... 93 8B 01 00 00 00 00 00 94 00 00 00 02 00 00 00 ³ “‹.....”...... 00 00 00 00 01 00 00 00 FF FF FF FF 00 00 00 00 ³ .......’’’’.... 00 00 80 3F 4B 4D 54 41 0D 00 00 00 01 00 00 00 ³ ..€?KMTA...... FF FF FF FF A7 00 00 00 00 00 00 00 29 07 00 00 ³ ’’’’§.......).. 00 00 00 00 CC 10 00 00 00 00 00 00 B0 1D 00 00 ³ ....Ģ......°.. 00 00 00 00 4D 33 00 00 00 00 00 00 4B 39 00 00 ³ ....M3......K9.. 00 00 00 00 74 40 00 00 00 00 00 00 5C 44 00 00 ³ ....t@......\D.. 00 00 00 00 8B 58 00 00 00 00 00 00 81 6D 00 00 ³ ....‹X......m.. 00 00 00 00 0F 75 00 00 00 00 00 00 CF 87 00 00 ³ ....u......Ļ‡.. 00 00 00 00 B4 91 00 00 00 00 00 00 54 45 58 53 ³ ....“‘......TEXS avatar 4D 54 4C 53 30 00 00 00 30 00 00 00 00 00 00 00 ³ MTLS0...0....... 00 00 00 00 4C 41 59 53 01 00 00 00 1C 00 00 00 ³ ....LAYS...... 03 00 00 00 01 00 00 00 00 00 00 00 FF FF FF FF ³ ..........’’’’ 00 00 00 00 A4 70 3D 3F ³ ....¤p=? aiimta 4D 54 4C 53 38 01 00 00 70 00 00 00 00 00 00 00 ³ MTLS8..p....... 01 00 00 00 4C 41 59 53 01 00 00 00 5C 00 00 00 ³ ...LAYS...\... 04 00 00 00 10 00 00 00 02 00 00 00 FF FF FF FF ³ .........’’’’ 00 00 00 00 00 00 80 3F 4B 4D 54 41 06 00 00 00 ³ ......€?KMTA... 01 00 00 00 FF FF FF FF 41 03 00 00 00 00 00 00 ³ ...’’’’A...... 63 03 00 00 B8 1E 85 3E 8F 04 00 00 0A D7 23 3F ³ c..ø…>.. ×#? 78 05 00 00 CD CC 0C 3F 1F 06 00 00 A4 70 BD 3E ³ x..ĶĢ ?..¤p½> A4 06 00 00 00 00 00 00 68 00 00 00 00 00 00 00 ³ ¤......h....... 00 00 00 00 4C 41 59 53 01 00 00 00 54 00 00 00 ³ ....LAYS...T... 03 00 00 00 01 00 00 00 03 00 00 00 FF FF FF FF ³ .........’’’’ 00 00 00 00 00 00 80 3F 4B 4D 54 41 05 00 00 00 ³ ......€?KMTA... 01 00 00 00 FF FF FF FF 41 03 00 00 00 00 00 00 ³ ...’’’’A...... 6D 04 00 00 00 00 00 3F 35 05 00 00 00 00 00 3F ³ m.....?5.....? 61 06 00 00 00 00 00 00 C5 06 00 00 00 00 00 00 ³ a......Å...... 60 00 00 00 00 00 00 00 01 00 00 00 4C 41 59 53 ³ `..........LAYS 01 00 00 00 4C 00 00 00 03 00 00 00 01 00 00 00 ³ ...L......... 04 00 00 00 FF FF FF FF 00 00 00 00 00 00 80 3F ³ ...’’’’......€? 4B 4D 54 41 04 00 00 00 01 00 00 00 FF FF FF FF ³ KMTA......’’’’ 41 03 00 00 00 00 00 00 6D 04 00 00 00 00 80 3F ³ A......m....€? 35 05 00 00 00 00 80 3F C5 06 00 00 00 00 00 00 ³ 5....€?Å...... LAYS: 02 00 00 00 8C 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 80 3F 01 00 00 00 1C 00 00 00 03 00 00 00 21 00 00 00 02 00 00 00 FF FF FF FF 00 00 00 00 00 00 40 3F 03 00 00 00 1C 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 FF FF FF FF 00 00 00 00 00 00 80 3F 8C 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 80 3F 01 00 00 00 1C 00 00 00 03 00 00 00 00 00 00 00 02 00 00 00 FF FF FF FF 00 00 00 00 00 00 80 3F 02 00 00 00 1C 00 00 00 00 00 00 00 11 00 00 00 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 80 3F 1C 00 00 00 02 00 00 00 10 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 80 3F