규칙 집합 전투

이 페이지에서는 규칙 집합이 전투에 참여하는 방식을 정합니다. battle 블록은 Marinara 전투에 시트를 빌려주고, combat 블록은 도감, 보드, 반응과 겨루기를 갖추고 규칙 집합 자체 규칙으로 전투 전체를 해결합니다. 규칙 집합 작성자를 위한 페이지입니다. 시작하기 전에 Game Mode 규칙 집합 작성하기를 읽으세요.

이 페이지의 섹션:

전투: Marinara 전투에 시트 빌려주기

기본적으로 전투는 시트를 전혀 모릅니다. 늘 하던 방식대로 전투원을 만들며, 캐릭터가 전투를 마쳐도 시트의 체력이 그대로일 수 있습니다.

선택적 battle 블록은 한 방향으로만 이를 바꿉니다. 전투에 시트의 수치를 빌려주고 전투 결과를 다시 기록합니다. 전투가 작성한 규칙을 따르게 만드는 것은 아닙니다. 주사위 계산과 누가 누구를 얼마나 때리는지는 여전히 Marinara의 규칙입니다. 따라서 체력은 자체 수치 그대로가 아니라 최대치에 대한 비율로 가져옵니다. 시트에서 체력이 절반인 캐릭터는 Marinara가 만든 체력 막대의 절반으로 전투를 시작합니다. 체력 풀의 9점이 한 방에 12 피해를 입는 전투에 그대로 들어가는 일은 없습니다.

"battle": {
  "health": { "pool": "grit" },
  "energy": { "pool": "luck" },
  "skills": [{ "list": "knacks" }]
}

가져오는 것과 되돌려 쓰는 것

가져오기: 게임에 시트가 있는 각 파티원의 체력 풀이 최대치에서 차지하는 비율로 Marinara 자체 체력 막대의 시작 위치를 정합니다. 에너지 풀은 MP, 각 슬롯 풀은 해당 레벨의 슬롯, 표시된 행은 기술이 됩니다. 최대 체력, 공격력, 방어력, 속도, 레벨은 Marinara 자체 수치를 유지합니다. 체력 풀이 0인 캐릭터는 시트가 그렇게 정했으므로 쓰러진 상태로 전투를 시작합니다. 0보다 큰 캐릭터는 최소 체력 1로 시작하므로 작은 비율을 반올림하다 쓰러뜨리는 일은 없습니다.

되돌려 쓰기: 전투가 끝나면 전투원이 마지막으로 가진 체력 막대의 비율을 체력 풀 자체의 척도로 읽어 되돌리고, 전투 시작 시점과의 차이를 피해나 회복으로 적용합니다. 에너지와 슬롯은 비율이 아닌 개수이므로 그대로 기록합니다. 모든 변경에는 시트 자체 버튼과 같은 규칙이 적용됩니다. 시트가 거부한 변경은 강제로 적용하지 않고 건너뛴 뒤 알립니다. 전투원의 체력이 움직이지 않은 전투에서는 체력 변경을 전혀 쓰지 않으므로, 두 번의 변환 자체가 시트를 바꿀 수는 없습니다.

어느 쪽도 아님: 공격 굴림, 내성 굴림, 집중, 더 높은 비용이 추가하는 효과입니다. 이런 정보는 언젠가 실제 전투 시스템이 읽을 수 있도록 mechanics 블록에 들어 있습니다. 이 연결 기능은 적용하지 않으며, 규칙 집합도 적용한다고 주장해서는 안 됩니다.

중단된 전투는 아무것도 되돌려 쓰지 않습니다. 전투가 시작된 메시지를 삭제하거나 전투가 끝까지 진행되지 않으면 시트는 정확히 이전 그대로입니다. 전투가 일어나지 않은 셈입니다.

항목이 기술이 되는 방식

카탈로그 항목의 mechanics 블록은 다음과 같이 읽습니다.

coverage.combat는 별개이며 의미도 그대로입니다. 전투가 해당 시스템의 규칙을 따를 때만 설정하세요.

전투: 자체 규칙으로 해결하는 싸움

위의 battle 블록은 계산을 Marinara에 맡긴 채 전투에 시트 수치를 빌려줍니다. 선택적 combat 블록은 다릅니다. 자체 규칙이 전투를 어떻게 해결하는지 정합니다. resolution이 판정 유형에 매개변수를 주듯 Engine이 소유한 전투 유형에 매개변수를 주며, 그 안의 모든 이름은 작성자가 정합니다. 유형은 세 가지입니다. 주사위를 더해 숫자와 비교하는 attack-vs-defense, 전투가 dice-pool 규칙 집합 자체의 풀을 던져 성공을 세는 dice-pool(아래 풀로 던지는 전투 참고), 전투가 symbol-pool 규칙 집합의 서술형 주사위를 던져 남은 기호를 소비하는 symbol-pool입니다(아래 기호 주사위로 던지는 전투 참고).

규칙 집합이 combat를 선언한 게임은 그 블록에 따라 싸웁니다. 파티 수치는 각자의 시트에서 읽고, 상대는 자체 생물 도감이나 위협 척도에서 가져오며, 매 턴을 자체 주사위로 해결합니다. 캐릭터가 소모하거나 잃는 모든 것은 발생하는 즉시 시트에 기록하므로 전투 도중 탭을 닫아도 잃지 않습니다. 전투 화면도 작성자의 용어로 진행합니다. 자체 공격과 능력이 메뉴가 되고, 자체 행동 예산과 상태를 사용하며, 로그에는 실제 계산이 나옵니다. 아직 하지 못하는 것은 '아직 지원하지 않는 것'에 나열되어 있습니다.

"combat": {
  "kind": "attack-vs-defense",
  "health": { "pool": "grit" },
  "defense": { "derived": "guard" },
  "initiative": { "dice": { "count": 2, "sides": 6 }, "modifier": { "abilityMod": "wits" } },
  "attackRoll": { "dice": { "count": 2, "sides": 6 } },
  "economy": { "budgets": [{ "id": "act", "label": "Action", "per": "turn", "count": 1 }] },
  "attacks": [
    {
      "list": "gear",
      "budget": "act",
      "name": "name",
      "toHit": { "ability": { "column": "swing" } },
      "damage": { "dice": { "column": "damage" }, "ability": { "column": "swing" }, "type": { "column": "harm" } }
    }
  ],
  "abilities": [{ "list": "knacks", "budget": "act" }],
  "standard": ["dodge", "help"],
  "conditions": [
    { "condition": "shaken", "effects": ["own-attacks-disadvantage", "ends-on-damage"] },
    { "condition": "pinned", "effects": ["cannot-act", "speed-zero"] }
  ]
}

이것이 Ember Roads 블록 전체이며, Ember Roads 게임은 이 블록으로 싸웁니다. 5e 초안은 d20 시스템에 같은 키를 사용합니다.

"combat": {
  "kind": "attack-vs-defense",
  "health": { "pool": "hp" },
  "defense": { "field": "ac" },
  "initiative": { "dice": { "count": 1, "sides": 20 }, "modifier": { "derived": "initiative" } },
  "attackRoll": {
    "dice": { "count": 1, "sides": 20 },
    "advantage": true,
    "naturals": { "max": "critical", "min": "miss" },
    "critical": "double-dice"
  },
  "economy": {
    "budgets": [
      { "id": "action", "label": "Action", "per": "turn", "count": 1 },
      { "id": "bonus", "label": "Bonus action", "per": "turn", "count": 1 },
      { "id": "reaction", "label": "Reaction", "per": "turn", "count": 1 }
    ],
    "movement": { "field": "speed" }
  },
  "abilities": [
    {
      "list": "spells",
      "onlyWhen": "prepared",
      "alwaysWhen": { "column": "level", "equals": 0 },
      "budget": "action",
      "toHit": { "derived": "spell_attack" },
      "saveDifficulty": { "derived": "spell_save_dc" }
    }
  ],
  "concentration": { "text": "concentration", "save": "con_save", "floor": 10, "fromDamage": 0.5 }
}

모든 키

  {
    "list": "attacks",
    "budget": "action",
    "name": "name",
    "strikes": { "field": "attacks_per_action" },
    "damage": { "dice": { "column": "damage" } }
  }

Capability API 1.108부터 byColumn: { "column": "class", "values": { "cleric": { "toHit": { "derived": "spell_attack_cleric" }, "saveDifficulty": { "derived": "spell_dc_cleric" } }, "wizard": { "toHit": { "derived": "spell_attack_wizard" }, "saveDifficulty": { "derived": "spell_dc_wizard" } } }은 행의 클래스에 따라 참조를 고릅니다. 클레릭 3 / 위저드 2는 클레릭의 공격을 숙련과 Wisdom으로, DC를 8에 그 공격을 더한 값으로 파생하고, 위저드의 것은 대신 Intelligence로 파생할 수 있습니다. 열은 원본 목록에 있어야 하며 values는 항목 1~20개를 가집니다. 각 항목은 두 참조 중 하나를 대체할 수 있으며, 생략한 참조, 열 값이 없는 경우, 나열되지 않은 값은 원본 자체의 참조를 유지합니다. 전투, 시트의 행 요약, Game Master의 요약은 같은 행별 숫자를 읽습니다. stamp와 byColumn은 모두 schemaVersion 2와 capabilityApi 1.108 이상이 필요합니다.

"devil", "label": "devil" }], "field": "race", "default": "humanoid" }. 생물은 자체 type과 tags를 지정합니다. 캐릭터의 유형은 텍스트나 선택 필드 field의 값이 유형 중 하나이면 그 값이고, 아니면 default입니다(5e 캐릭터는 인간형). 대상 검사는 { "types": [...], "tags": [...] }이며 하나라도 일치하면 통과합니다. 유형도 태그도 없는 전투원은 일치하지 않습니다. 검사는 세 곳에 둡니다. 피해 절의 targetIs는 일치하는 대상에게만 그 절을 줍니다(dragon slayer: "plus": [{ "dice": "3d6", "type": "slashing", "targetIs": { "types": ["dragon"] } }], 성수: { "dice": "2d6", "type": "radiant", "targetIs": { "types": ["fiend", "undead"] } }). applies 항목의 targetIs는 일치하는 대상에게만 그 상태를 겁니다. mechanics.targetTypes: { "is": test, "not": test }는 누구를 고르거나 휘말리게 할 수 있는지 자체를 정합니다(Animal Friendship: { "is": { "types": ["beast"] } }, Sleep: { "not": { "types": ["undead"] } }). 범위는 targetTypes가 제외한 대상을 지나칩니다. 예측은 targetIs` 절을 닿을 대상에 대해서만 세며, 시트의 단순 평균은 이를 제외합니다. 전투 패널과 Game Master는 각 전투원의 유형과 태그를 봅니다. schemaVersion 2와 capabilityApi 1.168 이상이 필요합니다.

"items": true }는 그 예산을 쓸 수 있는 곳을 정합니다. 지정한 표준 행동(규칙 집합 자체 standard 목록에서. 모든 표준 행동이 이미 있는 첫 예산에는 쓸 수 없음), 단일 타격의 무기 공격 하나(행동이 원래 손에 줄 타격과 관계없이. 생물은 한 대상에 대한 능력치 블록 공격이며 다중 공격은 안 됨), 아이템 사용입니다. 아이템 사용은 아무 아이템이면 true, 그 아이템 태그 중 하나가 있는 아이템만이면 { "tags": ["mundane"] }`입니다(5e의 Use an Object는 평범한 아이템의 사용이며 마법 아이템 발동은 아님). 이들은 보통 쓰는 예산이 다 떨어진 뒤, 보유자 자신의 턴에만 제공됩니다. 부여는 반응을 지불하지 않습니다.

