“直到我的膝盖中了一箭”几乎是游戏界无人不晓的台词,而这样的台词背后其实大有文章。
这句台词可以被称作 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 在游戏世界中播出的简短音频,它的内容可以随机,也可以由玩家行为或发生的事件来决定。
配合例子便不难理解:Bark 可以是 NPC 见到玩家打的招呼,例如几乎每个有商人 NPC 的游戏,商人都会在开始买卖前打个招呼;可以是主角被玩家操控时说的话,例如广为人知的 Fire in the hole,Reloading, Construction Complete,或者《英雄联盟》中英雄的台词;也可以是敌人之间互相的交流,如《蝙蝠侠》系列,《潜龙谍影》系列,《最后的生还者》系列中敌人之间的通风报信。通俗地讲, Bark 就是任何简短的、你能在游戏世界里听到的语音(把定义放宽一点,我认为也不一定得是语音,像是敌人头上出现的含有文字的气泡也算)。
在聊技巧之前,先贴一下几个有直接帮助的信息源和链接:
1. 拳头游戏设计师在推特上的讨论,呼吁游戏叙事设计师们重视 Bark 。
2. 对《最后的生还者2》中敌人战斗时 Bark 的剖析。
3. 顽皮狗首席程序员在 GDC 的演讲,类似上一条,但分量更加十足的《最后的生还者》对话系统解析。开发者解释了他们是如何做到让 NPC 说的话听起来很“应景”的。
4. Valve 当年的员工在 GDC 的演讲,解释了《求生之路2》中 NPC 的 Bark 的构造和调取方式。
这些业内人士提供的思路可以被归纳总结,开发一个良好的 Bark 系统,可以从以下几个维度去考虑。
足够多的备选项
Bark 有足够多的备选项,即使两句话是同一个意思或用途。这能减低玩家在短时间内听到同一句话的概率。“直到我的膝盖中了一箭”本身是一句听起来很有故事的话,但是当太多 NPC 一股脑儿向玩家抛出这句话时,这个世界的可信度瞬间降到冰点。
天际省的一天。这熟悉的场景,猜猜他要说哪句话?
另外,尤其是对于“直到我的膝盖中了一箭”这样内容非常具体的 Bark,要格外小心——像“今天天气真不错啊”这样的语音,安排在多个 NPC 身上并不违和,但是像“我曾拿铅笔干掉过五个敌人”这样的语音,至多安排在一个 NPC 身上就可以了,除非……这款游戏的世界观里每个路人 NPC 都是 John Wick。
多样的触发条件
这条应该是实现起来最费心思、但同时也是最有拓展空间的——为各种 Bark 设计合理而又多样化的触发条件。
自身血量?离敌方的距离?和敌方是否处在同一空间?剩余友军的数量?战胜敌方时自己耗血了吗(被打到残血才获胜时,真的需要耍帅说一句“小菜一碟”吗?反过来,如果我们的主角无伤过Boss后,会自发地说一句“弱!”,该有多帅啊)?此时的天气?伙伴对你的友好度?等等等等,列举不完。个中状态千变万化,可以产生海量的排列组合。
当敌人不在乔尔所在的商店时,会喊“他在商店!”;若敌人也在商店,则会喊“他在柜台那儿!”
而一条具体的触发规则,涉及到的变量越多,触发条件就越苛刻。愿意的话,你可以用这种方式设计出大概 100 个玩家里只有 1 个能听到的语音。只要发散思维足够强,亦可以用一些奇特的条件,诞生出非常有创意的 Bark 来。《黑帝斯》在这一点上做得尤为出色,回想一下你从神明那儿获得祝福时 Ta 们说的话,或是 Boss 对你武器的评价,乃至死亡后回到宫殿里与 NPC 的对话,每一条都十分“应景”。
游玩局数达到某个值才会触发这样的台词
为触发条件分类
为触发条件分类,以更合理地存储和追踪它们。大致上可以分为:
- 整个世界的状态。如天气,时间,这些对每个人来说都显而易见并且完全等同的状态。
- 每个人物的状态。玩家的、伙伴的、敌人的,都不尽相同。
- 每个人物的记忆。
“记忆”很容易和所谓的“状态”搞混。举个细微而又枯燥的例子,假设艾莉和玩家操控的乔尔一同躲在掩体之后侦察敌情。艾莉注意到右侧高台有敌方弓箭手,并且说 “Archer, on the right” 来提醒乔尔。这个场景下的人物状态有什么?乔尔和艾莉均处于潜伏状态,敌人处于巡逻状态,每个敌人又有自身的血量、弹药数等等,这些都是状态。那么记忆呢?艾莉看到了右侧高台上的弓手,这个事实转变成了她的记忆。在她警告乔尔之前,这个记忆乔尔并没有——这也正是她这句话的触发条件,不然也没必要警告了。
类似地,《孤岛惊魂3》中玩家扔石块吸引敌人,如果这名敌人之前已经被石块吸引过一次,那么他会疑惑地说一句 “Keeps doing that” (没个完了)再走过去,这也是因为这名 NPC “记得”自己刚才曾听到了石块落地声。当然,人物也可以有长期的记忆,Galgame 中人物之间的好感度便是互相独立开的长期记忆。
每个大类里的变量又可以进一步分类,例如按照关卡来为整个世界的状态分类。
降低重复率
这与开头提到的足够大的备选池要解决的问题类似,但切入点不同。
下一组的首 ≠ 上一组的尾
例如,当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 系统会让人非常出戏,“膝盖中箭”是最好的例子。
最后,如果你看完本文觉得有趣,强烈推荐细读/观看我给出的那四个链接,那里有更加深入的解析。
这个设计建议对很多设计者都有帮助,这里我再来扩展一下吧。
其实按照作者提到的,Bark体现在游戏中并不仅仅局限于对话内容这一种形式。任何玩家与NPC进行交互时所产生的沟通都可以算作是Bark的一部分,甚至包括NPC的表情动作和肢体语言,尽管这可能脱离了Bark这个词的词义本身(参考黑色洛城这种大量通过NPC表情动作来展现内容的游戏)。
再更多扩展,游戏里类似的方法并不少,比如对某样物品的描述和附带的背景故事(例如黑暗之魂系列,当你查阅自己的装备和物品时往往能看到很多的介绍),或者NPC产生的自行交互(比如巫师3和荒野大镖客2,游戏世界的NPC即使没有与玩家进行互动也会自发进行预设的行为且产生交互,而玩家能够从中体会到更多的真实感)。这些都是设计者在完成设计时需要考虑到的,虽然感觉这是个吃力不讨好的事儿,但是就是这繁复的细节才造就了一个个完整立体的游戏世界。
共勉。
加油。
@HaTiaSi:你提到“NPC的表情动作和肢体语言”,让我一下子想到在《生化奇兵:无限》中,若玩家把枪瞄准伊丽莎白,她会躲开。我非常同意“躲开”这样的动作完全可以被视作 Bark 的一种。时隔多年,我已经把这部作品里 NPC 的大部分台词都忘记了,但是“她知道躲开”这个细节至今印象深刻。
这么一想,的确有太多的交互、反馈可以用类似的思路去设计和填充了。
感谢评论!
补充一些新的感悟:游戏里哪怕不是 AI 的成份,也可以善加利用这些思路。像是在载入界面提供给玩家的滚动小贴士,就可以运用“多样的触发条件”——如果玩家处在第二张大地图,就不要再随机显示第一张大地图的背景知识了;如果玩家此时装备的是剑,就减少枪的操作技巧的出现概率……