Table Of Contents

This article is Part 1 in a 1-Part Series.

  • Part 1 - This Article

In the first part of this series we will be looking into the data structures of MPQ archives which were originally used to deliver and update World of Warcraft.

In part 1 of this series we will focus on the format of MPQ archives and provide a solid archtectural overview with the goal of enabling us to implement both read and write support for MPQ archives.

Finding archives

While typical archives - such as TAR or ZIP - exist as standalone files, MPQ archives can actually exist as standalone archive and as embedded archive within an executable for easy delivery of updates.

Examples for these types of archives would e.g. be

  • the original installation disks: coming with the Installer Tome archives, providing the baseline for the World of Warcraft installation
  • the update archives shipped as MPQ files that can be applied using BNUpdate included in the games’ later releases.
  • the patch files shipped as executable for Windows and macOS, where an executable would have the archive contained within.

References

Throughout this post we have been relying on two primary resources as reference material for our own implementation:

  • the WoWDev wiki, which describes version 1 and 2 of the archive format
  • StormLib, which implements support for reading and writing all versions of the MPQ archive format.
  • the MPQ archives