own-saves-advantage와 그 반대는 공격과 마찬가지로 내성을 두 번 굴려 하나를 유지하며 서로 상쇄합니다. own-checks-advantage와 그 반대는 전투가 능력치 판정을 하는 곳인 겨루기의 보유자 쪽과, 전투 밖에서 보유자가 하는 판정에 같은 일을 합니다. resist-all은 표적 자체의 내성이 무엇이든 추가로 모든 종류의 피해를 절반으로 줄이고, 취약성과도 같은 방식으로 상쇄합니다. cannot-target-source는 상태를 부여한 상대에게 무엇이든 겨누지 못하게 합니다(cannot-target-source-side, 1.278: 그 편의 누구에게도 겨누지 못하게 하며, 그 편이 보유자 자신의 편이면 예외). cannot-approach-source는 이동 경로를 포함해 현재 칸보다 그 상대에게 가까이 걷지 못하게 합니다. 같은 거리의 칸으로 돌아가는 길은 여전히 제시하지만, 상대에게 가까워졌다 반대쪽으로 나오는 길은 제시하지 않습니다.

  { "condition": "restrained", "effects": ["own-saves-disadvantage"], "saves": ["dex_save"] }

상태가 바꾸는 피해(Capability API 1.133). damage는 보유자가 주는 피해를, damage-taken은 보유자가 받는 피해를 바꿉니다. 둘 다 flat, dice(와 minus), 또는 times: 0.5 | 2를 받습니다. 더하기는 명중에 피해 절이 여러 개여도 공격 명중마다 한 번 일어나며, 치명타는 규칙 집합이 다른 주사위를 두 배로 하듯 더한 주사위도 두 배로 합니다. 내성과 자동 명중은 아무것도 받지 않습니다. times는 더하기 뒤, 저항 전에 명중 전체를 바꾸며, 절 전체에 걸쳐 합계를 한 번 내림합니다. 더한 양은 자체 damageType, 생략하면 명중의 유형으로 저항을 받습니다. 같은 유형의 더하기는 저항 전에 그 양에 합쳐집니다.

attacks는 weapon, spell, any(기본값) 중 하나입니다. 공격 목록 행과 장착한 아이템 공격은 무기이며, 단일 대상 능력치 블록 공격 굴림도 무기입니다. 카탈로그 능력(생물의 주문 시전 포함)과 아이템 사용은 주문/기타 공격입니다. blow: "melee" | "ranged"는 1.118을 따르므로 근접 거리 안의 투척 무기는 근접입니다. ability는 공격 굴림에 고른 능력치를 지정합니다. 행의 능력치, 또는 아이템이 제공하는 가장 좋은 능력치 중 첫 번째(기교 포함)입니다. 단순한 능력치 블록 행동에는 능력치가 없어 능력치 제한과 일치하지 않습니다. 이 키들과 damageType은 다른 수정치 대상에서는 거부합니다. fromSource: true는 damage-taken에만 씁니다. 명중이 추적되는 상태를 건 사람에게서 와야 합니다. 추적되지 않는 상태, 단계, 아이템에는 거는 출처가 없으므로 일치할 수 없습니다.

5e라면 시트에 이 상태 ID들을 선언한 뒤 combat.conditions에 다음 항목을 넣으세요.

  [
    {
      "condition": "divine_favor",
      "modifiers": [{ "to": "damage", "attacks": "weapon", "dice": "1d4", "damageType": "radiant" }]
    },
    {
      "condition": "rage",
      "modifiers": [{ "to": "damage", "attacks": "weapon", "blow": "melee", "ability": "str", "flat": 2 }]
    },
    {
      "condition": "enfeebled",
      "modifiers": [{ "to": "damage", "attacks": "weapon", "ability": "str", "times": 0.5 }]
    },
    {
      "condition": "hunters_mark",
      "modifiers": [{ "to": "damage-taken", "attacks": "weapon", "fromSource": true, "dice": "1d6" }]
    }
  ]

Divine Favor와 Rage는 시전자에게, Ray of Enfeeblement와 Hunter's Mark는 대상에게 걸립니다. Hex는 attacks: "any"와 damageType: "necrotic"이 있는 표식의 damage-taken 항목을 씁니다. 단계와 아이템의 worn, carried, 요구 조건 otherwise 효과도 이 수정치를 공유합니다. 공격 메뉴는 보유자 자신의 더하기와 배수만 세며, 대상의 표식은 그곳에서 약속하지 않습니다. 시트와 프롬프트 요약은 보유자 자신의 피해 수정치를 설명하고, 전투 보기는 들어오는 것도 설명합니다. 어느 대상이든 쓰는 패키지는 아이템이 별도 카탈로그 파일에 있는 경우를 포함해 schemaVersion 2와 capabilityApi 1.133 이상이 필요합니다.

상태가 바꾸는 숫자. modifiers의 각 항목은 바꾸는 대상(to)과 그 양을 지정합니다.

checks에 대한 수정치는 자체 skills를, saves에 대한 수정치는 자체 saves를 지정할 수 있으며, 상태의 지정 대신 범위를 좁힙니다. 둘 다 mode: "advantage"나 "disadvantage"로 두 번 굴릴 수 있으며, 숫자가 함께 있든 없든 같은 이름의 효과와 함께 세고 같은 방식으로 상쇄합니다. 따라서 한 상태가 Sneak은 어렵게, Climb은 쉽게 동시에 만들 수 있습니다. 이 세 키는 Capability API 1.53이 필요합니다.

  { "condition": "muddy", "modifiers": [{ "to": "checks", "skills": ["sneak"], "mode": "disadvantage" }] }

고정 숫자는 자체 부호를 가지며 0은 거부합니다. 모든 수정치는 로그에서 바꾼 굴림 옆에 상태 이름과 함께 표시되고("12 + 5 + 3 (Blessed) = 20"), 메뉴의 명중 확률과 승리 확률도 이를 셉니다. 상태끼리는 중첩되며, 같은 상태가 두 번 있어도 하나의 상태입니다.

  "conditions": [
    { "condition": "blessed", "modifiers": [{ "to": "attacks", "dice": "1d4" }, { "to": "saves", "dice": "1d4" }] },
    { "condition": "shielded", "modifiers": [{ "to": "defense", "flat": 5 }] },
    { "condition": "slowed", "modifiers": [{ "to": "speed", "times": 0.5 }, { "to": "defense", "flat": -2 }] }
  ]

단계는 track 대신 캐릭터의 실시간 상태와 아이템으로 계산한 derived 값을 읽을 수 있으므로(Capability API 1.54) 아무도 직접 표시할 필요가 없습니다. Ember Roads는 부피 10 이상을 지닌 사람을 느리게 합니다.

  {
    "derived": "bulk_carried",
    "at": 10,
    "modifiers": [
      { "to": "speed", "flat": -2 },
      { "to": "checks", "skills": ["sneak"], "flat": -1 }
    ]
  }

캐릭터마다 다른 경계값("Strength의 다섯 배 초과")은 이를 빼는 파생 값으로 표현합니다. scale -1로 뺄 부분을 구하고, 둘의 sum을 단계가 읽습니다.

  "levels": [
    { "track": "exhaustion", "at": 1, "effects": ["own-checks-disadvantage"] },
    { "track": "exhaustion", "at": 2, "modifiers": [{ "to": "speed", "times": 0.5 }] },
    { "track": "exhaustion", "at": 3, "effects": ["own-attacks-disadvantage", "own-saves-disadvantage"] },
    { "track": "exhaustion", "at": 4, "modifiers": [{ "to": "health-max", "times": 0.5 }] },
    { "track": "exhaustion", "at": 5, "effects": ["speed-zero"] },
    { "track": "exhaustion", "at": 6, "defeats": true }
  ]

"defeats": true는 아무도 움직이기 전, 전투가 시작될 때 보유자를 전투에서 완전히 탈락시킵니다(Capability API 1.115). 이것과 절반이 된 최대치로 잃는 체력은 전투가 시작될 때 한 번 정리하며, 다른 모든 단계는 바꾸는 숫자를 읽을 때마다 읽습니다.

상대도 트랙을 가집니다(Capability API 1.115). 시트가 없는 상대는 트랙 ID로 받은 tracks에서 시작합니다. Game Master가 제안하는 생물은 이를 지정할 수 있고("tracks": { "exhaustion": 2 }), 전투에 넣는 도감 상대도 마찬가지입니다. 생물의 conditionImmunities는 단계가 읽는 트랙을 지정할 수 있으며, 그러면 시트 유무와 관계없이 그 트랙의 어떤 단계도 그 생물에 닿지 않습니다. 탈진에 면역인 5e의 언데드와 구조물이 그 예입니다.

수정치, 단계, 판정 효과는 Capability API 1.45가 필요합니다.

등급에는 그 등급의 생물을 조우 예산에서 얼마로 계산하는지 나타내는 worth(5e에서는 도전 등급별 경험치)를, threat에는 맞서는 파티에 대해 전투에 허용되는 예산인 budget을 둘 수 있습니다(Capability API 1.803):

Game Master에게는 전투를 작성하기 전에 각 등급의 가치와 파티의 예산을 알려 줍니다. Game Master가 지어낸 전투의 가치가 예산보다 크면 낮춥니다. 창작한 상대 중 가치가 가장 높은 상대의 등급을 한 단계 낮추는 과정을 예산에 맞을 때까지 반복합니다. 보스가 포함된 전투는 다음 난이도 단계까지 허용됩니다. 생물 도감의 생물과 이전 전투에서 다시 등장한 생물은 그대로 계산하며, 스토리의 전투는 그 작성자가 정합니다. 무엇을 낮췄는지는 전투의 조정 내역에 표시합니다.

상태, 피해, 마법에 대한 내성

to: "saves"인 수정치는 against를 가질 수 있습니다. conditions(시트 상태 ID), damage(피해 유형), magic: true 중 하나 이상이 필요합니다. 하나만 일치해도 됩니다. saves는 여전히 AND 조건으로 어느 내성인지 좁힙니다. 이렇게 이점을 좁히려면 effects가 아니라 수정치의 mode: "advantage"를 쓰세요. 이 수정치는 상태, 도달한 트랙 단계나 파생 단계, 아이템 효과에서 작동합니다. 종족 특성이라면 시트의 종족 선택에서 값을 파생하고, 그 값이 1일 때 도달하는 단계에 수정치를 붙이세요. 수정치 예시는 다음과 같습니다.

[
  {
    "$comment": "Dwarven Resilience",
    "to": "saves",
    "mode": "advantage",
    "against": { "conditions": ["poisoned"], "damage": ["poison"] }
  },
  { "$comment": "Fey Ancestry", "to": "saves", "mode": "advantage", "against": { "conditions": ["charmed"] } },
  {
    "$comment": "Gnome Cunning",
    "to": "saves",
    "saves": ["int_save", "wis_save", "cha_save"],
    "mode": "advantage",
    "against": { "magic": true }
  }
]

