ルールセットのシート
このページでは、ルールセットのキャラクターシートを設計します。能力値、スキル、フィールドとリスト、ライブステート、負傷トラック、ペナルティ、休息、Game Master向けの文章に加え、パーティーシートと進行クロックを扱います。ルールセットの作者向けのページです。始める前に、Game Modeのルールセットを作成するを読んでください。
シート
sectionsは編集画面の項目をグループ化します。フィールド、派生値、リストはsectionで所属するセクションを指定し、能力値、スキル、セーヴも指定できます。指定すると、編集画面、ゲーム内のシート、Game Masterのシートブロックがその見出しの下に表示します(セクションを指定しないシートは従来どおりに表示します)。セクションはuntrained規則(後述)も持てます。abilitiesは基本能力値です。skillsとsavesはそれぞれ判定に使う能力値、cap、untrained規則(後述)を指定できます。fieldsは単一の値です。型はnumber、text、longtext、boolean、enum(固定の選択肢)、dice(1d8などの文字列)です。textフィールドやリストの列には、suggestionsを追加できます(Capability API 1.796)。40語までをその下にチップとして表示し、選ぶたびに記入内容へ追加します。フィールドには引き続き自由に入力できます。たとえば、レンジャーの得意な敵をクリーチャーの種別から選べます。そのようなフィールドでは、選ぶ数をpickで指定することもできます(Capability API 1.797)。クラスレベルに応じて増える派生値の個数など、シートから読み取る値です。エディターは「Choose N」と選択済みの数を表示し、N個に達すると追加のチップを提示しなくなりますが、手入力した内容は決して拒否しません。derivedは他の値から計算し、手入力で上書きできません。800個までシートに持てます(Capability API 1.729。1.111からは、400、1.88からは、240、1.84からは、120、それより前は、60)。240を超えるパッケージはCapability API 1.111を宣言し、400を超えるパッケージはCapability API 1.729を宣言します。演算はsum、min、max、scale(固定の数値を乗算して丸める)、multiply(Constitution修正値とレベルの積のように、二つから六つの値を掛け合わせる。Capability API 1.82)、stepTable(レベルから習熟ボーナスを求めるように、しきい値表から値を引く)、enumTable(列挙型フィールドやライブステートの各値に対応する数値。後述の「ライブステート」を参照)です。listsは装備、呪文、特性など、独自の列を持つ表です。リストには、24列まで指定できます。12列を超えるリストがあるパッケージはCapability API 1.165を宣言します。poolsを持つリストは、各行を独自の最大値を持つリソースにします。使用回数に制限のあるクラス特性向けです。数値列はダイスを振って埋められます。"roll": { "count": 1, "sides": 8 }のように書き、sidesは数値、同じ行の別の列({ "column": "die" }。数値列か、d8のようにダイスとして読める値を持つ列挙型)、またはシートから読み取る値です。シートエディターにはRollボタンが表示され、Engine自身のダイスを振って、列のminとmaxの範囲に収めた合計を書き込みます(Capability API 1.85)。liveはプレイ中に変わるものです。pools(ヒットポイント、呪文スロット、Grit)、tracks(消耗などの範囲上の数値、またはマスに印を付ける負傷トラック)、text(集中している対象などの短いメモ)、conditions、states(形態や構えなど、決まった集合から選ぶひとつの値)です。
数値を読むものは値参照で指定します。これはconst、field、derived、abilityScore、abilityMod、abilityModFromField、skillMod、saveMod、listSum、livePool、liveTrack、itemStatのうちキーを厳密に1つだけ持つオブジェクトです。たとえば最大値に派生値を使うプールは"max": { "derived": "grit_max" }です。
listSumはリストの数値列一つを合計します。{ "listSum": { "list": "gear", "column": "bulk", "onlyWhen": "packed" } }です。onlyWhenは任意で、真偽値列を指定し、それがオンの行だけを数えます。空のセルはその列のデフォルトとして数え、hideWhenで隠れたリストは何も加えません。Ember Roadsはこの方法でBurdenを、キャラクターが荷物に入れた装備から計算するため、手入力の数値のようにリストと食い違うことはありません。カタログの連動列は、派生値を通じても、リストの合計を読めません。リストは自身の連動セルや、その合計を読み返す連動セルを持つことがあり、再計算が収束しなくなるためです。livePoolはlive.poolsの一つの残量を読みます(リスト行のプールは含みません)。liveTrackはlive.tracksの一つを読み、任意でreadを指定します。"value"は現在の位置(デフォルト)、"filled"はminからどれだけ上か、"remaining"はmaxまでどれだけ残っているか、負傷トラックだけで使える"penalty"は現在のペナルティです。隠れたプールやトラックを読むと、0になります。Gravewatchの「Harm still to take」は{ "liveTrack": "harm", "read": "remaining" }です。- ライブ値の読み取りは、判定を振る時点、戦闘の開始時点、Game Masterのシートブロックを書く時点のライブステートを使います。まだライブステートがない場合(シートエディターやインポートの確認画面)は、プレイ開始時の状態を読みます。プールは
startの指定どおり満タンか空、トラックはdefault、負傷トラックは印なしです。 - ライブステートができる前に計算する値は、ライブ値を読めません。プールやトラックの
max、習熟ボーナス、カタログの連動列やスケーリングです。ライブ値を読む派生値を通じる場合も、ライブ値が上限を決めるスキルを通じる場合も同じで、インポートは該当する値を示します。 - この三つは、パッケージ形式のルールセットではCapability API 1.39です。
itemStatは、装備している鎧のガード値など、キャラクターが持つアイテムを読み、ライブ値の読み取りと同じ規則に従います。シート上のアイテムを参照してください。Capability API 1.52です。
未習熟時の判定。 キャラクターが習熟していない(段階が先頭の)スキルやセーヴは、ルールセットが別に定めない限り通常どおり振ります。別に定めるには、スキルやセーヴ、または所属するセクションにuntrainedを指定します(スキルやセーヴ自身の規則が優先します)。
"sections": [{ "id": "labour", "label": "Labour", "untrained": { "by": -1 } }],
"skills": [
{ "id": "dig", "label": "Dig", "ability": "sinew", "section": "labour", "untrained": "refuse" },
{ "id": "listen", "label": "Listen", "ability": "nerve", "untrained": "harder" }
]"normal": 通常どおりです(デフォルト)。{ "by": -3 }: 判定の数値に-20から20の範囲で加えます。プールならダイス、合計方式なら固定値です。シートに表示され、すべての判定が振る数値の一部で、capより前に適用します。"harder": 1段階難しくします。プール方式ではダイスごとの目標値が1上がり(目標値の範囲内に収まります)、目標値を動かせるプールのルールセットが必要です。それ以外ではロールを変えられないため、インポート時に拒否されます。"refuse": 判定をまったく振りません。EngineはGMの要求をreason="untrained"付きで書き戻し、それで決着します。後から振ることはなく、GMにはキャラクターが試みられなかったことが伝わり、語りもそれを反映します。スキル判定のエンドポイントはそうした判定に400(skill_check_untrained)で応え、その判定に対する分岐ブロックはどちらの文章も残しません。シートエディターはその数値を表示しません。- シートのないキャラクターには読み取る習熟がないため、未習熟の規則は適用されません。
- GMのリマインダーはセクションごとまたはスキルごとに未習熟の規則を列挙するため、GMはキャラクターが実行できる判定を求めます。
能力値、スキル、セーヴのセクション指定と、あらゆる場所のuntrainedは、パッケージ形式のルールセットではCapability API 1.41です。
スキルやセーヴはcapを持てます。判定が到達できる最大値を示す値参照で、成長しても超えられない評価値や、判定を押さえ込むトラックを表します。GravewatchはSootheを、番人に残っているResolveで制限します("cap": { "livePool": "resolve" })。制限後の数値がシートに表示され、すべての判定が振る数値です。with=による入れ替えは制限前の数値で計算し、そのあと再び制限します。上限はスキルやセーヴの修正値を読めず、上限が読む派生値も、それより上で宣言した派生値も同様です。そのためシートは引き続き上から下へ1回で計算できます。Capability API 1.39です。
hideWhenは、別のフィールドの値によってフィールド、派生値、リスト、プール、普通のトラックを隠します。方法は厳密に3つのうち1つです。equalsは1つの値に一致する場合、notEqualsは1つの値に一致しない場合(フィールドがほかの値を持つときは常に隠れます。「この種類のキャラクター専用」を表す方法です)、inは値のリストに含まれる場合です。指定する値はすべてフィールドが持てる値でなければならず、そうでなければ規則は一致できません。値は1つずつ検査し、notEqualsとinでは数値フィールドの範囲とテキストフィールドの長さも検査します。規則はシートエディターが表示する値を読みます。未設定のフィールドは空白のシートの初期値、ルールセットが提供しなくなった列挙値はフィールドのデフォルトとして読みます。5eファイルはequalsで、呪文を使わないキャラクターの呪文スロットを隠します。Gravewatchは"hideWhen": { "field": "watch", "notEquals": "night" }で、夜番でないすべての番人のシートからランタンの油を除きます。レイヤーは、これらが比較する値を削除できません。負傷トラックは隠せません。シートの表示にかかわらず、ロールと戦闘が読むためです。notEqualsとinはCapability API 1.39です。
普通のトラックのmaxは数値の代わりに値参照にでき、キャラクターの評価値でトラックの長さを決められます。"max": { "field": "willpower_rating" }です。minとdefaultは数値のままです。名前付き段階を持つ負傷トラックのmaxは段階数と等しく、番号付きのマスのトラックの長さは自身のmaxです(後述の「名前付き段階の代わりに番号付きのマス」を参照)。alwaysShow: trueはデフォルト値でもGMのシートブロックにトラックを表示します。毎ターン重要な評価値のためのもので、これがなければデフォルト値のトラックは省略されます。0のままの死亡セーヴ3つは何も伝えないためです。この3つは、パッケージ形式のルールセットではCapability API 1.37です。
ライブステート: 形態、構え、明かり
列挙型フィールドはキャラクター作成時に選んだらそのままで、状態はオンかオフしかありません。ライブステートは、プレイ中に変わる、決まった集合の中の1つの値です。変身する者の形態、戦闘の構え、ランタンの明るさなどです。
"live": {
"states": [
{
"id": "stance",
"label": "Stance",
"values": ["guarded", "steady", "reckless"],
"valueLabels": { "guarded": "Guarded", "steady": "Steady", "reckless": "Reckless" },
"default": "steady"
}
]
}valuesは2~40個で、それぞれvalueLabelsの項目か、値そのものとして表示します。すべてのラベルと同じ規則(1行、角括弧なし、マクロの波括弧なし)に従い、シートコマンドが引用符で囲むため、二重引用符は使えません。ステートは最大12個です。defaultはすべてのシートの開始値で、省略すると最初の値です。デフォルトから変わったステートだけを保存し、ステートが提供しなくなった保存値はデフォルトとして読みます。hideWhenは、プールと同じくフィールドの値によってステートをシートから除きます。表示されず、コマンドでも設定されず、表(後述)からは値なしとして読まれます。- GMは
[sheet: who="Name" op="state" state="Stance" value="Reckless"]で設定し、ステートはIDかラベル、値はそれ自体かラベルで指定します。シートにないステートや値は拒否されます(unknown-state、unknown-value)。Engineはルールセットにステートがある場合だけコマンドを教えてすべての値を列挙し、各シートブロックはデフォルトの場合も含め各ステートの値を示します。「人間の姿」のような事実は、語りが毎ターン必要とするためです。 - ゲームのシート画面では、各ステートに選択欄を表示します。
- 休息では、ステートを指定する回復処理で元に戻せます。
{ "state": "stance", "to": "default" }、または"to"にその値の1つを指定します。
連動する数値。 "op": "enumTable"の派生値は、列挙型フィールドやライブステートの各値に対応する数値を返します。
{
"id": "stance_brawn",
"label": "Stance on Brawn",
"op": "enumTable",
"from": { "liveState": "stance" },
"table": { "guarded": -1, "reckless": 2 },
"default": 0
}fromはfield(列挙型フィールド)かliveStateの厳密に片方を指定します。tableの各行はそれが取り得る値で、1~40行です。表にない値や、シートが隠すステートはdefaultを読みます(省略時は0)。- フィールドはキャラクター作成時に固定されるため、フィールドをキーとする表は最大値の計算に使えます。Gravewatchは夜明けの番に就く番人のResolveを1増やします。ライブステートはプレイ中に変わるため、ステートをキーとする表は
liveTrackと同じくライブ値の読み取りです。ライブ状態ができる前に計算する値は、直接でもほかの派生値を通じても、それを読めません。キーがstateではなくliveStateなのはこのためです。ライブ状態の読み取りにはすべてliveの名前が付くので、最大値に使えないものを作者もインポートも見分けられます。 - 数値をダイスに反映するには、
resolution.adjustでそれを指定します(「シート由来の修正値」を参照)。Ember RoadsはStanceをすべてのBrawnのロールに加え、Gravewatchは覆いを閉じたランタンや消えたランタンの分をすべてのNerveのロールから引きます。 - レイヤーは、表が行を持つフィールドから値を除けます。レイヤーの有効中、その行は読まれません。
ライブステート、enumTable、stateを指定する休息の処理は、パッケージ形式のルールセットではCapability API 1.42です。
負傷トラック: 数値でなくトラックとしての体力
HPを数えないシステムも多くあります。前より悪い段階のマスを縦に並べ、負傷時に印を付けます。live.tracks項目へkindsと、名前付きのlevelsか番号付きのboxes(後述)のどちらかを与えると、範囲上の数値からこの方式へ変わります。
システムに必要なのはどちらでしょうか。 プールは受けたダメージ量、トラックは各ダメージの量と種類を記録します。打撃、致死、加重といった種類があり、加重は治りにくい、吸収できない、最終的に死に至らせるなど、命中後も種類が重要なら、ロール後もそれを保持する場所が必要です。種類を保持できるのは印だけです。ポイントのプールは引かれた後は小さな数値でしかなく、どのポイントがどの種類だったかシートは記憶しません。体力がプールのルールセットでcombat.damageKindsを黙って無視せず拒否するのはそのためです。プールにもdamageTypesは使え、敵が抵抗や完全耐性を持つこともできます。それは負傷後の種類ではなく、1撃のどれだけが通るかに関する問題だからです。
{
"id": "harm",
"label": "Harm",
"min": 0,
"max": 4,
"levels": [
{ "label": "Scuffed", "penalty": 0 },
{ "label": "Winded", "penalty": -1 },
{ "label": "Bleeding", "penalty": -3 },
{ "label": "Down", "penalty": -99 }
],
"kinds": [
{ "id": "knock", "label": "K", "severity": 0 },
{ "id": "tear", "label": "T", "severity": 1 }
]
}levelsは良い順に1~16段階です。各段階はlabelと0以下の整数penaltyを持ちます。大きな負数で行動不能を表すシステムなので、-99も有効です。kindsは受けられる負傷の1~6種類で、各項目にid、マス用の短いlabel、severityがあります。重大度は重複不可ですが、順序以外に数値自体の意味はなく、間隔は自由です。- 両方が必要です。
levelsもboxesもないkindsは印を置く場所がないため拒否され、kindsのないlevelsやboxesは印の種類が必要なため拒否されます。トラックが持つのはlevelsかboxesのどちらかで、両方は持てません。 - 2つの言葉を区別してください。
kindsは印が取り得る種類の定義です。印はプレイ中にその種類の1つがトラックに載ったものです。定義が種類を持ち、キャラクターシートが印を持ちます。 - 負傷トラックは印なしで始まるため、
minは0です。名前付き段階のトラックの長さは段階数なのでmaxはlevels.lengthで、それ以外は黙って修正せず拒否し、食い違う2つの長さをファイルに保持させません。マスのトラックの長さは自身のmaxで、シートが計算する値も指定できます(後述の「名前付き段階の代わりに番号付きのマス」を参照)。
曖昧な理解では違うトラックになるため、規則を正確に示します。
- 印は重大度の高い順に保持します。7段階のトラックは最大7つです。
- 印は末尾へ追加するのでなく、既存の印の重大度順へ挿入します。その重大度で入れる最上位を取り、軽い印を下へ押します。
- 適用するペナルティは印のある最下段のものだけで、合算しません。上のトラックの3つの印は
0 + -1 + -3でなく-3です。 amountは1種類の印の個数で、1つずつ適用します。そのため途中で埋まるトラックも、最初から満杯のトラックも同じ規則です。- 満杯のトラックへの追加は、新しい印を増やさず最も軽い印を1段階重くします。追加した印の種類にかかわらず、独自の種類の序列を1段上げます。
- 最大重大度を超えて重くなる印は最大に留まり、載せられなかった1つを超過分として数えます。超過分も保存するため、再読み込みで受けたダメージを忘れません。
- 回復は同じコマンドで負の量を使います。 印より先に超過分を消します。トラックの種類の1つを指定した回復はその種類の印だけを消すため、「打撃は治るが致死は残る」は負の量と
kind="bashing"で表します。トラックにある種類を指定しない回復は、最も軽い印から消します。
プレイ中に印を付ける方法。 GMは[sheet: op="damage" track="harm" kind="knock" amount="1"]と書き、負のamountで回復します。マス単位で埋めるトラックでは、命中するマスを示すbox="3"を加えます。pool=を指定する従来のdamageは変わりません。単なる数値では新しい印の種類を示せないため、負傷トラックの通常のtrackコマンドは拒否されます。こうしたシステムが想定するように、プレイヤーもシートで手動で印を付けたり消したりできます。
戦闘でも印を付けられます。 combat.healthをプールでなくトラックに向けると、命中した1撃はcombat.damageKinds.marksで指定したマス数に、そのブロックがダメージ種別から対応付ける種類の印を付けます。トラックが満杯なら倒れ、死亡ルールがその状態を読みます。マス単位で埋めるトラックでは、per-pointのダメージは当たるマスを指定し、per-blowは最初のマスを狙います。どのマスにも入らない打撃はキャラクターを倒します。そのようなトラックを使うシステムでは、それが戦闘不能を意味するためです。回復は種類を問わず最も軽い印を1つ消します。一時ポイントを置くバッファーはないため、一時ポイントは拒否します。Engineはトラックを残り段階数として読むため、戦闘のほかの部分、倒れること、蘇生、ログ、要約は変わりません。
休息で負傷トラックを治せます。 "to"でトラックを指定する回復処理は、超過分も含め、印を指定個数まで減らします。負の"by"なら超過分から先に指定個数を消すため、"by": { "const": -2 }は2つ消します。kindも指定する処理はその種類の印だけを消します。Gravewatchの「Catch your breath」は{ "track": "harm", "kind": "knock", "to": "min" }で、knockの印を治し、tearの印は残します。休息は負傷を記録しないため、印を増やすことになる処理は何もしません。正の"by"もこれに含まれ、何も通知せずに省略されるので、マイナス記号を書いてください。
名前付き段階の代わりに番号付きのマス
トラックの長さがキャラクターのタフさに応じる場合は、levelsの代わりにboxesを与えます。マスの数は自身のmaxと同じで、シートが計算する値(ライブ状態を読むものは不可)を指定でき、最大64です。
{
"id": "strain",
"label": "Strain",
"min": 0,
"max": { "derived": "strain_boxes" },
"boxes": {
"penalty": {
"by": "remaining",
"table": [
[0, -1],
[1, 0]
]
}
},
"kinds": [{ "id": "strain", "label": "S", "severity": 0 }],
"fill": "indexed",
"onFull": "refuse"
}- 現在のペナルティは、
filledまたはremainingのマス数(その数が何であれ)でtable(派生値と同じ段階表で、ペナルティは0以下)から読みます。そのため印がなくてもペナルティを課す表にできます。どのマスに印があるかには依存しません。 - マスには番号が付きます。シートには「Box 3」と表示し、GMのシートブロックは段階名ではなく、全体のうちいくつに印があるかを示します。
マス単位の記入と、拒否するトラック
"fill": "indexed"は、コマンドがbox=で指定したマス(指定がなければ最初のマス)か、その上で次に空いているマスに印を付け、一度付けた印を動かしません。回復は、最も軽い印のうち番号が最も大きいものを消します。シート画面では、プレイヤーが空いている任意のマスをクリックできます。"onFull": "refuse"は、空きマスがない印を、最も軽い印を重くする代わりに拒否します。コマンド全体が拒否されるため、空きが2マスのところへの3つの印は1つも付きません。indexedのトラックは常に拒否するので、その横に"onFull": "refuse"と明記してください。
リストが加える段階
名前付き段階を持つトラックに"extra": { "list": "scars", "countColumn": "levels", "penaltyColumn": "penalty" }を指定すると、シート上のリストでキャラクターごとにトラックを延ばせます。各行は順に、そのペナルティで指定数(最大16)の段階を加えます。挿入位置は、ペナルティがそれと同等以上に良い最後の段階の後です。ペナルティが一致すればその段階の名前を、そうでなければペナルティの値を名前にします。Gravewatchの傷跡はこの仕組みです。シートが隠すリストは何も加えず、印のある段階の行を削除した場合、収まらなくなった印は超過分として保持します。シートを編集しても負傷はなくなりません。
boxes、fill、onFull、extra、休息の処理のkindは、パッケージ形式のルールセットではCapability API 1.40です。
ロールへのペナルティ
resolution.penaltyFromは、このルールセットのすべての判定へペナルティを適用する負傷トラックを指定します。推測でなく明示宣言なので、省略したルールセットは負傷トラック導入前と同じように振ります。
ペナルティの作用は、シートの数値と同じく判定方式が決めます。
dice-poolではプールのダイスを減らし、独自のpool.minを下限にします。pool.minが1なら最下段でも1個振り、pool.minが0なら振らずに失敗します。dice-sumではロールの固定修正値となり、能力値と習熟が加える数値にまとめます。
指定先は負傷トラックである必要があります。普通のトラックにはペナルティがなく、指定するとインポート時に拒否されます。結果に適用したペナルティが表示されるため、ダイスが減った理由を確認できます。GMのシートブロックにも段階とペナルティが表示されます。
シート由来の修正値
シートの数値には、関係するすべてのロールに付いて回るものがあります。登攀には重い荷物、忍び足には鎧のペナルティ、すべてに祝福などです。resolution.adjustは、どちらの方式でもこれを宣言します。
"adjust": [{ "value": { "derived": "burdened" }, "abilities": ["brawn"] }]valueはシート上の値で、派生値が読むのと同じ形式です。ライブ状態も含みます。負の数値は差し引きます。Ember Roadsはキャラクターが荷物に入れた装備のBulkをBurdenとして合計し、段階表でその3ごとに各Brawnのロールから1を引きます。ライブステートをキーとする表で、形態や構えをダイスに反映できます(「ライブステート」を参照)。abilitiesは任意です。指定すると、その能力値のいずれかで振る判定だけに修正値を適用します。能力値そのもの、それを使うスキルやセーヴ、with=でそれを使って振るスキル、それを含む能力値の組です。指定しなければすべての判定に適用します。- 負傷ペナルティと同じ位置に適用します。プールではダイスとして同じ
pool.minの下限の範囲で、合計方式では記録が合計する修正値の中の固定値です。項目は最大8つで、判定ごとに合算します。 - ルールセットの戦闘は、開始時にシートから組み立てるすべてのロールに加えます。能力値やスキルで振る攻撃、セーヴ、能力値・スキル・セーヴから読む対抗判定とイニシアチブはその能力値の項目を受け、ほかのロールはすべてのロールに適用する項目だけを受けます。
- シートのないキャラクターは、修正値を得ないのと同じく、何も受けません。
結果にはシートが加えた分が示されるため(記録のadjust="-2"と、ダイスカードの1行)、プレイヤーはロールの結果の理由を確認できます。パッケージ形式のルールセットではCapability API 1.38です。
休息
休息は回復処理と解除対象の一覧です。各処理は1つの対象(pool、poolGroup、listPools、track、state)を指定し、設定する("to": "max"、"to": "min"、または数値)か、増減する("by": { "const": 1 }または"by": { "fractionOfMax": 0.5 })かを定めます。負傷トラックを指定する処理は回復だけなので、byは負の値です。上記を参照してください。ライブステートを指定する処理は、"default"かその値の1つに設定するだけです。fractionOfMaxを持つpoolGroupの処理は、グループの各プールをそれぞれの割合で増減します。"shared": true(Capability API 1.77)を加えると、代わりにグループ全体の最大値で割合を計算し、シートが列挙する順にグループのプールへ、それぞれ不足分を上限として配ります。5eの大休憩で、ダイスの種類ごとに1つのプールに分けたヒット・ダイスを「キャラクターの総数の半分」回復する処理は、{ "poolGroup": "hit_dice", "by": { "fractionOfMax": 0.5, "round": "down", "min": 1 }, "shared": true }です。
Game Master向けの文章
checkGuidanceは、GMに判定要求の方法を教える組み込みの段落を置き換えます。システム名と、いつ振るべきかを書いてください。GMはスキルと難易度だけを指定し、Engineがシートから計算して振るため、モデルに計算を求めないでください。sheetGuidanceはプロンプトでシートを紹介します。重要なリソースと消費のタイミングを説明します。worldGuidanceは任意で、世界生成時に1回だけ読みます。火薬なし、魔法が希少、死者が歩くなど、GMが作る舞台を規則に合わせます。各ターンには入りません。oppositionは戦闘の相手側を誰が操作するかを指定します(Capability API 1.774)。
"game-master"はすべての相手のターンをGame Masterに任せます。 Game MasterはEngineが提示する選択肢から選び、 応答しない場合はEngine自身の選択処理にフォールバックします。 プレイヤーがGame Masterによるボスの操作を許可したゲームでのみ適用され、 combatブロックのないルールセットのClassicやTacticalの戦闘を含む、 すべての戦闘スタイルに適用されます。 Fate、 Blades in the Dark、 Trophy、 Lasers & Feelingsなど、 相手側をダメージの合計ではなく物語として動かすナラティブシステムに使ってください。 "engine"を指定するか省略するとEngineの選択処理を維持し、 ボス(およびプレイヤーが求めた場合は、 名前付きの相手と天才的な思考の相手)をGame Masterに任せます。 このキーを使うルールセットにはCapability API 1.774が必要です。
sheetSummaryは各キャラクターについてGMに見せるフィールド、派生値、リスト行を選びます。Engineは能力修正値、習熟済みのスキルとセーヴ、ライブ値を常に見せます。毎ターン送るため、それ以外は短くしてください。要約リストのnameColumnはテキスト列か列挙列にでき(列挙列は値のラベルを表示します)、columnsは名前の後に表示する行自身の列を最大3つ追加で指定します。そのためブロックは名前だけでなくGear: Crowbar 1d6のようになります。真偽値列はオンのときにラベルを表示します。どちらも、パッケージ形式のルールセットではCapability API 1.37です。sheetGuidanceでシートコマンドを教える必要はありません。Engineはファイルが宣言する名前を使ってすべてのコマンドを自ら教えます。ルールセットに負傷トラックがあれば、印を付けるop="damage"コマンドを加え、段階と負傷の種類を列挙します。ライブステートがあれば、op="state"コマンドを加え、各ステートが取り得る値を列挙します。
GM向けの完全なルールリファレンス
任意のトップレベルのgmReferenceは、GM向けのルールセットの完全なルールリファレンスを最大16,000文字まで保持します。詳しい裁定ルールはここに書き、判定とリソースに関する短い指示はgm.checkGuidanceとgm.sheetGuidanceに残してください。それらのフィールドとgm.worldGuidanceの上限は引き続き1,500文字で、レイヤーのガイダンスも既存の上限のままです。
"gmReference": "When a journey crosses hostile country, judge supplies, shelter and exposure before the next leg. A failed navigation check costs time rather than silently moving the party to its destination."リファレンスは、システムプロンプトの安定した部分にあるGame Master rules referenceの下に、リクエストごとに1回表示されます。ターンごとのリマインダーには決してコピーされません。ほかのプロンプトに安全な文章と同じく、1行で、制御文字、角括弧、マクロの波括弧({{と}})を含めてはいけません。通常の履歴と返信の予算を調整した後もリクエストがコンテキストの上限を超える場合は、中核の指示を削る前に、切り詰めた箇所に印を付けてリファレンスを短くします。既存のプロンプトのままにするには未設定にしてください。これを使うパッケージは、マニフェストでschemaVersion: 2と、capabilityApi: { "major": 1, "minor": 145 }以降を宣言する必要があります。
パーティーとシーンの進行クロック(clocks)
Capability API 1.143は、任意のトップレベルのclocksオブジェクトを追加します。クロックのコマンドを無効のままにするには省略してください。このオブジェクトは厳密で、次の3つのキーだけを受け付けます。
"clocks": {
"sizes": [4, 6, 8],
"max": 8,
"text": "Create clocks for looming threats and long projects. Tick them when the fiction advances."
}sizesは、それぞれ2~12の、重複しない区切り数の整数を1~6個指定します。デフォルトは[4, 6, 8]です。maxは同時に保持するクロックの最大数で、1~12、デフォルトは8です。任意のtextは、GMがクロックを作って進めるべきタイミングを説明する、最大400文字のプロンプトに安全な1行です。空のオブジェクトにするとデフォルト値で有効になります。
クロックはキャラクターではなく、パーティーとシーンのものです。GMへのリマインダーは毎ターン、クロックの名前と進み具合を列挙し、次のコマンドを教えます。
[clock: name="Alarm raised" size="6"]は空のクロックを作ります。許可されていないサイズ、既存の名前(大文字と小文字を区別しません)、maxへの到達では作成を拒否します。[clock: name="Alarm raised" tick="2"]は区切りを進めます。負の値は戻し、進み具合は0..sizeに制限されます。満杯のクロックは完了で、表示されたまま残り、消去するまでmaxに数えます。負の値で再び開けます。[clock: name="Alarm raised" clear]は指定したクロックを取り除きます。
名前は1~100文字の1行で、二重引用符、角括弧、制御文字、マクロの波括弧は使えません。各タグが要求する操作はちょうど1つです。コマンドは返信内の順に適用するため、同じ返信でクロックを作って進められます。Engineは各タグをresult="ok" now="4/6"(またはnow="cleared")か、result="refused" reason="..."で書き換えます。モデルが書いた結果の属性は破棄します。不明なクロックや不正な要求は拒否され、1つの返信で適用するコマンドは最大40個です。
Game Modeでは、パーティーの状態の横に、区切られた円、名前、進み具合を表示します。タグは処理結果の記録として保存された返信に残り、語りからは隠されます。クロックは各ゲーム状態のスナップショットにrulesetClocksとして保存され、データがなければクロックはありません。再生成は直前のスナップショットから始まり、続きの生成は現在のスナップショットから始まります。スワイプやメッセージを選択または削除すると、そのスナップショットのほかの内容と一緒にクロックが戻ります。
パーティーシート: クルー、船、共有のStory Points
Capability API 1.144は、sheetと並ぶ任意のトップレベルのpartyを追加します。Bladesのクルー、Lasers & Feelingsの船、GenesysのStory Pointsのように、ゲームごとに1つの共有シートを持ちます。
"party": {
"label": "Crew",
"fields": [
{ "id": "heat", "label": "Heat", "type": "number", "min": 0, "max": 9, "default": 0 },
{ "id": "vault", "label": "Vault capacity", "type": "number", "min": 0, "max": 16, "default": 8 },
{ "id": "upgrades", "label": "Upgrades", "type": "text", "maxLength": 400 }
],
"pools": [{ "id": "coin", "label": "Coin", "max": { "field": "vault" }, "start": "empty" }],
"advancement": { "fields": ["heat", "vault", "upgrades"], "text": "Record heat after a score." },
"text": "Coin belongs to the crew."
}fieldsはsheet.fieldsと同じフィールドのスキーマを、poolsはstart、group、hideWhen、allowTempを含めてsheet.live.poolsと同じものを使います。少なくとも1つのフィールドかプールが必要で、IDはパーティーシート内で重複できません。キャラクターとパーティーのIDは同じでも構いません。このマイナーバージョンのパーティーシートには、セクション、リスト、能力値、派生値、キャラクターシートの移行はありません。プールのmaxは定数か、パーティーの数値フィールドを読みます。キャラクターの式はパーティーの値を読めず、パーティーの式はキャラクターの値を読めません。hideWhenもパーティーのフィールドだけを指定します。
advancement.fieldsは、GMが永続的に変更できる数値、テキスト、長文テキストのフィールドを指定します。advancement.textとtextは、それぞれ最大400文字のプロンプトに安全な1行です。任意のsummaryはgm.sheetSummaryの形を再利用します。そのfieldsはパーティーのフィールドを選び、derivedとlistsは空にする必要があります。要約がなければ、表示されているパーティーのフィールドをすべて表示します。プールは常に表示されます。
[sheet: sheet="party" op="restore" pool="coin" amount="3"]
[sheet: sheet="party" op="spend" pool="coin" amount="2"]
[sheet: sheet="party" op="advance" field="heat" by="2"]
[sheet: sheet="party" op="advance" field="upgrades" to="Hidden vault"]sheet="party"は共有シートを選びます。whoは省略してください。既存のwho="party"は引き続きすべてのキャラクターに適用され、共有シートは変えません。このマイナーバージョンでパーティーシートに使えるのは、spend、restore、フィールドのadvanceです。不明なシート、未対応の操作、不足するプール、宣言されていない成長、無効な値は拒否され、Engineの結果で書き換えられます。パーティーのプールは、キャラクターのプールと同じ現在値と最大値の計算とデフォルトに従います。
GMは毎ターン、キャラクターシートのブロックの横に、パーティーのラベル、フィールド、プールを受け取ります。Game Modeは、キャラクターの肖像の横に、折りたためる読み取り専用のパーティーシートを、同じシートの表示形式で表示します。永続的な値は、チャットのメタデータ(gamePartySheet)にgameCharacterCardsと並んで1回だけ保存され、成長の記録を共有します。ライブのプールはrulesetLiveの予約済みの$party項目を使い、正規化したキャラクター名がそれと衝突することはありません。再生成は返信の前から始まり、スワイプの選択や削除は既存の履歴を通じて永続的な値とライブの値の両方を戻します。partyのないルールセットは既存の動作のままです。
パーティーの共同作成(Capability API 1.163)。 パーティーシートは、lists(キャラクターシートのリストと同じ書き方で最大12個)、独自のガイド付きのbuilder、fromMembersを持てます。これはパーティーのキャラクターから読む最大8個のパーティーの数値フィールドで、それぞれ{ "field", "count": true }(キャラクターの人数)か、{ "field", "sum": "<character number field>" }(Totemのドットのように、キャラクターの値の合計)です。メンバー由来のフィールドは共有シートを読むたびに現在のキャラクターから計算されるため、キャラクターの加入や離脱で即座に変わります。リストがある場合は、パーティーのsummary.listsでそれを指定できます。
ビルダーはキャラクターのものとまったく同じ書き方で(プール、ステップ、価格付きの行、消費の提示、プロファイル)、パーティー自身のフィールドとリストに対して同じ規則で検査されます。そのカタログと行コピーのステップは、パーティーのリストに供給するルールセットのカタログを読めます。Game Modeでは、どのプレイヤーも共有シートのEditを開いてガイド付きの設定を使い、パーティー全体のために保存できます。各保存は開いたときのリビジョンを示します(チャットのメタデータのgamePartySheetRevisionで、保存のたびと物語自体の変更で上がります)。ほかの人の保存が反映される前に開いた保存は拒否され、新しいシートが表示されます。プレイヤーの下書きは開いたまま残るため、もう一度保存すれば、置き換えることを自分で選んだことになります。
"party": {
"label": "The Crew",
"fields": [
{ "id": "tier", "label": "Tier", "type": "number", "min": 0, "max": 4, "default": 0 },
{ "id": "size", "label": "Crew size", "type": "number", "min": 0, "max": 12, "default": 0 }
],
"lists": [{ "id": "upgrades", "label": "Upgrades", "columns": [{ "id": "name", "label": "Name", "type": "text" }] }],
"builder": { "steps": [{ "id": "upgrades", "label": "Upgrades", "kind": "rows", "list": "upgrades" }] },
"fromMembers": [{ "field": "size", "count": true }]
}