Co-authored-by: Sanae <atmatm6000@outlook.com>
3.9 KiB
Executable File
OdysseyDecomp
Decompilation of all Super Mario Odyssey versions, from 1.0.0 to 1.3.0.
Building
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.
For Windows users
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.
1. Set up dependencies
- 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 ...
)
2. Set up the project
-
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.
-
Download Clang 3.9.1 manually
- As we're not sure about the right compiler version yet, it won't be downloaded automatically.
- Download a prebuilt binary (version 3.9.1) from LLVM, matching your environment.
- Extract it to
toolchain/clang-3.9.1
, so that the filetoolchain/clang-3.9.1/bin/clang
exists.
-
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 4.0.1 by downloading it from the official LLVM website
- create a build directory in
build/
- If something goes wrong, follow the instructions given to you by the script.
- This will:
3. Build
To start the build, just run
ninja -C build
By default, Ninja will perform a multithreaded build. There is no need to pass -j manually.
To check whether everything built correctly, just run tools/check
after the build completes.
Contributing
Anyone is welcome to contribute to this project, just send a pull request!
TODO
- Enable comparison between different versions and check for mis-matches in all versions using
tools/check
- 1.3.0 uses a different optimization method, find it and implement it into the toolchain
from the re-organization
- Rework the al/Library/Yaml-File structure (should be fewer files, merge a few of them)
- Find proper place for Factories (+Placement of ActorFactory?)
- Graph in Rails misordered
- LiveActorGroup vs. Kit are in the wrong order
- Merge LiveActor/-flag
- Split files/functions in Library/Resource
- Library/Stage: Proper place for StageInfo
- Library/Math: Split up into multiple files
- Library/Player: Re-organize Util
- cleanup/remove al/util
- game/Util/ResourceUtil remove/cleanup
- Once open-ead/sead#130 is merged, clean up RootTask
Credits
This decompilation uses this as a reference for the sead library used. Big thanks to their research!