← 返回信息流
AI 资讯Hacker News·4 天前

Show HN:逆向工程还原1990年DOS游戏Test Drive III的世界地图

原标题:Show HN: I reverse-engineered the world maps of Test Drive III (1990 DOS game)

速览

一位开发者通过逆向工程手段,成功还原了1990年经典DOS赛车游戏《Test Drive III》的世界地图数据。这一工作展示了如何通过分析旧版游戏文件来提取和重构其底层地理信息。该成果不仅为复古游戏爱好者提供了新的探索视角,也体现了逆向工程在数字遗产保护方面的应用价值。

AI 深度解读

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

背景

《Test Drive III: The Passion》是由 Accolade 公司于 1990 年发行的一款经典 DOS 平台赛车游戏。对于许多玩家而言,这款游戏不仅以其竞速玩法著称,更因其广阔且充满探索乐趣的虚拟世界而闻名。作者回忆道,自己童年时期花费大量时间游玩该游戏,并非主要为了竞速,而是为了探索游戏中精心构建的世界。

随着游戏技术的迭代,许多经典游戏的源代码或资源文件逐渐遗失或难以获取。为了尽可能准确地重构这些珍贵的地图数据,作者在过去五年间断断续续地进行了逆向工程工作。近期,借助 AI 技术的辅助,该项目取得了突破性进展,使得完整还原游戏地图成为可能,尽管偶尔仍会出现“飞行汽车”或贴图缺失等因逆向工程局限性导致的视觉异常。

核心内容

该项目核心在于对《Test Drive III》游戏数据进行深度逆向工程,提取并重构其 3D 地图、纹理、模型及场景资源。以下是技术细节与项目结构的完整解读:

1. 数据格式与逆向工程细节

游戏使用的 3D 格式虽不复杂,但包含一些特殊结构,作者对其进行了详细解析:

  • 网格(Mesh)存储结构: 游戏中的每个图块(Tile)或对象都是一个小型网格,存储方式由三个平行的 16 位有符号整数数组组成,分别代表 X、Y、Z 顶点坐标。
  • 多边形记录: 坐标数据之后跟随 8 字节的多边形记录,包含多边形类型、顶点索引以及调色板颜色信息。
  • 头部信息: 上述数据前有一个简短的 4 字节或 8 字节头部。
  • 地图网格结构: 整个地图被定义为一个 32×16 的网格。每个单元格占用 2 字节:
    • 1 字节用于选择图块 ID(指向特定的网格模型)。
    • 1 字节打包了旋转角度和高度位信息。

2. 项目工具链与功能

作者开发了一套基于 Node.js 的工具链,用于提取、查看和转换游戏资源。主要命令包括:

  • 环境要求:Node.js 20.19+(由 Vite 7 要求)。
  • 核心功能命令
    • npm install:安装依赖。
    • npm run dev:启动开发服务器,在 http://localhost:5173 打开基于 Three.js 的 3D 查看器。
    • npm run build:构建项目,输出至 dist/ 目录。
    • npm run export:将所有地图和对象导出为 Wavefront OBJ 文件至 objs/ 目录。
    • npm run imgextract:将文档化的 DAT 图像导出为索引颜色 PNG 格式至 images/ 目录。
    • npm run spriteextract:从已知的场景渲染描述符库中提取透明场景精灵(Sprite)PNG,包括 SCENE02 的同族变体。
    • npm run lstview:查看 LST 文件内容(例如:npm run lstview -- public/base/SCENE01.LST)。
    • npm run imgview:从 DAT 文件提取 VGA 图像(例如:npm run imgview -- public/base/DATAB.BAT 0x151 12083 320)。

3. 项目目录结构

  • src/
    • browser/:仅浏览器端模块(Three.js 查看器)。
    • shared/:共享模块(提取逻辑、LZW/RLE 解码器)。
    • tools/:Node.js CLI 工具,包含 export/imgextract/spriteextract/lstviewer/imgviewer/ 子模块。
  • public/
    • base/:游戏数据文件(必需)。
  • objs/:导出的 Wavefront OBJ 文件。
  • images/:提取的 VGA 图像(PNG 格式)。
  • spec/:逆向工程后的《Test Drive III》文件格式文档。

4. 资源画廊与文档

项目提供了丰富的视觉预览,涵盖所有提取的 UI 资产、场景精灵、地图调色板和汽车设计。主要画廊包括:

  • Corvette ZR-1 资产画廊
  • Honda NSX 资产画廊
  • Lamborghini Diablo 资产画廊
  • Mythos 资产画廊
  • Chevrolet Corvette Stelvio 资产画廊
  • 场景精灵画廊

此外,spec/ 目录包含了针对游戏文件格式的逆向工程文档,为其他开发者研究该游戏数据提供了重要参考。

关键要点

  • 长期投入与 AI 辅助:该项目历时五年,近期结合 AI 技术显著提升了逆向工程的效率和准确性,成功重构了 1990 年的 3D 地图数据。
  • 独特的数据格式:游戏使用基于平行数组的 16 位顶点坐标和 8 字节多边形记录,地图采用 32×16 的紧凑网格结构,每个单元格仅用 2 字节存储图块 ID 和变换信息。
  • 完整的工具链支持:提供了一套完整的 Node.js 工具集,支持从 DAT 文件提取图像、从 LST 文件查看数据、导出 OBJ 模型以及提取透明精灵,极大降低了后续研究和可视化的门槛。
  • 丰富的资源提取:不仅提取了地图,还成功分离了车辆模型(如 Lamborghini Diablo、Honda NSX 等)、UI 资产、场景精灵和调色板,并提供了可视化的画廊索引。
  • 开源与文档化:项目公开了文件格式规范(spec/ 目录)和提取工具,促进了复古游戏数据的保存和研究。

意义与影响

  1. 数字文化遗产的保护:通过逆向工程保存《Test Drive III》的完整世界数据,防止了因硬件过时或软件老化导致的经典游戏内容丢失,为复古游戏研究提供了宝贵的数据样本。
  2. 技术复原的典范:该项目展示了如何从原始的二进制数据中解析出复杂的 3D 结构,特别是对于早期 DOS 游戏特有的数据格式(如 LZW/RLE 压缩、索引颜色图像)提供了清晰的解码案例。
  3. 社区协作与教育价值:开源的工具链和详细的文件格式文档,使得其他开发者、历史学家或游戏爱好者能够深入研究 90 年代初的 3D 游戏技术,理解当时的图形渲染限制与创新。
  4. AI 在传统工程中的应用:项目明确提到 AI 在解决逆向工程难题中的关键作用,展示了现代 AI 技术如何赋能传统的数据恢复和格式解析工作,提高了处理非结构化或半结构化旧数据的效率。
查看原文 →github.com