屍體回收解剖學:從 Dark Souls 到 KUTO
好的屍體回收會在死亡之後再給玩家一個決定。KUTO 讓這個決定變得很個人——擋在你和戰利品之間的,是你自己的配裝。
程序生成是什麼、遊戲用哪些類型與演算法來建構關卡與世界,以及它和單純的隨機生成差在哪裡。
程序生成是一種技術:遊戲在執行時用演算法和規則來建構內容——關卡、地形、掉寶、敵人,乃至整顆星球——而不是由設計師一件一件手工擺放。餵給系統一個起始數字(也就是種子),它就會組出一份全新、可玩,而且仍落在設計師所設邊界內的結果。
這就是為什麼一款 Roguelike 在你玩到第一百輪時還能給你一座沒見過的地城,也是為什麼《Minecraft》能生出比地球表面積還大的世界。以下談這個詞真正的意思、這些演算法用白話怎麼解釋,以及整套做法在哪裡會失靈。
大多數人第一個想到的詞是「隨機」,而這正是最該先澄清的誤解。程序生成更接近被策劃過的隨機。設計師先做好原料——房間模板、拼貼組、道具池、敵人類型、地形規則——再寫下這些零件該怎麼拼在一起的指示。演算法接著把它們組合起來,通常從一個種子出發,生出一個新的、但仍然遵守規則的結果。
所以當一款遊戲被形容成程序生成,並不代表開發者擲骰子擲出什麼就出貨什麼。它代表他們寫的是一套會即時組裝內容的系統,而不是直接把每一關做完。種子是關鍵細節:同一個種子永遠產生同樣的輸出,這也是為什麼玩家能交換種子碼去重玩朋友那張一模一樣的世界,以及開發者能靠重跑同一份配置來重現 bug。
工藝藏在限制條件裡。弱的系統生出一團爛泥;強的系統生出的多樣性,仍然讓人覺得是有意為之。
這兩個詞常被混用,但它們不是同一回事,而這個差別正是程序生成之所以有效的全部理由。
隨機生成不帶任何規則地抽值。擲個數字、放一面牆、繼續。放著不管,這種做法會很開心地把出口封死在一面砸不破的牆後面、把你丟進一間沒有門的房間,或是在起始格上疊三隻精英怪。
程序生成則把那份隨機包在規則與限制裡,套用到精心設計過的零件上。它可能還是照樣抽一間房,但它會檢查從入口到出口確實存在通路、提供的裝備足以打得下去,而且難度落在可接受的區間。隨機是引擎,限制條件才是方向盤。
簡單說:隨機是丟硬幣,程序生成是丟硬幣時旁邊站著一個設計師說「這個不行」。所有好的程序系統,本質上都是圍繞著一個亂數搭起來的護欄。
「程序生成」是個統稱。遊戲把它套用在內容中非常不同的部位,多數大作會同時使用好幾種。
你不需要真的會寫這些,也能理解一款遊戲在做什麼。以下是主力選手,用白話說明。
真正的遊戲多半會把好幾種串起來用:雜訊做地形、細胞自動機做地形裡的洞窟、L-system 做上面的森林。
代價是作者意圖。手工搭建的關卡能有刻意安排的節奏——伏擊前那段安靜、剛好框住的一幅視野、一隻擺在你血量正低時撲上來的敵人。生成出來的關卡用一部分工藝換取多樣性,而當限制條件太弱,結果就會顯得千篇一律、「沒有靈魂」,或像是用不搭調的零件拼出來的拼圖。
最誠實的失敗模式是「廣而淺」的世界:技術上無邊無際,情感上一片平坦。上市時的《無人深空》就是那個警世故事——億兆顆行星,逛了幾十顆之後就開始糊成一團。
這也是為什麼最強的程序生成遊戲通常是混合型。《Spelunky》和《死亡細胞》生成整體配置,但拼裝用的是人類設計並調校過的房間,所以每一輪都新鮮,每一間房卻都公平。生成器負責排列組合,工藝仍然由人來處理每一塊零件的內部。就連程序化程度堪稱極致的《矮人要塞》和《Caves of Qud》,底下也倚賴大量手工撰寫的系統、美術與規則——生成器是把設計師的工作放大,而不是取代它。它同時也改變了死亡與重來的手感:世界是生成的,重新開始就是一道新題目,而不是把上一次重播一遍。
在我們自己的遊戲 KUTO:時間之鎖裡,我們坐在光譜上混合型的那一端。你會一路打過去的各個紀元——古埃及、維京時代、霓虹賽博都市——是手工設計的配置,而非完全生成,再加上變化,讓你使用克洛諾斯之鐮和所選時間能力的每次遭遇不會每輪都一模一樣。這是留有變化空間的作者式空間,不是程序生成的 Roguelike。到 Steam 把 KUTO 加入願望清單。
好的屍體回收會在死亡之後再給玩家一個決定。KUTO 讓這個決定變得很個人——擋在你和戰利品之間的,是你自己的配裝。
子彈時間很好加,也很好毀掉。唯一有意思的版本,是那個到現在仍得為自己在循環裡的位置奮鬥的版本。
在遊戲裡打壞東西通常不用負責。但有些遊戲裡,這會變成你整輪都得承受的決定。
選項更多聽起來就是更好玩。但實際上,一個對「你能帶什麼」的硬性上限,往往讓每一次選擇都更有意思。
Roguelike 裡的死亡不是設計上的瑕疵,它就是設計本身。以下拆解最好的遊戲怎麼讓死亡變得有意圖。