Tests des ensembles de règles

Utilise cette page pour régler la façon dont ton ensemble de règles lance un test ou une sauvegarde : les cinq types de résolution, les bandes de résultat, les tests qui se lancent à leur façon et les dépenses ou les charmes qui modifient un jet. Elle s'adresse aux auteurs d'ensembles de règles. Avant de commencer, lis Écrire des ensembles de règles Game Mode.

Types de résolution

resolution.kind choisit le jet. Tous les types lisent la même fiche et partagent trois clés ; les parties du fichier après resolution ne changent donc pas quand tu passes de l'un à l'autre :

Le sens du nombre dépend du type : dice-sum l'ajoute au jet ; dice-pool et dice-highest lancent ce nombre de dés. symbol-pool garde l'attribut et l'entraînement séparés pour constituer et améliorer des dés narratifs.

dice-sum : additionner les dés

"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 : lancer les dés et les compter

Le nombre de la fiche est la taille de la réserve, pas un bonus ajouté. Une valeur de 3 et un métier valant 2 lancent cinq dés. C'est tout le principe : aucun nouveau vocabulaire de fiche ni nouvel éditeur ; un système aux valeurs exprimées en poignées de dés utilise les mêmes abilities, skills et proficiencyTiers que les autres.

"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 }
  ]
}

Les faces de cancel et botch doivent être inférieures à la cible minimale, et toutes les faces nommées par ces règles doivent exister sur le dé. Une règle impossible à déclencher est refusée à l'importation plutôt que découverte en jeu.

Un ensemble en package utilisant des réserves relève de Capability API 1.24 ; un min sur explode ou double, pool.abilityPlusAbility et botch.rule relèvent de 1.37 ; reroll, de 1.38 ; target.from, stances et exact, de 1.137. Un ensemble communautaire importé est validé par le moteur qui le lit et n'a donc besoin de rien d'autre.

Ce que le Game Master peut écrire sur un test de réserve

[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"]

Tout respecte ton fichier : une valeur hors limites est ramenée à l'extrémité la plus proche et un attribut absent est ignoré sans refuser le test. Le registre montre ce qui a servi : la difficulté et la cible sous forme de nombres, les dés supplémentaires après limitation, with= seulement si l'attribut a été remplacé ou ajouté, une face seulement si le test l'a déplacée, reroll= seulement si la relance nommée est celle qui a été lancée et a relancé quelque chose, et complication="true" quand une maladresse halfOrMore a mal tourné à côté d'un résultat. Le moteur lance toujours les dés. Il remplace tout résultat de réserve écrit par le modèle, ignore mode="advantage" puisque le type n'a pas d'avantage et n'utilise pas un dé lancé par le joueur avant le tour.

dice-highest : lancer les dés et lire le plus haut

Blades in the Dark et Trophy Dark lancent une poignée de d6 et ne lisent que le plus haut. 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" }
    ]
  }
}

Le registre garde la forme d'une somme (resolution="sum", modifier="0", les dés gardés comme total) et ajoute highest="1", avec zeroDice="true" et dark="N" quand ils s'appliquent ; les dés sombres sont les derniers de rolls. Un résultat lu sur les seuls dés clairs enregistre aussi darkOutcome="light", pour que la carte ne mette en évidence que les dés clairs gardés, y compris après un rechargement. Un ensemble de ce type n'a pas de combat propre : combat est donc refusé à côté.

roll-against : obtenir au plus (ou au moins) le nombre de la fiche

Call of Cthulhu, GURPS et les pourcentages du voleur des anciennes éditions se lancent contre un nombre de la fiche au lieu de s'ajouter aux dés. 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 : lancer des dés narratifs et lire les symboles

Genesys constitue une réserve à partir d'une caractéristique et d'un rang de compétence, puis ajoute des dés opposés. Les faces portent réussite, avantage, triomphe, échec, menace et désespoir au lieu de nombres. 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 }]
}

Ce qui reste hors périmètre, et pourquoi

Ces mécaniques ont encore besoin de leur propre type de résolution :

