From 1fe0f8eae7e90961eb5c24209346d268f56e733c Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Fri, 19 Jun 2026 13:19:08 +0200 Subject: [PATCH 01/13] fix: Cleanup structure in INSTALL.md --- INSTALL.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 84af70851..40eb8f217 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -5,7 +5,7 @@ Contents: - [Prerequisites](#prerequisites) - [Build the ROM](#build-the-rom) - [Matching the base ROM](#matching-the-base-rom) - - [Building with non-matching code](#building-with-non-matching-code) + - [[Optional] LSP setup](#lsp-setup) ## Prerequisites @@ -40,6 +40,8 @@ Now you can run `ninja` to build a ROM for the chosen version. > [!NOTE] > For Linux users: Wibo is used by default. If you want to use Wine instead, run `configure.py` with `-w `. +## Build the ROM + ### Matching the base ROM **This is optional!** You only need to follow these steps if you want a matching ROM. From 1890bffd2697218743de0914ef8b111dad543bff Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Fri, 19 Jun 2026 14:56:44 +0200 Subject: [PATCH 02/13] fix: Clean undefined link --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b30c4da3e..c9f4aa8a6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ - [Project structure](#project-structure) - [Decompiling](#decompiling) - [Code style](#code-style) -- [Creating new `.c`/`.cpp` files](#creating-new-ccpp-files) + ## Project structure - `build/`: Build output From 1682e6893f3e578feb18a1524545cd88b1a23e10 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Fri, 19 Jun 2026 14:58:19 +0200 Subject: [PATCH 03/13] feat: Copypaste decompiling.md and start porting over --- README.md | 3 +- docs/decompiling.md | 104 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 docs/decompiling.md diff --git a/README.md b/README.md index c1b9e410b..465f85490 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,7 @@ The Legend of Zelda: Spirit Tracks [Discord Badge]: https://img.shields.io/discord/688807550715560050?color=%237289DA&logo=discord&logoColor=%23FFFFFF [discord]: https://discord.com/invite/DqwyCBYKqf/ -**Work in progress!** This project aims to recreate source code for ***The Legend of Zelda: Spirit Tracks*** by decompiling its code by hand. **The repository does not contain assets or assembly code.** To build the ROM, you must own an existing -copy of the game to extract assets from. +**Work in progress!** This project aims to recreate source code for ***The Legend of Zelda: Spirit Tracks*** by decompiling its code by hand. **The repository does not contain assets or assembly code.** To build the ROM, you must own an existing copy of the game to extract assets from. > [!NOTE] > The project targets the European and Japanese versions, and other versions might be supported later. diff --git a/docs/decompiling.md b/docs/decompiling.md new file mode 100644 index 000000000..80c287aec --- /dev/null +++ b/docs/decompiling.md @@ -0,0 +1,104 @@ +# Decompiling +This document describes how you can start decompiling code and contribute to the project. Feel free to ask for help if you get +stuck or need assistance. +- [Pick a source file](#pick-a-source-file) +- [Decompiling a source file](#decompiling-a-source-file) +- [Decompiling a function](#decompiling-a-function) +- [Decompiling `.init` functions](#decompiling-init-functions) +- [The Ghidra project](#the-ghidra-project) + +## Pick a source file +A reservation sheet exists for a list of delinked source files that are ready to be decompiled. This list grows as more source files are delinked from the rest of the base ROM. You can request access to the sheet in the ZeldaRet discord [channels for ST](https://discord.com/channels/688807550715560050/1453177153502969977) (you can join the server with [this invite link](https://discord.gg/6tjntnU8hC)). + +You can claim a source file (called an "actor") by filling in the "Reserved by" column. Once you started decompilation, create a PR on the ST repository for the actor you're decompiling. The decomp-dev bot will follow your PR and give information about the decompilation progress of your code. + + +If you want to unclaim the file, +Remember to make a pull request of any progress you made on the source file, whether it is just header files or partially decompiled code. + +## Decompiling a source file +We use the object diffing tool [`objdiff`](https://github.com/encounter/objdiff) to track differences between our decompiled C++ code and the base ROM's code. +1. [Download the latest release.](https://github.com/encounter/objdiff/releases/latest) +1. Run `configure.py ` and `ninja` to generate `objdiff.json` in the repository root (don't forget to follow the instructions in [INSTALL.md](../INSTALL.md) first). +1. In `objdiff`, set the project directory to the repository root (it should load `objdiff.json` itself). + 1. [WSL only] If you're using WSL (which is possible), navigate to the project directory with window's directory picker tool and select +1. Select your source file in the left sidebar: +![List of objects in objdiff](https://github.com/zeldaret/ph/blob/main/docs/images/objdiff_objects.png) +1. See the list of functions and data to decompile: +![List of symbols in objdiff](images/objdiff_symbols.png) + +> [!NOTE] +> If a source file is missing in `objdiff`, or `objdiff` fails to build a file, first rerun `ninja` to update `objdiff.json`. +> If the problem persists, feel free to ask for help. + +## Decompiling a function +Once you've opened a source file in `objdiff`, you can choose to decompile the functions in any order. We recommend starting +with a small function if you're unfamiliar with decompilation. Here's an example: + +![Function in objdiff](images/objdiff_function.png) + +As a starting point, we look at the decompiler output in Ghidra. You can request access to our shared Ghidra project [in this section](#the-ghidra-project). + +![Decompiler in Ghidra](images/ghidra_decomp.png) + +Looking at this output, we might try writing something like this: +```cpp +ARM bool Actor::Drop(Vec3p *vel) { + if (mGrabbed) { + mVel = *vel; + mGrabbed = false; + return true; + } + return false; +} +``` + +Now we can go back to `objdiff` and look at the result: + +![Matching function in objdiff](images/objdiff_match.png) + +Success! Note that this was a simple example and that you'll sometimes get stuck on a function. In that case, try the +following: +- Decompile a different function and come back later. +- Export to [decomp.me](https://decomp.me/): + 1. Press the `decomp.me` button in `objdiff`. + 1. Once you're sent to `decomp.me`, go to "Options" and change the preset to "Phantom Hourglass". + 1. Paste your code into the "Source code" tab. + 1. Share the link with us! + +## Decompiling `.init` functions +> [!NOTE] +> This section will be updated as we learn more about global objects. Feel free to contribute or provide us with more +> information! + +Functions in the `.init` section are static initializers. Their purpose is to call C++ constructors on global objects, and to +register destructors so the global objects can be destroyed when their overlay unloads. + +Static initializers are generated implicitly and do not require us to write any code ourselves. So, to generate one, you must +define a global variable by using a constructor. + +If the static initializer calls `__register_global_object`, that means the global object has a destructor. This means you'll +have to declare a destructor if it doesn't exist already. + +Another consequence of having a destructor is that a `DestructorChain` object will be added to the `.bss` section. This struct +is 12 (`0xc`) bytes long and is also implicit, so we don't need to define it ourselves. + +> [!IMPORTANT] +> An important thing to keep in mind is that a static initializer can construct multiple global objects. + +## Decompiling data +> [!NOTE] +> Under construction! It's not fully clear how data is decompiled, as the compiler is strict on how it orders global variables. +> Feel free to contribute to this section or provide us with more information! + +Other than `.text` and `.init` which contain code, there are the following sections for data: +- `.rodata`: Global or static constants +- `.data`: Global or static variables +- `.bss`/`.sbss`: Global or static uninitialized variables + +You can see examples of these data sections in the [compilation section in `build_system.md`](/docs/build_system.md#compiling-code). + +## The Ghidra project +We use a shared Ghidra project to analyze the game and decompile functions. To gain access to the project, install +[Ghidra version 11.2.1](https://github.com/NationalSecurityAgency/ghidra/releases/tag/Ghidra_11.2.1_build) and request access +from @aetias on Discord. \ No newline at end of file From f0ed89f9cca3a3c5bad605c577f211e8fc2dfff7 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Mon, 22 Jun 2026 13:24:37 +0200 Subject: [PATCH 04/13] feat: Keep porting decompiling.md and adding some details --- docs/decompiling.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/decompiling.md b/docs/decompiling.md index 80c287aec..1844e984b 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -10,23 +10,24 @@ stuck or need assistance. ## Pick a source file A reservation sheet exists for a list of delinked source files that are ready to be decompiled. This list grows as more source files are delinked from the rest of the base ROM. You can request access to the sheet in the ZeldaRet discord [channels for ST](https://discord.com/channels/688807550715560050/1453177153502969977) (you can join the server with [this invite link](https://discord.gg/6tjntnU8hC)). -You can claim a source file (called an "actor") by filling in the "Reserved by" column. Once you started decompilation, create a PR on the ST repository for the actor you're decompiling. The decomp-dev bot will follow your PR and give information about the decompilation progress of your code. +You can claim a source file (called an "actor") by changing its state to "reserved" in the "Reserved by" column. Once you started decompilation, create a PR on the ST repository for the actor you're decompiling. The decomp-dev bot will follow your PR and give information about the decompilation progress of your code. - -If you want to unclaim the file, +If you want to unclaim the file, leave a comment your the PR and mark the actor as "available" on the reservation sheet so we can be certain that the source file is available to be claimed again. Remember to make a pull request of any progress you made on the source file, whether it is just header files or partially decompiled code. ## Decompiling a source file We use the object diffing tool [`objdiff`](https://github.com/encounter/objdiff) to track differences between our decompiled C++ code and the base ROM's code. 1. [Download the latest release.](https://github.com/encounter/objdiff/releases/latest) -1. Run `configure.py ` and `ninja` to generate `objdiff.json` in the repository root (don't forget to follow the instructions in [INSTALL.md](../INSTALL.md) first). +1. Run `configure.py [--version|-v ]` and `ninja` to generate `objdiff.json` in the repository root (don't forget to follow the instructions in [INSTALL.md](../INSTALL.md) first). Note: if `--version` isn't passed the project will be configured to use all supported versions (meaning all versions will be showed on objdiff. 1. In `objdiff`, set the project directory to the repository root (it should load `objdiff.json` itself). - 1. [WSL only] If you're using WSL (which is possible), navigate to the project directory with window's directory picker tool and select + - [WSL only] If you're using WSL (which is possible to do, although a few things may not work), navigate to the project directory with window's directory picker tool and select it. Do not set the path manually unless you know what you're doing, `objdiff` may use different path format over time. 1. Select your source file in the left sidebar: ![List of objects in objdiff](https://github.com/zeldaret/ph/blob/main/docs/images/objdiff_objects.png) 1. See the list of functions and data to decompile: ![List of symbols in objdiff](images/objdiff_symbols.png) +The following sections explain how to decompile the different parts you see in `objdiff`. + > [!NOTE] > If a source file is missing in `objdiff`, or `objdiff` fails to build a file, first rerun `ninja` to update `objdiff.json`. > If the problem persists, feel free to ask for help. @@ -43,7 +44,7 @@ As a starting point, we look at the decompiler output in Ghidra. You can request Looking at this output, we might try writing something like this: ```cpp -ARM bool Actor::Drop(Vec3p *vel) { +bool Actor::Drop(Vec3p *vel) { if (mGrabbed) { mVel = *vel; mGrabbed = false; @@ -63,8 +64,8 @@ following: - Export to [decomp.me](https://decomp.me/): 1. Press the `decomp.me` button in `objdiff`. 1. Once you're sent to `decomp.me`, go to "Options" and change the preset to "Phantom Hourglass". - 1. Paste your code into the "Source code" tab. - 1. Share the link with us! + 1. Paste your code into the "Source code" tab. Only the function you're currently decompiling should be necessary. + 1. Share the link with us! (Reminder [link to the ZeldaRET discord server](https://discord.gg/6tjntnU8hC).) ## Decompiling `.init` functions > [!NOTE] @@ -94,7 +95,7 @@ is 12 (`0xc`) bytes long and is also implicit, so we don't need to define it our Other than `.text` and `.init` which contain code, there are the following sections for data: - `.rodata`: Global or static constants - `.data`: Global or static variables -- `.bss`/`.sbss`: Global or static uninitialized variables +- `.bss`: Global or static uninitialized variables You can see examples of these data sections in the [compilation section in `build_system.md`](/docs/build_system.md#compiling-code). From 99efe7657317b6eb3f53a27a9f251ae675f2a3f3 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Mon, 22 Jun 2026 13:26:55 +0200 Subject: [PATCH 05/13] feat: Add images and fix links --- docs/decompiling.md | 2 +- docs/images/ghidra_decomp.png | Bin 0 -> 16599 bytes docs/images/objdiff_function.png | Bin 0 -> 41016 bytes docs/images/objdiff_match.png | Bin 0 -> 53584 bytes docs/images/objdiff_objects.png | Bin 0 -> 11676 bytes docs/images/objdiff_symbols.png | Bin 0 -> 18567 bytes 6 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/images/ghidra_decomp.png create mode 100644 docs/images/objdiff_function.png create mode 100644 docs/images/objdiff_match.png create mode 100644 docs/images/objdiff_objects.png create mode 100644 docs/images/objdiff_symbols.png diff --git a/docs/decompiling.md b/docs/decompiling.md index 1844e984b..39e06642a 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -22,7 +22,7 @@ We use the object diffing tool [`objdiff`](https://github.com/encounter/objdiff) 1. In `objdiff`, set the project directory to the repository root (it should load `objdiff.json` itself). - [WSL only] If you're using WSL (which is possible to do, although a few things may not work), navigate to the project directory with window's directory picker tool and select it. Do not set the path manually unless you know what you're doing, `objdiff` may use different path format over time. 1. Select your source file in the left sidebar: -![List of objects in objdiff](https://github.com/zeldaret/ph/blob/main/docs/images/objdiff_objects.png) +![List of objects in objdiff](images/objdiff_objects.png) 1. See the list of functions and data to decompile: ![List of symbols in objdiff](images/objdiff_symbols.png) diff --git a/docs/images/ghidra_decomp.png b/docs/images/ghidra_decomp.png new file mode 100644 index 0000000000000000000000000000000000000000..07e54d73419f2088502864fed1f51d365b94012e GIT binary patch literal 16599 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� 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 literal 0 HcmV?d00001 diff --git a/docs/images/objdiff_match.png b/docs/images/objdiff_match.png new file mode 100644 index 0000000000000000000000000000000000000000..06dec2ff41e98e37a659c3c0e0f199d0982c0ae2 GIT binary patch literal 53584 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 literal 0 HcmV?d00001 diff --git a/docs/images/objdiff_symbols.png b/docs/images/objdiff_symbols.png new file mode 100644 index 0000000000000000000000000000000000000000..d1af868b56758de12d66e40e132e1da0eea8476b GIT binary patch literal 18567 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 Date: Mon, 22 Jun 2026 11:28:45 +0000 Subject: [PATCH 06/13] Apply suggestions from code review Co-authored-by: Yanis <35189056+Yanis002@users.noreply.github.com> --- docs/decompiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/decompiling.md b/docs/decompiling.md index 39e06642a..1a3085729 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -8,7 +8,7 @@ stuck or need assistance. - [The Ghidra project](#the-ghidra-project) ## Pick a source file -A reservation sheet exists for a list of delinked source files that are ready to be decompiled. This list grows as more source files are delinked from the rest of the base ROM. You can request access to the sheet in the ZeldaRet discord [channels for ST](https://discord.com/channels/688807550715560050/1453177153502969977) (you can join the server with [this invite link](https://discord.gg/6tjntnU8hC)). +For actors and map objects, a reservation sheet exists for a list of delinked source files that are ready to be decompiled. This list grows as more source files are delinked from the rest of the base ROM. You can request access to the sheet in the ZeldaRET discord [channels for ST](https://discord.com/channels/688807550715560050/1453177153502969977) (you can join the server with [this invite link](https://discord.gg/6tjntnU8hC)). You can claim a source file (called an "actor") by changing its state to "reserved" in the "Reserved by" column. Once you started decompilation, create a PR on the ST repository for the actor you're decompiling. The decomp-dev bot will follow your PR and give information about the decompilation progress of your code. From 1b26e1aef9d56169688a3d29c5e7b54db19f6e09 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Mon, 22 Jun 2026 13:33:43 +0200 Subject: [PATCH 07/13] Apply suggestions from code review Co-authored-by: Yanis <35189056+Yanis002@users.noreply.github.com> Done manually because I screwed-up on github --- docs/decompiling.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/decompiling.md b/docs/decompiling.md index 1a3085729..fa493926a 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -67,10 +67,12 @@ following: 1. Paste your code into the "Source code" tab. Only the function you're currently decompiling should be necessary. 1. Share the link with us! (Reminder [link to the ZeldaRET discord server](https://discord.gg/6tjntnU8hC).) +> [!Note] +> If the function is using THUMB mode you can use `THUMB_BEGIN` and `THUMB_END` before and after the function to create a THUMB region, anything outside of the region will use ARM. + ## Decompiling `.init` functions > [!NOTE] -> This section will be updated as we learn more about global objects. Feel free to contribute or provide us with more -> information! +> This section will be updated as we learn more about global objects. Feel free to contribute or provide us with more information! Functions in the `.init` section are static initializers. Their purpose is to call C++ constructors on global objects, and to register destructors so the global objects can be destroyed when their overlay unloads. @@ -93,8 +95,8 @@ is 12 (`0xc`) bytes long and is also implicit, so we don't need to define it our > Feel free to contribute to this section or provide us with more information! Other than `.text` and `.init` which contain code, there are the following sections for data: -- `.rodata`: Global or static constants -- `.data`: Global or static variables +- `.rodata`: Global or static constants (requires `const`) +- `.data`: Global or static variables (requires not using `const` except if it's used in a static initializer, in which case all of the data will be set to zero) - `.bss`: Global or static uninitialized variables You can see examples of these data sections in the [compilation section in `build_system.md`](/docs/build_system.md#compiling-code). From a5a2494ec6bc58d6e53917ce18ff5b401b465671 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Mon, 22 Jun 2026 14:11:12 +0200 Subject: [PATCH 08/13] feat: Update decomp.me export instructions, adapt review about thumb region --- docs/decompiling.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/decompiling.md b/docs/decompiling.md index fa493926a..93b063a0f 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -63,12 +63,13 @@ following: - Decompile a different function and come back later. - Export to [decomp.me](https://decomp.me/): 1. Press the `decomp.me` button in `objdiff`. - 1. Once you're sent to `decomp.me`, go to "Options" and change the preset to "Phantom Hourglass". - 1. Paste your code into the "Source code" tab. Only the function you're currently decompiling should be necessary. + 1. Paste your code into the "Source code" tab. The whole file may be needed to access defined globals. + 1. On `decomp.me`, switch to the `objdiff` tab, you can check that you see what was expected from your local diff. 1. Share the link with us! (Reminder [link to the ZeldaRET discord server](https://discord.gg/6tjntnU8hC).) > [!Note] -> If the function is using THUMB mode you can use `THUMB_BEGIN` and `THUMB_END` before and after the function to create a THUMB region, anything outside of the region will use ARM. +> If the function is using THUMB mode you can use `THUMB_BEGIN` and `THUMB_END` before and after the function to create a THUMB region, anything outside of the region will use ARM. +> If you have inlines in a header and `#include` the header outside of the region it will use ARM. But if you include it inside the thumb region it will use thumb. ## Decompiling `.init` functions > [!NOTE] From b5497706d4fc5cefa6535b519983923aa5e1d486 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Tue, 23 Jun 2026 13:54:11 +0200 Subject: [PATCH 09/13] feat: Add instructions to reserve non-actor files --- docs/decompiling.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/decompiling.md b/docs/decompiling.md index 93b063a0f..d8a5d33a0 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -15,6 +15,9 @@ You can claim a source file (called an "actor") by changing its state to "reserv If you want to unclaim the file, leave a comment your the PR and mark the actor as "available" on the reservation sheet so we can be certain that the source file is available to be claimed again. Remember to make a pull request of any progress you made on the source file, whether it is just header files or partially decompiled code. +> [!NOTE] +> If you want to decompile a non-actor file, instead of filling an entry in the spreadsheet, open [an issue](https://github.com/zeldaret/st/issues) for it on top of the PR and mark it with appropriate labels ("decomp", "reserved", etc). You can find a detailed list of the labels [on github](https://github.com/zeldaret/st/labels). + ## Decompiling a source file We use the object diffing tool [`objdiff`](https://github.com/encounter/objdiff) to track differences between our decompiled C++ code and the base ROM's code. 1. [Download the latest release.](https://github.com/encounter/objdiff/releases/latest) From 1d4a2417480ca1f719356e5cb9807568d4a98db6 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Wed, 24 Jun 2026 13:51:12 +0200 Subject: [PATCH 10/13] feat: Add small details for LSP and reminder for installation --- INSTALL.md | 4 ++-- README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 40eb8f217..a4c84ba9e 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -60,9 +60,9 @@ ARM7 BIOS in the root directory of this repository, and verify that your dumped The repository contains a [`CMakeLists.txt`](CMakeLists.txt) that allows generating a compilation database. For now, the `CMakeLists.txt` can only be used to generate `compile_commands.json` and similar files, not compiling the project. To generate the compilation database, run `cmake -S . -G "Unix Makefiles" -B cmake` from the root directory of the project. This will create a `cmake/` directory that contains the `compile_commands.json`. -Once the file is generated, you can dynamically link it to the root directory and let your LSP detect it (make sure not to `git add` it though), or edit your `.clangd` as follows for it to recognize the compilation database: +Once the file is generated, you can dynamically link it to the root directory and let your LSP detect it (make sure not to `git add` it though, even though the project's `.gitignore` should prevent it), or edit your `.clangd` as follows for it to recognize the compilation database: ```clangd CompileFlags: - CompilationDatabase: "cmake" + CompilationDatabase: "cmake" # path to the compilation database ``` This setup is adapted from a [tutorial by Strus](https://gist.github.com/Strus/042a92a00070a943053006bf46912ae9), refer to his post for further details. diff --git a/README.md b/README.md index 465f85490..8cef65b85 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The Legend of Zelda: Spirit Tracks See [INSTALL.md](INSTALL.md) for instructions on how to install the project. ## Contribution -A work in progress, but [CONTRIBUTING.md](CONTRIBUTING.md) has guidelines for how to contribute to the project. +A work in progress, but [CONTRIBUTING.md](CONTRIBUTING.md) has guidelines for how to contribute to the project. Make sure to follow instructions on [installation](#how-to-install) first. ## Documentation See [/docs](/docs) for documentation about the game. From a8de8f5ed9f2a64d85f6894989c9523ad98211fc Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Wed, 24 Jun 2026 14:16:52 +0200 Subject: [PATCH 11/13] feat: Add instructions for coding style (format and naming) --- CONTRIBUTING.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c9f4aa8a6..3c1103c91 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,8 @@ - [Project structure](#project-structure) - [Decompiling](#decompiling) - [Code style](#code-style) + - [Naming new things](#naming-new-things) + - [Creating a class](#creating-a-class) ## Project structure @@ -33,3 +35,60 @@ See [/docs/decompiling.md](/docs/decompiling.md). ## Code style This project has a `.clang-format` file and all C/C++ files in this project should follow it. We recommend using an editor compatible with `clang-format` to format the code as you save. + +As a rule of thumb, try to mimick the style that can be observed in already decompiled files. Please write hexadecimal numbers in upper case (`0x9ABCDEF` instead of `0x9abcdef`). + +### Naming new things + +You may have to create new classes, structs, member attributes or functions, etc. Here is described how to name them according to what they are. + +Once you find out what something does, it helps to give it a meaningfull name (eg. `ModelRender` class, `Actor::isAlive()` function or `Actor.mPrevPos` member attribute). + +If you don't know yet what a piece of code does, try to follow this rough format: `{type}_ov{num}_{address}`. +- `type` is the kind of code you're naming, `UnkStruct` for a struct, `mUnk` for a member attribute, `UnkSystemX` for a class or group of functions (`X` would then be an arbitrary, unique identifier. Likely a number that would increase for every new `System` to name). +- `num` is the id of the overlay the code is part of. +- `address` is the address of the data you're naming. This may not always be applicable, in which case you can ignore it (and remove the trailing `_` of the format given above). + +### Creating a class +If you are to create a new class, try to follow this structure: +```cpp +class Foo { +public: + /* 00 */ int mBar; + /* 04 */ + + Foo(); + ~Foo(); + + /* 00 */ virtual void vfunc_00(); + /* 04 */ virtual void vfunc_04(); + /* 08 */ + + // itcm + bool func_01fff1e0(); + + // overlay 0 + void func_ov000_0208a318(unk32 param1, unk32 param2, unk32 param3); + void func_ov000_0208bbd4(unk32 param1, VecFx32 *param2, u16 param3); + + static UnkStruct_027e0ce0_34 *func_ov000_0205c904(); + + // overlay 1 + void func_ov001_020bc5f8(); + void func_ov001_020bc524(bool param1); + + static Foo *Create(); + static void Destroy(); + + // overlay 17 + void func_ov017_020bd69c(); +}; +``` + +In order, the parts are: +- Member attributes. +- Constructor (ctor) and destructor (dtor). +- Virtual functions. +- Other methods, grouped by overlay with a comment indicating which one. + +Using `private` may sometime be required to enable some inlining, so feel free to when use it you feel like you should. From 8d3814abfb8523a4ce27fb227e463c1f7f9ec166 Mon Sep 17 00:00:00 2001 From: Titouan Vial Date: Wed, 24 Jun 2026 14:25:03 +0200 Subject: [PATCH 12/13] fix: Expand on UnkSystem naming --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3c1103c91..0f58a358e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -45,7 +45,7 @@ You may have to create new classes, structs, member attributes or functions, etc Once you find out what something does, it helps to give it a meaningfull name (eg. `ModelRender` class, `Actor::isAlive()` function or `Actor.mPrevPos` member attribute). If you don't know yet what a piece of code does, try to follow this rough format: `{type}_ov{num}_{address}`. -- `type` is the kind of code you're naming, `UnkStruct` for a struct, `mUnk` for a member attribute, `UnkSystemX` for a class or group of functions (`X` would then be an arbitrary, unique identifier. Likely a number that would increase for every new `System` to name). +- `type` is the kind of code you're naming, `UnkStruct` for a struct, `mUnk` for a member attribute, `Unk{O}System{X}` for a class or group of functions. In the last case, `X` would then be an arbitrary, unique identifier. Likely a number that would increase for every new `System` to name. `O` is optional and aimed to give more information about the context in which the system is used (eg. `File` or `Actor`). - `num` is the id of the overlay the code is part of. - `address` is the address of the data you're naming. This may not always be applicable, in which case you can ignore it (and remove the trailing `_` of the format given above). From 5b7b3c7ab58c15e62924cd39581a9e31acf18c9c Mon Sep 17 00:00:00 2001 From: Mityno Date: Fri, 26 Jun 2026 18:18:57 +0200 Subject: [PATCH 13/13] feat: Add details for objdiff errors --- docs/decompiling.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/decompiling.md b/docs/decompiling.md index d8a5d33a0..bc56d0a97 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -33,6 +33,7 @@ The following sections explain how to decompile the different parts you see in ` > [!NOTE] > If a source file is missing in `objdiff`, or `objdiff` fails to build a file, first rerun `ninja` to update `objdiff.json`. +> You can see more details on a `objdiff` error by looking for a context window called "Jobs" at the top of the window (hoverring on the red text should show a full description of the run command and the error). > If the problem persists, feel free to ask for help. ## Decompiling a function