Forest地形之一:總體說明

如果玩家明白了地圖生成的邏輯,那么TA就能在成為高手的道路上走出巨大一步,這很神奇。所以開了新坑,希望向大家介紹DST的地圖到底是個什么東西??催^這個系列,預計可以解釋地圖上80%以上的現(xiàn)象,個人認為這樣的文章是非常有價值的。
DST中,地上服務器稱為forest(森林),地下服務器稱為cave(洞穴)。本系列旨在完整介紹整個forest地形,本文是這一系列的第一篇。作為總體說明,本文為后續(xù)所有內(nèi)容打下最初的基礎,因此非常重要,建議仔細閱讀。
我會以盡可能直白的方式幫助大家理解代碼的邏輯,不過說實在話,我其實沒什么看代碼的功底,所以可能流于表面,甚至出錯。反正是拋磚引玉,有大佬來做指正或講解就更好了。

第一節(jié):forest地形生成的總體說明
《Don't Starve 》(以下簡稱DS)和《Don't Starve Together》(以下簡稱DST)這個系列,有DS原版、巨人國、船難、豬鎮(zhèn)、DST,而且還分DS洞穴、火山、冒險模式、DST洞穴等等,每一個世界都有自己的一張地圖。因此存在一個“地圖集(leveltype)”。
地圖集基本可以算是最大的分類了,太大了以至于沒有什么意義,這里也只是提一嘴。我們的講解著眼于DST的地上世界。
這里建議大家,打開DST,點擊“創(chuàng)建新世界”,跟著文章的腳步一一對照著學習,看看我們會遇到哪些東西!

一、世界(Levels)
1.id參數(shù)
創(chuàng)建存檔遇到的第一個界面就是讓你選“生存”、“無盡”、“輕松”、“荒野”或者“暗無天日”這些游戲模式。在代碼中,用“id”這個參數(shù)記錄玩家選擇了何種模式。例如,生存模式的id是“SURVIVAL_TOGETHER”,無盡模式的id是“ENDLESS”,暗無天日模式的id是“COMPLETE_DARKNESS”。
2.name與desc參數(shù)
選擇了游戲模式,接下來會看到創(chuàng)建世界的第一頁,選完人數(shù)之后,讓你填世界的名字什么的。所謂name參數(shù)就記錄了玩家填寫的存檔的名字,默認為“xxx的世界”。desc參數(shù)是description,也就是玩家填寫的世界描述,默認是空的。
3.overrides參數(shù)
再后面,就是調(diào)節(jié)各個項目的比例或類型。每個項目一開始都是默認值,當玩家自定義了這些數(shù)據(jù)時(例如將胡蘿卜改為“大量”),自定義數(shù)據(jù)就會覆蓋(override)默認值。這些修改的內(nèi)容被整理為一個overrides表格,指明了世界上有哪些項目被玩家自定義。
4.世界(levels)文件夾
還有一些其他參數(shù),就不再細說了。如果你打開DST的文件夾,map下面的第一項就是一個叫“l(fā)evels”的文件夾,這個文件夾里基本包括了上面提到的那些參數(shù)。它從根本上規(guī)定了一個全默認的世界大致會是什么樣,后續(xù)服務器生成世界的動作,基本是在此基礎上進行的。
5.forest世界
完成各類設定后,就可以創(chuàng)建一個新世界了!進來看一看。
forest整個世界是正方形的,主要分為大陸、海洋、島嶼三部分。海洋地形通常是依托于大陸(和月島)的走勢而定,大陸(和月島)是我們主要關注的區(qū)域。

