遊戲攻略

飢荒 (Don’t Starve) 連線版地圖邏輯結構與地圖構成分析詳解

撰文:LongFei_aot

最近和老崔合作的單機mod進度較慢,自己的時間又比較充裕,遂決定先做一個連線的pvp mod,然後就研究了一下連線版的地圖生成方式。在學習到如何創建地圖的同時,也瞭解到了饑荒本身的地圖生成機制。

感覺瞭解這些機制,對玩家提高探圖效率,節約時間還是非常有幫助的,所以就來寫一寫。

限於時間精力,只寫連線的,如果對單機的有興趣,自己類比著看下代碼也能明白。

首先,關於地圖的大部分代碼,全部都儲存在map資料夾下。不知道該怎麼用相關函數的時候,參照這個資料夾裡的代碼就好。

然後,再說一說饑荒地圖的邏輯結構。下面的專有名詞,由於我不清楚確切的中文翻譯,就全部採用其英文名行文了。

prefab,是地圖裡最基礎的東西,也就是所謂的最小元,一顆草,一塊燧石,一棵樹,都是一個prefab。這是饑荒地圖裡最小的構成元素。

room,包含了一系列prefab的一塊區域。典型的代表是豬王村,這個村子的一整塊區域就是一個room。可以為一個room設置它的地皮屬性,prefab的豐富程度,各個prefab之間出現比例,還可以直接設定出現多少個prefab。

task,包含了一系列的room的一塊非常大的區域。因為包含著地皮相似或相同的room,所以在地圖上常常以所謂地形的形態呈現出來。可以為一個task設定選取哪幾種room以及相應的數量,還可以設定作為背景的room(在room的數量不足時,偶爾會填充進來。),更為重要的,可以設置keys和locks,這決定著生成世界時,各個task之間要怎樣連接起來。

taskset和level,taskset是連線版最近才新增加的東西,單機只有level。taskset基本就是包含了一系列的task,然後level就是比taskset更高的一級,除了控制taskset之外,還可以控制世界生成的其他參數,比如說春夏秋冬的長度之類的。由於現在不是在講怎麼做mod,這一部分就不細講了。

在level之上還有一個叫遊戲類型的東西,但也和本貼關係不大,不細講。

然後有一些比較特殊的,要單獨講。

1、start location,也就是出生的區域,從各個屬性設置上,可以看作是一個room。特殊之處在於,它不歸屬於任何一個task,但有可能在生成的時候,融入到其它的task中去。如果在taskset裡設定了valid_start_tasks,它就只會融入指定的valid_start_tasks之一。同時,還可以設計出生時的set piece。那個經典的惡魔之門就是典型的set piece。如果你開永夜的話,你會發現還會多了一個火坑,這就是略微改變了出生的set piece的效果。

2、set piece,或者是static layout 或者是layout。這裡說到的這三個東西在本質上都是一樣的:都是以固定形式存在,而且可以被嵌入到世界中去的東西。典型代表就是各種奇遇了,比如蘑菇圓環啊,高鳥洞穴啊,各種前輩啊之類的。他們既可以被嵌入到room當中——比如豬王村的豬王和它周圍的方尖塔就是被嵌入到豬王村的room裡的;也可以在taskset裡設置,散佈在各個task裡——比如默認地上世界會有8個蟲洞,9個鹿鵝巢穴,1個龍蠅領地,2個復活石和10個洞穴入口,分佈在各個不同的task裡,這些分佈的task是可以自己設定的。

3、keys和locks。這兩張表是task中的屬性選項,關係著世界生成時,各個task怎麼結合。在map資料夾下的lockandkey.lua檔裡有lock和key的對應關係描述,當一個task的key和另外一個task的lock配對的時候,他們就會結合在一起。不過有時候湊不出配對的,那就只能胡亂結合了。需要說明的是,一個lock可以有多個key和它配對。結合還設計到start task的選取,具體操作我已經研究實踐過了,但這不是本貼的重點,就不詳細說明了。

