《饥荒》联机版的地图大家有没有仔细研究过呢?相信大部分玩家还不了解地图构成结构与构成,今天为大家带来了饥荒联机版联机版地图逻辑结构与地图构成分析详解,一起来看吧。 前言 研究了一下联机版的地图...

《饥荒》联机版的地图大家有没有仔细研究过呢?相信大部分玩家还不了解地图构成结构与构成,今天为大家带来了饥荒联机版联机版地图逻辑结构与地图构成分析详解,一起来看吧。

《饥荒》联机版地图逻辑结构与地图构成

前言

研究了一下联机版的地图生成方式。在学习到如何创建地图的同时,也了解到了饥荒本身的地图生成机制。

感觉了解这些机制,对玩家提高探图效率,节约时间还是非常有帮助的,所以就来写一写。

限于时间精力,只写联机的,如果对单机的有兴趣,自己类比着看下代码也能明白。

首先,关于地图的大部分代码,全部都储存在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

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就是十分典型的出生点地形,大家如果平时有注意留心的话,就会发现,联机生存模式,出生点一定是在森林地皮上,夹杂着草原,一般都只有兔子没有牛。

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中,也就是矿石地形,但是和其它矿石地形不同的是,它的地皮是荒漠,即被草叉挖开之后的地皮。所以当你看到地皮是荒漠,而且有较多岩石分布的地区时,就要注意不要在这附近建家了,不然就要遭受陨石雨的袭击。

Great Plains 背景地皮-草原

BeefalowPlain2-4个:

地皮-草原

资源匮乏(0.05)

资源比例:

草=.01,

牛=0.02,

另有Plain 2-4个,Clearing2个,介绍看1、Make a pick

就是一个普通的草原,有一些牛,数量不多,少的可能只有1-2头。区域不算大,有时候在森林里突然看到了一片草原,多半是这个task。

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是典型的沼泽地形,触手很多,掺杂着零星的蜘蛛巢穴,鱼人废墟少量甚至没有。

Beeeees! 背景地皮-草地

BeeClearing 1个:

地皮-草地

固定资源

萤火虫1个

花6朵

蜂巢1个

FlowerPatch 1个:

地皮-草地

资源匮乏

资源比例:

萤火虫=1,

花=2,

蜂巢=1,

另有Forest 1个,介绍见1、Make a pick

这是很常见的空旷草地地形。

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,

猪王村所在之地,风水宝地,资源很丰富,如果不考虑位置,是非常适合建家的地点。

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,固定有一个海象营地,是游戏里必定存在的。所以如果你在森林地皮上发现了完全正常的树或者鼹鼠,那么在附近很有可能会有海象营地。

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。

荒漠地区,特点就是资源很少,其他没什么可说的了。

For a nice walk 背景地皮-森林

MandrakeHome 2-4个:

地皮-草地

资源适中(0.2)

资源比例:

花=4,

萤火虫=0.3,

松树=6,

草=0.05,

小树苗=0.5,

浆果=0.05,

多汁浆果=0.025,

固定资源:

1个曼德拉草

5%几率遇见奇遇——InsanePighouse,如下图所示

该task还有room:BeefalowPlain 1个,DeepForest 2-4个,Forest 1-3个,这些room在前面都介绍过了,不再赘述。

这个task还是非常不错的,提供2-4棵曼德拉草,还有不小的概率弄到活木。DeepForest这个room的资源又非常丰富,实际上这个room是非常适合建家的。

就先介绍9个必定出现的task,会继续介绍随机出现的另外9个task,以及task之间的连结关系。

看了上边这篇《饥荒》联机版地图逻辑结构与地图构成,各位玩家是否都了解相关信息了呢!找精彩好玩手机游戏请浏览九游

如转载涉及版权等问题,请作者与我司联系,我司将在第一时间删除或支付稿酬。