Forest地形之四:地形连接
the鸭脖
编辑于 2023年07月29日 19:06
收录于文集
共12篇

本系列的内容是循序渐进的,没看过的朋友一定要从第一篇文章开始看,否则可能看不懂后面的内容:总体说明​

你已经认识了Forest大陆的所有区块,这是巨大的进步。接下来我们研究地形与地形之间是如何连接起来的。


一、早期开发

关于DS的早期开发,B站上已经有很多精品视频了,感兴趣的可以自行搜索。这里稍微提一些与本文有关的关键信息。

科雷最初将游戏设计为两大块:猪镇和荒野,玩家经营着一个猪镇,经营的好坏将会影响猪人们的去留。为了更好的建设猪镇,玩家需要进入附近的荒野,闯关、打怪、采集,把资源带回来。然后猪镇被设计成可以分享给朋友看,这样玩家为了给别人炫耀,就会去荒野冒险,或者给科雷充钱。

荒野部分感觉好像有点像今天的饥荒。没错,在后续的测试中,“荒野冒险”的游戏性和乐趣远大于“建设猪镇”本身,反响很好,于是开发团队的兴趣也逐渐向荒野部分倾斜。荒野部分的设计思路非常简单,总的来说就是“离猪镇越远的地方越危险”。游戏里有一些RPG式的NPC和任务系统,玩家需要完成任务才能获得相应道具,走向更远的地方。后来,又引入了大量roguelike游戏元素,玩家需要在前期简单的地形里搜集资源、打造装备、完成任务、解开谜题、获取钥匙,才能逐步解锁和去往更危险的地方。而这些地形里包含随机的资源、随机的谜题、较大的生存压力、极高的死亡惩罚、黑色幽默,难度越来越高,画风也变得荒诞起来,正是这一时期,DS有了它(放眼现今的游戏界都)独有韵味的主基调。

从根本上说,《饥荒》从被设计出来的那一天,就命中注定倾向于拥有一个更加线性的游戏流程。科雷希望玩家按照一定的路线,一个区域接着一个区域的探索,逐步遭遇和解决游戏的全部“谜题”。至于解密的方式,不做严格规定,呈现出一定的“沙盒”元素。这种思路在毕业boss“暗影编织者”和“天体英雄”身上体现的淋漓尽致。

沙盒游戏与线性叙事可能存在一定的冲突,《饥荒》把两者尽可能融合的很好。《饥荒》是沙盒游戏里剧情讲的非常精彩的那一类。十年至今,主线剧情依然常看常新,每次更新都会引发热议,以至于剧情党成为玩家群体的一个重要分支。但与此同时,线性叙事的风格依然存在,我与朋友探讨饥荒的游戏设计时认为,《饥荒》并不能说是纯粹的沙盒游戏,因为科雷其实并没有给玩家太多选择。


二、剧情上的含义

DST的代码中保存着这样一句话:“The pig village is in trouble, can you defend it and remove the threat?(猪村陷入了危机,你能保卫它并消除威胁吗?)”,所以科雷保留了一个“勇者斗恶龙”的故事大纲。游戏是如何构造并驱使玩家完成这项挑战的呢?

  • 首先,玩家应该出生在一片绿草地上,这里有很多基础物资,例如食物、草和树枝。

  • 接着,玩家进入具有阻碍的区域,例如一片森林,或者一堆矿石,这样玩家可以学习如何制作斧子、稿子等基础工具,清除阻碍并获得对应的资源。

  • 然后,玩家会遇到掉落大肉的生物,例如高脚鸟或者皮弗洛牛,打败它可以获得大肉,不仅可以用于充饥,也为后续内容做准备。

  • 再次,玩家会遇到猪村,这样他可以用手中的大肉雇佣猪人。

  • 最后,玩家将带领猪人一起前往蜘蛛的领域,打败蜘蛛,解除猪人王国的危机。

这是一个一层层向前推进的结构。它要求我们必须构造一系列区域:一个出生岛作为起点、一个森林或矿区岛、一个生活了高脚鸟或皮弗洛牛的岛、猪人的岛、蜘蛛的岛。然后,通过桥梁来连接各个小岛,于是就得到了《饥荒》最初的地图:

