1
Fork 0
sm64/README.md

3.3 KiB

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.

Building

  1. Install prerequisites (Ubuntu): sudo apt install -y git build-essential pkg-config libusb-1.0-0-dev libsdl2-dev.
  2. Clone the repo: git clone https://github.com/sm64-port/sm64-port.git, which will create a directory sm64-port and then enter it cd sm64-port.
  3. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu.
  4. Run make to build. Qualify the version through make VERSION=<VERSION>. Add -j4 to improve build speed (hardware dependent based on the amount of CPU cores available).
  5. 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