Brave는 conditions: ["frightened"]를 씁니다. Magic Resistance는 생물의 시트 파생 단계나 트랙 단계에서 saves 없이 magic: true를 씁니다. 행동의 applies는 내성이 상태를 막아도 셈에 들며, 그 피해는 모든 plus 절을 포함합니다. 피해 이름은 대소문자 구분 없이 비교합니다. 마법은 1.101의 "magical" 성질을 뜻합니다. 카탈로그 mechanics.qualities(피해가 없어도), 생물 행동의 damage.qualities, 무기 아이템의 태그입니다. 주문은 그 성질을 지녀야 하며, 이름이나 카탈로그만으로 마법이 되지 않습니다. saveWhenDamaged와 saveEnds.at: "damaged"를 포함해 상태를 끝내는 내성은 그 상태에 대한 내성일 뿐입니다. 집중 내성과 죽음 내성은 아무것에 대한 것도 아닙니다. 전투 밖에서 Game Master의 내성 요청에는 구조화된 출처나 상태가 없으므로 against는 그 요청과 일치하지 않습니다. 시트, 아이템 세부 정보, 전투 세부 정보, Game Master 시트 요약이 이 제한을 보여 줍니다. schemaVersion 2와 capabilityApi 1.134 이상이 필요합니다.

풀로 던지는 전투: dice-pool

dice-pool 규칙 집합은 주사위를 더하지 않고 성공을 세며, 그 전투도 그렇게 할 수 있습니다. "kind": "dice-pool"에는 resolution.kind가 "dice-pool"이어야 하며, 풀 판정이 이미 하는 방식으로 시트를 읽습니다. 굴림이 더하는 모든 숫자는 주사위 개수이고, 굴림이 상대하는 모든 숫자는 성공 수입니다. 따라서 이름을 바꿀 것이 없습니다.

풀 전투가 그 밖에 굴리는 것은 pool 블록입니다.

"pool": {
  "advantage": true,
  "damageTarget": 6,
  "soak": { "roll": true, "byKind": { "knock": { "abilityMod": "sinew" } } }
}

모든 대상의 피해는 그 대상마다 던집니다. 명중이 필요한 성공을 넘어 얻은 것과 대상이 흡수하는 것은 대상마다 다르기 때문입니다. 타격의 두 번째 절과 부가 효과는 각자 자체 종류의 별도 피해 풀이며 명중으로 인한 추가 주사위가 없습니다. 메뉴는 풀을 정확히 예측합니다. 필요한 성공에 도달할 확률과, 첫 대상이 흡수한 뒤 피해 주사위의 가치입니다.

Gravewatch가 이렇게 작성되어 있습니다. 파수꾼은 평점과 전문 기술을 던지고, 타박은 Sinew로 흡수하지만 찢긴 상처는 전혀 흡수하지 않으며, 턴마다 Resolve 1점을 쓸 수 있고, 라운드마다 우선권을 다시 던집니다.

역순 선언은 구현하지 않습니다. 일부 시스템은 누구든 행동하기 전에 가장 느린 사람부터 모두 행동을 선언합니다. 각 전투원이 자기 턴이 오면 행동 하나를 고르는 전투에서는 먼저 선언해도 어떤 규칙이 읽는 것도 바뀌지 않으므로 키로 표현할 것이 없습니다.

기호 주사위로 던지는 전투: symbol-pool

symbol-pool 규칙 집합은 숫자 대신 기호를 읽으며 전투도 그렇게 할 수 있으므로, Engine은 이점으로 무엇을 샀는지 Game Master에게 묻지 않고 전투 전체를 진행합니다. "kind": "symbol-pool"에는 "symbol-pool"인 resolution.kind가 필요하며, 기존 기호 판정과 같은 방식으로 시트를 읽습니다.

기호가 하는 일은 symbols 블록이 정합니다.

"symbols": {
  "damage": { "perSuccess": 1, "counts": "all" },
  "soak": { "all": { "derived": "soak" } },
  "spends": [
    { "id": "boost", "label": "Boost an ally", "by": "attacker", "symbol": "a", "cost": 1, "boost": { "dice": 1, "on": "attacker-ally" } },
    { "id": "crit", "label": "Critical", "by": "attacker", "symbol": "a", "cost": 2, "when": "hit", "critical": true, "condition": { "id": "injured", "on": "target", "rounds": 3 } },
    { "id": "triumph", "label": "Triumphant blow", "by": "attacker", "symbol": "t", "cost": 1, "when": "hit", "critical": true, "damage": 2 },
    { "id": "strain", "label": "Overextend", "by": "target", "symbol": "h", "cost": 2, "track": { "id": "strain", "by": 1, "on": "attacker" } },
    { "id": "setback", "label": "Opening", "by": "target", "symbol": "h", "cost": 1, "setback": { "dice": 1, "on": "attacker" } },
    { "id": "despair", "label": "Weapon slips", "by": "target", "symbol": "d", "cost": 1, "condition": { "id": "disarmed", "on": "attacker" } }
  ]
}

Engine은 플레이어와 상대 모두 각 편이 가진 기호로 가장 가치 있는 소비를 사고 각각 로그에 알립니다. 플레이어는 직접 고를 수도 있습니다. 전투 화면의 "Choose my own symbol spends"를 선택하면, 조종하는 파티원에게 굴림 뒤 살 수 있는 것이 남았을 때 소비를 하나씩 고르거나, 나머지를 Engine의 선택에 맡기거나, 더 소비하지 않기로 할 때까지 기다립니다. 선택에는 Engine과 같은 규칙(비용, max, when, 실제 적용 가능 여부)이 적용되며, 다른 모두의 소비는 여전히 Engine이 고릅니다. 규칙 집합에서 이를 위해 할 일은 없습니다. 아무도 소비하지 않은 기호는 굴림에 남아 Game Master가 서술합니다. 메뉴의 예측은 굴림의 모든 가능한 결과를 셉니다. 명중 확률과, 명중했을 때 성공과 소비를 반영하고 흡수를 뺀 피해입니다. AI는 이를 기준으로 각 공격을 평가하며 상대 편의 소비로 치를 비용은 뺍니다.

Game Master가 맡는 부분. 소비 비용은 각 무기가 아닌 규칙 집합의 것이므로, 자체 치명타 등급이 있는 무기는 규칙 집합이 공유하는 소비로 작성합니다. 치명타 자체 표는 Game Master가 굴립니다. 내성, 판정, 겨루기의 이점으로는 아무것도 사지 않습니다. 공격 굴림만 소비합니다. 전투에서 난이도 주사위를 승급하는 기능은 구현되지 않았습니다.

최소 피해 주사위

풀 전투는 Exalted의 Overwhelming처럼 강한 흡수에 맞서서도 주사위를 남길 수 있습니다.

"damage": { "minimum": { "derived": "overwhelming" } }

이것은 combat.damage.minimum이며, 공격자의 현재 시트에서 읽는 값 참조입니다. 정적 흡수가 명중의 첫 피해 풀에서 주사위를 뺀 뒤, 풀을 최소 이 수까지 올립니다. 자동 성공이 아니라 온전한 주사위이며, 내림하고 0과 resolution.pool.max 사이로 제한하므로 남은 주사위도 모두 실패할 수 있습니다. 굴리는 흡수는 여전히 피해 던지기 뒤 성공을 뺍니다. 주사위 풀을 줄이지 않으므로 최솟값이 그로부터 성공을 지켜 주지는 않습니다. 저항과 면역은 여전히 적용됩니다. 우선권을 소비하는 타격은 무기 피해와 흡수를 무시하듯 최솟값도 무시하며, 우선권을 빼앗는 타격은 이를 씁니다.

무기는 item.attack.damage.minimum으로 공통 최솟값을 덮어쓸 수 있습니다. 보유자에 대한 같은 값 참조나, 아이템 자체 숫자 스탯 하나를 가리키는 { "stat": "overwhelming" }를 받습니다. 0을 선언해도 공통 최솟값을 덮어씁니다. 이것은 흡수 뒤 일정 피해를 보장하는 기존 무기 floor와 다릅니다. 추가 피해 절과 부가 효과는 또 다른 최솟값을 받지 않습니다. 전투 기록과 로그는 주사위 옆에 정해진 최솟값을 보여 줍니다. 전투 키와 무기 키 모두 외부 카탈로그 파일의 무기를 포함해 패키지에서 Capability API 1.146이 필요합니다.

멍하게 만드는 명중

"daze": {
  "over": { "abilityScore": "stamina" },
  "measure": "damage",
  "condition": "dazed",
  "text": "The blow leaves them reeling until their next turn passes."
}

combat.daze는 풀 전투용입니다. over는 명중 직전 대상의 현재 시트를 읽습니다. 한 명중이 흡수, 내성, 저항 뒤 그 숫자보다 엄격히 많은 피해를 줘야 합니다. 그 피해 절들은 함께 세며, 서로 다른 명중은 멍함을 향해 누적되지 않습니다. 타격마다 표시하는 트랙에서는 피해를 준 명중을 한 단계로 셉니다. 체력 대신 우선권을 빼앗는 타격은 멍하게 할 수 없습니다. measure는 현재 "damage"만 가능합니다.

대상은 정확히 다음 턴 하나를 건너뜁니다. 그 턴 전의 추가 멍함 명중은 건너뛰기를 더 쌓지 않습니다. 건너뛴 턴에도 상태 시계와 라운드 변경, 우선권 재굴림을 포함한 다른 턴 관리는 진행됩니다. 전투를 저장하고 다시 불러와도 대기 중인 건너뛰기는 유지됩니다. condition이 있으면 선언된 시트 상태를 지정합니다. 전투는 건너뛴 턴이 지나가거나 전투가 끝날 때까지 이를 표시합니다. 이미 있는 상태는 그대로 두며, 상태 면역은 표시를 막지만 건너뛰기는 막지 않습니다. text는 선택 사항인 서술이며 또 다른 효과가 아닙니다. 로그와 Game Master의 전투 컨텍스트에 명중과 건너뛰기가 기록됩니다. 이 키는 Capability API 1.147이 필요합니다.

대상이 고르는 부상 종류

기존 combat.damageKinds 대응에 remap을 더하고 default, byType, marks는 유지하세요.

"damageKinds": {
  "default": "bashing",
  "byType": { "bullet": "lethal", "fire": "aggravated" },
  "marks": "per-point",
  "remap": [
    { "when": { "field": "vampire" }, "from": "lethal", "to": "bashing", "tags": ["firearm"] }
  ]
}

풀 전투는 먼저 일반 대응으로 공격의 종류를 고른 뒤, 각 remap의 when을 대상에서 읽습니다. 0이 아닌 숫자면 규칙이 켜집니다. from과 to는 둘 다 체력 부상 트랙의 종류여야 합니다. 일치하는 첫 규칙이 이기며 remap은 연쇄하지 않습니다. 최대 12개까지 줄 수 있습니다. tags가 있으면 그중 하나 이상이 공격과 일치해야 합니다. 무기는 이미 item.tags를, 카탈로그 mechanics와 생물 피해는 이미 qualities를 지닙니다. 이 이름들은 items.tags에서 옵니다. tags가 없으면 그 종류의 모든 공격이 일치할 수 있습니다. 새 공격 태그 필드는 필요 없습니다.

