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.
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.

WarCraft II stories
Posted by Ojan

After publishing my text on the 30 year anniversary of WarCraft II: Tides of Darkness and posting about it on Hacker News, I'm proud and humbled to see that it has now stayed on the front page for around 24 hours. Many people shared stories and memories in the thread:

WarCraft II Screenshot
my sister and I opened it Xmas morning, then had to wait all day agonizingly to be able to play jt because we hosted the family holiday, we were supposed to be socializing with relatives, not playing computer games upstairs.

We had to wait until after mom and dad went to sleep that night, then snuck up the hall to install it and play it as quietly as possible.

mock-possum

This was the first game I was really obsessed with. I remember having one floppy disc and I wanted to copy the game from a friend, so we split the game to ~10 parts, and for a whole weekend I was going back and forth between our houses, "downloading" those 10mb.
yoavm

I love Warcraft II. My first ever RTS, and one of the all time greats even now. The game just has soul oozing out of every pore; you can feel the excitement of the Blizzard guys for the game as you play it. The expansion was great too.
bigstrat2003

This game lead me down a path that resulted in me becoming a software engineer. Good game.
bfors

I know the game was horribly unbalanced against humans once bloodlust showed up, but I still quit after they "patched" bloodlust years later in Battle.net. Felt sacrilege, like patching the queen in chess. Yeah, the queen is imba, but that's chess. Beating an orc player as a human was a fun flex.
jquery

One thing that was delightful about this game was how the community discovered that Farms made for better walls than the actual walls, and so an enormous variety of strategies developed around this. As players developed knowledge of how units were pushed out of buildings, walling off buildings to push units past forest was another strategy that developed from this, creating the potential for sneaky tricks.
Tiktaalik

Back then we were playing WarCraft II over a LAN with... The neighbors. We managed, as teenagers, to snatch some old 10BASE2 "ethernet over coax" gear: cables, BNC connectors and terminators, and most of all ethernet adapter cards.

We weren't fully geared though, so we'd assemble the cables manually, using whatever we could find to attach the connectors.

Then we'd use a long piece of string with something attached to it that we'd throw, from the 2nd or 3rd floor of the house, to the neighbor's house. And then we'd use the string to pull up the coax cable.

And then humans and little orcs would transit through the coax cables.

Oh the memories.

TacticalCoder

You cannot imagine the lengths we had to go to play this game in our home. We were lucky enough to have two apple computers and so my brother and I would play each other using the battle net technology over appletalk. The thing was, the only appletalk cable in our house was barely long enough to make it between the two bedrooms, so when we wanted to play the cable would hang in the air stretched across the hallway where the slightest tug would rip it out of the port killing the match.

The number of times that cable got unplugged mid-game and the inter-household rancor that would ensue is the stuff of legends. I honestly remember the fits we had about whose fault it was that the cord got unplugged more than I remember any specific aspect of those Warcraft games.

It just goes to show, networking topography matters.

WCII ToD is absolutely one of the most insane games to ever be birthed unto the world. It was so brain breaking compared to everything else we were playing at the. time. Just a real quantum leap in terms of dopeness.

josh2600

I was 10 a the time and yes I’m not sure people realize how magical it felt at the time. When I got it in Christmas 96 on a 68k Mac it felt like it really opened a parallel universe compared to other games.

The graphics (looked like a high res SNES game, which at the time was quite unique on PC), the CD quality soundtrack, the booklet concept art, the unit voices and buildings sounds… as a kid discovering Fantasy it had everything.

And the attention to details, like Christmas string lights on building or a snowman when the map was in winter may seem insignificant, but as a kid it was wonderful.

Even my dad who was not into video games but had played tabletop war games in the past and got hooked and spent a few nights on it to complete a solo campaign.

This is by far the retro game I have the most nostalgia for.

tarsinge

What grunts do in their spare time, by Cyberkarkas

A special thanks also to barfoure who pointed out that "you can find the War 2 for PSX source on Archive. It has all the Windows stuff commented out. It might be possible to uncomment and compile with something like Borland C or Watcom C or whatever they used". It seems that this item on Archive is what is being referred to, but it appears to no longer be up. I would venture to guess that it can still be found on the deeper parts on the Internet, though. Edit: Here

Jorsys news