二、地形(tasks)
現(xiàn)在我們的目光集中在大陸。稍微玩過游戲的朋友就會發(fā)現(xiàn),整個大陸上有不同的“地形”?!暗匦巍敝傅氖恰拔椰F(xiàn)在在一片青草地上,有草和小樹枝,有樹,有花,還有漿果”,“我現(xiàn)在在一片森林里,有很多樹,很多蜘蛛”,“我現(xiàn)在在一片草原上,有一些草和兔子,還有牛”。
青草地、森林、大草原……這是不同地形給人帶來的最直觀的差異,也是大多數(shù)人進入饑荒世界最初的體驗。換句話說,整個大陸由一些不同的地形組成。后文中,我以“【 】”將地形名稱高亮。
地形是如何生成的呢?創(chuàng)建一個世界,稍微探索一下,會發(fā)現(xiàn)這個世界上總有一兩片青草地,總有一兩片森林,總有一兩片沙漠,而且四周永遠都是海,聽說遠海還有個月島,我是新手,沒敢出海。
只要有這種印象,你就已經(jīng)掌握了第一條規(guī)律:某些地形是必然會出現(xiàn)的。
做的好!事實上,forest的大陸有十種【地形】是必刷的,例如玩家們普遍知道每個存檔都會有一只豬王。還有十種【地形】是隨機的,在生成時“十選五”。即從十個里面選五個生成,另外五個則不生成。例如玩家會發(fā)現(xiàn),有時地圖上只有豬王那一個村子,而有的時候,除了豬王村,還額外存在一個沒有豬王的小豬村,這說明這個小豬村就是隨機出現(xiàn)的。
所以可以總結:DST的大陸一共有20種地形,10種必刷,另外10種“十選五”隨機刷。每張地圖的大陸由10種必刷地形+5種隨機地形=共15種地形構成。


三、區(qū)塊(rooms)
進一步,如果研究【地形】,就要弄清楚每種【地形】里面有什么,依舊從玩家最熟悉的豬王為例。觀察下面的地圖,怎樣描述豬王所處的環(huán)境?

或許你會這樣說:豬王在紅色樺樹林里的一片綠草地上。
關鍵在于,這片綠草地,是不是明顯不同于它外圍的紅樹林?是不是顯得很突兀?
其實,紅樹林就是一片【地形】,這塊突兀的綠草地告訴我們:就像【地形】與【地形】之間可以劃分開來一樣,【地形】內(nèi)部同樣可以被劃分為一些更小的區(qū)域。這種相對獨立的小區(qū)域,下文稱為“區(qū)塊”,并以“[ ]”高亮。
有了[區(qū)塊]這一概念,就可以這樣說:豬王所在的綠草地是【紅樹林】地形里的一個[區(qū)塊]。[區(qū)塊]構成【地形】,【地形】構成大陸,形成了這樣簡單的三級關系。
并不是所有的[區(qū)塊]都起著舉足輕重的作用,有核心區(qū)塊和背景區(qū)塊之分。例如在紅樹林這片地形中,綠草地無疑是一個重要的區(qū)塊,因為上面有重要的資源點:豬王。這種重要的、能夠體現(xiàn)該地形最重要特征和核心資源的[區(qū)塊],本文稱之為“主區(qū)塊”。還有一些區(qū)域,沒有什么重要資源,例如紅樹林里無非就是樺樹而已,相對來說不重要,往往是一種“背景區(qū)塊”。
首先確定世界上有哪些【地形】,再確定每個【地形】中的“主區(qū)塊”,這些“主區(qū)塊”不會占據(jù)【地形】中所有的空間,剩余的部分以“背景區(qū)塊”填充。