결과 종류가 흡수와 부상 표시를 모두 정합니다. 따라서 화기의 치명성 명중은 뱀파이어에게는 타격성이 되어 타격성 흡수를 쓰며, 같은 화기가 다른 누군가에게 하거나 칼날이 그 뱀파이어에게 하면 일반 종류를 유지합니다. 공격의 원래 피해 _유형_은 저항과 면역에서 바뀌지 않습니다. 각 피해 절은 자체 종류와 공격의 태그를 씁니다. 전투 기록과 로그는 원래 종류와 다시 대응한 종류를 보여 주며, 피해 예측도 같은 규칙을 읽습니다. 시트가 없는 단순 생물은 상수 참조는 충족할 수 있지만 이 규칙에 시트 값을 줄 수는 없으므로, 그러려면 생물 시트를 주세요. 새 remap 키만 Capability API 1.148이 필요하며, 이전 피해 종류 대응은 기존 호환성을 유지합니다.

공격이 움직이는 우선권

일부 풀 시스템은 우선권을 전투 내내 수치로 유지하고 공격이 이를 움직이게 합니다. 한 공격 방식은 대상에게서 우선권을 빼앗고, 다른 방식은 공격자 자신의 우선권을 피해로 소비하며, 정해진 선까지 떨어진 사람은 붕괴합니다. dice-pool 전투는 이를 표현할 수 있습니다(Capability API 1.48).

"initiative": {
  "pool": { "abilityMod": "nerve" },
  "plus": 3,
  "resource": {
    "base": 3,
    "styles": [
      { "id": "press", "label": "Press", "takes": { "gain": 1 } },
      { "id": "telling", "label": "Telling blow", "spends": { "onMiss": [[0, 1], [6, 2], [11, 3]] } }
    ],
    "crash": { "at": 0, "condition": "reeling", "bonus": 5, "recoverAfter": 3 }
  }
}

메뉴는 방식마다 자체 예측을 보여 줍니다. 명중 확률과, 빼앗는 방식이 빼앗을 양 또는 소비하는 방식이 줄 피해입니다. 상태 패널은 모두의 수치를 보여 주고, 로그는 모든 변화와 이유를 알려 줍니다. "Ada gains 5 initiative for crashing Rats, and is on 14." Engine의 선택기는 빼앗는 타격을 한 턴 앞까지 평가합니다. 빼앗은 뒤 소비하는 것과, 지금 소비한 뒤 기준값에서 다시 소비하는 것을 비교합니다.

전투가 mechanics에서 읽는 것

kind는 amount가 피해인지 회복인지 결정합니다. reaction 표시는 메뉴에서 제외되며, utility 항목도 턴 자체가 가질 수 있는 것을 바꾸지 않으면 제외됩니다(아래 참고). attackRoll은 목록의 toHit로 표적의 방어에 대한 굴림을 하게 하며 autoHit는 이를 완전히 건너뜁니다. save는 목록의 saveDifficulty에 대해 표적 자체의 내성을 굴리고, onSuccess는 성공 시 절반을 받는지 아무것도 받지 않는지 정합니다. targetCount는 겨눌 수 있는 표적 수입니다. 공격 굴림이 없는 능력(모두가 내성을 굴리는 범위, 명중하는 것)은 모두에 대해 주사위를 한 번만 굴립니다. 표적마다 명중 굴림을 하는 능력은 명중마다 피해 주사위를 다시 굴립니다. applies는 영향을 받은 대상에게 상태를 부여합니다. 각 상태는 duration으로 instant(자체 시계 없이 무언가 해제할 때까지 유지), until-save(saveEnds를 함께 지정해야 함), { "rounds": n } 중 하나를 가지며, 선택적 saveEnds로 내성과 이를 turn-end 또는 turn-start 중 언제 반복하는지 지정합니다. 라운드는 보유자 자신의 턴이 끝날 때마다 줄어듭니다. { "rounds": 1, "at": "turn-start" }는 턴이 시작될 때마다 세며, "다음 자신의 턴 시작까지"를 표현하는 방법입니다. "of": "source"(Capability API 1.119)는 대신 상태를 건 사람의 턴을 그 사람의 다음 턴부터 세며, 다른 사람에 대해 "상태를 건 사람의 다음 턴이 끝날 때까지"를 표현하는 방법입니다. Guiding Bolt의 { "duration": { "rounds": 1, "of": "source" }, "endsAfter": "attacked" }는 시전자의 다음 턴이 끝나기 전 대상에 대한 다음 공격 굴림에 이점을 줍니다. 출처가 전투를 떠나면 라운드는 보유자 자신의 턴으로 셉니다. 전투 상태의 delays(Capability API 1.120)는 보유자가 쓰는 것을 미룹니다. 그 catalogs 중 하나에서 온 행동을 그 budget으로 지불하면 chance.sides면 주사위를 굴리고, chance.atLeast 이상이면 아직 일어나지 않습니다. 보유자의 다음 턴이 시작될 때 같은 예산으로 완료되어 응답까지 포함해 원래대로 진행되며, 행동할 수 없거나 그 예산이 없으면 사라집니다. 어느 쪽이든 비용은 소모된 채입니다. 5e의 Slow는 "delays": { "catalogs": ["spells"], "budget": "action", "chance": { "sides": 20, "atLeast": 11 } }입니다. endsAfter는 시계와 관계없이 첫 own-attack(보유자의 다음 공격 굴림), attacked(보유자를 상대로 한 다음 공격 굴림), own-save(보유자의 다음 내성) 뒤에 상태를 해제합니다. 따라서 { "duration": { "rounds": 1 }, "endsAfter": "own-attack" }는 "다음 턴이 끝나기 전 다음 공격에서"입니다. 공격 하나 동안 유지되는 상태는 피해를 포함해 그 공격 전체 동안 유지되며, 같은 타격이 새로 건 상태는 남습니다. 둘 다 Capability API 1.45가 필요합니다. temporary는 체력 풀에 임시 점수를 주며 중첩하지 않고 큰 완충치만 남깁니다. scales는 읽은 값에 대해 표가 제공하는 추가 주사위만큼 양을 늘립니다. cost는 시트 자체의 use 명령으로 지불하며, budget은 소모하는 행동 체계의 부분을 덮어씁니다.

plus는 같은 타격에서 amount 옆에 최대 세 개의 수치를 더합니다. 각각 따로 굴리고 유형을 가집니다("and 2d6 fire"). 절은 { "dice": "2d6", "flat": 1, "type": "fire" } 형태이며, 자체 save로 { "save": "con_save", "difficulty": 13, "onSuccess": "none" | "half" }를 가질 수도 있습니다. 행동이 이미 무엇을 요구했든 표적이 이 내성을 굴립니다. 성공 시 none은 해당 절을 없애고 half는 절반만 남기며, 어느 쪽이든 타격의 나머지는 건드리지 않습니다. difficulty가 없으면 행동 자체 내성의 수치로, 그다음 목록의 saveDifficulty로 돌아갑니다. 치명타는 첫 수치와 같은 규칙으로 모든 절의 주사위를 두 배로 합니다. type이 없는 절은 타격 자체의 피해 유형입니다. 타격 전체는 여전히 합산 피해로 집중을 한 번 확인하고, 쓰러짐도 한 번 확인합니다. 절은 붙을 amount가 필요하며 heal에는 붙지 않습니다.

{
  "kind": "attack",
  "attackRoll": true,
  "amount": { "dice": "1d8" },
  "damageType": "piercing",
  "plus": [{ "dice": "2d6", "type": "fire" }]
}

세 키가 항목이 턴 자체의 행동 체계에 하는 일을 정합니다. 하나라도 선언한 utility 항목은 제외하지 않고 제시합니다.

새로운 kind: "rider" 항목은 지속 효과입니다. 아무도 실행하지 않고 메뉴에도 없으며, 각 기간에서 처음 조건을 만족하는 명중에 피해 절 하나를 자동으로 더합니다. rider만 가지고 그 밖의 실행할 내용은 갖지 않습니다.

{
  "kind": "rider",
  "rider": {
    "on": "hit",
    "sources": ["attacks"],
    "requires": { "column": "finesse" },
    "when": ["advantage", "ally-adjacent-no-disadvantage"],
    "oncePer": "turn",
    "amount": { "dice": "1d6" }
  },
  "scales": {
    "from": { "field": "level" },
    "table": [
      [1, 0],
      [3, 1]
    ]
  }
}

sources는 적용할 공격 목록을, requires는 그 행에서 참으로 평가되는 열 하나를 지정합니다. 특정 무기에서만 발동하는 부가 효과도 Engine이 무기를 이해할 필요 없이 어느 무기인지 말할 수 있습니다. 둘 다 지정하지 않으면 보유자가 명중시킨 모든 타격이 대상입니다. 가방에서 꺼내 든 무기는 행이 아니므로 weapons(Capability API 1.70)가 발동할 아이템 태그도 지정합니다. "weapons": { "tags": ["finesse", "ranged"] }는 두 태그 중 하나를 가진 손에 든 무기의 명중에서 보조 손 타격을 포함해 발동합니다. weapons만 지정하면 어느 행에서도 발동하지 않고, 행만 지정하면 손에 든 무기에서 발동하지 않습니다. when은 하나라도 충족하면 됩니다. advantage는 공격 굴림이 최종적으로 어느 쪽으로 유리했는지이며, ally-adjacent는 서 있고 행동할 수 있는 공격자의 아군으로, 보드에서는 표적의 한 칸 이내, 보드 밖에서는 어디에 있어도 됩니다. ally-adjacent-no-disadvantage(Capability API 1.126)는 이점과 불리점이 상쇄된 뒤 최종 굴림이 불리점이 아니어야 한다는 조건도 요구하며, 위 예시는 Sneak Attack에 이를 씁니다. oncePer는 turn(존재하는 모든 턴이 시작할 때 갱신하므로 다른 사람이 행동할 때 한 타격에도 붙일 수 있음) 또는 round입니다. amount는 항목 자체의 scales에 따라 늘고, type은 피해 종류이며 기본값은 타격 자체의 종류입니다.

생물: 전투가 읽는 생물 도감

"holds": "creatures"를 선언한 카탈로그는 시트 행 대신 상대를 담습니다. 어떤 목록에도 공급하지 않고 시트 편집기의 선택기에도 나오지 않으며, 모든 수치는 combat 블록이 이미 선언한 키로 작성합니다. 생물은 자체 단계 중 하나에 분류되므로 combat 블록과 threat 척도가 필요합니다.

