2

「概率状态机」- 「王权」之下的铁王座

 3 years ago
source link: https://notlsd.github.io/2019/01/15/reigns-state-machine/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Reigns 有一个令玩家十分诟病的地方 — 不同的选择仍然经常会导致同样的结局,以致于了无趣味。Reigns 的主创认为这是 Feature,然而不少玩家却认为这是 Bug。不过这从侧面说明了 Reigns 的后台并非一般「文本冒险游戏」所使用的「决策树」。

@notlsd 找到了 Reigns 作者在 GDC 的演讲 「The Casual (but Regal) Swipe: Creating Game Mechanics in Reigns」以及中央美术学院「重识游戏 — 首届功能与艺术游戏大展」Reigns 展位的说明文章「在「王权」中创造自适应叙事」,从而证实了这一点,并发现了 Reigns 背后的数据结构[1]。Reigns 的游戏体验将显著降低対文章的理解难度,但非必要。

概率包 VS 决策树 — 两种世界观

我们从一个対游戏的定义说起:

A Game Is a Series of Interesting Decisions.

这是 Sid Meir 老爷子给游戏的定义。那么问题来了,当玩家重复同样的选择,他还能到达同样的结局么?这其实是个哲学问题,或者说在游戏这个给定系统中,是否存在「拉普拉斯妖」?物理世界是有内禀的随机性的,游戏世界有么?在游戏设计中,确定性与随机性之间怎么平衡?

「可控随机」是游戏性的核心组成部分[2]

某种程度上,游戏的起源即是于此。「动物世界」里,母狮捕猎到幼年羚羊总是先丢给幼崽蹂躏玩弄,而这个游戏又何尝不是幼师的「模拟人生」?最原始的游戏就是对真实的随机世界降低难度后的模拟,如象棋之于战争,过家家之于成人生活。就像 Rogue-like Game 一样[3],真实世界是没有 S/L 大法的[4]

抽离上述的哲学讨论或者说关于 Reigns 后台系统的 Why;我们回到具体的,Reigns 的作者是如何搭建这个系统的,或者说关于这个系统 How。

Tree vs State MachineTree vs State Machine

左图是概率包,右图是决策树。显见得,上图中「红色边框」代表玩家的选择,「蓝色边框」代表可能但实际上并没有发生的选择。卡牌的大小代表可能被抽到的权重,Bag 的总权重是单位一。

比起「决策树」,「概率包」引入了随机的过程和权重的概念,同时,「概率包」本身又是有限的,故而实现了「可控的随机」

「决策树」背后的世界观是机械的,命定论的,玩家的每一个选择必定确定了游戏之后的走向。只要做同样的选择,无论玩家重来多少次都会走上同样的结局。

「概率包」背后的世界观则是「可控的随机」。内秉的随机性使得每次游戏流程都有可能不同,可选项的边界却又保证了不同选择之间内在逻辑的自洽。

用概率写一个叙事

以下内容全文引用自中央美术学院「重识游戏 — 首届功能与艺术游戏大展」Reigns 展位的说明文章「在「王权」中创造自适应叙事」[5][6],有大规模删改:

为了用概率写一个叙事,我们将随机选择的卡牌转换为概率系统。这是一个看起来相当复杂的表达,实际上却非常简单:


想象一下,有一个「卡牌包」,它拥有伸缩的能力以适应你放入其中的内容。默认情况下,「卡牌包」中包含游戏中所有的可用卡牌。当我选择显示给玩家的下一张牌时,我首先要从包中取出所有不符合当前状态的卡牌。


这样会出现很多的变化。然而,例如,如果一系列卡牌与王后的存在相关但你尚未结婚,我会删除它们;如果一张卡牌在教堂富丽堂皇,但教会却很孱弱的情况下才会被触发,我也会将其删除。同时我会删除所有最近打得太频繁的卡牌。


玩家最终会得到一袋混合卡,包含着各种大小不一的卡,然后我从包中随机抽取一张卡牌井将其显示给玩家。


卡牌的虚拟尺寸创造了有趣的可能性,较大的卡最终成为所选择的卡的概率大于较小的卡的概率。但是如果较大的卡牌不在包中,因为它们已经在前一步骤中被移除,那么较小的卡牌被抽取的总体概率会增加许多。