講完這些基礎知識,就可以來詳細地說一下地圖的構成了,這裡只說饑荒地上世界的默認構成,地下世界或者說其他設置,構成的方式和地上世界是不一樣的。

打開map/tasksets/forest.lua

然後你可以在這個檔裡看到AddTaskSet這個函數,裡面的參數就是要詳解的內容了。這個函數使用了兩次,第一次,第一個參數為》default》的,就是我們默認世界的生成參數。

這一段結合著代碼來說,為了方便不喜歡閱讀代碼,想要直接得到結論的人,代碼的釋義放在前面,結論放在後面。不想看代碼的可以直接跳過這一樓。

tasks = {

《Make a pick》,

《Dig that rock》,

《Great Plains》,

《Squeltch》,

《Beeeees!》,

《Speak to the king》,

《Forest hunters》,

《Badlands》,

《For a nice walk》,

},

這個tasks表,就設定了每次開世界,必然會有的幾個task

numoptionaltasks = 6,

optionaltasks = {

《Befriend the pigs》,

《Kill the spiders》,

《Killer bees!》,

《Make a Beehat》,

《The hunters》,

《Magic meadow》,

《Frogs and bugs》,

《Oasis》,

《Mole Colony Deciduous》,

《Mole Colony Rocks》,

《MooseBreedingTask》,

},

numoptionaltasks 就設定了會隨機出現的task的數量,而後面的optionaltasks 表,就是所有可能會被抽取的task。

valid_start_tasks = {

《Make a pick》,

},

valid_start_tasks 就是設定可能會作為世界生成最開始的task的集合。最開始的task,是會因為它的keys和locks而影響到世界生成的樣子的。

set_pieces = {

[《ResurrectionStone》] = { count = 2, tasks={《Make a pick》, 《Dig that rock》, 《Great Plains》, 《Squeltch》, 《Beeeees!》, 《Speak to the king》, 《Forest hunters》, 《Badlands》 } },

[《WormholeGrass》] = { count = 8, tasks={《Make a pick》, 《Dig that rock》, 《Great Plains》, 《Squeltch》, 《Beeeees!》, 《Speak to the king》, 《Forest hunters》, 《Befriend the pigs》, 《For a nice walk》, 《Kill the spiders》, 《Killer bees!》, 《Make a Beehat》, 《The hunters》, 《Magic meadow》, 《Frogs and bugs》, 《Badlands》} },

[《MooseNest》] = { count = 9, tasks={《Make a pick》, 《Beeeees!》, 《Speak to the king》, 《Forest hunters》, 《Befriend the pigs》, 《For a nice walk》, 《Make a Beehat》, 《Magic meadow》, 《Frogs and bugs》} },

[《DragonflyArena》] = { count= 1, tasks={《Badlands》}},

[《CaveEntrance》] = { count = 10, tasks={《Make a pick》, 《Dig that rock》, 《Great Plains》, 《Squeltch》, 《Beeeees!》, 《Speak to the king》, 《Forest hunters》, 《Befriend the pigs》, 《For a nice walk》, 《Kill the spiders》, 《Killer bees!》, 《Make a Beehat》, 《The hunters》, 《Magic meadow》, 《Frogs and bugs》} },

},

set_pieces 就是設定各個奇遇了,這裡ResurrectionStone(復活石),WormholeGrass(蟲洞),都可以算是奇遇。後面的count就是數量,tasks就是設定這些奇遇可能出現在哪些task上。

然後來對上面的代碼做分析。為了加強和遊戲的聯繫感,我們分析一下各個task對應的所謂地形。相應的代碼可以在map/tasks資料夾下查到,這裡就不多說了,直接說代碼的解析結果–也就是每個task的room組成。

room的大小,雖然不固定,但總體上是差不多的,決定一個task有多大,就看room的總數量有多少了。另外,room的數量是可以設定隨機的。不過,官方的習慣,差值不會超過2。

下面會先列出組成的room,然後解釋各個room的特點(資源的數量和種類,以及一些特殊的奇遇或者特點等等)

