合理巧妙地设计游戏中的 Bark 以帮助游戏叙事

作者:icue
2020-11-02
41 44 6

“直到我的膝盖中了一箭”几乎是游戏界无人不晓的台词,而这样的台词背后其实大有文章。

这句台词可以被称作 Bark (下文会有详细解释)。最近我从不同的渠道看到了关于游戏中 Bark 的讨论,在这里把汲取到的思想总结归纳。

我没有在中文网站找到游戏中所指的 Bark 的翻译,从英文网站 Giant Bomb 找到一句定义:

Short one-line audio clips spoken by the NPCs that populate the game world. Can be random or in reaction to the player or events.

大致意思就是 NPC 们时不时的碎碎念,可以是见到玩家打招呼,例如几乎每个有商人 NPC 的游戏,商人都会在开始买卖前打个招呼;可以是主角被玩家操控时说的话,例如广为人知的 Fire in the hole,Reloading,或者《英雄联盟》中英雄的语音;也可以是敌人之间互相的交流,如《蝙蝠侠》系列,《最后的生还者》系列,《潜龙谍影》系列里敌人之间的通风报信。总之, Bark 就是简短的、你能在游戏世界里听到的一段语音(把定义放宽一点,我认为也不一定得是语音,敌人头上出现的含有文字的气泡也算)。


在聊技巧之前,先贴一下几个有直接帮助的信息源:

  1. 拳头游戏设计师在推特上的讨论,呼吁游戏叙事设计师们重视 Bark 。
  2. 对《最后的生还者》中敌人战斗时 Bark 的剖析
  3. GDC 演讲,类似 2,但分量更加十足的《最后的生还者》对话系统解析。开发者解释了他们是如何做到让 NPC 说的话听起来很“应景”的。
  4. Valve 当年的员工在 GDC 的演讲,解释了《求生之路 2》中 NPC 的 Bark 的构造和调取方式。

这些业内人士提供的思路可以被归纳总结,开发一个好的 Bark 系统,可以从以下几个维度去考虑。

足够多的备选项

Bark 有足够多的备选项,即使两句话是同一个意思或用途。这能减低玩家在短时间内听到同一句话的概率。“直到我的膝盖中了一箭”本身是一句听起来很有故事的话,但是当太多 NPC 一股脑儿向玩家抛出这句话时,这个世界的可信度瞬间降到冰点。

Arrow in the Knee

天际省的一天。这熟悉的场景,猜猜他要说哪句话?

另外,尤其是对于“直到我的膝盖中了一箭”这样内容非常具体的 Bark,要格外小心——像“那场战争真是惨烈啊”这样的语音,安排在多个 NPC 身上并不很违和,但是像“我曾拿铅笔干掉过五个敌人”这样的语音,至多安排在一个 NPC 身上就可以了,除非……这款游戏的世界观里每个路人 NPC 都是 John Wick。

多样的触发条件

这条应该是实现起来最费心思的——为各种 Bark 设计合理而又多样化的触发条件。

自身血量?离敌方的距离?和敌方是否处在同一空间?剩余友军的数量?战胜敌方时自己耗血了吗(被打到残血才获胜时,真的应该耍帅说一句“小菜一碟”吗?反过来,如果我们的主角无伤过 Boss 后,会自发地说一句“弱!”该有多帅啊)?此时的天气?伙伴对你的友好度?等等等等,列举不完。个中状态千变万化,有海量的排列组合。

NPC and player location

当敌人不在乔尔所在的商店时,会喊“他在商店!”;若敌人也在商店,则会喊“他在柜台那儿!”

而一条具体的触发规则,涉及到的变量越多,触发条件就越苛刻。愿意的话,你可以用这种方式设计出大概 100 个玩家里只有 1 个能听到的语音。只要发散思维足够强,亦可以用一些奇特的条件,诞生出非常有创意的 Bark 来。《黑帝斯》在这一点上做得尤为出色,回想一下你从神明那儿获得祝福时 Ta 们说的话,或是 Boss 对你武器的评价,乃至死亡后回到宫殿里与 NPC 的对话,每一条都十分“应景”。

Hades Dialogue

游玩局数达到某个值才会触发这样的台词

为触发条件分类

为触发条件分类,以更合理地存储和追踪它们。大致上可以分为:

  1. 整个世界的状态。如天气,时间,这些对每个人来说都显而易见并且完全等同的状态。
  2. 每个人物的状态。玩家的、伙伴的、敌人的,都不尽相同。
  3. 每个人物的记忆。