{
  "id": "road_trouble",
  "label": "Road trouble",
  "holds": "creatures",
  "filters": [{ "id": "tier", "label": "How bad", "type": "text" }],
  "entries": [
    {
      "id": "rust-jackal",
      "label": "Rust Jackal",
      "summary": "A lean thing that lives on the metal roads.",
      "filters": { "tier": "Pack trouble" },
      "creature": {
        "health": { "dice": "3d6" },
        "defense": 6,
        "initiativeModifier": 1,
        "speed": 16,
        "abilities": { "brawn": 1, "wits": 0, "heart": -1 },
        "tier": "pack",
        "actions": [
          {
            "id": "bite",
            "name": "Bite",
            "budget": "act",
            "toHit": 2,
            "damage": { "dice": "1d6", "flat": 1, "type": "cut" },
            "reach": 2
          },
          {
            "id": "worry",
            "name": "Worry",
            "budget": "act",
            "toHit": 2,
            "damage": { "dice": "1d4", "type": "cut" },
            "applies": [{ "condition": "shaken", "duration": { "rounds": 2 } }]
          },
          {
            "id": "snap_and_worry",
            "name": "Snap and worry",
            "budget": "act",
            "sequence": [
              { "action": "bite", "times": 1 },
              { "action": "worry", "times": 1 }
            ]
          }
        ]
      }
    }
  ]
}

아래 수치는 생물을 직접 수치로 작성하는 방식입니다. 규칙 집합 자체 용어로 sheet를 작성하면 health, defense, initiativeModifier, speed, abilities, saves, checks, soak, hardness는 대신 그 시트에서 가져옵니다(아래 '규칙 집합 자체 용어로 작성한 생물' 참고).

    {
      "id": "parry",
      "name": "Parry",
      "budget": "reaction",
      "self": true,
      "reaction": { "on": "hit" },
      "applies": [{ "condition": "parrying", "duration": { "rounds": 1 }, "endsAfter": "attacked" }]
    }

생물 행동은 heal(주사위, 고정 양 또는 둘 다)로 체력을 돌려줄 수 있으며, 대상의 최대치까지입니다. targets: "ally"는 자신을 포함한 자기 편에, targets: "any"는 어느 편에든 닿습니다. targets가 없으면 이전처럼 상대편에 닿습니다. 이 키들은 Capability API 1.121이 필요합니다. 회복에는 damage, toHit, save, area가 없고, targets는 self나 sequence와 함께 쓸 수 없으며, 연속 행동은 어느 키도 가지지 않습니다. 데바의 Healing Touch는 다음과 같습니다.

{
  "id": "healing_touch",
  "name": "Healing Touch",
  "budget": "action",
  "heal": { "dice": "4d8", "flat": 2 },
  "targets": "ally",
  "uses": { "per": "day", "count": 3 }
}

생물의 spellcasting(Capability API 1.123)은 슬롯이나 점수를 쓰지 않고 카탈로그 주문을 시전합니다. 그 saveDifficulty와 toHit가 주문의 숫자를 주며, sheet가 있는 생물은 이를 생략하고 시트의 주문 시전 숫자를 쓸 수 있습니다. 단순 생물은 주문에 필요한 모든 숫자를 줘야 합니다. 각 entry는 mechanics가 있는 기존 카탈로그 항목을 지정합니다. uses를 생략하면 자유롭게 쓸 수 있으며, level은 perCostStep 증가를 위한 시전 레벨이고 생략하면 항목의 기본 레벨입니다. 예산, 대상, 집중, 반응, 범위, 소환은 여전히 항목이 줍니다. 드라이어드의 목록은 다음처럼 쓸 수 있습니다. 이 주문 ID들은 예시이며 spells 카탈로그에서 제공해야 합니다.

"spellcasting": {
  "saveDifficulty": 14,
  "spells": [
    { "entry": "spells/druidcraft" },
    { "entry": "spells/entangle", "uses": { "per": "day", "count": 3 } },
    { "entry": "spells/goodberry", "uses": { "per": "day", "count": 3 } },
    { "entry": "spells/barkskin", "uses": { "per": "day", "count": 1 } },
    { "entry": "spells/pass-without-trace", "uses": { "per": "day", "count": 1 } },
    { "entry": "spells/shillelagh", "uses": { "per": "day", "count": 1 } }
  ]
}

마녀 집회라면 spells 옆에 "coven": { "id": "marsh_hags", "size": 3, "within": 30 }을, 공유하는 각 주문에 "coven": true를 더하세요. 그 주문들은 시전자 편에 서 있는 전투원 중 적어도 셋이 그 집회 ID를 지니고, 각자 단순 칸 거리로 시전자로부터 규칙 집합 거리 단위 30 이내에 있는 동안만 제공됩니다. 보드가 없으면 서 있는 모든 구성원을 셉니다. 각 주문의 사용 횟수는 집회 ID와 항목을 키로 하는, 그 집회 전체가 공유하는 풀 하나입니다. 집회 블록에는 집회 주문이, 집회 주문에는 블록이 필요하며, 중복 항목은 거부합니다. Game Master가 제안한 생물은 제한 처리 시 spellcasting을 잃습니다. 위협 척도로는 주문 목록을 제한할 수 없기 때문입니다.

Engine의 5e 초안 테스트 사본인 docs/development/ruleset-5e-2014.example.json에는 손으로 작성한 생물 다섯으로 구성된 생물 도감이 있습니다. 연속 행동, 재충전, 상태가 붙은 내성, 저항과 면역, 사용 횟수 제한, 고유 점수, 시트로 작성한 생물 하나를 다룹니다. 전체 SRD 생물 도감은 공식 5e (SRD 5.1) 패키지의 catalogs/creatures.json입니다.

규칙 집합 자체 용어로 작성한 생물

생물을 직접 수치로만 작성할 필요는 없습니다. 캐릭터 시트와 정확히 같은 모양의 sheet를 대신 주면, 전투는 파티원과 같은 방식으로 생물을 만듭니다. 체력, 방어, 내성, 우선권, 속도, 목록의 모든 공격과 능력은 자체 시트 공식이 정하는 값입니다. 상대가 캐릭터와 같은 능력치, 기술, 목록을 쓰는 규칙 집합은 그것들이 무엇이든 이렇게 표현합니다. Ember Roads의 Toll Warden은 다음과 같습니다.

{
  "id": "toll-warden",
  "label": "Toll Warden",
  "creature": {
    "tier": "pack",
    "traits": [{ "name": "Knows the road", "text": "It will not follow anyone past the last milestone." }],
    "sheet": {
      "abilities": { "brawn": 2, "wits": 1, "heart": 1 },
      "skills": { "sway": "trained" },
      "fields": { "calling": "Hauler", "toughness": 3 },
      "lists": {
        "gear": [{ "name": "Toll hook", "swing": "brawn", "damage": "1d6", "harm": "cut" }],
        "knacks": [{ "name": "Hold the Line", "_catalog": "knacks/hold-the-line" }]
      }
    }
  }
}

5e 초안의 Toll Sergeant는 d20 시트에서 같은 것을 구현합니다. Armor Class, 체력, 내성, 행동당 두 번의 공격은 전부 자체 필드와 공격 목록에서 옵니다.

아무도 작성하지 않은 상대

Game Master가 상대를 창작하면 Engine은 무엇이든 굴리기 전에 제안을 threat 척도에 맞춥니다. 체력은 단계 범위 안으로, 방어와 명중 보너스와 내성 난이도는 단계 자체 값보다 최대 2 높게 제한합니다. 가장 강한 라운드(가장 강한 연속 행동 또는 단일 행동을 한 표적 기준으로 측정)가 단계의 damagePerRound 안에 들어올 때까지 피해를 줄입니다. 주사위 개수, 고정 부분, 연속 행동의 타격 하나, 마지막으로 주사위 면 수 순서로 줄이며 어떤 것도 0까지 줄이지 않습니다. 규칙 집합에 없는 이름은 버립니다. 알 수 없는 피해 유형, 상태, 내성과 처음 여섯 개를 넘은 행동이 대상입니다. 선언하지 않은 단계는 척도 최하단으로 돌아갑니다. 모든 변경은 평이한 문장으로 반환하므로 로그가 한 일을 설명할 수 있습니다.

창작한 상대도 도감 생물과 똑같이 sheet로 작성할 수 있습니다. 창작한 마법사가 슬롯과 주문을 얻는 방법입니다. Game Master에게 시트 ID와 각각 담을 수 있는 값, 전투가 읽는 목록, 카탈로그가 그 목록에 제공하는 이름을 보여 주므로 주문은 설명하지 않고 이름으로 지정합니다. 대소문자와 관계없이 카탈로그 항목을 지목한 행은 그 항목이 되고, Game Master가 지정한 값(주문의 준비 상태 등)을 위에 덧씁니다. 모델이 썼으므로 시트를 관대하게 읽습니다. 규칙 집합에 없는 이름은 버리고, 값은 필드나 열에 맞추며, 시트 옆에 따로 쓴 수치는 쓰지 않습니다.

보스가 아닌 창작 생물은 규칙 집합이 열어 준 것만 사용할 수 있습니다. startFrom이 있는 카탈로그 필터는 항목을 분류하는 시트 필드(5e 패키지의 주문 목록에서는 class)를 지정합니다. 창작 생물은 그 필드의 자체 값과 필터가 일치하는 항목만 보유하며, 선택기가 해당 값으로 열릴 때와 같은 방식으로 비교합니다. 따라서 Sorcerer가 전체 주문 목록을 갖는 일은 없고, 클래스를 지정하지 않으면 클래스별 카탈로그에서 아무것도 얻지 못합니다. 아직 선택하지 않은 것은 Game Master에게 다시 묻지 않고 채웁니다. 선택해야만 행이 유효한 각 목록(전투 능력 원본의 onlyWhen)에서, 열려 있고 자체 풀로 지불할 수 있는 항목 중 각 보유 풀에 해당하는 항목을 소수까지 보충하고 자유롭게 사용할 항목도 채웁니다. 유능한 생물일수록 더 많이 얻습니다. 무엇을 얻는지는 전투에서도 쓰는 기질과 역량에 기웁니다. 보호적이거나 지원적인 생물은 아군을 버티게 하는 것, 무모한 생물은 피해, 체계적이거나 인내심 있는 생물은 적을 억제하는 것을 고릅니다. 유능할수록 반응, 대응 수단, 턴을 바꾸는 다른 효과를 지닐 가능성이 높습니다. 추첨은 전투 자체 시드를 쓰므로 같은 전투는 항상 같은 방식으로 채워집니다. Game Master가 이런 목록에서 이름으로 지정한 행은 선택된 것으로 간주합니다.

보스는 예외일 수 있으므로 Game Master가 전부 작성합니다. 아무것도 빼지 않고 아무것도 채우지 않습니다.

그다음 둘 다 단계에 맞춰 제한합니다.

직접 작성한 생물 도감은 제한하지 않습니다. 작성자의 데이터이므로 Engine이 그대로 받아들입니다.

위치: 보드 위 전투

블록이 보드 한 칸의 거리를 정하기 전까지 전투는 머릿속 장면으로 진행됩니다. distance를 선언하면 격자에서 싸울 수 있으며, 이동, 근접 거리, 사거리, 범위, 시선, 엄폐, 걸어 나가는 상대를 치는 행동이 의미를 갖기 시작합니다. 모두 작성자가 쓴 숫자이며 Engine은 보드만 제공합니다.

"distance": { "label": "ft", "perCell": 5 },
"ranged": { "long": "disadvantage", "adjacentFoe": "disadvantage" },
"cover": { "bonus": 2, "threeQuarters": 5, "saves": ["dex_save"], "creatures": true },
"opportunity": { "budget": "reaction" }

