This repo contains a full decompilation of Super Mario 64 (J) and (U). The source and data have been decompiled but complete naming and documentation all of the code and data is still a work in progress. Decompiling the (E) ROM is also an ongoing effort.
It builds the following ROMs:
- sm64.jp.z64
sha1: 8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51
- sm64.us.z64
sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce
This repo does not include all assets necessary for compiling the ROMs. A prior copy of the game is required to extract the required assets.
For each version (jp/us/eu) that you want to build a ROM for, put an existing ROM at
./baserom.<version>.z64
for asset extraction.
The build system has the following package requirements:
- binutils-mips >= 2.27
- python3 >= 3.6
- libaudiofile
- qemu-irix
Debian / Ubuntu
sudo apt install build-essential pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev
Download latest package from qemu-irix Releases
sudo dpkg -i qemu-irix-2.11.0-2169-g32ab296eef_amd64.deb
(Optional) Clone https://github.com/n64decomp/qemu-irix and follow the install instructions in the README.
Arch Linux
sudo pacman -S base-devel python audiofile
Install the following AUR packages:
- mips64-elf-binutils (AUR)
- qemu-irix-git (AUR)
Run make
to build the ROM (defaults to VERSION=us
). Make sure your path to the repo
is not too long or else this process will error, as the emulated IDO compiler cannot
handle paths longer than 255 characters.
Examples:
make VERSION=jp -j4 # build (J) version instead with 4 jobs
make VERSION=eu COMPARE=0 # non-matching EU version still WIP
For Windows, install WSL and a distro of your choice following Windows Subsystem for Linux Installation Guide for Windows 10 We recommend either Debian or Ubuntu 18.04 Linux distributions under WSL.
Then follow the directions in the Linux installation section above.
macOS is currently unsupported as qemu-irix is unable to be built for macOS host. The recommended path is installing a Linux distribution under a VM.
sm64
โโโ actors: object behaviors, geo layout, and display lists
โโโ asm: handwritten assembly code, rom header
โย ย โโโ non_matchings: asm for non-matching sections
โโโ assets: animation and demo data
โย ย โโโ anims: animation data
โย ย โโโ demos: demo data
โโโ bin: asm files for ordering display lists and textures
โโโ build: output directory
โโโ data: behavior scripts, misc. data
โโโ doxygen: documentation infrastructure
โโโ enhancements: example source modifications
โโโ include: header files
โโโ levels: level scripts, geo layout, and display lists
โโโ lib: SDK library code
โโโ sound: sequences, sound samples, and sound banks
โโโ src: C source code for game
โย ย โโโ audio: audio code
โย ย โโโ buffers: stacks, heaps, and task buffers
โย ย โโโ engine: script processing engines and utils
โย ย โโโ game: behaviors and rest of game source
โย ย โโโ goddard: Mario intro screen
โย ย โโโ menu: title screen and file, act, and debug level selection menus
โโโ text: dialog, level names, act names
โโโ textures: skybox and generic texture data
โโโ tools: build tools
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Run clang-format on your code to ensure it meets the project's coding standards.
Official discord: https://discord.gg/27JtCWs