/OdysseyDecomp

A decompilation of Super Mario Odyssey v1.0.0 for the Nintendo Switch

Primary LanguageC++

OdysseyDecomp

Badge Decompiled

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

Setup

Requirements

  • Super Mario Odyssey 1.0.0 and the main file from its exefs. Place this in the project root with the name odyssey.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

Building

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 the build directory

    • -non-matching - also builds non-matching functions enclosed in the NON_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

Using this repository

Visual Studio Code

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.
[
    {
      "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 for Restart Language Server. This will restart clangd and it should find the json now.

Contributing

  • TODO

Ports

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.