導(dǎo) 《饑荒》聯(lián)機(jī)版的地圖大家有沒有仔細(xì)研究過呢?相信大部分玩家還不了解地圖構(gòu)成結(jié)構(gòu)與構(gòu)成,今天為大家?guī)砹损嚮穆?lián)機(jī)版聯(lián)機(jī)版地圖邏輯結(jié)構(gòu)與地圖構(gòu)成分析詳解,一起來看吧。 前言 研究了一下聯(lián)機(jī)版的地圖...

《饑荒》聯(lián)機(jī)版的地圖大家有沒有仔細(xì)研究過呢?相信大部分玩家還不了解地圖構(gòu)成結(jié)構(gòu)與構(gòu)成,今天為大家?guī)砹损嚮穆?lián)機(jī)版聯(lián)機(jī)版地圖邏輯結(jié)構(gòu)與地圖構(gòu)成分析詳解,一起來看吧。

《饑荒》聯(lián)機(jī)版地圖邏輯結(jié)構(gòu)與地圖構(gòu)成

前言

研究了一下聯(lián)機(jī)版的地圖生成方式。在學(xué)習(xí)到如何創(chuàng)建地圖的同時(shí),也了解到了饑荒本身的地圖生成機(jī)制。

感覺了解這些機(jī)制,對(duì)玩家提高探圖效率,節(jié)約時(shí)間還是非常有幫助的,所以就來寫一寫。

限于時(shí)間精力,只寫聯(lián)機(jī)的,如果對(duì)單機(jī)的有興趣,自己類比著看下代碼也能明白。

首先,關(guān)于地圖的大部分代碼,全部都儲(chǔ)存在map文件夾下。不知道該怎么用相關(guān)函數(shù)的時(shí)候,參照這個(gè)文件夾里的代碼就好。

邏輯結(jié)構(gòu)

然后,再說一說饑荒地圖的邏輯結(jié)構(gòu)。下面的專有名詞,由于我不清楚確切的中文翻譯,就全部采用其英文名行文了。

prefab,是地圖里最基礎(chǔ)的東西,也就是所謂的最小元,一顆草,一塊燧石,一棵樹,都是一個(gè)prefab。這是饑荒地圖里最小的構(gòu)成元素。

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

task,包含了一系列的room的一塊非常大的區(qū)域。因?yàn)榘仄は嗨苹蛳嗤膔oom,所以在地圖上常常以所謂地形的形態(tài)呈現(xiàn)出來??梢詾橐粋€(gè)task設(shè)定選取哪幾種room以及相應(yīng)的數(shù)量,還可以設(shè)定作為背景的room(在room的數(shù)量不足時(shí),偶爾會(huì)填充進(jìn)來。),更為重要的,可以設(shè)置keys和locks,這決定著生成世界時(shí),各個(gè)task之間要怎樣連接起來。

taskset和level,taskset是聯(lián)機(jī)版最近才新增加的東西,單機(jī)只有l(wèi)evel。taskset基本就是包含了一系列的task,然后level就是比taskset更高的一級(jí),除了控制taskset之外,還可以控制世界生成的其他參數(shù),比如說春夏秋冬的長度之類的。由于現(xiàn)在不是在講怎么做mod,這一部分就不細(xì)講了。

在level之上還有一個(gè)叫游戲類型的東西,但也和本貼關(guān)系不大,不細(xì)講。

然后有一些比較特殊的,要單獨(dú)講。

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

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

3、keys和locks。這兩張表是task中的屬性選項(xiàng),關(guān)系著世界生成時(shí),各個(gè)task怎么結(jié)合。在map文件夾下的lockandkey.lua文件里有l(wèi)ock和key的對(duì)應(yīng)關(guān)系描述,當(dāng)一個(gè)task的key和另外一個(gè)task的lock匹配的時(shí)候,他們就會(huì)結(jié)合在一起。不過有時(shí)候湊不出匹配的,那就只能胡亂結(jié)合了。需要說明的是,一個(gè)lock可以有多個(gè)key和它匹配。結(jié)合還設(shè)計(jì)到start task的選取,具體操作我已經(jīng)研究實(shí)踐過了,但這不是本貼的重點(diǎn),就不詳細(xì)說明了。

