Forest地形之四:地形连接
本系列的内容是循序渐进的,没看过的朋友一定要从第一篇文章开始看,否则可能看不懂后面的内容:总体说明
你已经认识了Forest大陆的所有区块,这是巨大的进步。接下来我们研究地形与地形之间是如何连接起来的。

一、早期开发
关于DS的早期开发,B站上已经有很多精品视频了,感兴趣的可以自行搜索。这里稍微提一些与本文有关的关键信息。
科雷最初将游戏设计为两大块:猪镇和荒野,玩家经营着一个猪镇,经营的好坏将会影响猪人们的去留。为了更好的建设猪镇,玩家需要进入附近的荒野,闯关、打怪、采集,把资源带回来。然后猪镇被设计成可以分享给朋友看,这样玩家为了给别人炫耀,就会去荒野冒险,或者给科雷充钱。
荒野部分感觉好像有点像今天的饥荒。没错,在后续的测试中,“荒野冒险”的游戏性和乐趣远大于“建设猪镇”本身,反响很好,于是开发团队的兴趣也逐渐向荒野部分倾斜。荒野部分的设计思路非常简单,总的来说就是“离猪镇越远的地方越危险”。游戏里有一些RPG式的NPC和任务系统,玩家需要完成任务才能获得相应道具,走向更远的地方。后来,又引入了大量roguelike游戏元素,玩家需要在前期简单的地形里搜集资源、打造装备、完成任务、解开谜题、获取钥匙,才能逐步解锁和去往更危险的地方。而这些地形里包含随机的资源、随机的谜题、较大的生存压力、极高的死亡惩罚、黑色幽默,难度越来越高,画风也变得荒诞起来,正是这一时期,DS有了它(放眼现今的游戏界都)独有韵味的主基调。
从根本上说,《饥荒》从被设计出来的那一天,就命中注定倾向于拥有一个更加线性的游戏流程。科雷希望玩家按照一定的路线,一个区域接着一个区域的探索,逐步遭遇和解决游戏的全部“谜题”。至于解密的方式,不做严格规定,呈现出一定的“沙盒”元素。这种思路在毕业boss“暗影编织者”和“天体英雄”身上体现的淋漓尽致。
沙盒游戏与线性叙事可能存在一定的冲突,《饥荒》把两者尽可能融合的很好。《饥荒》是沙盒游戏里剧情讲的非常精彩的那一类。十年至今,主线剧情依然常看常新,每次更新都会引发热议,以至于剧情党成为玩家群体的一个重要分支。但与此同时,线性叙事的风格依然存在,我与朋友探讨饥荒的游戏设计时认为,《饥荒》并不能说是纯粹的沙盒游戏,因为科雷其实并没有给玩家太多选择。

二、剧情上的含义
DST的代码中保存着这样一句话:“The pig village is in trouble, can you defend it and remove the threat?(猪村陷入了危机,你能保卫它并消除威胁吗?)”,所以科雷保留了一个“勇者斗恶龙”的故事大纲。游戏是如何构造并驱使玩家完成这项挑战的呢?
首先,玩家应该出生在一片绿草地上,这里有很多基础物资,例如食物、草和树枝。
接着,玩家进入具有阻碍的区域,例如一片森林,或者一堆矿石,这样玩家可以学习如何制作斧子、稿子等基础工具,清除阻碍并获得对应的资源。
然后,玩家会遇到掉落大肉的生物,例如高脚鸟或者皮弗洛牛,打败它可以获得大肉,不仅可以用于充饥,也为后续内容做准备。
再次,玩家会遇到猪村,这样他可以用手中的大肉雇佣猪人。
最后,玩家将带领猪人一起前往蜘蛛的领域,打败蜘蛛,解除猪人王国的危机。
这是一个一层层向前推进的结构。它要求我们必须构造一系列区域:一个出生岛作为起点、一个森林或矿区岛、一个生活了高脚鸟或皮弗洛牛的岛、猪人的岛、蜘蛛的岛。然后,通过桥梁来连接各个小岛,于是就得到了《饥荒》最初的地图:




以上图片来自我试玩第一版《饥荒》(国内流传的文件名叫第02版,实际就是第一版)时的截图。现在再回头看第一篇“forest地形的总体说明”中,介绍地形一开头的这段话:
【地形】指的是“我现在在一片青草地上,有草和小树枝,有树,有花,还有浆果”,“我现在在一片森林里,有很多树,还有很多蜘蛛”,“我现在在一片草原上,有一些草和兔子,还有牛”,这是不同【地形】给人带来的最直观的差异,也是大多数人进入饥荒世界最初的感受。
你有没有意识到,《饥荒》最初设定的那些小岛,是不是风格迥异?猪村岛有很多猪,就像现在的猪王村一样;出生岛有基础物资,就像现在的三合一地形一样;矿区岛有很多高脚鸟和矿石,就像现在的马赛克矿区一样…所以,这些小岛就可以看作是【地形】的雏形,连接各个小岛的桥梁就是连接【地形】的卵石路。
诚然,游戏后续的发展与当初的设定已经截然不同了。但我们依然可以感受到永恒大陆之所以是这样的最初的原因。

