News

Jorsys
Jorvik Systems is a site dedicated to modding and reverse engineering WarCraft I, WarCraft II and StarCraft I. The goal is to provide tools, documentation and tutorials to facilitate understanding of what's going on under the hood in these classic games, as well as collections of mods to change them.
Chkdraft 2.06 released
Posted by Ojan

TheNitesWhoSay have released version 2.06 of Chkdraft yesterday, a map editor for StarCraft I. The tool describes itself as "A remake-in-progress of the beloved Scmdraft to fill the holes left behind".

News in version 2.06:

  • Support for DatExt mods and Cosmonarchy in particular
  • Add profiles json files and the profiles UI, including live-reloading, replacing the old settings.ini file
  • Add ability to drop-to-open multiple map files at once
  • Add ability to customize the unit and sprite trees in the profiles json
  • Add ability to treat a regular filesystem folder like a casc or mpq for data loading
  • Now relies on a stable release of nf hist
  • Clang can now be used on linux to compile map_gfx_utils and generate pictures of maps
  • Many bugfixes (including and beyond those of recent pre-releases) especially those related to profiles and sounds

The release is available here.

MPQDraft 2026-02-04 released
Posted by Ojan

I just made a small fix to MPQDraft. Before, when creating SEMPQs (self-executing MPQs), it used to force you to specify an MPQ and optionally plugins. Now, either an MPQ or plugins are required, i.e. you can now omit MPQs if you specify plugins. This functionality is used by Cosmonarchy, which utilises a hot-loader plugin that downloads the latest MPQs on the fly, allowing frequent updating without having to rely on re-distribution of SEMPQs.

Also in this release are translation of the GUI into Swedish and Korean. Both are AI-translated, with the former language quickly verified by myself while the latter is completely unverified. If you have corrections or want to contribute a new translation, then please reach out.

See the MPQDraft page here, for a download link.

mpqcli PRs
Posted by Ojan

I have on several occations mentioned mpqcli, a wonderful little command line tool to create, add, remove, list, extract, read, and verify MPQ archives using the StormLib library.

Over the course of the past few days, I have made several big and small PRs to mpqcli:

  • PR 1 - Small improvement to make it list details if properties are requested.
  • PR 2 - Big PR that adds built in support for all games using MPQs up until Diablo III.
  • PR 3 - Small improvements to the Readme file.
  • PR 4 - Fairly big PR, mainly adding support for unfamiliar locales.
  • PR 5 - Improvements to the remove, extract and read subcommands of mpqcli - they will now respect locales, not halt on errors and return error codes to the shell.
  • PR 6 - Small PR to fix memory leaks by closing the MPQ archives properly after reading.

Especially PR 2 is a big deal for those of us who want our MPQs compatible with older games. Previously, mpqcli always used Zlib compression, which meant older games could not read the files. With this PR, the user simply specifies what game they target and mpqcli will choose the appropriate compression algorithm based on the files the user wants to add. I mentioned this back in early December, and now we have what is hopefully a pretty solid implementation.

The maintainer of mpqcli, Thomas Lausenson, seems to have been fairly busy as of late, but hopefully he can give feedback on the PRs or merge them fairly quickly.

MPQDraft 2026-01-01 released
Posted by Ojan

The calendar now shows 2026. I hope your previous year was splendid and that the new one will be even better!

To kick the year off, I'm releasing MPQDraft 2026-01-01. Compared to the beta releases I have previously made, it does not contain much worth mentioning, but it is the culmination of what I have done to modernise the code base during the past two months.

Download page

Overview of the changes:

  • Completely rewritten GUI in Qt. It has a few more features than the old and is more structured.
  • More help for the user, with texts that explain what things do.
  • Ability to patch games without built-in support.
  • CLI that can do all that the GUI can (except configure plugins, which for technical reasons is not feasible from the terminal in a pretty way — if you want to configure a plugin, use the GUI once and then the plugins in the CLI should have the same settings)
  • Support for adding custom icons to SEMPQs.
  • Cross-compilation is now possible. Using MinGW-w64, one can now compile the code from a Linux machine (Mac too presumably). All MFC code has been removed. MPQDraft itself is still very much a Windows 32-bit only program though, but at least you no longer need a Windows machine to build it.

The title screen by Joel Steudler remains the same as it always has:

MPQDraft title screen, graphics by Joel Steudler

The first public release of MPQDraft by Quantam (Justin Olbrantz) was on 2002-01-01. Given the date, I figured that today, exactly 24 years later, was a good date to release this revamp. Let me know if you experience any issues.

Download page

Happy Yule holidays
Posted by Ojan

I want to wish everyone happy Yule festivities! Midwinter in the northern hemisphere has passed, the days are now slowly becoming longer.

Whether you celebrate something or not, I wish you all happy holidays and end of the year.

Midvinterblot, by Carl Larsson
mpqcli 0.9.6 released
Posted by Ojan

Just a little while ago, Thomas Laurenson released version 0.9.6 of mpqcli. The main highlight is a bugfix for MPQ signatures by him, and support for locales added by me.