講完這些基礎(chǔ)知識(shí),就可以來詳細(xì)地說一下地圖的構(gòu)成了,這里只說饑荒地上世界的默認(rèn)構(gòu)成,地下世界或者說其他設(shè)置,構(gòu)成的方式和地上世界是不一樣的。

地圖構(gòu)成

打開map\tasksets\forest.lua

然后你可以在這個(gè)文件里看到AddTaskSet這個(gè)函數(shù),里面的參數(shù)就是要詳解的內(nèi)容了。這個(gè)函數(shù)使用了兩次,第一次,第一個(gè)參數(shù)為"default"的,就是我們默認(rèn)世界的生成參數(shù)。

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

tasks={

"Make a pick",

"Dig that rock",

"Great Plains",

"Squeltch",

"Beeeees!",

"Speak to the king",

"Forest hunters",

"Badlands",

"For a nice walk",

},

這個(gè)tasks表,就設(shè)定了每次開世界,必然會(huì)有的幾個(gè)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 就設(shè)定了會(huì)隨機(jī)出現(xiàn)的task的數(shù)量,而后面的optionaltasks 表,就是所有可能會(huì)被抽取的task。

valid_start_tasks={

"Make a pick",

},

valid_start_tasks 就是設(shè)定可能會(huì)作為世界生成最開始的task的集合。最開始的task,是會(huì)因?yàn)樗膋eys和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 就是設(shè)定各個(gè)奇遇了,這里ResurrectionStone(復(fù)活石),WormholeGrass(蟲洞),都可以算是奇遇。后面的count就是數(shù)量,tasks就是設(shè)定這些奇遇可能出現(xiàn)在哪些task上。

代碼分析

然后來對(duì)上面的代碼做分析。為了加強(qiáng)和游戲的聯(lián)系感,我們分析一下各個(gè)task對(duì)應(yīng)的所謂地形。相應(yīng)的代碼可以在map\tasks文件夾下查到,這里就不多說了,直接說代碼的解析結(jié)果--也就是每個(gè)task的room組成。

room的大小,雖然不固定,但總體上是差不多的,決定一個(gè)task有多大,就看room的總數(shù)量有多少了。另外,room的數(shù)量是可以設(shè)定隨機(jī)的。不過,官方的習(xí)慣,差值不會(huì)超過2。

下面會(huì)先列出組成的room,然后解釋各個(gè)room的特點(diǎn)(資源的數(shù)量和種類,以及一些特殊的奇遇或者特點(diǎn)等等)

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

0.1以下,匱乏

0.1-0.2 適中

0.2-0.3 豐富,

0.3以上 非常豐富

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

首先是必然會(huì)出現(xiàn)的9個(gè)task

Make a pick 背景地皮-草地

Forest 2-4個(gè) :

地皮-森林

資源豐富(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個(gè):

地皮-森林

資源匱乏(0.1)

資源比例:

豬人房=0.015,

螢火蟲=1,

松樹=1.5,

草=.1,

小樹苗=0.8,

樹枝樹=0.8,

地上的樹枝=0.06,

漿果叢=.1,

多汁漿果叢=0.05,

蜂巢=0.05,

紅蘑姑=0.01,

綠蘑菇=.02,

特別資源:

出生點(diǎn) 固定1個(gè)(這個(gè)出生點(diǎn)會(huì)在荒野模式中用到)

1.5%概率出現(xiàn)大蘑菇圈,蘑菇顏色隨機(jī),數(shù)量為15

Plain 2-4個(gè):

地皮-草原

資源適中(0.2)

資源比例:

石樹=0.15,

卵石=0.05,

草=0.5,

兔子洞=0.25,

綠蘑菇=0.005,

BarePlain 1個(gè):

資源匱乏(0.1)

資源比例:

草=0.8,

兔子洞=0.4,

以上這個(gè)task就是十分典型的出生點(diǎn)地形,大家如果平時(shí)有注意留心的話,就會(huì)發(fā)現(xiàn),聯(lián)機(jī)生存模式,出生點(diǎn)一定是在森林地皮上,夾雜著草原,一般都只有兔子沒有牛。

Dig that rock 背景地皮-巖石

Graveyard(墳?zāi)谷海?1個(gè):

地皮-森林

固定資源:

松樹3棵,

金子1-5個(gè)

墓碑5-8個(gè)

墳?zāi)?-8個(gè)

