Skip to content

变量

变量是你世界的游戏状态。数字、文本、标记、复杂对象 —— 任何需要跨回合持久存在的数据。AI 读取它们,通过指令更新它们,你的自动化规则也可以对变化做出反应。

在编辑器中,打开变量部分。每个变量都有名称、类型、默认值和 AI 指令。

词条那一章提到的恐怖世界用了 5 个变量:生命值(数字,0-5)、体力(数字,0-8)、天数(数字,1-14)、游戏阶段(字符串,「Night」或「Day」)、以及武装状态(布尔值)。这就足以运行一个完整的 14 夜生存游戏了。

每回合,AI 读取当前值,在回复中写下 [health: -1] 这样的指令,引擎提取它们并更新状态。玩家只看到叙事文本。

变量类型

数字(Number)

追踪数量:生命值、金币、好感度、天数、饥饿度。

[health: -15]          → 减少 15
[gold: +50]            → 增加 50
[day-count: set 3]     → 设为 3
[damage: *2]           → 乘以 2

你可以设置最小/最大边界,引擎会自动进行范围限制。

字符串(String)

追踪文本状态:位置、心情、当前任务、时间段。

[location: set "dark forest"]
[mood: set "suspicious"]
[time-period: set "night"]

布尔值(Boolean)

追踪真/假标记:是否拥有钥匙、是否见过某个 NPC、是否触发了某个事件。

[has-key: toggle]      → 翻转 true ↔ false
[met-elder: set true]

JSON

追踪复杂结构:背包数组、NPC 关系对象、任务日志、地图数据。

[inventory: push {"name": "Iron Sword", "damage": 10}]
[inventory: delete 0]
[npcs.aria.affinity: +5]
[npcs.aria.mood: set "happy"]
[quest-log: merge {"main": "completed"}]

JSON 变量支持点路径更新 —— 你可以修改嵌套字段而不需要重写整个对象。

AI 指令 —— 最重要的部分

AI 指令是用自然语言写的说明,教 AI 何时以及如何修改一个变量。没有它们,AI 不会可靠地使用你的变量。

(编辑器中这个字段的标签是「行为规则」。我们在这里叫它 AI 指令,以免和编辑器中叫做「行为」的自动化系统混淆。)

不好的 AI 指令

追踪玩家的生命值。

AI 不知道「追踪」是什么意思。什么时候改?改多少?零意味着什么?

好的 AI 指令

0 = 死亡 —— 描写一个死亡场景并结束游戏。1-20 = 危急(流血、呼吸困难)。20-50 = 受伤(疼痛影响行动)。50-80 = 擦伤(轻微不适)。80-100 = 健康。

受到物理伤害时按严重程度递减。一拳:-5 到 -10。一刀:-15 到 -25。从高处坠落:-20 到 -40。休息时缓慢恢复(每次休息场景 +5)或治疗时恢复(+10 到 +30)。单回合变化不得超过 30。

这就很具体了。AI 知道了刻度、阈值、触发条件和限制。

有效的写法模式

数值区间 —— 定义每个区间在叙事中的含义:

0 = 游戏结束。1-25 = 绝望。26-50 = 挣扎。51-75 = 尚可。76-100 = 自信。

触发时机 —— 什么时候应该变化:

玩家帮助村民、送礼或保护他们时增加。偷窃、威胁或违背承诺时减少。

变化限制 —— 防止剧烈波动:

单回合变化不超过 10。最小 0,最大 100。

变量之间的关系 —— 它们如何互相影响:

当饥饿度降到 0 时,每回合生命值减少 5。

TIP

通常两到四句话就够了。如果你的 AI 指令比一小段还长,说明该精简了。AI 很聪明 —— 告诉它概念和边界就行,不需要写 500 字的小作文。

建议

  • 使用 kebab-case 命名player-health,而不是 playerHealthPlayer Health
  • 复杂数据用 JSON:如果你需要不止一个值(带属性的背包物品、有多个字段的 NPC 数据),用 JSON
  • 不要过度追踪:不是所有东西都需要变量。如果 AI 能在叙事中自然地处理某件事而不需要追踪它,就省掉那个变量
  • 测试你的 AI 指令:玩你的世界,看 AI 是否在你期望的时候更新变量。如果没有,说明你的指令需要更具体