三、锁与钥匙(locks & keys)
通过剧情,我们已经知道了《饥荒》被设计成线性的、系统推进的游戏,前段地形遇到的元素,将用来解决后段地形遭遇的问题,这是地形连接的基础原理。
在上述”拯救猪人王国“的游戏挑战中,我们给玩家提出了问题“有森林阻挡前进”,这个问题可以被形容为是“一把锁”。我们给玩家的解决方案是“用燧石和树枝造一把斧子”,这个解决方案可以被形容为是“一把钥匙”。
我们必须要让玩家首先出现在“钥匙地形”找到解决方案、随后进入“锁地形”去解决问题。于是,“钥匙地形”和“锁地形”就应该相互连接,或者至少离得不远。例如将草地和森林相连,这样玩家可以先在草地收集材料做工具,再去隔壁森林清理树木。
其他问题也是如此。给玩家提出了“打蜘蛛需要猪人”的问题,这样蜘蛛地形就是锁,猪人地形就是钥匙,两者相连,雇佣了猪人下一步打蜘蛛。“雇佣猪人需要肉”,这样猪村地形是锁,高鸟地形是钥匙,两者相连,打完高脚鸟下一步雇佣猪人。
再后来,“锁”和“钥匙”慢慢就成为一个抽象的标签了,仅仅用于表达一种对应关系,用来保证地形的连贯性。我们赋予地形一个“锁列表”,代表连接这块地形需要的条件;以及一个“钥匙列表”,代表这块地形可以提供的条件。当两块地形存在对应的锁和钥匙时,这两块地形就可以相连。
故事总要有个开头,这个开头就是出生点。出生点的位置由单独的文件控制,默认情况下,它所对应的地形是三合一。三合一的锁是“NONE”,也就是这块地形的出现不需要以连接其他地形为条件,它是直接生成的。有了三合一,会提供一些钥匙,这些钥匙就能解锁周边的其他地形。因此,地形的生成总是从三合一地形开始,按照钥匙和锁的对应关系顺次连接:
首先生成无需条件的起始地形(基本固定了是三合一地形);
按照锁和钥匙的对应关系,从剩下的地形中找到满足条件的地形,尽量靠近着已经生成的地形,依次向外拓展;
找不到对应关系,则随机选取一个地形生成(一般会在地形末尾出现这种情况)。

四、将锁与钥匙连接
每个地形都有自己的钥匙和锁,因此有如下的列表:

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

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

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

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

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

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

两边取并集,最终我们就得到了在“锁与钥匙”的结构下,可以与蜂后地形相连的所有地形:在所有的19个地形中,18个都可以和蜂后地形相连。唯一一个不与蜂后相连的地形是【杀人蜂平原】。
从游戏设计方面考虑,这两片由蜜蜂主导的领域不应该连在一起,否则整个地区就会既有蜂后又有大量的蜜蜂和杀人蜂,还有无穷无尽的花海,而别的地区蜜蜂则较为罕见,这是不合适的。
现在我们经过计算得到蜂后地形的连接关系,发现代码层面它们真的不会连在一起。实际开一些存档看一看,游戏中也确实见不到它们连在一起(除非出现失误)。

五、地形的连接
无论你是否看懂了上述原理,我想你都会需要一份锁与钥匙对应完的结果:

除了计算“锁与钥匙”,我也开了很多图来实际的进行补充对照。尽管如此,以上结果依然仅供参考。我完全不能拍着胸脯说“xx和xx一定不会相连”,因为“锁与钥匙”只是最基础的规则,游戏里地形的连接其实复杂很多:(1)不排除计算错误的可能,20个地形我算得头昏脑胀的;(2)为了保证地形的连贯性和完整性,找不到合适的了就随意拉一个地形过来连接,也是有可能的;(3)月岛的影响;(4)模组的影响;(5)bug等其他未知原因。
从这个表中可以看出很多有趣的内容,稍微举几个例子:
猪王绝大多数情况下并不与三合一地形也就是大门相连,中间基本会隔着一个什么地形;
猪王可以和小猪村连接,因此大小猪村有机会生成在一起。牛场和蔓草也可以连接,因此大小牛场也有机会生成在一起;大小沼泽、四只海象、两片池塘、大小桦树林,全部都是如此,可能连成一片;
小猪村可以和三合一相连,而且龙蝇也可以和三合一相连,这意味着有可能一进门就能看到小猪村和龙蝇。


