Scenario JSON Reference Guide

`scenario.json`
実装準拠 詳細マニュアル

このページはプレイヤー実装とZIP検証で実際に扱うキーと挙動をまとめたものです。

1. Minimum

最小構成

{
  "version": "1.5",
  "engine": {
    "name": "retro-adv",
    "version": "1"
  },
  "metadata": {
    "title": "Minimal Sample",
    "rating": "全年齢"
  },
  "config": {
    "start_scene": "start"
  },
  "flags": {},
  "inventory": [],
  "scenes": {
    "start": {
      "text": ["ようこそ。"],
      "exits": {}
    }
  }
}

最低限は metadata.titlemetadata.ratingconfig.start_scenescenes が必要です。

2. Root Keys

ルートキー一覧(実装準拠)

path type 必須 補足
$.versionstring任意制作者メモ用。エンジン挙動には影響しない
$.engineobject任意推奨: name/version
$.metadataobject必須titlerating 必須
$.configobject必須start_scene 必須
$.flagsobject任意進行フラグ初期値
$.inventoryarray任意初期所持品
$.scenesobject必須1件以上必要

version は制作者が任意で管理するための値です。現行エンジンはこの値で動作を切り替えません。

3. metadata

公開情報

  • title: 必須。公開タイトル。
  • rating: 必須。全年齢 / R15 / R18
  • ai_generated: 任意。主要構成要素(シナリオ本文・画像・音声/BGM など)の全部または一部に生成AI利用がある場合は true 推奨。
  • summary: 任意。公開あらすじ。作品ページ表示の品質向上のため入力推奨。
  • thumbnail: 任意。ZIP内相対パス。一覧/詳細の視認性向上のため設定推奨。

4. config

開始位置と基本挙動

  • start_scene: 必須。開始シーンID。
  • unknown_message: 任意。不明入力の表示。未指定時は 何も起こらない。
  • help_message: 任意。help で追加表示(string/array)。
  • move_aliases / verb_aliases / object_aliases: 任意。入力同義語。
  • asset_paths: 任意。ファイル名のみ指定時の補完先ディレクトリ設定(thumbnail/image/overlay/bgm/sound)。

例: asset_paths.image = "assets/scenes" を設定すると、image: "hall.png"assets/scenes/hall.png として解決されます。/ を含む値はそのまま優先されます。
後方互換のため旧キー editor_asset_paths も読み込みますが、今後は asset_paths を推奨します。

"config": {
  "start_scene": "start",
  "asset_paths": {
    "thumbnail": "assets/thumbs",
    "image": "assets/scenes",
    "overlay": "assets/overlays",
    "bgm": "assets/audio",
    "sound": "assets/audio"
  }
}

5. aliases

同義語(入力エイリアス)

"config": {
  "move_aliases": {
    "north": ["n", "北", "きた"]
  },
  "verb_aliases": {
    "look": ["みる", "見る"]
  },
  "object_aliases": {
    "door": ["扉", "とびら"]
  }
}

入力は正規化(NFKC・空白正規化・小文字化)後に判定されます。別代表語への重複エイリアスは検証エラーです。

6. scenes / exits

シーン構造と移動

"hall": {
  "text": ["広いホールだ。"],
  "image": "assets/scenes/hall.png",
  "bgm": "assets/audio/opening.mp3",
  "overlays": [
    { "id": "cover", "image": "assets/overlays/cover.png" }
  ],
  "commands": [],
  "exits": {
    "south": "entrance"
  }
}
  • text: 必須。1件以上の文字列配列。
  • image / bgm: 任意。ZIP内相対パス。
  • overlays: 任意。初期重ね画像(idimage)。
  • exits: 任意。入力文字列から遷移先シーンIDへのマップ。
  • commandsexits が両方空の場合、そのシーンは終端扱いです。

7. commands

コマンド詳細(実装準拠)

共通必須: type, inputsinputs は1件以上の文字列配列。

type 必須キー 任意キー
messagetextchange_background/show_overlay/overlay_image/remove_overlay/sound/next
movetargettext + 上記任意キー
set_flagflagtext + 上記任意キー
unset_flagflagtext + 上記任意キー
add_itemitemtext + 上記任意キー
remove_itemitemtext + 上記任意キー
conditionalconditions/success/failuretext/next
{
  "inputs": ["open door", "扉を開ける"],
  "type": "conditional",
  "conditions": [
    { "item": "key", "has": true }
  ],
  "success": {
    "type": "move",
    "target": "hall",
    "text": ["鍵を使って扉を開けた。"]
  },
  "failure": {
    "type": "message",
    "text": ["鍵がない。"]
  }
}

overlay_image は実装済みキーです。show_overlay と同時指定も可能です。

8. Built-in Commands

組み込み入力コマンド

  • look: 現在シーン本文を再表示
  • inventory: 所持品一覧を表示
  • help: 基本コマンド + config.help_message を表示
  • save: セーブコード発行
  • load: セーブコード入力で状態復元

これらはJSONの type ではなく、プレイヤー組み込み処理です。

9. Save / Load

セーブ/ロード対象データ

保存される
  • current_scene
  • flags
  • inventory
  • current_background
  • active_overlays
保存されない
  • ログ表示履歴(transcript)
  • BGM再生状態などの一時UI状態
  • クライアント内部制御状態

10. Validation

検証エラーと最終チェック

  • metadata.title / metadata.rating 必須
  • rating全年齢 / R15 / R18 のみ
  • scenes 必須、1件以上
  • scenes.<id>.text は必須、文字列配列
  • config.start_scenescenes 内に存在必須
  • commands[].type は許可値のみ
  • commands[].inputs は必須、1件以上
  • 参照アセット(画像/音声)の実在チェックあり
公開前チェックリスト
  1. start_scene から最後まで到達できるか
  2. 主要コマンド(look / inventory / help / save / load)を試したか
  3. アイテム増減とフラグ分岐が想定どおり動くか
  4. 画像/音声パスの大文字小文字まで一致しているか

Sample Zip

サンプルZIP

Next

作り方ガイドへ戻る