ルールセットの判定

このページでは、ルールセットで判定やセーヴのダイスを振る方法を決めます。五つの判定方式、結果帯、独自の方法で振る判定、ロールを変える消費やチャームを扱います。ルールセットの作者向けのページです。始める前に、Game Modeのルールセットを作成するを読んでください。

判定方式

resolution.kindは判定の振り方を選びます。どの方式も同じキャラクターシートを読み、3つのキーを共有するので、切り替えても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なら5個振ります。仕組みはそれだけです。新しいシート用語もエディターもなく、評価値がダイスの個数を表すシステムも、ほかと同じ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=は指定した振り直しが実際に使われて何かを振り直した場合だけ記録し、complication="true"はhalfOrMoreの大失敗で結果に伴う問題が生じた場合に記録します。Engineは必ず自分でダイスを振ります。モデルが書いたプール結果は置き換え、この方式に有利はないためmode="advantage"を無視し、プレイヤーがターン前に振ったダイスも使いません。

dice-highest: ダイスを振って最大の出目を読む

Blades in the DarkとTrophy Darkは、数個のd6を振って最大の1個だけを読みます。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 }]
}

対象外の仕組みとその理由

次の仕組みには、今も独自の判定方式が必要です。

この方式が以前扱えなかった残り2つは、現在実装されています。下の「消費でロールを変える」で説明します。「1ポイントで1成功を得る」や「1ポイントで失敗したダイスを振り直す」といったシステム自体の規則はresolution.spendです。状況に応じてシステムが無料で認める振り直しは、上記のresolution.rerollです。キャラクターが取得したものに属する振り直しはカタログ項目のmechanics.checkで、その項目自身のコストを支払います。

結果帯: 成功か失敗か以上のもの

多くのシステムは、判定を単なる成否ではなく、いくつかの結果の1つとして読みます。Pathfinderの4段階の成功度、代償を伴って成功する「ぎりぎり」、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 }
  ]
}

結果を決めるのは結果帯です。成功と2種類のクリティカルは結果帯から決まり、単純な比較からは決まりません。合計方式のルールセットのnaturalsがある面を自動成功や自動失敗にする場合、その面はそのクリティカルの結果帯に入り、なければ最良または最悪の結果帯に入って、クリティカルのままです。プールのクリティカル失敗も下端で同じように働きます。結果帯を持つプールはexceptionalを使いません。クリティカル成功が何かは結果帯がすでに示しているためです。

難易度が固定のシステムは、by: "total"で読むプールで結果を表せます。Lasers & Feelingsの「1成功: かろうじて成功、2: うまくいく、3: クリティカル成功」は、3、2、1成功の3つの結果帯と、その下の失敗です。

記録はoutcome="Critical success"で結果帯を示し、ダイスカードは単なる成否の語の代わりにそれを表示します。GMは結果帯とその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 } }
]

消費でロールを変える

意志を1ポイント使って自動成功を得るなど、これから振るロールに支払えるシステムがあります。resolution.spendはキャラクターが購入した特性ではなく、システムの常設規則としてこれを宣言します。

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

判定自体に指定します。 GMは別の[sheet:]コマンドではなく、[skill_check: skill="Nerve" dc="2" spend="resolve:1"]と書きます。シートコマンドの適用前にダイスを振るため、別コマンドでは変更に間に合いません。1つの解決処理で、ロールとそれを変える支払いを行います。

ロールを変えるチャーム

resolution.spendはシステムの規則です。キャラクターが取得した項目も、カタログ項目のmechanics.checkで判定を変えられます。

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

支払うのは項目自身のcostです。 ほかの項目の使用と同じ仕組みで、プールと、その項目が書いた全カウンターの使用回数1回分を支払います。perCostStepは効果が拡大することを指定します。宣言した項目は支払った価格の回数分購入し、宣言しない項目は提示額にかかわらず1回だけ購入します。

GMは判定で項目名を指定します。 [skill_check: skill="Brawl" dc="3" use="Potence" spend="blood:3"]です。上と同じく、帳簿処理より先にダイスを振るため、別のシートコマンドにはしません。

すべて支払うか、何も行わないかです。 プールが不足すれば購入は起こらず何も引かず、元どおりのロールになります。購入回数の整数倍でないポイントでも何も買えません。perCheckを超える要求は拒否せず上限へ制限し、その分だけ支払います。すべてEngineが計算し、GMはプレイヤーが宣言した消費を指定するだけでダイスを操作しません。記録には支払った額、適用項目、振らずに得た成功数、振り直したダイス数が残ります。未取得のチャームや、Engineがカタログを読めないチャームは、信用して適用せず何もしません。