MPQ archives uniquely identifies files by hashes of their file names, locale and platform (only one platform has ever been observed and the platform is thus usually ignored). With this release, mpqcli has support for listing, adding and removing files with different locales.

MPQDraft 2025-12-22 beta released, plus dedicated page
Posted by Ojan

I have just released MPQDraft 2025-12-22 beta, with a CLI interface that has feature-parity with the GUI (with the exception that plugins cannot be configured from the CLI — use the GUI once to configure any plugins, and then the plugin should have the same settings saved for later when you run it through the CLI).

I was a bit worried that the CLI would turn into an overly complex beast, but I decided to use CLI11 which made things very smooth. I am reluctant to bring in any third-party dependencies, but this one is a single C++ header to include, so I figured the trade-off was well worth it.

MPQDraft logo

In other news, I have made a dedicated MPQDraft page with a description of the program and a download link. So, find a download link to the binaries at the MPQDraft page and as always, find the source on GitHub.

MpqFileLister 1.1 released
Posted by Ojan

As I wrote the other day, I have created a little plugin for MPQDraft called MpqFileLister.

Games that use MPQ archives use a library called Storm.dll to access the files inside those archives. A peculiarity of MPQs are that they don't contain the file names of the files inside, but when Storm.dll opens files it does so using the file names. MpqFileLister allows you listen in to those calls from Storm.dll, and the plugin creates a list of all files that are being accessed.

As I wrote in the previous post about it, the plugin was not working flawlessly, and only listed a subset of game assets. I reached out to ShadowFlare about it, and after she saw my e-mail a few days later she kindly pointed me in the right direction: I had only been hooking into the SFileOpenFileEx calls of Storm.dll, but not the SFileOpenFile calls. By intercepting both calls, the asset lists are now complete (at least so it seems to me).

MpqFileLister configuration dialog

So, I just released MpqFileLister 1.1. Changes since 1.0:

  • Can now intercept calls to SFileOpenFile.

  • Support for Diablo I (untested though).

  • Support for logging timestamps, in the form of milliseconds since epoch.

  • Some UI improvements:

    • More logically grouped controls.
    • Descriptive labels.
    • Keyboard shortcuts.
MPQDraft 2025-12-15 beta released
Posted by Ojan

I today release MPQDraft 2025-12-15 beta. MPQDraft is used to load mods and plugins, with built in support for Diablo I, Diablo I: Hellfire, Diablo II, StarCraft I + StarEdit, WarCraft II: Battle.net Edition, WarCraft III + WorldEdit, WarCraft III: The Frozen Throne and Lords of Magic SE.

MPQDraft, originally released in 2002 by Quantam (Justin Olbrantz), immediately became the goto-tool for modding the Blizzard classics.

The beta release contains a completely rewritten GUI using Qt, and the code base has been refactored and modernised. Oddities have been fixed and all MFC code, which previously prevented cross-compiling has been replaced. The code can now be compiled from a Linux system with MinGW-w64 to produce a Windows executable. The GUI can be compiled natively under Linux, but not the underlying program as that code is very tied to the Windows platform (and it is 32-bit only!)

MPQDraft SEMPQ Creation screen. Graphics by Joel Steudler.

I will try to make some tests to verify that this all works before making a full release. It must be said that there has been some opportunity for bugs to creep in. For example, the original code has around 100 lines of assembly code that it injects, and my AI assistant has translated it for cross-compiling reasons. It is not at all obvious to me from reading the assembly, that it is bug-free. So far it seems to work, and if compiling on a Windows system, the original battle-proven assembly is used, though.

MPQDraft filelister plugin
Posted by Ojan

I spent some time last week writing an MPQDraft plugin, called MpqFileLister. Games that use MPQ archives use a library called Storm.dll to access the files inside those archives. A peculiarity of MPQs are that they don't contain the file names of the files inside. But when accessing them, the game will call the SFileOpenFileEx function in Storm.dll to open those files, and by hooking into that call, we can intercept the file it is attempting to open, thus construct a list of all files that are accessed.

The MpqFileLister plugin does just that; it hooks into the SFileOpenFileEx function call and constructs a list of the accessed files. While the community has long since made complete file lists of all files that are accessed from the MPQs, I still found it interesting to make. It serves as a nice example of how to make an MPQDraft plugin; it can teach us when files are accessed and from which archive; and it can serve as an example of how to access and poke around in the Storm function calls.

The main reason I wrote it was to test that my MPQDraft refactoring and modernising did not break the plugin functionality, or the ability to configure plugins. I thus needed a plugin to test with, and it just seemed easier to make one myself than scour the Internet for something.

The plugin is not working flawlessly, unfortunately. In StarCraft, I do get file lists of many game assets from it, but it does not list GRPs (graphics files) nor music files. It must mean the game loads them in some different fashion, but I'm not sure why or how. I reached out to ShadowFlare with an inquiry about it since she has written similar plugins back in the day and is very knowledgeable in the ins and outs of MPQs, but she has not replied yet. Presumably she is no longer using her hotmail account from twenty five years ago that her website lists, and I have no other means of contacting her.

The plugin is available here.

Jorsys news