資源的數量,如果固定了數量的,就直接寫出數量,否則用room的參數中的distributepercent來表示

0.1以下,匱乏

0.1-0.2 適中

0.2-0.3 豐富,

0.3以上 非常豐富

資源比例的數字,只是影響資源的分佈比例,只在與其他資源相互比較時會有意義,其本身的絕對值是沒有意義的。資源的總數量,完全由distributepercent決定。

首先是必然會出現的9個task。

1、Make a pick 背景地皮-草地

Forest 2-4個 :

地皮-森林

資源豐富(0.3)

資源比例:

螢火蟲=0.2

石樹=0.015

卵石=0.05

草=0.05

小樹苗=0.8

樹枝樹=0.8

地上的樹枝=0.06

漿果叢=0.03,

多汁漿果叢 = 0.015,

紅蘑姑 = .03,

綠蘑菇 = .02,

松樹或粗壯松樹 = 6

Clearing 1個:

地皮-森林

資源匱乏(0.1)

資源比例:

豬人房=0.015,

螢火蟲 = 1,

松樹 = 1.5,

草= .1,

小樹苗=0.8,

樹枝樹 = 0.8,

地上的樹枝 = 0.06,

漿果叢=.1,

多汁漿果叢 = 0.05,

蜂巢=0.05,

紅蘑姑 = 0.01,

綠蘑菇 = .02,

特別資源:

出生點 固定1個(這個出生點會在荒野模式中用到)

1.5%概率出現大蘑菇圈,蘑菇顏色隨機,數量為15

Plain 2-4個 :

地皮-草原

資源適中(0.2)

資源比例:

石樹= 0.15,

卵石 = 0.05,

草 = 0.5,

兔子洞= 0.25,

綠蘑菇 = 0.005,

BarePlain 1個:

資源匱乏(0.1)

資源比例:

草= 0.8,

兔子洞=0.4,

以上這個task就是十分典型的出生點地形,大家如果平時有注意留心的話,就會發現,連線生存模式,出生點一定是在森林地皮上,夾雜著草原,一般都只有兔子沒有牛。

2、Dig that rock 背景地皮-岩石

Graveyard(墳墓群) 1個:

地皮-森林

固定資源:

松樹3棵,

金子1-5個

墓碑5-8個

墳墓5-8個

Rocky 2-4個:

地皮-荒漠

資源匱乏(0.1)

資源比率

卵石= 2,

石樹 = 6,

金礦 = 2,

冰山 = 1,

高鳥巢=0.1,

蜘蛛巢=0.01,

藍蘑菇 = 0.002,

草蜥 = 0.3,

特別資源:

meteorspawner(隕石雨發動器)

此task還有Forest 1-3個,Clearing1-3個,這兩個room在上一節裡已經介紹過了,就不多說了。

這就是典型的混合地形了,隕石雨只會出現在這個區域。所以想要挖墳的,當你遇到了隕石雨的時候,就可以在附近搜索墳墓群了。另外,此地形會有霧出現。

這裡特別說一下隕石雨。

隕石雨是由一個叫meteorspawner的prefab觸發的,它本身不可見的,但確實存在,存在於名為》Rocky》的room中,也就是礦石地形,但是和其它礦石地形不同的是,它的地皮是荒漠,即被草叉挖開之後的地皮。所以當你看到地皮是荒漠,而且有較多岩石分佈的地區時,就要注意不要在這附近建家了,不然就要遭受隕石雨的襲擊。

3、Great Plains 背景地皮-草原

BeefalowPlain2-4個:

地皮-草原

資源匱乏(0.05)

資源比例:

草= .01,

牛 = 0.02,

另有Plain 2-4個,Clearing2個,介紹看1、Make a pick

就是一個普通的草原,有一些牛,數量不多,少的可能只有1-2頭。區域不算大,有時候在森林裡突然看到了一片草原,多半是這個task。

4、Squeltch 背景地皮-沼澤

Marsh 6-8 個:

地皮-沼澤

資源匱乏(0.1)

資源比例:

松樹 = 1.0,

觸手= 3,