Ember Roads는 그중 한 줄만 선언합니다. 나머지는 필수가 아니라는 점을 보여 줍니다.

"distance": { "label": "paces", "perCell": 2 }

칸. distance.perCell은 한 칸이 자체 단위로 얼마인지이며, label은 그 단위의 이름입니다. 블록 세계의 모든 거리, 즉 economy.movement, 생물의 speed, 무기의 reach와 range, 생물 행동의 reach와 range가 이 단위를 씁니다. 자체 units.distance를 선언한 카탈로그는 자체 perCell로 mechanics.range와 area.size를 변환하며, 선언하지 않은 카탈로그는 이 설정을 씁니다. 0보다 큰 거리는 가장 가까운 칸으로 반올림하되 0으로 만들지 않으므로 숫자를 준 것은 최소 한 칸에 닿습니다. 0은 짧은 거리가 아니라 자체 의미를 유지합니다. mechanics.range의 0은 자신 또는 접촉이며, 다른 이에게 접촉하면 옆 칸에 닿습니다. 무기 행의 reach 또는 range 열이 0이면 해당 종류의 거리가 없는 행입니다.

보드 위 전투 여부. 두 조건을 모두 만족해야 합니다. 블록이 distance를 선언하고 플레이어의 게임이 Tactical 전투 스타일로 설정되어 있어야 합니다. Classic 스타일이거나 규칙 집합에 distance가 없으면 전투는 예전처럼 머릿속 장면으로 진행됩니다. 누구든 누구에게든 겨눌 수 있으며 아래 내용은 전혀 읽지 않습니다.

게임에서 사용할 수 있는 스타일. combat.styles는 규칙 집합을 쓰는 게임이 사용할 전투 스타일을 ID로 지정합니다. classic, tactical 또는 클라이언트가 등록한 스타일이며, 최대 8개를 각각 한 번씩 나열하고 classic과 tactical 중 하나 이상이 있어야 합니다. 생략하면 기존처럼 모든 스타일을 제공합니다. 규칙상 보드가 필요한 규칙 집합(범위, 근접 거리, 엄폐, 협공)은 "styles": ["tactical"]이라고 씁니다. 그러면 New Game 마법사와 게임 설정은 Tactical만 제공하므로 전투에 항상 위치가 있습니다. 목록에 없는 스타일로 이미 저장한 게임은 목록에서 클라이언트가 그릴 수 있는 첫 스타일로 플레이합니다(등록 스타일을 지원하지 않는 클라이언트에서는 나열한 첫 내장 스타일). 제외한 스타일로 게임을 만들거나 설정에서 전환할 수 없습니다. 이미 진행 중인 전투는 시작할 때의 스타일을 유지합니다. 목록은 전투 디렉터를 켰는지와 관계없이 적용되므로 규칙 집합을 쓰는 Marinara 자체의 Classic과 Tactical 전투도 제한합니다. styles를 사용하는 규칙 집합은 Capability API 1.379가 필요합니다.

"combat": {
  "kind": "attack-vs-defense",
  "styles": ["tactical"],
  "distance": { "label": "feet", "perCell": 5 }
}

플레이어가 보는 것. Tactical 스타일 자체 지형으로 보드를 그립니다. 각 칸은 포인터나 방향키로 접근하는 버튼이며, 어떤 곳인지, 누가 있는지, 진행 중인 선택에서 어떤 의미인지 설명합니다. 걷기는 메뉴가 제시한 칸을 밝히고, 각 칸에 자체 단위로 비용을 표시하며 경로를 그립니다. 누군가 그 경로를 공격할 칸은 호박색으로 표시하고 보드 아래에 상대 이름을 적습니다. 표적이 필요한 선택지는 보드와 목록에서 동시에 선택 가능한 상대를 밝힙니다. area가 있는 선택지는 칸을 겨누며, 포인터 아래 칸은 아군을 포함해 누구를 휘말리게 할지 보여 줍니다. 남은 이동량도 자체 단위로 예산 옆에 표시합니다. 화면이 측정하는 것은 없습니다. 모든 칸, 비용, 경로, 표적, 조준 위치는 서버에서 보냅니다.

이동. 한 턴의 허용량은 파티원이면 economy.movement, 생물이면 자체 speed를 perCell로 나눈 뒤 내림한 값입니다. 움직일 수 있는 한 최소 한 칸입니다. 보유자 자신의 턴 시작에 보충되며 행동 전, 사이, 후에 쓸 수 있습니다. 걷고, 치고, 다시 걸을 수 있습니다. 한 칸에 들어가는 비용은 1이고 험한 땅에서는 더 듭니다. 이 기능이 대상으로 하는 테이블탑 격자 방식에 맞춰 여덟 방향의 비용은 모두 같습니다. 아군은 지나갈 수 있지만 누구의 칸에도 멈출 수 없습니다. 상대는 벽이며, 단단한 장애물 칸에는 들어갈 수 없고 두 장애물 칸 사이의 모서리를 가로지를 수도 없습니다.

다른 이동 방식(Capability API 1.113). 생물의 speeds는 걷기 외의 이동을 자체 단위로 줍니다. { "fly": 60, "swim": 30, "climb": 30, "burrow": 20 }이며, "hover": true는 비행자가 떠 있기 위해 움직일 필요가 없다는 뜻입니다(fly 속도가 필요). 파티원의 것은 같은 키를 쓰는 값 참조인 economy.movementModes로 시트에서 읽으며, 종족의 수영 속도나 주문의 비행 속도가 그 예입니다. 0은 그 방식으로 움직이지 않는다는 뜻입니다. speed와 economy.movement는 걷기로 남습니다. 보드에서는 다음과 같습니다.

각 걸음은 충분히 남은 방식 중 가장 싼 방식으로 합니다. 보드가 없는 전투는 이를 전혀 읽지 않으며, 걷기만 하는 사람은 이전과 똑같이 움직입니다.

비행 고도(Capability API 1.114). 규칙 집합이 combat.elevation.levelHeight와 combat.distance.perCell을 주는 보드에서는 비행자에게 그 자리에서 Fly up과 Fly down이 제공되며, 각각 한 단계만큼의 비행을 씁니다(5피트 칸에서 5피트 단계는 한 칸). 아래 지면에서 최대 20단계까지 오를 수 있습니다. 떠 있는 동안에는 다음과 같습니다.

자신과 같거나 더 높은 지면 위로 날아가면 착지합니다. 지상의 비행자가 절벽 위로 날아오르는 것과 같습니다. 새 키는 없습니다. 1.114 이전의 Engine은 비행자를 지면에 두므로, 고도에 의존하는 패키지는 1.114를 선언합니다.

공중 상태(Capability API 1.354). 어떤 보드에서든 비행자가 공중에 있는지는 별도로 관리합니다. 걷기 속도가 없거나 hover가 있으면 공중에서 시작합니다. 지상에서는 무료 Take off 동작, 위로 날기, 또는 비행만 가능한 걸음(물 위나 걷기보다 날기가 저렴한 곳)으로 이륙합니다. 무료 Land 동작(걷기 속도가 있는 경우만)으로 착륙하거나, 부양하지 않는 한 넘어지거나 쓰러지거나 속도가 0이 되면 내려옵니다. 지면까지 아래로 날아도 착륙할 때까지 지면 높이의 공중에 머뭅니다. 공중에 있는 동안 생물 그림은 비행 그림을 사용합니다. 다른 규칙은 아직 이 상태를 읽지 않습니다.

근접 거리와 사거리. 무기 행은 combat.attacks[].reach와 .range에서 가져옵니다. 각각 같은 목록의 열이거나 모든 행에 적용하는 같은 수치입니다.

"attacks": [
  {
    "list": "attacks",
    "budget": "action",
    "name": "name",
    "toHit": { "ability": { "column": "ability" } },
    "damage": { "dice": { "column": "damage" } },
    "reach": { "column": "reach" },
    "range": { "normal": { "column": "range" }, "long": { "column": "long_range" } }
  }
]

행에서 열이 0이면 해당 종류의 거리가 없다는 뜻입니다. 일반 검이 투척 도끼와 같은 목록에 있을 수 있는 방식입니다. 근접 거리가 전혀 없는 행은 한 칸에 닿습니다. 생물 행동은 자체 reach나 range를 쓰고, 카탈로그 능력은 mechanics.range를 씁니다(0은 자신 또는 접촉이며, 다른 이에게 겨누면 한 칸입니다).

둘 다 있는 행은 투척 무기입니다. 근접 거리 안에서는 휘두르기, 바깥에서는 사격입니다. 따라서 아래 사격 규칙은 손에 들고 휘두를 때 적용되지 않으며, 활과 달리 지나가는 상대를 때리는 데도 쓸 수 있습니다.

생물 행동에는 자체 단위로 적용되는 area도 넣을 수 있습니다. { "shape": "cone", "size": 15 }처럼 쓰고, "friendlyFire": false로 아군을 제외합니다. 이로써 브레스가 표적 수가 아닌 보드의 실제 원뿔이 됩니다. 연속 행동 자체에는 형태가 없고 그 안에서 지정한 행동이 각자의 형태를 가집니다. 보드가 없는 전투는 형태를 무시하고 targetCount를 쓰므로, 생물 항목이 둘 다 갖고 어느 쪽에서도 정확하게 표현할 수 있습니다.

형태를 얼마나 멀리 보낼 수 있는가. range가 정합니다. 100피트 던지는 구체라면 사거리가 있습니다. 사거리가 없으면 폭발은 놓은 곳, 즉 행동자 자신의 칸에서 터집니다. 원뿔이나 직선은 그려지는 길이 안의 어디든 겨눌 수 있습니다. 그 경우 칸은 방향만 나타내기 때문입니다. 이는 생물뿐 아니라 카탈로그 항목의 mechanics.area에도 적용됩니다.

ranged는 보통의 normal 거리보다 멀리 쏘거나 옆 칸에 적이 있을 때 사격의 불이익을 정합니다. 각각 "disadvantage" 또는 "normal"이며, 블록을 생략하면 둘 다 불이익이 없습니다. 휘두르기는 사격이 아니므로 두 규칙 모두 적용되지 않으며, 자체 근접 거리 안에서 쓰는 투척 무기도 같습니다.

범위. 항목의 mechanics.area는 보드의 실제 형태가 되어 누군가가 아닌 칸을 겨눕니다. targetCount는 관계없고, 형태가 닿는 수를 정합니다. 항목이 "friendlyFire": false를 지정하지 않으면 그 칸에 선 아군과 적 모두가 영향을 받습니다.

burst, size 2, aimed at X        cone, size 3, aimed right      line, size 3, aimed right
. . . . .                        . . . .                        . . . .
. # # # .                        . . # .                        A # # #
. # X # .                        A # # #                        . . . .
. # # # .                        . . # .
. . . . .                        . . . .

폭발은 겨눈 칸에서 크기 이내인 모든 칸입니다. 원뿔은 행동자에서 그 칸 방향으로 뻗으며 각 단계의 폭은 그 거리와 같습니다. 직선도 같은 방향으로 뻗고 너비는 한 칸입니다. 셋 모두 단단한 장애물에서 멈춥니다.

