A speedy Mario Kart 64 decompilation, brought to you by the cousin of a tame racing driver.
Go to file
Tyler McGavran b56b43e721
Match a variety of functions, remove an extraneous data file (#140)
* Match func_800AB290 and func_800AC978

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Match func_800A15EC

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Match func_800A1A20

* Get func_800A1F30 to NON_MATCHING

* Match func_800A3C84

mips_to_c does not currently support labels being in delay slots, although
 practice that is fine. To get around this I put a nop in the delay slot
 instead. No permanent change is being made to the target assembly.

* Update the mips_to_c output for a couple functions

Split asm file containing unused funcs and added mips_to_c output for them.

* Remove extraneous data file

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>
2022-01-15 23:00:31 -07:00
asm Match a variety of functions, remove an extraneous data file (#140) 2022-01-15 23:00:31 -07:00
courses Decompiled staff_ghosts.c (Plus lots more) (#39) 2021-10-26 11:55:42 -06:00
data More matching in code_800AF9B0 (#131) 2022-01-06 20:32:57 -07:00
docs Update BUILD_WINDOWS.md (#124) 2022-01-02 17:30:56 -07:00
include Match a variety of functions, remove an extraneous data file (#140) 2022-01-15 23:00:31 -07:00
src Match a variety of functions, remove an extraneous data file (#140) 2022-01-15 23:00:31 -07:00
tools Add MSYS2 MinGW x64 Support (#108) 2021-12-20 20:33:42 -07:00
.gitignore Matched some memory.c and other (#55) 2021-11-16 02:39:33 -07:00
.gitmodules Split audio funcs (#53) 2021-11-06 03:49:37 -06:00
Dockerfile-ci Refresh 1 2021-03-02 01:48:17 -07:00
Jenkinsfile Only update progress when running on master branch. (#106) 2021-12-18 23:46:34 -07:00
Makefile mips64-elf support (fixes building on archlinux) (#89) 2021-12-11 00:50:47 -07:00
Makefile.split Decomped trophy & podium models. Modified gbi.h (#28) 2021-07-31 18:39:06 -06:00
README.md Add MSYS2 MinGW x64 Support (#108) 2021-12-20 20:33:42 -07:00
assets.json Decomped trophy & podium models. Modified gbi.h (#28) 2021-07-31 18:39:06 -06:00
ctx_includes.c Split asm using autodecompiler (#49) 2021-11-05 05:17:09 -06:00
diff Matched some memory.c and other (#55) 2021-11-16 02:39:33 -07:00
diff_settings.py Altered submodules (#50) 2021-11-05 14:12:08 -06:00
extract_assets.py Add MSYS2 MinGW x64 Support (#108) 2021-12-20 20:33:42 -07:00
first-diff.py Updated permissions 2021-03-02 01:48:17 -07:00
import Decomped more crash_screen, code_80280650, fixed import shortcut (#115) 2021-12-24 20:31:54 -07:00
mk64.ld Match a variety of functions, remove an extraneous data file (#140) 2022-01-15 23:00:31 -07:00
mk64.us.sha1 Initial commit 2020-10-14 21:13:33 -07:00
permuter Fixed permuter link files (#51) 2021-11-05 14:32:07 -06:00
permuter_settings.toml Match a variety of functions, remove an extraneous data file (#140) 2022-01-15 23:00:31 -07:00
progress.py Fix maths (#104) 2021-12-18 04:03:34 -07:00
rename_sym.sh Match/split all of libultra (#23) 2021-04-27 22:35:30 -06:00
undefined_syms.txt Decomped gfx in data_segment2.s (#83) 2021-12-06 00:05:33 -07:00

README.md

Build Status Build Status Build Status

Build Status Build Status Build Status

C Files left: ~23 out of 35

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
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

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
│   └── audio: assembly code
├── bin: Kart textures, course vertex, and textures
├── build: Output directory
├── data: Data, text, audio banks, and instrument sets.
├── 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
│   └── audio: sample tables and audio source
│   └── os: libultra
├── textures: texture data, bitmaps
│   ├── raw: raw textures
│   └── standalone: whole textures
└── tools: build tools

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

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

Official Discord: discord.gg/DuYH3Fh