1
Fork 0
Personal sm64-port fork
Find a file
2022-10-05 22:48:50 -04:00
actors Refresh 14 2021-07-12 23:17:54 -04:00
asm Refresh 14 2021-07-12 23:17:54 -04:00
assets Refresh 13 2020-12-03 14:26:38 -05:00
bin Refresh 14 2021-07-12 23:17:54 -04:00
data Refresh 14 2021-07-12 23:17:54 -04:00
doxygen init2 2019-08-25 00:46:40 -04:00
enhancements Fix 60fps patch after merge 2021-08-30 22:26:02 +02:00
include Merge branch 'master' of https://github.com/n64decomp/sm64 2021-08-30 21:57:49 +02:00
levels Refresh 14 2021-07-12 23:17:54 -04:00
lib Refresh 14 2021-07-12 23:17:54 -04:00
rsp Refresh 14 2021-07-12 23:17:54 -04:00
sound Refresh 14 2021-07-12 23:17:54 -04:00
src Make clear color black 2022-10-05 22:48:50 -04:00
text Refresh 13 2020-12-03 14:26:38 -05:00
tools Refresh 14 2021-07-12 23:17:54 -04:00
.clang-format Refresh 1 2019-09-01 15:50:50 -04:00
.clang-tidy Refresh 1 2019-09-01 15:50:50 -04:00
.gitattributes Refresh 1 2019-09-01 15:50:50 -04:00
.gitignore Add more IDE settings to gitignore 2022-10-03 22:24:11 -04:00
assets.json Refresh 14 2021-07-12 23:17:54 -04:00
CHANGES Refresh 14 2021-07-12 23:17:54 -04:00
charmap.txt refresh 5 2020-01-03 10:38:57 -05:00
charmap_menu.txt refresh 5 2020-01-03 10:38:57 -05:00
diff.py Refresh 13 2020-12-03 14:26:38 -05:00
diff_settings.py Refresh 13 2020-12-03 14:26:38 -05:00
Dockerfile Merge branch 'master' of https://github.com/n64decomp/sm64 2021-08-30 21:57:49 +02:00
Doxyfile refresh 4 2019-12-01 21:52:53 -05:00
extract_assets.py Merge branch 'master' of https://github.com/n64decomp/sm64 2021-08-30 21:57:49 +02:00
first-diff.py Refresh 13 2020-12-03 14:26:38 -05:00
format.sh init2 2019-08-25 00:46:40 -04:00
Jenkinsfile Refresh 13 2020-12-03 14:26:38 -05:00
Makefile Dynamically compile glsl shaders on the fly 2022-10-05 09:44:17 -04:00
Makefile.split Refresh 14 2021-07-12 23:17:54 -04:00
README.md Denote Vulkan gfx backend in README with instructions 2022-10-04 11:02:56 -04:00
rename_sym.sh Refresh 14 2021-07-12 23:17:54 -04:00
sm64.eu.sha1 init2 2019-08-25 00:46:40 -04:00
sm64.jp.sha1 init2 2019-08-25 00:46:40 -04:00
sm64.ld Refresh 14 2021-07-12 23:17:54 -04:00
sm64.sh.sha1 Refresh 7 2020-03-01 22:42:52 -05:00
sm64.us.sha1 init2 2019-08-25 00:46:40 -04:00
undefined_syms.txt Refresh 13 2020-12-03 14:26:38 -05:00
util.mk Refresh 13 2020-12-03 14:26:38 -05:00

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

  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