Not LSD

not LSD

马上订阅 Not LSD RSS 更新: https://notlsd.github.io/atom.xml

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

2019年1月15日 06:31

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...</div><div class=

剩余内容已隐藏

查看完整文章以阅读更多