Cite as
doldecomp/mkdd
Original
https://github.com/doldecomp/mkdd
Pinned
doldecomp/mkdd @ 1d2918ca577817ba431baddb78dda24831e0e0bb
Accessed
2026-10-22
Licence
CC0 1.0 Universal (LICENSE), for the decompilers' own work; the game is Nintendo's
Credit
SwareJonge, who started the project, and the doldecomp contributors' work-in-progress C++ decompilation of Mario Kart: Double Dash!!. Names and comments quoted in mkdd claims are theirs.
Notes
The README calls it a "WIP 1:1 Decompilation", says the repo holds no game assets or assembly, and says "Currently only the debug version is supported": the build target is `MarioClub_us` (USA), a debug build, not the retail release. configure.py marks each source file `Matching` (linked and byte-checked against the game) or `NonMatching` ("Object does not match and should not be linked"); at the pinned commit the item manager, Sato/ItemObjMgr.cpp, is NonMatching, and many kart functions are still empty bodies, among them `KartGame::MakeStartDash` and `KartGame::CheckDriftTurbo` (src/Yamamoto/kartCtrlStrat.cpp, also NonMatching). The item odds are data the game loads from /Item/ItemSlotList*.dat on the disc, so their values aren't in the repo. The repo also holds tools, symbol and split configuration (config/), and objdiff assets; the atlas fetches only src/, include/, configure.py, the README, and the license.

Cited on

Claims (2)

In the doldecomp decompilation of Mario Kart: Double Dash!!, which builds a USA debug version (MarioClub_us) and whose item manager, Sato/ItemObjMgr.cpp, does not yet match the game's code, the item pick reads byte weights from a file on the disc, /Item/ItemSlotList.dat (or ItemSlotList1.dat or ItemSlotList2.dat, by the race's item-slot type). The file holds lists, each with a row of weights for every place, and a Grand Prix or Versus pick reads the row for the kart's place less one. Outside LAN play, Grand Prix reads a list by engine class (150cc and Mirror share one) for human players and the next list for CPU drivers, and Versus reads one list for every driver by the number of karts, two to four. The pick adds the row's weights for nine common kinds and for the driver's own special item, draws a whole number below the total (computed), and walks the running sum. The special's weight is multiplied by 1.5 when the two riders are a default pairing (isDefaultCharCombi), and the special is left out when the partner holds or stocks a special item, or when it is ItemHeart and the kart already has one; four common kinds (ItemThunder, ItemStar, ItemKinokoSuc, and ItemFlyTurtle, which the atlas reads as the Spiny Shell) are left out when the partner holds or stocks the same kind. startShuffle clears the flag the code calls _7, and startItemShuffleSingle sets it when its doShuffle argument is true; with it set, the pick first draws among the specials alone. setDynamicRate, which copies the weights the pick reads, writes 0 for any kind whose IsAbleToCreateItem is false (a function the decompilers comment as fabricated), and in Grand Prix multiplies the CPU list's ItemFlyTurtle weight by 1.5 while RivalBodyCtrl::isPlayerFirst() is true. In Grand Prix, Mario Kart 64 instead reads one byte from a 100-slot row for the place, from a human or a CPU table, with no partner or character in the pick.README.md L13–17README.md L80configure.py L357configure.py L1303include/Sato/ItemObjMgr.h L76–89src/Sato/ItemObjMgr.cpp L1638src/Sato/ItemObjMgr.cpp L1647–1662src/Sato/ItemObjMgr.cpp L1664–1699src/Sato/ItemObjMgr.cpp L1719–1749src/Sato/ItemObjMgr.cpp L1753–1763src/Sato/ItemObjMgr.cpp L1766–1795src/Sato/ItemObjMgr.cpp L1843–1853src/Sato/ItemObjMgr.cpp L1881–1900src/Sato/ItemObjMgr.cpp L1564–1571src/Sato/ItemObjMgr.cpp L371–424src/Sato/ItemFlyTurtle.cpp L732–737src/Sato/ItemObjMgr.cpp L1957–1966src/Sato/ItemObjMgr.cpp L1974–1995src/Sato/ItemObjMgr.cpp L2024–2046src/Sato/ItemObjMgr.cpp L2059–2070src/Sato/stMath.cpp L511–513include/JSystem/JMath/JMath.h L217–228src/Kaneshige/KartInfo.cpp L526–531src/Sato/ItemObjMgr.cpp L1815–1838src/Sato/ItemObjMgr.cpp L1224include/Sato/ItemObjMgr.h L70–73src/Sato/ItemObjMgr.cpp L1325–1331src/Sato/ItemObjMgr.cpp L64Code notes
In the doldecomp decompilation of Mario Kart: Double Dash!!, which builds a USA debug version (MarioClub_us) and whose item manager, Sato/ItemObjMgr.cpp, does not yet match the game's code, King Boo and Petey (character IDs 19 and 20) get an ItemRndSpecialShuffleMgr for their item picks, as every driver does in Balloon Battle and the battle the code calls ESCAPE_BATTLE; other drivers get the plain ItemShuffleMgr. Where the plain pick adds one special item, the driver's own, the random-special pick adds all nine specials, each weighted from the row's columns 18 to 26, counting from 0 (slotTable[1][i + 18] for i from 0 to 8, computed) and multiplied by 1.5 for a default pairing unless isMiniGame() is true, and leaves out the heart when the kart already has one. It leaves all nine out when the partner holds or stocks a special item. In Grand Prix, Mario Kart 64's pick takes only the place and whether the driver is a CPU.README.md L13–17configure.py L1303include/kartEnums.h L101–102src/Sato/ItemObjMgr.cpp L176–193src/Sato/ItemObjMgr.cpp L1222include/Sato/ItemObjMgr.h L105–133src/Sato/ItemObjMgr.cpp L1564–1571src/Sato/ItemObjMgr.cpp L1974–1995src/Sato/ItemObjMgr.cpp L2103–2111src/Sato/ItemObjMgr.cpp L2005–2019src/Sato/ItemObjMgr.cpp L2135–2150Code notes