《毁灭战士》如何登上超级任天堂

图片

本文是《 Game Engine黑皮书: DOOM 》一章的翻译, 该书 对最有影响力的id软件游戏之一的内部结构进行了详细分析。 本章讨论将 DOOM 移植 到超级任天堂 的复杂过程, 以及 Star Fox 开发人员 Argonaut Games 在其中扮演的关键角色

这本书是由作者兼程序员Fabien Sanglar撰写的,其全文现在可以纸质和数字形式购买。

超级任天堂娱乐系统于1990年在日本发布,并于次年在美国和欧洲出现。

她成为8位NES的16位后代。 在日本,Super Famicom(FAMIly COMputer)取得了立竿见影的效果,最初的30万台设备在数小时内就被抢购一空。 兴奋如此强烈,以至于政府要求任天堂未来在周末发布其游戏机,以避免动乱。

为了确保高质量的游戏机,任天堂创建了一个无情的控制系统。 发行商有权每年仅发行五款游戏。 为了应用此规则,任天堂保留仅自行制造墨盒的权利; 出版商被迫从任天堂购买它们。 为了使每个人都能遵守规则(并防止游戏被复制),在开始游戏之前,SNES控制台检查是否存在CIC芯片。 这是一个强大的防御机制,只能在SNES生命周期的尽头才能被破解。

在游戏机生命的九年中,发行了721款游戏,其中包括超级马里奥世界Super Mario World) ,《 塞尔达传说》(Zelda III) [ 塞尔达传说:与过去的联系 ], 马里奥赛车Mario Kart)F-Zero超级银河战士和大金刚Donkey Kong)国家 。 在整个销售期间,已经售出了将近5000万台游戏机,因此就销售量和游戏类别而言,SNES被视为历史上最受欢迎的游戏机之一。

SNES在技术上优于2D图形领域。 其频率为3.58 MHz的16位65C816处理器具有128 KB RAM。 他控制了具有64 KB RAM的PPU(图像处理单元),该RAM处理大尺寸的精灵,并可以以256x240的分辨率支持多达256种颜色。 控制台的声音系统由8位Sony SPC700处理器和16位数字信号处理器与64 KB专用RAM的强大组合组成。

尽管具有令人印象深刻的引擎来处理二维精灵,尤其是模式7功能,但该机器仍缺乏3D计算等计算量大的操作的优势。 任天堂清楚地意识到3D将是游戏开发的下一个重要阶段,但它没有实现它的能力。 一家命运不大的英国小公司找到了解决这个问题的办法。

淘金游戏


1982年,Jez San单手开发了专门为C64,Atari ST和Amiga计算机设计的游戏。 他需要一家公司来出售他的作品。 从Argonauts的神话中看到他的名字(J. San)和Jason(Jason)之间的相似之处,他将其称为Argonaut Games plc。

该公司已经很久没有保持单人合奏了。 到1990年,他已经在公司伦敦办公室聚集了才华横溢的人,并且他对1989年发布的Nintendo Game Boy便携式游戏机感兴趣。 该团队设法完成了两项看似几乎不可能的壮举:他们创建了线框3D引擎并破解了CIC防御程序,将其安装在Game Boy上。

“ Nintendo徽标从屏幕顶部下降,当它到达中间时,引导程序会检查徽标是否在正确的位置。

仅当该单词位于ROM的正确位置时,才启动游戏。 如果有人想在未经任天堂许可的情况下制作游戏,则必须在未经许可的情况下使用任天堂这个词; 因此,任天堂可以提起商标诉讼。 我们发现这只是一个电阻和一个电容器-零件成本约为1美分-并且想出了如何使保护无效的方法。 系统会两次读取Nintendo一词-第一次在引导过程中将其显示在屏幕上,第二次-在从墨盒中启动游戏之前检查其是否正确。 这是一个致命的错误-控制台第一次读取Nintendo一词时,我们使它返回了Argonaut,以便它降落到屏幕顶部。 在第二个测试中,我们向电阻器和电容器加电,以使正确的词是Nintendo,并且游戏加载时没有任何问题。”- Jez San, 摘自 2014 Eurogamer采访

在CES '90上,他从任天堂展位展示的演示引擎一直到公司位于京都的办公室一直使用。 杰斯当时不知道这件事,但他选择了完美时机。 就在那时,任天堂还在日本为Super Famicom制作游戏,该游戏原本应该在游戏机发行时就显示出其技术优势。 《超级马里奥世界》还处于起步阶段,但飞行模拟器Pilotwings已经是一个更加复杂的游戏。

为了模拟地形, Pilotwings使用了PPU设备的模式7模式(能够执行仿射变换,如旋转,缩放和将图像分割成多个部分)以及HDMA模式。 但是,飞机本身仍然是通常的二维手绘精灵。 这让游戏的制作人宫本茂(Shigeru Miyamoto)感到不安,因为他不允许相机在飞机周围顺畅旋转(破碎的碎片不均匀)。

