摘要:超级马里奥创客游戏设计启示
关键词:超级马里奥,游戏设计,启示,NES,像素画,Tile网格
撰文&编辑:三二
教你画像素画首发 | 公众号 pixelart
本文共2797个字,阅读大约需要8分钟。
超级马里奥创客(Super Mario Maker)发布引起了新的关注,特别是在非开发人员中。自从游戏在2014年E3 Digital Direct 揭幕以来,评论家和玩家都对业余设计师在制作《超级马里奥》关卡方面的潜力感到高兴。
基于Tile的游戏世界
任天堂凭借巧妙的视觉提示,展示了隐藏在平台游戏内部基于Tile图块的框架。老手和像素画爱好者可能会理解,早期NES游戏依赖Tile来构建游戏角色和世界,但是新人可能并没有意识到这些参数的重要性。
超级马里奥兄弟的共同设计师宫本茂和手冢卓志解释说,
马里奥创客的灵感来自任天堂的内部编辑工具。该工具如此出色,以至于我们越努力使用它,就越意识到可以将其变成每个人都可以享受的东西。
只有少数专门的ROM黑客和NES自制开发人员深入研究马里奥的来源,以了解其机制的发展历程。
30年历史的游戏引擎
从反编译Nintendo源代码的法律挑战到解密NES CPU 6502汇编语言的技术挑战,有许多障碍阻止此类研究。但是,当代开发人员可能也想知道:在巨大的计算机性能约束条件下设计的具有30年历史的超级马里奥引擎现在还有什么意义?
40KB的超级马里奥兄弟
如今,随着代码和资产不断填满越来越丰富的磁盘空间,蓝光,云存储等奢侈品已经改变了游戏开发人员的观念。但是30年前,宫本和手冢的小团队设法将32个关卡,十几个敌人,物理引擎,一系列声音效果以及令人难忘的4乐器音轨压缩到40KB的ROM中去,这就是我们称之为超级马里奥兄弟的NES游戏包。
在现代开发环境中,40KB的存储空间相当于:一个115像素见方的.psd(缩小的Bootstrap JS文件),1/5的未压缩音频。但是40K在1985年是昂贵的。当任天堂的工程师在1980年代初设计Famicom硬件时,他们使用了Donkey Kong作为规格软件,而40K所需的ROM数量增加了一倍多,以容纳街机游戏。
Famicom盒带将40K的内存分为两个不同的芯片:8KB的角色内存(CHR-ROM)和32KB的程序内存(PRG-ROM)。后者包含游戏代码,并直接传送到NES的CPU,这是MOS 6502的略微修改版本,称为2A03,可在Commodore 64和Apple II等众多8位平台中找到。较小的CHR-ROM存储包含游戏图形的8×8像素图片,并直接传送到NES的图像处理单元(PPU)。
8KB依次分成相等的部分以容纳角色和背景Tile图块。尽管它们看起来相同,但它们的功能却不同:角色可以在屏幕上自由移动,但是最大数量(一次只能在屏幕上显示64个)和密度(每个扫描线只有八个)受到限制。相比之下,背景图块可以在整个屏幕上自由地进行重复,但必须使用32x30Tile的网格。
任天堂Famicom于1983年夏天到达日本时,40K的卡带存储器足以逼近当时主流游戏行业的街机游戏。任天堂的最初几年发展重点是提供令人信服的大型街机游戏,例如大金刚和大力水手。
随着街机技术的发展以及个人计算机变得越来越强大和普及,家庭娱乐的需求也发生了变化。玩家有时间和渴望探索更大的游戏世界,而《超级马里奥兄弟》是任天堂首次尝试适应玩家需求不断变化的重点项目。
要欣赏《超级马里奥兄弟》将32个关卡打包到40K中是多么出色,请考虑在屏幕上构建NES图像所需的资源。显示背景Tile的单个屏幕需要960字节的ROM。假设我们没有其他代码或资产的空间,则40K将为41个屏幕提供足够的内存。快速浏览超级马里奥兄弟地图,我们很快发现2个大型关卡就已经用光内存配额。那么,马里奥又如何达到8个大型关卡?
超级马里奥场景引擎
首席程序员中乡俊彦(Toshihiko Nakago)和他的团队设计了一个聪明的“基于对象”引擎,该引擎将Mario场景分为几个不同的层次。“布置装饰”层旋转出重复的背景Tile图案,以描述每个关卡的风景图案。
例如,在世界1-1中,山丘,云层,灌木丛,山丘,云层,灌木丛,云层,云层,灌木丛的节奏明显跨越了96个Tile。Nakago将布景装饰算法编程为“自动”,这意味着引擎会生成这种模式,无论关卡多长时间,直到特定关卡对象触发为止。那些幸运的玩家跳了旗杆(或拥有Game Genie)可以看到工作中的固定装饰程序,因为直到计时器用完为止,相同的场景装饰一直在重复。
随后的两个图层-区域对象和敌人对象-构成了Mario关卡设计的实质。前者包括放置的砖块,管道和其他可碰撞的元素,而后者则包括了Goombas,Koopas和其他威胁马里奥前进的敌人。可以根据简单的一维字节列表将这些对象放置在固定装饰的“顶部”,这些字节的格式设置为包括有关对象的特定类型,大小和位置的数据。翻转几下可以将弹簧移到位,提高管子的高度,或将绿色的Koopa换成红色。
超级马里奥创客
30年后,Super Mario Maker的引人注目的是如何将NES的场景约束转化为设计空间。玩家不会因为固定的布置而大惊小怪,用云彩或丘陵费力地填充地面场景。相反,在屏幕上拖动地形会触发灌木和树木自动设置。
Mario Maker的核心机制是对象放置。玩家选择敌人,砖块,道具和物品,然后将它们放到网格化的场景上。尽管Wii U不再将其图形元素划分为精灵和背景图块,但它们的逻辑仍然适用于Mario Maker的工具集。马里奥(Mario)的行为举止就像一个精灵,可以在整个网格中自由移动。
在Super Mario Maker中,对象放置的便利性,可用对象的种类以及“播放”和“编辑”模式之间的快速对齐鼓励频繁的迭代和优化,这都是关卡设计过程的标志。毫不奇怪,超级马里奥兄弟的引擎支持相同的方法。将块向左移动8个像素或将Goomba换成双Goomba并不需要程序员重新设计整个关卡。编辑几个字节就足够了。Nakago的引擎在当时一直非常高效和灵活,这些功能使Miyamoto和Tezuka能够专注于改进游戏关卡设计而不是代码。
实际上,Nakago引擎的灵活性以及汇编语言的可变性意味着,在规避某些数据保护措施的情况下,超级马里奥兄弟可以自动生成意想不到的效果-不仅有32个世界,而且有200多个世界。
年龄较大的NES玩家可能还记得传说中的隐藏世界,这是一个偶然发现的“秘密”关卡,他们使用游戏的碰撞检测功能在世界1-2的尽头滑过墙壁,然后可以选卡。实际上,循环的世界证明了惩罚多于奖励,但它促使玩家怀疑马里奥团队是否藏匿了其他隐藏关卡。
超级马里奥隐藏关卡出现的原因
首先NES所有信息(无论是指令,图形还是变量)最终都以字节表示。NES如何解释这些字节取决于上下文。有时,十六进制值A9指示CPU将值加载到特殊的存储器寄存器中。其他时候,它仅表示值169。由于误读字节,马里奥就会出现在隐藏关卡中,但是不能玩。
其次这些字节序列存储在ROM的特定位置。因此,只要引擎在其指定的内存位置开始和结束,关卡就会按预期展开。但是,如果发生某些代码意外事故,并且引擎在内存中的任意点开始工作,则无法区分“有效”字节和“无效”字节。引擎的灵活性使其可以将任何字节(无论是声道数据还是Mario操作指令)转换为关卡场景对象。
玩家发现的隐藏关卡
这种神秘的事物可能超出了许多开发人员的视野,但是这种游戏考古学使我们想起,新一代游戏机不一定意味着更好的游戏。“过时”的技术仍然可以用于新的秘密和惊喜。关于“超级马里奥创客”的许多新奇是旧的但未知的东西。任天堂尤其擅长将其设计传统与设计未来联系起来。
超级马里奥兄弟的引擎提醒我们,巨大的约束条件可以孕育出非凡的,甚至是神话般的创造力。
完。
参考资料
https://www.gamasutra.com/view/news/253377/The_long_shadow_of_Super_Mario_Bros.php