The project's README from github.com/SatyPardus/wowdecomp. As one markdown file: README.md.
A C++ decompilation of the World of Warcraft 3.3.5a client (Wow.exe, build 12340, June 2010).
Join the discord for other clients and to show off some cool stuff you build.
Every function is reconstructed from the original binary and keeps the address it came from in an
// OFFSET: tag, so each one can be compared against the original. The source tree follows the layout
of the original client (Engine/Source/<Module>, WoW/Source/<Module>, original file names).
x64 is the main target. Win32 still builds and is used to check struct layouts against the 32-bit original.
The percentages below measure how much of the original binary has a counterpart in this source tree. They do not say how much of the game works, and the missing part is not missing gameplay: the client builds into a complete executable and the game is 100% playable. Bugs could still be hiding, though; a ported function can behave differently from the original.
Measured against the 12340 binary on 2026-10-15. A function counts as ported when its address is tagged in the source.
| Ported | Total | Share of the original | |
|---|---|---|---|
| Functions | 24,515 | 27,157 | 90.3% |
| Code bytes | 5,270,186 | 5,656,573 | 93.2% |
The total leaves out 658 functions that IDA identifies as compiler library code and 132 import thunks. Most of the untagged remainder is code the build gets elsewhere: compiler-generated code (static initializers, template instances) that our compiler emits on its own, C runtime helpers, and third-party libraries that are linked from their upstream sources instead of being decompiled (FreeType, zlib, PCRE, parts of FMOD Ex).
PATH or passed as -DNASM_EXECUTABLE=<path>, and
DivxDecoder.dll from your 3.3.5a client copied to ThirdParty/DivxDecoder/ (the build copies it next to the
executables; the x64 build uses its own decoder instead)From a Developer PowerShell or any shell with cmake on PATH:
git clone https://github.com/SatyPardus/wowdecomp.git
cd wowdecomp
# x64 (main target)
cmake -S . -B build/x64 -G "Visual Studio 17 2022" -A x64
cmake --build build/x64 --config Release --target WowClient --parallel
# Win32 (optional, needs NASM)
cmake -S . -B build/win32 -G "Visual Studio 17 2022" -A Win32
cmake --build build/win32 --config Release --target WowClient --parallel
In-source builds are refused, so keep the build directory separate (build/ above).
The client is written to bin/Win/:
| Target | x64 | Win32 |
|---|---|---|
WowClient |
WowClient64.exe |
WowClient32.exe |
Wow |
Wow64.exe |
Wow32.exe |
WowClient is the client with a crash logger: it opens a console window and writes
WowClient_crash.log when the client crashes. Wow is the same client without it. You can also turn the
logger off in WowClient with -DWOWCLIENT_CRASH_LOG=OFF.
| CMake option | Default | Effect |
|---|---|---|
WOWDECOMP_DISABLE_SIGNATURE_CHECKS |
OFF |
Skip the MPQ file and .toc.sig signature checks, so modified game data and interface files load |
WOWCLIENT_CRASH_LOG |
ON |
Build WowClient with the crash logger |
WOWCLIENT_OUTPUT_OVERRIDE |
empty | Name the WowClient executable something other than WowClient64 / WowClient32 |
Data folder of your 3.3.5a client into bin/Win/, so you have bin/Win/Data/.Data/<locale>/realmlist.wtf at the server you want to connect to.bin/Win/WowClient64.exe (or Wow64.exe).| Path | Contents |
|---|---|
Engine/Source/ |
Engine modules: Storm, Gx (Direct3D 9 / OpenGL), Model2, Frame/FrameXML UI, SoundEngine, Lua, ... |
WoW/Source/ |
Game modules: objects, world rendering, UI, networking, database, glue screens |
WoW/Common/ |
Code shared by the game modules |
ThirdParty/ |
Libraries linked from their upstream sources |
Tools/WowClient/ |
The WowClient executable target |
Tools/XvidDecoder/ |
x64 movie decoder that replaces the original 32-bit DivxDecoder.dll |