This repository contains my reverse-engineering work of the European version of Mario Kart DS (game code AMCP
): ASM-hacking, better understanding of yet not fully documented DS/MKDS formats, additional tools (like a save editor) and hopefully more:
YouTube video showcasing an ASM-hack injection of a custom scene with custom dialogs
Screenshots of the online save editor
Reversing save-data formats and encryption/decryption allowed me to create an almost fully-featured online Mario Kart DS save editor:
Check out the ASM-hacking examples for more detailed information on how to inject custom code in MKDS, using generated headers and symbols of my reverse-engineering work on this game.
For practical purposes (to make my life easier) I made a simple command-line tool, mkdsutil, in order to work with several MKDS formats in a more straightforward way (better than staring into a hex editor).
It currently has the following features:
-
Decrypt and/or encrypt save data
-
Print info/fields of decrypted save data
You will need CMake in order to compile it, without any external dependencies other than standard C++.
If you wish to make your own tools or extend these ones, you may be interested in the C++ code covering various MKDS formats and utils.
-
GBATEK for its great (although sometimes limited/outdated) DS docs
-
mkds-asm containing some basic reference MKDS RE work
-
Existing MKDS decomp headers for being a great reference for so many internal structs and types
-
Super Mario Wiki for allowing me to understand some basic gameplay aspects without having to spend hours playing or watching gameplay footage :P
-
Pokémon Diamond decompilation as a helpful reference for already (partially) understood DS SDK code
-
'Hacking Nintendo DS' EnHacklopedia page as the only (and great) specifications I found regarding DS cheat codes
-
NCPatcher as a great tool for simplifying the process of making DS ASM hacks
-
Custom Mario Kart Wiiki for providing me some understanding of WFC-related fields and data