A speedy Mario Kart 64 decompilation, brought to you by the cousin of a tame racing driver.
Go to file
coco875 f9bd2e8ae2
improve display of address and add link to function (#508)
* improve display of doxygen symbols file
2023-12-24 16:08:26 -07:00
.github/workflows finish setup doxygen (#458) 2023-10-13 21:04:33 -06:00
asm Rename code_8001F980 to render_player and code_800B45E0 to save (#507) 2023-12-24 15:52:09 -07:00
assets Proper linkage for textures in course display lists (#443) 2023-11-09 06:30:19 -07:00
courses A small cleanup PR (#494) 2023-11-14 09:20:12 -07:00
data Proper linkage for textures in course display lists (#443) 2023-11-09 06:30:19 -07:00
docs Update BUILD_WINDOWS.md (#307) 2023-04-13 09:54:57 -06:00
enhancements Rename code_8001F980 to render_player and code_800B45E0 to save (#507) 2023-12-24 15:52:09 -07:00
include Some matches in code_80005FD0 (#501) 2023-12-17 22:29:01 -07:00
src Rename code_8001F980 to render_player and code_800B45E0 to save (#507) 2023-12-24 15:52:09 -07:00
tools improve display of address and add link to function (#508) 2023-12-24 16:08:26 -07:00
.clang-format Matches in 80281fa0, render_courses, and create defines for sound cues. (#276) 2022-11-21 04:06:12 -07:00
.clang-tidy Matches in 80281fa0, render_courses, and create defines for sound cues. (#276) 2022-11-21 04:06:12 -07:00
.editorconfig Memory and Actor decomp (#201) 2022-05-14 15:12:32 -07:00
.gitattributes Add building on macOS (#224) 2022-06-15 17:26:03 -07:00
.gitignore fix doxygen syms (#506) 2023-12-24 15:42:20 -07:00
.gitmodules Split and Decompile Code_800AF9B0 (#228) 2022-06-22 19:21:29 -07:00
addr_to_sym.py Delete courses/cup folders and rename course related files (#432) 2023-09-20 17:17:24 -06:00
assets.json Linkage for the ceremony_data file (#478) 2023-10-27 22:18:20 -06:00
ctx_includes.c Rename code_8001F980 to render_player and code_800B45E0 to save (#507) 2023-12-24 15:52:09 -07:00
diff Some matches in 80027D00 (#385) 2023-08-25 22:14:08 -06:00
diff_settings.py Document progress.py and correct readme (#483) 2023-11-05 13:57:14 -07:00
Dockerfile Upgrade Dockerfile to Ubuntu 22.04 as 18.04 is EOL (#491) 2023-11-07 22:36:48 -07:00
Doxyfile fix doxygen syms (#506) 2023-12-24 15:42:20 -07:00
extract_assets.py EU 1.0 OK (#265) 2023-10-19 23:37:21 -06:00
first-diff.py EU 1.0 OK (#265) 2023-10-19 23:37:21 -06:00
gfxdsm.js Matched some funcs (#378) 2023-08-22 19:12:51 -06:00
import Matches in 80281fa0, render_courses, and create defines for sound cues. (#276) 2022-11-21 04:06:12 -07:00
Jenkinsfile Revamp progress script, change file structure and remove unused asm (#459) 2023-10-14 12:07:09 -06:00
m2c_helper.sh Add a utility that aids in generating m2c output (#279) 2022-12-09 19:03:30 -07:00
Makefile fix doxygen syms (#506) 2023-12-24 15:42:20 -07:00
Makefile.split Linkage for the ceremony_data file (#478) 2023-10-27 22:18:20 -06:00
mk64.eu-1.0.sha1 EU 1.0 OK (#265) 2023-10-19 23:37:21 -06:00
mk64.eu-final.sha1 EU 1.0 OK (#265) 2023-10-19 23:37:21 -06:00
mk64.ld Rename code_8001F980 to render_player and code_800B45E0 to save (#507) 2023-12-24 15:52:09 -07:00
mk64.us.sha1 Initial commit 2020-10-14 21:13:33 -07:00
permute Matches in 80281fa0, render_courses, and create defines for sound cues. (#276) 2022-11-21 04:06:12 -07:00
permuter Matches in 80281fa0, render_courses, and create defines for sound cues. (#276) 2022-11-21 04:06:12 -07:00
permuter_settings.toml More audio matches (#420) 2023-09-15 21:50:27 -06:00
progress.py Document progress.py and correct readme (#483) 2023-11-05 13:57:14 -07:00
README.md Upgrade Dockerfile to Ubuntu 22.04 as 18.04 is EOL (#491) 2023-11-07 22:36:48 -07:00
rename_sym.sh Linkage for the ceremony_data file (#478) 2023-10-27 22:18:20 -06:00
undefined_syms.txt Linkage for the ceremony_data file (#478) 2023-10-27 22:18:20 -06:00
util.mk Cleaning Up Warnings (#317) 2023-06-28 14:30:11 -06:00

Mario Kart 64

This work-in-progress decompilation of Mario Kart 64 pursues historical and educational elements within the game found via taking it apart and putting it back together. Inspiration to do so not only emanates from the game's hardware and technology but also its immensely positive effects on the cultures and families of nearly every nationality. See progress for more information.

This repository does not contain assets. Compiling requires asset extraction from a prior copy of the game.

It supports and builds the following versions:

ROM Output Revision SHA-1 Checksum
mk64.us.z64 USA 579c48e211ae952530ffc8738709f078d5dd215e
mk64.eu-1.0.z64 EUR 1.0 a729039453210b84f17019dda3f248d5888f7690
mk64.eu-final.z64 EUR 1.1 f6b5f519dd57ea59e9f013cc64816e9d273b2329

Score progress

Total progress consists of all code segments together.

Game code progress consists of main, ending and racing.

Build Status Build Status

Build Status Build Status Build Status

  • Build Status
  • Build Status
  • Build Status
  • Build Status
  • Build Status

Dependencies

The build system has the following package requirements:

binutils-mips >= 2.27
python3 >= 3.6
libaudiofile

To add submodules run git submodule update --init --recursive after cloning.

EU Specific Steps (All versions)

Both EU builds first requires US to be built first:

make -j

Now build either EU 1.0 eu-1.0 or EU 1.1 eu-final

make -j VERSION=eu-final

diff/first-diff commands

python3 first-diff.py --eu
./diff <function> -eu

Debian / Ubuntu

sudo apt install build-essential pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev

Arch Linux

To install build dependencies:

sudo pacman -S base-devel capstone python

Install the following AUR packages:

Review the n64decomp/sm64 readme for instructions to compile in other distributions.

Windows

Compiling on Windows requires MSYS2 MinGW x64. The setup process is a tad intensive.

Instructions here

macOS

Install Homebrew, then install the following dependencies:

brew update
brew install python3 capstone coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils

When building, use gmake to ensure that homebrew make is used instead of the old, macOS system make.

Docker

Build the Docker image:

docker build -t mk64 .

When building and using other tools, append the following in front of every command you run:

docker run --rm -v ${PWD}:/mk64 mk64

For example:

docker run --rm -v ${PWD}:/mk64 mk64 make -C tools
docker run --rm -v ${PWD}:/mk64 mk64 make

Building

Place a US version of Mario Kart 64 called baserom.us.z64 into the project folder for asset extraction.

Run the following commands after pulling:

make -C tools
make

Progress

The source is in a 'shiftable' state that may allow modding but glitches may exist. Keep in-mind the code-base will alter significantly overtime. Feedback that raises awareness of new shift issues are welcome as a comment on issue #6. Note that some segments must be moved manually to prevent them colliding into each other.

Some menu textures are compressed using a format called tkmk00. A byte-matching compressor/decompressor does not yet exist.

Project Structure

mk64
├── asm: Handwritten assembly code, rom header and boot
│   ├── non_matchings: Assembly for non-matching sections
│   └── os: Libultra handwritten assembly code
├── assets: Textures
├── courses: Course data, geography, display lists and staff ghosts
├── build: Output directory
├── data: Misc data, text, audio banks, and instrument sets
├── docs: Build guides
├── include: Header files
├── music: Sequences
├── src: C source code for the game
|   ├── actors: Individual actors split out from other files
│   ├── audio: Sample tables and audio code
│   ├── data: Misc data referenced in other C files
|   ├── debug: Custom debug code
|   ├── ending: Podium ceremony and credits code
│   ├── os: Libultra C code
|   └── racing: Race and game engine code
├── textures: Texture data, bitmaps
|   ├── common: Textures common to many courses
|   ├── courses: Course specific textures
|   ├── crash screen: Crash screen font image
│   ├── raw: Raw textures
│   ├── standalone: Whole textures
|   ├── startup_logo: Reflection map
|   └── trophy: Ceremony cutscene podium and trophy textures
└── tools: build tools

Documentation

Doxygen is used to generate documentation. To generate the documentation, run doxygen Doxyfile from the project root. The documentation will be generated in the docs/html folder. The documentation is also available online at https://n64decomp.github.io/mk64/.

Contributing

Pull requests are welcome. For major changes, please discuss in the Discord.

Run clang-format on your code to ensure it meets the project's coding standards.

Official Discord: discord.gg/DuYH3Fh