Show HN:我逆向工程了《Test Drive III》(1990年DOS游戏)的世界地图
摘要
对1990年DOS游戏《Test Drive III》的地图进行了逆向工程和提取,提供了在线查看器和OBJ导出功能。该项目包含文件格式规范及提取工具。
查看缓存全文
缓存时间: 2026/06/03 06:37
s-macke/Test-Drive-3-Maps
来源:https://github.com/s-macke/Test-Drive-3-Maps
Test-Drive-3-Maps
对由 Accolade 开发的 DOS 游戏 Test Drive III: The Passion 的地图进行逆向工程和提取。
小时候,我经常玩 Test Drive III。不是因为竞速,而是单纯为了探索这个世界。
这里有太多风景可看,太多事物可以发现。这个项目试图尽可能精确地重建这些地图。过去五年里,我断断续续地投入工作。现在,借助 AI 的帮助,我接近成功了——除了偶尔出现的飞车和缺失的精灵。
3D 格式本身不算特别奇特,但确实包含一些特殊情况。每个瓦片或对象都是一个小的网格,存储为三个并行的 16 位有符号 X、Y、Z 顶点坐标数组,随后是 8 字节的多边形记录,包含多边形类型、顶点索引和调色板颜色。这些数据前面还有一个 4 或 8 字节的短头部。
地图是一个 32×16 的网格。每个单元格占 2 字节:一个瓦片 ID 选择其中一个网格,加上打包的旋转和高度位。
游戏场景
提取的游戏车辆
在线查看器 (https://s-macke.github.io/Test-Drive-3-Maps/)
提取的图像画廊
Wavefront Object 文件可在 objs 目录中获取。
开发
先决条件
- Node.js 20.19+(Vite 7 需要)
安装
npm install
运行浏览器查看器
npm run dev
在 http://localhost:5173 打开查看器
构建生产版本
npm run build
输出在 dist/ 目录中。
导出 OBJ 文件
npm run export
将所有地图和对象导出到 objs/ 目录。
导出 PNG 图像
npm run imgextract
将当前有文档记录的 DAT 图像导出为索引色 PNG 到 images/ 目录。
导出场景精灵
npm run spriteextract
从已知的场景渲染描述符库(包括 SCENE02 同族变体)中提取透明场景精灵 PNG。
CLI 工具
# 查看 LST 文件内容
npm run lstview -- public/base/SCENE01.LST
# 从 DAT 文件中提取 VGA 图像
npm run imgview -- public/base/DATAB.DAT 0x151 12083 320
项目结构
src/
├── browser/ # 仅浏览器模块(Three.js 查看器)
├── shared/ # 共享模块(提取逻辑、LZW/RLE 解码器)
└── tools/ # Node.js CLI 工具
├── export/ # OBJ 导出器
├── imgextract/ # 批量 DAT 图像 → PNG 导出器
├── spriteextract/ # 场景精灵提取器
├── lstviewer/ # LST 文件查看器
└── imgviewer/ # VGA 图像提取器
public/
└── base/ # 游戏数据文件(必需)
objs/ # 导出的 Wavefront OBJ 文件
images/ # 提取的 VGA 图像(PNG 格式)
spec/ # 文件格式规范
提取的图像画廊
有关所有提取的 UI 资源、场景精灵、地图调色板和汽车设计的视觉概览和预览,请访问 项目图像画廊索引。每个单独的目录都包含自己生成的视觉画廊:
- 📁 Corvette ZR-1 资源画廊
- 📁 Honda NSX 资源画廊
- 📁 Lamborghini Diablo 资源画廊
- 📁 Mythos 资源画廊
- 📁 Chevrolet Corvette Stelvio 资源画廊
- 📁 场景精灵画廊
文件格式规范
spec/ 目录包含 Test Drive III 文件格式的逆向工程文档:
| 文件 | 描述 |
|---|---|
| 3d-object-format.md | 瓦片和对象中使用的 3D 多边形/顶点格式 |
| dat-file-layouts.md | DAT 文件偏移表和资源布局 |
| map-format.md | 赛道地图格式:瓦片网格、对象放置块、颜色表和头部参数结构 |
| scene-render-descriptor-bank-format.md | SCENE01.DAT、SCENE02.DAT 和 SCENETT1.DAT 使用的场景渲染描述符库族 |
| lst-file-format.md | LST 资源索引文件(场景和车辆变体) |
| image-format.md | VGA 图像压缩(LZW + RLE 流水线) |
| palette-format.md | VGA 调色板处理和颜色选择 |
| color_remap.md | 用于天空/地平线渐变和道路重映射的对像素查找表 |
| references.md | 外部逆向工程参考和链接 |
相似文章
逆向工程 Comanche 地形图
详细讲解如何逆向工程 NovaLogic 的 Comanche 游戏文件,以解码其 Voxel Space 地形渲染算法所使用的原始高度图和颜色数据,包括编写 ANSI C 程序将这些数据转换为 BMP 图像。
反编译《快餐大亨2》:绘制世界
一篇深入剖析《快餐大亨2》反编译过程的文章,重点还原游戏世界/地图的渲染方式与结构。
逆向工程游戏:关于游戏反编译、重编译、VR 与网页/3D 移植的全部新闻
The Verge 的这期盘点聚焦于逆向工程游戏的热潮:通过反编译和重编译技术,让《塞尔达》《Halo》《Lego Racers》等经典游戏摆脱专有代码和原始硬件的束缚,移植到新设备,或以彻底改变原作的方式进行改造——包括在 Vision Pro 上运行的 Half-Life: Alyx,同时探讨了 AI 辅助开发及法律灰色地带的问题。
使用Ruby逆向工程Codemasters的BIGF存档格式
一位逆向工程师解释了如何使用纯Ruby从《TOCA Race Driver》中读取Codemasters的BIGF存档格式,重点介绍使用String#unpack方法进行二进制解码。
Show HN:我把 DOOM 变成了一个 Transformer
Show HN:一个将整数神经网络编译成 ZDoom 地图的项目,让 DOOM 的巫毒娃娃和扇区属性来执行运算,并通过 NumPy 进行了逐比特精确验证。虽然速度极慢,但完全可验证,还能让玩家实时手写数字供 DOOM 进行分类。