November 2025 - News archive

MPQDraft GUI progress
Posted by Ojan

Just wanted to give a little update on my progress with the MPQDraft GUI.

As I wrote in the last update, I'm working on modernizing MPQDraft. The GUI needs to be replaced, since the old one uses MFC, which made it difficult to compile on modern systems.

I have a brand new GUI written in Qt6 nearly done. I will immediately confess that AI has done most of the grunt work with creating it; it has saved me from writing 5000 lines of GUI code, which would be rather heavy to write manually. I think the AI has done a pretty good job and produced a reasonably tidy result, and GUI code by its nature isn't all too pretty anyway.

The process has definitely followed the 80/20 rule; 80% of the GUI was done in 20% of the time, and then endless time spent doing lots and lots of little tweaking.

So not only is the new GUI using the latest and greatest open source Qt framework instead of proprietary Microsoft frameworks from the 1990s, it also comes with some news:

  • It is hopefully easier to use, with texts and help buttons to help the user understand what different controls do.
  • Especially in the SEMPQ creator (where the user can create self-executing mods, so that those running the mods don't need to have MPQDraft installed themselves), it empowers users by opening up the ability to target games or applications that are not built in with MPQDraft at the moment.

I need to do some minor cleaning up of the GUI, and then a little refactoring of the MPQDraft internals. Then, hopefully, this brand new Qt6 GUI should be more or less a drop-in replacement of the old clunky MFC code. Again, my time available right now is limited, though.

MPQDraft 2025-11-18 released
Posted by Ojan

After some hacking, I am pleased to release a new version of MPQDraft! The application allows you to load mods with changes to the game files, and it supports loading plugins to tweak the game engines.

Supported games are Diablo I, Diablo I: Hellfire, Diablo II, StarCraft I + StarEdit, WarCraft II: Battle.net Edition, WarCraft III + WorldEdit and Lords of Magic SE.

MPQDraft logo

For the end user, there really isn't much news of interest, but the release is rather significant anyway. The application comes in two modes: a GUI (by Quantam, written in 2001), and a CLI (added in 2021 by milestone-dev). The application used to rely heavily on MFC, which made it difficult to compile on modern systems. The release I have just made removes MFC from the CLI, and refactors the code-base. The core parts are thus buildable without MFC support, making it significantly nicer to work with on modern systems. The GUI is still tightly coupled to MFC, though.

The proprietary MFC dependency has meant that I have been completely unable to compile the application on my machine, instead using a GitHub Actions build pipeline to build it. Setting up Visual Studio with MFC support and building could easily take more than ten minutes, and the development has thus been very slow and tedious, with each change and refactoring step having been done "in the blind", only to see the result some ten minutes later. I am hopeful that the worst of that is behind me now, though.

Anyway, find MPQDraft 2025-11-18 on GitHub!

Next, I will see if I can rewrite the GUI in Qt. It will basically mean keeping nothing of the old GUI code, so it could be a bit time-consuming.

Modernising MPQDraft
Posted by Ojan

MPQDraft is a tool for loading MPQs with mods into any game that uses them. It was developed by Quantam (Justin Olbrantz) with development starting some time in 2001, and the first public release on new year's eve of 2002. Its last update by Quantam was 2009-09-13.

In 2021, milestone-dev updated the code base and made it more compatible with Visual Studio Code 2019 and Windows 10. A CLI was also added.

I am hoping to modernise the code further. It quite heavily uses MFC, a proprietary Microsoft desktop framework initially released in 1992. The use of that framework in particular makes the code impossible to cross-compile.

My end goal would be to be able to compile Windows binaries (to be run with Wine) on my Linux machine using MinGW-w64. Quite some updates to the code base will be necessary before that is possible though. I don't have access to a Windows machine to build on, but after some fiddling around I got a build chain running on GitHub Actions which can compile the code. This is slow and cumbersome though, and my time to spend on this is a bit limited.

Even if cross-compilation with MinGW-w64 may be too much of a stretch, I do at the very least hope to replace the MFC code with a more modern GUI framework, such as Qt.

Site is now mobile friendly
Posted by Ojan

I finally got around to tweak the CSS of the website, so that it looks good on smaller screens. It now has a menu that hides in mobile view, all in CSS only, without any Javascript.

I also added a little text on the front page introducing the website and its purpose.

MPQ spec uploaded
Posted by Ojan

Over the course of around 20 years, Blizzard used MPQ archives to contain the game data. While reading MPQ archives was fairly straight forward for the community from the start, writing them took quite some time to figure out. Many people have worked on deciphering the ins and outs and oddities of the format over the years, and one of the best format descriptions were made by Quantam and BahamutZERO.

I have salvaged the MPQ format spec that they wrote from the Internet Archive. It is likely a bit dated, as the spec was written between 2006 and 2010, and the MPQ format continued to evolve afterwards. Regardless, it is a very good resource if one wishes to work with the details of the format.

The MPQ format specs are available here (complete with syntax-highlighting built into the font - not flawless, but good enough).

Custom MPQs working
Posted by Ojan

As I wrote previously, I have struggled to create and load custom MPQ archives in StarCraft I. It turns out that the tool I've been using, mpqcli, always uses ZLIB compression, wheras StarCraft I apparently expects PKWARE DCL compression (at least on the non-audio files I have been fiddling with), leading to immediate crashes when trying to use MPQs using the wrong compression.

Since the MPQ format has evolved over the years and different games have different expectations, perhaps mpqcli needs a compression parameter, even though extensive parameters are always a drag on the user experience. But StormLib, which mpqcli uses under the hood, support the following compressions, and it is probably not easy to automatically assume which one to use:

  • Huffmann compression (used on WAVE files only).
  • Deflated (ZLIB). Added in Warcraft III.
  • Imploded (PKWARE DCL compression).
  • BZIP2 compression. Added in Warcraft III or World of Warcraft: The Burning Crusade.
  • Run-length (sparse) compression. Added in Starcraft II.
  • IMA ADPCM compression (mono).
  • IMA ADPCM compression (stereo).
  • LZMA compression. Added in Starcraft II.

To make matters more complicated, algorithms used to be arbitrarily combinable. But with StarCraft II, only one or two different compression algorithms were allowed, and had to be from a list of valid combinations; specifically, most compression types (e.g. Deflate and Implode) are now mutually exclusive, and may only be combined with a small number of other algorithms (e.g. IMA ADPCM), which themselves are mutually exclusive. Furthermore, there is one exception where the value is not two algorithms combined, but a single, new algorithm (LZMA).