Rocky 2-4個(gè):

地皮-荒漠

資源匱乏(0.1)

資源比率

卵石=2,

石樹=6,

金礦=2,

冰山=1,

高鳥巢=0.1,

蜘蛛巢=0.01,

藍(lán)蘑菇=0.002,

草蜥=0.3,

特別資源:

meteorspawner(隕石雨發(fā)動(dòng)器)

此task還有Forest 1-3個(gè),Clearing1-3個(gè),這兩個(gè)room在上一節(jié)里已經(jīng)介紹過了,就不多說了。

這就是典型的混合地形了,隕石雨只會(huì)出現(xiàn)在這個(gè)區(qū)域。所以想要挖墳的,當(dāng)你遇到了隕石雨的時(shí)候,就可以在附近搜索墳?zāi)谷毫?。另外,此地形?huì)有霧出現(xiàn)。

這里特別說一下隕石雨。

隕石雨是由一個(gè)叫meteorspawner的prefab觸發(fā)的,它本身不可見的,但確實(shí)存在,存在于名為"Rocky"的room中,也就是礦石地形,但是和其它礦石地形不同的是,它的地皮是荒漠,即被草叉挖開之后的地皮。所以當(dāng)你看到地皮是荒漠,而且有較多巖石分布的地區(qū)時(shí),就要注意不要在這附近建家了,不然就要遭受隕石雨的襲擊。

Great Plains 背景地皮-草原

BeefalowPlain2-4個(gè):

地皮-草原

資源匱乏(0.05)

資源比例:

草=.01,

牛=0.02,

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

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

Squeltch 背景地皮-沼澤

Marsh 6-8 個(gè):

地皮-沼澤

資源匱乏(0.1)

資源比例:

松樹=1.0,

觸手=3,

蚊子池塘=1,

蘆葦=4,

蜘蛛巢=0.01,

藍(lán)蘑菇=0.01,

綠蘑菇=2.02,

特別資源:

1.5%概率出現(xiàn)中蘑菇圈,顏色隨機(jī),數(shù)量10個(gè)。

SlightlyMermySwamp 1個(gè):

地皮-沼澤

資源匱乏(0.1)

資源比例:

魚人廢墟=0.1,

豬人頭=0.01,

觸手=1,

枯樹=2,

荊棘=1.5,

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

Beeeees! 背景地皮-草地

BeeClearing 1個(gè):

地皮-草地

固定資源

螢火蟲1個(gè)

花6朵

蜂巢1個(gè)

FlowerPatch 1個(gè):

地皮-草地

資源匱乏

資源比例:

螢火蟲=1,

花=2,

蜂巢=1,

另有Forest 1個(gè),介紹見1、Make a pick

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

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

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

PigKingdom1個(gè):

地皮-草地

固定資源:

豬人房5-9個(gè)

豬王1個(gè)

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

3%概率出現(xiàn)樹農(nóng)場,出現(xiàn)時(shí)隨機(jī)出現(xiàn)1-2個(gè),樹農(nóng)場固定為16棵松樹。

MagicalDeciduous 1個(gè):

地皮-落葉林

資源豐富(0.3)

資源比例:

草=0.03,

小樹苗=1,

漿果=3,

多汁漿果=1.5,

紅蘑菇=2,

藍(lán)蘑菇=2,

綠蘑菇=2,

螢火蟲=4,

花=5,