蚊子池塘 = 1,

蘆葦 = 4,

蜘蛛巢 = 0.01,

藍蘑菇 = 0.01,

綠蘑菇 = 2.02,

特別資源:

1.5%概率出現中蘑菇圈,顏色隨機,數量10個。

SlightlyMermySwamp 1個:

地皮-沼澤

資源匱乏(0.1)

資源比例:

魚人廢墟= 0.1,

豬人頭 = 0.01,

觸手 = 1,

枯樹 = 2,

荊棘= 1.5,

這個task是典型的沼澤地形,觸手很多,摻雜著零星的蜘蛛巢穴,魚人廢墟少量甚至沒有。

5、Beeeees! 背景地皮-草地

BeeClearing 1個:

地皮-草地

固定資源

螢火蟲1個

花6朵

蜂巢1個

FlowerPatch 1個:

地皮-草地

資源匱乏

資源比例:

螢火蟲 = 1,

花=2,

蜂巢=1,

另有Forest 1個,介紹見1、Make a pick

這是很常見的空曠草地地形。

6、Speak to the king 背景地皮-樺樹林

(看名字很容易就明白,這個就是豬王所在的task)

PigKingdom1個:

地皮-草地

固定資源:

豬人房5-9個

豬王1個

50%概率會有作物可收,數量15,種類隨機為以下之一:胡蘿蔔,草,花,細漿果叢(也就是第二類漿果叢)

3%概率出現樹農場,出現時隨機出現1-2個,樹農場固定為16棵松樹。

MagicalDeciduous 1個:

地皮-落葉林

資源豐富(0.3)

資源比例:

草 = 0.03,

小樹苗=1,

漿果=3,

多汁漿果 = 1.5,

紅蘑菇 = 2,

藍蘑菇 = 2,

綠蘑菇 = 2,

螢火蟲 = 4,

花=5,

鼴鼠洞 = 2,

貓洞 = 0.25

DeepDeciduous 4-6個:

地皮-落葉林

資源非常豐富(0.4)

資源比例:

草 = .03,

小樹苗=1,

漿果=.1,

多汁漿果 = 0.05,

樺樹 = 10,

貓洞 = 0.05,

紅蘑姑 = 0.15,

藍蘑菇 = 0.15,

綠蘑菇 = 0.15,

螢火蟲 = 3,

豬王村所在之地,風水寶地,資源很豐富,如果不考慮位置,是非常適合建家的地點。

7、Forest hunters 背景地皮-森林

WalrusHut_Grassy 1個:

地皮-草地

資源適中(0.275)

資源比例:

花=0.112,

草=0.2,

胡蘿蔔=0.05,

燧石=0.05,

樹苗=0.2,

松樹=0.3,

池塘=0.005,

固定資源:

海象營地 1個

ForestMole 2個:

地皮-森林

資源豐富(0.3)

資源比例:

螢火蟲 = 0.2,

石樹 = 0.015,

卵石 = 0.05,

草 = 0.05,

小樹苗=0.8,

樹枝樹 = 0.8,

地上的樹枝 = 0.06,

鼴鼠洞=0.3,

漿果=0.03,

多汁漿果 = 0.015,

紅蘑菇 = 0.03,

綠蘑菇 = 0.02,

松樹或粗壯松樹 =6

DeepForest 1個:

地皮-森林

資源極度豐富(0.8)

資源比例:

螢火蟲 = 0.1,

草 = .05,

小樹苗 =.5,

樹枝樹 = 0.5,

地上的樹枝 = 0.3,

漿果=.02,

多汁漿果 = 0.01,

藍蘑菇 = 0.02,

松樹或粗壯松樹 =6

特殊資源:

45%幾率出現《完全正常的樹》

另有Forest和Clearing各1個,特性不再贅述。

這一個task,固定有一個海象營地,是遊戲裡必定存在的。所以如果你在森林地皮上發現了完全正常的樹或者鼴鼠,那麼在附近很有可能會有海象營地。

8、Badlands 背景地皮-荒漠

Lightning 1個:

