actors | ||
asm | ||
assets | ||
bin | ||
data | ||
doxygen | ||
enhancements | ||
include | ||
levels | ||
lib | ||
rsp | ||
sound | ||
src | ||
text | ||
tools | ||
.clang-format | ||
.clang-tidy | ||
.gitattributes | ||
.gitignore | ||
assets.json | ||
CHANGES | ||
charmap.txt | ||
charmap_menu.txt | ||
diff.py | ||
diff_settings.py | ||
Dockerfile | ||
Doxyfile | ||
extract_assets.py | ||
first-diff.py | ||
format.sh | ||
Jenkinsfile | ||
Makefile | ||
Makefile.split | ||
README.md | ||
rename_sym.sh | ||
sm64.eu.sha1 | ||
sm64.jp.sha1 | ||
sm64.ld | ||
sm64.sh.sha1 | ||
sm64.us.sha1 | ||
undefined_syms.txt | ||
util.mk |
Super Mario 64 Port
This is my personal fork of sm64-port. Why? Because it's fun! I'm simply building on the great work already done by other people, so please see the credits below.
This repository does not include all assets necessary for compiling the game. A prior copy of the game is required to extract the assets.
Differences from sm64-port
Since I'm primarily a Linux user, I'm prioritizing Linux usage above everything else. I have already fixed a bunch of Linux-specific bugs that I encountered (vsync timer issues, pulseaudio sync issues, and more). Stuff that does not relate to this goal is bound to be removed or unmaintained (Windows support, native N64 support, etc.), and there are better forks if you're looking for support of that stuff.
Oh yeah, I'm also building a Vulkan backend for the N64 renderer :-) By default OpenGL is used, but you can force Vulkan
by passing -vulkan
when running the game.
Building
- Install prerequisites (Ubuntu):
sudo apt install -y git build-essential pkg-config libusb-1.0-0-dev libsdl2-dev
. - Clone the repo:
git clone https://github.com/sm64-port/sm64-port.git
, which will create a directorysm64-port
and then enter itcd sm64-port
. - Place a Super Mario 64 ROM called
baserom.<VERSION>.z64
into the repository's root directory for asset extraction, whereVERSION
can beus
,jp
, oreu
. - Run
make
to build. Qualify the version throughmake VERSION=<VERSION>
. Add-j4
to improve build speed (hardware dependent based on the amount of CPU cores available). - The executable binary will be located at
build/<VERSION>_pc/sm64.<VERSION>.f3dex2e
.
Debugging
The code can be debugged using gdb
or lldb
. By default, the Makefile should produce debug symbols.
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: C 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
├── rsp: audio and Fast3D RSP assembly 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
│ └── pc: port code, audio and video renderer
├── text: dialog, level names, act names
├── textures: skybox and generic texture data
└── tools: build tools
Contributing
Run clang-format
on your code to ensure it meets the project's coding standards.
Credits
- sm64-port team (https://github.com/sm64-port/sm64-port) for the original port
- n64 decomp team (https://github.com/n64decomp/sm64) for decompiling the game
- Emill, MaikelChan for the original Nintendo 64 renderer
- And everyone who has contributed! :-)