鼴鼠洞=2,

貓洞=0.25

DeepDeciduous 4-6個(gè):

地皮-落葉林

資源非常豐富(0.4)

資源比例:

草=.03,

小樹苗=1,

漿果=.1,

多汁漿果=0.05,

樺樹=10,

貓洞=0.05,

紅蘑姑=0.15,

藍(lán)蘑菇=0.15,

綠蘑菇=0.15,

螢火蟲=3,

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

Forest hunters 背景地皮-森林

WalrusHut_Grassy 1個(gè):

地皮-草地

資源適中(0.275)

資源比例:

花=0.112,

草=0.2,

胡蘿卜=0.05,

燧石=0.05,

樹苗=0.2,

松樹=0.3,

池塘=0.005,

固定資源:

海象營地 1個(gè)

ForestMole 2個(gè):

地皮-森林

資源豐富(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個(gè):

地皮-森林

資源極度豐富(0.8)

資源比例:

螢火蟲=0.1,

草=.05,

小樹苗=.5,

樹枝樹=0.5,

地上的樹枝=0.3,

漿果=.02,

多汁漿果=0.01,

藍(lán)蘑菇=0.02,

松樹或粗壯松樹=6

特殊資源:

45%幾率出現(xiàn)“完全正常的樹”

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

這一個(gè)task,固定有一個(gè)海象營地,是游戲里必定存在的。所以如果你在森林地皮上發(fā)現(xiàn)了完全正常的樹或者鼴鼠,那么在附近很有可能會(huì)有海象營地。

Badlands 背景地皮-荒漠

Lightning 1個(gè):

地皮-荒漠

資源匱乏(0.05)

資源比例:

荊棘=0.8,

草=0.5,

草蜥=0.4,

電羊=1,

仙人掌=0.8,

風(fēng)滾草生成器=0.1,

Badlands 3個(gè):

地皮-荒漠

資源匱乏(0.07)

資源比例:

荒漠巖=.8,

荊棘=0.25,

枯樹=0.75,

草=0.5,

草蜥=0.6,

仙人掌=0.7,

狗骨=0.6,

風(fēng)滾草生成器=0.1,

HoundyBadlands 2個(gè):

地皮-荒漠

資源適中(0.2)

資源比例:

卵石=0.5,

金礦=1,

狗骨=0.5,

狗窩=0.33,

BuzzardyBadlands 2個(gè):

地皮-荒漠

資源匱乏(0.1)

資源比例:

荊棘=0.66,

枯樹=1,

草=0.33,

草蜥=0.4,

禿鷹生成器=0.25,

狗骨=0.15,

風(fēng)滾草生成器=0.1,

還有1個(gè)BarePlain,見前面Make a pick。

荒漠地區(qū),特點(diǎn)就是資源很少,其他沒什么可說的了。

For a nice walk 背景地皮-森林

MandrakeHome 2-4個(gè):

地皮-草地

資源適中(0.2)

資源比例:

花=4,

螢火蟲=0.3,

松樹=6,

草=0.05,

小樹苗=0.5,

漿果=0.05,

多汁漿果=0.025,

固定資源:

1個(gè)曼德拉草

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

該task還有room:BeefalowPlain 1個(gè),DeepForest 2-4個(gè),F(xiàn)orest 1-3個(gè),這些room在前面都介紹過了,不再贅述。

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

就先介紹9個(gè)必定出現(xiàn)的task,會(huì)繼續(xù)介紹隨機(jī)出現(xiàn)的另外9個(gè)task,以及task之間的連結(jié)關(guān)系。

看了上邊這篇《饑荒》聯(lián)機(jī)版地圖邏輯結(jié)構(gòu)與地圖構(gòu)成,各位玩家是否都了解相關(guān)信息了呢!找精彩好玩手機(jī)游戲請(qǐng)瀏覽九游。

如轉(zhuǎn)載涉及版權(quán)等問題,請(qǐng)作者與我司聯(lián)系,我司將在第一時(shí)間刪除或支付稿酬。