September 2026 - News archive

MpqDraft 2026-09-13 released
Posted by Ojan

I released a new version of MPQDraft yesterday. MPQDraft is a modding tool that allows in-memory patching of game data files, added features through plugins, and creation of self-executing mods.

This summer, jzy-chitong56 made some Chinese (Simplified) translations for the program and suggested ways in which to make the user experience nicer for those using the translations. While it took me a while to sit down and look at it, I was happy to merge the translations, and jzy-chitong56's idea of a dynamic language switcher was much nicer than the convoluted and technical way it was handled before. I thus developed a little menu button on the Main GUI to change languages. Hopefully Joel Steudler, the graphical artist who made the interface back in the day, won't be too mad at me for slightly deviating from his 2002 work :)

Apart from the new translations and the translations menu, I made it easier to build the application under Arch Linux, and there were improvements to the CI pipeline.

For those who are happy with English and don't intend to build the software yourself, this version unfortunately doesn't bring much excitement. But perhaps that is also a testament to the fact that the original author, Quantam (Justin Olbrantz), made a pretty solid piece of software back in the day.

See the MPQDraft page here, for a download link.

MpqFileLister v1.2.0 released
Posted by Ojan

In December, I wrote an MPQDraft plugin, MpqFileLister that lists all the filenames that a games accesses in its MPQ archives — or at least that was the intention. A peculiarity of MPQs are that they don't contain the file names of the content of the archives. But when accessing them, the game will call functions in Storm.dll to open those files, and by hooking into those calls, we can intercept the file it is attempting to open, thus construct a list of all files that are accessed.

I had thought that hooking into the SFileOpenFile and SFileOpenFileEx calls would be enough, but when luauser32167 pointed out on GitHub that the resulting list files were not containing all assets that the game loaded, I realized those two calls were not enough.

I have just made a new release of MpqFileLister that in addition to SFileOpenFile and SFileOpenFileEx and also hook into SVidPlayBegin, SFileLoadFile, SFileLoadFileEx, SBmpLoadImage and SBmpAllocLoadImage. I thus believe all Storm.dll functions that load files by their file names are covered.

In addition, this new release allows the user to freely specify the log format and timestamps, some odd bugs have been fixed and the code has been refactored.

You can find version 1.2.0 of MpqFileLister on GitHub.

This is still rather untested on Diablo I. I tried to test, but Diablo I is just too buggy under Wine on my machine, and I don't have access to a Windows computer. I might try to see if I can contribute to Wine and fix it eventually, but I'm not going to prioritize that for a while yet.

By the way, you might be wondering what the need then is for namebreak-cuda, which I wrote about in the previous entry. The answer is simple: not all files are accessed, but finding and naming them is still of interest.

New MPQ file name found
Posted by Ojan

For many years, Blizzard used MPQ files as their archive files for many of their games. MPQ files are basically like ZIP files; they store many other files in a compressed format. One quirk of MPQ files is that they don't contain the filenames of their own content. Some MPQ files contain a listfile consisting of the filenames of their content, but other MPQ files do not. For these, an external listfile is needed.

The War2Dat.mpq archive of WarCraft II: Battle.net Edition has had a 99% complete listfile for years, but there has been one single file that the community has not known the name of.

Around a year ago, I made a tool, namebreak-cuda, which bruteforces filenames on Nvidia GPUs. While I put the heavy lifting in place, I never quite finished it then. So now, after tweaking it for a bit, I ran it for less than two hours, and it returned the missing filename:

ART\CHAT_BNE_PLAIN.PCX

The War2Dat.mpq now has complete listfiles after all these years. I was happily surprised that the search was so quick.

There are other archives that also don't have complete listfiles, to which I turn my attention next. I plan to make the tool more polished, create a server which can coordinate the efforts of finding more file names, and publish the code on GitHub.