A decompilation of Super Mario Odyssey v1.0.0 for the Nintendo Switch
This project will not generate a complete binary of the game, and is only meant as a place for research. Game assets are not needed, nor included in this repository.
Discord server can be found here
In progress functions can be found here
- Super Mario Odyssey 1.0.0 and the
main
file from its exefs. Place this in the project root with the nameodyssey.nso
. - Linux or WSL
- Python 3
- pip
- Depending on your setup, you may need these apt packages:
-
libncurses5-dev g++-multilib libc6 libc6-dev
Windows users: cloning inside of a WSL directory will greatly improve build performance
Then run this command to clone the repository along with the submodules under lib
. These include sead
, nnheaders
, and agl
from open-ead.
git clone --recurse-submodules https://github.com/shibbo/OdysseyDecomp.git
The following can be downloaded with the setup.py
in this repository
- Python modules
capstone
,elftools
,lz4
,ninja
, andcolorama
- Clang 3.9.1 debian build
Building has been tested on WSL2 running Ubuntu 22.04.1.
-
setup.py
- download and install required Python modules and Clang 3.9.1 -
build.py [-non-matching] [-clean]
- build the repository and generate.o
files under thebuild
directory -
-non-matching
- also builds non-matching functions enclosed in theNON_MATCHING
macro
-
-clean
- Compiles every source file, even if nothing has been changed.
-
check.py [-all] [-force-csv] <mangled symbol>
- checks for differences in a compiled function -
-force-csv
- remakes/clears the csv, even if it exists
-
-all
- checks every compiled function and updates the csv
-
progress.py
- prints and updates the progress of the repository
If you're using Windows, please use a WSL window for this project. This will ensure the best compatibility with extensions.
The clangd extension is recommended for code formatting, code completion, and errors/warnings.
- To use this extension properly, please let the extension download Clang and follow these steps:
-
- Create a
compile_commands.json
in your project root. Paste the following into it and adjust your repository path to match the repository location.
- Create a
[
{
"directory": "/home/user/path/to/OdysseyDecomp",
"command": "clang++ -x c++ -O3 -std=gnu++1z --target=aarch64-linux-elf -mcpu=cortex-a57+fp+simd+crypto+crc -fno-exceptions -mno-implicit-float -fno-strict-aliasing -fno-short-enums -fdata-sections -fPIC -g -Wall -I include -I include/al/Library -I include/al/Project -I lib/agl/include -I lib/nnheaders/include -I lib/sead/include -I tools/clang/include/c++/v1 -D NNSDK -c",
"file": "required/line.cpp"
}
]
-
- Do
CTRL + SHIFT + P
and search forRestart Language Server
. This will restartclangd
and it should find the json now.
- Do
- TODO
We have no involvement in any ports of any kind. We will not be making a port ourselves to any other platform, please do not ask.