규칙 집합 판정

이 페이지에서는 규칙 집합이 판정이나 내성 굴림을 굴리는 방식을 정합니다. 다섯 가지 판정 종류, 결과 구간, 자체 방식으로 굴리는 판정, 굴림을 바꾸는 자원 소비나 부적을 다룹니다. 규칙 집합 작성자를 위한 페이지입니다. 시작하기 전에 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가 어떤 눈을 자동 성공이나 실패로 만들면, 그 눈은 해당 대성공이나 대실패에 지정된 구간, 없으면 가장 좋거나 가장 나쁜 구간에 들어가며 대성공이나 대실패로 남습니다. 풀의 대실패도 맨 아래에서 같은 일을 하며, 구간이 이미 대성공을 정하므로 구간이 있는 풀은 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는 별도의 [sheet:] 대신 [skill_check: skill="Nerve" dc="2" spend="resolve: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입니다. 다른 항목 사용과 같은 처리로 풀과 해당 항목이 만든 모든 카운터의 한 번 사용량을 지불합니다. perCostStep은 항목이 확장됨을 뜻합니다. 선언하면 가격을 지불한 횟수만큼 구매하며, 없으면 얼마를 제시했든 한 번만 구매합니다.

Game Master는 판정에 이름을 적습니다. [skill_check: skill="Brawl" dc="3" use="Potence" spend="blood:3"]입니다. 위와 같이 장부 처리가 실행되기 전에 주사위를 굴리므로 별도 시트 명령이 아닙니다.

전부 아니면 전무입니다. 풀이 부족하면 구매하지 않고 차감도 없으며 원래 굴림 그대로입니다. 정수 횟수의 구매에 맞지 않는 점수도 아무것도 사지 않습니다. perCheck 초과 요청은 거부하지 않고 상한으로 줄여 그만큼만 지불합니다. 이를 모두 Engine이 계산합니다. Game Master는 플레이어가 쓴다고 말한 것을 이름으로 지정하고 주사위는 건드리지 않습니다. 기록에는 지불액, 적용 항목, 굴리지 않고 얻은 성공 수와 다시 던진 주사위 수가 나옵니다. 선택하지 않은 부적이나 Engine이 카탈로그를 읽지 못하는 부적은 믿고 적용하지 않고 아무 효과도 내지 않습니다.