跳到主要内容

骰子检定

世界可以包含 dice.json,用来说明不确定的尝试如何裁定。骰子由代码掷出,从来不是由模型来掷;一次掷骰意味着什么由世界决定:主持人会被告知掷出的结果落在哪个区段,并据此叙述,因此不会有任何数字被编造,也不会被随意解读。本项目不附带任何骰子规则,因为各种桌面游戏体系差别太大;由你写出你的世界所用的规则。没有 dice.json 的世界没有检定,但它的主持人仍然可以为没有检定的事掷普通骰子。

{
"checks": [
{
"key": "skill",
"name": "技能检定",
"use": "角色尝试一件困难、失败有代价的事:撬锁、攀爬、说服一个怀有敌意的人。",
"dice": "1d20",
"compare": "over",
"bands": [
{"max": -10, "label": "大失败", "result": "failed", "critical": true},
{"min": -9, "max": -1, "label": "失败", "result": "failed"},
{"min": 0, "max": 4, "label": "勉强成功", "result": "partial"},
{"min": 5, "max": 9, "label": "成功", "result": "succeeded"},
{"min": 10, "label": "大成功", "result": "succeeded", "critical": true}
]
}
]
}

编辑器的骰子页以表单的形式编辑这个文件。

检定​

字段含义
key小写字母、数字、- 和 _,以字母开头。主持人用它来指明检定。
name检定的名称。
use主持人何时掷它,用你自己的话写。主持人靠它在多个检定之间选择,所以要写明它适用于哪一类尝试。
dice骰子记法(见下)。
readingtotal(默认)读取骰子的总和。successes 统计显示至少为 hit 的骰子数,此时必须给出 hit。
compare把数值与什么比较。absolute(默认)直接读取总和。over 读取总和比主持人给出的目标(要达到或超过的难度)高出多少。under 读取总和比目标(要掷低于的技能值)低多少。
modifier行动角色某个数值变量的 key,会加到总和上。此时主持人需要指明角色。
bands至少一个,至多 20 个。每个可有 min 和 max(缺少的一端无限延伸)、一个 label、取值为 succeeded、partial 或 failed 的 result,以及可选的 critical。第一个包含该数值的区段生效。

当一个检定可能给出没有任何区段包含的数值时,故事开始时世界会被拒绝,并指出那个数值。对照目标读取的检定无法这样预先检查,所以同样不要留下空隙:掷到空隙里的数值会以报错失败。一个世界至多有 40 个检定。

骰子记法​

NdM 掷 N 个 M 面骰;d% 即 d100。各项相加或相减:2d6+1、1d8+1d4-1。加上 kh 或 kl 保留最高或最低的若干个(4d6kh3、2d20kl1),加上 dh 或 dl 则舍弃它们。一次掷骰至多 100 个骰子、每个至多 1000 面、至多八项。

主持人如何使用​

只有当一次尝试成败皆有可能、且事关重大时,主持人才会掷检定,并且是在判断这次尝试可行之后、决定发生什么之前。工具返回区段,主持人随后给该角色的结果必须带着这次掷骰的结果:引用了某次掷骰却给出不同结果的 outcome 会被拒绝,一次掷骰只对应一个 outcome,被掷过骰的角色也不能得到无视掷骰的 outcome。关键区段不改变结果,只是告诉主持人这个结果值得写得更多。每次掷骰还会写进记忆记录员所记录的那一轮,使故事的记忆与骰子一致。

玩家也可以掷骰:以 /roll 2d6+1 撬锁 开头的消息会用系统的随机源掷出这些骰子,并把结果作为事实告诉主持人。玩家能否看到骰子取决于对话设置 骰子:叙述下方一张可展开的折叠卡片,或者隐藏。

掷骰记录保存在存档数据库中;世界所定义的检定会在故事开始时复制进故事,与它的日历相同。