这就是为什么「卡牌包」伸缩的能力变得如此重要。如果你和你的邻居发生了一场战争,那么与这个特定事件相关的十几张卡牌就会变得「很大」,在卡牌包中占用大量虚拟空间的就是它们,而不是与任何特定条件无关的卡牌,比方说小丑牌。这样可以最大限度地提高在战争期间选中战争牌的可能性,并最大限度地减少选中小丑牌的可能性。一旦战争结束,战争牌就会被从卡牌包中移除,因此系统有更多的机会再次选择小丑卡,因为它们被抽取的概率增加了。


一些事件,如地牢或决斗将把游戏锁定在一个较小的子系统中,此时卡牌包将变得非常小,只包含几张牌。这个子系统也可能只是一张卡牌,创造线性路径,就像游戏中遇到魔鬼时那样。


我不介意 Reigns 的不完美之处,这些不完美之处对游戏古怪的品味反而异常重要。我们总是小心翼翼地围绕核心玩法,可玩性和游戏本身古怪的品味,构建关于游戏的一切。但我们没有对我们想要在游戏中放置的东西的数量进行任何限制,这使得我们的玩家有时会感到些许的惊讶和混乱。


制作 Reigns 的「卡牌包」实际上非常类似于一个探索的过程。你选择尽可能少的东西,并报以最好的希望。我从写常规的「一次性」卡牌开始;然后尝试了一组卡牌来构建短时间内触发的「迷你故事支线」;之后扩展到永久性添加到牌组中新的角色和事件,最后是「魔鬼支线」。围绕着游戏的核心玩法,我们旨在将玩家带入意想不到的地方和情境。


通过这个系统,我们有机的结合了深度叙事与「卡牌包」,「卡牌包」中有着大量的主题卡牌与围绕特定故事线的子包。这种机制在几个世纪中一直是隐藏在不同游戏幕后的「元游戏」机制。


Reigns 非常谦卑和狡猾地遵循 Failbetter Games 基于质量的叙事方法。Reigns 中「质量」就是「每次玩家滑动时重新编译的可用卡牌包」。这会影响全局的游戏状态。


最后,在核心循环中,从纯粹的随机卡牌,到由之前选择触发的确定性路径,Regins 每次都会加入一系列新的卡牌混入卡牌包中。这种混合会引发非常有趣的后果。当玩家发现某些卡牌是因为他之前的选择而被放入卡牌包中时,因为很难从卡牌中辨别出哪张卡牌是随机的,哪张卡牌是在确定性的路径上的,所以每张卡牌都变得有意义。


即使只有少数卡牌因为玩家之前的选择而被放入卡牌包中,整个故事也会以诡异和意料之外的方式运行,这会鼓励玩家制作自己的叙事。

数据库 — 卡牌包的实现

游戏中几乎所有的设定都在下面这张图里

Core DatabaseCore Database

概率包的实现是靠的数据库,我们拆开一个一个字段地看:

前七个字段是数据库的核心部分:

  • card 卡牌名称
  • ID 数据库索引
  • bearer 持牌者,Reigns 里决策即是接受或拒绝「持牌者」的提议
  • condition 先验判断条件,卡牌能否被激活
  • ckturn 存活时间,全称应该是 Continous Kill TURN,这即是作者在文章中提及的「删除所有最近打得太频繁的卡牌」
  • weight 权重,即是虚拟的卡牌「大小」,决定卡牌被抽取的概率
  • question 文本描述

后面十四个字段是关于 Yes / No 的选择及其対卡牌包的影响

  • override_yes / override_no 更换前端文本
  • answer_yes / answer_no 如题
  • yes_spritual / yes_military / yes_demography / yes_treasure 选择「是」对四个维度的影响
  • no_spritual / no_military / no_demography / no_treasure 选择「否」对四个维度的影响
  • yes_custom / no_custom 选择后是否进入自定义的子包

上述机制实现了 Reigns 的绝大部分内容 —— 除了 Doungen

Doungen — A Trick and Another Trick

  • Trick from Reigns

在 Reigns 中实现 Doungen,其实质是在一个概率系统中实现一个确定性路径。这是一个困难的任务,然而作者的实现十分的巧妙,或者说 Tricky ,如下图:

Dungeon DatabaseDungeon Database

解法其实非常简单:一般意义的场景是同一个持牌者 Bearer ,对应着不同的卡牌 Card ;然而在 Dungeon 里却是同一张 Card 对应着不同的 Bearer。

