Show HN:我逆向工程了《Test Drive III》(1990年DOS游戏)的世界地图

Hacker News Top 工具

摘要

对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 资源、场景精灵、地图调色板和汽车设计的视觉概览和预览,请访问 项目图像画廊索引。每个单独的目录都包含自己生成的视觉画廊:

文件格式规范

spec/ 目录包含 Test Drive III 文件格式的逆向工程文档:

文件描述
3d-object-format.md瓦片和对象中使用的 3D 多边形/顶点格式
dat-file-layouts.mdDAT 文件偏移表和资源布局
map-format.md赛道地图格式:瓦片网格、对象放置块、颜色表和头部参数结构
scene-render-descriptor-bank-format.mdSCENE01.DATSCENE02.DATSCENETT1.DAT 使用的场景渲染描述符库族
lst-file-format.mdLST 资源索引文件(场景和车辆变体)
image-format.mdVGA 图像压缩(LZW + RLE 流水线)
palette-format.mdVGA 调色板处理和颜色选择
color_remap.md用于天空/地平线渐变和道路重映射的对像素查找表
references.md外部逆向工程参考和链接

相似文章

@oragnes: 卧槽,GitHub上刚挖到的神器map3d,基于OpenStreetMap,你在网页上框选一个区域,它就能自动把真实的建筑物、道路数据抓下来,一键渲染成自带高度的3D城市模型! 最狠的是还能直接导出GLB文件,塞进Blender或游戏引擎…

X AI KOLs Timeline

介绍GitHub上两个开源工具:map3d,基于OpenStreetMap自动生成3D城市模型并导出GLB文件;Voice-Pro,集成视频下载、人声分离、字幕识别、翻译、声音克隆配音和视频合成的本地工具。

tencent/HY-World-2.0

Hugging Face Models Trending

HY-World 2.0 是腾讯开源的跨模态3D世界模型,能够从文本、图像和视频中重建和生成3D世界,生成可编辑的3D资产(网格/高斯泼溅),效果与闭源方法相当。

Google Just Turned Street View Into a Video Game

Reddit r/singularity

Google 在 IO 大会上发布的 Genie 3 实时视频生成器,可将 Google Maps 街景图像转换为可交互的 3D 世界,让用户像玩游戏一样自由探索真实场景。