wowdecomp
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.
Progress
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).
Requirements
- Windows 10 or 11
- Visual Studio 2022 with the Desktop development with C++ workload (MSVC v143 and a Windows SDK)
- CMake 3.10 or newer (the one that ships with Visual Studio works)
- For Win32 builds only: NASM, on
PATHor passed as-DNASM_EXECUTABLE=<path>, andDivxDecoder.dllfrom your 3.3.5a client copied toThirdParty/DivxDecoder/(the build copies it next to the executables; the x64 build uses its own decoder instead) - A World of Warcraft 3.3.5a (12340) client. No game data is included in this repository.
Building
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.
Options
| 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 |
Running
- Copy the
Datafolder of your 3.3.5a client intobin/Win/, so you havebin/Win/Data/. - Point
Data/<locale>/realmlist.wtfat the server you want to connect to. - Start
bin/Win/WowClient64.exe(orWow64.exe).
Layout
| 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 |
Special thanks
- binana
- thunderbrew
- whoa
- TOMRUS, for the initial IDB
- Everyone who has reported bugs so far
- The WoW modding community