因为目前的NLP技术还不能通过图灵测试。让计算机写的对白在连贯性、逻辑性与文学性上都比人类编剧策划的要差。因此目前主要是通过人类制作NPC性格库、文本库与剧情库,然后通过语法生成树或决策树的方式从剧情库中按照一定的逻辑组合出剧情,再根据剧情中的NPC的性格来从文本库中抽取适合的对白文本模板,填写模版中空缺的信息后展现给玩家。例如《动物森友会》中采用的就是这种故事和对话的生成方式。
另外也不是所有的游戏都是随机生成剧情、任务与对话就好。游戏还是应该体现设计师的价值观或设计动机,以给玩家最适合的体验为目的。一般来说我们认为AI辅助游戏设计或游戏生成是有效的,但是游戏的核心体验还是应该由人类设计师与制作人来把握。比如《仙剑》这类叙事游戏,叙事、角色与剧情的核心应该让人类设计师把控,而迷宫地图可以由机器来生成。因为迷宫地图不触及《仙剑》这类游戏的核心表达,仙剑1里的迷宫地图换一个电脑生成的也不会影响玩家的体验。而《文明》这类策略游戏,可以通过AI来生成故事或对白,因为《文明》的设计核心在于游戏机制与策略玩法,因此让AI随机生成一些文明之间的冲突故事可以在增加游戏的戏剧效果与趣味性方面起点缀作用。
关于剧情任务的随机生成器,我曾经翻译过一篇论文,你能够通过这篇论文明显地感觉到人类设计师设计的任务(第4节)与自动生成的任务之间(第5节)的区别与差距。感兴趣的话可以看一下:
本文翻译自第二届国际游戏程序性内容生成研讨会论文集的文章:A prototype quest generator based on a structural analysis of quests from four MMORPGs,作者是北德州大学的 Jonathon Doran 和 Ian Parberry。
摘要
这篇文章对于四个流行的RPG游戏(Eve Online, World of Warcraft, Everquest, and Vanguard: Saga of Heroes)的750项游戏任务进行分析后,研究者发现 RPG 类型的网游的任务具有结构上的共性。他们提出了基于这种结构的RPG任务分类,并制作了一款任务生成器,辅助策划们生成复杂、多层次、看起来合理的复杂任务。
1. 介绍
“任务”是角色扮演游戏中常见的游戏内容,系统会要求玩家完成一系列目标以换取奖励。从游戏制作者的角度来看,任务提供了许多具有挑战性的游戏元素,并为玩家提供了具体的游戏目标。从玩家的角度来看,任务是一种叙事元素,它让玩家了解世界,让游戏角色获得知识和力量。完成任务过程中人物的对话和动作也可以用来刻画戏剧性的事件。作者寻求叙事与玩家寻求娱乐的目标并不冲突。
日常任务系统可以增加游戏的可变性与可玩性。理想状态下,我们期待玩家总是能遇到未经历过的新任务,以增加玩家对游戏的粘性。然而,在对《Eve Online》《魔兽世界》《无尽的任务》《Vanguard: Saga of Heroes》的750多个人类创作的任务的分析表明,这些任务的结构多样性远低于人们的预期。能够利用这种常见的结构用程序生成适合RPG使用的随机任务以取代人类设计师设计的固定的任务库,这样可以进一步增加游戏的可变性与可玩性。
本文的主体部分分为五个小节。在第2节中,笔者介绍相关工作。在第3节中,笔者描述了我们对以上四款 MMORPG 游戏的结构分析结果。在第4节中,笔者给出了对《无尽的任务》中一项任务的结构分析实例。在第5节中,笔者介绍了我们是如何基于结构分析制作了一款自动随机任务生成器。在第6节中,笔者分析了使用该任务生成器生成的任务。
2. 相关工作
之前关于 RPG 任务分析的研究主要分为两类:任务的结构性研究与任务的功能性研究。结构性研究是研究任务的时序顺序与逻辑合理、有解,功能性研究是研究任务在当前游戏状态是有意义的不会导致出戏。
Ashmore和Nitsche提出了使用“钥匙-锁”结构生成任务的算法,在结构上可以成功生成任务,但是这种方法生成的任务缺乏NPC互动,对于叙事与加强玩家对于游戏世界的理解毫无帮助。
Jill Walker 将魔兽世界任务分为探索任务和战斗任务,这是对任务进行功能性分类的早期尝试。
Dicky 提供了一种任务类型的分类方式,但是不能证明这种分类能够覆盖所有的 RPG 任务。
Aarsath 宽泛地讨论了任务的功能性分类,并着重分析了一款第一人称射击游戏中的任务。
任务生成问题是计划问题的一种特殊情况,一些研究者认为一条任务由初始状态、目标状态和玩家为了达到目标而必须执行的一组动作组成。一般来说,计划问题是NP-complete的问题,因为计划问题可以被转换为布尔可满足性问题,要通过暴力搜索来确定一条计划是否存在。
因此我们放弃一般的规划问题而选择有限制的问题来避免高复杂度的计算。我们对人类生成的任务的分析表明,RPG 游戏中的任务具有几种结构模式,每种模式都有一个隐含的前置条件和后置条件,只要不违反这些条件,生成器就可以自由地设计或引入新的子任务。
3. 结构分析
我们对四款游戏的任务进行结构性分析,四款游戏贡献的任务条目数量占比如下所示:
每一个任务条目都包含NPC的对话,玩家需要执行的一系列动作,以及完成任务会获得的奖励。
通过分析这些任务,我们观察到任务分为9个不同的潜在动机:知识、爽点、声誉、宁静、保护、征服、财富、能力、装备。我们观察到不同的动机在游戏任务中的分布并不均匀,如下图所示:
NPC向玩家传递任务时使用了2-7个特定于其动机的具体策略。每种策略可以用一个动名词组来描述,例如,“杀死害虫”、“窃取物资”或“营救NPC”。每个策略都需要执行一系列(1~6个)动作来完成,玩家必须依次执行这些动作来完成策略。每个动作可以是玩家可以实现的简单原子动作,也可以递归地表示为一系列其它动作或动作变体。我们将以语法树的形式表达任务结构,在语法中,终端符号是原子动作,而动作变体用尖括号&#34;<>&#34;扩起,意味着可以进一步拆解成原子动作。
以下是原子动作列表:
以下是动作变体列表,它们由原子动作组合而成:
以下是每种动机可以采用的具体策略,及每种策略需要完成的动作集合。
于是,动作可以表示为一组树,树的叶子是玩家可以执行的原子动作,树的内部节点代表了一路上玩家必须完成的策略。要生成一个RPG任务,可以首先选择一种NPC动机:
<任务> ::= <知识>|<爽点>|<声誉>|<宁静>|<保护>|<征服>|<财富>|<能力>|<装备>
如果NPC的动机选中了爽点,那么爽点可以进一步进行分解:
<爽点> ::= <获得奢侈品>
<获得奢侈品> ::= <获得物品> <前往地点> 给予
4. 任务实例分析
为了演示人类设计的任务样本符合我们的分类方案,我们使用这些规则去分析《无尽的任务》中的一条任务“治疗 Lempeck Hargrin”。Lempeck Hargrin是游戏中一位生病的盟友,要治愈他需要一种药物。任务从 Qeynos 和 NPC0 开始,NPC0 要求玩家前往一个偏远的小镇,获得治疗 Lempeck Hargrin 的药物所需的成分。玩家需要从 Qeynos 旅行到 Rivervale,在那里与 NPC1 交谈,按照他的指示去看望受伤的 NPC2 ,并给 NPC2 绷带以换取蜂巢。玩家带着蜂巢回到 Rivervale 用蜂巢交换 NPC1 的蜂蜜,玩家带着蜂蜜到 Qeynos 见 NPC0,NPC0用蜂蜜制作药物。玩家将制作的药物带给 Lempeck Hargrin,Hargrin 被治好。
因为这个任务的主要动机是治愈 NPC ,所以这个任务是由保护推动的,该任务达到保护的策略是治疗或修复(1)。该策略的分解过程为:
<保护> ::= <治疗或修复(1)>
<治疗或修复(1)> ::= <获得物品> <前往地点> 使用
然后递归地将树填充到全部由原子动作组成。如上图所示。非终端符号框背景为白色,终端符号框背景为灰色。圆圈里的数字代表动作变体列表中的规则编号,六边形中的数字代表原子动作列表中的原子编号。菱形中的数字代表玩家执行动作的顺序,这是通过遍历任务树获得的。以下是任务树每个节点的详细说明:
- <治疗或修复1>:接受 NPC0 的任务。
- <获得物品>:你需要拿到制作药物的成分——蜂蜜。有人告诉你去河谷找蜂蜜。
- <前往地点>:你知道河谷的位置,所以直接去那里。
- <获得物品>:你需要获得蜂蜜,但被告知要先获得蜂巢。
- <前往地点>:你想去蜂巢,但不知道在哪里,应用动作变体列表中的规则5。<前往地点>被分解为先<获得知识>,再前往相应地点。
- <获得知识>:首先需要获得蜂巢位置的知识,你知道 NPC1 知道,应用变体列表中的规则9,<获得知识>被分解。
- <获得物品>:NPC2 受伤,需要包扎。去药店买绷带。应用变体列表中的规则12。
- 前往:你知道药店可以买到绷带,所以直接前往药店。这是原子动作表中的动作11。
- 收集:收集一条绷带,可以是购买获得,也可以从地上捡起来一条绷带。这是原子动作表中的动作9。
- 你的子任务是去找 NPC2 ,应用变体列表中的规则1。
- 你前往 NPC2 的住处,这是原子动作表中的动作11。
- 把绷带给予 NPC2,这是原子动作表中的动作10。
- 听 NPC2 说从 Bixies 那里可以获得蜂巢。这是原子动作表中的动作13。
- 前往 Bixies 所在的地方,这是原子动作表中的动作11。
- 获得蜂巢,应用变体列表中的规则11。
- <窃取活动>:你需要从Bixies那里窃取蜂巢。应用变体列表中的规则15。
- <前往地点> ::= ε ,你已经在那里了。
- 杀死Bixies,这是原子动作表中的行动12。
- 取走蜂巢,这是原子动作表中的行动19。
- 无子任务
- 前往 NPC1 的住处。
- 交换:NPC1 用蜂蜜交换主角的蜂巢。
- 无子任务。
- 前往 Qeynos,这是原子动作表中的行动11。
- 交换:NPC0 用药物交换蜂蜜。
- 前往 Lempeck Hargrin 所在的地方,这是原子动作表中的行动11。
- 使用 药物, Lempeck Hargrin 被治愈了,这是原子动作表中的行动20。
- 任务生成器
作者使用他们提出的生成树结构创建了一个能够随机生成任务的任务生成器。它首先随机生成一个NPC动机,根据动机,生成器会根据策略将动机分解为变体动作或原子动作,变体动作进一步分解,直至所有动作皆分解为原子动作。通过用子任务重复替换节点,可以创建任意深度和复杂度的树。
随着任务树的扩展,任务的具体细节会被随机分配,导致具有相同结构的任务之间也会存在差异。当一个人改变正在给予的物品,物品的来源和物品的目的地时,一个简单的给予动作也会给人不同的感受。游戏通常会以不同的细节重复使用这种相同的结构,从而产生大量相似但不同的任务。这种替换技术在实际游戏中的流行表明,仅仅改变细节就可以完成更多的任务生成。
这个生成器输出简单的叙事。叙事包括简单的NPC样板对话,以及描述玩家完成任务时的动作的叙述,如下图所示:
5. 生成的任务示例
笔者展示了他们的任务生成器所生成的一条任务:
例子从一个叫史蒂夫的NPC开始,他被“知识”需求所激励。史蒂夫为了“知识”动机选择的策略是<间谍活动>,生成的结果如下所示:
- <间谍活动>:接受史蒂夫的任务。史蒂夫要玩家去侦查一个地精。
- <间谍活动> ::= <前往地点> 侦查 <前往地点> 报告
- <前往地点> ::= <获得知识> 前往(你不知道地精在哪)
- <获得知识> ::= <前往地点> <获得物品> 读(你需要找出地精在哪里,你知道托马斯有一封信会告诉你)
- <前往地点> ::= <获得知识> 前往(你必须去找托马斯,但你不知道托马斯在哪里)
- <获得知识> ::= <前往地点> <子任务> 听(你需要找出托马斯在哪里,你知道,丹罗斯知道)
- <前往地点> ::= <获得知识> 前往(你必须去找丹罗斯,但你不知道丹罗斯在哪里)
- <获得知识> ::= <前往地点> <子任务> 听(你需要找出丹罗斯在哪里,你知道,安吉知道)
- <前往地点> ::= <获得知识> 前往(你必须去找安吉,但你不知道安吉在哪里)
- <获得知识> ::= <前往地点> <子任务> 听(你需要找出安吉在哪里,你知道,阿顿知道)
- 前往阿顿所在的位置:你知道阿顿在哪里。
- 阿顿没有给你子任务。
- 听:阿顿告诉你安吉的位置。
- 前往安吉所在的位置。
- 安吉没有给你子任务。
- 听:安吉告诉你丹罗斯的位置。
- 前往丹罗斯所在的位置。
- 丹罗斯没有给你子任务。
- 听:丹罗斯告诉你托马斯的位置。
- 前往托马斯所在的位置。
- 获得物品:信。你想获得托马斯的信,托马斯说他会卖给你。
- (你不需要去任何地方、得到任何东西,或执行子任务,只需要花钱,就能买到信)
- 交换:你用钱交换来托马斯的信。
- 读:你阅读这封信,了解到地精的位置。
- 前往地精所在的位置。
- 侦查地精。
- 前往史蒂夫所在的位置。
- 报告从地精处侦查到的信息。
6. 结论和进一步工作
基于对四个MMORPG的750个任务的研究,作者发现任务有一种明确的结构,他们整理出这种结构后,制作了一个任务生成器。但是,在证明这个生成器生成的任务能够与手工制作的任务质量相媲美之前,还有需要进一步的工作。 |
|