Game Modeのルールセットを作成する

ルールセットは卓上ゲームの仕組みをGame Modeに伝えます。判定で振るダイス、キャラクターシートの項目、消費するリソース、休息で回復するものを定めます。自分のシステムをGame Modeに持ち込んで共有するには、ルールセットを作成します。他の人が作ったルールセットで遊ぶには、ルールセットで遊ぶを参照してください。

ルールセットは1つのJSONファイルです。コードではなくデータなので、中身が実行されることはなく、インポートしてもコンピューターに害を与えることはありません。他の人のファイルをインポートする前に、Game Master向けの文章を読んでください。その文章は、そのルールセットを使うすべてのゲームでモデルへ送られるためです。

ルールセットを始める

  1. 使うシステムのダイスの振り方に合うサンプルファイルをコピーします。
  1. idを自分のものに変えます。IDはember-roadsのように、小文字、数字、単独のハイフンで構成します。
  2. コピーしたファイルをメモ帳やVS Codeなどのテキストエディターで開き、.jsonの拡張子で保存します。まずnameを変え、次にsheetの能力値の名前、それからrestsとgmの文章を変えます。ファイルの構成に各キーの一覧があり、リファレンスページにはそれらを説明するページへのリンクがあります。
  3. インポートします(ルールセットを試すを参照)。インポートは何かを保存する前にファイル全体を検査し、問題を行ごとに報告します。
  4. 新しいゲームを作成し(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つを選びます。

五つすべてを判定方式で詳しく説明しています。

対抗プールのように、これらの形に収まらない仕組みは、ルールセットファイルでは表現できません。そうした仕組みにはEngine内の新しい判定方式が必要で、それはテストを伴うコードの貢献になります。必要な場合はEngineリポジトリーに機能要望を開き、計算過程を示したロール例をいくつか添えて仕組みを説明してください。そのロール例がテストになります。

Game Modeは、Marinara独自の戦闘か、ルールセットの規則のどちらかで戦闘を解決します。任意のbattleブロックは、キャラクターシートの数値をMarinaraの戦闘へ貸し出します。戦闘への橋渡しを参照してください。任意のcombatブロックは、ルールセットが戦闘そのものを解決する方法を定義します。独自ルールの戦闘を参照してください。ゲームのCombat Preferenceは、Classic表示か、ルールセットが距離を定義する場合はTacticalの戦場を選びます。ルールセットはcombat.stylesで、そのルールセットを使うゲームがこれらのどれを使えるかを制限できます(ゲームで使えるスタイルを参照)。

ファイルの構成

キー内容
schemaVersion常に1です。
id, versionEngineが使うルールセット名と、変更を公開するたびに増やす整数です。
nameプレイヤーが設定ウィザードで目にする名前です。
edition任意です。版や草案を説明する1行です。
license任意です。SPDX IDと、元資料が要求する帰属表示です。
coverage対応範囲と、設定ウィザードに表示する1行の要約です。
resolution判定やセーヴのロール方法です。
sheetキャラクターシートの全項目です。
rests各休息が回復・解除するものです。
gmGame Masterモデルに渡す文章と、各キャラクターについて見せるシート値です。
catalogs任意です。長いリストを手入力せずに済む、シートエディターが提示する既製のエントリーです。
items任意です。アイテムを記述する語彙です。カテゴリー、レアリティー、ステータス、スロット、お金です。
battle任意です。戦闘がシートから読むものと、終了後に書き戻すものです。
combat任意です。独自の規則で戦闘を解決する方法と、そのうえで戦闘画面が実行する内容です。
layers任意です。ゲーム作成時にプレイヤーがオンにする、ルールセットのバリエーションです。

ファイルは最大512 KBです(Capability API 1.340より前は256 KB)。プロンプトに入る文章(名前、ラベル、Game Master向けの文章)には、改行、角括弧、二重波括弧を使えません。

シート内のID(能力値、スキル、フィールド、プールなど)は、grit_maxのように英字で始まり、小文字、数字、アンダースコアで構成します。

リファレンスページ

このページでは、ルールセットの始め方、試し方、共有の方法を説明します。ほかのページは、それぞれ1つの内容を扱います。

ルールセットを試す

始める前に、Settings → Advanced → Danger Zone(設定 → 詳細設定 → 危険な操作)でAllow custom Agent imports(カスタムエージェントのインポートを許可)をオンにしてください。インポートしたルールセットは、インポートしたエージェントと同じ安全用のスイッチを使うため、自分でオンにするまではオフのままです。インポートには、localhostからのアクセスか、Settings → Advanced → Admin Access(設定 → 詳細設定 → 管理者アクセス)で設定する管理者用のシークレットも必要です。

  1. Agents(エージェント)パネルを開き、Import agents(エージェントをインポート)ボタン(パネル上部のボタン列のダウンロードアイコン)を選びます。
  2. Game Mode ruleset(Game Modeのルールセット)を選び、JSONファイルか、.ruleset.jsonで終わるルールセットのパッケージファイルを指定します(ルールセットの共有を参照)。
  3. 確認画面を読みます。名前、バージョン、ライセンス、対応範囲、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のルールセット)がファイルを受け取り、ルールセットファイルと同じ確認画面を、各カタログとその項目数とともに表示します。

このファイルはデータとして読まれ、パッケージとしてインストールされることはありません。中身は圧縮されていないため、自身のサイズを超えるものを持つことはありません。制限は次のとおりです。

次の場合は、理由とともに拒否されます。

公式エージェントカタログを通じて

カタログで公開するルールセットは、厳密にこの形式の<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向けの文章は自分の言葉で書いてください。

トラブルシューティング