2023-10-14 13:07:09 -05:00
# Mario Kart 64
2023-11-05 15:57:14 -05:00
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 ](#Progress ) for more information.
2021-12-18 03:30:41 -07:00
2023-11-05 15:57:14 -05:00
This repository does not contain assets. Compiling requires asset extraction from a prior copy of the game.
2023-10-14 12:16:58 -06:00
2023-11-05 15:57:14 -05:00
It supports and builds the following versions:
2023-10-14 12:22:42 -06:00
2023-11-05 15:57:14 -05:00
| 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` .
2023-10-14 12:16:58 -06:00
2023-10-14 13:07:09 -05:00
[](https://ci.valandil.ca/job/mk64/job/master/)
[](https://ci.valandil.ca/job/mk64/job/master/)
2023-10-14 12:16:58 -06:00
[](https://ci.valandil.ca/job/mk64/job/master/)
2021-12-18 03:30:41 -07:00
[](https://ci.valandil.ca/job/mk64/job/master/)
2021-12-18 04:03:34 -07:00
[](https://ci.valandil.ca/job/mk64/job/master/)
2023-10-14 13:07:09 -05:00
- [](https://ci.valandil.ca/job/mk64/job/master/)
- [](https://ci.valandil.ca/job/mk64/job/master/)
- [](https://ci.valandil.ca/job/mk64/job/master/)
- [](https://ci.valandil.ca/job/mk64/job/master/)
- [](https://ci.valandil.ca/job/mk64/job/master/)
2020-10-14 21:13:33 -07:00
## Dependencies
The build system has the following package requirements:
binutils-mips >= 2.27
python3 >= 3.6
libaudiofile
2021-11-05 05:17:09 -06:00
To add submodules run `git submodule update --init --recursive` after cloning.
2023-10-19 23:37:21 -06:00
## 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
```
2022-02-22 17:29:58 -07:00
#### Debian / Ubuntu
2021-02-28 00:44:26 -07:00
```
2022-02-22 17:29:58 -07:00
sudo apt install build-essential pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
2021-02-28 00:44:26 -07:00
```
2020-10-14 21:13:33 -07:00
2022-02-22 17:29:58 -07:00
#### Arch Linux
2021-12-20 20:33:42 -07:00
To install build dependencies:
```
sudo pacman -S base-devel capstone python
```
Install the following AUR packages:
* [mips64-elf-binutils ](https://aur.archlinux.org/packages/mips64-elf-binutils ) (AUR)
Review the n64decomp/sm64 readme for instructions to compile in other distributions.
2022-02-22 17:29:58 -07:00
#### Windows
2021-12-20 20:33:42 -07:00
Compiling on Windows requires `MSYS2 MinGW x64` . The setup process is a tad intensive.
[Instructions here ](docs/BUILD_WINDOWS.md )
2022-06-15 20:26:03 -04:00
#### macOS
Install [Homebrew ](https://brew.sh ), 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` .
2023-11-08 00:36:48 -05:00
#### 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:
```bash
docker run --rm -v ${PWD}:/mk64 mk64
```
For example:
```bash
docker run --rm -v ${PWD}:/mk64 mk64 make -C tools
docker run --rm -v ${PWD}:/mk64 mk64 make
```
2020-10-14 21:13:33 -07:00
## Building
2021-02-28 22:54:49 -07:00
Place a US version of Mario Kart 64 called `baserom.us.z64` into the project folder for asset extraction.
2021-02-28 00:44:26 -07:00
2020-10-14 21:13:33 -07:00
Run the following commands after pulling:
2022-06-15 20:26:03 -04:00
```bash
make -C tools
make
```
2020-10-14 21:13:33 -07:00
2021-02-28 22:54:49 -07:00
## Progress
2021-11-16 12:49:53 -07:00
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.
2021-10-09 12:40:26 -07:00
Some menu textures are compressed using a format called tkmk00. A byte-matching compressor/decompressor does not yet exist.
2021-02-28 22:54:49 -07:00
## Project Structure
mk64
├── asm: Handwritten assembly code, rom header and boot
2023-10-14 13:07:09 -05:00
│ ├── non_matchings: Assembly for non-matching sections
│ └── os: Libultra handwritten assembly code
2023-09-20 17:17:24 -06:00
├── assets: Textures
2023-10-14 13:07:09 -05:00
├── courses: Course data, geography, display lists and staff ghosts
2021-02-28 22:54:49 -07:00
├── build: Output directory
2023-10-14 13:07:09 -05:00
├── data: Misc data, text, audio banks, and instrument sets
2023-04-13 11:35:57 -06:00
├── docs: Build guides
2023-09-20 17:17:24 -06:00
├── include: Header files
├── music: Sequences
2021-02-28 22:54:49 -07:00
├── src: C source code for the game
2023-09-20 17:17:24 -06:00
| ├── actors: Individual actors split out from other files
2023-10-14 13:07:09 -05:00
│ ├── audio: Sample tables and audio code
│ ├── data: Misc data referenced in other C files
2023-09-20 17:17:24 -06:00
| ├── debug: Custom debug code
2023-10-14 13:07:09 -05:00
| ├── 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
2021-02-28 22:54:49 -07:00
└── tools: build tools
2020-10-14 21:13:33 -07:00
2023-10-14 05:04:33 +02:00
## Documentation
[Doxygen ](https://www.doxygen.nl/index.html ) 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/ ](https://n64decomp.github.io/mk64/ ).
2021-02-28 22:54:49 -07:00
## Contributing
2021-02-28 00:44:26 -07:00
2022-06-18 03:49:53 -06:00
Pull requests are welcome. For major changes, please discuss in the Discord.
2021-02-28 00:44:26 -07:00
Run `clang-format` on your code to ensure it meets the project's coding standards.
Official Discord: [discord.gg/DuYH3Fh ](https://discord.gg/DuYH3Fh )