This project has 3 goals: to understand and document, recompile, and preserve an alpha version of World of Warcraft - version 0.5.3 (build 3368) released on 2003年12月11日.
The significance of this build is because it includes pdb/map files for its Windows executables and it's the earliest patch we have currently.
Cross-platform support is a secondary goal after producing a functional Windows client. We can source functions from 0.5.5 (build 3494) (OS X) and 0.7.0 (build 3694) (Linux). The result would be an approximation of a cross-platform 0.5.3 client however we can't confirm what's authentic for the time.
When this project is complete we should have ~400k lines of code and 22k+ functions in this repo. These figures are based on information from the original client.
Important
I won't provide a link to the original install disc - try checking Google/archive.org for "World of Warcraft Alpha 0.5.3 3368"
This isn't a reimplementation project taking advantage of modern standards. We're supporting the original toolchain and following every bit of original information we can use.
- C/C++ standards must be restricted to the features available in Visual C++ 6.0 (1998)
- Use Windows datatypes. All platforms used the same datatypes at the time.
All of the original source file paths have been created as empty files ahead of time, and registered in CMake. Use them as you write functions. You should not need to add any new .cpp files, but feel free to create headers.
Firstly, you'll need to install CMake no matter what OS you're on: cmake.org
Tip
This has been tested with Visual Studio 2022.
Older Visual Studio versions are untested and depending how far back you go, may have incompatibilities with newer CMake. The codebase should work anyways. Good luck if you go that route!
Inside the Build folder there are a couple scripts:
vs2022-setup.bat: Have CMake produce a Visual Studio 2022 solution.vc6-setup.bat: Have CMake produce NMake makefiles for Visual C++ 6.0. Visual C++ 6.0 must be installed toC:\Program Files (x86)\Microsoft Visual Studio 6.0\
Tip
This has been tested with Xcode and Visual Studio Code.
Inside the Build folder there are several scripts:
xcode-setup.sh: Have CMake produce an Xcode project targeting native macOS.native-setup.sh: Have CMake produce Makefiles targeting your default toolchain.mingw-setup.sh: Have CMake produce Makefiles targeting MinGW.wine.sh: Install, setup cmake, build, and run Visual C++ 6.0 makefiles via Wine. This can take several minutes the first time.
Tip
This has been tested with Visual Studio Code.
Inside the Build folder there are a few scripts:
native-setup.sh: Have CMake produce Makefiles targeting your default toolchain.mingw-setup.sh: Have CMake produce Makefiles targeting MinGW.wine.sh: Install, setup cmake, build, and run Visual C++ 6.0 makefiles via Wine. This can take several minutes the first time.
You can copy everything in your game client folder to WoW/Client/ to keep track of things easily. The instructions here are written with this as an example path.
The original game client was meant to use a launcher so you have to pass -uptodate if you launch it directly, and be sure to create a file in the same folder called wow.ses containing your username/password on separate lines.
To accomplish these goals we're rewriting every function in the original WoWClient.exe, and loading these replacements at runtime using Detours. With this approach the game client will stay playable while we work towards complete coverage.
The hook can run in two ways, either by proxying fmod.dll calls so it gets loaded on startup or through injection (use whatever injector you want). The first method is more reliable and recommended.
To set up the dll proxy
- Rename the original
WoW/Client/fmod.dlltoWoW/Client/fmod2.dll - Copy
WoW/WowHook.dlltoWoW/Client/fmod.dll - Start
WoW/Client/WoWClient.exe -uptodate
This will be in an incomplete state until the project covers a majority of critical functions.
- Set your working directory to the
WoW/Client/folder. - Run the
Wowproject.
Original executables:
WoW.exe: This was produced from UpdateClient.cpp, it was called WoW due to the update process during the alpha/early beta. The map file is UpdateClient.mapWoWClient.exe: This was produced from Client.cpp, it was called WoWClient due to the update process during the alpha/early beta. The pdb file is Wowae.pdb (Wow + Assertions Enabled build)WowError.exe: todo explanationWowUpdateHelper.exe: todo explanation
Libraries:
Expat1.95.5FreeType2.0Lua5.0Zlib1.1.4