The source code for my personal fork of the SM64 PC port
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Cadey Ratio 630860a636 input display 2 months ago
actors initial commit 1 year ago
asm initial commit 1 year ago
assets initial commit 1 year ago
bin initial commit 1 year ago
data initial commit 1 year ago
doc Merge pull request 'gamebridge: Twitch Control' (#2) from gamebridge into master 1 year ago
enhancements Revert "Revert "integrate puppycam patch"" 1 year ago
gamebridge gamebridge hacks 11 months ago
include Revert "Revert "integrate puppycam patch"" 1 year ago
levels initial commit 1 year ago
lib initial commit 1 year ago
nix input display 2 months ago
sound initial commit 1 year ago
src input display 2 months ago
text initial commit 1 year ago
tools Allow tools to work properly on big endian systems 1 year ago
.clang-format initial commit 1 year ago
.clang-tidy initial commit 1 year ago
.envrc lorri 1 year ago
.gitattributes initial commit 1 year ago
.gitignore docker build 11 months ago
Cargo.lock twitch control 1 year ago
Cargo.toml gamebridge: implement simple protocol 1 year ago
Doxyfile initial commit 1 year ago
Jenkinsfile initial commit 1 year ago
Makefile Revert "Revert "integrate puppycam patch"" 1 year ago
Makefile.split initial commit 1 year ago
README.md initial commit 1 year ago
asmdiff.jp.sh initial commit 1 year ago
asmdiff.us.sh initial commit 1 year ago
assets.json initial commit 1 year ago
charmap.txt initial commit 1 year ago
charmap_menu.txt initial commit 1 year ago
default.nix docker build 11 months ago
diff.py initial commit 1 year ago
diff_settings.py initial commit 1 year ago
docker.nix docker build 11 months ago
extract_assets.py extract assets is +x 1 year ago
first-diff.py initial commit 1 year ago
format.sh initial commit 1 year ago
longjump.inputs start on longjump macro 1 year ago
readme2.txt initial commit 1 year ago
rename_sym.sh initial commit 1 year ago
shell.nix input display 2 months ago
sm64.eu.sha1 initial commit 1 year ago
sm64.jp.sha1 initial commit 1 year ago
sm64.ld initial commit 1 year ago
sm64.us.sha1 initial commit 1 year ago
undefined_syms.txt initial commit 1 year ago

README.md

Super Mario 64

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.

Installation

Linux

1. Copy baserom(s) for asset extraction

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.

2. Install build dependencies

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:

3. Build ROM

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

Windows

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

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.

Project Structure

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

Contributing

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