Reverse-engineering notes on Wacky Wheels (Beavis Soft / Apogee Software, 1994) — the DOS kart racer that is usually introduced as "the Super Mario Kart clone for the PC".
This repository documents the shipped game data: the WACKY.DAT archive, the
track and sprite formats, the fixed-point look-up tables that drive the pseudo-3D
floor renderer, and the save/config files. Everything here was derived from the
retail files of the GOG.com release (the original 17 Oct 1994 build, v1.1
"registered and upgraded"), not from any fan source reconstruction.
Documentation only. No game assets, no extracted art, no executable code is
committed here. The tools in tools/ reproduce every figure and table
from your own legally obtained copy.
There is a fan-made source recreation of Wacky Wheels in circulation. It is deliberately not used as a reference anywhere in this repo: the point of the exercise is archaeological — what the 1994 build actually contains, and what that tells us about how it was made.
| Doc | Contents |
|---|---|
| 00-overview.md | Release, build chain, credits, content layout (42 track slots) |
| 01-wacky-dat.md | The WACKY.DAT archive, including the two-byte offset bug baked into the shipped file |
| 02-graphics.md | PCX variant, .SP sprite banks, SPRITE.ATR, the WxH.INF pre-compiled scalers, fonts |
| 03-tracks.md | .GAM .M .POS .PAR .SIN .RD .SPW and the 2048×2048 tiled world |
| 04-engine-tables.md | TRIG.DAT, SLP, VIEW, NDIST, MAP.XY, VEL*.TAB — the renderer's LUTs |
| 05-audio.md | .MID, .KLM, .VOC, AUDIOT.FX, the Apogee Sound System |
| 06-config-and-saves.md | WACKY.CFG, WACKY.ING, .HI/.TIM/.HTT/.OTT, WACKY.DTT, MODEM.PCK, exit screens |
| 07-vs-mario-kart.md | What is genuinely Mario Kart, what is genuinely Wolfenstein, what is neither |
| 08-open-questions.md | Everything still unresolved, with the evidence gathered so far |
| 09-skunny-kart.md | Skunny Kart (Copysoft, 1994): the bit-rotated .LID container, eleven byte-identical files, and the seven-cycle rename of the track extensions |
| 10-the-developers-account.md | Andy Edwardson's first-hand history of the project, checked point by point against the shipped files |
| 11-other-kart-racers.md | Atari Karts (Jaguar, 1995) and Kart Race (DOS, 1996) run against the same fingerprints — both clear — and four independent answers to one rendering problem |
| notes/wacky-dat-inventory.md | All 577 archive entries |
Pure Python 3 (numpy + pillow only for the rendering helpers).
tools/wwdat.py WACKY.DAT directory reader / extractor
tools/wwpcx.py the PCX variant used by the game (2 stray bytes up front)
tools/wwsp.py .SP column-major sprite banks
tools/wwtrack.py .GAM/.M/.POS/.RD/.SPW/.SIN parsers + world-texture rebuild
tools/wwtables.py TRIG.DAT / SLP / VIEW / NDIST / MAP.XY / VEL*.TAB
tools/wwsaves.py .HI / .TIM / .DTT record readers
tools/wwexport.py one-shot: extract the archive and render every asset to PNG
tools/lidlib.py Skunny Kart .LID archives (bit-rotated container)
tools/wwcompare.py content-hash cross-reference between two extracted dirs
python tools/wwdat.py "<install>/WACKY.DAT" extract ./out
python tools/wwexport.py ./out ./png
python tools/lidlib.py "<skunny>/SKUNNYK.LID" extract ./sk
python tools/wwcompare.py ./out ./skChapter 11 runs two more kart racers of the period against the same fingerprints — Atari Karts on the Jaguar and Mirinae's Kart Race on DOS — and clears both, which leaves Skunny Kart as the only relative Wacky Wheels has.
Chapter 10 checks Andy Edwardson's own history of the project — the only
surviving first-hand account, given to the Apogee FAQ — point by point against
the shipped files. It corroborates most of what the bytes already said, and
resolves DOPE.SP: a 165 x 72 strip holding the Dopefish cameo, with
BELCH.VOC supplied by Joe Siegler, a microphone and a two litre bottle of
Diet Coke.
Also documented: Skunny Kart (Copysoft / Edisys, 1994). Its .LID archives
are obfuscated with a per-byte rotate-left-by-one; underneath, eleven files are
byte-identical to Wacky Wheels — including the incrementally generated
TRIG.DAT sine table with its characteristic drift — and the seven per-track
file extensions have been permuted by a single seven-cycle. Six of the seven
Wacky Wheels parsers read Skunny Kart's data unmodified; the seventh needed one
line, because Skunny Kart's descriptor inserts a sixth asset name. See
09-skunny-kart.md.
First pass. The archive, the track data model, the sprite storage, the renderer
look-up tables and the save formats are solved and round-trip cleanly. The
WxH.INF scaler byte-code, WACKY.SDX, *.BMC and a handful of sprite banks
with non-factorable sizes are partially understood — see
08-open-questions.md.
Wacky Wheels is © 1994 Apogee Software, Ltd. / Beavis Soft. Skunny Kart is © 1994 Copysoft / Edisys SCRL. This repository is independent documentation and ships neither.