My journeys with the MDL file format have been fraught with annoyance and frustration. I understand why it was done the way it was – back then 3D was new and every path being blazed was a new one and you sometimes take a lot of wrong turns before ending up at the place you need to be but MDL, honestly, is cruel and unusual in its torments.
It took me a good long while to figure out how to read the file to begin with. There are articles on the web that detail this but suffice to say that the compression and the levels of abstraction make for one headache inducing ride. Throw frame/skin groups in on top of that and you’re down to a few shreds of sanity left. Luckily, I had the base work for this done for the original ToeTag level editor because I needed to draw the models in the level for monsters and weapons and things.
However, nothing prepared me for the horrors of writing the damned files back out again. The compression and abstraction leads to extra pain because if you read and write the same MDL file a few times, you lose precision. Suddenly the UV coordinates are beginning to slide around the model and the vertices are drifting. The drifting vertices are the worst of all because eventually MDLEd considers two verts that used to be separate from each other to now be the same – which leads to incorrect vertex counts and an inability to save a viable MDL file.
The solution, i think, is to create my own MED file format that will hold all the floating point verts and UVs within it and it will have the option to export to MDL format when you need it to. This means you’ll have highly precise source files for your models and you can write out the Quake MDL files whenever you need to see the models in the game itself. I can’t think of a better solution at the moment so this will have to do!
But in positive news, MDLEd is coming along. I’ll prove this to you with a screen shot:
And here’s a shot of the flame model loaded up. As you can see, MDLEd gracefully handles and understands frame groups. It does the same thing for skin groups:
Here you see the basic interface. On the left are lists of frames and skins for this model (in this case, the familiar soldier grunt). You can do all the stuff you’d expect to be able to do here – import/export frames, rename frames, drag/drop frames to re-order them, delete frames, etc. All of this applies to the skins list as well.
On the right side is a preview where you can actually see the currently selected frame wearing the currently selected skin. This is more obvious in something like the armor model where there are more than 1 skin. Here’s a quick video that shows me loading up the armor model and playing with the model and skin tabs:
Eventually this is going to have really nice features like being able to paint directly on the skins and to create new skins from scratch!





