规则集检定

用本页设定规则集如何掷出检定或豁免:五种结算类型、结果档、以自己的方式掷骰的检定,以及能改变掷骰的资源消费或护符。本页面向规则集作者。开始之前,先读编写 Game Mode 规则集。

结算类型

resolution.kind 选择检定如何掷骰。每种类型都读取相同人物卡,共享三个键,因此切换时 resolution 以下的文件部分不用改变:

结果数字的含义由类型决定:dice-sum 把它加到掷骰上,dice-pool 和 dice-highest 掷出相应数量的骰子。symbol-pool 把属性和训练分开,用来组建并升级叙事骰。

dice-sum:将骰子求和

"resolution": {
  "kind": "dice-sum",
  "dice": { "count": 2, "sides": 6 },
  "abilityModifier": { "op": "identity" },
  "proficiencyTiers": [
    { "id": "untrained", "label": "Untrained" },
    { "id": "trained", "label": "Trained", "flat": 1 }
  ],
  "advantage": false,
  "difficultyLadder": [
    { "label": "Easy", "dc": 6 },
    { "label": "Hard", "dc": 10 }
  ]
}

dice-pool:掷骰并计数

人物卡数字代表骰池大小,而不是额外加值。评级 3 加专业技能 2 就掷五颗骰子。原理仅此而已:无需新人物卡词汇或编辑器,评级代表一把骰子的系统同样使用 abilities、skills 和 proficiencyTiers 编写。

"resolution": {
  "kind": "dice-pool",
  "die": { "sides": 10 },
  "abilityModifier": { "op": "identity" },
  "proficiencyTiers": [
    { "id": "rating_0", "label": "Untried" },
    { "id": "rating_1", "label": "Shown once", "flat": 1 }
  ],
  "pool": { "min": 1, "max": 15, "abilityPlusAbility": true },
  "target": { "default": 7, "min": 5, "max": 9 },
  "explode": { "from": 10, "min": 8 },
  "cancel": { "upTo": 1 },
  "botch": { "upTo": 1 },
  "exceptional": { "successes": 5 },
  "situationalDice": { "min": -3, "max": 3 },
  "reroll": [{ "id": "careful", "upTo": 6, "mode": "once" }],
  "difficultyLadder": [
    { "label": "Plain work", "successes": 1, "target": 6 },
    { "label": "Grim", "successes": 3, "target": 8 }
  ]
}

cancel 和 botch 的点数必须低于最低目标,所有规则指定的点数都必须是骰子上有的点数。永远无法触发的规则会在导入时被拒绝,而不是等游玩时才发现。

打包形式的骰池规则集要求 Capability API 1.24;explode 或 double 上的 min、pool.abilityPlusAbility 和 botch.rule 要求 1.37;reroll 要求 1.38;target.from、stances 和 exact 要求 1.137。导入的社区规则集由读取它的 Engine 验证,无须另行声明。

Game Master 可以在骰池检定中写什么

[skill_check: skill="Ward" dc="2" who="Bram the Quiet" threshold="8" bonus="-2" with="Sinew"]
[skill_check: skill="Ward" difficulty="Grim" explode="9"]
[skill_check: skill="Nerve" dc="1" with="Warmth"]
[skill_check: skill="Ward" dc="2" reroll="careful"]

所有值都受文件声明约束:越界值会拉回最近边界,规则集未提供的属性则忽略,而不拒绝检定。保存记录随后显示这次掷骰所用的值:以数字表示的难度和阈值、限制后的奖励骰;只有实际替换或追加属性时才保留 with=,只有检定实际调整过点数时才显示该点数,只有它点名的重掷正是实际进行的那一次、且确实重掷了骰子时才保留 reroll=;halfOrMore 大失败在结果之外出了岔子时会记下 complication="true"。Engine 始终自行掷骰,替换模型填写的骰池结果;该类型没有优势,因此忽略 mode="advantage",玩家在回合前自行掷出的骰子也不适用。

dice-highest:掷骰并读取最高的一颗

Blades in the Dark 和 Trophy Dark 掷一把 d6,只读取其中最高的一颗。Capability API 1.138。

"resolution": {
  "kind": "dice-highest",
  "die": { "sides": 6 },
  "abilityModifier": { "op": "identity" },
  "proficiencyTiers": [{ "id": "rating_0", "label": "0" }, { "id": "rating_1", "label": "1", "flat": 1 }],
  "pool": { "min": 0, "max": 6 },
  "zeroDice": "lowest-of-two",
  "critical": { "count": 2 },
  "situationalDice": { "min": -1, "max": 2 },
  "difficultyLadder": [{ "label": "Partial", "dc": 4 }, { "label": "Full", "dc": 6 }],
  "outcomes": {
    "by": "total",
    "tiers": [
      { "id": "critical", "label": "Critical", "on": "critical-success", "success": true },
      { "id": "full", "label": "Full success", "atLeast": 6, "success": true },
      { "id": "partial", "label": "Partial success", "atLeast": 4, "success": true, "text": "You do it, with a consequence." },
      { "id": "bad", "label": "Bad outcome" }
    ]
  }
}