当时,任天堂不喜欢与第三方公司合作,甚至不喜欢与外国人合作。 但是这次,他们例外了,邀请Jeza与从事3D引擎工作的Dylan Cuthbert一起前往京都总部。

年轻人(济州23岁,迪伦18岁)会见了任天堂的所有副总裁:宫本,古平·横井,伊竹武宏,皆川康宏和武田健夫。 从秘密的SNES到秘密的MarioPilotwings,向他们展示了所有内容。 然后询问他们是否有可能找到一种将平面渲染为真实多边形对象的方法。

“我告诉他们这是他们可以达到的最好,除非他们让我设计设备,以使SNES在3D方面变得更好。 令人惊讶的是,即使我以前从未做过设备,他们还是说“是”并给了我一百万美元出售。” -杰斯·桑

杰兹大胆地答应他们将生产力提高“十倍”,因此任天堂高兴地接受了为游戏开发特殊装备的提议。 飞行员翼必须与精灵平面一起释放才能赶上Super Famicom,但是后来称为Super FX的芯片将用于另一个Nintendo项目。

它被称为星狐

星狐


根据协议,任天堂有权对游戏设计做出所有决定,并且还资助Argonaut Games不仅生产设备,还为游戏提供3D引擎。 耶斯桑立即开始聘用他认识的英国专家。

为了开发设备,他与Flare Technology(设计Atari Jaguar的人)签署了一项协议。 Ben Cheese,Rob Macaulay和James Hakeville的项目代号为Mathematical Argonaut Rotation I / O或MARIO。 结果,他们创造的设备如此强大,以至于他们开玩笑地称Super NES为“只是用来安装我们芯片的盒子”。 由于无法升级游戏机,因此将该芯片焊接到每个新游戏盒中,从而大大提高了零售价。

“我们开发Super FX芯片的方式是我们之前没有人设计过设备的-首先,我们创建了软件并使用了自己的指令集来优化软件。 没有人这样做! 实际上,我们没有开发3D芯片,而是开发了具有数学功能和像素渲染功能的全功能RISC微处理器,其余的则由软件处理。 它是世界上第一个视频处理单元(图形处理单元),我们拥有证明这一点的专利。”-Sun Jez

卡尔·格雷厄姆(Karl Graham)和皮特·沃恩斯(Pete Warns)在该公司伦敦办公室工作,而迪伦·库斯伯特(Dylan Cuthbert),克里斯特·沃贝尔(Christer Wombell)和吉尔斯·戈达德(Gilles Goddard)(以及后来的科林·里德)迁往任天堂在京都的办公室,并与宫本团队紧密合作。

该项目获得了商业和技术上的成功。 《星际福克斯》于1993年2月21日发行,销量达400万张。

两家公司之间关系的进一步历史令人遗憾。 超级热门的《 星际福克斯2 》的续集由Argonauts完成,并准备在1996年发布,但任天堂突然中断了该项目,担心它会对Nintendo 64的发布产生影响。Argonaut不喜欢这样,与任天堂的关系也因此恶化。 后来,任天堂将戈达德和翁贝拉引诱给他。 迪伦·库斯伯特(Dylan Cuthbert)也可以加入他们的行列,但是他被禁止竞争条款所阻止。 他退出了Argonaut,并在Sony工作,开始在PlayStation上工作。

当任天堂不允许Argonaut在公司计划在PS1上发布的平台游戏中使用Yoshi的角色时,两家公司的“离婚”结束了。 结果,他们用鳄鱼代替了Yoshi,并将其命名为游戏Croc:The Gobbos Legend 。 任天堂后来发布了Mario 64 ,其机械师可疑地类似于Croc ...甚至赢得了大约一年的市场。


MARIO芯片的设计基于16位RISC处理器,频率为10.74 MHz,并具有5​​12字节i-cache。 他有一套针对数学计算进行了优化的指令,以及自己的针对放置像素进行了优化的帧缓冲区。 他的工作是将其渲染到帧缓冲区中,然后使用DMA将其定期传输到SNES RAM中。 它每秒可以渲染多达76,458个多边形,这为Star Fox提供了约15 fps的速度。

见证了《 星际福克斯》的巨大成功之后,其他工作室对它的技术产生了兴趣。 该芯片的新版本称为GSU,能够以21.4 MHz的频率运行。 第一代GSU在四款游戏中使用过:《 Dirt Racer》 ,《 Dirt Trax FX》 ,《 Stunt Race FX》和《 Vortex》

第二代(GSU-2)具有相同的处理器,具有21.4 MHz的频率,并且将附加触点焊接到总线上,以增加受支持的ROM和帧缓冲器的大小。 它被用于三款游戏: DOOMSuper Mario World 2:Yoshi's IslandWinter Gold

如果打开DOOM墨盒,则可以看到上述所有组件:

[1] 16位GSU-2, [2]写入GSU的512 KB帧缓冲区, [3] 2兆字节ROM,其中存储了代码和资源, [4]六个逆变器模块, [5] ]用于复制保护的CIC芯片。

