← 返回信息流
AI 资讯Hacker News·3 小时前

复古3D高尔夫:将PC-9801与Virtual Boy移植至世嘉MD

原标题:New (Old) 3D Golf: Porting PC-9801 and Virtual Boy to Mega Drive

速览

开发者将原本运行在PC-9801和Virtual Boy平台上的3D高尔夫游戏成功移植至世嘉Mega Drive。这一项目展示了在经典硬件上重现复杂3D图形和跨平台兼容性的技术能力。对于复古游戏爱好者和硬件逆向工程研究者而言,这是一次重要的技术实践。

AI 深度解读

New (Old) 3D Golf:将 PC-9801 和 Virtual Boy 移植到 Mega Drive 的技术考古

背景

日本 T&E SOFT 公司开发的《New 3D Golf Simulation》系列(新3D高尔夫模拟)是许多玩家心中的经典高尔夫游戏。近期,一位开发者深入挖掘了该系列在 Sega Mega Drive(世嘉 MD)平台上的 ROM 数据,并由此开启了一项令人惊叹的技术逆向工程之旅。

这项工作的起因源于一个看似不可能的想法:“我能不能……”在一个四月的清晨,开发者成功从游戏中提取了一个球洞的地形和飞行数据,并使用 Three.js 在浏览器中重新实现了一个查看器。随着逆向工程的深入,这个查看器逐渐演变成了一个可以在浏览器中运行的 3D 高尔夫游戏。通过利用已知的线索——例如游戏包含18个洞、每个洞的距离和顺序,以及每个球场由约256个点构成——开发者比大海捞针更容易地找到了关键数据。

核心内容

从浏览器到硬件:逆向工程与修改

在理解了数据结构后,开发者决定反向操作,直接修改原始的 Mega Drive 游戏。他首先添加了一个地形修改器,通过将整个球场压平来验证理解的正确性,随后将其调整为一种“超活跃地形模式”,使球道变得扭曲狂野。

调试过程充满挑战。由于没有调试器控制台,开发者采用了一种“穷人的 printf”方法:将数值写入卡带的 SRAM(电池备份存档内存)并读取回来以排查 bug。例如,早期尝试中游戏每次运行都改变主意,最终发现是因为从未初始化的内存位置进行随机数种子生成。

在解决这些问题后,开发者为这款 32 年的老游戏设计了全新的自定义用户界面。

跨平台数据的通用性

开发者进一步推测,既然 Mega Drive 上的四个游戏使用相同的数据格式,那么其他平台上的游戏是否也共用同样的数据?答案是肯定的。从最初的 NEC PC-9801 游戏(以及几乎可以确定的 X68000 和 FM Towns 版本),到 Mega Drive,甚至 Nintendo Virtual Boy(虚拟男孩),整个系列都使用相同的高尔夫球场数据格式。

经过计算,共有7个独特的球场共享这一数据结构。虽然需要进行一些格式转换,但底层结构一致。既然能够读取数据,开发者也能够写入数据,从而修补游戏以随机选择球场,或加载那些原本未在 Mega Drive 上提供的球场。例如,将 PC-9801 的数据移植到 Mega Drive 时,需要对多边形进行排序以符合 MD 的存储预期。

这引发了一个有趣的推测:T&E SOFT 是否多年来一直使用相同的 POLYSYS-CAD 软件来设计所有球场?这种工具的生命力令人印象深刻。

三大跨平台球场的移植

以下是三个首次运行在 Mega Drive 上的移植球场及其背后的故事:

  1. T&E Selection

    • 来源:NEC PC-9801 附加球场磁盘。
    • 特色:该球场具有独特的彩色拓扑结构拼写信息:第1洞发球台附近有“GO!”字样,第18洞果岭后方有“T&E”字样。
  2. Eight Lakes G.C.(八湖高尔夫俱乐部)

    • 来源:NEC PC-9801 附加球场磁盘。
    • 冷知识:在1990年2月之前的开发阶段,该球场曾名为“Seven Lakes G.C.”(七湖高尔夫俱乐部)。
  3. Papillon C.C.(蝴蝶高尔夫俱乐部)

    • 来源:Nintendo Virtual Boy 游戏《T&E Virtual Golf》。
    • 特色:“Papillon”在法语中意为蝴蝶。球场布局呈蝴蝶形状,这很可能是对 Virtual Boy 控制器形状的致敬。
    • 技术挑战:Virtual Boy 版本没有球洞飞行视角(flyby),因此开发者必须自行生成相机路径:使用贝塞尔曲线从发球台到球洞,并根据迷你地图上的可见球场中心点进行微调。

