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, tutorials and mods to facilitate modding these classic games.
30 year anniversary of WarCraft II: Tides of Darkness
Posted by Ojan

It has now been 30 years since WarCraft II: Tides of Darkness was released. After the great response to Warcraft: Orcs and Humans, released in November 1994, Blizzard began working on Warcraft II: Tides of Darkness. Development stared in the first months of 1995, and the game was released in North America and Australia on December 9, 1995.

While WarCraft: Orcs and Humans had laid the foundations of the series — arguably even for the RTS genre at a whole — it was really WarCraft II that took things to new heights. More units could be selected at once, the player could right-click to issue commands, naval and aerial combat was introduced, and buildings and units could be upgraded. The graphics were more vivid and visually appealing, and features like the Fog of War was introduced, where you could only see in the vicinity of your own units — unlike in the first game, where you could indefinitely see any area you had previously visited, you now had to continuously scout the map.

WarCraft II: Tides of Darkness

Many things still resembled the first game. The two factions — the Humans and the Orcs — were balanced through their similarites. For every unit and building of one faction, the other had one that was functionally equivalent, and so the sides largely mirrored each other. The only real differences lay in the spells available to their higher-level units. In that regard, the clear winners were the Orcs, who had a tremendous advantage thanks to the incredibly powerful and unbalanced Bloodlust spell of the Ogre-Magi.

It is quite impressive that Blizzard managed to release a title of such quality in such a short span of time, especially considering that the overall design and gameplay evolved during development. Originally, Blizzard’s concept blended modern and fantasy elements, such as fighter pilots being ambushed by a fire-breathing dragon. In the Alpha version (it is still probably floating around somewhere on the Internet) which was given to magazines for review shortly before the game's release, players could, for example, mine rocks which acted as an additional required resource.

Several versions and bundles of WarCraft II were released over the years:

  • WarCraft II: Tides of Darkness, originally written for DOS, though it had a Windows launch screen and ran well under Windows 95. A Macintosh version was also released. The DOS version supported multiplayer games via null modem cable, modem, or IPX, while Mac players could also play via TCP/IP or AppleTalk.
  • WarCraft II: Beyond the Dark Portal, the expansion, released in April 1996.
  • WarCraft: Battle Chest, released in 1996, was a bundle which included WarCraft: Orcs and Humans, WarCraft II: Tides of Darkness, and WarCraft II: Beyond the Dark Portal.
  • WarCraft II: The Dark Saga, released in 1997, was a port for the Sega Saturn and PlayStation consoles by Electronic Arts, including the campaigns from both Tides of Darkness and Beyond the Dark Portal.
  • WarCraft II: Battle.net Edition, released in 1999, ported the game's code to Microsoft Windows, fixed some minor bugs, and enabled multiplayer support via Blizzard's online service, Battle.net.
  • WarCraft II Battle Chest, released in 1999, included the Battle.net Edition and its official strategy guide.
  • WarCraft II: Remastered, released in November 2024, is modern remaster of Tides of Darkness and Beyond the Dark Portal, with improved graphics and updated controls.

WarCraft II: Tides of Darkness received enthusiastic reviews, elevating Blizzard to the top ranks alongside Westwood Studios, id Software, and LucasArts. The rivalry between Blizzard's series and Westwood Studios' Command and Conquer series helped fuel the RTS boom of the late 1990s. PC Gamer US named WarCraft II the best game of 1995, calling it an "easy" choice and writing that "Warcraft II stand[s] out — way out — as the most impressive, most entertaining, game of 1995". The editors also awarded it Best Multi-Player Game of 1995.

WarCraft II was notable for the large number of third-party utilities created for it. Quickly, Daniel Lemberg reverse-engineered and published the map file (*.pud) format and wrote the first third-party map editor, War2xEd, which could do multiple things that the bundled map editor could not, such as editing unit attributes. Blizzard apparently began using War2xEd internally, and it influenced their decision to later ship a feature-rich map editor with StarCraft.

Next, Alexander Cech and Daniel Lemberg reverse-engineered the game data format, the WAR archives. Alexander Cech went on to make a hugely important tool called Wardraft, which allowed users to browse and modify the contents of the WAR archives. This enabled extensive game modifications, known as "Total Conversions". Many such projects gained popularity and remained in development for a long time, notable examples being DeathCraft: Twilight of Demons, War of the Ring, Editor's Total Conversion, Funcraft and Rituals of Rebirth.

Most of these utilities and conversions have long since faded into obscurity, but their legacy lives on. They impacted Blizzard's decision to bundle ever more powerful editors and trigger systems into StarCraft and later WarCraft III, which in turn later spawned entire games such as Dota (which began as a WarCraft III map). Hopefully, someday (soon?) we can host some of the Total Conversions here at Jorvik Systems.


As a personal anecdote, I vividly remember two defining moments related to the game. I was young when it came out, and my dad's friend had pirated it; somehow the game ended up on our computer. I was too young to speak English at the time, and the interface was confusing to me, so a relative helped me understand the basics — how to make peons construct buildings, how to control units, and how to navigate around the map. I hadn't played computer games much before then, but from that moment on, I was arguably obsessed.

A second strong memory came a few months later, at my friend Erik's house, on his Intel 486 PC. He was experimenting with the WarCraft II map editor, which I hadn't known existed, and I was blown away. I simply could not believe that Blizzard would ship such a tool with the game; to me, it meant that people could essentially create their own games by designing entirely new scenarios. It is quite possible that my fascination with modding was born in that very moment. We probably went outside to play shortly afterward, which I found incredibly lame — we had at our disposal the most powerful tool I could imagine, so why were we not inside using it?


Edit 2025-12-10 00:10:30 UTC: Hacker News discussion about this news post

MPQ compatibility matrix shared
Posted by Ojan

In early November, I wrote about how different games use different compression algorithms in the MPQ files. So to make your own MPQ files with mods, you need your files to be compressed with the right compression method for the right game.

Ladislav Zezula, the author of StormLib has kindly shared a compatibility matrix of what different games expect by default.

When I find the time, I will use this data to update the MPQ format specs and make a PR for mpqcli. I'm envisioning that you should be able to pass in a parameter with which game to target the MPQ for, and mpqcli will handle the rest.

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

Attempting to get MPQs to work
Posted by Ojan

Many Blizzard games used MPQ archives to store their game data, StarCraft I and WarCraft II: Battle.net Edition included. The MPQ files can be compared to ZIP files; they contain many other files and compress them. The MPQ format has evolved over the years, with libraries and tools such as StormLib keeping up to the changes.

I've spent some time trying to make custom MPQs that run with StarCraft I on Linux using Wine. I am able to load up 20 year old MPQ files that I have laying around. However, when I attempt to create new MPQs and load them, the game crashes. I am unsure what the cause is. I have used tools both new and old without success. The investigation continues...

Release of mpqcli 0.9.3
Posted by Ojan

mpqcli, a command line tool to create, add, remove, list, extract, read, and verify MPQ archives has just released version 0.9.3. The tool makes it easy to work with MPQs from the command line, while powered by the well-maintained StormLib library under the hood.

Version 0.9.3 comes with two changes:

  • Added support for add subcommand to have path inside MPQ archive.
  • Fixed bug in add subcommand when exceeding max file count.

Thomas Laurenson, the author of the tool, is hard at work pushing the tool to version 1.0. To follow the progress, see the issues page on GitHub.

Jorsys news