A speedy Mario Kart 64 decompilation, brought to you by the cousin of a tame racing driver.
Go to file
Joshua Peisach b723c1be14
a few matches (#404)
* code_8006E9C0: match func_80071818

* Match 800C8F80, 800917B0, 800AEF14
2023-09-08 10:08:47 -06:00
asm a few matches (#404) 2023-09-08 10:08:47 -06:00
assets Migrate player emblemb assets (#326) 2023-07-02 20:41:07 -06:00
courses Matched some funcs (#378) 2023-08-22 19:12:51 -06:00
data Small matches, nothing super special (#400) 2023-09-05 15:49:55 -06:00
docs Update BUILD_WINDOWS.md (#307) 2023-04-13 09:54:57 -06:00
include Match bss in podium ceremony (#403) 2023-09-07 11:44:13 -06:00
src a few matches (#404) 2023-09-08 10:08:47 -06:00
tools Migrate debug font asset to new extract utility (#325) 2023-07-01 23:47:10 -06: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 New asset extraction utility (#306) 2023-06-17 15:13:06 -06:00
.gitmodules Split and Decompile Code_800AF9B0 (#228) 2022-06-22 19:21:29 -07:00
addr_to_sym.py Labelling of some hard-coded addr to syms (#294) 2023-03-28 16:40:03 -06:00
assets.json Migrate player emblemb assets (#326) 2023-07-02 20:41:07 -06:00
ctx_includes.c Match func in player_controller.c (#394) 2023-08-31 21:55:01 -06:00
diff Some matches in 80027D00 (#385) 2023-08-25 22:14:08 -06:00
diff_settings.py Altered submodules (#50) 2021-11-05 14:12:08 -06:00
Dockerfile-ci Refresh 1 2021-03-02 01:48:17 -07:00
extract_assets.py Match common_textures.inc.c, memory & actor decomp (#188) 2022-05-12 15:57:56 -07:00
first-diff.py Updated permissions 2021-03-02 01:48:17 -07: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 Revert "Revert "Add step to manually clean workspace. (#334)" (#335)" (#336) 2023-07-09 07:22: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 Move ro/data for code_80091750 into the appropriate c/asm files (#393) 2023-08-31 21:18:13 -06:00
Makefile.split Make adjustments to most course files (#318) 2023-06-28 14:20:02 -06:00
mk64.ld Match bss in podium ceremony (#403) 2023-09-07 11:44:13 -06: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 Lots of code_80071F00 matches (#347) 2023-08-04 15:05:13 -06:00
progress.py Math (#402) 2023-09-06 20:39:16 -06:00
README.md assorted matches (#399) 2023-09-05 15:00:15 -06:00
rename_sym.sh Rename a bunch of D_06XXXXXX variables (#330) 2023-07-08 17:54:58 -06:00
undefined_syms.txt Rename a bunch of D_06XXXXXX variables (#330) 2023-07-08 17:54:58 -06:00
util.mk Cleaning Up Warnings (#317) 2023-06-28 14:30:11 -06:00

Build Status Build Status Build Status

Build Status Build Status Build Status

C files left: ~7 out of 40 (not counting audio)

Mario Kart 64

This repo contains a work-in-progress decompilation of Mario Kart 64 (U). The project 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.

It builds the following ROM:

  • mk64.us.z64 sha1: 579c48e211ae952530ffc8738709f078d5dd215e

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

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.

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.

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: asm for non-matching sections
│   └── os: OS related assembly code
├── bin: Data needing import; kart textures, and textures.
├── courses: course, model, & DL data, course table, staff ghosts.
├── build: Output directory
├── data: Data, text, audio banks, and instrument sets.
├── docs: Build guides
├── include: header files
├── courses: level scripts, geo layout, offsets and display lists
├── lib: SDK library code
├── music: sequences
├── src: C source code for the game
|   ├── debug: custom debug code 
│   ├── audio: sample tables and audio source
│   └── os: libultra
├── 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

Contributing

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

Files needing documentation: actors.c, actors_extended.c, main.c, kart_dma.c, race_logic.c, render_courses.c, skybox_and_splitscreen.c, staff_ghosts.c. Any inc.c file.

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

Official Discord: discord.gg/DuYH3Fh