逆向工程中的技术发现

在深入反汇编代码的数周里,开发者发现了 T&E SOFT 当年做出的一些巧妙甚至疯狂的设计决策:

  • 球洞过大:球洞半径约为6.7英寸,是真实球洞的三倍。这是为了适应 320×224 的低分辨率屏幕,因为球和球洞在屏幕上都是亚像素级别的,这是一种为了游戏性而做的妥协。
  • 多边形预排序:Mega Drive 没有深度缓冲区(Z-buffer),因此绘制顺序被硬编码在球场数据中,采用画家算法(从后往前)。这也解释了为什么数据顺序与原始 PC-9801 CAD 数据不一致。
  • 回旋球机制:后旋不仅仅是视觉效果,它会反馈到球的滚动中,甚至能让球在推杆时向后倒退。这在1993年的卡带中实现了真实的弹道物理。
  • 水的物理特性:水并非传统的“障碍区”状态,而是具有极高摩擦力的多边形。球一旦接触水面,摩擦力会在单帧内将其停止,惩罚机制源于物理计算而非状态判定。
  • 风的真实模拟:风不是瞄准的修正值,而是每一帧飞行中施加的水平加速度,与重力作用方式完全相同。
  • 奥古斯塔的风:在奥古斯塔球场中,风向从未真正改变,只改变风力强度。风向箭头的摆动是因为它是相对于相机绘制的。

历史档案的挖掘

为了理解游戏设计背后的“为什么”,开发者查阅了当时的日本计算机杂志,并通过 OCR 技术提取文本。1989年关于《Harukanaru Augusta》(遥かなるオーガスタ,PC-9801 原版)的开发访谈揭示了更多细节:

  • 3D 引擎先行:T&E 的 POLYSYS 引擎早于高尔夫游戏几年就已存在,曾用于《DAIVA STORY 7: Light of Kali Yuga》和《Psy-O-Blade》的3D片头动画。
  • 树木渲染:开发者曾尝试用多边形建模真实的树木(包括树叶),但绘制一棵树的时间相当于绘制整个屏幕,最终改用缩放精灵图(sprites)。
  • 地形演变:六年前的 BASIC 版本《3-D Golf Simulation》完全没有地形起伏,在 Sharp X1 上打完18洞需要半天时间。
  • 通用工具:POLYSYS 本意是通用渲染引擎,T&E 曾计划在其上开发 RPG 和射击游戏,并打算授权给其他软件公司。
  • 主要开发者:主要是加藤英治(Eiji Kato)一人负责。

奥古斯塔球场的幕后故事:

  • 官方授权:T&E 获得了奥古斯塔国家高尔夫俱乐部的官方合同,并基于俱乐部的蓝图工作。工作人员曾实地访问,虽未打球,但“脸颊贴着草地”。
  • 细节修正:奥古斯塔方面反馈了约60处修正意见,例如松树太矮太散、花朵太粉、沙坑沙子颜色不对等。
  • 无重玩机制:设计上不允许重打。虽然可以中途存档,但加载存档会清除数据,因此无法通过重打某个洞来刷低杆数。
  • 球童性别:开发版中的四名球童均为女性,而奥古斯塔的球童均为男性,因此最终版进行了替换。但在扩展关卡和 Mega Drive 版本中,女性球童又回归了。
  • 真实人物:T&E Selection 中的球童原型是 Brother Industries(兄弟工业)的四名女性员工,该公司通过 TAKERU 软件自动售货机销售这些附加球场磁盘。

关键要点

  • 数据通用性:T&E SOFT 的《New 3D Golf Simulation》系列跨越 PC-9801、X68000、FM Towns、Mega Drive 和 Virtual Boy 等多个平台,其核心球场数据格式高度统一,仅包含7个独特球场。
  • 逆向工程成果:开发者成功提取并移植了原本属于 PC-9801 和 Virtual Boy 的球场
查看原文 →blog.gingerbeardman.com