Hanachan icon indicating copy to clipboard operation
Hanachan copied to clipboard

Mario Kart Wii physics reimplementation

Hanachan

This project is abandoned in favor of riidefi/mkw and stblr/mkw-sp.

A reimplementation of the physics engine of Mario Kart Wii, aiming for perfectly accurate ghost replay. The initial goal is to reach 100% coverage of the CTGP database on Nintendo tracks.

Status

See STATUS.md.

May 2021 roadmap

  • [x] More vehicles
    • [x] Karts
    • [x] Outside-drifting bikes
    • [x] Quacker
    • [x] Blue Falcon
  • [ ] RKRD improvements
    • [x] Rewrite as a GCT
    • [ ] Support regions other than PAL
    • [ ] Automation options
  • [ ] KMP features
    • [ ] KTPT
    • [ ] CKPT/CKPH
    • [ ] POTI
    • [ ] AREA
    • [ ] JGPT
    • [ ] CNPT
  • [ ] KCL features
    • [x] Floor collision
    • [ ] Wall collision
    • [x] Off-road properties
    • [x] Boost panels
    • [ ] Ramps
    • [ ] OOB
    • [ ] Cannons
    • [ ] Moving road
  • [ ] Driving mechanics
    • [ ] SSMTs
    • [ ] Tricks
    • [ ] Respawn boost
    • [ ] Nosediving/taildiving
    • [x] Slipdrifts
  • [ ] CLI overhaul
    • [ ] Make RKRD optional
    • [x] Multiple runs
    • [ ] Configurable output
  • [ ] 3D renderer
    • [ ] Collision (KCL/BSP) view
    • [ ] BRRES view
      • [ ] Basic MDL0
      • [ ] Advanced MDL0
      • [ ] TEX0
      • [ ] CHR0

Future plans

  • 200cc
  • Custom tracks
  • Multiplayer mechanics
  • Advanced ghost analysis and statistics
  • Graphics reimplementation using Vulkan
  • Full game reimplementation (maybe)

Building

Install the latest version of Rust, then run:

cargo build --release

Running

Make a copy of your Mario Kart Wii disc with e.g. CleanRip.

Extract Common.szs and the Course directory with e.g. Dolphin or WIT.

Then run:

./target/release/hanachan Common.szs Course samples

Every ghost in the samples directory will be replayed and compared to a dump of the most important physics variables. The number of accurate frames will then be printed.

It is also possible to supply a single ghost file for more detailed output, or a single track file.

Contributing

At the moment, the codebase is evolving very fast and there is still some code I haven't integrated yet, so if you want to contribute non-trivial features, please tell me about it so we can properly coordinate.

Resources

Note: the vast majority of research and development happens on the PAL version of the game.

Ghidra project

mkw-structures

riidefi's decompilation

Symbol Map

Tockdom Wiki

License

Copyright 2003-2021 Dolphin Emulator Project

Copyright 2020-2021 Pablo Stebler

This software is available under the terms of the GNU General Public License, either version 2 of the License, or (at your option) any later version.