mkdedede 0.3.0

Rust crate for decoding and encoding Mario Kart ghost data passwords (Double Dash!! and DS)
Documentation
  • Coverage
  • 20.61%
    47 out of 228 items documented2 out of 38 items with examples
  • Size
  • Source code size: 114.14 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 7.51 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 18s Average build duration of successful builds.
  • all releases: 23s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • tpglitch/mkdedede
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • tpglitch

MKDedede

A Rust crate for decoding and encoding Mario Kart: Double Dash!! and Mario Kart DS ghost data passwords


The games generate a 16-character password after a time trial that encodes some info about them. This crate parses and validates those passwords.

Double Dash ported from the JavaScript decoder by WaluigiBSOD.

DS ported from the C decoder by simontime.

Simple Double Dash decoding example

use mkdedede::double_dash::decode;

match decode("SOME16CHARPASSWD") {
    Ok(ghost) => println!("{}", ghost),
    Err(e)    => eprintln!("invalid password: {}", e),
}

Usage from C/C++ (FFI)

We provide an FFI layer that exposes C-compatible functions to decode and encode passwords!

To build for C/C++, use cargo to build the native bindings:

cargo build --release

This will produce .so, .dylib, or .dll (and their respective static architectures) inside target/release/.

Include the provided header from include/mkdedede.h in your project and link the output shared library.

#include <stdio.h>
#include "mkdedede.h"

int main() {
    MkddGhostDataC data;
    MkdededeDecodeStatus status = mkdedede_mkdd_decode("SOME16CHARPASSWD", &data);

    if (status == MKDEDEDE_SUCCESS) {
        printf("Course: %d\n", data.course);
        // ...
    } else {
        printf("Decode failed with status: %d\n", status);
    }
    return 0;
}

License

AGPL-3.0, see LICENSE