“记忆”很容易和所谓的“状态”搞混。举个细微而又枯燥的例子,假设艾莉和玩家操控的乔尔一同躲在掩体之后侦察敌情。艾莉注意到右侧高台有敌方弓箭手,并且说 “Archer, on the right” 来提醒乔尔。这个场景下的人物状态有什么?乔尔和艾莉均处于潜伏状态,敌人处于巡逻状态,每个敌人又有自身的血量、弹药数等等,这些都是状态。那么记忆呢?艾莉看到了右侧高台上的弓手,这个事实转变成了她的记忆。在她警告乔尔之前,这个记忆乔尔并没有——这也正是她这句话的触发条件,不然也没必要警告了。

《孤岛惊魂 3》中玩家扔石块吸引敌人,如果这名敌人之前已经被石块吸引过一次,那么他会疑惑地说一句 “keeps doing that” (没个完了)再走过去,这也是因为这名 NPC “记得”自己刚才曾听到了石块落地声。当然,人物也可以有长期的记忆,Galgame 中人物之间的好感度便是互相独立开的长期记忆。

而每个大类里的变量又可以进一步分类,例如按照关卡来为整个世界的状态分类。

降低重复率

这与开头提到的足够大的备选池要解决的问题类似,但切入点不同。 

Avoiding Repetition

下一组的首 ≠ 上一组的尾

例如,当 NPC 有 5 句话可以说时,随机打乱成 A、B、C、D、E,记为一组。一组播完了,下一组怎么安排?重新随机打乱,但是需要额外保证这一组不以 E 为开头,不然玩家就能在短时间内连续听到两次 E 的内容。或者,可以为每一句话设计冷却时间。

另外,多条 Bark 均满足了触发要求时,最好选用条件更苛刻的那个。

恰当使用权重

符合条件的多个 Bark 不必互为等可能事件,可以加一些权重来稍稍使某些台词更容易被触发。

根据需求,也可以设计触发一次后就再也无法触发的“特殊” Bark,甚至是一开始不能被触发,需要先触发足够多的其他 Bark 才能被“激活”、正式进入备选池的 Bark。

设置优先级

Bark 需要有优先级,这点和权重又略有不同(权重是针对同一优先级来讨论的 )。假设我们为敌人死亡瞬间发出的声音准备了一些语音,它们的优先级可以为 1,敌人巡逻时互相交流的语音优先级为 2,敌人自言自语的语音优先级为 3。这样,我们就可以很方便地制定规则:优先级低(数字大)的台词永远不应该打断优先级高的,而优先级高的必须打断优先级低的。

也就是说,敌人正在互相用无线电交流时,即使系统出于某种原因想要播放其中一个敌人自言自语的语音片段,也不应该触发。相反,正在通话的敌人突然被暗杀,那么播到一半的通话语音应该立即被掐断。《求生之路 2》中,几位主角有时会边赶路边闲聊,原本 Ellis 应该接 Coach 关于游乐园记忆的一句话,但假如这时窜出一只 Hunter,Ellis 应该立即警告大家,或是闭嘴,让其余的队友作出合适的 Bark。


我认为,这些点子完全可以用到没有任何语音的的独立游戏中去,尤其是以文字为主的叙事类游戏。Bark 可以是无声的,通过文字来展现即可。若处理得当,不仅 NPC 显得更加鲜活、智能、有灵魂,整个世界也变得可信。

不过,的确有很大的概率,玩家粗浅地游玩,并不能完全体会到这样复杂的 Bark 系统,甚至有许多的台词不会在一周目里出现,这是无法避免的问题。但有一点是肯定的——一个糟糕的 Bark 系统会让人非常出戏,“膝盖中箭”是最好的例子。

最后,如果你看完本文觉得有趣,强烈推荐细读/看我给出的那四个链接,那里有更加深入的解析。

本文为用户投稿,不代表 indienova 观点。

近期点赞的会员

 分享这篇文章

您可能还会对这些文章感兴趣

参与此文章的讨论

  1. DoggyFC 2020-11-07

    十分感谢!之前一直以为这些内容算是“环境叙事”的一部分,原来还有专门名词,感觉很适合用来解释沉浸感之类的问题。不过抱歉,您方便提供一下3的链接吗?挂梯子之后也显示打不开欸

  2. karamay00 2021-03-19

    有用有用

您需要登录或者注册后才能发表评论

登录/注册