四、資源(prefabs)
再進一步,每一個[區(qū)塊]內(nèi)又有什么呢?例如,豬王所在的這片綠草地,上面有豬王、豬屋。
“豬王”,晚上會睡覺、玩家可以與它交易,有音效,有動畫,是不可分割的工作單元。
“豬人”,由進食機制、戰(zhàn)斗機制、尋路機制等等綜合而成一個實體,有音效、有語言包、每個動作有自己的貼圖,也是游戲里不可分割的最小的工作單元。
還可以考慮其他資源。例如胡蘿卜,有再生機制、腐爛機制、有貼圖、可以被烹飪、可以被吃,被吃給玩家多少三維回復…總之這個胡蘿卜也是不可分割的最小的工作單元。
以此類推,如果試圖進一步探索[區(qū)塊]的內(nèi)部構成,我們對世界資源的劃分就已經(jīng)到了極限:我們無法再進一步拆分這些實體,否則豬人就不是豬人,胡蘿卜也不是胡蘿卜了。這些最小的工作單元,在代碼中叫做“預制件、預設物(prefabs)”,下文中就更直觀的叫它們“資源”好了。所以,考察[區(qū)塊]的內(nèi)容,就是考察資源如何生成。
一個[區(qū)塊]內(nèi)的資源,主要以三種方式出現(xiàn):
固定布景(layouts)。“固定布景”是布局完全固定的一套資源。“布景”其實意思就是它是一個完整的小景觀。例如,“豬王”是一個固定布景,永遠由豬王、幾根方尖碑、地板地皮構成(事實上地板地皮外側還有一圈草地地皮),而且彼此的排列布局永遠不會變。那么就把這幾個永遠不變的資源,打包成一個東西——“默認_豬王”,這就是一種固定布景。再例如,絢麗之門是一個大門+三朵花+草地地皮,彼此的排列同樣永遠不會變,于是也打包成一個東西“默認_起點”,這也是一種固定布景。
隨機資源。隨機資源是種類和比例固定、數(shù)量不定、均勻散布在空間中的資源。首先,一個區(qū)塊隨機資源的“豐富程度”(不是絕對的數(shù)量)有多有少。比如森林里各類資源富足,無論是樹還是豬房,各種東西非常密集。沙漠里各類資源匱乏,空曠荒涼,雖然有針刺樹和巖石,但出現(xiàn)頻率很少。其次,隨機資源的種類固定。例如樺樹林里有樺樹、小樹枝、蘑菇、花、豬房等等,但不可能在樺樹林看到高鳥巢穴,它不在樺樹林的資源列表中。最后,隨機資源之間的比例相對穩(wěn)定。無論數(shù)量如何,永遠是樺樹最多。不可能蘑菇超級多、多到比樺樹都多,那就不像樺樹林了。
固定資源。以高腳鳥巢為例,我們希望高腳鳥巢少量的生成,于是給了它一個很小的比例。那就有一種可能是,運氣太差,一個都沒生成出來,這個世界上一個高腳鳥都沒有,這反而又不是我們想要的了。為了保證“一定會生成某一數(shù)量的某種資源”,除了上述不指定數(shù)量的隨機資源以外,程序還會直接指定某些資源的數(shù)量,這里稱為固定資源。例如,2022年10月份有一項更新,讓“高腳鳥必定生成在世界上”,就是直接指定某些區(qū)塊一定會生成1個高腳鳥巢,再看其他鳥巢會不會隨機的生成。
不同類型的資源,在游戲中起著不同的作用。固定布景通常用于核心資源點,例如豬王、龍蠅、月臺、綠洲,它們都是固定布景。這種打包好的一套資源,能夠保證隨機環(huán)境下核心資源點的優(yōu)先性、穩(wěn)定性、完整性(“豬王被地形卡掉了"是無法想象的)。固定資源,能夠保證“至少生成若干個”。而隨機資源均勻散布在區(qū)塊里,數(shù)量不確定,營造地形氛圍。
至此,關于地形生成,我們已經(jīng)認識到這種層級結構:資源是游戲中最小的工作單位;每個區(qū)塊的資源可大致分為固定布景、固定或隨機資源;區(qū)塊彼此不同,構成地形;地形彼此不同,構成大陸;大陸、海洋、島嶼構成聯(lián)機版的地上世界;地上、洞穴、單機版、DLC等所有的地圖共同構成《饑荒》的地圖集。

五、卵石路
另一個比較奇特的地圖元素是卵石路。玩家普遍不清楚卵石路為何會出現(xiàn),又為何這樣斗折蛇行。事實上卵石路的路徑與[區(qū)塊]息息相關,它會將所有重要的區(qū)塊串在一起,構成一條...區(qū)塊鏈。

每個地形都只有一條卵石路,經(jīng)過所有的主區(qū)塊,且不經(jīng)過背景區(qū)塊。這種特征導致卵石路成為我們識別一個地形中主區(qū)塊的關鍵手段,也是開局探圖必須關注的項目。希望大家在學習和游玩的過程中,能夠重視卵石路這一元素。
除了普通卵石路以外,地圖上往往還有一條更漂亮、更清晰的卵石路,下文中稱為真卵石路。真卵石路的路徑與“小豬村”有關,“小豬村”是一種隨機地形,因此不一定會生成。當?shù)貓D上沒有小豬村地形時,真卵石路和普通卵石路一樣,存在于單一地形,依次通過主區(qū)塊而不通過背景區(qū)塊。當?shù)貓D上出現(xiàn)小豬村地形時,真卵石路會連接豬王和小豬村這兩個[區(qū)塊],橫跨好幾個地形、無視主區(qū)塊和背景區(qū)塊,還可能與其他地形的普通卵石路重疊。
這是真卵石路首要的路徑規(guī)則,如果你注意到一條真卵石路沒有嚴格經(jīng)過主區(qū)塊,而是隨意的橫跨好幾個地形,或者,某個地形已經(jīng)有卵石路了(就不應該再有其他小路),可是同時還有一條真卵石路與之重疊,你就可以斷定,這張地圖上大概率是生成了小豬村,而且真卵石路的一端是豬王,另一端是小豬村。


