一道花了三十多年才解开的数学题。
任天堂的《超级马力欧兄弟》家喻户晓,人们都知道马力欧要跳起来顶砖块,获得有助于通关的金币与道具。大部分的问号砖块会给马力欧1枚金币,而某些特定位置的砖块没有问号标记,给的金币却更多。
这样的砖块被称为“金币砖块”(Coin blocks),需要玩家操纵马力欧在短时间内尽可能快地撞上去,撞得越快,拿到的金币也就越多。如果玩家在第一次顶砖块拿到1枚金币后,过了很长时间才顶第二次,就只能获得2个金币。
玩家们都知道从金币砖块中可以获取的金币下限,但是换成金币上限,就少有人能给出准确答案了。至少在1985年初代《超级马力欧兄弟》刚发售那阵,玩家们觉得顶出10个金币就已经是极限。
1987年,英语版本的任天堂官方攻略书出版。这本攻略书将各个关卡的场景设计画了出来,标注了游戏中所有的隐藏砖块,并直截了当地用T字母来代表“10金币砖块”(Ten-coin blocks)。
在实际游玩过程中,一些玩家能够从金币砖块里撞出更多的金币。在拥有变速与连点功能的手柄普及之后,玩家们做得到更快速的跳跃与顶砖块,从金币砖块里顶出10枚以上的金币也不再是什么难事,但极限是多少,还是没人能够实锤。
金币砖块的金币上限,这个问题的最终答案肯定会藏在游戏的源代码里。如今一提到仍在研究游戏源代码的人,我们多半会先想到那些追求极致通关速度的速通玩家。
4月10日,一位名叫Kosmic的速通玩家公布了问题的答案。Kosmic是初代《超级马力欧兄弟》多个速通项目的前世界记录保持者,他公布答案的原因很简单:类似的研究之前没人做过,可真实答案对顶尖的速通玩家而言接近于常识。
“为什么以前没人得到过这枚硬币”
想要看懂《超级马力欧兄弟》的速通,乃至理解Kosmic的研究成果,首先要明白游戏采用的“21帧规则”。
“帧规则”类似于某种计数器或计时器,但是不以秒,而是以帧为单位。游戏中的绝大部分机制,都以21帧(约0.35秒)为周期计算判定,每21帧称作一个“帧规则”(Frame Rule)。
比方说,在马力欧通过某个关卡,即降下关卡末尾的旗子再走进城堡的时候,这个规则就在发挥作用。无论马力欧是在21帧中的哪一帧走进城堡,都要等待6个“帧规则”,才算正式通过这一关,随即看到接下来的场景。
然而游戏代码会把当前正在运行的“帧规则”算作第1个“帧规则”,等到这个“帧规则”剩下的帧数走完,再计算剩下的5个“帧规则”(105帧,约1.8秒)。假设当前“帧规则”剩下n帧,那么玩家需要等待的总时间其实是n+105帧,即106帧到126帧(1.8秒到2.1秒)之间。
正如玩家们三十多年来的普遍猜测,金币砖块的金币数量并非固定数额,的确需要玩家们在限定时间撞击尽可能多的次数,而这个限定时间无疑也受“帧规则”所影响。
Kosmic放出了与金币砖块相关的游戏源代码,代码显示限定时间是十六进制的“0b”,换成十进制,就是11个“帧规则”。
第1个“帧规则”可能处在1帧到21帧之间,这里仍然把剩下的帧数设为n;接下来的10个帧规则,都是完整的21帧,共计210帧。由此可得,撞击金币砖块的总时间为n+210帧,即211帧到231帧。
显而易见,在游戏的“帧规则”计时器处于第1帧时,让马力欧撞击金币砖块,能够获得最长的230帧时间(刨去第1帧,约3.8秒),吃到最多的金币。
不过在此基础上,金币砖块存在一个刷新金币的16帧冷却时间,在这个冷却时间内撞击砖块,不会获得多余的金币。
太快了也不见得是好事
以1-1关卡中最出名的金币砖块为例,大多数玩家走到这里,一般都吃过了能够变大的蘑菇,此时马力欧的脑袋到金币砖块只有一个砖块的距离,两次连续跳跃间隔15帧。如果换成没吃蘑菇的小号马力欧,距离延长至两个砖块,这个时间就要换成23帧。
因此,假定在最理想的情况下,大号的马力欧在每次落地后停顿1帧,即每隔16帧跳跃一次。如此往复,他最多能够在230帧里获得14枚金币,最后余下6帧。
第10帧停顿
等到11个“帧规则”过去后,砖块里会保留最后一枚金币。再把第1帧的那枚金币算上,加起来就能得出,金币砖块的理论金币上限是16枚。
当然,理论上限只是理论上限,从金币砖块里取出全部16枚金币,要和速通一样逐帧操作,属于挑战人类极限的玩法。让马力欧在某个“帧规则”的前几帧完美起跳、每16帧进行一次精准的跳跃,这绝对不是普通玩家能够轻易实现的操作。
但速通玩家向来都在挑战人类极限。据Kosmic所知,初代《超级马力欧兄弟》速通社群至少有两个人,在没有借助如“帧规则”计数器等辅助工具的情况下,成功顶出了16枚金币,而其中一个是他自己。
2020年10月1日,任天堂推出了大逃杀游戏《超级马力欧兄弟35》。这部游戏全面沿用了初代作品的关卡和“帧规则”设计,Kosmic玩起来也得心应手。在10月7日的一次尝试中,Kosmic从1-1关卡的金币砖块顶出了16枚金币,兴高采烈的他随后就把游戏片段上传到了推特。
另一位速通玩家是AndrewG,2016年10月18日,他创下了以最高得分通关的世界纪录:3663400分。在录像中,AndrewG从8-3关卡的金币砖块顶出了16枚金币。
AndrewG使用的改版游戏能够记录超过100万的分数
之前我们为初代马力欧速通写过一篇文章,文中提到,速通项目的世界纪录正在抵近理论上的人类极限。
现在看来,就算真的达到了理论极限,我们也不必担心速通玩家就此失业。到了那时,比开发者还懂游戏的他们,大概还会像Kosmic找到砖块中的第16枚金币那样,从游戏里挖掘出始终无人发现的有趣秘密。
关键词: 超级马力