항목의 mechanics.area나 생물 행동의 area에 있는 직선은 size와 같은 단위의 width를 가질 수 있으며, 최소 한 칸으로 칸 단위 반올림합니다(Capability API 1.128). 예를 들어 너비 10피트인 60피트 직선은 { "shape": "line", "size": 60, "width": 10 }입니다. 생략하면 한 칸이며, 칸 너비가 짝수면 추가 열은 시전자의 왼쪽에 놓입니다.

시선과 엄폐. 둘 사이를 잇는 직선상의 칸을 봅니다. 그 위의 벽이나 산이 사격을 막고 범위가 그 너머로 퍼지는 것도 멈추며, 해당 표적은 메뉴에 나오지 않습니다. 물 너머는 보입니다. 사격은 강을 건너고, 직선 범위도 그 위로 계속 이어집니다. Engine 자체 전투도 같은 시야 검사를 씁니다.

엄폐는 공격자가 선 곳에서, DMG의 선택 격자 규칙의 모서리 선으로 읽습니다. 공격자의 가장 좋은 모서리에서 대상 칸의 각 모서리로 선을 하나씩 긋습니다. 벽이나 산을 지나는 선이 셋이나 넷이면 4분의 3 엄폐이고, 하나라도 그런 것을 지나거나 엄폐 가치가 있는 지형(숲, 폐허)을 지나면 절반 엄폐입니다. 낮은 지형만으로는 절반을 넘지 않습니다. 공격자가 전혀 볼 수 없는 대상은 완전 엄폐이며 메뉴에 나오지 않습니다. 공격에 대해서는 엄폐 가치가 있는 지형에 선 대상이 늘 그랬듯 최소 절반 엄폐를 가집니다. 내성에는 대상과 효과 사이에 있는 것만 도움이 됩니다.

고도. 보드는 최대 세 단계까지 높이를 가질 수 있으며, 위치가 있는 모든 전투는 규칙 집합과 관계없이 높이에 따라 걷고 봅니다. 한 단계 오르는 데는 한 칸이 더 들고, 내려가는 데는 비용이 없으며, 두 단계 이상의 단차는 아무도 걷지 못하는 절벽이고(아무도 밀려 올라가지 않음), 양 끝보다 높은 지면은 시야를 막습니다. 더 높은 곳에서 아래로 쏠 때는 사이의 낮은 엄폐가 아무것도 가리지 않습니다. 규칙 집합은 elevation으로 시스템이 더하는 것을 정합니다(Capability API 1.75, distance 필요).

"elevation": {
  "levelHeight": 5,
  "highGround": "advantage",
  "rangeBonus": 1,
  "falling": { "per": 10, "dice": { "count": 1, "sides": 6 }, "max": 20, "type": "bludgeoning", "prone": "prone" }
}

걸어 나가는 상대에 대한 타격. opportunity.budget을 선언하면, 전투원이 서 있고 행동할 수 있으며 그 예산과 근접 공격 수단을 가진 적의 근접 거리를 벗어날 때, 걷기가 현재 위치에서 멈추고 그 적에게 공격할지 묻습니다. 공격하면 예산을 쓰고 자신의 턴에 같은 공격을 할 때와 똑같이 해결합니다. 보내 주면 비용이 없습니다. 어느 쪽이든 걷기는 멈춘 곳에서 재개하며 지난 칸마다 비용을 지불합니다. 타격으로 이동자가 쓰러지면 그 자리에서 걷기가 끝납니다. 같은 근접 거리를 경로가 몇 번 벗어나든 전체 걷기마다 각 적에게 기회는 한 번입니다. disengage는 남은 턴 동안 이를 막으며, opportunity를 선언하지 않은 규칙 집합에는 이 모든 것이 없습니다.

이 질문은 창이며 전투 전체를 붙잡습니다. 질문받은 모두가 답할 때까지 다른 것은 움직이지 않습니다. 파티원의 창은 플레이어가 답하고, 타격 옆에 Pass가 있습니다. 나머지는 해당 인물을 조종하는 쪽이 답하며, Game Master가 맡은 보스는 Game Master 자체 판단으로 답합니다. 아래 '창'을 참고하세요.

상대가 보드를 쓰는 방식. 아무도 조종하지 않는 상대는 도달 가능한 모든 칸에서 쓸 수 있는 모든 선택지를 평가하고, 걷는 중 맞을 타격마다 점수를 뺍니다. 현재 위치에서 이미 최선을 다할 수 있으면 움직이지 않는 쪽을 선호합니다. 닿는 것이 없으면 거리를 좁히며, standard 목록에 dash가 있으면 먼저 질주합니다.

표시될 수 있는 거부 이유. out-of-reach(닿는 거리보다 멂), no-line-of-sight(사이에 단단한 장애물이 있음), unreachable(걷기 비용을 감당할 수 없거나 멈출 수 없는 칸), bad-cell(형태를 겨눌 수 없는 곳에 조준함)입니다.

서버에서 전투가 블록을 사용하는 방식

규칙 집합이 combat를 선언한 게임은 Engine이 늘 쓰던 같은 저장 전투에서 해당 블록으로 전투를 해결합니다.

화면 표시

전투 화면은 작성자의 용어로 진행합니다. 메뉴는 자체 공격과 능력, 겨루기, 나열한 표준 행동이며 각 항목이 자체 예산과 풀에서 무엇을 쓰는지 알려 줍니다. 턴 순서, 라운드, 이름을 정한 모든 상태와 남은 라운드, 임시 점수, 집중, 빈사 규칙의 두 횟수를 모두 보여 줍니다. 로그는 자체 용어로 실제 계산을 출력합니다. "Juno attacks Rust jackal with Road axe: 8 (5 + 3) + 3 = 11 against Guard 6, a hit." 허용된 모든 행동은 발생 즉시 시트에 쓰므로 전투 중 다시 불러와도 정확하며, Game Master에게는 나중에 이 수치를 다시 바꾸지 말라고 알립니다.

위치가 있는 전투는 초상화 무대 대신 보드에 그립니다. 플레이어의 사용 방법은 '위치'를 참고하세요. 보드, 메뉴, 로그의 모든 거리는 자체 단위로 표시합니다. "Juno moves to 4, 6 for 6 paces and has 2 paces left."

겨루기: 붙잡기, 밀치기, 벗어나기

어떤 동작은 방어를 상대로 한 공격이 아니라 겨루기입니다. 양쪽이 굴려 더 잘한 쪽이 뜻을 이룹니다. 누군가를 붙잡기, 넘어뜨리거나 밀어내기, 벗어나기는 모두 같은 형태이므로 규칙 집합은 각각을 데이터로 표현합니다.

"checks": [
  { "id": "brawn", "label": "Brawn", "value": { "abilityMod": "brawn" } },
  { "id": "wits", "label": "Wits", "value": { "abilityMod": "wits" } }
],
"contests": [
  {
    "id": "grab",
    "label": "Grab",
    "budget": "act",
    "attacker": { "checks": ["brawn"] },
    "defender": { "checks": ["brawn", "wits"] },
    "onWin": { "applies": [{ "condition": "held" }] }
  },
  {
    "id": "break_free",
    "label": "Break free",
    "budget": "act",
    "attacker": { "checks": ["brawn", "wits"] },
    "defender": { "checks": ["brawn"] },
    "from": { "holding": "held" },
    "onWin": { "ends": [{ "condition": "held", "on": "actor" }] }
  },
  {
    "id": "shove",
    "label": "Shove back",
    "budget": "act",
    "attacker": { "checks": ["brawn"] },
    "defender": { "checks": ["brawn"] },
    "ties": "attacker",
    "onWin": { "push": 4 }
  }
]

지면 아무 일도 없습니다. 붙잡기 실패가 바로 그것입니다.

겨루기는 패키지 규칙 집합에서 Capability API 1.43입니다.

창: 전투를 보류하기

어떤 순간은 현재 행동자가 아닌 다른 사람의 차례입니다. Engine은 대신 결정하지 않고 그 사람을 위해 전투를 보류합니다. 이 멈춤이 창입니다.

창을 여는 상황은 일곱 가지이며, 둘은 이미 선언한 내용에서 나옵니다.

마지막 여섯 가지는 카탈로그 항목이나 생물 자체 행동이 기다리는 순간을 지정해 요청하는 것입니다. 한 행동이 used와 aimed를 모두 열면 사용에 대해 먼저 묻고, 아무도 취소하지 않으면 다음으로 겨눠진 사람들에게 묻고, 둘 다 답한 뒤 해결합니다. 명중은 각 굴림이 명중할 때마다, 다침은 행동 전체가 끝난 뒤 묻습니다.

어떤 계기로 열렸든 창은 다음과 같이 동작합니다.

처음 두 가지에는 추가 선언이 필요 없습니다. opportunity.budget이 있는 규칙 집합은 하나를, signaturePoints가 있는 생물 도감은 다른 하나를 얻습니다. 둘 다 없는 규칙 집합은 보지 못합니다.

항목이 기다릴 순간 지정하기. mechanics.reaction을 true 대신 객체로 작성하세요.

"reaction": { "on": "aimed", "at": "source", "cancels": true }

budget도 지정하세요. 없으면 목록의 기본값을 씁니다. 반응은 거의 항상 자체 예산을 소모하며, 이것이 한 턴에 여러 번 사용하는 것을 막습니다.

비용은 누구에게든 묻기 전에 이미 지불합니다. 취소된 행동은 발생만 중단되며 구매했던 사실까지 없어지지는 않습니다. 예산과 풀은 이미 소모되었습니다. 시스템이 이를 환급하더라도 아직 표현할 수 없습니다.

대응 수단은 다음과 같이 작성하며, 보드에서는 자체 range 안에 있는 사람에게만 응답합니다.

"mechanics": {
  "kind": "utility",
  "range": 8,
  "free": true,
  "cost": [{ "pool": "luck", "amount": 1 }],
  "reaction": { "on": "used", "cancels": true, "against": { "catalogs": ["knacks"] } }
}

지불한 만큼만 닿는 대응 수단(Capability API 1.116). 취소하는 used 반응의 "upTo": "paid"는 응답 자체보다 높지 않게 지불한 것만 멈추며, "above": { "check": <value>, "dc": 10 }은 그래도 더 높은 것을 멈추는 판정으로, dc에 그 레벨을 더한 값을 상대로 합니다. 슬롯 레벨 이하의 주문을 멈추고 그보다 높으면 10 + 주문 레벨에 대한 주문 시전 능력치 판정을 요구하며 다른 주문처럼 상위 시전하는 5e의 Counterspell은 다음과 같습니다.

"reaction": {
  "on": "used",
  "cancels": true,
  "against": { "catalogs": ["spells"] },
  "upTo": "paid",
  "above": { "check": { "abilityModFromField": "spellcasting_ability" }, "dc": 10 }
}

