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 | 外部逆向工程参考和链接 |
相似文章
@oragnes: 卧槽,GitHub上刚挖到的神器map3d,基于OpenStreetMap,你在网页上框选一个区域,它就能自动把真实的建筑物、道路数据抓下来,一键渲染成自带高度的3D城市模型! 最狠的是还能直接导出GLB文件,塞进Blender或游戏引擎…
介绍GitHub上两个开源工具:map3d,基于OpenStreetMap自动生成3D城市模型并导出GLB文件;Voice-Pro,集成视频下载、人声分离、字幕识别、翻译、声音克隆配音和视频合成的本地工具。
tencent/HY-World-2.0
HY-World 2.0 是腾讯开源的跨模态3D世界模型,能够从文本、图像和视频中重建和生成3D世界,生成可编辑的3D资产(网格/高斯泼溅),效果与闭源方法相当。
HY-World 2.0:用于重建、生成和模拟三维世界的多模态世界模型
HY-World 2.0 是一个多模态世界模型框架,通过全景生成、轨迹规划和场景组合等专用模块,从文本、图像和视频中生成高保真度的三维高斯泼溅场景,在开源方法中实现了最先进的性能。
Show HN:我制作了一款基于战术地图的二战潜艇模拟器(公开测试版)
作者宣布了一款名为 Silent Shark 的基于战术地图的二战潜艇模拟器,目前处于公开测试阶段。该模拟器使用 Vite/TypeScript 构建,专注于水听器监听、航向估计和潜望镜目标识别,计划在 Steam、iOS 和 Android 上全面发布。
Google Just Turned Street View Into a Video Game
Google 在 IO 大会上发布的 Genie 3 实时视频生成器,可将 Google Maps 街景图像转换为可交互的 3D 世界,让用户像玩游戏一样自由探索真实场景。