c46adebdb9
This also seems to fix the problem where clangd failed to index most header files, which was due to the typo in JGeometry.h. |
||
---|---|---|
.github/workflows | ||
.vscode | ||
assets | ||
config | ||
include | ||
orig | ||
src | ||
tools | ||
.clangd | ||
.gitattributes | ||
.gitignore | ||
configure.py | ||
LICENSE | ||
README.md |
The Legend of Zelda: The Wind Waker
A work-in-progress decompilation of The Legend of Zelda: The Wind Waker for GameCube.
This repository does not contain any game assets or assembly whatsoever. An existing copy of the game is required.
All GameCube versions are supported:
GZLE01
: Rev 0 (USA), Rev 48 (KOR)GZLP01
: Rev 0 (PAL)GZLJ01
: Rev 0 (JPN)
Dependencies
Windows:
On Windows, it's highly recommended to use native tooling. WSL or msys2 are not required.
When running under WSL, objdiff is unable to get filesystem notifications for automatic rebuilds.
- Install Python and add it to
%PATH%
.- Also available from the Windows Store.
- Download ninja and add it to
%PATH%
.- Quick install via pip:
pip install ninja
- Quick install via pip:
macOS:
- Install ninja:
brew install ninja
- Install wine-crossover:
brew install --cask --no-quarantine gcenx/wine/wine-crossover
After OS upgrades, if macOS complains about Wine Crossover.app
being unverified, you can unquarantine it using:
sudo xattr -rd com.apple.quarantine '/Applications/Wine Crossover.app'
Linux:
- Install ninja.
- For non-x86(_64) platforms: Install wine from your package manager.
- For x86(_64), WiBo, a minimal 32-bit Windows binary wrapper, will be automatically downloaded and used.
Building
-
Clone the repository:
git clone https://github.com/zeldaret/tww.git
-
Copy your game's disc image to
orig/GZLE01
.- Supported formats: ISO (GCM), RVZ, WIA, WBFS, CISO, NFS, GCZ, TGC
- After the initial build, the disc image can be deleted to save space.
-
Configure:
python configure.py
To use a version other than
GZLE01
(USA), specify--version GZLJ01
(JPN) or--version GZLP01
(PAL). -
Build:
ninja
Diffing
Once the initial build succeeds, an objdiff.json
should exist in the project root.
Download the latest release from encounter/objdiff. Under project settings, set Project directory
. The configuration should be loaded automatically.
Select an object from the left sidebar to begin diffing. Changes to the project will rebuild automatically: changes to source files, headers, configure.py
, splits.txt
or symbols.txt
.
Setting up Ghidra
Ghidra is a tool that automatically decompiles code. Although Ghidra's output is not accurate enough to be directly copy-pasted into this decompilation project, it can still be helpful for understanding functions and decompiling them faster.
We have a shared Ghidra project for TWW already set up. To get access to this server:
- Go to https://ghidra.decomp.dev and link your Discord account.
- Request "Read" access to the WindWaker server.
Then wait for an admin to approve your request. Once you have access, you can set up the Ghidra project like so:
- To use Ghidra, you first need to install JDK. You can download OpenJDK 17 from here.
- Download the RootCubed Ghidra build ghidra_11.1_DEV_20240115 from here.
- Launch Ghidra with
ghidraRun
. - In Ghidra, go to
File -> New Project...
. SelectShared Project
and input the following information:- Server Name: ghidra.decomp.dev
- Port Number: 13100
- User ID:
put your own username here
- Password: changeme
- After logging in, change your password as prompted so that it's not "changeme".
- You should now be able to view the files in the Ghidra project. You should checkout the
main
file.
Now you have Ghidra set up and ready to use.
For an introduction on how to use Ghidra, you can read this section of the Twilight Princess decompilation's guide.
Optionally, you may also want to also request "Read" access to the TwilightPrincess server on https://ghidra.decomp.dev and set that Ghidra project up too, even if you are not interested in working on that game. The reason for this is that a significant amount of engine code is shared between The Wind Waker and Twilight Princess, and the debug version of Twilight Princess (called shield_chn_debug
in the Ghidra project) is easier to work with because inline functions are not inlined in that version. It can be worth checking if the function you're working on is present in that game as well.