跳到主要内容

剧情、变量与触发器

plots.json 描述可选故事结构。剧情由前提、压力策略和多个节拍组成。节拍是可被引入或调整的发展机会,不是强迫 GM 达成结果的命令。应描述忽略问题会怎样、哪些迹象可提前出现,以及什么结果会关闭或改变剧情。

节奏系统只在故事缺少方向时选择少量推动,尊重冷却和明确拒绝,也不会同时推进所有剧情。

variables.json 声明供条件与工具使用的类型化值,实体或世界文件可提供初值。关系、知识、位置和物品状态已有专门模型,不应重复编码成变量。

triggers.json 表示条件满足时必须确定发生的反应,包含条件、效果、重复规则和可选时间。触发器修改会话状态,不修改世界文件。

提示和节拍被说出的时刻,可能比触发器触发晚一两回合(要等它的听众下一次行动,或主持人下一次查看)。两个可选的部分可以让它说出的是那一刻的实情,而不是触发时的情形:

  • while 条件的写法与 when 相同,并且在提示或节拍送达时仍须成立。否则,该提示或节拍会被撤回,对话设置会记录原因。在提示中,"@self" 指接收提示的角色。例如,{"type": "place", "character": "@self", "location": "cellar"} 可以避免把提示送给已经离开的人。
  • text 可以使用 {character:键}、{place:键}、{item:键}、{where:角色}、{holder:物品}、{value:变量}、{value:变量:对象} 和 {time}。后四种写法分别填入角色所在的位置、物品的持有者或位置、用文字表述的数值,以及当前时间。这些内容会在提示或节拍送达时按故事状态解析。引用的对象已经不存在时,该提示或节拍会被撤回,不会凭空猜测。
{ "type": "cue", "characters": ["clara-whitlock", "arthur-moore"],
"while": { "type": "place", "character": "@self", "location": "bar" },
"text": "你闻到煤气味;{holder:lantern} 手里还握着唯一的光。" }

time 条件可使用绝对的 from 或 to、每天重复的 window、days 中的星期,以及 on 中的共用日历规则。on 支持月份、日期、日期区间、季节、自定义节日和排除项,详见日历与日期规则。同时提供 days 与 on 时,两者都必须满足。

让世界作者造人的节拍​

节拍可以让世界作者创建人物,而不是向游戏主持人发送文字。先设置 "dispatch": "author",再填写 need 和 text。need 说明调用作者的原因:arrival 表示有人进入场景,introduction 表示把附近已有的人带入故事,也可以使用 scene_change、object、variable 或 trigger。text 描述新人物应当是什么样。

如果要由代码从列表中选择类型,可以添加 draw 列表,并在 text 中用 [draw] 标出选项的位置。世界作者会在触发器生效的回合结束后运行,因此新人物从下一回合开始进入场景。游戏主持人不会被要求创建这个人物。一个分派给世界作者的触发器只能包含这种节拍。旧版本把一句话写在 need 中的文件仍可读取:这句话会移到 text 开头,need 则改为 arrival。

{ "key": "follower", "name": "来了一个追随者",
"when": { "type": "variable", "variable": "command_recruit", "op": "eq", "value": true }, "repeat": true,
"effects": [{ "type": "beat", "dispatch": "author", "need": "arrival", "text": "新来的人:[draw]", "draw": ["迷路的旅人", "对手派来的间谍"] }] }

斜杠指令​

commands.json 定义玩家可以在斜杠后输入的词,例如 /recruit。每条指令包含由字母、数字或下划线组成的 word,以及使用指令时显示给游戏主持人的 description。ooc 和 roll 由游戏保留。不是纯小写 ASCII 的词还需要一个 key,用于命名对应的标记变量。

{ "commands": [
{ "word": "recruit", "description": "Bring a new follower into the cult." },
{ "word": "招募", "key": "recruit_zh", "description": "同上,用中文写。" }
] }

每个指令都会声明一个隐藏的标记变量 command_<key>,它只在输入指令的那个回合为真,下一回合开始时恢复为假,所以等待它的触发器每次使用指令都会触发。触发器随后可以请世界作者造一个人物、设置变量,或给游戏主持人一个节拍。与 variables.json 中同名的变量会被拒绝。