ルールセットの戦闘
このページでは、ルールセットが戦闘にどう関わるかを決めます。battleブロックはMarinaraの戦闘にシートを貸し出し、combatブロックはベスティアリ、盤面、リアクション、対抗判定とともに、ルールセット独自の規則で戦闘全体を解決します。ルールセットの作者向けのページです。始める前に、Game Modeのルールセットを作成するを読んでください。
このページのセクションは次のとおりです。
- 戦闘への橋渡し: シートをMarinaraの戦闘に貸す
- 持ち込むものと持ち帰るもの
- 項目がスキルになる仕組み
- Combat: 独自のルールで解決する戦闘
- 各キー
- 状態、ダメージ、魔法に対するセーヴ
- プールで振る戦闘: dice-pool
- シンボルダイスで振る戦闘: symbol-pool
- 最低ダメージダイス
- ひるませる命中
- 標的が負傷の種類を選ぶ
- 攻撃で動くイニシアチブ
- 戦闘がmechanicsから読み取るもの
- クリーチャー: 戦闘が読み取るベスティアリ
- 位置: 盤面上の戦闘
- サーバー側で戦闘がブロックを使う仕組み
- 画面上の表示
- 対抗判定: 掴む、押し出す、振りほどく
- ウィンドウ: 戦闘を保留する
- 未対応
戦闘への橋渡し: シートをMarinaraの戦闘に貸す
デフォルトでは戦闘はシートを知りません。従来どおりに戦闘者を組み立て、戦闘後もシートのHPが変わらないことがあります。
任意のbattleブロックは、シートの数値を戦闘へ貸し、結果を書き戻すという一方向でこれを変えます。戦闘を独自の規則に従わせるものではありません。 ダイス計算も、誰が誰に何点当てるかもMarinaraの規則です。そのため体力は元の数値ではなく最大値への割合で渡します。シートで半分ならMarinaraが作るHPバーも半分で始めます。HP9のプールを、1撃12ダメージの戦闘へそのまま持ち込みません。
"battle": {
"health": { "pool": "grit" },
"energy": { "pool": "luck" },
"skills": [{ "list": "knacks" }]
}health: 必須です。戦闘中のHPとなるライブプールで、sheet.live.poolsの1つが必要です。行がプールになったリストは使えません。energy: 任意です。戦闘が消費し、MPバーになるライブプールです。HPを燃料にできないため、healthとは別のプールが必要です。slots: 任意です。1回に1つ消費するライブプールで、それぞれ1~9のlevelを持ちます。[{ "pool": "slots_1", "level": 1 }]のように指定し、レベルとプールはそれぞれ重複不可です。skills: 任意で最大8個です。行が戦闘スキルになるシートのリストです。カタログ由来で、元項目にmechanicsがある行だけが対象です。手入力の行は数値上の効果を示しません。onlyWhenは準備済み呪文など、行で有効であるべき真偽値列です。alwaysWhenは未準備でも唱えられる呪文など、例外的に通す列と値です。onlyWhenの例外なので、併記なしでは拒否されます。
持ち込むものと持ち帰るもの
開始時、ゲームがシートを持つ各仲間について、体力プールの最大値に対する割合でMarinaraのHPバーの開始位置を決め、エネルギーをMP、各スロットプールをそのレベルのスロット、印付きの行をスキルにします。最大HP、攻撃、防御、速度、レベルはMarinaraの数値のままです。体力プールが0なら倒れた状態で始め、0より大きければHP1未満にはしないため、小さい割合の丸めで倒れることはありません。
終了時、最終HPバーの割合を体力プールの尺度へ戻し、開始時との差をダメージか回復として適用します。エネルギーとスロットは割合でなく個数なのでそのまま戻します。シートのボタンと同じ規則を通し、拒否された変更は強制せず省略して報告します。HPが変わらなかった戦闘では体力の変更を書かないため、往復の変換だけでシート値が変わることはありません。
どちらにも含まれないものは、攻撃ロール、セーヴィングスロー、精神集中、高いコストによる追加効果です。将来の本格的な戦闘システムが読むためにmechanicsへありますが、この橋渡しは適用せず、対応すると称してはいけません。
放棄した戦闘は何も書き戻しません。開始元のメッセージを削除したり、戦闘が終了しなかったりした場合、シートは元のままです。その戦闘は起きなかったことになります。
項目がスキルになる仕組み
カタログ項目のmechanicsブロックは、次のように読み取られます。
kindがスキルの種類になります。utility項目とreactionの指定があるものは、Marinaraの戦闘に受け皿がないため除外されます。amountは威力を決めますが、ダメージの数値ではなく戦闘者自身の攻撃力に対する倍率として使います。より大きいダイスがより弱く当たることはなく、倍率も自動生成スキルがすでに使う範囲に収まります。rangeとarea.sizeをカタログのunits.distance.perCellで割り、グリッドのマス数にします。切り捨てでゼロになることはありません。バーストは半径、コーンはその半分、ラインは1マスになります。範囲のあるものは覆う敵全員を対象とし、friendlyFireも反映されます。damageTypeはスキルの属性になります。targetsは引き継ぎません。回復、強化、攻撃を誰に向けられるかは、Marinaraの戦闘がスキルの種類から判断します。- エネルギープールの
costはMPコストになり、複数のエネルギーコストは合算します。スロットちょうど1つのcostは、そのレベルのスロットを1つ消費します。Marinaraの戦闘が請求するのは1種類のエネルギー量かスロット1つだけで、両方には対応しません。そのため、スロット2つ、2つのレベルのスロット、スロットとエネルギーの両方を消費する項目は戦闘から除外されます。体力やクラスの資源など、ほかのプールのコストも同様です。そうしないと、Engineが無料で提供してしまうためです。 buffとdebuffはMarinara自身の強化と弱体化になります。項目の文章にシートの状態の解除など、ほかの効果が書かれていても戦闘では適用されません。戦闘外でしか意味を持たない効果の項目には、mechanicsを付けないでください。
coverage.combatは別の指定で、意味も変わりません。戦闘がそのシステムのルールに従う場合だけ設定してください。
Combat: 独自のルールで解決する戦闘
前述のbattleブロックは、計算をMarinaraに任せたままシートの数値を戦闘に貸し出します。任意のcombatブロックは別のもので、独自のルールが戦闘をどう解決するかを定めます。resolutionが判定の種類にパラメーターを渡すのと同じように、Engineが持つ戦闘の種類をパラメーター化し、その中の名称はすべて作者が決めます。種類は3つです。ダイスを合計して数値と比較する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 }
}各キー
kind:"attack-vs-defense"(片方が相手の防御に対してダイスを振り、命中すればダメージを与えます)、"dice-pool"(「プールで振る戦闘」を参照)、"symbol-pool"(「シンボルダイスで振る戦闘」を参照)のいずれかです。以下のキーはどの方式でも同じ意味で、その方式の数値の読み方で読みます。health: 必須です。戦闘で減るものです。{ "pool": "grit" }なら減算するライブプールで、一時的なバッファがある場合はダメージで先にそれを消費します。{ "track": "harm" }なら印を付ける負傷トラックで、damageKindsの併記が必要です。または、{ "track": "wounds" }で、minからmaxへ向かって埋まる通常のトラック(levelsもboxesもないもの)を指定できます(Capability API 1.383)。ダメージでポイントが増え、回復で減り、maxに達すると、プールがゼロになったときと同じく戦闘不能になります。GenesysのWoundsがその一例で、Wound Thresholdがmaxです。しきい値を超えたときにだけ倒れるシステムでは、maxをしきい値より一つ大きくします。通常の体力トラックはdefaultから始まり(startFromではありません)、maxから始めることはできず、damageKindsも持てません。シートが計算するmaxは、プールの最大値と同じく各キャラクター自身の値です。どのトラックも一時ポイントは与えません。defense: 必須の値参照です。プレイヤーが入力するフィールドか、作者が計算する派生値です。initiative: 必須です。開始時に一度振るダイスと、任意の修正値参照です。同値なら修正値が高い方が先で、それも同じなら戦闘の設定時の順序に従います。"each": "round"は、新しいラウンドの開始ごとに、その時点の修正値で全員のイニシアチブを振り直し(そのため負傷トラックを読む修正値なら、負傷後は遅くなります)、ラウンドは新しい順序の先頭から始まります。Capability API 1.47です。dice-poolの戦闘では、代わりにプールとして振れます。pool(値参照)はダイスの個数で、その成功数にplusを加えた値が数値になり、diceやmodifierは併記しません。poolが必要なresourceは、その数値を保持して攻撃で動かせるようにします(後述の「攻撃で動くイニシアチブ」を参照)。Capability API 1.48です。attackRoll:attack-vs-defenseでは必須で、解決方式自身のプールを振るdice-poolでは拒否されます。ダイス、二回振って片方を使うか(advantage)、単一ダイスの最大・最小の目の効果(naturals.max:critical、hit、none、naturals.min:miss、none)、クリティカルヒットがダメージに与える効果(critical:double-diceはダメージダイスをもう一度振り、max-diceはその最大の目を一度加え、noneは通常の命中)を指定します。判定と同じく、特別な出目には単一のダイスが必要です。戦闘内のセーヴも同じダイスを振ります。criticalFromはクリティカルの面を広げます。攻撃者のシートから読む、クリティカルと数える最小のナチュラルの面の値で、5eのChampionでシートの値が「19」なら{ "field": "critical_from" }です。ダイスの最大の面に収められ、2未満の値は範囲がないことを意味し(フィールドを「0」のままにしたキャラクターと同じく、最大の面だけです)、naturals.maxをcriticalにした単一のダイスが必要です。Capability API 1.81です。economy: 必須です。budgetsは一ターンに使える行動枠で、ID、ラベル、per(turnは所有者自身のターン開始時に、roundは新しいラウンドの開始時に補充)、countを持ちます。最初に宣言した行動枠が主枠で、標準アクションはこれを消費します。movementは任意の値参照で、独自の距離単位による一ターンの歩行距離です。盤面上の戦闘が読み取ります(「位置」を参照)。attacks: 任意です。行が武器になるシートのリストです。nameは行の名前にするテキスト列、damage.diceはダイス列で、toHit.ability、toHit.proficiency、toHit.bonus、damage.ability、damage.bonus、damage.typeはそれぞれ同じリストの列を指定します。ability列は独自の能力値IDのいずれかを持つenumです。それ以外の値は何も加算しません。proficiency列はbooleanで、オンなら習熟ボーナスを加算します。読み取れるダイスがない行は攻撃にならないため、同じリストのロープは単なるロープのままです。toHit.skillは、スキルIDのいずれかを持つenum列を指定します。行はそのスキルの判定が加える値を加え、行自身のabilityが能力値を指定する場合は、判定のwith=による入れ替えとまったく同じく、スキルの能力値の代わりにそれを使います(Capability API 1.47)。abilityChoicesは、行の能力値列の値を、ルールセットで定義した二つ以上の能力値IDに対応付けます(Capability API 1.793)。その値を読む行は、命中に最も多く加算する能力値で攻撃し、ダメージにも同じ能力値を使います。SRD 5.1のFinesseを表現するためのもので、列の値にfinesseを含め、{ "finesse": ["str", "dex"] }と記述します。その値自体が能力値である場合、シートにない能力値を指定する場合、または能力値列の選択肢にない場合は拒否されます。toHit.sheetBonus(Capability API 1.800)は、シートから読み取った数値を命中に加えます。valueには任意の値参照を指定でき、when: { "column": ..., "equals": ... }は、その列にその値が入っている行だけに適用を限定します。SRD 5.1のArcheryにある「遠隔武器で行う攻撃ロールに+2のボーナス」は、reachの値が「0」の行で特性列のlistSumを読み取るため、投げたダガーには加算されません。strikesは任意の値参照で、このリストの行動枠を一回消費すると何回の打撃を得るかを示します。手持ちの打撃がない状態で行を選ぶと行動枠を消費し、残りを手持ちにします。手持ちがある間、strikesを宣言したすべての行は行動枠を消費しません。そのため、別の武器、別の標的、合間の歩行が自然にメニューから選べます。strikesCappedByは、その行自身をリストの打撃回数に関係なく一回に制限するブール列を指定します。使い手の回数にかかわらず一ターンに一回しか撃てない武器のためのもので、SRD 5.1のLoading特性を表現するために用意されています。もともと一回の消費で一打撃しか得ないリストでは意味がなく、拒否されます。手持ちの打撃は一つのリストではなく戦闘者に属します。二つの武器リストが両方ともstrikesを宣言しているキャラクターは、どちらの行を振るっても同じ手持ちを消費します。獲得したターンの終了時に消去されます。何も指定しないリストは、一回の消費で一打撃を得ます。この機能以前のすべての戦闘と同じです。
{
"list": "attacks",
"budget": "action",
"name": "name",
"strikes": { "field": "attacks_per_action" },
"damage": { "dice": { "column": "damage" } }
}abilities: 任意です。カタログの印が付いた行が能力になるシートのリストで、battle.skillsとまったく同じくonlyWhenとalwaysWhenで絞り込みます。各能力の効果は元の項目のmechanicsに従います。このブロックでは、デフォルトで消費するbudget、命中判定をする項目に加えるtoHit、項目のセーヴの目標値となるsaveDifficultyを指定します。項目自身のセーヴであれ、付与した状態を終了するセーヴであれ、配置先のリストにsaveDifficultyがない項目は拒否されます。目標値のないセーヴは常に成功してしまうためです。
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から、難易度を「8 + その攻撃」から求め、ウィザードのものは代わりにIntelligenceから求められます。列は出所のリストに存在する必要があり、valuesには、1~20項目を指定します。各項目はどちらの参照も置き換えられます。省略した参照、列の値がない場合、列挙されていない値では、出所自身の参照を保ちます。戦闘、シートの行の要約、Game Masterの要約は、同じ行ごとの数値を読みます。stampとbyColumnはどちらも、schemaVersion 2とcapabilityApi 1.108以降が必要です。
standard: 任意で、固定リストdash、disengage、dodge、help、hide、readyから選びます。dodge(回避中の者への攻撃は二回振って悪い方を使う)とhelp(援護された味方の次の攻撃は二回振って良い方を使う)は常に解決します。dash(同じ移動量をもう一度得る)とdisengage(このターン、離れる際に攻撃されない)は盤面上では解決し、盤面外では記録します。hideとreadyは受け付けますが、まだ何もしません。standardEffects: 任意で、標準アクションのフラグだけでは表せない部分です。現在対応するのはdodgeだけです。{ "dodge": { "saves": ["dex_save"] } }は、回避が続く間に二回振って良い方を使うセーヴを指定します。シートに宣言したセーヴだけを指定し、standardリストにdodgeがある場合だけ使ってください。省略すれば回避は従来どおり、命中しにくくなるだけです。{ "help": { "beside": true } }(Capability API 1.771)は、相手に隣接している場合だけ援護を提示し、その援護は援護者に隣接していた相手に対してだけ有効になります。standardリストにhelpが必要です。conditions: 任意です。独自の状態IDを効果に対応付けます。シートと戦闘の状態は一つの記録となり、毒を受けたキャラクターは戦闘後も毒のままです。効果は固定リストです。own-attacks-advantage、own-attacks-disadvantage、attacks-against-advantage、attacks-against-disadvantage、attacks-against-adjacent-advantage、attacks-against-far-disadvantage、attacks-from-adjacent-critical、cannot-act、cannot-react、speed-zero、half-move-to-stand、ends-on-damage、own-saves-advantage、own-saves-disadvantage、own-checks-advantage、own-checks-disadvantage、resist-all、cannot-target-source、cannot-target-source-side(1.278)、cannot-approach-sourceです。failsSavesは、ダイスを振らずに失敗するセーヴを指定します。距離や移動が必要な六つ(attacks-against-adjacent-advantage、attacks-against-far-disadvantage、attacks-from-adjacent-critical、speed-zero、half-move-to-stand、cannot-approach-source)は盤面のある戦闘だけが読み取り、盤面なしでは意味を持ちません(「位置」を参照)。cannot-reactの所有者は歩行で開く応答ウィンドウから除外されるため、応答を求められません。効果に加えて、四つのキーがあります。modifiers: 状態の間に変更する数値です。後述の「状態が変更する数値」を参照してください。saves: 二つのセーヴ効果と、セーヴへの修正値の対象とするセーヴです。省略するとすべてが対象です。どちらも併記せずに指定すると拒否されます。skills: 二つの判定効果と、独自のスキルを指定しない判定への修正値の対象とするスキルです。省略するとすべてが対象です。どちらも併記せずに指定すると拒否されます。戦闘の対抗判定はスキルではなく戦闘自身の判定を振るため、スキルに絞り込んだものは対抗判定には届きません。それらのスキルでの戦闘外の判定はこれを読みます(戦闘外の判定を参照)。Capability API 1.53です。whileSourceInSight: 状態を付与した相手が所有者の視線内にいる間だけ有効になるものです。trueなら状態全体を制限し、その状態自身の効果のリストなら列挙した効果だけを制限して残りは維持します。相手が見えるかに関係なく近づけなくする恐怖は、これを必要とします。状態が持っていない効果を指定すると拒否されます。盤面がなければ視線を遮れないため、どちらの場合もすべて有効です。endsWhenSourceDown: 状態を付与した相手が倒れた瞬間に解除します。- 感覚(Capability API 1.127): 状態の
lacksは持ち主が持たない感覚を指定し、カタログの項目のmechanics.needsやクリーチャーのアクションのneedsは、それが効果を及ぼすために標的が持つべき感覚を指定します。5eのDeafenedには"lacks": ["hearing"]と書き、Commandにはそのmechanicsに"needs": ["hearing"]と書きます。聴覚を失った標的はCommandの標的メニューから除かれます。聴覚を必要とする範囲や複数標的の効果は、その標的を完全に飛ばし、セーヴもダメージも状態もありません。Deafenedが終わると、その標的は再び対象になります。各リストは、ルールセット独自の言葉による一~四個の重複しない感覚IDを持ちます。Engineは感覚の名前を知りません。 - シートが許す間だけの使用(Capability API 1.166): カタログの項目の
mechanics.usableWhenは{ "value": <value reference>, "atLeast": n, "atMost": n }(範囲の一方か両方)です。戦闘では、持ち主のシート、ライブ状態、アイテムから読む値が範囲内にある間だけ、持ち主のターンかリアクションのウィンドウで項目が提示されます。メニューを描くたびに読みます。5eのProtectionには手に持った盾が必要です。"usableWhen": { "value": { "itemStat": { "from": "worn", "pick": "count", "category": "shield" } }, "atLeast": 1 }です。Rageの「重装鎧を着ていない」は、重装鎧の数に"atMost": 0を付けた同じものです。ステータスブロックとして書いたクリーチャーにはシートがないため、何も妨げません。 - 付与者のシートが許す間だけ付与する状態(Capability API 1.167): カタログの項目のmechanicsやアイテムの使用の
appliesの項目は、usableWhenと同じ形の"when"を持てます。付与しようとする瞬間に、付与者のシート、ライブ状態、アイテムから読み、範囲外の項目は飛ばします。ほかの項目は引き続き付与されます。5eのRageは、四項目の上限の中でragingと三つのダメージの状態の一つを付与します。{ "condition": "raging_damage_2", "duration": { "rounds": 10 }, "when": { "value": { "derived": "barbarian_level" }, "atMost": 8 } }、次に"atLeast": 9, "atMost": 15のraging_damage_3、"atLeast": 16のraging_damage_4です。シートのない付与者はすべての項目を付与します。クリーチャーのステータスブロックや状態のonEndには読む付与者のシートがないため、そこではwhenは拒否されます。schemaVersion 2とcapabilityApi 1.167以降が必要です。 - クリーチャーの種類と標的の条件(Capability API 1.168):
combat.creatureTypesは戦闘員がなり得るものを列挙します。`{ "types": [{ "id": "dragon", "label": "Dragon" }, ...], "tags": [{ "id":
"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`の条項を届く標的に対してだけ数え、シートの単純な平均はそれを除外します。戦闘パネルとGMは、各戦闘員の種類とタグを見られます。schemaVersion 2とcapabilityApi 1.168以降が必要です。
- 状態の終了(Capability API 1.125): Charm Personは
"endsWhen": ["harmed-by-source-side"]を使います。付与した者かその側の誰かによるゼロより大きいダメージ、またはその者たちが攻撃、セーヴ、有害な状態で持ち主を狙うと、攻撃が外れてもセーヴが成功しても、有害なアクションが完全に解決した後に状態が終わります。"saveWhenDamaged": trueは、ダメージでターンのセーヴを繰り返します。ゼロより大きいダメージを受けるたびに、付与したアクションのsaveEndsを保存された難易度で繰り返し、成功すれば終わります。保存されたセーヴや難易度がなければ、何も振りません。Hypnotic Patternは"endsWhen": ["damaged"]と"shakeOff": { "budget": "action" }を使います。ゼロより大きいダメージで即座に終わるか、持ち主の側の別の戦闘員が自分のターンにその行動枠を消費して終わらせられます。shakeOff.reachはルールセットの距離の単位で、デフォルトは一マスです。盤面がなければ距離は測りません。行動の経済はその行動枠を宣言する必要があります。endsWhenは一~二個の重複しない項目を持ちます。これらのキーは、出所のダウンや集中による終了を変えません。ゼロより大きいダメージでだけ行い、ターンの開始時や終了時には行わないセーヴには、saveEnds.at: "damaged"を使います(Capability API 1.129)。Dominate Personのappliesは{"condition":"dominated","duration":"until-save","saveEnds":{"save":"wis_save","at":"damaged"}}で、saveWhenDamagedがなくても、付与したアクションの保存された難易度で打撃ごとに一回振ります。 - HasteとSlowが変える、行動の経済(Capability API 1.76)です。
budgets:[{ "budget": "haste", "flat": 1 }]は、持ち主に毎ターン、ターンの行動枠をその数だけ多く(または少なく)与え、ゼロ未満にはなりません。この方法で変えられるのは、perターンで補充される行動枠だけです。状態だけが満たす行動枠は"count": 0で宣言でき、画面は誰かがそれを持つ間だけ表示します。作られた敵がそれを消費することはありません。grants: `{ "budget": "haste", "standard": ["dash", "disengage", "hide"], "attacks": true,
"items": true } は、その行動枠を何に使えるかを示します。指定した標準アクション(ルールセット自身のstandardリストのもので、すべての標準アクションがすでにある最初の行動枠では使いません)、単一の打撃による武器攻撃一回(アクションが本来与える打撃の数にかかわらず。クリーチャーなら、ステータスブロックの単一標的の攻撃で、連続攻撃は不可)、アイテムの使用です。アイテムはtrueならどのアイテムも、{ "tags": ["mundane"] }`ならそれらのタグのどれかを持つアイテムだけです(5eのUse an Objectは普通のアイテムの使用で、魔法のアイテムの起動は含みません)。これらは通常消費する行動枠がなくなった後に、持ち主自身のターンにだけ提示されます。付与がリアクションの支払いになることはありません。
exclusive:["action", "bonus"]は、ターンにどちらか一方しか消費できない二つの行動枠です。どちらかを消費すると、もう一方は空になります。attacksPerTurn: アクションが何を与えても、持ち主が自身のターンに行う攻撃(命中を振るアクション、連続行動の攻撃部分のそれぞれ、掴みのように打撃の代わりに行う対抗判定)の数です。ほかの者のターンのリアクションは、制限も計数もされません。onEnd:{ "applies": [{ "condition": "lethargic", "duration": { "rounds": 1 } }] }は、状態が完全に終わったとき(時間切れ、セーヴやダメージによる終了、集中の中断)に残すもので、再び付与されたときは残しません。roundsの間続きます("until-save"や"instant"は不可)。持ち主自身のターンの途中で残された場合、そのラウンドは次のターンから始まるため、一ラウンドは次のターン全体です。- 戦闘が終わると、どのように終わっても、戦闘が時間制限、
endsAfter、集中付きで付与したすべての状態は、何も残さずにシートから外れ、集中も終わります。時間制限のない状態(落下による伏せ状態)は残ります。
own-saves-advantageとその反対の効果は、攻撃と同じくセーヴを2回振って片方を使い、互いに打ち消し合います。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を受け付けます。加算は、命中に複数のダメージの条項があっても、攻撃の命中ごとに1回行います。クリティカルは、ルールセットがほかのダイスを倍にするのと同じく、加えたダイスを倍にします。セーヴと自動命中には何も加わりません。timesは加算の後、抵抗の前に命中全体を変え、条項全体にわたって合計を1回切り捨てます。加えた量は、自身の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は、マークのdamage-takenの項目をattacks: "any"とdamageType: "necrotic"で使います。段階と、アイテムのworn、carried、要件のotherwiseの効果も、これらの修正値を共有します。攻撃メニューは持ち主自身の加算と倍率だけを数え、標的のマークがそこで約束されることはありません。シートとプロンプトの要約は持ち主自身のダメージの修正値を説明し、戦闘の表示は受けるものも説明します。どちらの対象を使うパッケージも、アイテムが別のカタログファイルにある場合を含め、schemaVersion 2とcapabilityApi 1.133以降が必要です。
状態が変更する数値。 modifiersの各項目は、変更するもの(to)と量を指定します。
defense: 持ち主への攻撃が到達すべき数値です。固定値だけです。attacks、saves、checks: 持ち主自身の攻撃判定、セーヴ、対抗判定です。固定値か、ロールのたびに振るdice("1d4")です。minus: trueはダイスを加える代わりに差し引きます。speed: 持ち主が歩く距離で、独自の距離単位によるflatか、半分や2倍にするtimes0.5または2です。倍率はすべての固定値の変更の後に適用します。speed-zeroと同じく、盤面上でだけ読みます。health-max:times0.5だけを指定すると、持ち主の体力の最大値を半分にし、切り捨て、1未満にはなりません(Capability API 1.115)。マスで表す体力のトラックには半分にする最大値がありません。半分にした最大値を超える体力は戦闘開始時に失われ、回復でそれを超えることはありません。
checksへの修正値は独自のskillsを、savesへの修正値は独自のsavesを指定でき、状態の指定の代わりにそれで絞り込みます。どちらもmode: "advantage"か"disadvantage"で2回振ることができ、同名の効果と一緒に数えて同じように打ち消し合い、数値の併記は任意です。そのため1つの状態でSneakを難しくし、同時にClimbを易しくできます。この3つのキーにはCapability API 1.53が必要です。
{ "condition": "muddy", "modifiers": [{ "to": "checks", "skills": ["sneak"], "mode": "disadvantage" }] }固定値は独自の符号を持ち、0は拒否されます。すべての修正値は、変更したロールの横に状態の名前とともにログに表示され(「12 + 5 + 3 (Blessed) = 20」)、メニューの命中率と勝率にも数えます。状態同士は累積しますが、同じ状態が2つあっても1つの状態です。
"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 }] }
]levels: 任意です。トラックが十分に高い間、状態として数えるライブトラックの段階で、消耗のように段階的に悪化する状態を表す方法です。各項目は普通のtrack(負傷トラックではない)、効果が始まる段階at、効果を指定し、状態と同じeffects、modifiers、failsSaves、saves、skillsを持ちます。トラックが到達したすべての段階を数えるため、上がるにつれて累積します。段階は出所を持たず、読み取るものが下がったときだけ終わるため、half-move-to-stand、ends-on-damage、cannot-target-source、cannot-target-source-side、cannot-approach-sourceは拒否されます。トラックを持つのはシートを持つ戦闘員だけです。ログはトラックと数値で段階を示します(「- 1 (Heat 3)」)。
trackの代わりに、段階はキャラクターのライブ状態とアイテムを使って計算するderived値を読めます(Capability API 1.54)。誰も印を付ける必要はありません。Ember Roadsは、Bulkを10以上運ぶ者を遅くします。
{
"derived": "bulk_carried",
"at": 10,
"modifiers": [
{ "to": "speed", "flat": -2 },
{ "to": "checks", "skills": ["sneak"], "flat": -1 }
]
}キャラクターごとに異なるしきい値(「Strengthの5倍を超える」)は、それを差し引く派生値で表します。-1のscaleで差し引く部分を作り、2つの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)。これと、半分にした最大値で失われる体力は、戦闘開始時に1回だけ決着します。ほかのすべての段階は、それが変える数値が読まれるたびに読まれます。
敵もトラックを持ちます(Capability API 1.115)。シートのない敵は、独自のトラックIDで与えられたtracksから始まります。GMが提案するクリーチャーはそれを指定でき("tracks": { "exhaustion": 2 })、戦闘に入れるベスティアリの敵も同じです。クリーチャーのconditionImmunitiesは段階が読むトラックを指定でき、その場合、シートの有無にかかわらず、そのトラックのどの段階も影響しません。消耗に完全耐性を持つ5eのアンデッドと人造がこれにあたります。
修正値、段階、判定の効果にはCapability API 1.45が必要です。
checksとcontests: 任意です。対抗判定が読むものと、戦闘中に誰でも始められる対抗判定です。掴む、押し出す、振りほどくなどです。後述の「対抗判定」を参照してください。Capability API 1.43です。concentration: 任意です。維持しているものを記録するライブtextフィールド、ダメージによって要求されるsave、その難易度の下限floor、それを上回る場合に難易度となる被ダメージの割合fromDamageを指定します。集中を要する二つ目の能力を開始すると一つ目が終了します。セーヴに失敗した場合も終了し、それによって維持していた状態も解除されます。dying: 任意で、kind: "saves"です。判定の回数を数える二つのトラック(必要回数は各トラック自身の最大値)、dice、succeedAt、最大・最小の目の効果(naturals.max:revive-1またはsuccess、naturals.min:one-failureまたはtwo-failures)、倒れている間のダメージのコスト(damageWhileDown、criticalWhileDown)、倒れたキャラクターのconditionを指定します。このブロックがなければ、ゼロになったキャラクターは倒れ、回復すると復帰します。damageTypes: 任意です。独自システムのダメージ種別で、大文字・小文字を区別せず照合します。damageKinds:healthが負傷トラックを指定する場合は必須で、プールを指定する場合は拒否されます。種類を保持できるのは印だけで、点数のプールにはそれを記録する場所がないためです(負傷トラックを参照)。打撃がトラックのどのkindsで印を付け、何マスを埋めるかを定めます。defaultは、種別のない打撃も含め、対応付けのないすべての被害の種類です。byTypeは独自のdamageTypesを印の種類に対応付け、キーは種別と同様に大文字・小文字を区別しません。そのため"Fire"と"fire"は同じキーで、両方を指定すると拒否されます。marksにデフォルトはありません。二つの選択肢の意味が正反対だからです。"per-point"はダメージ判定が体力段階を数える方式で、三の打撃なら三マスを埋め、一だけ軽減することにも意味があります。"per-blow"は打撃が当たるか当たらないかの方式で、強さにかかわらず一マスを埋めます。ダメージ節が複数ある打撃でも、実際に届いた最も重い種類で一マスだけを埋めます。自分のシステムに合う方を指定してください。{ "default": "bashing", "byType": { "fire": "aggravated" }, "marks": "per-point" }。pool:dice-poolでは必須で、attack-vs-defenseでは拒否されます。「プールで振る戦闘」を参照してください。spendLimits: 任意です。戦闘の方式にかかわらず、一人の戦闘員がturnまたはroundごとにライブプールから消費できる量です。[{ "pool": "blood", "max": { "derived": "blood_per_turn" }, "per": "turn" }]のように書きます。maxは戦闘開始時に一回読みます。上限の残りを超えるコストは、プールにどれだけあっても支払えないため、メニューに出ません。ターンごとの上限は持ち主自身のターン開始時に、ラウンドごとの上限はラウンド開始時にリセットします。数値で直接書いた敵はシートから何も支払わないため上限に縛られず、シートとして書いた敵は自身のプールから支払い、ほかと同じく上限に従います。Capability API 1.47です。threat: 任意ですが、ベスティアリには必要です。tiersは敵を選ぶ尺度で、ID、ラベル、healthの帯域、defense、toHit、damagePerRoundの帯域、saveDifficultyを持ちます。提供するすべてのクリーチャーはこの段階のいずれかを指定します。作者が用意していない敵はGame Masterが求めた段階に調整するため、尺度から外れません。damagePerRoundの帯域は、一連の行動全体を含め、一ラウンドに一体の標的へ与える量として読み取ります。
段階には、遭遇の行動枠に対してその段階のクリーチャーをどれだけの価値として数えるかを示すworth(5eでは脅威度ごとの経験値)を指定でき、threatには、対峙するパーティーに対して戦闘に含められる価値を示すbudgetを指定できます(Capability API 1.803)。
level: 合計がメンバーのレベルになる数値フィールドです(5eではクラスごとにひとつです)。steps: 難易度のステップを低い順に並べます。それぞれ{ "id", "label" }です。byLevel:[{ "level": 5, "worth": [500, 750, 1100] }]です。そのレベル以上のメンバーひとりについて、ステップごとに価値を指定し、レベルは昇順に並べます。crowd: 任意で、[{ "from": 2, "times": 1.5 }]です。相手がその数に達したときに、相手の価値に掛ける倍率です。smallPartyより少人数のパーティーではひとつ上の行を読み、largePartyより大人数ならひとつ下の行を読みます(5e 2014の倍率です)。価値をそのまま合計するSRD 5.2の行動枠では省略してください。forGame: 任意で、各ゲーム難易度(casual、normal、hard、brutal)で使うステップです。省略すると順番にステップを使い、最後のステップを超える難易度では最後のステップを使います。
Game Masterには、戦闘を書く前に各段階の価値とパーティーの行動枠が伝えられます。Game Masterが作った戦闘の価値がそれを超える場合は、収まるまで、作り出した相手のうち最も価値が高いものの段階を繰り返し下げます。ボスがいる戦闘は、次のステップまで許容されます。ベスティアリのクリーチャーと以前の戦闘から再登場する相手はそのまま数え、物語の戦闘はその作者が決めます。何を下げたかは、戦闘の調整内容に示されます。
状態、ダメージ、魔法に対するセーヴ
to: "saves"の修正値はagainstを持てます。conditions(シートの状態ID)、damage(ダメージの種類)、magic: trueの少なくとも1つが必要です。どれか1つが一致すれば十分で、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"を含め、状態を終わらせるセーヴは、その状態だけに対するものです。集中と死亡のセーヴは何に対するものでもありません。戦闘外では、GMのセーヴの要求は構造化された出所や状態を持たないため、againstがそれらの要求に一致することはありません。シート、アイテムの詳細、戦闘の詳細、GMのシートの要約は、これらの制限を示します。schemaVersion 2とcapabilityApi 1.134以降が必要です。
プールで振る戦闘: dice-pool
dice-poolルールセットはダイスを合計せずに成功を数え、その戦闘も同じようにできます。"kind": "dice-pool"には"dice-pool"のresolution.kindが必要で、プール判定と同じようにシートを読みます。ロールが加える数値はすべてダイスの個数で、ロールが対抗する数値はすべて成功数です。 そのため名前を変えるものはありません。
- 命中の数値(攻撃の行のもの、能力リストの
toHit、クリーチャーのアクションのもの)は、攻撃が振るプールです。ダイス、ダイスが到達すべき目標値、2倍、爆発、相殺、大失敗となる目はresolutionのものです。resolution.penaltyFromが指定する負傷トラックは、判定と同じくプールからペナルティを引きます。 defenseは攻撃に必要な成功数で、1未満にはなりません。状態のdefenseへの修正値と遮蔽(cover.bonusかcover.threeQuarters)がそれに加わります。- 必要数を超える成功1つごとに、ダメージダイスが1個増えます。大失敗は、数えた成功にかかわらず外れです。クリティカルはありません。強い命中はその追加ダイスに価値があります。
- セーヴの数値はそのプールで、難易度は必要な成功数です。対抗判定は両者の判定をプールとして振り、成功の多い側が勝ちます。
- 状態の攻撃、セーヴ、判定への修正値はダイスの増減なので、
flatの数値です。振る修正値(dice)は拒否されます。 - ダメージはルールセットのダイスで振ります。量の
dice(クリーチャーや項目のもの)が個数を示し、ルールセットのダイスでなければならず、flatの部分は振らない自動成功です。攻撃の行のダメージダイス列は個数として読み、damage.abilityはその能力値の評価値をダイスとして加え、damage.bonusは自動成功を加えます。perCostStepとscalesは従来どおりダイスを加えます。回復と一時ポイントは量で、従来どおり合計します。 - イニシアチブは合計(
initiative.diceとmodifier)か、要求すればプール(後述のinitiative.pool)で、死亡ルールは独自のダイスを保ちます。
プール方式の戦闘がそれ以外に振るものはpoolブロックです。
"pool": {
"advantage": true,
"damageTarget": 6,
"soak": { "roll": true, "byKind": { "knock": { "abilityMod": "sinew" } } }
}advantage: 偏りのあるロールを2回振り、成功の多い方を使うかです(大失敗は、大失敗しなかったどの結果よりも少ないと数えます)。これがなければ、状態が何を示しても戦闘は1回だけ振ります。damageTarget: ダメージダイスと吸収ダイスを振るときのダイスごとの目標値です。省略すると解決方式のデフォルトの目標値です。これらのダイスはそれ以上の目を1回ずつ数えるだけで、倍増、爆発、相殺、大失敗は起きません。soak: 標的が命中の被害から差し引くもので、被害の種類ごとに指定します。allはあらゆる種類に対する値参照で、byKindは体力トラックの種類ごとの値参照で、その種類ではallより優先します。どちらも指定しない種類は吸収しません。"roll": trueなら、標的はその数のダイスをダメージの目標値に対して振り、成功1つごとに1を差し引きます。"roll": falseなら、振る前にその数をダメージダイスから差し引くため、自動成功には影響しません。振る吸収なら、自動成功もほかと同じく差し引きます。ゼロ未満にはならず、何も数えなかった打撃を吸収するために振ることもありません。クリーチャーは独自の数値をsoak: { "all": 1, "byKind": { "knock": 3 } }として指定し、そのためにはブロックのsoakで吸収の方法を示す必要があります。抵抗、脆弱性、完全耐性、resist-allは吸収の後に残りへ適用します。hardness: イニシアチブを攻撃で動かす数値として扱う場合の、戦闘員の硬度の値参照です。戦闘中の鎧と装備効果を参照してください。
命中が必要数を超えて得たものと吸収するものは各標的のものなので、ダメージは標的ごとに振ります。打撃の2つ目の節と追加効果は、それぞれ独自の種類のダメージプールで、命中による追加ダイスはありません。メニューはプールを正確に予測します。必要な成功数に届く確率と、最初の標的の吸収後のダメージダイスの価値です。
Gravewatchはこの方法で書かれています。番人は評価値と専門技能を振り、knockはSinewで吸収してtearはまったく吸収せず、1ターンにResolveを1ポイント消費でき、毎ラウンドイニシアチブを振り直します。
逆順の宣言は実装していません。 行動前に全員が遅い順に行動を宣言するシステムもあります。各戦闘員が自分のターンに1つの行動を選ぶ戦闘では、先に宣言しても規則が読むものは何も変わらないため、キーで示すことはありません。
シンボルダイスで振る戦闘: symbol-pool
symbol-poolのルールセットは数値ではなくシンボルを読み、戦闘でも同じことができます。そのためEngineは、アドバンテージで何が得られたかをGame Masterに尋ねずに、戦闘全体を進行します。"kind": "symbol-pool"には、resolution.kindが"symbol-pool"であることが必要で、既存のシンボル判定と同じ方法でシートを読みます。
- 命中値は攻撃側のダイスの個数です。シートでは、攻撃の行の数値は能力値とスキルのランクを合わせたものです。
pool.build: "larger-upgraded"が判定を組み立てるのと同じく、大きい方が振るダイスの個数、小さい方がそのうち格上げする個数です。クリーチャーのアクションは、toHit(ダイスの個数)とupgrades(格上げする個数)で指定します。これには、upgradeダイスを持ち、sumで組み立てないプールが必要です。 defenseは、攻撃側のダイスに対して振る難易度ダイスの個数です。クリーチャーのdefenseは、自身に対して振るその個数です。遮蔽と、状態によるdefenseへの修正値は、難易度ダイスを加えます。- 状態による攻撃、セーヴ、判定への修正値と、
penaltyFromが指定する負傷ペナルティは、有利に働くとブーストダイス、不利に働くとセットバックダイスになります。そのため、flatの数値で指定します。ダイスで振る修正値(dice)は拒否されます。偏りのあるロール(長距離や、状態による不利)はセットバックダイスを1個多く振り、逆方向の偏りならブーストダイスを1個多く振ります。 - 正味の成功数が
success.neededに達すると命中します。セーヴの数値はダイスの個数で、その難易度は対立するダイスの個数です。対抗判定は両側のダイスを振り、正味の成功数が多い方が勝ちます。イニシアチブもプールで振れます(initiative.pool)。その正味の成功数がイニシアチブの数値になります。 - ダメージは
attack-vs-defenseの戦闘と同じく合計します。正味の成功1つごとに、damage.perSuccess(1)を命中のダメージに加えます。すべての成功("counts": "all")か、命中に必要な数を超えた分だけ("beyond")を数え、標的の吸収を打撃全体から差し引きます。0未満にはなりません。 - 大失敗はなく、ダメージロールを倍にすることもありません。クリティカルは消費で得るものです。
シンボルの効果は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" } }
]
}soak: 標的が各命中から差し引くもので、シートから読みます。allはあらゆる種類の被害に対する値参照で、byKindは体力トラックの種類ごとの値参照で、その種類ではallより優先します。クリーチャーは独自の数値をsoak: { "all": 2 }のように指定し、そのためにはこのsoakの宣言が必要です。spends: 攻撃ロールで残ったシンボルを消費して得る効果で、最大16個です。symbolをcost個消費すると1回得られ、max(デフォルト1)は1回のロールで得られる回数を定めます。conditionやcriticalを与える消費は1回だけ適用されるため、maxは1のままです。同じロールで2つの消費により、同じ相手に同じ状態や、同じoneAtATimeの種類の状態を2つ付与することはできません。何も効果がない消費は行いません。状態を付与できない場合(防がれるか、同じ種類をすでに持っている場合)や、トラックにその方向へ丸1段階動く余地がない場合です(同じロールの先の消費が、その余地を使っていることもあります)。byは選択する側を定めます。攻撃側は自分に有利なシンボル(アドバンテージ、トライアンフ)を、標的は標的に有利なシンボル(脅威、絶望)を消費します。1種類のシンボルを消費するのは片側だけです。成功はすでに命中とダメージ増加に使うため、消費には決して使いません。when:hit時だけ、miss時だけ、またはどちらでも(any、デフォルト)消費できます。damage(吸収前に命中へ加える被害)とcritical(命中をクリティカルにし、onCriticalを指定する節が適用され、ログにもそう示されます)には、"when": "hit"と"by": "attacker"が必要です。- 消費の効果は、次のどれでも指定できます。
conditionは、指定した状態の1つを誰かに付与し、roundsの間か、何かが終わらせるまで続きます。trackは通常のライブトラックをbyだけ動かします(疲労やストレスなど)。体力トラックは動かせません。boostとsetbackは、効果を受けた者がこの戦闘で次に行うロールに、その個数のダイスを加え、そのロールで使い切ります。onはattacker、target、attacker-ally、target-allyのいずれかです。味方は、その側で次にターンを取る者で、該当する味方がいない消費は行いません。 worth: 任意です。AIが消費の価値を被害のポイント数で評価する値です。指定しなければ、Engineは効果から計算します。被害はそのポイント数、状態は2、次のロールのダイス1個は0.5より少し大きい値、トラックの1段階は0.5です。相手側への効果を評価し、トラックを減らすかブーストを加える場合は、選択する側自身への効果を評価します。選ぶ側にとって価値のない消費は行いません。
Engineは、プレイヤーと敵のどちらについても、各側が持つシンボルで最も価値の高い効果を得るように消費し、それぞれをログに記します。プレイヤーは代わりに自分で選ぶこともできます。戦闘画面で「Choose my own symbol spends」(シンボルの消費を自分で選ぶ)にチェックを付けると、操作するパーティーメンバーのロールに消費できるものが残った場合、消費を1つずつ選ぶか、残りは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で共通の最低値を上書きできます。持ち主に対する同じ値参照か、アイテム自身の数値のステータスの1つを表す{ "stat": "overwhelming" }を受け付けます。0を宣言しても共通の最低値を上書きします。これは、吸収後のダメージ量を保証する既存の武器のfloorとは異なります。追加のダメージの条項や付加効果は、別の最低値を受けません。戦闘の記録とログは、ダイスの横に解決した最低値を示します。combatのキーと武器のキーはどちらも、外部のカタログファイルにある武器を含め、パッケージでは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は命中の直前の標的の現在のシートを読みます。1回の命中が、吸収、セーヴ、抵抗の後に、その数値より厳密に多いダメージを与える必要があります。その命中のダメージの条項は合算しますが、別々の命中がひるみに向けて累積することはありません。打撃ごとに印を付けるトラックでは、ダメージを与える命中は1段階と数えます。体力ではなくイニシアチブを奪う打撃は、ひるませられません。measureは現在"damage"だけです。
標的はちょうど次の1ターンを飛ばします。そのターンの前にさらにひるませる命中があっても、飛ばすターンは増えません。飛ばしたターンも、ラウンドの変化やイニシアチブの振り直しを含め、状態の時間やほかのターンの処理を進めます。戦闘を保存して再読み込みしても、保留中の飛ばしは保たれます。conditionがあれば、宣言したシートの状態を指定します。戦闘は、飛ばしたターンが過ぎるか戦闘が終わるまで、それで印を付けます。すでにある状態はそのまま残ります。状態への完全耐性は印を防ぎますが、ターンを飛ばすことは防ぎません。textは任意の描写で、別の効果ではありません。ログとGMの戦闘のコンテキストは、命中と飛ばしを記録します。このキーには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がある場合は、少なくとも1つが攻撃に一致する必要があります。武器はすでにitem.tagsを持ち、カタログのmechanicsとクリーチャーのダメージはすでにqualitiesを持ちます。これらの名前はitems.tagsから来ます。tagsがなければ、その種類のどの攻撃も一致し得ます。新しい攻撃のタグのフィールドは必要ありません。
結果の種類は、吸収と負傷の印の両方を決めます。そのため、火器の致死の命中は、ヴァンパイアに対しては打撃の種類になって打撃の吸収を使います。同じ火器でもほかの者に対してや、刃物でそのヴァンパイアに対しては、通常の種類のままです。攻撃の元のダメージの種類は、抵抗と完全耐性については変わりません。各ダメージの条項は、それ自身の種類と攻撃のタグを使います。戦闘の記録とログは元の種類と対応付けた種類を示し、ダメージの見込みも同じ規則を読みます。シートのない普通のクリーチャーは定数の参照を満たせますが、これらの規則のためのシートの値は提供できません。そのためにはクリーチャーにシートを与えてください。Capability API 1.148が必要なのは新しいremapキーだけで、古いダメージの種類の対応付けは既存の互換性を保ちます。
攻撃で動くイニシアチブ
プールのシステムには、戦闘全体を通じてイニシアチブを数値として保持し、攻撃で動かせるものがあります。ある攻撃方法は標的からそれを奪い、別の方法は攻撃者自身の数値をダメージとして費やし、決まった線まで落ちた者はクラッシュします。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 }
}
}- 開始時。 戦闘開始時に全員が
pool個のダイスを振り、成功数にplusを加えた値がその数値です。合計したダイスは順序であってダイスの個数ではないため、resourceにはpoolが必要です。プール方式の戦闘で加える数値はすべてダイスなので、クリーチャーのinitiativeModifierはそのプールです。数値は保持され、振り直しません(resourceと並べたeachは拒否されます)。各ラウンドの開始時に、その時点の数値で順序を並べ替えます。 - スタイル。 すべての攻撃(攻撃の行、命中判定をして被害を与える能力やカタログ項目、被害を与えるクリーチャーのアクション、ほかのアクションで構成するアクション)はスタイルごとに1回ずつ提示され、プレイヤーは標的の前にスタイルを選びます。最大4つで、それぞれ奪うか費やすかのどちらかで、少なくとも1つは奪うスタイルです。スタイルを指定しない選択は最初のスタイルで行い、攻撃が提示されていないスタイルは拒否されます。命中前に応答で使い手の数値が変わっても、攻撃は終わるまで選んだスタイルを保ちます。
- 奪うスタイル。 命中すると、ダメージは通常どおり振り(命中による追加ダイス、武器のダイス、種類ごとの吸収、自動成功)、数えた量は体力ではなく標的の数値から差し引きます。攻撃者はそのすべてに
gainを加えて得ます。 - 費やすスタイル。 攻撃者の数値がクラッシュの線(
crashがなければ0)を上回る間だけ提示され、数値は1撃で費やすため、ほかのアクションで構成するアクションには提示されません。命中すると、ダメージは攻撃時の攻撃者の数値で、それをダメージの目標値に対するダイスとして振り、ほかには何もありません。武器のダイスも、命中による追加ダイスも、自動成功も、吸収もありません。攻撃自身の被害の種類で体力に印を付けます。攻撃が終わると、どこかに当たった数値はbaseに戻り、どこにも当たらなかった数値は、攻撃時の数値でonMissが示す分を失います(段階表で、[at least, lose]の組を昇順に並べます。最初の段階未満では何も失いません)。 - クラッシュ。 数値が
crash.at以下に落ちるとクラッシュします。condition(独自の状態の1つで任意)が付与され、そこまで追い込んだ者がbonusを得ます。自分の外れでクラッシュした場合は、誰もボーナスを得ません。クラッシュした戦闘員は費やせません。クラッシュは状態も含めて、数値が再び線を上回ったとき、自身のターンでrecoverAfter回経過した後(そのターンの開始時に数値がbaseに戻ります)、そして戦闘がどのように終わってもその終了時に解けます。開始時のロールが線以下の者は、クラッシュした状態で戦闘を始めます。baseはcrash.atより大きくなければなりません。そうでなければ、戻るたびに再びクラッシュします。
メニューは各スタイルの見込みを示します。命中率と、奪うスタイルなら奪う量、費やすスタイルなら与える被害です。ステータスパネルは全員の数値を示し、ログはすべての変化とその理由を示します(「Ada gains 5 initiative for crashing Rats, and is on 14.」)。Engineの選択処理は奪う打撃を1ターン先まで評価し、奪ってから費やす場合と、今費やして基準値から再び費やす場合を比べます。
戦闘が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" }は「次のターンの終了前に行う次の攻撃まで」を表します。1回の攻撃の間続くものは、ダメージも含めてその攻撃全体の間続き、同じ打撃が新たに付与したものは残ります。どちらにもCapability API 1.45が必要です。temporaryは体力プールに一時ポイントを与えますが、累積せず、大きい方のバッファが残ります。scalesは読み取った値に対応して表が与える追加ダイスで量を増やします。costはシート自身のuseコマンドで支払い、budgetは消費する行動枠を上書きします。
plusはamountに加えて同じ打撃に最大3つの量を追加し、それぞれ独自に振り、種別を持たせます(「and 2d6 fire」)。節は{ "dice": "2d6", "flat": 1, "type": "fire" }の形で、独自のsaveとして{ "save": "con_save", "difficulty": 13, "onSuccess": "none" | "half" }を持つこともできます。アクションがすでに何を要求していても標的がこれを振ります。成功時、noneならその節はゼロ、halfなら半分となり、どちらでも打撃のほかの部分は変わりません。difficultyがなければ、アクション自身のセーヴが使う数値、次いでリストのsaveDifficultyにフォールバックします。クリティカルは最初の量と同じルールで各節のダイスを倍にします。typeがない節は打撃自身の被害の種類を使います。打撃全体は依然として、合計ダメージによる1回の集中判定と、1回の倒れるかどうかの判定です。節を付けるにはamountが必要で、healには付けられません。
{
"kind": "attack",
"attackRoll": true,
"amount": { "dice": "1d8" },
"damageType": "piercing",
"plus": [{ "dice": "2d6", "type": "fire" }]
}3つのキーで、項目がターン自身の行動枠に何をするかを指定します。そのいずれかを宣言するutility項目は、除外せず提示されます。
free: 行動枠をまったく消費しません。ただし指定したcostは支払い、同時にbudgetを指定することはできません。gives:[{ "budget": "action", "count": 1 }]。最大4つです。使用した瞬間にそれらの行動枠へ加算しますが、加算後の値は1ターンの枠に贈与分を足した量が上限です。後のターン用に貯めることはできません。standard:{ "actions": ["dash", "disengage", "hide"], "budget": "bonus" }。所有者はそれらの標準アクションをその行動枠で使えます。通常のものと並んでstandard:<id>@<budget>として提示されます。その許可しか与えない項目自体はメニューに出ません。許可は実行するものではないためです。
新しいkind: "rider"の項目は受動的です。誰も実行せず、メニューにも出ず、各期間で最初の条件を満たす命中に、ダメージ節を1つ自動で追加します。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はその行の真と評価される列を1つ指定します。特定の武器だけで発動する追加効果でも、Engineが武器の意味を知らずに対象を指定できます。どちらも指定しなければ、所有者によるあらゆる命中が対象です。袋から手に持った武器は行ではないため、weapons(Capability API 1.70)で発動するアイテムのタグも指定します。"weapons": { "tags": ["finesse", "ranged"] }は、どちらかのタグを持つ手持ちの武器による命中で、オフハンドの打撃も含めて発動します。weaponsだけを指定すると行では発動せず、行だけを指定すると手持ちの武器では発動しません。whenはいずれか1つを満たせば成立します。advantageは最終的に攻撃判定がどちらに有利だったかを表し、ally-adjacentは攻撃者の立っていて行動可能な味方で、盤面上なら標的から1マス以内、盤面なしならどこにいても該当します。ally-adjacent-no-disadvantage(Capability API 1.126)は、さらに、有利と不利が打ち消し合った後の最終的なロールが不利でないことを求めます。上の例ではSneak Attackにこれを使っています。oncePerはturn(存在するすべてのターンの開始時に更新するため、他者の行動中の打撃にも乗せられる)かroundです。amountは項目自身のscalesで増え、typeは被害の種類で、デフォルトは打撃自身の種類です。
クリーチャー: 戦闘が読み取るベスティアリ
"holds": "creatures"を宣言するカタログは、シートの行ではなく敵を含みます。どのリストにも供給せず、シートエディターの選択画面にも出ません。すべての数値は、combatブロックがすでに宣言しているキーで記述します。クリーチャーを独自の段階の1つに分類するため、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はそのシートから取得します(後述の「独自のルールセットの言葉で書くクリーチャー」を参照)。
health: 数値か、戦闘作成時に一度振る{ "dice": "3d6", "flat": 2 }です。予測には平均を使うため、まだ誰も振っていないダイスの結果をメニューが約束することはありません。defense、initiativeModifier、speed: それぞれ攻撃判定の対象値、イニシアチブに加える値(イニシアチブをプールで振る場合は振るダイスの個数)、独自の距離単位による一ターンの歩行距離です。abilitiesとsaves: シートに宣言した能力値IDとセーヴIDをキーにします。指定しないセーヴはゼロとして読み取ります。checks: 対抗判定で加える値で、combat.checksのIDをキーにします。指定しないものはゼロとして読みます。Capability API 1.43です。soak:dice-poolの戦闘だけで使う吸収量です。allはあらゆる被害、byKindは体力トラックの種類ごとです。Capability API 1.47です。hardness: イニシアチブを攻撃で動かす数値として扱う場合、ダイスがこれ未満の費やす打撃は何も起こしません。Capability API 1.56です。speedsとhover: 歩行以外の移動方法です(「位置」の「ほかの移動方法」を参照)。Capability API 1.113です。shield: true: 両手がふさがっているため、アクションのtwoHandedの代替は成り立ちません。Capability API 1.102です。size:combat.sizesの一つをIDで指定し、対抗判定のmaxSizeAboveがそれを読みます(「サイズと脱出の難易度」を参照)。Capability API 1.103です。typeとtags:combat.creatureTypes.typesの一つと、そのtagsの最大八つをIDで指定し、標的の条件がそれを読みます(「クリーチャーの種類と標的の条件」を参照)。Capability API 1.168です。resist、vulnerable、immune: ダメージ種別です。大文字・小文字を区別せず照合し、combat.damageTypesを宣言した場合はそれと検証します。resistやimmuneの項目は、何がそれを通り抜けるかも{ "type": "tearing", "except": ["silver"] }で指定できます。それらのアイテムタグのいずれかを持つ武器アイテムからの打撃は、そのまま受けます(Capability API 1.55。戦闘中の武器を参照)。damage.qualitiesがそのどれかを指定するアクションや、mechanics.qualitiesがそのどれかを指定するカタログの項目も同じです(Capability API 1.101)。conditionImmunitiesは独自の状態か、combat.levelsが読むトラックを指定します(Capability API 1.115)。tier:combat.threatのどの段階に属するかです。loot(Capability API 1.63): 勝利した戦闘がこのクリーチャーについて振る戦利品表のIDです(戦利品を参照)。inventory(Capability API 1.795): 戦闘開始時に所持している可能性のあるもので、16行まで指定できます。各行は、独自のアイテムのいずれか(item、<catalog>/<entry>の形式)、または独自の戦利品表のいずれか(table)を指定し、chance(百分率、100がデフォルト)とcount(数値かダイス、デフォルト: 1。表はその回数だけ振ります)を持ちます。戦闘では使えるものを使います。sheetを持つクリーチャーはパーティーメンバーと同じようにアイテムを使い、通常のステータスブロックは、useが使用時に使い切る設定で、使用者の情報を何も読み取らないアイテム(ポーション、オイル)を使います。倒されると、残っているものをlootとともに落とし、逃げ去る場合は持っていきます。Game Masterは代わりに、相手の所持品を個別に指定できます(遭遇のcarrying)。その場合はこれらの行に代わって適用されます。traits: Game Masterに見せる短い名前と説明の組です。自動解決しないため、数値を持つ内容はアクションに書きます。signaturePoints: 自身のターン開始時に戻るポイントで、signatureアクションに消費します。riders: 最大四つで、カタログ項目のriderと同じものをブロックに記述します。各項目は{ "id": "pack", "name": "Pack", "on": "hit", "oncePer": "turn" | "round", "amount": { "dice": "1d6" } }で、任意のtypeと、このブロック自身のどのアクションで発動するかを指定する任意のactionsを持てます。ブロックの追加効果はシートのリストを読まないため、sourcesとrequiresの二つのキーを持ちません。シートとして記述したクリーチャーは、キャラクターと同じくリストの追加効果を得ます。actions: 最大十二個で、それぞれ独自のidを持ちます。アクションは手書きのステータスブロックの内容(toHit、autoHit、damage、save、applies、targetCount、reach、range、area)に加え、クリーチャーだけが持つ四つの要素を持ちます。reachは打撃が届く距離、rangeは投擲や射撃の距離、areaは着弾する形状で、すべて独自の距離単位です。rangeは単なる数値か、不利を受けてさらに届く場合は{ "normal": 30, "long": 120 }にできます。areaは{ "shape": "burst" | "cone" | "line", "size": n, "friendlyFire": false }です(「位置」を参照)。uses:{ "per": "encounter" | "day", "count": n }。使い切るとアクションはメニューから消えます。recharge:{ "dice": { "count": 1, "sides": 6 }, "from": 5 }。戦闘開始時は使用可能で、使うと消費されます。自身のターン開始時に振り、from以上なら回復します。どちらの結果でもダイスをログに残します。damage.alternatives(Capability API 1.102): 最初の量の代わりに与える最大四つの量で、それぞれ{ "when": ..., "dice": "1d10", "flat": 3 }です。最初に成り立つものが採用されます。種類、条項、性質はアクション自身のままです。"when": "twoHanded"は、クリーチャーが"shield": trueを持たない限り成り立ちます。これは、5eの「両手で使う場合は、8(1d10 + 3)の斬撃ダメージ」です。"when": { "selfHealthAtMost": 0.5 }は、体力が最大値のその割合以下の間成り立ちます。これはスウォームの「スウォームのヒットポイントが半分以下なら、5(2d4)の刺突ダメージ」です。メニューの見込みと打撃は、どちらも現在の状態でそれを読みます。sequence: 同じブロックのほかのアクションを順番に並べ、それぞれに標的を指定します。一つのアクションで二回攻撃するクリーチャーはこの方法で書きます。 一つの行動枠で連続行動全体を支払います。連続行動は独自の内容を持たず、別の連続行動を指定することもできません。signature:{ "cost": n }。行動枠ではなくクリーチャー自身のポイントで支払い、他者の行動中だけ使えます。戦闘はあるターンと次のターンの間のウィンドウで提示します(「ウィンドウ」を参照)。reaction: カタログ項目のmechanics.reactionと同じオブジェクトです(「ウィンドウ」を参照)。アクションはどのターンのメニューにも出ず、代わりに指定した瞬間に提示されます。リアクションは固有アクションを兼ねられず、連続行動もリアクションを含められません。self: true: 他者ではなくクリーチャー自身に作用するため、targetCountやareaを持ちません。どちらにもCapability API 1.46が必要です。Parryはその両方で、防御に修正値(2)を加えるparrying状態を伴います。
{
"id": "parry",
"name": "Parry",
"budget": "reaction",
"self": true,
"reaction": { "on": "hit" },
"applies": [{ "condition": "parrying", "duration": { "rounds": 1 }, "endsAfter": "attacked" }]
}- セーヴにはアクション自身に難易度が必要です。アクションが要求するセーヴなら
save.difficulty、アクション自身のセーヴがなく、セーヴで終了する状態ならsaveDifficultyです。シートを持つクリーチャーでもブロックのアクションは直接の数値で書くため、その値はアクションに置きます。節自身のセーヴはdifficultyを省略して同じ数値にフォールバックできます。 damage.plusはカタログ項目のplusと同じ節のリストで、読み方もまったく同じです。"damage": { "dice": "1d6", "flat": 2, "type": "piercing", "plus": [{ "dice": "1d4", "type": "fire" }] }は、熱を独立した量として持つ噛みつきで、その熱は独立して抵抗され、独立して倍化されます。
クリーチャーのアクションは、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を付けます。それらの呪文は、術者の側の立っている戦闘員のうち少なくとも3人がそのカヴンIDを持ち、それぞれ単純なマス距離で術者からルールセットの距離の単位で30以内にいる間だけ提示されます。盤面がなければ、立っているすべてのメンバーを数えます。各呪文の使用回数は、カヴンIDと項目をキーとする、そのカヴン全体で共有する1つのプールです。カヴンのブロックにはカヴンの呪文が必要で、カヴンの呪文にはブロックが必要です。重複する項目は拒否されます。GMが提案するクリーチャーは、脅威の尺度で呪文の一覧を制限できないため、制限を受けるとspellcastingを失います。
5e草案のEngine内のテスト用コピーdocs/development/ruleset-5e-2014.example.jsonには、手書きのクリーチャー五体のベスティアリがあります。連続行動、再充填、状態を伴うセーヴ、抵抗と完全耐性、使用回数制限、固有ポイント、シートとして記述した1体を網羅しています。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" }]
}
}
}
}- すべての部分は任意です。
abilities、skills、saves、bonuses、fields、listsを、シートに宣言したIDをキーとして使います。省略したものは、空白のキャラクターと同じくシート自身のデフォルトを読み取ります。番人のGritが9なのはgrit_maxが4、Toughness、Brawnを足すためで、Guardが7なのも同じような理由です。 - 各数値の出所は1つです。 シートを持つクリーチャーは
health、defense、initiativeModifier、speed、abilities、saves、checksを別途指定できません。指定するとEngineはファイルを拒否します。リストが行動を定めるため、独自のactionsを持たなくてもかまいません。シートのないクリーチャーは、引き続き最初の3つと少なくとも1つのアクションを指定します。 - 作者が書いたデータとして検証します。 IDはすべてシートに宣言したものでなければなりません。スキルとセーヴはその項目に提供した習熟段階のいずれかに設定し、フィールド、能力値、ボーナス、列は宣言された値(範囲内の整数、選択肢の1つなど)を持ち、リストの行数は上限を超えられません。クリーチャーの消費分は戦闘が記録するため、
live部分はありません。 - 行はカタログから取得できます。
_catalog: "<catalog>/<entry>"はキャラクターのシートと同じく行の選択元の項目を指定し、戦闘はその項目から行のコストと効果を読み取ります。カタログはそのリストに供給するものでなければなりません。インラインのカタログなら項目がその中に必要です。別ファイルなら、ファイルにない項目を指定する行はクリーチャーに何も与えません。ベスティアリのシートが指定するカタログは、ベスティアリと一緒に戦闘用に読み込みます。 - シートの外に書いた内容も有効です。
tier、traits、actions、signaturePoints、riders、resist、vulnerable、immune、conditionImmunitiesです。 - 自身のプールから支払います。 プールは満タンで始まり、リストが与える行動に消費します。EngineとGame Masterのどちらが決める場合も、パーティーメンバーと同じく、より大きな支払い方法(高いスロットからの呪文など)が提示されます。番人のHold the LineはLuckを消費します。
- 負傷トラックの場合、体力はトラックです。 打撃は
resist、vulnerable、immuneを適用した後、damageKindsに従ってクリーチャー自身のトラックに印を付けます。ある種類の被害への完全耐性があれば、その印は付きません。 - あくまで敵です。 ゼロになると瀕死ではなく脱落し、死亡に対する判定はしません。画面には従来の敵の情報だけを出し、シートは表示しません。同名のキャラクターがいても、消費したものをどこかに書き戻すことはありません。
- 計算結果として体力がまったくないシートは戦闘から除外し、開始ログで理由を示します。誰も傷つけられない存在として参加させることはありません。
- レイヤーが列挙フィールドからある値を除いても、それを使うクリーチャーが失われることはありません。レイヤーの有効中はキャラクターと同じくそのフィールドをデフォルトとして読み取り、そのためにクリーチャーを拒否しません。
- Game Masterもクリーチャーを作れます。その場合は段階に収めます(「作者が用意していない敵」を参照)。
- この形式を提供するパッケージはCapability API 1.34を宣言します。
5eの草案のToll Sergeantは、同じ仕組みをd20シートで表したものです。Armor Class、体力、セーヴ、1アクションで2回の攻撃は、すべて自身のフィールドと攻撃リストに由来します。
作者が用意していない敵
Game Masterが敵を作ると、Engineは何かを振る前にその提案をthreat尺度に収めます。体力は段階の帯域内、防御、命中補正、セーヴ難易度は段階の値より最大2上までとし、最強の1ラウンド(最も強い連続行動か単独アクションを、1体の標的に対して測ったもの)がその段階のdamagePerRound内になるまでダメージを減らします。最初にダイス個数、次に固定値、次に連続行動から打撃1回、最後にダイスの面数を減らし、ゼロにはしません。ルールセットにない名称は削除します。未知のダメージ種別、状態、セーヴと、最初の6つを超えるアクションが対象です。宣言されていない段階は尺度の最下段にフォールバックします。変更はすべて平易な文として返され、ログで内容を説明できます。
作られる敵も、ベスティアリのクリーチャーと同じくsheetとして書けます。これによって、即興の魔術師もスロットと呪文を持てます。Game MasterにはシートのIDと各項目に入る値、戦闘が読むリスト、カタログがそれらに提供する名前を見せるため、呪文は説明するのではなく名前で指定します。大文字・小文字を問わずカタログ項目を名指す行はその項目となり、Game Master自身の値(呪文の準備状態など)を上に重ねます。モデルが書くため、シートは寛容に読み取ります。ルールセットにない名前は削除し、値はフィールドや列に合わせ、シートの横に書かれた数値は使いません。
ボスではない即興のクリーチャーは、ルールセットがそれに開放する範囲に制限されます。カタログフィルターのstartFromは、項目を分類するシートのフィールドを指定します(5eパッケージの呪文リストならclass)。クリーチャーには、そのフィールドの自身の値にフィルターが一致する項目だけを残し、照合方法は選択画面を開くときと同じです。そのためSorcererが呪文リスト全体を持つことはなく、クラスを指定しない者はクラス別カタログから何も得ません。未選択の内容はGame Masterに聞き直さず埋めます。選択した行だけが有効な各リスト(戦闘能力の参照元にonlyWhenがあるもの)について、開放されていて自身のプールで支払える項目から、持っている各プールに対応するものと自由に使えるものを少数ずつ補充します。能力の高いクリーチャーほど多くなります。選ぶ内容は、戦い方にも使う気質と熟達度に寄せます。守備的・支援的なものは味方を支える効果、無謀なものは加害、几帳面・忍耐強いものは敵を抑える効果を選び、熟達するほどリアクション、対抗手段、その他ターンを変えるものを持ちやすくなります。抽選は戦闘自身のシードを使うため、同じ戦闘なら常に同じように埋まります。そのようなリストでGame Masterが名指した行は、選択済みとして扱います。
ボスは例外となり得るため、Game Masterが全体を書きます。何も取り除かず、何も補充しません。
その後、どちらも段階に収めます。
- 体力は、その値の参照元となる1つのフィールドを通じて段階の帯域に収めます。プールの最大値はそのフィールドか、フィールドをちょうど1つ含む
sumです(5eの最大体力、Ember RoadsのToughness)。単一のフィールドを含まない体力の式はそのままにし、ログで説明します。負傷トラックの長さは作者の指定なので、変更しません。 - クリーチャーの構築後、防御、命中補正、セーヴ難易度は段階の値より2上までに制限し、支払える最大のコストも数えた最強の1ラウンドが段階の
damagePerRound内になるまでダメージを減らします。まず大きな支払いによる上乗せ、次にダイス、固定値、打撃1回、最後にダイスの面数を減らします。
作者自身のベスティアリは制限しません。作者が書いたデータなので、Engineはそのまま受け取ります。
位置: 盤面上の戦闘
ブロックが盤面1マスの距離を定めるまでは、戦闘は想像上で進みます。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はこの1行だけを宣言します。それ以外が必須ではないことを示す例です。
"distance": { "label": "paces", "perCell": 2 }マス。 distance.perCellは1マスが独自の単位のいくつ分かを表し、labelはその単位の呼び名です。ブロックの世界のすべての距離、つまりeconomy.movement、クリーチャーのspeed、武器のreachとrange、クリーチャーのアクションのreachとrangeがこの単位です。独自のunits.distanceを宣言するカタログは、自身のperCellでmechanics.rangeとarea.sizeを変換します。宣言しないものはこの設定を使います。ゼロより大きな距離は最も近いマス数に丸め、ゼロにはしないため、数値を指定したものは少なくとも1マス届きます。ゼロは短い距離ではなく、独自の意味を保ちます。mechanics.rangeの0は自分か接触を意味します(他者への接触は隣のマスに届きます)。武器のreachまたはrange列が0の行は、その種類の距離を持ちません。
盤面上で戦うかどうか。 2つの条件を満たす必要があります。ブロックがdistanceを宣言し、プレイヤーのゲームがTactical戦闘スタイルに設定されていることです。Classicスタイル、またはdistanceのないルールセットでは、従来どおり想像上の戦闘となります。誰でも誰にでも向けることができ、以下の内容は一切読み取りません。
ゲームで使えるスタイル。 combat.stylesは、ルールセットを使うゲームで選べる戦闘スタイルをIDで指定します。classic、tactical、またはクライアントが登録したスタイルです(最大8個で、それぞれ1回ずつ、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のある選択肢はマスに向け、ポインターの下のマスには味方も含めて巻き込む相手を表示します。残りの移動量は行動枠の横に、ここでも独自の単位で表示します。画面は測定しません。すべてのマス、コスト、経路、標的、狙い位置はサーバーから送られます。
移動。 1ターンの移動量は、パーティーメンバーならeconomy.movement、クリーチャーなら自身のspeedをperCellで割って切り捨てます。ただし移動可能な限り最低1マスです。所有者自身のターン開始時に補充し、アクションの前、合間、後に使えます。歩き、攻撃し、また歩けます。1マスに入るコストは1で、移動しにくい地形では増えます。この機能が想定するテーブルトップのグリッドに合わせ、8方向すべて同じコストです。味方は通り抜けられますが、誰かの上では止まれません。敵は壁になり、固体のマスには入れず、固体の2マスの角を斜めに抜けることもできません。
ほかの移動方法(Capability API 1.113)。クリーチャーのspeedsは、歩行以外の移動を独自の単位で{ "fly": 60, "swim": 30, "climb": 30, "burrow": 20 }のように示し、"hover": trueは、飛行者が浮いているために動く必要がないことを示します(flyの速度が必要です)。パーティーのメンバーのものは、種族の水泳速度や呪文の飛行速度のように、同じキーの値参照であるeconomy.movementModesを通じてシートから読みます。0はその方法では移動しないことを表します。speedとeconomy.movementは歩行のままです。盤面上では次のとおりです。
- 移動量は最も速い移動方法で、移動した各マスはすべての方法から同時に差し引かれます。そのため、歩行30、飛行60のクリーチャーは、10歩いてから40飛べますが、30を超えて歩くことはありません。
- 飛行者は、水やどんな高さの段差も含め、固体でない場所ならどこでも1マスのコストで移動します。
- 水泳者は水を1マスのコストで渡り、陸では歩きます。
- 登攀者は、どんな高さの段差でも、上がった先の地面のコストで1歩進みます。
- 盤面には掘り進む地面がないため、穴掘りの速度はGMのために保持され、歩行として移動します。
各歩は、十分な残りがある最も安い方法で行います。盤面のない戦闘はこれを何も読まず、歩くだけの者は以前とまったく同じく移動します。
飛行の高さ(Capability API 1.114)。ルールセットがcombat.elevation.levelHeightとcombat.distance.perCellを与える盤面では、飛行者はその場でFly upとFly downを提示され、それぞれ飛行の1レベル分のコストがかかります(5フィートのマスで5フィートのレベルなら1マス)。真下の地面から最大20レベル上まで上がれます。上空にいる間は次のとおりです。
- 飛行しかできず、固体でないものの上を1歩1マスで飛びます。
- ほかの者との距離は、平面の距離と両者の高さの差の大きい方です。そのため、間合い5フィートの剣は30フィート上のドラゴンに届かず、ドラゴンの噛みつきも騎士に届きません。
- 丘と同じく、低い位置にいる者に対して高所の利を得ます。
- 届かないほど高くにいる相手の間合いを離れても、打撃を誘発しません。
- 倒される、伏せ状態にされる、移動速度を0にされると、
hoverを持たない限り、fallingのとおりに真下の地面へ落下します。
自分の高さと同じかそれより高い地面へ飛ぶと、地上の飛行者が崖の上へ飛ぶのと同じく着地します。新しいキーはありません。1.114より前のEngineは飛行者を地上に留めるため、高さに頼るパッケージは1.114を宣言します。
飛行中の状態(Capability API 1.354)。どの盤面でも、飛行者が空中にいるかどうかは個別に保持します。歩行能力がないかhoverを持つ飛行者は、空中から始まります。地上にいるものは、無償のTake offで、上へ飛ぶことで、または飛行でしか行えない一歩(水上や、飛行が歩行より低コストな場所への移動)で離陸します。歩行能力があれば無償のLandで着地でき、ホバリング能力がない場合は、伏せ状態にされる、倒される、移動速度を0にされることでも着地します。Fly downで地面まで下りても、着地するまでは地面の高さで空中に留まります。空中にいる間、クリーチャーの画像には飛行中の画像を使います。規則のほかの部分は、まだこの状態を読みません。
間合いと射程。 武器の行は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の行は、その種類の距離を持たないことを示します。通常の剣と投げ斧が同じリストに入る仕組みです。間合いがまったくない行は1マスに届きます。クリーチャーのアクションは自身のreachかrangeを使い、カタログの能力はmechanics.rangeを使います(0は自分か接触で、他者に向ける場合は1マスです)。
両方を持つ行は投擲武器です。間合いの内側では振るい、外側では射撃します。そのため、以下の射撃ルールは手に持って振るうときには適用されません。弓と違い、通り過ぎる相手を打つこともできます。
クリーチャーのアクションは、独自の単位で着弾する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 # # # . . . .
. # # # . . . # .
. . . . . . . . .バーストは狙ったマスからサイズ以内のすべてのマスです。コーンは実行者からそのマスの方向へ伸び、各段階で距離と同じ幅になります。ラインは同じ方向へ1マス幅で伸びます。3つとも固体にぶつかると止まります。
項目のmechanics.areaやクリーチャーのアクションのareaのラインは、sizeと同じ単位でwidthを持てます。最低1マスとしてマス単位に丸められます(Capability API 1.128)。たとえば、幅10フィートの60フィートのラインは{ "shape": "line", "size": 60, "width": 10 }です。1マスなら省略します。偶数のマス幅では、追加の列は術者の左側に置かれます。
視線と遮蔽。 両者を結ぶマスの直線を使います。その上に壁や山があれば射撃を遮り、範囲が向こうへ広がることを止め、標的はメニューに出なくなります。水は見通せます。射撃は川を越え、ラインの範囲はその上を進みます。Engine自身の戦闘も同じ視線の判定を使います。
遮蔽は攻撃者の立つ位置から、DMGの任意のグリッド規則の角の線で読みます。攻撃者の最良の角から、標的のマスの各角へ1本ずつ線を引きます。3本か4本が壁や山を通れば四分の三遮蔽です。1本でも壁や山を通るか、遮蔽として意味のある地形(森、廃墟)を通れば半遮蔽です。低い地形だけでは半遮蔽を超えません。攻撃者がまったく見えない標的は完全遮蔽で、メニューに出ません。攻撃に対しては、遮蔽として意味のある地形に立つ標的は、これまでどおり少なくとも半遮蔽を得ます。セーヴについては、効果との間にあるものだけが助けになります。
cover.bonusは、半遮蔽が攻撃の対象となる防御に加える値で、ログもそれを示します。cover.threeQuarters(Capability API 1.74)は、四分の三遮蔽が加える値です。なければ、bonusが両方に使われます。cover.saves(1.74)は、遮蔽が助けにもなるセーヴを指定します。アクション自身のセーヴに対してで、状態を終わらせるセーヴや集中を保つセーヴは含みません。バーストが着弾した地点から、それ以外は作り手から判断します。ログもそれを示します。cover.creatures(1.74)は、間に立つ者を敵味方を問わず半遮蔽にします。- 標的が遮蔽から何の利益も得ないと記述するセーヴ(5eのSacred Flame)は、項目の
mechanics.save、クリーチャーのアクションのsave、アイテムの使用のsaveで"ignoresCover": true(1.74)を指定します。
高さ。 盤面は最大3レベルの高さを持て、位置のあるすべての戦闘は、ルールセットの指定にかかわらず、それに従って歩き、見ます。1レベル上るには1マス余分にかかり、下るにはコストがかかりません。2レベル以上の段差は誰も歩けない崖で(押し上げられることもありません)、両端より高い地面は視線を遮ります。高所から撃ち下ろす場合、間にある低い遮蔽は何も隠しません。ルールセットは、システムが加えるものを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" }
}levelHeightは、ルールセット独自の距離で1レベルがどれだけの高さかです。highGroundは、高所から打ち下ろすときに攻撃判定が得るものです。"advantage"か、攻撃の対象となる防御から引く{ "bonus": n }です。省略すると何も与えません。rangeBonusは、高所からの射撃が何マス遠くまで届くかです。fallingは落下の効果です。2レベル以上の段差から押し出された者は下に着地し、落下距離(レベル×levelHeight)のperごとにdiceを、最大max個までtypeで受け、proneの状態があればその後にそれを受けます。ダイスはシステムが被害を振るのと同じく振ります。合計するか、dice-poolなら成功として数えて吸収を引きます。落下はほかの打撃と同じなので、誰かをダウンさせたり集中を破ったりできます。ログはどれだけ落ちたかを示します。fallingがなければ、落下は記録されるだけで何もしません。
離れていく相手への打撃。 opportunity.budgetを宣言すると、立っていて行動可能で、その行動枠と近接攻撃手段を持つ敵の間合いから戦闘者が出るとき、歩行はその場で止まり、敵に攻撃するか尋ねます。実行すれば行動枠を消費し、自身のターンに同じ攻撃をした場合とまったく同じく解決します。見送ればコストはありません。どちらでも、歩行は停止した地点から再開し、通った各マスのコストを支払います。打撃で移動者が倒れれば、倒れた場所で歩行を終えます。同じ間合いから経路が何度出ても、歩行全体につき各敵に1回の機会です。disengageは残りのターン中これを防ぎ、opportunityを宣言しないルールセットにはこの仕組み自体がありません。
この問いかけはウィンドウで、戦闘全体を止めます。尋ねられた全員が答えるまで、ほかは何も動きません。パーティーメンバーのウィンドウはプレイヤーが答え、打撃とその隣のPassが表示されます。ほかの者はその操作担当が答え、Game MasterのボスはGame Master自身の判断を通じて答えます。後述の「ウィンドウ」を参照してください。
敵の盤面の使い方。 誰も操作しない敵は、到達可能な各マスと、そこから使える各選択肢を組み合わせて評価し、歩行に対して受ける打撃ごとに減点します。現在地から最善の行動をすでに取れるなら、移動しない方を好みます。何も届かなければ距離を詰め、standardリストにdashがあれば先に疾走します。
表示される拒否理由。 out-of-reach(届く距離より遠い)、no-line-of-sight(固体が間にある)、unreachable(歩行コストを支払えない、または止まれないマス)、bad-cell(形状を向けられない場所に向けた)です。
サーバー側で戦闘がブロックを使う仕組み
ルールセットがcombatを宣言したゲームでは、Engineが従来から使う保存済み戦闘の上で、そのブロックに従って戦闘を解決します。
- 参加者。 誰が戦うかはGame Masterが定め、Engineは各パーティーメンバーの数値を自身のシートから読み取ります。そのルールセットのシートがないメンバーには作者が書いていない数値を与えず、名前を示して拒否します。
- 敵の数値の取得元は、次の順です。Game Masterがベスティアリで名指したクリーチャー、敵自身の名前とラベルが一致するクリーチャー、Game Masterがこの戦闘用に提案して制限処理で脅威尺度に収めたステータスブロック、最後にその段階自身の数値から構築する単純なクリーチャーです。すべてのフォールバックと制限を平易な言葉で記録し、戦闘が処理内容を説明できるようにします。ベスティアリの項目も提案も脅威尺度もないルールセットは、敵をでっち上げるのではなく戦闘を拒否します。
- シートが記録です。 受け付けたアクションごとに、体力、プール、状態、集中、瀕死ルールのカウントをシート自身のルールを通じて書き込みます。そのため途中で再読み込みしても戦闘の結果が正確に表示され、食い違う可能性のある戦闘終了時の集計はありません。
- メニューだけが合法性を定めます。 プレイヤーも敵も、行動するすべての者はブロックが生成する同じメニューからIDを選びます。Engineが操作する敵はEngine自身の戦術で選び、Game Masterが操作する敵には同じメニューからIDを1つ選ぶよう求めます。独自の数値を見せますが、ダイスの結果は教えません。
- 独自のダイス。 戦闘は自身のシードとカーソルを持つため、ディスクから読み直した戦闘も、本来振るはずだったダイスで続きます。
画面上の表示
戦闘画面は作者の言葉で進みます。メニューは独自の攻撃、能力、対抗判定、列挙した標準アクションで、それぞれ独自の行動枠とプールから何を消費するかを示します。行動順、ラウンド、指定したすべての状態と残りラウンド、一時ポイント、集中、瀕死ルールの2つのカウントを表示します。ログも、「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 }
}
]checksは対抗判定が読む数値で、それぞれシート上の値です。防御やセーヴと同じく、戦闘開始時に1回読みます。数値で直接書いたクリーチャーは独自の値を指定し("checks": { "brawn": 2 })、シートを持つクリーチャーはシートから読みます。最大12個です。- ロール。 両者が
attackRoll.diceを振り、ここで使える判定(attacker.checks、defender.checks)の最良のものを加えます。合計が高い方が勝ち、同値はtiesが"attacker"でない限り防御側の勝ちです。ログは両者を示します(「Juno tries Grab on Ash-hound: 12 (6 + 6) + 3 = 15 with Brawn against 2 (1 + 1) + 2 = 4 with Brawn, and wins.」)。 - 勝利すると
onWinの内容を行い、少なくとも1つ必要です。 appliesは勝者を出所として敗者に状態を付与します。そのためendsWhenSourceDownを付けた状態は、掴んでいる者が倒れると終わります。roundsは状態に時計を与え、なければ何かが終わらせるまで続きます。endsは実行者か標的から状態を解除します。pushは敗者を勝者から真っすぐ離れる方向へ、独自の距離単位でその距離だけ動かし、固体、立っている者、盤面の端、すり抜けられないほど狭い角の手前で止まります。強制移動なので、移動量を消費せず、誰もそれに打撃しません。盤面のない戦闘では誰も動きません。
負けても何も起きません。それが掴みの失敗です。
from: { "holding": "held" }は、実行者にその状態を付与した者だけを対抗判定の対象にし、その状態がある間だけメニューに載せます。振りほどくことはこう表します。reachは独自の距離単位で届く距離で、省略すると隣のマスです。reachとpushにはcombat.distanceが必要です。strike: trueは、攻撃と同じく、アクションが複数の打撃を得る場合に1打撃の代わりにできます。最初に行うと行動枠を消費して残りの打撃を手持ちにし、手持ちがある状態で行うとその1つを消費します。5eのリファレンスはこの方法で組み付きと突き飛ばしを行います。- メニューでは対抗判定を独自のグループにまとめ、勝率を示します。Engineが操作する敵はほかと同じく評価しますが、控えめです。掴みや押し出しは何かの下準備であり、振りほどくことは掴まれている間だけ最も価値があります。敵を操作するGMは同じメニューから選びます。
- GMが作る敵の判定は、命中率と同じく段階に制限されます。
対抗判定は、パッケージ形式のルールセットではCapability API 1.43です。
ウィンドウ: 戦闘を保留する
一部の瞬間には、現在の実行者とは別の者に判断権があります。Engineは代わりに決めず、その者のために戦闘を保留します。この一時停止がウィンドウです。
ウィンドウを開く状況は7つで、そのうち2つはすでに宣言した内容に由来します。
- 誰かが離れる。 攻撃可能な敵の間合いから出る歩行は、その一歩で止まり、敵に尋ねます。前述の「離れていく相手への打撃」を参照してください。
- あるターンと次のターンの間。 ターン終了時、次のターンが始まる前に、
signaturePointsを持ち、自身のsignatureアクションのいずれかを支払える敵全員へ、購入するかを尋ねます。combat.signatureAtTurnStartが別の指定をしない限り、購入できるのはこの瞬間だけです。固有アクションは、自身も含め誰のターンメニューにも出ません。 - 敵のターン開始(Capability API 1.805)。
"combat": {"signatureAtTurnStart": true}を指定すると、相手のターンが始まるときにも、signaturePointsを持つ全員に尋ねます。ターン開始によって引き起こされるもの(状態、セーヴ、リアクション)がすべて起きた後、相手が行動する前です。汎用戦闘の予測介入と同じく、これから行動する英雄にボスが応じます。住処アクションは独自のカウントを保ち、ここでは提示されません。省略した場合、シグネチャーアクションを購入できるのは、5eの伝説的アクションと同じくターンの間だけです。これを使うルールセットにはCapability API 1.805が必要です。 - 誰かが何かを使う。 解決前に、それが誰に向けられたかにかかわらず、反対側の者のうち、その瞬間を待つ項目を持つ全員に尋ねます。ただし、その項目が使用者に届く場合に限ります。標準アクションと対抗判定はこの瞬間を開きません。
- 何かが誰かに向けられる。 解決前に、それが向けられた反対側の者のうち、その瞬間を待つ項目を持つ全員に尋ねます。味方からの回復は対処すべき脅威ではないため、味方のアクションはウィンドウを開きません。
- 攻撃判定が誰かに命中する。 ダメージの前に、命中を受けた者がその瞬間を待つ項目を持っていれば、その者に尋ねます。その者が実行したことはこの攻撃に反映されます。後述の「命中直後の瞬間」を参照してください。
- 何かが誰かを傷つけた。 解決後、誰が行ったかに関係なく、ダメージを受けた者のうち、その瞬間を待つ項目を持つ全員に尋ねます。傷ついたことは自身の事実ですが、加害者に向け返す項目を味方に向けることは依然としてできません。
- 誰かが落下する。 ダメージと伏せ状態の前に、落下する者に届き、その側を許可するリアクションを持つ者に尋ねます(Capability API 1.124)。
- 誰かがターンを開始する。 その者が行動する前に、標的の側でその者に届く項目に対して尋ねます(Capability API 1.131)。
最後の6つは、カタログ項目やクリーチャー自身のアクションが、待つ瞬間を指定して求めるものです。1つのアクションがusedとaimedの両方を開く場合は、まず使用について尋ね、誰も取り消さなければ次に向けられた者に尋ね、両方の回答後に解決します。命中は各ロールが命中するたびに、負傷はアクション全体の終了後に尋ねます。
どの状況で開いた場合も、ウィンドウは次のように動作します。
- 開いている間は、ほかは何も動きません。 現在のターンの実行者も、ターン終了も、別のウィンドウも進みません。戦闘は待機します。落下は、それを引き起こした行動の処理が終わるまで着地を保留し、それ以降の落下は後で尋ねます。
- 行動順に1人ずつ尋ね、各自に1回だけ尋ねます。 見送りは常に有効な返答で、コストはありません。尋ねる対象に実行可能なものがなければ、質問せず飛ばします。
- 止めた場所から正確に再開します。 歩行は残りのマスを進み、通った各マスのコストを支払って完了します。
- 操作担当が答えます。 自分のパーティーメンバーのウィンドウは自分で答え、メニューに選択肢とPassが並びます。敵はその操作担当が答え、Game MasterのボスはGame Masterに尋ねます。機会を見送ることも返答の1つです。
- 戦闘と一緒に保存します。 歩行の途中で閉じたゲームを再開しても、尋ねる相手と残りのマスは同じです。
最初の2つに追加の宣言は不要です。opportunity.budgetがあるルールセットは一方を、signaturePointsがあるベスティアリはもう一方を得ます。どちらもなければ表示されません。
項目がどの瞬間を待つかを指定する。 mechanics.reactionをtrueではなくオブジェクトで書きます。
"reaction": { "on": "aimed", "at": "source", "cancels": true }onはused、aimed、hit、harmed、falls、turn-startのいずれかで、そのウィンドウのメニューに項目を載せる指定です。Engineが監視する瞬間はこの6つだけです。依然として"reaction": trueとだけ書かれた項目は、ターン中に実行しないことしか伝えません。どこかに提示するには不十分なので、どのメニューにも出ません。atはsource(デフォルト)、target、chosenのいずれかです。sourceはその瞬間を生じさせた相手へ実行内容を向け、標的を自動入力するため、選択を求めません。chosenは項目自身の対象設定を保ち、選択を求めます。targetは、その瞬間の当事者であるクリーチャーに向けます。fallsへの応答は、選んだ落下者に効果を及ぼします。cancelsは、ウィンドウが保留していた内容自体の発生を止めます。指定できるのはusedかaimedの項目だけです。すでに起きた瞬間は取り消せず、命中は判定済みだからです。againstは、項目が応じる対象を特定のカタログから使われたものに絞ります。"against": { "catalogs": ["spells"] }は呪文だけに応じます。背後に項目のないアクション(リストの武器、クリーチャー自身のアクション)はどのカタログにも由来しないため、カタログを指定する項目の瞬間を開きません。againstを省略すると、項目は何にでも応じます。
budgetも指定してください。なければリストのデフォルトを消費します。リアクションはほとんどの場合、専用の行動枠を使います。これが1ターンに複数回使うことを防ぎます。
コストは誰かに尋ねる前に消費済みです。 キャンセルされたアクションは発生を止められるだけで、購入自体は取り消されません。行動枠とプールはすでに失われています。独自のシステムで返却する場合も、まだ表現できません。
対抗手段は次のように書き、盤面上では自身の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にその段階を加えた値に対する判定です。5eのCounterspellは、スロットのレベル以下の呪文を止め、それより上なら10 + 呪文のレベルに対して呪文発動能力値の判定を求め、ほかの呪文と同じく上位発動できます。
"reaction": {
"on": "used",
"cancels": true,
"against": { "catalogs": ["spells"] },
"upTo": "paid",
"above": { "check": { "abilityModFromField": "spellcasting_ability" }, "dc": 10 }
}支払ったものの段階は、それを支払ったプールの段階です。プール自身のlevel(持ち主のシートから読む値。5eのパクト・スロットはウォーロックのスロットのレベルで発動します)があればそれ、なければグループ内の位置で、最初のプールが1です。コストがないものや、グループに属さないプールから支払ったものは段階0なので、そのような対抗手段はどれもそれを止めます。判定は戦闘自身のダイスで、応答者の判定への状態を適用します。dice-poolの戦闘には達成すべき難易度がないため、aboveを拒否します。シートのないクリーチャーは判定を{ "const": n }と書きます。応答が自身より上に届くときはログが段階とロールを示し、それを止めたときは通常の行が続きます。aboveがなければ、より高いものは止まらず、応答のコストは引き続き消費されます。
命中直後の瞬間。 hitの項目で、Shield、Parry、Uncanny Dodgeを表します。攻撃は判定の後で保留され、ダメージを与える前に命中を受けた者に尋ねます。その者が実行したことはその攻撃に反映されます。判定は振り直さず、その時点の防御に対して再確認するため、防御に加算する状態で命中を外れに変えられます。常に命中する出目はそれでも命中します。応答として付与した、1回の攻撃の間続く状態(endsAfter: "attacked")は、ダメージも含めてこの攻撃に適用され、この攻撃で消費されます。「その攻撃のダメージを半減する」は、1回の攻撃に対する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が必要です。
名前で1つの呪文に応じる(Capability API 1.117)。againstはcatalogsと並べてentriesを<catalog>/<entry>で指定でき、どちらかが一致すると瞬間が開きます。alsoは、それぞれ独自のagainstを持つ最大3つの別の瞬間で、同じ応答を行います。状態の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)。fallsのリアクション(alsoの中のものを含む)は、段差から落ちるクリーチャーや、地面に落とされた飛行者に、落下がダメージを与えたり伏せ状態にしたりする前に応じます。その射程と標的の側は落下する者に対して確認され、応答はそのクリーチャーに効果を及ぼします。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の項目は、1つの打撃や効果で落下する、射程内で標的の側にいる対象となるクリーチャーを提示します。メニューとディレクターは、デフォルトで近い順に数の上限まで対象となる全員を選び、プレイヤーは選択を変えられます。後の落下は別のイベントです。Feather Fallは上と同じfallsSafelyの状態を使います。
{
"kind": "buff",
"targets": "ally",
"targetCount": 5,
"range": 60,
"budget": "reaction",
"reaction": { "on": "falls" },
"applies": [{ "condition": "feather_falling", "duration": { "rounds": 10 } }]
}未対応
ルールセットがEngineにできないことを主張しないよう、明記します。
- 簡素な盤面を超えるもの: 障害物の上を飛ぶことはできません。クリーチャーが動くのは、自身の歩行、乗騎の歩行、テレポート、押し出すもの(対抗判定、エントリー、クリーチャーのアクション、ゾーン)、引きずる者によるときだけです。
- 対抗判定は簡素です。 そのロールはウィンドウを開きませんが、それによる落下には応じられます。
- 項目が待てる瞬間は
used、aimed、hit、harmed、falls、turn-startの6つだけです(前述の「ウィンドウ」を参照)。Engineはこれらを項目のために検知します。ほかの2つのウィンドウ、つまり離脱とターン間の一時停止は戦闘自身が開くもので、項目から求める瞬間ではありません。セーヴの判定や死亡に対応する瞬間はありません。 - 連鎖しません。 戦闘はウィンドウをスタックではなく1つだけ保持するため、ウィンドウ内で起きたことは別のウィンドウを開きません。対抗にさらに対抗することはできず、リアクションの効果も追加の瞬間を開かず、ウィンドウ内で行った攻撃は命中しても保留されません。ウィンドウの間に起きた応答可能な落下は、ウィンドウが閉じるまで保留され、その後順に尋ねられます。
- 命中となるのは攻撃判定だけです。 攻撃判定なしで当たるもの(命中するダーツ、全員がセーヴする範囲)は
hitの瞬間を開きません。 - ダメージの修正値は攻撃の命中に属します。 応答は持ち主にダメージの修正値を付けたり、
resist-allで受ける被害を半減したりできます。ダメージの修正値がセーヴだけの効果を変えることはありません。 - 返却はありません。 キャンセルされたアクションのコストは消費済みです。
- 状態が変えるものは固定リストです。 防御、攻撃判定、セーヴ、対抗判定の判定、移動速度、体力の最大値、与えるダメージ、受けるダメージです(段階とアイテムの効果も同じです)。ダメージの修正値は攻撃の命中だけを変え、セーヴに基づくダメージや自動命中に加わることはありません。
- 数値で直接書いたクリーチャーには負傷トラックがありません。 体力がトラックのルールセットでも、そのようなクリーチャーは点数を失います。
sheetを与えると、受ける打撃は自身のresist、vulnerable、immuneで先に軽減した後、マスに印を付けます。 - 追加効果は自動発動します。
onの値はhitだけなので、各期間で最初の条件を満たす命中が効果を使います。消費するか尋ねる瞬間はありません。 - 攻撃で動く数値は簡素です。 費やす打撃は数値だけを振り、ほかには何もないため、武器がそれを変えることはなく、
floorも同様です(頑丈な標的は奪う打撃を吸収し、硬度は費やす打撃を止めますが、それ以外にどちらかを小さくするものはありません)。クラッシュはどれだけ深くても決まったターン数の後に解けます。ウィンドウ内で行う攻撃(離脱する相手への打撃、リアクション、固有の行動)は最初のスタイルで行います。 - 作られた敵は何も吸収せず、硬度もありません。 GMが1回の戦闘のために作るクリーチャーは脅威尺度に制限され、尺度は吸収や硬度について何も示さないため、どちらも持ちません。