文/小猪,文杰
作为2020年TGA年度游戏得主《对马岛之魂》的续作,《羊蹄山之魂》自立项起便备受业界瞩目。它是Sucker Punch工作室继前作全球销量突破千万后推出的首款全新作品,也被视作PlayStation第一方重返精品单机游戏路线的重要信号。游戏于2025年10月2日在PS5平台正式发售后,凭借以“武器即时切换”为核心的战斗系统、电影级的视听呈现与张弛有度的探索节奏,迅速收获了口碑与市场的双重认可。
在近日的科隆游戏展开发者大会(Gamescom Dev)上,该游戏开发团队的首席玩法工程师兼设计师Samuel Holley,就《羊蹄山之魂》开放世界探索系统的设计思路、研发难点、事件牌组系统的实现逻辑与开发经验,进行了详细的分享。以下为分享内容实录,内容经编辑整理。
玩家自由度和叙事体验的矛盾
《羊蹄山之魂》讲述的是主角Atsu的故事,一位独行的佣兵,在家族遭遇屠杀十六年后重返故土,只为复仇,找到并杀死“羊蹄六人众”(那个杀害她全家的帮派)的每一个成员。但Atsu毫无头绪,对这片成长的故土也只剩模糊记忆。因此,探索这片广袤的蛮荒之地、寻找追踪羊蹄六人众的线索、为Atsu的家族复仇,这一切都将交由玩家来完成。
我们打造的世界充满了平行选择、隐秘角落与非线性的叙事脉络。游戏开局,整个世界就基本上向玩家敞开,我们希望玩家能漫游其中,以自己选择的节奏,去往这片巨大开放世界的任意方向,按自己的节奏游玩。与此同时,我们也希望这款游戏能够面向更广泛的受众,并以其核心的情感故事打动大家。
但玩家自由度,会和叙事体验互相冲突。漫无目的玩家可能会迷失方向、感到无所适从,甚至与故事产生割裂。更棘手的是,我们把游戏内的成长进度全部做进了世界场景之中:从生命值、精神提升,到新武器解锁、角色发展,一切都取决于玩家是否能找到特定地点,并完成那里的内容。我们这样做,本意是为了奖励探索,让世界更具沉浸感。但将如此重要的事物与世界的特定位置绑定,意味着玩家很容易错过一些内容,而这会严重影响游玩体验。
多年来的玩家测试反馈也印证了这一点:没拿到新武器的玩家,反馈战斗重复乏味;没找到提升血量的温泉的玩家,觉得游戏难度过高;没找到狼穴的玩家,就无法和Atsu的狼伴建立羁绊,诸如此类。
游戏中的一切,几乎都依赖于玩家在恰当时机找到对应内容。反过来讲,如果你把这些内容全部做完,又会忽略主线故事,脱离Atsu的人物旅程,而这恰恰是本作的核心。这对我们来说是一个巨大难题。
或许你会想,这作是续作吧?《对马岛之魂》里难道没有类似问题吗?确实有。但那款游戏中,我们通过限制玩家自由度来掌控局面。相比《羊蹄山之魂》,《对马岛之魂》的线性更强,叙事采用了经典的三幕结构,我们将对马岛划分为三个区域,你必须推进线性主线剧情,才能解锁对应区域,这是一个成熟而稳妥的做法。
反观《羊蹄山之魂》,区域数量是前作两倍,采用的是非线性叙事。由于非线性叙事的特性,你可以根据行进方向,以任意顺序追查羊蹄六匪的多名成员。我们只对一小部分终局内容做了地图锁区,红线以上的绝大部分区域,开局基本全部开放。
虽然《对马岛之魂》地图和结构更偏向线性,但它的开放世界并不是一套精心编排的体验旅程,它主要依靠视觉地标、金鸟、狐狸、呼救 NPC 这类手段告诉玩家哪里有内容。这些工具我们在羊蹄山里依然还在使用,但这套机制随机性很强,很大程度取决于你路上碰巧撞见什么。
并且内容会越堆越多。游玩时间越久,无论走到哪,大量任务和标记出现,一个个标记钉在地图上,最后地图就会布满图标。这会让人感觉像一份巨大的待办清单。最糟糕时甚至会让人不堪重负,反而促使玩家以错误的方式来获得体验:比如连续追五只狐狸,纯粹只是为了打卡完成任务。
在《羊蹄山之魂》中,我们希望玩家体验一场更精心编排的旅程,同时又想在玩家自由度上进一步加码,比以往更宽广、更非线性。 这两个目标是相互矛盾的:我们希望玩家自主规划路线——这是我们游戏的本质,但过往经验告诉我们,有些路线确实比其他路线更好。这就是我们面临的巨大困境。
我们团队很多人都玩过桌游《龙与地下城》。一个优秀的地下城主,会给予玩家完整自由,同时提供一套体验舒适、经过编排的冒险旅程。玩家可以随意去往任何地方、做任意选择,地下城主会根据玩家的行动灵活调整剧情,把故事递到玩家面前,保障所有人都能拥有良好体验。
《羊蹄山之魂》内部就面临这样深层的设计矛盾。我们意识到,游戏需要一个 “地下城主”,于是我们把它做了出来,这套系统叫做事件牌组(Event Deck),一只无形的手用来引导玩家探索。 就像优秀的地下城主,它把一套线性预设方案,适配每一位玩家的非线性游玩流程。既充分给予玩家自由,又保证游玩体验。
接下来我会讲解事件牌组的整套工作机制。
什么是事件牌组
可以把它理解为游戏底层一套隐藏卡牌。玩家在开放世界探索时,无论去往何处、和什么对象交互,游戏都会抽取卡牌,以此决定前方生成什么内容、NPC 对话台词、悬赏板张贴什么告示、敌人是否可以审问,以及审问之后给出什么信息。系统以此决定会向玩家推送哪些事件,因此命名为事件牌组。
牌组内部存放一张张卡牌。每张卡牌代表一类游戏体验,可以是主线故事,也就是Atsu向杀害家人的反派复仇;也可以是支线,讲述普通百姓在边境求生的故事。 同时也包含功能性玩法:解锁新武器、提升生命值等等。卡牌可以覆盖游戏方方面面,包括不同类型内容、商人这类经济交互、和狼伴建立羁绊的社交内容,甚至 “孤独” 这类情绪向体验,后面会展开说明。
牌组定义了一套各类体验的理想流转顺序,系统会尽量按照这个顺序给玩家提供体验,并且这套流程会循环往复。
注意:卡牌是抽象标签。主线卡牌不等于某一个具体任务,比如攻打鬼族城堡。它代表全部主线类体验,是一类玩家可以触发的交互。每一类卡牌可以设置多张副本。举个例子,牌组配比可以是::3张主线故事牌、2张生命值提升牌、1张支线故事牌,等等。
卡牌的顺序十分关键,它是一套线性序列,相当于一份脚本:先做 A,再做 B,再做 C。当然不会每一个玩家都完全照这个顺序走,但如果玩家顺着这套流程,就能获得优质体验。事件牌组的目标,就是尽量促成这套理想流程。 这并非单纯比喻,我们会直接把卡牌顺序写在文本文件里,《羊蹄山之魂》实际使用的牌组就是这样维护的。
那这套逻辑如何落地?游戏里有特定交互会从牌组抽卡,以此决定后续行为。我们把这类交互对象叫做发牌者(dealers)。
游戏世界中遍布发牌者:居酒屋喝酒的浪人、贴满告示的悬赏板、求饶的敌人,甚至玩家扎营休息,这些全部属于发牌者。 玩家与之交互时,对象会暗中抽取一张卡牌,决定接下来做什么、说什么、刷新哪张悬赏告示,也可以选择什么都不触发。 同一个发牌者产出的内容是动态的:浪人既可以给出羊蹄六匪的复仇线索推进主线,也可以告知附近隐居枪术大师的位置;抽中对应卡牌,也可能直接出现行脚乐师,当场教玩家一首新曲子。 气泡框展示的就是发牌者最终输出的对话与行为,也就是生成的事件。
事件分为两类。一类是线索广告,给到玩家提示,让玩家自行前往附近定制化内容点;另一类是即时交付内容,例如乐师就地教曲子,玩家不需要再跑别的地方。
整套机制逻辑总结:世界中遍布发牌者,它们从事件牌组抽卡,确定要给到玩家哪一类体验,再结合玩家当下处境,转化成具体、适配的事件。 事件牌组的意义,就是无论玩家在非线性流程里遇到哪一个发牌者,都能把各类事件按理想顺序推送出来。 这些交互形式丰富多样,可以适配不同类型玩家。
黄金经验一:设置多样化的发牌者。开放世界玩家游玩风格差异很大。不是所有人都爱和 NPC 对话,不是所有人都会去悬赏板接任务,也不是所有人都习惯扎营。但每个玩家或多或少都会进行其中一部分行为。 把大量交互都做成发牌者,就能保证无论玩家怎么游玩,事件牌组都可以触达玩家。 如果做不到这点,牌组就会陷入停滞,只能被动等待玩家触发某一个特定交互,才能抽取下一张卡牌。
让我们看一个简单的例子——为了简洁,这个事件牌堆只有4张牌(实际游戏中会多得多),但足以说明原理。假设玩家正在世界漫游,来到一处聚落,看见悬赏板。悬赏板就是发牌者,当玩家靠近时,它从事件牌堆中抽一张牌——可以看到最上面是一张“武器解锁”牌。悬赏板用这张牌来决定生成什么悬赏告示:由于抽到了武器解锁牌,玩家看到了一张关于“炸弹匠”Ina的悬赏令,她是一位能制作炸弹的潜在盟友,找到她就可以解锁投掷炸弹,玩家获得一条线索。
离开悬赏板,玩家继续前进,和居酒屋饮酒的浪人对话。浪人也是发牌者,抽中生命提升卡牌。浪人指向远处山头升腾的蒸汽,给到一处温泉的位置,泡温泉可以提升生命上限。
玩家离开聚落,一边寻找炸弹匠人,顺路找到温泉。获得新武器、血量提升之后,在路上遭遇羊蹄六匪的手下正在骚扰路人,玩家介入战斗解决一众敌人。 最后一名敌人跪地求饶。审问本身属于发牌者,会读取事件牌组。下一张是主线卡牌,Atsu逼迫对方交代羊蹄六匪情报,敌人供出反派狐妖的位置,玩家拿到主线线索。
此时牌组仅剩最后一张:孤独卡牌。 这是一张特殊卡牌,专门为 “什么都不做” 预留的位置。做设计时很容易一门心思堆砌要发生的事件,忽略事件与事件之间的留白。如果不加控制就会重蹈前作覆辙,不停向玩家灌输待办,不给玩家休息的空间。
在《羊蹄山之魂》,孤身策马行走在辽阔边境,只有马匹相伴的孤独感,是游戏氛围非常重要的一部分,属于情绪层面的核心体验。想要游戏留出这种体验,就必须把它纳入牌组。
这便是黄金经验的第二条:休闲放空本身也是一种体验,应当放进事件牌组。“孤独”牌不会通过任何交互来完成,它只有在玩家独处一段时间后才会自动完成。当这张牌成为牌堆中唯一的牌时,玩家遇到的任何发牌者都不会发牌——NPC不会显示对话提示,悬赏板不会生成新告示,营地也不会有访客。一旦玩家持续足够长时间没有靠近其他人类,“孤独”牌便会从牌堆中移除。由于这是我们简化版牌堆的最后一张牌,在这之后牌堆就会重置。
牌的优先级与跳过
重置时不会洗牌打乱顺序,整体维持线性序列,也就是我们预设的理想体验循环。游戏本身已经存在大量不可控的随机性,不需要牌组再额外增加随机。 但卡牌顺序并非永远固定。满足条件时,部分卡牌可以直接置顶。
比如,“生命值提升”卡牌本来排在牌组中部。如果系统检测到,对比玩家整体进度,生命值上限严重滞后,生命提升卡牌就会标记为紧急,直接跳到牌组顶端。 之后无论玩家走到哪里、触发任意发牌者,都会优先推送温泉线索,补齐血量,避免玩家体验崩坏。
假设轮到生命提升卡牌生效,但玩家手上已经持有一处温泉线索了,我们当然可以再推送另一处温泉,但过往测试证明这么做是错误的。
这便是黄金经营第三条,可能也是最重要的一条:推送线索要有代价。给玩家推送线索这件事本身存在成本,是从三方面来考虑的:第一,会剥夺玩家自主探索发现的乐趣;第二,增加待办清单的负担;第三,同一条线索我们只能推送一次。只有判断玩家愿意接收的时候,才适合推送。
更关键的是,新线索会抢占下一条线索的权重。如果玩家只知道两件事,而我们告知第三件事——尤其当第三件事与前两件性质不同时——玩家很可能会认真听取。但如果玩家已经知道十件事,我们再告知第十一件,尤其是同类内容,玩家大概率会把它压在列表底部直接忽略,进而影响后续全部线索的有效性。
因此,想要玩家重视给到的信息,就要把握推送时机。这需要克制,每次都要权衡利弊,如果弊大于利,就选择不推送。在上面的场景中,就应该跳过这张卡牌,等待玩家完成已知温泉,或是进入全新未探索区域之后,再推送生命提升相关内容。
这也是事件牌组和地下城主的相似之处:拥有一套线性基准计划,在玩家非线性的游玩过程中,抓住机会尽量按顺序交付。同时会根据玩家实际状态动态适配,跳过不需要的卡牌,把刚需卡牌优先级拉高。
系统遭遇系统
除发牌者之外,游戏其他模块也会读取事件牌组,其中最重要的是随机遭遇系统。 这套系统用来填充各个内容点之间的开放世界,生成巡逻敌人、匪徒、友善旅人、野生动物。它会读取牌组状态决定生成对象。 如果当前战斗卡牌置顶,就刷新敌人;如果轮到孤独卡牌,就只刷野生动物,刻意营造空旷荒芜的边境氛围。
某种程度上,系统遭遇系统也是一个发牌者——而且它更好,因为它可以生成更多的发牌者(可供对话的角色、可供审讯的敌人等),这些交互会根据事件牌堆中下一张牌的内容产生不同的结果。你必须在游戏中维持足够数量的发牌者,才能让牌堆持续运转,而系统遭遇系统就是我们最好的工具之一。
发牌者详解:审讯
以上是事件牌组的高层运行逻辑,下面我们深入底层。抽到卡牌之后系统具体如何执行?怎样选择播放哪段对话、刷新哪张悬赏告示?我用两个发牌案例来讲:敌人审问、营地访客。
先从审讯开始。 在《羊蹄山之魂》中,Atsu会和大量敌人交战,有时会触发敌人求饶审问的场景。敌人求饶开口,暗示自己掌握羊蹄六匪的情报,战败之后Atsu就会逼迫他吐露信息。这就是审问,属于一次发牌行为。
早在玩家抵达之前,审讯系统已经从事件牌堆中抽了一张牌。如果当时只能抽到孤独卡牌,审问就不会触发。要么根本不会刷出这批敌人;就算遭遇战斗,打完之后也直接处决敌人,不会进入审问环节,玩家完全感知不到这套逻辑的存在。 但这个案例里,系统成功抽到一张主线卡牌。
仅有抽象的主线卡牌还不够,审问还需要具体音频、字幕、面部动画数据。系统如何从抽象的事件卡牌,生成一段可实际播放的具体事件? 答案是读取一份大型文本配置文件,我们称之为事件总表(master list of events)。 游戏内全部事件都定义在这里,同时记录发牌者执行该事件需要的全部参数。
在 Sucker Punch 引擎中,事件就和普通对象一样,拥有名称、分类。在这个案例中,“event_clue_kitsune_1”代表Atsu获取到的第一条关于狐妖(羊蹄六匪其中一名反派)的情报。配置里会标明该事件对应哪张卡牌,这个案例绑定主线卡牌,所以主线卡牌触发时该事件会被纳入候选。
配置中存在两类交付方式:add_talk_delivery(对话交付)、add_interrogation_delivery(审问交付)。 同一个情报,可以有多种交付途径。同一条事件,玩家有可能通过游戏内不同发牌者获取,因此要做多套交付方案,不同发牌者支持不同交付类型。 对话交付通用性强,大量发牌者都可以调用;审问交付用途很专一,但此刻我们正好处于审问流程,就会匹配这一项。每一类交付方式内部承载实际内容,核心是一组对话资源,对应音频、字幕、角色动画等玩家所见的全部内容。
这只是事件总表中的一个事件,还有另一条主线事件,对应羊蹄六匪里的鬼。 审问发牌者如何从多条候选事件里挑选? 当多条事件同时有效,直接取列表中第一个符合条件的条目。 也就是说,和事件牌组本身一样,事件总表也是线性排序。我们可以线性定义理想的情报获取顺序。条件相同的前提下,可以做到让玩家总是先拿到狐妖的相关情报。
回到审问的敌人:
“我知道狐妖躲在手取山脊。” “告诉我怎么过去。” “你去了就会和其他人一样消失。” “快说。” “沿着卢波河一路向北,走到迪奥罗荒野尽头。”
总结一下:当玩家开始与这些敌人战斗时,审讯系统从事件牌堆中抽了一张牌,一张“主线故事”牌,并从事件总表中选择了一个它能够传递的事件。因为找到了可传递的内容,审讯得以进行,并使用所选事件指定的对话推动了主线故事。
发牌者详解:营地访客
再看另一种发牌者。假设玩家顺着审问得到的线索沿河向北,来到狐妖所在的手取山脊积雪入口。 《羊蹄山之魂》中,按按键几乎可以在任意地点扎营。多数时候只有Atsu和马在营地,但偶尔会有访客过来围坐在篝火旁。
营地本身就是发牌者。画面黑屏转场的阶段,营地就会从事件牌组抽取卡牌。假设抽到一张武器解锁卡牌,再去事件总表筛选可用事件。武器解锁卡牌有两个候选:炸弹匠人伊娜,苦无工匠哈娜。两名盟友都可以解锁新武器,都符合卡牌要求。
我们看事件配置属性。其中有add_object_delivery(物件交付),该方式会直接在场景生成实体物件,比如悬赏板刷新告示、敌人据点刷出狐妖写给手下的密信。 但营地发牌者不支持物件交付,只能使用对话交付。 对话交付带有地域限制条件:炸弹匠人伊娜出没于石狩平原,当地 NPC 才会聊起她。而此刻Atsu身处积雪的手取山脊,伊娜对应的对话交付全部不匹配当前区域。 只剩下苦无工匠哈娜,她就住在手取山脊,拥有适配该区域的对话交付。于是营地发牌者选中哈娜这条事件。
选定事件之后回到黑屏转场。需要生成一名 NPC 过来和Atsu对话。 系统读取对话配置,查看该段录音对应的角色身份,这里要求是松前藩士兵。于是生成一名松前藩士兵来到营地。
“知道羊蹄六匪的消息吗?” “你想了解什么?” “我要找狐妖,你知道他的情况?” “他盘踞在手取山脊,那地方很难活下去。驻守那边的人汇报,说狐妖像妖狐一样霸占农场。有个叫哈娜的农户在用苦无反抗他。”
以上就是营地访客的运作方式。玩家手动触发扎营,后台抽取武器解锁卡牌,生成一名松前藩士兵,告知Atsu附近苦无工匠的线索。
营地访客对事件牌组体系价值极高,由此引出黄金经验第4条:扎营不绑定任何固定地点,任何位置都可以执行。 而且是玩家主动按下按键触发,代表玩家此时正在关注游戏。有时候,玩家不一定会走到我们精心布置的定点交互点位;就算走到,也可能直接忽略。但玩家走到哪里都可以扎营,既有恢复精力这类玩法层面的需求,也有在星空下弹奏三味线这类体验向需求。
我们利用这种高频交互,即便其他发牌者缺少触发机会,也能维持事件牌组持续运转。 但这个认知我们发现得太晚,没能做出更多同类全局交互。最终导致整套系统过度依赖扎营。如果你游玩本作,感觉营地访客出现得过于频繁,原因就在这里。如果再给我们一次机会,我们会设计更多这种无地点约束的发牌者。
回顾玩家旅程
我们复盘一遍完整游玩流程:玩家自由开放世界漫游,行进路线由自己决定;系统遭遇管理器刷出敌人;交战之后审问最后一名敌人,得到狐妖位置,推进主线;顺着线索来到手取山脊脚下;玩家扎营,营地访客士兵告知苦无工匠哈娜的情报。 这就是玩家非线性选择,和底层线性规划的结合。
设想几种分支情况: 玩家审问拿到线索之后,没有立刻北上找狐妖,反而向西走到石狩平原,在当地扎营。此时营地访客就会推送炸弹匠人伊娜,而不是哈娜。但整体体验顺序不变:审问拿到主线情报,扎营拿到武器解锁。
再换一种情况:玩家先扎营。营地抽到主线卡牌,访客直接告知狐妖位置;之后审问敌人,再拿到苦无工匠线索。体验顺序依旧不变:主线,然后武器解锁。 哪怕玩家先和城镇 NPC 对话,再去悬赏板,逻辑也是同理。
如何让同一条线索(例如狐妖的情报),可以通过多种不同渠道交付? 前面看过这条事件配置,它内置多套交付方案。所有方案给到玩家的核心信息完全一致:向北去找狐妖。但表达方式各不相同,适配不同身份的角色,不破坏世界观代入感。
比如迁徙的定居者会把狐妖当成妖邪,警告玩家不要前往北方雪原,用符合普通人身份的口吻给出线索。 但松前藩武士说同样一套话就很违和,松前藩正和狐妖势力交战,他们清楚对方是凡人,不是妖怪。 因此配置里会打上标签,限定不同对话片段适配的角色背景与性格。
这么做成本很高,但至关重要,引出黄金经验第五条:如果为了节省成本,让所有角色共用同一套模板对话,或是 NPC 说出玩家早就知道的信息,玩家会一眼看穿规律的系统逻辑,体验会很糟糕。
做好事件牌组,可以强化故事与世界观,把随机巡逻战斗这种容易被忽略的内容,也融入叙事。 但前提是必须守住沉浸感,说实话,这不便宜。
单这一条事件,就要写 4 套对话,每套 5 行,合计 20 行文本。还可以继续扩充变体。 如果是渔夫、孩童来讲这段故事,又需要全新的台词保证逻辑通顺。 写台词还只是工作量的起点。游戏全部对话都要录制原声,还要做多语种配音。做配音的同行看到这里应该能感受到工作量压力:每套对话 × 多版本 × 多语言 × 大量事件,录音体量巨大。 不止如此,部分事件,比如这条狐妖线索,每一段对话,会交由最多六位不同配音演员录制。
举个例子,配音演员 Faye Mata,在本作中一人分饰 16 个次要角色。这些不是主线大人物,而是拥有独立人设小故事的配角:不认同羊蹄六匪与武士两方的渔夫、藏着秘密的难民少女、被匪徒掳走的农妇等等。 Faye Mata 绝对是本作的功臣。
对于事件牌组来说,她的价值在于:由她录制的事件对话,可以直接复用给 16 个不同 NPC。 这些不是营地访客那种刷出来说完话就消失的临时角色,而是拥有独立支线故事的常驻配角。Atsu帮助过他们之后,再向他们打听情报,这个和玩家已经建立过羁绊的人物,就可以输出事件牌组当下需要给到的线索。 玩家已经和这个角色有过互动,听过他说话,往往刚打完专属任务对话,紧接着就触发系统动态事件。 动态生成的对话,必须匹配人物性格,配音演员也必须对应。一旦文本衔接生硬、配音演员对不上,玩家立刻就能察觉异常。
想要实现这套效果,编剧团队必须严格统一任务剧情对话与系统动态对话的写作范式。
控制整体开发体量本质上这是一道数学题,想必大家来听这场分享,也想看到这部分: 总录音台词行数 = 事件数量 × 单事件对话数 × 单对话行数 × 配音演员数量(例如 Faye 这类一人多角的演员)。确定台词总预算之后,就可以调整其余变量,做出可以交付上线的版本。
你可以把其中一部分变量理解成制作一个事件的配方,另一部分变量决定你能产出多少个这样的事件。如果你采用成本很高的制作方案,事件的复用灵活性会很强,可以适配大量场景,但你做不出多少个。如果你用低成本方案,只写一套对话,只用一到两位配音演员,那你可以批量产出大量事件,但它能适用的场景会被限制得很死。
在《羊蹄山之魂》里,狐妖线索这类最重要的主线事件,我们用的就是高成本方案,但游戏里这类事件数量很少,只留给维系Atsu复仇主线的内容,把主线叙事融入开放世界,以此发挥它高灵活性的价值。游戏里绝大多数事件都采用成本更低的方案,只写一套对话,搭配一到两组配音。我们还做了不少处理技巧,让这些低成本事件的适用范围比想象中更广。靠着少量高成本事件搭配大量低成本事件,我们在可控的预算之下,兼顾了内容丰富度和内容体量。
牌组系统的优势与不足
讲完底层细节,我们来聊聊事件牌组这套系统的优势和短板,方便大家判断它到底适不适合自己的项目。
最直观的好处是,事件牌组可以让开发者去尝试更大胆的开放世界架构,不用担心玩家被海量信息压得手足无措、迷失方向,或是和主线故事脱节。
除此之外还有一些不那么显而易见的好处。设计师可以直接用面向玩家体验的语言去定义想要的效果。很多时候做开发就像在调试一个黑盒,调概率、调冷却、调距离规则,不断改动输入参数,寄希望于拿到想要的结果。但事件牌组不一样,你定义的是输出结果,而不是输入参数。
你站在玩家的视角去思考理想的游玩流程,明确写出你希望发生什么。觉得玩家解锁武器太晚,直接调整牌组;玩家厌烦没完没了的野外遇敌,就删掉敌人相关卡牌,增加支线卡牌来改变体验比重;想要更多留白的时刻,就加入更多孤独卡牌;希望战斗和叙事交替推进,就重新排布卡牌,勾勒出你想要的游戏节奏。当不同设计目标互相冲突,比如既想让玩家解锁武器,又想让玩家提升血量,你可以纵观全局,清晰判断哪边优先级更高。
一套调校到位的事件牌组,还能以很巧妙的方式放大玩家选择的意义。玩家相信游戏会把合适的内容送到自己手上,就敢随心所欲去往任何地方,不会产生 “我玩错游戏了” 的心理负担。
就像前面提到的,当玩家手里已经有温泉的线索,牌组就会跳过提升血量的卡牌,推送别的内容,比如一个讲述不死武士传说的说书人。玩家面对的就不再是两个温泉之间毫无意义的二选一,而是一边是可以提升血量的温泉,另一边是能够解锁护甲的传说故事。两者的玩法收益和叙事氛围完全不同,玩家的选择才真正有分量。
牌组的流转也会带动玩家轮换体验不同类型的内容,主线、支线、小游戏、传说故事来回切换。我们发现这能大幅提升玩家的游玩感受。玩家喜欢追狐狸收集,但不喜欢一口气连续追五只。牌组自带内在节奏,避免某一类体验反复出现让人腻烦,缓解开放世界里做清单任务的疲惫感。
最后,事件牌组能让整个世界显得更加鲜活连贯,模糊主线和支线内容的边界。小人物,甚至战斗里随机刷出来的敌人,都可以抛出主线相关的信息。路上遇见的每一个人都知晓羊蹄六匪,也都有着自己的看法,让Atsu的复仇故事显得更加真实。原本单薄的填充内容,就此被赋予重量,成为宏大世界的一部分。
它也缓解了开放世界一个经典矛盾:主线有迫在眉睫的目标,但玩家却在做收集花草这类无关事情。在羊蹄山的世界里,无论你走到哪里,在做什么,Atsu的故事都会跟随着你,让这些支线行为贴合主角的人物逻辑。叙事向的玩家会愿意去体验战斗、扎营这类玩法内容;看重玩法的玩家不用被锁死在单一线性流程里,也能接触到剧情。
说完优势,再来讲短板。事件牌组并不是万能的。首先,程序化生成的发牌交互,适合处理符合模板规则的简短内容,用来传递碎片化小故事、烘托世界观,但是它承载不了情绪浓度很高、演出规模很大的剧情桥段,至少本作没有做到这一点。
其次,事件牌组的开发成本很高。世界里需要布置大量发牌载体,还要处理一大堆内容协同工作,这点必须如实说明。
另外,很多事件本质只是线索、提示,目的是引导玩家去到手工制作的内容点位。系统可以把温泉的线索给到玩家,却没办法保证玩家立刻就去完成温泉对应的内容,玩家完全可以无视这条线索。我们这套系统追求的本就是玩家自由,所以它的定位是温和引导,而不是强迫玩家按我们的想法行动。当然统计下来,牌组推送的线索和玩家实际行为有比较强的关联,但并不是百分之百。这次分享讲到的几条黄金经验,就是用来尽可能拉高这个关联度,如果没有这些设计,匹配效果会差很多。
最后,这套系统很容易过度依赖对话来交付事件,我们项目就踩了这个坑。对话制作成本高昂,还需要设计复杂的文案逻辑,才能让它读起来自然。就算付出这么多代价,大量对话依旧会让玩家觉得疲惫,还有不少玩家会直接跳过对话。这也是悬赏板这类物件形式的发牌载体的价值,它们不需要依靠对话。如果重新做这套系统,我们会投入更多精力去开发这类物件类的发牌方式。
综合来看,这套系统带来的优势大于缺陷,大部分问题都可以在后续迭代中优化解决。我很期待几年之后,能看到大家分享你们做出的更加完善的同类系统。
问答环节
Q:这套系统实现起来复杂度很高,很好奇你们是怎么确定要做事件牌组这个方案,开发过程是什么样的?
A:事件牌组并不是一开始就完整构思完毕,再动手落地的。开发前期这套系统根本不存在。我们确定要做一个非线性开放世界,早期大量测试拿到反馈,玩家只有刚好走对路线、刚好捡到武器,游玩体验才会好,一旦走错方向,体验就直接崩盘。很多项目遇到这种情况,就会大量做强制引导,逼着玩家去往指定地点,以此保证体验。我们想要找到别的解法。
这套系统最早的版本只服务主线,只产出羊蹄六匪的相关线索。我们跑通了核心机制:一套理想的线性叙事序列,可以通过世界里各式各样的角色交付出来,同一条狐妖的情报,可以由不同的来源给到玩家。测试反馈不错,玩家很享受自由探索的感觉。
与此同时,项目里还有别的独立功能,比如营地访客,最开始和事件牌组完全没有关联。但开发过程中不断遇到新问题,玩家迟迟找不到枪术师傅,拿不到第二把武器。我们就想到,能不能把给主线做的这套系统复用过来,用来推送玩法相关的线索。于是尝试把营地访客接入进来,但两套系统互相干扰冲突。
大型项目做系统设计经常就是这样,一堆很棒的想法彼此打架,需要做大量适配工作。后来我们意识到随机遭遇系统也是同样的问题,各个模块各自为战,玩家体验割裂。我们需要建立一套统一的逻辑,定义玩家接下来应该获得什么样的体验,尽可能把所有模块都挂靠到这套逻辑之上,基于主线模块已经验证过的方案,迭代出完整的事件牌组。
Q:想了解技术层面,你们怎么做取舍,哪些对话保留、哪些舍弃,怎么处理对话存储的压力?
A:这更多是生产层面的难题,很长一段时间我们都没有确定的指标。早期原型阶段,我们甚至用 AI 生成语音快速跑测试,验证设计是否可行,再判断哪些事件值得做成高成本、高灵活度的版本。我们很早就确定主线线索必须走高成本方案,但也清楚不可能大批量制作,成本会完全失控,需要寻找折中方案。我们优先从成本最低的可行方案做起。
比如温泉相关线索,尽量做到写一次、录制一次。营地访客就很适合这套逻辑,我们主动生成 NPC,对话直接匹配已录制的内容。审问这里我们还用到一个小技巧,玩家击杀敌人的顺序是随机的,直观来看审问功能似乎需要为每一类敌人录制多套语音。但实际战斗节奏紧张,玩家很难分辨说话的到底是哪个敌人。我们直接把敌人的语音替换成事件配套的录音。先通过战斗交火,建立这个敌人拥有语音的印象,战败之后直接沿用这套语音,以此节省成本。只有主线那一批事件使用高成本制作,其余全部采用低成本方案。
Q:如果重新开发这套系统,有哪些坑需要避开,在规划上有什么建议?
A:一部分短板刚才已经提到了。
第一,多做不绑定固定点位的可复用交互,也就是玩家走到任何地方都可以主动触发的行为,这是很好的设计抓手。大家第一反应往往是让 NPC 开口给线索,但这种方式局限性很大。多设计灵活的触发载体,牌组的流转会顺畅很多。
第二,处理好线索提示和实际内容之间的矛盾。3A 开放世界里,程序化填充内容和手工打磨的定点内容天然存在权衡。大量事件的作用只是引导玩家走向手工制作的内容点,但玩家往往已经有自己的目标,就算收到线索,也不一定会立刻改变行程。我很感兴趣的一个方向,就是如何把手工精品点位,和事件推送的行动号召更好结合。当然不能频繁打扰玩家,但当系统检测到玩家血量过低,游戏难度会崩坏的时候,可以设计更强的行动号召,适度打断玩家当前的行为,这也是我还在思考的方向。
Q:事件牌组追求给到玩家最优体验,你们是怎么定义什么是最优体验?温泉对应血量这类可以量化,那主线和支线之间的优先级该如何判断?
A:没有一句话就能概括的标准答案,和绝大多数游戏开发一样,依靠反复迭代、测试和数据分析。我们会观察数据,看玩家拿到某把武器是在游戏的第几个小时。开放世界开局阶段,玩家不知道该往哪走,很难接入主线,这也是线索系统诞生的缘由。我们定下目标指标,比如玩家遇到第一个羊蹄六匪反派的时间,围绕指标去打磨系统,调整世界里线索提供者、发牌载体的数量,修改相关规则。早期我们还用过冷却机制,后来全部舍弃,改用明确的序列逻辑。如果没有事件牌组,武器线索、主线线索分属两套独立系统,协调起来会十分棘手。
事件牌组的价值,就是把所有体验放到同一套逻辑之下做权衡。想要让玩家更快解锁武器,就必然挤压其他内容的曝光机会,所有体验都是互相牵制的。事件牌组提供了一套思考模式,但它并不是完美的,依旧要不断测试,调整卡牌顺序,反复试错。
Q:为什么营地访客总是正面的?有没有考虑过负面事件,比如营地遭到袭击?
答:我们确实考虑过。但游戏本身已经有大量战斗内容,反倒是很多重要内容,很容易淹没在开放世界海量信息里面。营地遇袭听起来很有意思,但受限于开发资源,我们当时优先要解决的是玩家找不到关键线索、关键玩法的问题。每新增一个事件,都要占用牌组内的一个位置,我们需要权衡,这个事件相比营地可以产出的其他内容,是否更有价值。我们也设想过一些偏向氛围的小事件,比如小鹿来到营地,但受限于工期,只能优先落地最重要的内容。当然别的团队完全可以去做营地遇袭这类设计,我也很想玩到那样的游戏。
热门跟贴