Show HN: I reverse-engineered the world maps of Test Drive III (1990 DOS game)
Summary
Reverse-engineered and extracted maps from the 1990 DOS game Test Drive III, providing an online viewer and OBJ exports. The project includes file format specifications and extraction tools.
View Cached Full Text
Cached at: 06/03/26, 06:37 AM
s-macke/Test-Drive-3-Maps
Source: https://github.com/s-macke/Test-Drive-3-Maps
Test-Drive-3-Maps
Reverse engineered and extracted maps of the DOS Game Test Drive III: The Passion by Accolade
As a kid, I played Test Drive III a lot. Not because of the racing, but simply to explore the world.
There was so much to see, so much to discover. This project is an attempt to reconstruct those maps as accurately as possible. Over the past five years, I have worked on it on and off. Now, with the help of AI, I am close to success. Apart from the occasional flying car and missing sprites.
The 3D format itself is nothing too exotic, but it does contain a few special cases. Each tile or object is a small mesh stored as three parallel arrays of 16-bit signed X, Y, and Z vertex coordinates, followed by 8-byte polygon records containing the polygon type, vertex indices, and palette color. These are preceded by a short 4- or 8-byte header.
A map is a 32×16 grid. Each cell is 2 bytes: a tile ID selecting one of those meshes, plus packed rotation and height bits.


Online Viewer
Extracted Images Gallery
Wavefront Object files are available in the objs directory.
Development
Prerequisites
- Node.js 20.19+ (required by Vite 7)
Installation
npm install
Running the Browser Viewer
npm run dev
Opens the viewer at http://localhost:5173
Building for Production
npm run build
Output is in the dist/ directory.
Exporting OBJ Files
npm run export
Exports all maps and objects to the objs/ directory.
Exporting PNG Images
npm run imgextract
Exports the currently documented DAT images as indexed-color PNGs to the images/ directory.
Exporting Scene Sprites
npm run spriteextract
Extracts transparent scene-sprite PNGs from the known scene render descriptor banks, including the SCENE02 same-family variant.
CLI Tools
# View LST file contents
npm run lstview -- public/base/SCENE01.LST
# Extract VGA image from DAT file
npm run imgview -- public/base/DATAB.DAT 0x151 12083 320
Project Structure
src/
├── browser/ # Browser-only modules (Three.js viewer)
├── shared/ # Shared modules (extraction logic, LZW/RLE decoders)
└── tools/ # Node.js CLI tools
├── export/ # OBJ exporter
├── imgextract/ # Batch DAT image → PNG exporter
├── spriteextract/ # Scene sprite extractor
├── lstviewer/ # LST file viewer
└── imgviewer/ # VGA image extractor
public/
└── base/ # Game data files (required)
objs/ # Exported Wavefront OBJ files
images/ # Extracted VGA images (PNG format)
spec/ # File format specifications
Extracted Images Gallery
For a visual overview and previews of all extracted UI assets, scene sprites, map palettes, and car designs, visit the Project Images Gallery Index. Each individual directory contains its own generated visual gallery:
- 📁 Corvette ZR-1 Asset Gallery
- 📁 Honda NSX Asset Gallery
- 📁 Lamborghini Diablo Asset Gallery
- 📁 Mythos Asset Gallery
- 📁 Chevrolet Corvette Stelvio Asset Gallery
- 📁 Scenery Sprites Galleries
File Format Specifications
The spec/ directory contains reverse-engineered documentation for Test Drive III file formats:
| File | Description |
|---|---|
| 3d-object-format.md | 3D polygon/vertex format used in tiles and objects |
| dat-file-layouts.md | DAT file offset tables and resource layouts |
| map-format.md | Race-track map format: tile grid, object placement block, color table, and header parameter struct |
| scene-render-descriptor-bank-format.md | Scene render descriptor bank family used by SCENE01.DAT, SCENE02.DAT, and SCENETT1.DAT |
| lst-file-format.md | LST resource index files (scene and car variants) |
| image-format.md | VGA image compression (LZW + RLE pipeline) |
| palette-format.md | VGA palette handling and color selection |
| color_remap.md | Paired-pixel lookup tables for sky/horizon gradient and road remapping |
| references.md | External reverse-engineering references and links |
Similar Articles
Reverse-engineering Codemasters' BIGF archive format in Ruby
A reverse-engineer explains how to read Codemasters' BIGF archive format from TOCA Race Driver using pure Ruby, focusing on the String#unpack method for binary decoding.
DOS Game "F-15 Strike Eagle II" reversing project needs DOS test pilots
The reverse engineering project for the 1989 DOS game F-15 Strike Eagle II has completed its C code reconstruction and is now seeking test pilots to find bugs in the executables, which can be used with the original game files.
Hop.earth – OpenStreetMap based car racing game
Hop.earth is a car racing game built on OpenStreetMap data, letting players race on real-world roads with elevation data from Copernicus DEM and other sources.
@QCXINT_: Someone recreated Google Maps' 3D mode in just 1.5 hours using Kimi K3. The result is a fully interactive 3D world map,…
A developer recreated Google Maps' 3D mode in 1.5 hours using Kimi K3 with just two prompts, producing an interactive 3D world map with extruded buildings, dynamic shadows, and smooth navigation.
Captain Bible Reverse Engineering
Peter Kelly's repository documents the reverse engineering of the 1990s DOS game Captain Bible in the Dome of Darkness, providing a reproducible QEMU environment, research notes, and a clean-room engine specification.