记录保留求和的形式(resolution="sum"、modifier="0",保留的骰子作为总和),并加上 highest="1",适用时还有 zeroDice="true" 和 dark="N";暗骰是 rolls 中的最后几颗。只读明骰的结果还会记录 darkOutcome="light",因此骰子卡只高亮保留的明骰,重新加载后也是如此。这类规则集没有自己的战斗,因此与它并列的 combat 会被拒绝。

roll-against:掷出不超过(或不低于)人物卡数值的结果

Call of Cthulhu、GURPS 以及老派盗贼的百分比技能,都是对照人物卡上的数字掷骰,而不是把数字加到骰子上。Capability API 1.139。

"resolution": {
  "kind": "roll-against",
  "dice": { "count": 1, "sides": 100 },
  "abilityModifier": { "op": "identity" },
  "proficiencyTiers": [{ "id": "base", "label": "Base" }],
  "against": "at-most",
  "criticalSuccess": [{ "from": 1, "to": 1 }],
  "criticalFailure": [{ "from": 100, "to": 100 }, { "from": 96, "whenTarget": { "below": 50 } }],
  "tens": { "max": 2 },
  "difficultyLadder": [
    { "label": "Regular", "dc": 0 },
    { "label": "Hard", "dc": 0, "divide": 2 },
    { "label": "Extreme", "dc": 0, "divide": 5 }
  ],
  "outcomes": {
    "by": "fraction",
    "tiers": [
      { "id": "critical", "label": "Critical", "on": "critical-success", "success": true },
      { "id": "extreme", "label": "Extreme success", "atLeast": 5, "success": true },
      { "id": "hard", "label": "Hard success", "atLeast": 2, "success": true },
      { "id": "regular", "label": "Regular success", "atLeast": 1, "success": true },
      { "id": "fail", "label": "Failure" },
      { "id": "fumble", "label": "Fumble", "on": "critical-failure" }
    ]
  }
}

symbol-pool:掷叙事骰并读取符号

Genesys 先用一项特征值和一项技能等级组建骰池,再加入对立骰。骰面上带的是成功、优势、胜利、失败、威胁和绝望,而不是数字。Capability API 1.141。

"resolution": {
  "kind": "symbol-pool",
  "abilityModifier": { "op": "identity" },
  "proficiencyTiers": [
    { "id": "untrained", "label": "Untrained", "flat": 0 },
    { "id": "rank_one", "label": "Rank 1", "flat": 1 }
  ],
  "symbols": [
    { "id": "s", "label": "Success" },
    { "id": "f", "label": "Failure", "cancels": "s" },
    { "id": "a", "label": "Advantage" },
    { "id": "h", "label": "Threat", "cancels": "a" },
    { "id": "t", "label": "Triumph", "counts": "s" },
    { "id": "d", "label": "Despair", "counts": "f" }
  ],
  "dice": [
    { "id": "ability", "label": "Ability", "faces": [[], ["s"], ["s"], ["s", "s"], ["a"], ["a"], ["s", "a"], ["a", "a"]] },
    { "id": "proficiency", "label": "Proficiency", "faces": [[], ["s"], ["s"], ["s", "s"], ["s", "s"], ["a"], ["s", "a"], ["s", "a"], ["s", "a"], ["a", "a"], ["a", "a"], ["t"]] },
    { "id": "difficulty", "label": "Difficulty", "faces": [[], ["f"], ["f", "f"], ["h"], ["h"], ["h"], ["h", "h"], ["f", "h"]] },
    { "id": "challenge", "label": "Challenge", "faces": [[], ["f"], ["f"], ["f", "f"], ["f", "f"], ["h"], ["h"], ["f", "h"], ["f", "h"], ["h", "h"], ["h", "h"], ["d"]] },
    { "id": "boost", "label": "Boost", "faces": [[], [], ["s"], ["s", "a"], ["a", "a"], ["a"]] },
    { "id": "setback", "label": "Setback", "faces": [[], [], ["f"], ["f"], ["h"], ["h"]] }
  ],
  "success": { "symbol": "s", "needed": 1 },
  "pool": { "die": "ability", "upgrade": "proficiency", "max": 6 },
  "difficulty": { "die": "difficulty", "upgrade": "challenge", "max": 5 },
  "boost": { "die": "boost", "max": 3 },
  "setback": { "die": "setback", "max": 3 },
  "criticalSuccess": "t",
  "criticalFailure": "d",
  "difficultyLadder": [{ "label": "Easy", "dc": 1 }, { "label": "Average", "dc": 2 }, { "label": "Hard", "dc": 3 }]
}

范围之外的机制及原因

以下机制仍需要各自的结算类型:

