変数とconditional
ページ概要
- 対象ファイル:
events.json,events/*.json - 役割: 変数(
variables)で「覚えておく値」を保存し、イベント発生条件(required_conditions.variables)やconditionalで分岐に使います。 - どこで使われるか: イベント実行時(変数の更新)、イベント発火判定時/条件分岐時(変数の評価)
- 最小構成: このページの各例(コピペ可能)
- よくあるミス: このページの「設計のコツ」
ゲーム状態の変数(variables)
変数はキーと値の辞書で、イベント中のシーンや選択肢から設定できます。既存キーは上書きされます。
設定(シーン/選択肢)
{
"scene_id": "s01",
"type": "dialogue",
"character": "player",
"text_ja": "(覚えておこう)",
"text_en": "(I should remember this.)",
"variables": {
"my_char_route": "A",
"visited_cafe_count": 1
}
}
参照(events.json の required_conditions.variables)
イベント発生条件で変数を参照できます(exists / not_exists / 比較など)。
"required_conditions": {
"variables": {
"visited_cafe_count": { "operator": ">=", "value": 3 },
"my_char_route": { "operator": "==", "value": "A" }
}
}
exists / not_exists の例:
"required_conditions": {
"variables": {
"my_char_route": { "operator": "exists" }
}
}
日数と変数を一致させる(day_equals_variable)
「指定した変数(int)と同じ日だけ発生」のような用途に使えます。
"required_conditions": {
"day_equals_variable": "my_char_promise_cafe_day"
}
conditional シーン(イベント内分岐)
イベントスクリプト内で、フラグ・ステータスなどに応じて次シーンを自動決定します。
{
"scene_id": "s10",
"type": "conditional",
"branches": [
{
"conditions": { "required_flags": ["flag_a"] },
"next_scene": "s11_a"
},
{
"conditions": {
"variables": {
"my_char_route": { "operator": "==", "value": "A" }
}
},
"next_scene": "s11_b"
},
{
"conditions": {
"language": ["ja"]
},
"next_scene": "s11_ja"
}
],
"default_next_scene": "s11_default"
}
テキストの変数展開({{ ... }})
会話テキスト、話者名、キャラクター情報などで、プレイヤー名やゲーム状態変数を差し込めます。
プレイヤー名変数
{{player.*}} でプレイヤー名を展開できます。
{
"scene_id": "s20",
"type": "dialogue",
"character": "my_char",
"text_ja": "おはよう、{{player.given_name}}!",
"text_en": "Good morning, {{player.given_name}}!"
}
| プレースホルダー | 置換内容 | 備考 |
|---|---|---|
{{player.full_name}} |
フルネーム(JA: 「姓 名」 / EN: 「Given Family」) | player.getFullName(locale) に従います |
{{player.family_name}} |
姓 | - |
{{player.given_name}} |
名 | - |
{{player.nickname}} |
ニックネーム(未設定なら名) | nickname ?? given_name |
{{player.family_name_san}} |
JA: 「姓さん」 / EN: 「Mr./Ms. 姓」 | EN の敬称は player.gender によって Mr./Ms. が自動選択されます |
{{player.given_name_kun}} |
JA: 「名くん」 / EN: 「名」 | 英語では「くん」を付けません |
{{player.given_name_chan}} |
JA: 「名ちゃん」 / EN: 「名」 | 英語では「ちゃん」を付けません |
{{player.nickname_kun}} |
JA: 「ニックネームくん」 / EN: 「ニックネーム」 | 未設定なら名で代替します |
{{player.nickname_chan}} |
JA: 「ニックネームちゃん」 / EN: 「ニックネーム」 | 未設定なら名で代替します |
注意(よくあるハマり)
- 空白は入れない: 現状は文字列の完全一致で置換しているため、
{{ player.given_name }}のように空白を入れると置換されません({{player.given_name}}の形にしてください)。 - 一覧以外は置換されない:
{{player.age}}など未対応キーは、そのままテキストに残ります。
ゲーム状態変数の埋め込み({{var.*}})
イベントで設定した変数も、テキスト内で参照できます。
{
"scene_id": "s30",
"type": "dialogue",
"character": "my_char",
"text_ja": "あのカフェには{{var.visited_cafe_date}}日に行ったね!",
"text_en": "We've been to that cafe {{var.visited_cafe_date}} days!"
}
変数プレースホルダーの特徴
- 存在しない変数を参照した場合は、空文字列になります
- 数値型の変数も自動的に文字列に変換されます
- キャラクター名にも使えます:
character.jsonのfamily_name_jaなどにも{{var.*}}や{{player.*}}を記述できます - 話者名にも使えます: イベントスクリプトの
name_displayでも使用できます
使用例
話者名への応用:
{
"scene_id": "s40",
"type": "dialogue",
"character": "my_char",
"name_display": "{{var.current_relationship}}",
"text_ja": "今日も良い天気だね!",
"text_en": "Nice weather today!"
}
例えば、current_relationship 変数に「恋人」「友達」「クラスメイト」などを入れておけば、関係性に応じて話者名を動的に変更できます。
キャラクター名への応用:
{
"family_name_ja": "{{player.family_name}}",
"given_name_ja": "{{var.custom_nickname}}",
"description_ja": "{{player.given_name}}の幼馴染。一緒に過ごした日数は{{var.days_together}}日。"
}
キャラクターの名前自体を動的に変えたり、説明文に変数を埋め込むことができます。
設計のコツ
- 命名は衝突しないように:
<characterId>_の接頭辞を付ける - 分岐は上から評価:
conditional.branchesは上から最初に一致したものが採用されます - 数値は数値で: 比較演算(
>=など)は、変数値とvalueが数値のときだけ有効です