六、地形的前、中、后段
如同我们构造的基本模型一样,若将所有地形排成一条线,那么必然有地形出现在开头,有地形出现在结尾,因此可以划分出“前段、中段、后段”。
这个“前中后”的区分是一个非常模糊的概念,除了三合一地形作为出生地强制在第一个以外,游戏里并没有严格规定一个地形是应该在前段还是在后段。之所以还要探讨这个话题是因为,虽然没有规定,但游戏中确实有这种倾向。我们可以从锁和钥匙的名称,以及连接关系看出一些端倪,例如:
所有的地形都拥有名为“tier”的锁和钥匙,从tier1到tier5。这意味着科雷天然的将一些地形排在了前面,而另一些地形排在了后面;
一部分锁和钥匙是以资源命名的。可以试想:一个地形上出现的资源,一定程度上决定了它大概在那个线性流程中处于什么位置。草地这种温和的地形一般是前段,森林可能是中段,而沙漠这种荒芜的地形,一般是后段;
一部分锁和钥匙是以难度命名的。可以试想:一个地形上的战斗难度,一定程度上决定了它大概在那个线性流程中处于什么位置。基础战斗应该在中段,进阶战斗应该在后段;
从连接关系上来看,处于“结构中段”的地形,一般可以与绝大部分地形相连,因为要起到承上启下的作用。而“结构后段”的地形,不能与之相连的地形就多一些。
因此,我们可以大致将地形分为三类:三合一、马赛克、草地池塘这种拥有基础物资的地形,往往是前段地形,属于一进大门差不多就能看到的;猪王、蜂后、沼泽往往是中段地形,需要从大门向外探索一段距离才能看到,它们后面往往有其他地形;月台、龙蝇、蚁狮、蜘蛛矿区、海象平原、小陨石区、杀人蜂这种比较危险或tier比较靠后的地形,往往是后段地形,需要朝一个方向走到最后才能看到。
前中后段这个概念到底有什么用呢?它主要可以用于回答“地形背后有没有地形”。在探图的时候,我们并不知道一个地形后面会不会有其他地形、往某个方向要走多远才算尽头。前中后段的区分,可以勉强作为一个判别方案。

七、[案例]“科雷一夏”龙蝇挑战赛
地形连接有什么用呢?这里举一个小案例。
2022年8月,科雷发起了“科雷一夏”龙蝇挑战赛,看谁能最快的击杀龙蝇。基本节奏是:大门→找到猪村,制作炼金引擎、火腿棒、捡排箫→找到龙蝇并击杀。从地形来看,想要快速完成这一挑战有两大关键问题:(1)猪王并不与大门连接,所以寻找猪王比较困难。(2)龙蝇是比较末端的地形,如果它处于地形末端就很难找了,但也有可能与猪王或大门连接,这样就比较方便。所以,能在短时间内完成这个挑战的地图应该有以下三个特点:
地图上刷新了小猪村地形,这样真卵石路才能连接猪王村和小猪村,起到指路的作用;
进入游戏就能看到真卵石路,也就是真卵石路路过大门或者在不远处;
龙蝇连着猪王或大门,很容易看到,攒好资源直接开打。
某一项不满足,速度就会慢下来,那基本就要重新开图。当时的挑战者就是每天不停的刷图、刷图、刷图……地形构造是成功的绝大部分原因,可以说这个挑战八成看开图运气,两成看打龙蝇的技术。
现在你可以明白大家当时刷图刷的是什么、要去哪里找资源、怎样才能到达那里,而不是纯粹觉得“哇运气真好”。当你知道的规律足够多,就能读懂这个剧本,自己去尝试的时候也会下意识的注意和运用,效率会高一些。
因为某些原因,龙蝇挑战赛的后续发展远超大家的预想。具体发生了什么暂且按下不表,待后面学习到更多内容后,会再次谈到这次比赛。

结语与前瞻
本文解决的问题是“A地形与B地形能不能相连”,尽管结论可能有些“弱势”。
玩家可能还有疑问:现在我知道A地形可以与B地形相连了,那么相连的A和B是如何排列的呢?地图上这15个地形是排成一列?还是绕成一个圈?又或者是别的什么样子?
下篇文章我们就来看看地形是如何排列的,这部分内容实际上与玩家的设置有关。我们下篇文章再见!

