
Nexus的运作原理
扁平复杂度
传统游戏开发围绕着固定系统展开:每个机制是一段独立的代码,机制之间的每一条关联又是另一段代码。即使是沙盒游戏,本质上仍然是一组独立系统的集合。多样性在增长,但架构没有改变 - 开发复杂度也随之增长。
Nexus采用了不同的方式。游戏的基本元素是原子,所有其他内容都由它们构成。添加新机制不会增加架构复杂度。
数以百万计的元素,架构却不会因此变得更复杂。系统可扩展 - 适应任何复杂度的机制、规则和世界。
语义网络
Nexus以三元组(事实)的形式存储数据 - 格式为"主体 → 谓词 → 客体"的简单陈述。世界事实和机制规则用同一种格式描述:
- 苹果 → 属于 → 可食用(世界事实)
- 鹿 → 属于 → 食草动物(世界事实)
- 攻击 → 造成伤害 → 6(机制规则)
- 毒素 → 无视护甲 → 是(规则修改)
- 草 → 生长条件 → 湿度高于一定水平(世界事实)
- 犯罪集团 → 控制 → 城区(世界事实)
数据和规则使用同一种格式,存储在同一个图中。三元组描述一切:对象、属性、状态、关系、行动、技术、魔法。这是与传统方法的根本区别 - 传统方法中数据和逻辑是分离的。
世界建立在大量事实之上:动物、技术、物品、建筑、历史事件 - 从一般原则到具体细节。
解释器
解释器处理三元组并从事实中推导结论:
- 苹果 → 属于 → 水果
- 人类 → 可以吃 → 水果
- 推论:人类可以吃苹果
推论通过事实匹配来构建。链条可以很长。下面是一个更复杂的例子:
- 哥布林 → 属于 → 生物
- 生物 → 拥有 → 生命值
- 推论:哥布林拥有生命值
- 攻击 → 造成 → 伤害
- 伤害 → 降低 → 生命值
- 推论:攻击可以伤害哥布林
添加一种带伤害谓词的毒素 - 它会自动对所有拥有生命值的实体生效。
解释器处理的是形式化的查询,而非自然语言。
知识图谱
世界中的对象和属性需要以灵活的方式描述,而非硬编码。
基础是实体:角色、物品、动物、组织、船只、植物。每个实体通过谓词关联事实。
每个谓词表达一种关联或一个属性:
- "属于"(分类:哥布林 → 生物)
- "拥有"(持有:生物拥有生命值)
- "伤害"(影响:攻击造成6点)
- "消耗"(花费:攻击消耗3点法力)
- "吸收"(防御:盾牌格挡5点)
- "关系"(联系:哥布林憎恨人类)
攻击拥有伤害谓词 = 6。盾牌拥有吸收谓词 = 5。引擎推算:6 - 5 = 1点穿透到生命值。同一套机制适用于任何伤害来源和任何防御 - 剑、毒、火焰、法术。
属性构成一个网络,其中每个节点是一条事实。规则和交互以数据形式存在,而非写入代码。
为保证性能,系统采用缓存、索引和自适应细节层级(LOD)。
规则即模式
数据和逻辑还不构成游戏。游戏玩法需要规则层。在传统开发中,规则就是代码:每个机制由程序员编写。在Nexus中,规则与数据使用相同的三元组来描述。
基础是通用模式,适用于所有类型。影响:剑对生命值造成伤害,锈蚀损耗耐久度,通胀削弱购买力。消耗:攻击消耗法力,建造消耗木材,旅行消耗燃料。吸收:盾牌格挡伤害,反驳抵消指控,保险弥补损失。
设计者描述的是"发生了什么",而非"如何实现"。"攻击造成6点伤害" - 一条三元组。引擎自行判断:伤害经过吸收,剩余部分扣减生命值。不需要为每个行为单独编写公式 - 它遵循模式自动生成。
模式可以自由组合。卡牌游戏使用影响和吸收。策略游戏使用消耗和积累。RPG则将所有模式融合在一起。
一款新游戏就是新的实体加上新的模式组合。
智能体
实体可以被定义为智能体 - 拥有自己的状态和行为规则。这是一个可选属性。卡牌游戏中的敌人自己选择行动。策略游戏中的野蛮人在条件允许时发起攻击。RPG中的商人在城市间往来。智能体:
- 在自身知识范围内感知世界
- 评估可用的行动
- 根据目标和世界规则做出决策
智能体与其他所有内容一样用三元组描述。铁匠会打铁(事实),需要矿石(事实),矿石在矿山(事实)。解释器从这些事实推导出行动:去矿山,开采矿石。矿山被水淹了 - 铁匠无法获得矿石 - 寻找商人 - 购买。行为从事实链中自然涌现。
无损逻辑的尺度伸缩
在深度模拟中,世界可能包含大量进程:从动物迁徙、城市发展到恒星系统的动态变化。全部计算既不可能也没必要 - 玩家始终以主观和有限的方式感知世界。
世界以六角格地图的形式组织。每个六角格存储其所在尺度的属性:行星级别是气候和资源,区域级别是城市和道路。点击一个六角格会展开下一层级 - 内部是一张更精细的地图。算法在所有层级上统一 - 从恒星系统到单个建筑。
时间与空间
对于较长的时间段,系统可以使用统计模型替代逐步计算。可以在时间中跳转而不模拟每一个瞬间。例如,一千年间森林可能生长或消失,河流可能改道,聚落可能扩张或被废弃。趋势和关联得以保留。
空间的缩放决定了实体和进程的层级。大尺度下是气候、迁徙、政治。局部尺度下是个体实体及其属性。因果逻辑在所有层级上保持一致。
抽象层可以容纳任何尺度的世界:村庄、星球、星系。细节在变得重要时才出现。其余部分以简化形式描述,但保留关联性。
玩家可以深入探索世界的结构,研究实体并沿着属性导航 - 类似在百科系统中浏览。
世界的实体化
世界随着探索逐步构建。玩家未到达的区域以数据和规则的形式存在。对象在交互发生时才出现,而非预先生成。
在观察范围之外,事件由概率决定而非完整模拟。世界看起来是连贯的,虽然细节是按需生成的。
与某个区域交互后,其状态会被保存,不再重新计算。
在较长的时间跨度上,统计趋势发挥作用。一千年后,系统根据概率判断:哪些物种存活,气候如何变化,哪里出现聚落。
联网游戏
联网游戏基于相同的原理运作。服务器存储数据、规则以及玩家已发现的内容。
如果多个玩家处于同一区域,服务器汇总共同状态并在他们之间同步。
游戏区域之外的世界保持潜在状态 - 只有规则和趋势,没有细节。
基础网络架构已经运行:每个玩家获得一个独立会话,其他人可以通过邀请码加入。操作实时同步。
架构即语言
数据、规则、界面和智能体行为 - 统一格式。实体之间互不感知,关联通过共同谓词自动产生。
实际运作是怎样的?森林是一个实体,拥有若干事实:含有木材、可作掩护、可燃。斧头拥有"砍伐"谓词。"砍伐"作用于木材。火作用于可燃物。干旱提高可燃性。每条事实只有一行。森林不知道斧头的存在,斧头也不知道森林的存在。关联通过共同谓词自动产生。添加一把带"砍伐"谓词的激光切割器 - 它对森林生效。添加一次带"火焰"谓词的行星轰炸 - 森林燃烧。
如果一个游戏情境可以用语言描述 - 它就能在Nexus中运行。