Les deux éléments autrefois exclus sont maintenant modélisés ; la section sur les dépenses pour modifier un jet, ci-dessous, explique comment. Une règle du système lui-même, "spend a point for a success" ou "spend a point to throw the failures again", est resolution.spend. Une relance que le système accorde gratuitement quand la situation l'exige est resolution.reroll, ci-dessus. Celle qui appartient à un élément choisi par le personnage est mechanics.check sur une entrée de catalogue, payée avec le coût de cette entrée.

Bandes de résultat : plus que réussite ou échec

Beaucoup de systèmes lisent un test comme l'un de plusieurs résultats plutôt qu'une simple réussite ou un simple échec : les quatre degrés de réussite de Pathfinder, un "de justesse" qui réussit à un prix, les réussites majeures et extrêmes de Call of Cthulhu, la "réussite avec style" de Fate. resolution.outcomes nomme ces bandes, et le moteur indique sur chaque test dans laquelle il est tombé (Capability API 1.135). Cela fonctionne avec tous les types de résolution.

"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 }
  ]
}

La bande décide du résultat : la réussite et les deux critiques en découlent, jamais de la simple comparaison. Quand les naturals d'un ensemble additionné font d'une face une réussite ou un échec automatique, cette face tombe dans la bande de ce critique, ou sinon dans la meilleure ou la pire bande, et reste un critique. La maladresse d'une réserve fait de même en bas, et une réserve avec des bandes laisse exceptional de côté, car les bandes disent déjà ce qu'est une réussite critique.

Une réserve lue avec by: "total" est la façon dont un système à difficulté fixe exprime ses résultats : le "1 success: you barely manage it, 2: you do it well, 3: critical success" de Lasers & Feelings, ce sont trois bandes à 3, 2 et 1 réussites et un échec en dessous.

Le registre nomme la bande avec outcome="Critical success", la carte des dés l'affiche à la place du simple mot, et le Game Master apprend les bandes et leur text, avec la consigne de raconter la bande. Un ensemble en package qui déclare des bandes nécessite Capability API 1.135.

Les tests qui se lancent à leur façon

Certains jeux lancent la plupart des tests d'une façon et quelques-uns d'une autre : un jeu à l'ancienne lance un d20 sous une valeur d'attribut, mais les compétences d'un voleur sur un d100 et Open Doors sur un d6. resolution.overrides nomme ces tests et les clés de résolution avec lesquelles ils se lancent à la place. 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 } }
]

Dépenser pour modifier un jet

Certains systèmes permettent de payer un jet à venir : un point de volonté pour une réussite automatique. resolution.spend l'exprime comme règle permanente du système, plutôt que comme achat propre à un personnage :

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

Cela se place sur le test lui-même. Le GM écrit [skill_check: skill="Nerve" dc="2" spend="resolve:1"], pas une commande [sheet:] séparée : les dés sont lancés avant d'appliquer les commandes de fiche et il ne resterait rien à modifier. Une seule résolution lance les dés et paie ce qui les a modifiés.

Un charme qui modifie un jet

resolution.spend est une règle du système. Une entrée CHOISIE par le personnage peut aussi modifier un test, avec mechanics.check sur son entrée de catalogue :

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

Le coût est le cost de l'entrée, payé par le même mécanisme que tout autre usage : la réserve et une utilisation de chaque compteur écrit par cette entrée. perCostStep indique qu'elle CHANGE D'ÉCHELLE : si elle le déclare, elle est achetée autant de fois que son prix a été payé ; sinon, elle est achetée une seule fois, quelle que soit la somme offerte.

Le GM la nomme sur le test : [skill_check: skill="Brawl" dc="3" use="Potence" spend="blood:3"]. Pas dans une commande de fiche séparée, pour la même raison : les dés sont lancés avant la mise à jour des comptes.

Tout ou rien. Si la réserve ne suffit pas, aucun achat ni prélèvement n'a lieu ; le jet reste celui qu'il aurait été. Des points ne correspondant pas à un nombre entier d'achats n'achètent rien non plus. Une demande au-delà de perCheck est plafonnée plutôt que refusée, et seul ce plafond est payé. Le moteur calcule tout cela ; le GM nomme la dépense annoncée par le joueur sans toucher aux dés. Le registre indique ce qui a été payé, l'entrée appliquée, les réussites non lancées et le nombre de dés relancés. Un charme non choisi, ou dont le moteur ne peut pas lire le catalogue, ne fait rien au lieu d'être appliqué sur confiance.