一道花了三十多年才解開的數學題。
任天堂的《超級馬力歐兄弟》家喻户曉,人們都知道馬力歐要跳起來頂磚塊,獲得有助於通關的金幣與道具。大部分的問號磚塊會給馬力歐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枚金幣那樣,從遊戲裏挖掘出始終無人發現的有趣秘密。