지불한 것의 레벨은 그것이 나온 풀의 레벨입니다. 풀이 레벨을 지정하면 풀 자체의 level(보유자 시트에서 읽는 값. 워락의 슬롯 레벨로 시전하는 5e의 계약 슬롯), 아니면 그룹 안의 위치이며 첫 풀이 1입니다. 비용이 없었거나 그룹이 없는 풀에서 나온 것은 레벨 0이므로 그런 대응 수단은 모두 이를 멈춥니다. 판정은 판정에 대한 응답자의 상태를 적용한 전투 자체 주사위입니다. dice-pool 전투에는 도달할 DC가 없으므로 above를 거부합니다. 시트가 없는 생물은 판정을 { "const": n }으로 씁니다. 응답이 자신보다 높은 것에 닿을 때마다 로그에 레벨과 굴림이 나오며, 멈추면 평소의 줄이 이어집니다. above가 없으면 더 높은 것은 멈추지 않으며, 응답의 비용은 여전히 소모됩니다.

명중 직후의 순간. hit에 대한 항목으로 Shield, Parry, Uncanny Dodge를 표현합니다. 공격은 굴림 뒤 보류되고, 피해를 주기 전에 명중당한 사람에게 묻습니다. 그 사람이 취한 것은 그 공격에 적용됩니다. 굴림을 다시 하지 않고 현재 방어에 대해 다시 확인하므로 방어를 더하는 상태는 명중을 빗나감으로 바꿀 수 있으며, 항상 명중하는 자연 눈은 여전히 명중합니다. 응답으로 건, 공격 하나 동안 유지되는 상태(endsAfter: "attacked")는 피해를 포함해 이번 공격에 적용되고 그 공격으로 소모됩니다. "그 공격의 피해 절반"을 표현하는 방법이 이것으로, 공격 하나에 대한 resist-all입니다.

"mechanics": {
  "kind": "buff",
  "targets": "self",
  "budget": "reaction",
  "reaction": { "on": "hit" },
  "applies": [{ "condition": "shielded", "duration": { "rounds": 1, "at": "turn-start" } }]
}

공격은 보류된 곳에서 정확히 재개합니다. 나머지 대상과, 다른 행동으로 이루어진 생물 행동이면 나머지 부분입니다. 그런 응답을 가진 사람에게 명중하는 각 굴림은 차례로 보류되며, 창이 열린 동안 저장한 전투도 같은 방식으로 돌아옵니다. 창 안에서 한 공격(걸어 나가는 상대에 대한 타격, 고유 행동, 응답)은 보류되지 않습니다. 창 안에서 열린 것은 다른 창을 열지 않기 때문입니다. 로그는 창이 열릴 때 굴림과 그 굴림이 상대한 값을 보여 주고, 응답이 방어를 바꿨다면 이제 빗나가는지도 보여 줍니다. Engine이 조종하는 상대는 명중을 빗나감으로 바꿀 때만 방어 수단을 씁니다.

순간을 지정하는 패키지는 Capability API 1.33, used나 against를 쓰는 패키지는 1.44가 필요합니다. hit을 기다리는 패키지는 1.46이 필요합니다.

주문 하나를 이름으로 응답하기(Capability API 1.117). against는 catalogs 옆에 <catalog>/<entry> 형태의 entries를 지정할 수 있으며, 둘 중 하나라도 일치하면 순간이 열립니다. also는 같은 응답을 최대 세 개의 다른 순간에 각자 자체 against와 함께 받습니다. 상태의 noDamageFrom은 상태가 유지되는 동안 피해 종류와 관계없이 그 항목들의 피해를 보유자에게서 완전히 막습니다. 5e의 Shield는 공격이 명중할 때와 Magic Missile이 시전자를 겨눌 때 쓰며, 그 아래에서 Magic Missile은 아무 효과가 없습니다.

"reaction": {
  "on": "hit",
  "also": [{ "on": "aimed", "against": { "entries": ["spells/magic-missile"] } }]
}
{
  "condition": "shielded",
  "modifiers": [{ "to": "defense", "flat": 5 }],
  "noDamageFrom": ["spells/magic-missile"]
}

첫 순간만 취소할 수 있으므로 취소하는 반응에는 also가 없습니다. 항목이 지정한 카탈로그는 규칙 집합에 있는 것이어야 합니다. 그 안에 없는 항목은 순간을 열지 않습니다. 이렇게 막은 타격은 로그에 대상이 면역인 타격으로 나옵니다.

일부 타격에만 응답하기(Capability API 1.118). hit 순간은 "blow": "melee"나 "blow": "ranged"라고 할 수 있습니다. 대상이 무기의 근접 거리 안에 서 있는 동안 타격은 근접이므로, 멀리서 던진 단검은 원거리이고 대상 옆에서 쓴 같은 단검은 근접입니다. 근접 거리만 있고 사거리가 없는 무기는 항상 근접이며, 사거리만 있고 근접 거리가 없는 무기는 항상 원거리입니다. 보드가 없는 전투에서는 근접 거리가 있는 무기를 손에 들고 휘두르는 것으로 봅니다. falls를 뺀 모든 순간의 "seesSource": true는 보유자가 그것을 일으킨 사람을 보는 동안만 순간을 엽니다. 보드에서 둘 사이에 시선이 있다는 뜻이며(보드가 없으면 모두가 모두를 봄), Hide 표준 행동을 한 사람은 그 효과가 다음 턴 시작에 사라질 때까지 결코 보이지 않습니다. 5e의 Parry는 둘 다입니다.

"reaction": { "on": "hit", "blow": "melee", "seesSource": true }

두 키는 also의 순간에도 쓸 수 있으며, blow는 hit 순간에만 씁니다.

낙하 받아 내기(Capability API 1.124). also를 포함해 falls에 대한 반응은 낙하가 피해를 주거나 넘어뜨리기 전에, 턱에서 떨어지는 생물이나 지면으로 떨어지게 된 비행자에 응답합니다. 사거리와 대상 편은 낙하자를 기준으로 검사하며, 응답은 그 생물에게 적용됩니다. Feather Fall이라면 항목에 다음 mechanics를 주고 시트의 실시간 상태에 feather_falling을 선언하세요.

{
  "kind": "buff",
  "targets": "ally",
  "range": 60,
  "budget": "reaction",
  "cost": [{ "pool": "slots_1", "amount": 1 }],
  "reaction": { "on": "falls" },
  "applies": [{ "condition": "feather_falling", "duration": { "rounds": 10 } }]
}

그 combat.conditions 항목은 { "condition": "feather_falling", "fallsSafely": true }입니다. 이 상태는 유지되는 동안 낙하 피해와 낙하가 걸 넘어짐 상태를 막지만, 낙하를 일으킨 상태를 없애지는 않습니다. 시전자 자신의 낙하에만 응답하려면 targets: "self"를 쓰세요. 낙하에는 원본 항목이 없으므로 그 반응은 cancels, blow, seesSource, against를 가질 수 없습니다. 단일 대상 항목은 각 낙하마다 따로 묻습니다. 이것은 착지를 해결할 뿐 느려진 하강을 추적하지는 않습니다.

다른 생물을 위해 응답하기(Capability API 1.131). for의 기본값은 self입니다. ally는 보유자를 빼고, any는 보유자를 포함합니다. 둘 다 카탈로그 거리 단위로 필요한 within 안에 있는 대상 편의 보유자에게 묻으며, aimed나 hit에서만 묻습니다. 이 키들은 각 also 순간에서도 작동합니다. seesSource는 여전히 공격자를 볼 것을 요구합니다. Protection은 공격 주사위를 굴리기 전에 출처에 own-attacks-disadvantage를 겁니다. 그 this-action 지속 시간은 행동이 해결되거나 취소되면 끝납니다. 명시적인 출처 사거리가 없으면 곁에 있는 이의 응답은 그 출처에 닿으며, within은 보호받는 생물까지의 거리를 잽니다. 시트에 protected_attack을 선언하고 그 전투 상태에 그 효과를 주세요.

{
  "kind": "debuff",
  "targets": "enemy",
  "budget": "reaction",
  "reaction": { "on": "aimed", "for": "ally", "within": 5, "at": "source", "seesSource": true },
  "applies": [{ "condition": "protected_attack", "duration": "this-action" }]
}

응답을 대상에게 걸기. at: "target"은 공격받은 생물에게 적용되며, source는 여전히 공격자입니다. Shield Guardian은 아뮬렛 착용자를 5 이내의 아군으로 표현하며, parrying은 방어 +2를 줍니다. 보류된 명중은 응답 뒤 그 아군의 방어를 다시 확인합니다.

{
  "kind": "buff",
  "targets": "ally",
  "range": 5,
  "budget": "reaction",
  "reaction": { "on": "hit", "for": "ally", "within": 5, "at": "target" },
  "applies": [{ "condition": "parrying", "duration": "this-action" }]
}

턴 시작 시. on: "turn-start"는 항목의 대상 편 생물이 그 사거리 안에서 턴을 시작할 때, 그 생물이 행동하기 전에 묻습니다. 그 생물이 source입니다. 해로운 항목은 반대편에, 도움이 되는 항목은 자기 편에 응답합니다. cancels, blow, against, upTo를 가질 수 없습니다. Unnerving Mask 생물 행동은 Wisdom 내성을 요구합니다. 영향을 받은 생물의 시계로 1라운드는 이번 턴 내내 유지되고 턴이 끝날 때 만료됩니다(of: "source"는 생략).

{
  "id": "unnerving_mask",
  "name": "Unnerving Mask",
  "range": 30,
  "budget": "reaction",
  "reaction": { "on": "turn-start", "at": "source", "seesSource": true },
  "save": { "save": "wis_save", "difficulty": 14, "onSuccess": "negates" },
  "applies": [{ "condition": "frightened", "duration": { "rounds": 1 } }]
}

내성으로 취소하기. cancelSave: { save, dc }에는 cancels가 필요하며, 보유자는 평소의 내성 수정치로 굴립니다. 성공하면 취소하고, 실패하면 원래 행동이 해결되며, 어느 쪽이든 반응을 씁니다. against.actions는 능력치 블록 행동 1~12개를 지정하며, 전체 이름을 대소문자 구분 없이 비교합니다(각각 최대 80자). Rock Catching은 타격 피해만이 아니라 모든 피해를 포함해 공격 전체를 취소하는 것으로 바위 받기를 표현합니다. 내성 ID는 규칙 집합의 것입니다(여기서는 dex, 함께 제공되는 5e 예제에서는 dex_save).

{
  "on": "aimed",
  "cancels": true,
  "cancelSave": { "save": "dex", "dc": 10 },
  "against": { "actions": ["Rock"] }
}

여러 낙하자 받아 내기. targetCount가 1보다 큰 falls 항목은 한 타격이나 효과로 떨어지는, 사거리 안과 대상 편에 있는 자격 있는 생물들을 제공합니다. 메뉴와 디렉터는 기본적으로 가장 가까운 것부터 개수까지 자격 있는 모두를 고르며, 플레이어는 선택을 바꿀 수 있습니다. 나중의 낙하는 별도 사건입니다. Feather Fall은 위와 같은 fallsSafely 상태를 씁니다.

{
  "kind": "buff",
  "targets": "ally",
  "targetCount": 5,
  "range": 60,
  "budget": "reaction",
  "reaction": { "on": "falls" },
  "applies": [{ "condition": "feather_falling", "duration": { "rounds": 10 } }]
}

아직 지원하지 않는 것

규칙 집합이 Engine이 하지 못하는 일을 주장하지 않도록 명확히 적습니다.