This repo is being archived. Please use MonsterDruide1/OdysseyDecomp instead.
This repo does not receive any further maintenance. As soon as all open PRs are either merged or ported over to the other repository, this repo will be archived.
Decompilation of Super Mario Odyssey 1.0.0.
Sorted function map can be found here.
Reminder: this will not produce a playable game. This project will not allow you to play the game if you don't already own it on a Switch.
While Linux is not a hard requirement, it is strongly advised to set up WSL to simplify the setup process. Ubuntu 20.04 is usually a good choice.
The instructions below assume that you are using Linux (native or WSL) or macOS.
- Python 3.6 or newer with pip
- Ninja
- CMake 3.13+
- If you are on Ubuntu 18.04, you must first update CMake by using the official CMake APT repository.
- ccache (to speed up builds)
- xdelta3
- clang (not for compiling SMO code, but for compiling Rust tools)
Ubuntu users can install those dependencies by running:
sudo apt install python3 ninja-build cmake ccache xdelta3 clang libssl-dev
Additionally, you'll also need:
- A Rust toolchain (follow the instructions here)
- The following Python modules:
capstone colorama cxxfilt pyelftools ansiwrap watchdog python-Levenshtein toml
(install them withpip install ...
)
-
Clone this repository. If you are using WSL, please clone the repo inside WSL, not on the Windows side (for performance reasons).
-
Run
git submodule update --init --recursive
Next, you'll need to acquire the original 1.0
main
NSO executable.- To dump it from a Switch, follow the instructions on the wiki.
- You do not need to dump the entire game (RomFS + ExeFS + DLC). Just dumping the 1.0 ExeFS is sufficient.
-
Run
tools/setup.py [path to the NSO]
- This will:
- install tools/check to check for differences in decompiled code
- convert the executable if necessary
- set up Clang 3.9.1 and 4.0.1 by downloading them from the official LLVM website
- create a build directory in
build/
- If something goes wrong, follow the instructions given to you by the script.
- If you wish to use a CMake generator that isn't Ninja, use
--cmake_backend
to specify it.
- This will:
To start the build, just run
python tools/build.py
By default, a multithreaded build is performed. No need to specify -j
manually.
Use --clean
to perform a clean build, and --verbose
to enable verbose output.
To check whether everything built correctly, just run tools/check
after the build completes.