Files
mod_schema_base/docs/ja.md
T

98 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Schemas — 行動・コマンド・データフィールドの記述
Schemas はライブラリです。どの MOD も、自分のシナリオ行動が何を受け取り、自分の DSL コマンドがどんな形で、自分のデータの種類にどのフィールドがあるのかを、データとして記述できます。ツールはその記述からフォーム、ピッカー、検査を組み立てるので、作者はパラメーター名を覚える代わりにフォームを埋めるだけで済み、誤りはゲームを実行する前に分かります。
この MOD には独自のウィンドウはありません。見える部分は、ほかのツールが表示します:
- **Schema Tools** — コマンドパレットと「データエディター」ウィンドウ;
- **Validator** — 不明・不足のパラメーターと壊れた参照を報告書に載せる;
- **アイテム・キャラクターエディター** — 他の MOD がアイテムやキャラクターに足すフィールド。
## 記述からフォームと検査へ
```text
items_base/schemas/items_base.json 記述。行動のコードのそばに置く
│
▼
スキーマカタログ(全 MOD、読み込み順)
│
├──► コマンドパレットのフォーム パラメーターごとに一つのフィールド
├──► シナリオの行 action item.remove id=… count=…
└──► チェッカー パレットでもバリデーターでも同じ判定
```
Items Engine は自分の行動 `item.remove` を次のように記述します:
```json
{
"Id": "item.remove",
"Name": "items/schema/remove",
"Description": "items/schema/remove_desc",
"Category": "items",
"Params": [
{ "Key": "id", "Type": "ref", "Kind": "item", "Required": true, "Name": "items/schema/field/item" },
{ "Key": "count", "Type": "int", "Default": "1", "Name": "items/schema/field/count" }
]
}
```
RPG Plus のコマンドパレットはこれをフォームとして示します: **Item** はゲームのアイテムの一覧(型 `ref`、種類 `item`)、**Count** は 1 が入力済みの数値。アイテムを選ぶまで、チェッカーは何が足りないかを教えます:
![Remove item を選んだコマンドパレット: 説明、「MOD items_base が記述」、フィールド Item(空)と Count(1)、シナリオの行「action item.remove」、エラー「'item.remove' には 'id' が必要」。](assets/palette-item-remove.jpg)
Stats Engine の `stat.archetype` には必須パラメーターがないので、同じ空のフォームでも受け付けられます:
![Give an archetype を選んだコマンドパレット: フィールド Archetype と Who、行「action stat.archetype」、「行に問題なし」。](assets/palette-archetype.jpg)
読み込まれた MOD が記述した行動とコマンドはすべて、カテゴリーごとにまとまってパレットの一覧に現れます。フッターが数を数えます:
![コマンドパレット全体: カテゴリー別の行動とコマンドの一覧(Battle、Characters、Items、Quests、Stats、World、Dialog、Flow)と「記述済み: 行動 25、コマンド 10」。](assets/palette.jpg)
## スキーマファイル
MOD は `schemas/<mod>.json` に、最大三つのリストを同梱します:
- `Actions` — シナリオの行動(`action <id> key=value …`): そのパラメーター;
- `Commands` — `check` や `select` などの DSL コマンド: 位置パラメーターと名前付きパラメーター;
- `Kinds` — データの種類(`item`、`character`、`shop`…): そのエンティティのフィールド、新規ファイルのフォルダー、新しい id のパターン。
名前と説明は MOD 自身のローカライズにある翻訳キーなので、フォームはゲームのすべての言語で語ります。
フィールドの型: `text`、`locale`(全言語のテキスト)、`int`、`number`、`bool`、`choice`(`Options` 付き)、`ref` と `ref_list`(種類の id)、`who`、`picture`、`formula`、`condition`、`scene`、`flag`、`label`、`list`(各自のフィールドを持つオブジェクトのリスト)、`values`、`map`、`json`。不明な型はテキストとして編集されます。
## 複数の MOD が一つの種類を記述する
ファイルは MOD の読み込み順に読まれます:
- 行動やコマンドを再度記述すると、後の MOD が**丸ごと置き換えます**;
- 種類は**フィールドごとに統合**されます: 同じキーのフィールドは置き換わり、新しいフィールドは足されます。
たとえば Equipment は、Items Engine の `item` に自分のフィールドを、そのファイルには触れずに足します:
```json
{ "Kind": "item",
"Fields": [
{ "Key": "Equip", "Type": "text", "Name": "equipment/schema/field/equip" },
{ "Key": "Archetypes", "Type": "ref_list", "Kind": "archetype", "Name": "equipment/schema/field/archetypes" }
] }
```
どのフィールドも、どの MOD が記述したかを覚えています(パレットの「MOD items_base が記述」)。壊れたスキーマファイルは報告されて読み飛ばされ、ほかのファイルは引き続き数に入ります。
ルールは、各 MOD が自分の行動・コマンド・種類を、そのコードのそばに記述する、というものです。他の MOD の行動を直すために記述することもでき、その場合は読み込み順が勝ちます。
## チェッカーが報告すること
- **パラメーターが必要** — 必須パラメーターがない(エラー);
- **パラメーターが存在しない** — 行が、記述にないパラメーターを名指している(警告);
- **値が不正** — 整数でない、数値でない、選択肢にない(エラー。はい/いいえと選択肢は警告);
- **不明な参照** — id が、読み込まれたどの MOD も定義しないアイテムやキャラクターなどのエンティティを名指している(エラー)。
バリデーターは同じものを `SCHEMA_MISSING_PARAM`、`SCHEMA_UNKNOWN_PARAM`、`SCHEMA_BAD_VALUE`、`SCHEMA_UNKNOWN_REF` として報告します。チェッカーは記述に書かれたことしか知りません: 受け入れた行でも、ゲームの中では思いがけないことをするかもしれません。
## うまくいかないとき
1. **行動がパレットにない。** 読み込まれたどの MOD も記述していません。それでも行動はシナリオの中で機能します。
2. **フィールドがただのテキストボックスになる。** 型が不明か、フィールドの記述がまったくありません(データエディターはそれを他のフィールドとして JSON で示します)。
3. **フォームがあなたのスキーマを無視する。** 読み込み順で後の MOD が同じ行動を記述し、置き換えました。