地皮-荒漠

資源匱乏(0.05)

資源比例:

荊棘 = 0.8,

草 = 0.5,

草蜥 = 0.4,

電羊 = 1,

仙人掌 = 0.8,

風滾草生成器 = 0.1,

Badlands 3個:

地皮-荒漠

資源匱乏(0.07)

資源比例:

荒漠岩 = .8,

荊棘 = 0.25,

枯樹 = 0.75,

草 = 0.5,

草蜥 = 0.6,

仙人掌 = 0.7,

狗骨 = 0.6,

風滾草生成器 = 0.1,

HoundyBadlands 2個:

地皮-荒漠

資源適中(0.2)

資源比例:

卵石 = 0.5,

金礦 = 1,

狗骨 = 0.5,

狗窩 = 0.33,

BuzzardyBadlands 2個:

地皮-荒漠

資源匱乏(0.1)

資源比例:

荊棘 = 0.66,

枯樹 = 1,

草 = 0.33,

草蜥 = 0.4,

禿鷹生成器 = 0.25,

狗骨 = 0.15,

風滾草生成器 = 0.1,

還有1個BarePlain,見前面Make a pick。

荒漠地區,特點就是資源很少,其他沒什麼可說的了。

9、For a nice walk 背景地皮-森林

MandrakeHome 2-4個:

地皮-草地

資源適中(0.2)

資源比例:

花 = 4,

螢火蟲 = 0.3,

松樹 = 6,

草 = 0.05,

小樹苗=0.5,

漿果=0.05,

多汁漿果 = 0.025,

固定資源:

1個曼德拉草

5%幾率遇見奇遇——InsanePighouse,如下圖所示

