Game Modeのルールセットを作成する
ルールセットは卓上ゲームの仕組みをGame Modeに伝えます。判定で振るダイス、キャラクターシートの項目、消費するリソース、休息で回復するものを定めます。自分のシステムをGame Modeに持ち込んで共有するには、ルールセットを作成します。他の人が作ったルールセットで遊ぶには、ルールセットで遊ぶを参照してください。
ルールセットは1つのJSONファイルです。コードではなくデータなので、中身が実行されることはなく、インポートしてもコンピューターに害を与えることはありません。他の人のファイルをインポートする前に、Game Master向けの文章を読んでください。その文章は、そのルールセットを使うすべてのゲームでモデルへ送られるためです。
ルールセットを始める
- 使うシステムのダイスの振り方に合うサンプルファイルをコピーします。
ember-roads.jsonは、三つの能力値を持つ小規模な2d6システムです。この形式がd20や六つの能力値を前提にしていないことを示します。gravewatch.jsonは、三つの評価値と六つの専門技能を持つ、小規模な十面ダイスプールです。- 公式の5e (SRD 5.1)パッケージは、大規模な例です。その
ruleset.jsonとcatalogs/が、Agent Organizerによってインストールされるものです。
idを自分のものに変えます。IDはember-roadsのように、小文字、数字、単独のハイフンで構成します。- コピーしたファイルをメモ帳やVS Codeなどのテキストエディターで開き、
.jsonの拡張子で保存します。まずnameを変え、次にsheetの能力値の名前、それからrestsとgmの文章を変えます。ファイルの構成に各キーの一覧があり、リファレンスページにはそれらを説明するページへのリンクがあります。 - インポートします(ルールセットを試すを参照)。インポートは何かを保存する前にファイル全体を検査し、問題を行ごとに報告します。
- 新しいゲームを作成し(Game Mode: はじめにを参照)、Rules(ルール)で自分のルールセットを選んで、いくつか判定を試します。
うまくいかなかった場合は、トラブルシューティングを参照してください。
入力中にエディターの補助を受けるには、ファイルの外側の波括弧の内側の先頭行に次の行を加えます。この行はエディターにJSON Schemaを指定します。
"$schema": "https://raw.githubusercontent.com/Pasta-Devs/Marinara-Engine/staging/docs/extending/ruleset.schema.json",スキーマはキーの誤字や型の間違いを検出します。スキルが指定する能力値など、名前が実在するものを指しているかは検査できません。それはインポートが検査します。どのオブジェクトにも"$comment": "..."の行を加えて、自分用のメモを残せます。Engineはその行を無視します。
ルールセットでできることとできないこと
ルールセットは、Engineがすでに知っている仕組みの空所を埋めるものです。Engineは5種類の判定方式を知っており、ファイルのresolution.kindでそのうち1つを選びます。
dice-sum: ダイスを振り、シートの数値を加えて、難易度以上を目指します。d20方式、2d6に能力値を加える方式など、多くのシステムを扱えます。dice-pool: キャラクターの数値に応じた個数のダイスを振り、目標に届いたものを数えます。評価値がボーナスではなくダイスの個数を表す方式に対応します。dice-highest: プールを振って最大の出目を読むか、上位いくつかの出目を合計します。Blades in the DarkやTrophy Darkに対応します。roll-against: シートの数値以下(または以上)を出すように振ります。パーセンテージ制のスキルやGURPSの判定に対応します。symbol-pool: ナラティブダイスを組み立てて格上げし、対立するシンボルを相殺します。Genesysの判定と、Capability API 1.382以降では戦闘にも対応します。
五つすべてを判定方式で詳しく説明しています。
対抗プールのように、これらの形に収まらない仕組みは、ルールセットファイルでは表現できません。そうした仕組みにはEngine内の新しい判定方式が必要で、それはテストを伴うコードの貢献になります。必要な場合はEngineリポジトリーに機能要望を開き、計算過程を示したロール例をいくつか添えて仕組みを説明してください。そのロール例がテストになります。
Game Modeは、Marinara独自の戦闘か、ルールセットの規則のどちらかで戦闘を解決します。任意のbattleブロックは、キャラクターシートの数値をMarinaraの戦闘へ貸し出します。戦闘への橋渡しを参照してください。任意のcombatブロックは、ルールセットが戦闘そのものを解決する方法を定義します。独自ルールの戦闘を参照してください。ゲームのCombat Preferenceは、Classic表示か、ルールセットが距離を定義する場合はTacticalの戦場を選びます。ルールセットはcombat.stylesで、そのルールセットを使うゲームがこれらのどれを使えるかを制限できます(ゲームで使えるスタイルを参照)。
ファイルの構成
| キー | 内容 |
schemaVersion | 常に1です。 |
id, version | Engineが使うルールセット名と、変更を公開するたびに増やす整数です。 |
name | プレイヤーが設定ウィザードで目にする名前です。 |
edition | 任意です。版や草案を説明する1行です。 |
license | 任意です。SPDX IDと、元資料が要求する帰属表示です。 |
coverage | 対応範囲と、設定ウィザードに表示する1行の要約です。 |
resolution | 判定やセーヴのロール方法です。 |
sheet | キャラクターシートの全項目です。 |
rests | 各休息が回復・解除するものです。 |
gm | Game Masterモデルに渡す文章と、各キャラクターについて見せるシート値です。 |
catalogs | 任意です。長いリストを手入力せずに済む、シートエディターが提示する既製のエントリーです。 |
items | 任意です。アイテムを記述する語彙です。カテゴリー、レアリティー、ステータス、スロット、お金です。 |
battle | 任意です。戦闘がシートから読むものと、終了後に書き戻すものです。 |
combat | 任意です。独自の規則で戦闘を解決する方法と、そのうえで戦闘画面が実行する内容です。 |
layers | 任意です。ゲーム作成時にプレイヤーがオンにする、ルールセットのバリエーションです。 |
ファイルは最大512 KBです(Capability API 1.340より前は256 KB)。プロンプトに入る文章(名前、ラベル、Game Master向けの文章)には、改行、角括弧、二重波括弧を使えません。
シート内のID(能力値、スキル、フィールド、プールなど)は、grit_maxのように英字で始まり、小文字、数字、アンダースコアで構成します。
リファレンスページ
このページでは、ルールセットの始め方、試し方、共有の方法を説明します。ほかのページは、それぞれ1つの内容を扱います。
- ルールセットの判定: 五つの判定方式、結果帯、独自の方法で振る判定、ロールを変える消費やチャーム
- ルールセットのシート: 能力値、スキル、フィールドとリスト、ライブステート、負傷トラック、ペナルティ、休息、Game Master向けの文章、パーティーシート、進行クロック
- ルールセットのカタログ: シートエディターが選択画面に表示する用意済みのエントリー
- ルールセットのエントリーの仕組み: 判定、休息、戦闘が読み取る、カタログのエントリーの
mechanicsブロック - ルールセットのキャラクタービルダー: 種族とクラスから評価値、習熟、呪文、装備まで、ステップを踏んでキャラクターを作成する方法
- ルールセットのアイテム: カテゴリー、武器、鎧、弾薬、戦利品、お金、初期装備、市場
- ルールセットの戦闘:
battleブロックとcombatブロック、およびベスティアリ、盤面、リアクション、対抗判定 - ルールセットのレイヤー、翻訳、移行: プレイヤーがゲームごとにオンにするバリエーション、翻訳、シートの変更時に値を新しいIDへ移す方法
ルールセットを試す
始める前に、Settings → Advanced → Danger Zone(設定 → 詳細設定 → 危険な操作)でAllow custom Agent imports(カスタムエージェントのインポートを許可)をオンにしてください。インポートしたルールセットは、インポートしたエージェントと同じ安全用のスイッチを使うため、自分でオンにするまではオフのままです。インポートには、localhostからのアクセスか、Settings → Advanced → Admin Access(設定 → 詳細設定 → 管理者アクセス)で設定する管理者用のシークレットも必要です。
- Agents(エージェント)パネルを開き、Import agents(エージェントをインポート)ボタン(パネル上部のボタン列のダウンロードアイコン)を選びます。
- Game Mode ruleset(Game Modeのルールセット)を選び、JSONファイルか、
.ruleset.jsonで終わるルールセットのパッケージファイルを指定します(ルールセットの共有を参照)。 - 確認画面を読みます。名前、バージョン、ライセンス、対応範囲、Game Master向けの文章が表示されます。Import(インポート)を選びます。
ルールセットは、パネルのRules(ルール)セクションと、新しいゲームの設定ウィザードのRulesの選択肢に表示されます。ファイルからインポートしたルールセットはlocal/<your id>として登録されるため、公式のルールセットや他の人のものと混同されることはありません。
インポート済みのルールセットを変更する
インポートしたバージョンが書き換えられることはありません。変更したファイルを同じversionでインポートすると、インポートは拒否され、番号を上げるよう求められます。ゲームは作成時の正確なバージョンに結び付いているため、進行中のキャンペーンの計算方式が変わることはありません。
草案を作っている間は、編集し、versionを上げ、インポートし、新しいゲームを始める、という流れを繰り返します。旧バージョンは、Rulesセクションからルールセットを削除するまで、新バージョンと並んでインストールされたままです。ゲームがまだ使っているルールセットを削除すると、再インポートするまで、そのゲームはルールセットが見つからないと表示します。
シートの形(項目の追加、削除、名前変更)を変えた場合は、sheet.versionも上げてください。既存のシートは寛容に読み取ります。新しいシートにとって未知の値も保ち、ない値にはデフォルトを使います。
ルールセットの共有
共有の方法は5つあります。
ファイルとして
JSONファイルを友人に送ります。友人は同じ方法でインポートします。
パッケージファイルとして
カタログを独立したファイルに持つ、1つのファイルに収まらないほど大きいルールセットは、<name>.ruleset.jsonという名前の1つの普通のJSONファイルとして配布します。このファイルは、パッケージのマニフェストとルールセットのドキュメントを持ち、それぞれをbase64(ファイルを普通のテキストとして書く方法)で保存します。
{
"format": "marinara-ruleset",
"version": 1,
"manifest": { "kind": ["ruleset"], "…": "the package manifest" },
"files": {
"ruleset.json": "<base64>",
"catalogs/spells.json": "<base64>"
}
}マニフェストは、ruleset.jsonと各catalogs/<id>.jsonをcontributions.assets.pathsとfilesに、それぞれのサイズとsha256(ファイルの指紋)とともに列挙します。Pixelforgeのようなルールセットエディターがこれを作ります。Import agents(エージェントをインポート) → Game Mode ruleset(Game Modeのルールセット)がファイルを受け取り、ルールセットファイルと同じ確認画面を、各カタログとその項目数とともに表示します。
このファイルはデータとして読まれ、パッケージとしてインストールされることはありません。中身は圧縮されていないため、自身のサイズを超えるものを持つことはありません。制限は次のとおりです。
- ルールセットファイルと同じく、
local/<its id>として登録されます。 - 上限は132 MBで、カタログファイルは12個まで(各2 MBまで)、翻訳は40個まで(各8 MBまで)です(後述)。
- バージョンはルールセットとカタログを合わせたものなので、カタログを変えた場合も
versionを上げる必要があります。 - ルールセットのパッケージはzipでは受け付けません。
次の場合は、理由とともに拒否されます。
- ほかのキーやほかのファイル、または厳密なbase64でないかUTF-8のテキストでないドキュメントを含む
- マニフェストが、ルールセットに必要な範囲を超えるもの(コード、権限、ほかの提供物)を求めている
- ファイルが、マニフェストの列挙するものと異なる
$commentが2,000文字を超えるか、$schemaがEngine自身のスキーマ以外を指定している- ルールセットかカタログを読み取れない
公式エージェントカタログを通じて
カタログで公開するルールセットは、厳密にこの形式の<id>.ruleset.jsonというルールセットのパッケージファイルで、パッケージのzipにはなりません。マニフェストはCapability API 1.374以降を宣言するため、古いEngineには提示されません。Engineは、インポートするパッケージファイルと同じ読み取り処理と検査でこれを読み、カタログが列挙するマニフェストとの一致を確かめ、ほかのカタログパッケージと同じようにインストールします。配布物がzipのカタログのルールセットは、ダウンロード前に拒否されます。インストール済みのルールセットは引き続き動作します。
GitHubリポジトリーから
公開GitHubリポジトリーで作業を管理している場合は、リポジトリー直下のrulesetsフォルダーに、ルールセットごとに1ファイルずつ置きます。
your-repository/
agents.json (optional, only if you also share agents)
rulesets/
ember-roads.json
another-system.jsonユーザーはリポジトリーを一度追加し、内容を確認して、後から同期して新しいバージョンを受け取ります。カスタムリポジトリーの一覧は詳細機能です。サーバーの運用者がENABLE_CUSTOM_AGENT_REPOS=trueで有効にしてから、Agents → Agent Organizer → Custom Sources(エージェント → エージェント管理 → カスタムソース)を開きます。リポジトリー由来のルールセットはalice/ember-roadsのようにリポジトリー所有者の名前の下に登録されるため、2人の作者がどちらもv20という名前のルールセットを公開しても競合しません。
制限は2つあります。リポジトリーのrulesets直下に置けるJSONファイルは最大32個で、それを超えるリポジトリーは拒否されます。local/はファイルからインポートしたルールセット用に予約されているため、localという名前のアカウントはルールセットを公開できません。
公式カタログで
広く遊ばれていて、ライセンスが明確なシステムは、Agent Organizer(エージェント管理)を通じて全員に提供できます。提案するには、Marinara-Agentsリポジトリーへプルリクエストを開いてください。構成は、そこにあるruleset-5e-2014パッケージを参考にしてください。
ライセンス
共有する権利のあるルールの文章だけを公開してください。多くのシステムはオープンライセンスで参照文書を公開しており、複製してよいのはその文書です。ライセンスID(SPDX ID。CC-BY-4.0のような短い標準名)と、ライセンスが求める帰属表示をlicenseに入れてください。オープンライセンスでないルールブックの文章はコピーしないでください。ルールセットに主に必要なのは名前と数値です。Game Master向けの文章は自分の言葉で書いてください。
トラブルシューティング
- インポート時に名前が存在しないと言われる。 ファイル内の何かが未宣言のIDを参照しています。削除した能力値をスキルが指定している場合などです。メッセージに該当箇所へのパスが表示されます。
- インポート時に同じバージョンが別の内容でインストール済みと言われる。
versionを上げて再インポートしてください。 - 設定ウィザードにルールセットが表示されない。 Allow custom Agent imports(カスタムエージェントのインポートを許可)がオンか確認してください。オフの間は、インポートしたルールセットは新しいゲームの選択肢から外れ、すでに使っているゲームは動き続けます。
- ゲームにルールセットが見つからないと表示される。 ゲーム作成時の正確なバージョンがインストールされていません。そのバージョンのファイルを再インポートしてください。