基准模型

《饥荒》早期地图,由一个个小岛组成,中间以桥梁连接

猪王是《饥荒》一开始就存在的NPC,十年未变

连接小岛的桥梁

以上图片来自我试玩第一版《饥荒》(国内流传的文件名叫第02版,实际就是第一版)时的截图。现在再回头看第一篇“forest地形的总体说明”中,介绍地形一开头的这段话:

【地形】指的是“我现在在一片青草地上,有草和小树枝,有树,有花,还有浆果”,“我现在在一片森林里,有很多树,还有很多蜘蛛”,“我现在在一片草原上,有一些草和兔子,还有牛”,这是不同【地形】给人带来的最直观的差异,也是大多数人进入饥荒世界最初的感受。

你有没有意识到,《饥荒》最初设定的那些小岛,是不是风格迥异?猪村岛有很多猪,就像现在的猪王村一样;出生岛有基础物资,就像现在的三合一地形一样;矿区岛有很多高脚鸟和矿石,就像现在的马赛克矿区一样…所以,这些小岛就可以看作是【地形】的雏形,连接各个小岛的桥梁就是连接【地形】的卵石路。

诚然,游戏后续的发展与当初的设定已经截然不同了。但我们依然可以感受到永恒大陆之所以是这样的最初的原因。


三、锁与钥匙(locks & keys)

通过剧情,我们已经知道了《饥荒》被设计成线性的、系统推进的游戏,前段地形遇到的元素,将用来解决后段地形遭遇的问题,这是地形连接的基础原理。

在上述”拯救猪人王国“的游戏挑战中,我们给玩家提出了问题“有森林阻挡前进”,这个问题可以被形容为是“一把锁”。我们给玩家的解决方案是“用燧石和树枝造一把斧子”,这个解决方案可以被形容为是“一把钥匙”。

我们必须要让玩家首先出现在“钥匙地形”找到解决方案、随后进入“锁地形”去解决问题。于是,“钥匙地形”和“锁地形”就应该相互连接,或者至少离得不远。例如将草地和森林相连,这样玩家可以先在草地收集材料做工具,再去隔壁森林清理树木。

其他问题也是如此。给玩家提出了“打蜘蛛需要猪人”的问题,这样蜘蛛地形就是锁,猪人地形就是钥匙,两者相连,雇佣了猪人下一步打蜘蛛。“雇佣猪人需要肉”,这样猪村地形是锁,高鸟地形是钥匙,两者相连,打完高脚鸟下一步雇佣猪人。

再后来,“锁”和“钥匙”慢慢就成为一个抽象的标签了,仅仅用于表达一种对应关系,用来保证地形的连贯性。我们赋予地形一个“锁列表”,代表连接这块地形需要的条件;以及一个“钥匙列表”,代表这块地形可以提供的条件。当两块地形存在对应的锁和钥匙时,这两块地形就可以相连。

故事总要有个开头,这个开头就是出生点。出生点的位置由单独的文件控制,默认情况下,它所对应的地形是三合一。三合一的锁是“NONE”,也就是这块地形的出现不需要以连接其他地形为条件,它是直接生成的。有了三合一,会提供一些钥匙,这些钥匙就能解锁周边的其他地形。因此,地形的生成总是从三合一地形开始,按照钥匙和锁的对应关系顺次连接

  • 首先生成无需条件的起始地形(基本固定了是三合一地形);

  • 按照锁和钥匙的对应关系,从剩下的地形中找到满足条件的地形,尽量靠近着已经生成的地形,依次向外拓展;

  • 找不到对应关系,则随机选取一个地形生成(一般会在地形末尾出现这种情况)。

这个规则就是锁和钥匙配对的基本原理。在此之上,下面具体分析游戏程序是如何按照这个规则生成地图。


四、将锁与钥匙连接(连接规则)

每个地形都有自己的钥匙和锁,因此有如下的列表:

锁与钥匙列表