这样就解决了确定性路径的问题,并实现了后端结构的一致性。但这么做仍然是有问题的,这样不具有可扩展性。Reigns 中的 Dungeon,复杂度其实很小,最多也就十张卡牌。然而在这个结构下,随着卡牌数量的增加,其复杂度的增加是指数级的[7]

  • Another Trick from @notlsd

Card Bag Flow ChartCard Bag Flow Chart

在每一次进入依赖于随机概率的「主卡牌包」前,放置一个「前置卡牌包」,先抽取「前置卡牌包」中的卡牌,若「前置卡牌包」为空,抽取「主卡牌包」,这样能把复杂度降到线性。

  • 作者在 GDC 的演讲中说,Reigns 统共 707 张卡。以每张卡牌对应的文本描述大约 10 个单词记,7000 正好是短篇小说的标准长度。

  • 除了后端的「概率状态机」,Reigns 的前端交互也值得一提。Reigns 将前端交互简化为了 Tinder-like 的「左右滑动」。然而,这种改造的优秀之处在于并不在于使游戏的体验变得类似于 Tinder,事实上也并不可比。关键之处在于「左右滑动」的形式显著减轻了玩家的决策成本与认知负担。

  • 在 GDC 的演讲里,作者有一句很有趣的论断

    The player stop reading the text and they were just optimazing their own service syste

    翻译大致是「玩家不会阅读文字,他们只会调整自己的周遭」,这大概解释了为什么纯粹的「文本冒险游戏」 Text Adventure Game 这个类别一直火不起来,当然 GAL Game 除外。GAL Game 是一些更为本质的动机了。

  • Reigns 的游戏机制,姑且称之为「概率卡牌包」,完全有潜力成为一个独立的游戏类型,至少成为卡牌游戏下的一个子类型。同样的结构,除了「维持政权稳定」外,可以承载的内容还有许多。然而,开发者 François Alliot 把这个类型完全给窄化了。不客气的说 Reigns: Her Majesty / Reigns: GoT 都是「换皮游戏」,最多算是 DLC。

  • 一个有趣的摹仿反倒是在中国,一个「华农兄弟」粉丝向游戏:「竹鼠:活下去」,但总的来说也能称得上「拙劣」。在前端,将滑动改为了点击;在后端,玩家的选择与四个评判标准并没有逻辑上的对应关系。

One More Thing

在上面的引文中,我刻意的漏掉了下面这段话:

The versatility of that probabilistic system was essential to build the game. I really considered it as a tool or a grammar to push the game in wacky and unexpected ways rather than a closed system that needed a defined amount of content to be “perfect”.

中文翻译大致如下:

这种概率系统的多功能性对于构建游戏至关重要。我确实认为它是一种以古灵精怪和意料之外的方式推动游戏进程的工具或语法,而不是一个需要「数值策划」的「完美」的封闭系统。

这和 @notlsd 的游戏观如出一辙,是的,这是一种工具或语法,包罗万象。

Reigns × Animal Farm 是什么样子 ?

George Orwell 的食材配上「中国特色」的调料,用 Reigns 的炊具一顿爆炒,会是什么味道?

2019「中国特色动物农场」 敬请期待 ~

推翻独裁猪!

猪年大吉吧!


  1. 1.未经特殊说明时,本文的截图来自于上述 GDC 演讲,引文来自于上述展板说明文章
  2. 2.@notlsd 正在撰写的一篇文章 Controlled Randomness - One Essiential Part of Gameplay,详尽的讨论了这个问题,完工后链接附于文后评论区
  3. 3.「S/L 大法」指在单人游戏中大规模使用 Save / Load 以对抗高难度 A.I.
  4. 4.为什么 Roguelike 现在受到普遍的欢迎,尤其是在硬核玩家之中?至少 @notlsd 认为,在运算资源和美术资源如此冗余的今天,一个成功的游戏,尤其是成本十分有限的独立游戏,应该回归到 Gameplay 本身。Rogue-like 用极致的随机性创造了 Life-like 的体验,使得游戏中的情感体验总是很充沛
  5. 5.Reigns 在央美游戏大展展位上的说明文章,基本上是 gamasutra 这篇文章]() 的翻译。但翻译的质量真的是差强人意中的差强人意,也就勉强能看,一股浓浓的中国大学生赶作业的 Feeling ……
  6. 6.最后证实,翻译就是 Google Translate 的机翻。引文翻译经过 @notsld 的大规模修正和润色,部分段落完全重写
  7. 7.非算法意义上的,粗略估计,未经计算

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK