我活得就像个 NPC!
如果有人把这话当成开场白,接下来,他大抵会向你哭诉自己的人生境遇:缺乏自主、不受重视,或是两点一线的模式化生活。总之,这些都是 NPC 的常见特质。
NPC 会有自己的人生吗?我曾以一个窥视者的角度,去观察他们在游戏中的生态。结果大多是无趣的,无非村子东头的手工匠一天敲了783下铁毡,或是邻家大妈围着小镇逛了56圈。
不过,随着游戏变得越来越细致,他们的生活倒也有了更多变化。在 Reddit 的群组「Life as an NPC」中,时不时就有玩家分享自己的新发现,从农夫到毒贩,从工人到巴士司机。如果以更为理性的视角切入:当你忙着拯救世界时,NPC 都会干些什么?
活生生的人
去年10月份,育碧在脸书上发布了三则《刺客信条:奥德赛》的搞笑视频。内容大致是由玩家来饰演游戏中的 NPC,并述说那些不合常理的倒霉故事。一名斯巴达士兵得假装自己看不到主角,心惊胆战的祈祷别被打晕。而牧羊人的一天同样惆怅,时常得清理被玩家光顾的羊圈。
尽管本意只是调侃,但它反映的事实可能让人意外,当游戏还未从桌面的纸墨转变为一段段代码时,人们对 NPC 的初步印象,确实就是活生生的人。在传统的 TRPG 中,配角没法借助系统化的脚本自动运行,他们往往得由 DM(Dungeon Master),也就是一场游戏的组织者扮演。
多数情况下,NPC 的行为通常只是一嘴带过,比如“田野中的农夫向你打了个招呼”。但如果涉及到更为复杂的交互行为,比如发生在交易市场或是竞技博弈中的故事,NPC 就得有更为丰富的人格。他的谈吐是否优雅?他在紧张时又会有哪些表现?
在桌游《冠军》(Champions)中,每名玩家都有一位 NPC 副手,与副手的交流其实等同于“对话游戏主持”。而《Nobilis》则鼓励玩家扮演 NPC,从另一个角度来享受游戏。如果对叙事控制不那么严格,玩家与 NPC 的界限相当模糊,普遍的共识是,只要他们表现得足够真实,游戏中的互动就会更有意思。
由此来看,“活得像个 NPC”的形容可一点都不过分。真人扮演的情况下,他们本身就是人类的另一侧写,行为难以预估,同样也有着无限的可能性。当你忙着拯救世界时,NPC 可能摇身一变,成为勤恳养家的公司雇员,或是带着孩子的居家少妇。
迈入数字时代后,早期的 CPRG 还保留了“人演 NPC”的理念。在《无冬之夜》中,玩家可以反复修改默认脚本,从而构建全新的行为。但绝大多数情况下,他们都被简单的、机械化的程序替代,甚至缺少自己的形象,有时只是一闪而过的弹框文字。
不过,尽管当时的技术做不出像样的 AI,但线上游戏的兴起,却仍然延续了多样化的可能。在 MMORPG 中,由真人来扮演 NPC 的事情不算少见。最有名的代表片段,就是《网络创世纪》中的「不列颠王遇刺事件」。
1997年8月8日,《网络创世纪》公开测试即将关闭的前一天,官方决定对服务器进行压力测试,统计能够容纳多少玩家。他们举行了一场盛大的活动,开发团队的理查德·加略特和斯塔尔·隆亲自上阵,分别饰演不列颠王和黑刺王两名角色,在城堡前举行演说。不料,一位名叫“Rainz”的不列颠尼亚盗贼,从人群中投射出火魔法,导致不列颠王意外身亡。
刺杀不列颠王理论上是行不通的,他在后台程序中就被设定为无敌的存在,本该免疫一切攻击和负面效果。但运营方在活动上线前却误动了程序配置,这场意外,反而将 NPC 的真实感烘托到极致。
在以解谜为主题的《神秘岛Online》(Myst Online: URU Live)中,一些推动故事情节的 NPC 也由真人控制。再加上解谜游戏的内容消耗过于迅速,到了版本后期,满地图都是苦恼于如何打发时间的玩家。很快,他们就自发的“演起了戏”,成为新人们的指引者。以至于当时的交流氛围极其健康,几乎看不到任何骂人的字眼。
事实上,这对于《神秘岛》系列而言都是老传统了。1993年,主创之一的兰德·米勒(Rand Miller),就在初代中扮演至关重要的角色。他被设定为一位历史学家,毕生都在钻研神话体系 D’ni。而这种由真人派发任务,引导剧情的设计思路,即使在整个系列辗转的过程中仍然保留了下来。
如果你造访过《魔兽世界》美服的 RP 服务器,在法师区外围的鹅卵石广场,每周也有人发起角色扮演活动。一个个经历磨练、拯救艾泽拉斯的英雄,转瞬之下就成为了 NPC 商人和卫兵。从这个角度来看,就算“主人公不在”,NPC 的人生应该也是丰富多彩的。
下一页:笼子里的舞者
笼子里的舞者
在很长一段时间内,NPC 的主要表现还是那些浮动的文字、冰冷的弹框,亦或是极为机械的脚本。但纵观游戏行业的历史,每个时代总会有那么一两款作品,或是一两个制作人对于 NPC 的描绘极其看重。
1999年的《莎木》令人惊叹,那些街道中不起眼的配角,不再是随机拼凑的建模,他们往往有着自己的工作、朋友和家庭,背后的故事和行为也独一无二。虚构的横须贺充满了活力,这是一座能够自主运行的城市。
在《莎木》中,42岁的高桥良合白天会在「老虎板通」商店街游荡,到了晚上才匆匆回家。尽管每天身着上班族的装扮出门,但他所在的公司濒临破产,处于失业状态的高桥不敢将真相告知妻女,只能假装正常离家工作,漫无目的的在街上消磨时间。
凯茜·威尔金斯则是一位美国第七舰队的年轻军官,她的部队驻扎在新横须贺港。到了夜晚时,凯茜会换上日常服装,并辗转于红灯区的酒吧。由于附近经常出现闹事水手,她需要借此来惩治不法分子。除此之外,她还承接了横须贺警方的秘密任务:监视当地的黑帮组织。
类似的例子还有很多,摩托帮的矢部光次有时会在街边修整座驾,口里还嚼着汉堡。管家婆婆早田稲夜晚会在住宅的祭坛前祈祷,然后再回到卧室休息。中年妇女湊洋子白天出没于商店街购物,到了晚上再去经营自己的酒吧。
尽管碍于当时的技术,这些脚本还显得有些简单,但无论是否与玩家有交集,NPC 仍然会推进自己的独特行为。当所有的小细节整合起来时,生活感就被逐步烘托出来。而与“触发式”的脚本设计不同,这些 NPC 不会呆呆的站着等待主人公幸临,他们的人生基本上不受玩家把控。
20年后,Rockstar 得以将这些细枝末节的东西描绘得更为具体。不久之前,视频作者 DefendTheHouse 花了几天时间去跟踪《荒野大镖客 救赎2》的 NPC,看看他们一天都干了些什么,取材对象分别是牧场工人、建筑工人和马夫。
先从简单的说起。早上8点,牧场工人会前往自己的工作地点,抽着烟在羊圈旁稍微清醒一下。到了10点,他开始将一袋袋的饲料背到畜棚中,直至晚上9点15分。结束了一天的工作后,是时候去酒吧小酌一杯了。他似乎是从外地而来的雇工,不想惹太多麻烦,生活得相当低调。
建筑工人的上班时间要更早一些,他6点45分跌跌撞撞的走出酒吧,来到附近一间还未完工的屋子。建筑的清理作业就得花去2个多小时,紧接着还得用锤子加固木板。相较于牧场工人,建筑工人会有1个小时的午休时间,但手上的活也得干到下午6点。夜晚时他又回到酒吧,跑到二楼向女子搭讪,累了就趴在桌子上睡到天亮。
马夫的生活可能更为丰富。清晨6点半他就已经起床砍柴,将木头拿回营地生火,此间又坐下抽了几根烟。日常工作无非就是接水填满马槽,或是将干草堆换个位置。到了下午2点,他从营地的大锅中舀了几勺炖肉,大口的品尝起来。
此时恰逢小雨,马夫只能跑到附近的农场避难,并和当地的工人攀谈起来。他到了晚上也会喝上几杯,不过,他更喜欢和营地中的同伴互动,自己还能吹得一手口琴。虽然每天风餐露宿,但却过得十分充实。
这些元素看起来平乏无味,可能并不引人关注,但如若置身其中,却表现得如此令人信服,他们无疑是西部世界中灵动的点缀。相比早年间那些呆滞的角色表现,这些 NPC 身在笼中,却已然成为了无法让人忽视的舞者。
下一页:尘归尘,土归土
尘归尘,土归土
你应该已经发现,上文提到的 NPC 行为不是单一线性的。《荒野大镖客 救赎2》的马夫就“恰逢下雨”而躲到了农场中,有些角色撞到路过的马车也会大喊大叫。从更学术的角度来看,如果想要他们的人生不那么单一,程序端的“应激设计”就至关重要了。
以黑岛工作室惯用的分支式对话和交互为例,当玩家与 NPC 交谈时,对话列表的每一个选项都会触发不同行为,这很有可能影响到游戏进程。包括《魔兽世界》在内的许多 MMO,会使用 Lua 脚本决定人物的对白反馈,它也可以延伸到更多应用上。
假设将 NPC 的一种行为视为“一个状态”,我们可以加入事件,不断的用“如果/那么”的逻辑将所有情况串联起来,这是「状态机」的浅显概念,也是一种决定 NPC 行为的常用手法。
不妨以《上古卷轴5》中卫兵的视角来写个状态机 —— 隔壁村的「老王」杀了只鸡,卫兵和他的关系变为敌对,接下来就会引发一系列事件:
我“站岗”,如果“发现老王”,那么“追击老王”;
我“追击老王”,如果“超过追击范围”,那么“回城站岗”;
我“追击老王”,如果“追到老王”,那么“攻击老王”;
我“攻击老王”,如果“老王死亡”,那么“回城站岗”;
我“攻击老王”,如果“血量少于30%”,那么“逃跑求援”。
Rockstar 设计的 NPC 行为就能用状态机来解释,马夫每天中所做的事是固定脚本,但突然出现了“下雨”事件,从而改变了状态,于是他就和农场工人攀谈起来。有时,我们还可以把上面框框中的所有状态“打包”,并构筑另一个条件来触发它,形成逻辑更为复杂的「分层状态机」。
好比将「马」的大状态分为“高兴”和“愤怒”,它们之间可以依条件切换。而高兴中又分为“蹦塔”和“摇尾巴”,愤怒中包括“狂吠”和“踢人”,这些小状态也可以依条件切换。如果应用得当,NPC 的行为完全可以脱离玩家,变得更为鲜活。
当然,决定他们人生的方法不只这一种,NPC 也可能受到「行为树」的掌控。他与状态机相同,也是当前设计 NPC 行为的主要方式。整体而言,行为树并没有脱离“如果/那么”的基本逻辑,你甚至可以把它当成《底特律:成为人类》的事件触发表。
如上图,当 NPC「猫奴」的动作执行到“吸猫节点”时,一旦成功吸猫,那么这条树分支就宣告结束。但如果他没吸到猫,失败的结果就会返回到母节点,然后从第二个子节点开始继续推进行为。行为树的优点是逻辑直观,与之相对的是,如果 NPC 被设计得较为复杂,遍历合适节点的过程就会占据很多运算资源。
这些深层次的原理,其实也引出了一个有些残酷的事实。电子游戏中的 NPC 毕竟由 0 和 1 构成,为了节省资源,当你远去拯救世界时,程序往往有一套“自我销毁的机制”。
即使玩家的电脑好到一定程度,也不可能同时呈现整个天际省的花花草草。如果 NPC 处于视野范围之外,程序可能就不再渲染他们的建模,此时的 NPC 就如同《攻壳机动队》中的草薙素子,只剩下一堆运行的代码,没有实体可言。更为彻底的销毁方法是,随着地图的转换,用不上的代码也会从内存中清除。
不过,NPC 的最初定义来源于桌面上的“非玩家角色”(Non-Player Character),这个笼统的划分范围,反而为其提供了极为广阔的拓展空间。他们时而化身为协助者,帮助玩家更好的成长,时而又站在我们面前,成了一块恼人的绊脚石,或是以受害者的形式,勾起你的恻隐之心。
木讷而机械的形象,从来都不是 NPC 的唯一体现形式。那些虚拟形象的背后,或许长着一张与我们相同的有机脸孔。即使从解构主义的层面来看,看似冰冷的代码,也凝结了制作者的内心表达。NPC 所彰显的可能性充实了幻想,他们同样生根于人们心中,不断重演着属于自己的精彩故事。
,