当然,光知道这些锁和钥匙没有什么用,我们还需要知道锁和钥匙之间的对应关系。因此又有如下的列表:

对应关系列表

这两张表要怎么看呢?我以蜂后地形为例做一个简单的演示。首先,在“锁与钥匙列表”中可以找到蜂后地形拥有的锁和钥匙:

其次,如果一块地形能够打开蜂后地形的锁,那么它就应该可以与蜂后地形相连。所以哪些钥匙能够打开“locks.beehive”和“locks.tier1”这两个锁呢?需要查询“对应关系列表”,发现可以打开“locks.beehive”的钥匙是“axe”,可以打开“locks.tier1"的钥匙是”tier1“和”tier2&#​34;,于是:

那么哪些地形有这些钥匙呢?再回到“锁与钥匙列表”,寻找到以下地形:

除了这些,还有一种可能是蜂后地形拥有的钥匙,能够打开别的地形的锁。查询“对应关系列表”,我们可以找到“honey”和“tier2”这两把钥匙能够打开的锁:

最后,回到“锁与钥匙列表”,看看有哪些地形拥有这些可以被蜂后地形的钥匙解锁的锁:

两边取并集,最终我们就得到了在“锁与钥匙”的结构下,可以与蜂后地形相连的所有地形:在所有的19个地形中,18个都可以和蜂后地形相连。唯一一个不与蜂后相连的地形是【杀人蜂平原】。

从游戏设计方面考虑,这两片由蜜蜂主导的领域不应该连在一起,否则整个地区就会既有蜂后又有大量的蜜蜂和杀人蜂,还有无穷无尽的花海,而别的地区蜜蜂则较为罕见,这是不合适的。

现在我们经过计算得到蜂后地形的连接关系,发现代码层面它们真的不会连在一起。实际开一些存档看一看,游戏中也确实见不到它们连在一起(除非出现失误)。


五、地形的强连接与弱连接(生成规则)

锁与钥匙是最底层的连接规则之上,我们开始探讨程序如何利用这个规则:

第一步:选定这张地图的全部地形,即10个必刷地形、5个随机地形。

第二步:三合一作为起点,最先加入“临时地图”。找出这个“临时地图”包含的所有钥匙。

第三步:遍历各个备选地形,考虑临时地图钥匙组对各个地形的解锁情况

  • 如果临时地图钥匙组能够打开某个地形的全部锁,那么就将这个地形纳入,放到能打开它的锁的地形后方。因为要求能打开全部锁,这个条件较为严格,所以称为“强连接”。

  • 如果临时地图钥匙组不能打开任何一个备选地形的全部锁,那么放宽条件,将能打开部分锁的地形纳入,放到能打开它的锁的地形后方。因为只要求打开部分锁就行,因此这个条件较为宽松,所以称为“弱连接”。

  • 如果临时地图钥匙组完全无法打开地形锁,那么就将该地形随机的加到地形后方。这个情况一般出现在蚁狮沙漠

以马赛克为例,包含三合一的临时地图的钥匙有“keys_pickaxe”,能打开马赛克的全部锁——“rocks(马赛克只有这一个锁)”,因此马赛克就可以加入临时地图。

至于马赛克放到哪里,有多个地形可以解开它的锁,就随机选择一个。现在只有三合一,就放到三合一后面。

临时地图钥匙组能够打开马赛克地形的全部锁

将马赛克地形纳入临时地图,更新临时地图的钥匙组

马赛克加入临时地图后,扩充了临时地图的钥匙组,它就有机会解锁新的地形的全部锁,例如此时猪王就是可以纳入临时地图的地形了,放在任意一个能解锁它的地形后面,也就是放到三合一或者马赛克后面都可以。

更新后的临时地图钥匙组能够打开猪王的全部锁,将猪王纳入临时地图

整个forest地形就是这样慢慢连接起来的。可以看到,生成规则实际上是在连接规则的基础上增加了一些新的内容,这也就是为什么“地图实际生成情况不是锁和钥匙的简单匹配”的原因。