六、地形勾稽
上面介紹的都是“地圖上有哪些地形”,還有一個重要的問題是“地形如何排列組合”。玩家可能有以下問題:
地形是一個接一個排成一列?還是向中間匯聚成一朵花?或者是形成一個環(huán)?
哪些地形可能連在一起?豬王、蜂后和龍蠅的地形會連在一起嗎?
有沒有什么地形有很多河道和內(nèi)陸湖?有沒有什么比較奇葩有趣的地形?
月島與大陸的關系是怎樣的?怎么找?
學習這些內(nèi)容需要玩家對各類地形十分熟悉,所以等介紹完各種地形之后,再來看這些內(nèi)容。
七、地圖上的其他細節(jié)
最后要說的是,地圖上還有很多有趣的東西。它們或者看起來就像一種地形(大理石雕像和發(fā)條生物),或者其作用、生成與地形相聯(lián)系(蟲洞、切斯特),或者是比較有特色的彩蛋(蘆葦彩蛋、高鳥彩蛋),或者是一具骷髏(前輩),或者與cave有關(落水洞)…這些隨機的元素與地形本身共同構成了一個多彩的世界,有些更是對地圖大大的加分,以后看情況盡量介紹給大家。

結語與前瞻
DST的大部分內(nèi)容,完全依托于“隨機地圖”這一重要特征展開。然而,游戲地圖這種影響全局的基礎設定,如果完全隨機,那游戲就亂了套了。所以無論是地上還是洞穴,DST的地圖其實有許多固定的生成規(guī)則,即規(guī)律可循,很值得研究和學習。
本文是Forest地形系列的第一篇,也是本系列最為重要的一篇文章。介紹了饑荒Forest地形的整體生成邏輯以及關鍵概念,例如“資源(預制件)”、“固定布景”、“區(qū)塊”、“地形”、“卵石路”等,為大家樹立了最基礎的世界觀,后面所有的內(nèi)容都是在此基礎上展開的,所以希望大家能耐心的看個明白。
現(xiàn)在我們已經(jīng)知道DST大陸由20個地形構成。下篇文章就來看看這些地形都是怎么樣的。如果發(fā)現(xiàn)任何錯漏、有任何意見或建議,歡迎通過各種方式與我聯(lián)系。喜歡本文的話不妨長按點贊一鍵三連,謝謝大家。我們下篇文章再見。