非玩家角色 (NPC) 是游戏世界中的永久居民,他们的行为不受玩家控制。相反,他们的行为由游戏开发者创建的一组预先编写的条件决定,这些条件会根据世界状态来评估 NPC 应采取的行动。NPC 通常以任务提供者和同伴的形式出现,以进行对话驱动的故事推进、供应商分发物品、或与敌人进行战斗。
我们的游戏《Duck Duck Destruction》是一个案例,展示了一种使玩家能够为 NPC 编写决策树脚本并将其部署在自治世界中的模式。
动机
与 Gnomik 或 Sentences 等项目相比,我们的原语有更少的主观色彩,前者通过专用的自上而下的主控层将规则和传说制作引入游戏玩法。相反,我们的方法允许玩家对世界做出细微的贡献,在不破坏其基本机制的情况下保持其活力。我们认为玩家可部署的 NPC 是集体创作和新兴故事叙述的有利媒介,因为它们既能表达和互动,又能保持世界基础结构的完整性。
机制
《Duck Duck Destruction》 是一款完全由玩家编写的 NPC 鸭子,在竞技场环境中战斗的游戏。玩家通过决策树智能合约对鸭子进行编程,这些智能合约将 NPC 的行为确定为对游戏内事件的条件响应:“如果受到射击,请远离当前位置”或“攻击任何进入近战范围的鸭子”。
在足够数量的玩家提交决策树后,游戏主持人开始游戏。然后游戏自动进行,每轮都会提示鸭子根据编程的决策树采取行动。游戏以所有鸭子被淘汰或最后一只鸭子存活而结束。
NPC 行为脚本:决策树的图形示例
智能合约
每个 NPC 脚本都是部署在 MUD/EVM 兼容堆栈上的智能合约。要将这些脚本添加到给定的世界,世界合约需要一个注册功能,允许玩家提交其部署的 NPC 智能合约的地址。可以根据游戏进度、资产所有权或简单的地址白名单选择性地限制此功能。
一旦注册了脚本,父世界就会直接调用它,或者作为玩家操作的间接结果。由于 MUD/EVM 底层缺乏 Tick 机制或其他自主激活脚本的方法,因此它本质上是被动的,NPC 所做的任何动作都以玩家发起的动作为前提。因此,脚本的父世界必须包含一个触发 NPC 脚本执行的函数调用。
一旦被触发,NPC 脚本就会使用世界状态,并根据其预定义的逻辑和编程评估行动方案。
应用
《Duck Duck Destruction》将 NPC 置于快节奏的战斗环境中,以最低限度地展示我们原始的底层机制。由于采用基于会话的模型,它目前的功能类似于 NPC 托儿所,缺乏更丰富的周边环境来直接进行交互。
然而,我们可以想象这种原始元素在更开放的沙盒世界中的使用,其中 NPC 的反应是通过玩家提示异步触发的。一个例子可能是具有可编程个性的伴侣宠物,它们会跟随玩家并对环境和其他角色做出独特的反应,从而导致其行为中出现复杂性。这种复杂性导致世界变得不可预测且充满惊喜。《矮人要塞》中就有这样的例子,玩家在自己建造的下水道中偶然发现了 NPC 河马,因为他们的逻辑决定有水的环境是合适的栖息地。
在一个允许部署分级 NPC 并允许其执行不同操作的世界中,玩家还可以以链式故事的方式协作指导分支任务线,其中玩家角色和 NPC 之间的互动推动了共同目标的决心和追求。
备择方案
从概念上讲,替代方案可以利用玩家编写的逻辑,超越 NPC 的表述,并将其应用扩展到世界景观或可装备物品的某些部分。这可能是一个前哨站,其旗帜和装饰在被游击队围攻时会从干净变为破旧,或者玩家编程的赛博朋克小工具,只要对手使用远程武器,就会从玩家的库存中触发烟雾弹。
尽管我们的作品试图明确地将透明性框定为一种生成性功能,但使用零知识证明构建的实现可以在更具竞争力的环境中得到利用。Topology 的 Shoshin 就是一个例子,它允许玩家编写脚本并提交具有私人决策树的战斗 NPC。诸如 EZKL 之类的零知识堆栈可以实现可验证的链下计算任务,还允许更复杂、更具表现力的 NPC 逻辑,包括 AI/ML 模型集成。
这两种替代方法都存在使连锁故事式互操作性变得不那么直观的缺点。尤其是 EZKL,由于依赖证明后端,严格意义上来说,它使世界机制的自主性降低。尽管如此,我们发现这些替代方法很有趣,因为它们使世界能够将探索融入游戏玩法,提供更好的贡献者体验,并可能增强机器人抵抗力。
扩展
目前,发起《Duck Duck Destruction》游戏比赛的玩家需要承担运行其下注册的所有 NPC 合约所产生的网络费用。这可以通过允许玩家汇集资源的专用基金合约或带有付款人扩展的 gas 补贴模型来改善。
致谢
合约设计和工程由Norswap完成。视觉资产包由Tea Strazicic制作,SFX 由Orion Ohana制作,根据CC BY 4.0发布。