在cave地形中,地形的连接只存在“强连接”而不存在“弱连接”,这意味着洞穴地形的锁和钥匙会更加简单,连接关系也更加固定。


六、地形的前、中、后段

在基本模型中,钥匙地形→锁地形,因此锁和钥匙的连接规则将会影响地形的顺序。例如所有的地形都拥有名为“tier”的锁和钥匙,从tier1到tier5。这意味着科雷天然的将一些地形排在了前面,而另一些地形排在了后面。

在临时地图中,纳入与否要看临时地图钥匙组的解锁情况,纳入之后,排在队伍最后。因此,生成规则进一步加强了连接规则对地形顺序的影响。有的地形因为可以被简单解锁而出现在开头,有地形则因为有好几把锁、需要很多钥匙,所以通常出现在结尾。

由此,我们可以将地形划分出“前段、中段、后段”。这个“前中后”的区分,在forest地形的范畴中是一个非常模糊的概念,除了三合一地形作为出生地强制在第一个以外,游戏里并没有严格规定一个地形是应该在前段还是在后段。之所以还要探讨这个话题是因为,虽然没有规定,但游戏中确实有这种倾向。

三合一、马赛克、草地池塘这种拥有基础物资的地形,往往是前段地形,属于一进大门差不多就能看到的;猪王、蜂后、沼泽往往是中段地形,需要从大门向外探索一段距离才能看到,它们后面往往有其他地形;月台、龙蝇、蚁狮、蜘蛛矿区、海象平原、小陨石区、杀人蜂这种比较危险或tier比较靠后的地形,往往是后段地形,需要朝一个方向走到最后才能看到。

当然,你也可以自己去计算一个地形的前端和后端可能有哪些地形。前中后段这个概念到底有什么用呢?它主要可以用于回答“地形背后有没有地形”。在探图的时候,我们并不知道一个地形后面会不会有其他地形、往某个方向要走多远才算尽头。前中后段的区分,可以勉强作为一个判别方案。


七、[案例]“科雷一夏”龙蝇挑战赛

地形连接有什么用呢?这里举一个小案例。

2022年8月,科雷发起了“科雷一夏”龙蝇挑战赛,看谁能最快的击杀龙蝇。基本节奏是:大门→找到猪村,制作炼金引擎、火腿棒、捡排箫→找到龙蝇并击杀。从地形来看,想要快速完成这一挑战有两大关键问题:(1)猪王并不与大门连接,所以寻找猪王比较困难。(2)龙蝇是比较末端的地形,如果它处于地形末端就很难找了,但也有可能与猪王或大门连接,这样就比较方便。所以,能在短时间内完成这个挑战的地图应该有以下三个特点:

  • 地图上刷新了小猪村地形,这样真卵石路才能连接猪王村和小猪村,起到指路的作用;

  • 进入游戏就能看到真卵石路,也就是真卵石路路过大门或者在不远处;

  • 龙蝇连着猪王或大门,很容易看到,攒好资源直接开打。

某一项不满足,速度就会慢下来,那基本就要重新开图。当时的挑战者就是每天不停的刷图、刷图、刷图……地形构造是成功的绝大部分原因,可以说这个挑战八成看开图运气,两成看打龙蝇的技术。

现在你可以明白大家当时刷图刷的是什么、要去哪里找资源、怎样才能到达那里,而不是纯粹觉得“哇运气真好”。当你知道的规律足够多,就能读懂这个剧本,自己去尝试的时候也会下意识的注意和运用,效率会高一些。

因为某些原因,龙蝇挑战赛的后续发展远超大家的预想。具体发生了什么暂且按下不表,待后面学习到更多内容后,会再次谈到这次比赛。


结语与前瞻

本文解决的问题是“A地形与B地形能不能相连”。

玩家可能还有疑问:现在我知道A地形可以与B地形相连了,那么相连的A和B是如何排列的呢?地图上这15个地形是排成一列?还是绕成一个圈?又或者是别的什么样子?

下篇文章我们就来看看地形是如何排列的,这部分内容实际上与玩家的设置有关。我们下篇文章再见!