新(旧)3D高尔夫:将PC-9801和Virtual Boy移植到Mega Drive
T&E SOFT的《新3D高尔夫模拟系列》在日本Mega Drive上的移植是我最喜欢的高尔夫游戏,最近我一直在研究它们的ROM。和所有疯狂的想法一样,这一切都是从"我想知道是否可以……"开始的。在四月某个清晨的早些时候,我成功地从游戏中提取出了一条赛道——它的地形和飞行数据,并在我的一个自制的viewer中用Three.js重新实现了它。在接下来的一个星期里,经过持续的逆向工程,该viewer悄然成长为在浏览器中运行的类似3D高尔夫游戏。找到数据有一些重要线索:我们知道有18个洞,每个洞的距离和顺序,我还读到说赛道是由约256个点组成的,因此将所有这些启发结合在一起意味着找到数据要比大海捞针容易得多。如此了解数据也意味着我可以反向操作——回到原来的Mega Drive游戏中。首先,我添加了一个地形修改器。为了测试它,我将整个球场压平如同薄饼,以确认我的理解是正确的,然后将其调高到11,进入一种“超活跃地形模式”,使球道变得疯狂。这两者都效果很好。早期的一次尝试在每次运行时都改变了主意;结果我发现是从一个未初始化的内存位置生成的。🤦 没有调试控制台可用,我一直在以粗暴的方式寻找这样的bug——在卡带的SRAM(其电池备份的保存内存)中写入值并读取出来,这就像贫民窟的printf。因此这并不是完全简单的事。一旦解决了这些问题,我给这个32年的游戏设计了全新的自定义用户界面以相匹配。接下来我想知道,四个Mega Drive游戏的赛道数据是否相同,那么在其他平台的游戏中是否也相同?答案是肯定的:相同的赛道数据格式在整个系列中均得到了应用,从最初的PC-9801游戏(几乎肯定还有X68000和FM Towns)到Mega Drive甚至Virtual Boy。如果我的(小端)数学没有错,那么总共有7个独特的赛道,共享一种格式。需要进行一些重新格式化,但数据结构是相同的。既然我已经能够读取赛道数据,那我也可以写入它们——对游戏进行补丁,以随机选择一个赛道,或载入一个当初在Mega Drive上根本无法找到的赛道。将PC-9801移植到Mega Drive需要对多边形进行排序,以匹配预期的存储方式。但我想T&E SOFT在多年间使用相同的POLYSYS-CAD软件设计所有赛道?我喜欢这样的工具能够有如此的耐久性。最后那一部分特别有趣。(这还会更有趣吗?)以下是三个首次在Mega Drive上运行的赛道:T&E精选,提取自NEC PC-9801附加赛道盘:这条赛道稍微独特,因为它有使用彩色拓扑拼写的消息:第一个在发球台位置有“GO!”;第18个在最后一个果岭附近有“T&E”。八湖G.C. 同样提取自NEC PC-9801附加赛道盘:一个或许只有我关心的事实:在开发中,1990年2月之前,它是七湖G.C. 蝴蝶C.C. 提取自任天堂Virtual Boy游戏T&E Virtual Golf:它被称作Papillon——法语中的“蝴蝶”——因为赛道洞的布局呈现出蝴蝶的形状。这无疑是对Virtual Boy手柄形状的致敬。最后一个需要一点额外的工作。Virtual Boy上的T&E高尔夫没有洞的飞行经过,所以我不得不自己生成摄像机路径:从发球台到旗杆的贝塞尔曲线,朝mini-map上可见赛道的中心点微调。在Mega Drive上玩这些确实特别,付出的努力非常值得。我在这个过程中学到的一些事情。住在反汇编中几周后,我不断发现T&E SOFT多年前做出的那些小决策。有些聪明,有些悄悄地疯狂,所有这些让我微笑:洞太大三倍。球洞会抓住任何在~6.7英寸范围内的球——是实际洞半径的三倍——所以球从更远处落下,看起来比实际的远。为了320×224的屏幕,球和洞都是子像素。多边形预先排序。Mega Drive上没有深度缓冲区,因此绘制顺序嵌入到赛道数据中,回放顺序(画家算法)。显而易见:它与原始的PC-9801 CAD顺序不匹配。后旋可以逆转推杆。旋转不是装饰性的:它会反馈到滚动中,可以使球停止并向后滚动。在1993年的卡带中实现真实的弹道物理,太棒了!水不是障碍——只是非常黏。没有“进水”状态;水多边形的摩擦极高,瞬间就能阻止球。惩罚来自普通数学的结果。风是真实的力,而不是瞄准值的补偿。它成为在每个飞行帧上应用的水平加速度,
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