“在我看来,十倍的生产率增长是一个过分的夸大。 我们不知道这是否真的可能。 但这使我们夸大了,同时也超出了诺言。 实际上,我们没有将3D性能提高十倍,而是将其提高了40倍。 在某些领域,例如数学3D计算,增长甚至是一百倍。 该芯片不仅可以执行3D计算并处理矢量图形,还可以提供精灵的旋转和缩放,任天堂自己的游戏(例如《超级马里奥世界2:耀西岛》)非常需要此功能。” -杰斯·桑

一个有趣的事实:一些粉丝设法从SNES目录中收集了所有游戏(721个名称)。 通常,可以从远处看到DOOM墨盒。 在非标准的灰色情况下,只允许发布三款游戏。 两个是红色-DOOMMaximum Carnage ,而Killer Instinct是黑色。



超级任天堂的厄运


SNES上的DOOM得益于一个人的天才和决心:Randy Linden。 他喜欢这款游戏,并决定将其移植到流行的游戏机上,以便更多的玩家可以使用它。 Randy无法访问源代码,也无法访问PC或控制台的游戏版本的资源。 他必须从头开始。

对于资源,他可以使用Matthew Fell撰写的“非官方末日说明”。 它详细描述了.wad文件的结构。 从DOOM.WAD中提取的精灵,纹理,音乐,声音效果和贴图Randy。 有了引擎,故事就完全不同了。

DOOM是一款真正的革命性游戏,我希望没有PC的人都能玩。SNES上的DOOM是可以实现的另一项编程壮举。

我自己启动了该项目,并创建了一个功能齐全的原型,并在Sculptureed Software中进行了演示。 一群Sculptureed员工帮助我完成了游戏,因此可以在假期中按时发布。

由于许多原因,开发过程很复杂,主要是因为当时还没有SuperFX芯片的开发系统。 在开始游戏本身之前,我编写了一套完整的工具-汇编器,链接器,调试器。

硬件开发套件包括一个黑客入侵的Star Fox盒式磁带(因为它具有SuperFX芯片)和一对连接到两个SNES连接器并连接到Amiga并行端口的经过修改的游戏控制器。 要下载代码,设置断点,在两个设备之间传输数据时检查内存,使用了串行协议。

我希望该游戏具有更高的级别,但是不幸的是,该游戏占用了最大的可用ROM,并且几乎完全占用了它。 我隐约记得,只有大约16个字节是可用的,也就是说,已经没有剩余空间了! 但是,我设法提供了对Super Scope,鼠标和XBand调制解调器的支持! 是的,您甚至可以在线上和某人一起玩!”-兰迪·林登(Randy Linden) 《重塑游戏》 的采访

在此版本中,值得注意的是,Randy必须考虑到端口引擎的功能和限制来“偷工减料”。


从图6.8中可以看出,尽管只有600 kb的RAM,蓝色的地板仍然保留着(尽管颜色相同)。 请注意,几何形状并没有改变(因为Randy既没有DoomED也没有doombsp,这一定很难做到),并且所有原始步骤都保留在E1M1上。

兰迪(Randy)称其为Reality引擎能够处理PC上卡片的几何形状,但他极有可能在填充和采样纹理的速度方面遇到问题,因为天花板和地板的纹理完全不存在。


上面的屏幕截图显示了该窗口实际上并未全屏显示。 这个问题不仅涉及DOOM - Star FoxStar Fox 2,而且所有具有Super FX的游戏都必须减小工作区的大小。 这很可能是由于受限的SNES传输速率,不允许DMA传输进行全屏渲染。

在控制台“原始”分辨率的256x224像素中,只能绘制216x176,并且仅216x144用于3D(状态栏绘制在32行上)。 垂直线是重复的,也就是说,Reality Engine只能以108x144的分辨率进行渲染。 即使在如此低的分辨率下,平均帧频仍为10 FPS,这是一项重大成就。 “低”帧频并没有阻止玩家玩“ 毁灭战士” 。 据兰迪·林登(Randy Linden)称,这些墨盒的销量非常好。


为珍贵的RAM捐赠的功能列表包括子画面分辨率,该分辨率必须大大降低。 有时甚至很难拆卸它们(与以高分辨率渲染的玩家武器相对)。 我不得不删除敌人的所有姿势,除了精灵看着玩家,摆脱彼此的怪物打架,散布声音(怪物仅通过视觉接触唤醒怪物),消除大部分声音效果(所有怪物听起来都像小鬼)。

有趣的事实:任天堂最初在SNES的游戏中禁止使用血液。 到DOOM发布时,ESRB分级程序已经出现在舞台上。 考虑到血液和肉块的数量,SNES上的DOOM评级为M(“ 17岁起”)也就不足为奇了。

可以在Fabien Sanglar的网站上获得 《 Game Engine Black Book: DOOM》的全文。

Source: https://habr.com/ru/post/zh-CN455429/


All Articles