Blizzard Entertainment:Storm
"Blizzard games released since 1996 to 2004 (Diablo, Diablo II, Starcraft, Warcraft II and Warcraft III) shipped with Storm.dll, a dynamic library that contained functions that were able to read data from the archives. This DLL also contained memory management functions, network support, compression functions and other. There was also a Mac version of this library, named Storm.bin. Storm.dll only contained functions for reading MPQs. The MPQ writing functions (saving games, creating maps etc.) were compiled inside the main game executable.
This reason violated one of the requirements for Blizzard archives, which was security of the data. Because of this, beginning with Diablo version 1.04, Blizzard made using Storm.dll by third party people more difficult:
- Storm.dll only export functions by ordinals. This makes their using more difficult, at least the function purpose is not obvious at the first sight.
- Storm.dll can be used only when it is linked statically, using import library. If it is loaded using LoadLibrary, the library will corrupt internal decrypt buffer and functions for file reading will not work anymore.
- Since shipping the game of World of Warcraft, Blizzard stopped using this library. The code necessary for reading MPQ archive is linked directly into the main executable.
Since Warcraft III version 1.29.2.9231, storm.dll is no longer used by any Blizzard game. The code is entirely included in the main executable (i.e. Warcraft III.exe)."
The Storm library is used extensively by World of Warcraft.
Features
- Data structures: Storm implements commonly-used data structures such as arrays, linked lists and hash tables.
- Big integers: Big integers are crucial to the SRP6 login protocol used by the Blizzard Entertainment:Grunt system.
- Threads: Facilitates the creation of threads across different platforms, mutexes and interlocked (commonly known as atomic) values.
- Asset compression/obfuscation: one of Storm's main uses was to provide utilities for the MPQ format, but by 3.3.5a this responsibility was taken over by BlizzardCore.
StormLib
Note: StormLib is a library for creating and reading from MPQ archives. It does not implement or aim to implement the whole set of features present in Storm.
StormLib was created as a free and open source implementation of the MPQ features from Storm.dll. It is very stable and has a good track record of working with a wide assortment of MPQs, both old and new.
Thunderbrew currently utilizes StormLib to support directly loading assets from MPQ, but there are plans to remove it and add MPQ features to Thunderbrew:squall.
Reimplementations
Whoa and Thunderbrew attempt to recreate Storm, as it existed in 2010, as free and open-source software under the name squall.