《塞尔达传说》是游戏史皇冠上最璀璨的明珠,在数十载的岁月中,一部又一部的《塞尔达传说》定义了一个又一个传奇。在《王国之泪》的发售之际,我也阶段性完成了学校的期末项目:这个项目起源于《塞尔达》设计师们对《旷野之息》于开放世界的一次分享,是我对于游戏未来的一次不切实际的脑洞。
或许每个人都想过,如果我们能够肆意妄为地改变游戏世界本身,可以让森林变成沙漠,让雪山融水形成湖泊,让敌人和敌人之间产生捕食关系,那么游戏又会将我们的想象力和创造力带往何方?这份自由改变游戏世界的妄想,便是我此次想要分享的实验——构建游戏中的生态系统。
在2017年的游戏开发者大会上,《旷野之息》的设计师藤林秀麿分享了他们是如何将现实世界的物理系统和化学系统植入于这一代的《塞尔达传说》的。所有的一切被抽象为一个简单的公式:动作冒险游戏 = 碰撞 + 移动 + 状态,其中碰撞和移动属于物理系统,而状态则属于化学系统。
我们可以很直观地发现,林克的时间停止能力是对于物理学中“力”这一概念的运用,而磁力感应器则是对于“磁力”的游戏化诠释。这些由希卡之石提供的能力来源于现实生活,但是却不是将现实中的物理学生搬硬套进游戏世界中。游戏所追求的从来都不是真实感,而是超越真实的玩乐。藤林等人在分享中解释道:我们在《塞尔达》中构建的物理系统是一种作弊,它给予了林克超人般的能力,虽然在各种方面都欺骗了现实的物理学,但只要好玩一切就足够了。
这次分享深深地震撼了我,也给予了我很多思考。我惊叹于《塞尔达》制作组将现实中的物理化学抽丝剥茧,整合成简单的公式并运用到游戏中。同样的,我也吃惊于“系统性游戏”基于这些简单的公式所产生的无限种可能性。《旷野之息》不再是一个由有限的情况组成的游戏,它变成了一个基于物理化学规则的现实世界,但是,更加好玩。
由此,我也开始思考:既然游戏中可以存在物理和化学系统,那么“理化生”中的生物是不是也能作为一种系统被放到游戏中呢?如果开放世界的世界本身不是固定的形态,而是可以被玩家改变的生态系统,岂不是一件很有趣的事情吗?
一想到这个点子,我就立马找到了教授Daniel Shiffman,没错,就是著名的程序设计书籍《代码本色 The Nature of Code》的作者和 youtube 上的 Coding Training 博主,也是我正在上的The Nature of Code 同名课程的老师。他作为用程序模拟现实自然环境的带头人,在课堂上讲述了很多用代码简化和重现现实世界自然效果案例,从力学引擎和软体模拟,到细胞自动机 (Cellular Automata) 和遗传算法 (Genetic Algorithms) 。
他也觉得这个将生态系统放到游戏世界的想法很有趣,于是建议说:这个系统在短时间内很难实现,但我觉得,不如先对现实世界的生态系统进行调研,写出属于游戏的生态公式;我希望你能给出的成果是一个合理的公式,和几种基于这个公式所涌现的游戏片段,对于现阶段这就足够了。
让我们看看这张图示:太阳光是能量循环的源头,持续向生物提供着能量。生产者接受了太阳光,通过光合作用将无机物变成有机物,开启了生物间的能量循环。消费者以生产者和异类的消费者为食,加速了能量循环的速度。在生产者和消费者死亡后,分解者通过将有机物再次转换成无机物,为生产者提供了光合作用的原料。于是,生态系统在能量循环中诞生了。
在生态系统中,消费者因为捕食关系形成了食物链,而数条食物链又形成了食物网。
根据水元素的有无,生态系统可以被分为水系和土系两种,而其中又诞生了数个细分。
与此同时,温度、湿度和风也会对生态系统造成显著的影响。
我们可以看到,影响生态系统的要素非常之多,而且要素和要素之间也具有相互作用力。在这种情况下,归纳出一个大一统的公式实属不易。于是,我将公式拆分成了两个,分别对应生物学方向和地理学方向。
这是生物学方向的公式:生态系统 = 太阳光 + 生命。这个公式有两个规则。其一,太阳光作为能量来源,持续不断向生命提供生存能量;其二,生命和生命之间通过食物链关系传递生存能量。游戏世界的每个生命体都会被全局的太阳光数值影响,生产者最为明显;如果游戏中的太阳消失进入永夜的话,树木都会枯萎死亡,而因为食物链的关系,所有其余的生命也都将消失殆尽。
接下来,考虑进地理对生态系统的影响,我构造了地理学方向的公式:生态系统 = 风 + 水 + 大地。
同样的,这个公式也具有两点需要展开说明。首先,地表太阳光的分布不均形成气压带和温度带,而温度的差异和热胀冷缩也进而形成了风。其次,风、水和大地之间两两相互影响,比如水流和狂风可以塑造大地和山脉的形状,从海面吹来的风会为大地带来暖湿气流,形成宜居地带。在旷野之息中,我们已经可以看到设计师对于温度和风的应用,但是却没有更深入的风、水、大地的系统间互动。
那么,以上就是我对于现实生态系统的抽象化表达了。虽然感觉如果要在游戏中实现的话还有许多需要考虑的地方,但我也姑且试着运用这个公式做了几个游戏片段。
第一个展示的是太阳光和生命的互动。在这个场景中,杂草和树木都是生产者,但却是竞争关系,而兔子则是食物链中的消费者。当玩家砍伐树木后,杂草会增长,而兔子的数量也会随着食物的增加而变多。但是,在一段时间后,杂草被兔子吃完了,生产者消失,能量循环被破坏,最后兔子也不可避免地灭绝了。
第二个情景是温度和风的互动。在白天时,大地的温度比海洋的温度高,所以风是从右向左吹;但是在晚上,海面比地面的温度更高,所以风是从左向右吹。如果你在晚上点燃火焰,风又会随着温度的差异而改变方向。
最后一个场景是风、水、大地相互作用的演示。一开始山脉阻挡了海风的前进;当玩家清除山脉后,海风便会带着水汽到达内陆,逐渐将干旱无风的沙漠变成青草遍地的草原。
在这次实验的末尾,还是想谈一谈一些个人的想法。在游戏中创造一种新的系统和规则是一件很困难的事,所以我并没有想着要将这次实验做到尽善尽美,只求它能映射出游戏中生态系统的可能性。这之后我还会一步步改进我所创建的理论和框架,希望能在未来的某个时刻做出一个真正好玩且完整的生态系统的游戏游乐场。
其实,做这个实验的过程中,我也逐渐发现了另一个道理:游戏设计来源与现实生活,却高于现实。这是一个简单易懂的道理,但却非常宝贵。在一次对《塞尔达传说:旷野之息》的访谈中,当被问起如何设计开放世界时,设计者给出的答案是“个人的成长经历 (formative experience)”:从现实世界和儿时的回忆出发,想要重现那种“儿时在邻里山间玩耍和冒险的感觉”。
当看到这句话时,我一时间感慨万分:想到宫本茂创作塞尔达传说的初衷便是少年的乡间冒险,想到Daniel Shiffman教授对于程序模拟现实的执着,想到我之前坚持100天每天设计一个游戏机制时从现实世界寻找灵感……一切都收束到了一点。
用浪漫点的话来说,游戏将现实中那些有趣、好玩、充满美好回忆的经历通过机制和故事放到了一个虚拟世界,将它们用另一种方式保存了下来,让更多的人能够体验到你曾几何时在现实世界经历的这些好玩的有趣的事,产生共鸣。
身为游戏设计师,不妨多多观察现实世界吧,观察那些被忽略的美好,将它们记录下来,做到游戏里,并让世界上更多人感受到这分美好和快乐吧!
评论区
共 7 条评论热门最新