飢荒 (Don't Starve) 連線版地圖邏輯結構與地圖構成分析詳解

該task還有room:BeefalowPlain 1個,DeepForest 2-4個,Forest 1-3個,這些room在前面都介紹過了,不再贅述。

這個task還是非常不錯的,提供2-4棵曼德拉草,還有不小的概率弄到活木。DeepForest這個room的資源又非常豐富,實際上這個room是非常適合建家的。

今天就先介紹9個必定出現的task,明天繼續介紹隨機出現的另外9個task,以及task之間的連結關係。

在上面的9個必然會出現的task之外,預設的連線地上世界,還會隨機出現6個task,這6個task是隨機從以下task中抽取的:

《Befriend the pigs》,

《Kill the spiders》,

《Killer bees!》,

《Make a Beehat》,

《The hunters》,

《Magic meadow》,

《Frogs and bugs》,

《Oasis》,

《Mole Colony Deciduous》,

《Mole Colony Rocks》,

《MooseBreedingTask》,

下面就一一來講解這些task

10、Befriend the pigs 背景地皮-森林

(看名字也知道和豬村有關)

PigVillage 1個:

地皮-草地

資源匱乏(0.1)

資源比例:

草=0.05

漿果叢=0.05

多汁漿果從=0.025

固定資源:

豬人房4-7個

魚人頭1-3個

靜態佈局:

Farmplot 2-5個 產出可能為胡蘿蔔,花,草,細漿果叢

形式如下

飢荒 (Don't Starve) 連線版地圖邏輯結構與地圖構成分析詳解

3%幾率出現VillageSquare 形式如下:

飢荒 (Don't Starve) 連線版地圖邏輯結構與地圖構成分析詳解

另有room如下:

Forest 2-4個

Marsh 1-3個

DeepForest 1-3個

Clearing 1個

這個就是平常偶爾會遇到的沒豬王的豬村了,要是運氣好就會遇到上面那個方形豬村。總的來說資源還是蠻豐富的,也是建家的好地點。

11、Kill the spiders 背景地皮-礦區

SpiderVillage 2個:

地皮-礦區

資源匱乏(0.1)

資源比例:

石樹= 3,

卵石 = 1,

金礦 = 1,

地上的石頭= 1,

固定資源:

金子 4-6個

蜘蛛巢6-8個

在地圖生成時,每個蜘蛛巢80%幾率為1級,20幾率為2級

CrappyForest 1-3個:

地皮-森林

資源豐富(0.3)

資源比例:

螢火蟲= 0.2,

粗壯松樹 = 6,

石樹 = 0.015,

卵石 = 0.05,

草 = 0.05,

小樹苗=0.8,

樹枝樹 = 0.8,

地上的樹枝 = 0.06,

鼴鼠洞=0.05,

漿果叢=0.03,

多汁漿果叢 = 0.015,

紅蘑菇 = 0.03,

綠蘑菇 = 0.02,

固定資源:

玩家出生點 1個

CrappyDeepForest 1-3個

地皮-森林

資源極度豐富(0.8)

資源比例:

螢火蟲 = 0.1,

粗壯松樹 = 6,

蜘蛛巢 = 0.01,

草 = 0.05,

小樹苗=0.5,

樹枝樹 = 0.16,

地上的樹枝 = 0.06,

漿果叢=0.02,

多汁漿果叢= 0.01,

藍蘑菇 = 0.02,

其餘的room:Clearing 1個

這就是所謂的蜘蛛礦區了。典型特徵就是礦區的地上會有金子。

12、Killer bees! 背景地皮-草地

(殺人蜂區域)

Waspnests 1-3個:

地皮-草地

資源非常豐富(0.5)

資源比例:

花=6,

蜂巢=1,

草=2,

殺人蜂巢=1,

特別地,這個room有兩個標籤ForceConnected和RoadPoison

當這兩個標籤同時出現的時候,這塊room就會呈現出和一般的room不同的特點:整體區域面積縮小,而且很大幾率會成為連結兩塊task的room。在單機冒險模式中會經常看到這樣的room,是作為一道關卡出現的。連線的地圖裡當然也可以做同樣的。這些關卡room都統一放在blockers.lua檔下,有興趣可以查閱。

其它的room:Forest 1-3個,FlowerPatch 1-3個,介紹見前文

這就是所謂的殺人蜂區域了,通常都會以關卡的形式出現,堵著你不讓你走過去。

13、The hunters 背景地皮-草原

(喜聞樂見的海象平原來了!)

WalrusHut_Plains 1個:

地皮-草原

資源匱乏(0.1)

資源比例:

草=0.09,

花=0.003,

固定資源:

海象營地 1個

WalrusHut_Grassy 1個:

地皮-草地

資源適中(0.275)

資源比例:

花=0.112,

草=0.2,

胡蘿蔔=0.05,

燧石=0.05,

小樹苗=0.2,

松樹=0.3,

池塘=0.005,

固定資源:

海象營地 1個

WalrusHut_Rocky 1個:

地皮-礦區

資源匱乏(0.1)

資源比例:

燧石=0.5,

石樹 = 3,

卵石=1,

金礦=1,

高鳥巢=0.3,

固定資源:

海象營地1個

其餘的room:Clearing 2個 BGGrass 2個 BGRocky2個

這個地形就是喜聞樂見的海象平原了,我們探索地圖,很多時候也是希望能找到海象巢穴。

這個區域的特徵是,基礎地皮為草原,然後如果混合著一些礦區地皮和草地地皮,就幾乎可以確定是這個海象平原地形了。

14、Magic meadow 背景地皮-森林

Pondopolis 2個:

地皮-草地

資源匱乏(0.1)

資源比例:

草 = 8,

花 = 6,

小樹苗 = 1,

固定資源:

池塘6-8個

其餘room: Clearing 2個

這一塊task是典型的池塘區域。據說賈斯特眼骨經常出現在這一塊地形上,不過我沒有找到代碼來佐證這個傳聞。唯一可以確定的是Pondopolis這個room是不帶賈斯特眼骨的標籤的,只有Clearing帶標籤,而賈斯特眼骨只會生成在帶賈斯特眼骨標籤的room上。也就是說如果想要在這塊區域附近找的話,應該在池塘附近的空曠森林上找。

飢荒 (Don’t Starve) 攻略彙整目錄

Back to top button