该类型过去遗漏的另外两项现在都已建模,下方“消费资源改变掷骰”说明其方式。系统自身的规则,如“花一点换一次成功”或“花一点把失败的骰子再掷一次”,是 resolution.spend。情境需要时系统免费给予的重掷,是上文的 resolution.reroll。属于角色实际选取内容的重掷,则是目录条目的 mechanics.check,用该条目自己的成本购买。

结果档:不只是成功或失败

许多系统把一次检定读作若干结果之一,而不只是单纯的通过或失败:Pathfinder 的四级成功、付出代价才勉强成功的“险胜”、Call of Cthulhu 的困难成功和极难成功、Fate 的“漂亮成功”。resolution.outcomes 为这些结果档命名,Engine 会在每次检定中说明它落入了哪一档(Capability API 1.135)。它适用于所有结算类型。

"outcomes": {
  "by": "margin",
  "naturals": "shift",
  "tiers": [
    { "id": "critical_success", "label": "Critical success", "atLeast": 10, "success": true, "critical": true },
    { "id": "success", "label": "Success", "atLeast": 0, "success": true },
    { "id": "failure", "label": "Failure", "atLeast": -9 },
    { "id": "critical_failure", "label": "Critical failure", "critical": true }
  ]
}

结果档决定结果:成功以及大成功和大失败都来自结果档,从不来自单纯的比较。求和规则集的 naturals 让某个点数自动成功或失败时,该点数落入对应的大成功或大失败档,否则落入最好或最差的一档,并仍算作大成功或大失败。骰池的大失败规则(botch)在底部同理;带结果档的骰池省略 exceptional,因为结果档已经说明了什么是大成功。

以 by: "total" 读取的骰池,就是难度固定的系统表达结果的方式:Lasers & Feelings 的“1 次成功:勉强做到;2 次:做得很好;3 次:大成功”,就是 3、2、1 次成功的三个结果档,加上低于它们的一个失手档。

记录用 outcome="Critical success" 写出结果档,骰子卡用它代替简单的成败字样,Game Master 也会学到各结果档及其 text,并被要求按该档叙述。声明了结果档的打包规则集要求 Capability API 1.135。

以自己的方式掷骰的检定

有些游戏大多数检定按一种方式掷,少数按另一种:老派游戏用 d20 掷低于属性值,但盗贼技能用 d100,Open Doors 用 d6。resolution.overrides 列出这些检定,以及它们改用的结算键。Capability API 1.140。

"overrides": [
  { "id": "thief", "label": "Thief skills", "skills": ["open_locks", "pick_pockets"], "set": { "dice": { "count": 1, "sides": 100 } } },
  { "id": "x_in_6", "label": "X-in-6", "skills": ["open_doors", "listen"], "set": { "dice": { "count": 1, "sides": 6 } } },
  { "id": "favored", "label": "Favored", "skills": ["athletics"], "when": { "field": "favored_athletics" }, "set": { "cancel": null } }
]

消费资源改变掷骰

有些系统允许玩家为即将进行的掷骰支付资源,例如一点意志换一次自动成功。resolution.spend 将其声明为系统常设规则,而非角色另行购得的特性:

"spend": [{ "pool": "resolve", "amount": 1, "successes": 1, "perCheck": 2 }]

它写在检定本身。 Game Master 写 [skill_check: skill="Nerve" dc="2" spend="resolve:1"],而非独立 [sheet:] 命令,因为骰子在应用人物卡命令之前就已掷出,另写命令将无从改变。一次结算同时掷骰并支付改变骰子的费用。

改变掷骰的护符

resolution.spend 是系统规则。角色选取的条目也能通过目录项的 mechanics.check 改变检定:

"mechanics": {
  "kind": "utility",
  "cost": [{ "pool": "blood", "amount": 1 }],
  "perCostStep": { "flat": 1 },
  "check": { "reroll": { "upTo": 1, "mode": "once" }, "successes": 1 }
}

成本是条目自身的 cost,通过与使用其他内容完全相同的机制支付:资源池,以及该条目写入的每个计数器的一次使用量。perCostStep 表示条目会缩放;声明它时按实际支付了几份价格购买几份,未声明时无论提出多少都只买一次。

Game Master 在检定中点名: [skill_check: skill="Brawl" dc="3" use="Potence" spend="blood:3"]。同样不能另写人物卡命令,因为骰子在任何记账处理之前就已掷出。

要么全部成功,要么完全不买。 资源池不足时不购买也不扣除,仍进行原本的掷骰。不足以构成整数次购买的点数也买不到任何东西。请求超过 perCheck 时会限制到上限而非拒绝,且只支付上限对应金额。全部由 Engine 计算,Game Master 只写玩家声明要花的资源,不碰骰子。记录显示支付量、应用条目、未掷骰获得的成功数,以及重掷了多少骰子。角色未选取的护符,或 Engine 无法读取目录的护符,完全不生效,不会凭信任应用。