Skip to content

変数とディレクティブ

変数はワールドのゲーム状態です。AIは毎ターン現在値を読み、応答に角括弧ディレクティブを書いて更新します。

変数スキーマ

json
{
  "id": "health",
  "name": "Health",
  "type": "number",
  "defaultValue": 100,
  "min": 0,
  "max": 100,
  "description": "Player's physical health",
  "behaviorRules": "0 = death. 1-20 = critical. 20-50 = wounded. 50-80 = bruised. 80-100 = healthy. Decrease on physical damage: punch -5 to -10, slash -15 to -25, fall -20 to -40. Rest +5, healing +10 to +30. Max change per turn: 30."
}

変数のタイプ

number

任意のmin/max境界を持つ数値。

ディレクティブ構文:

[health: set 50]       → 50に設定
[health: +10]          → 10加える(別名: add)
[health: -15]          → 15引く(別名: subtract)
[health: *2]           → 2倍にする(別名: multiply)
[gold: 100]            → 暗黙のset(演算子なし)

string

テキスト値。

ディレクティブ構文:

[location: set "dark forest"]
[mood: set "suspicious"]
[notes: append " Found a clue."]

boolean

真偽値フラグ。

ディレクティブ構文:

[has-key: toggle]        → true ↔ false を切り替え
[met-elder: set true]
[quest-active: set false]

json

複雑な構造。オブジェクトと配列。ネストしたドットパス更新をサポート。

ディレクティブ構文:

[inventory: push {"name": "Iron Sword", "damage": 10}]
[inventory: delete 0]
[inventory: set [{"name": "Potion", "qty": 3}]]

[npcs.aria.affinity: +5]
[npcs.aria.mood: set "happy"]
[npcs: merge {"aria": {"trust": 80}}]
[quest-log: push {"id": "q1", "status": "active"}]
[config: delete "deprecated-key"]

ドットパス操作:

  • [root.nested.field: op value] — JSON変数内のネストしたフィールドを更新
  • 中間オブジェクトが存在しない場合、自動作成
  • 配列インデックスアクセス: [inventory.0.durability: -1]

すべての操作

操作タイプ構文動作
setすべて[id: set value] または [id: value]値を置き換え
add / +number[id: +10] または [id: add 10]増加
subtract / -number[id: -5] または [id: subtract 5]減少
multiply / *number[id: *2] または [id: multiply 2]スケール
toggleboolean[id: toggle]true/falseを反転
appendstring[id: append " text"]連結
mergejson(オブジェクト)[id: merge {"key": "val"}]浅いマージ
pushjson(配列)[id: push "item"] または [id: push {...}]配列に追加
deletejson[id: delete "key"] または [id: delete 0]キー/インデックスを削除

オーディオディレクティブ

オーディオは別のディレクティブ形式でトリガーされます。

[audio: track-id play]
[audio: track-id stop]
[audio: track-id crossfade 2.5]
[audio: track-id volume 0.5]
[audio: track-id play chain:next-track]

ビヘイビアルール

behaviorRules フィールドは、AIのシステムプロンプトに <behavior-rules> ブロックとして注入される平易な英語(または日本語)です。いつ、どのように変数を更新するかをAIに教えます。

効果的なビヘイビアルールに含めるもの:

  • 各値範囲がナラティブで何を意味するか
  • 変化のトリガー(およびどの方向)
  • 変化量のガイドライン(どれだけ変えるか)
  • 上限(1ターンあたりの最大変化、絶対境界)
  • 他の変数とのリレーションシップ

例 — 複雑なJSON変数:

"behaviorRules": "Array of party members. Push new object when recruiting: {\"name\": \"...\", \"class\": \"...\", \"trust\": 50}. Update trust via dot-path: [allies.0.trust: +5]. To remove an ally, use a Behavior with an UpdateVariable JSON Patch action, or overwrite the whole array with [allies: set [...]]. Trust below 20 = may betray."

ID規則

  • IDはワールド内で一意である必要があります
  • 文字、数字、アンダースコアで構成されるIDは変数マクロとしてアクセス可能です。例えば player_health はエントリ内で {{player_health}} として到達できます。- を含むIDはマクロリゾルバでマッチしないので、二重ブレースマクロ構文で参照する変数には snake_case(または camelCase)を優先してください。
  • 変数ディレクティブパーサー(AIの応答内で使用)はIDで - を受け付けるので、[player-health: +5] のようなディレクティブでは kebab-case IDも機能します。
  • 予約語を避ける: audiouserchartimedate