character.jsonについて
character.json は、キャラクターそのもの(表示名・性別・恋愛対象・立ち絵・初期ステータス・アンロック・エンディング等)を定義します。
ページ概要
- 対象ファイル:
character.json - 役割: キャラクターのプロフィール、恋愛対象設定、立ち絵、初期ステータス、アンロック条件、CG/BGMギャラリーなどを定義します。
- どこで使われるか: キャラクター選択/一覧表示、イベント実行時の表示(立ち絵/名前/CG/BGM解決)、バリデーション(検証)時
- 最小構成: このページの「最小構成(コピペ用)」
- よくあるミス: このページの「よくあるミス」
最小構成(コピペ用)
{
"id": "my_char",
"family_name_ja": "山田",
"given_name_ja": "花子",
"family_name_en": "Yamada",
"given_name_en": "Hanako",
"age": 17,
"description_ja": "説明",
"description_en": "Description",
"gender": "female",
"relationship_type": {
"male": "romance",
"female": "friendship"
},
"portraits": {
"spring": {
"casual": {
"normal": "portraits/spring/casual/normal.png"
}
}
},
"initial_stats": {
"male": { "affection": 0, "intimacy": 0, "relationship": "acquaintance" },
"female": { "affection": 0, "intimacy": 0, "relationship": "acquaintance" }
},
"stat_ranges": {
"affection": { "min": -100, "max": 100 },
"intimacy": { "min": -100, "max": 100 }
},
"unlock_conditions": {
"male": null,
"female": null
}
}
最重要ポイント
- 必須立ち絵:
spring.casual.normalは必ず用意してください(ないとエラーになります)。 - 性別ごとの項目:
relationship_typeとinitial_statsはmale/femaleの両方が必須です。
id(キャラクターID)
イベントスクリプトの character 参照で使うため、一度決めたら基本的に変えないのが安全です。
名前・説明文
基本フィールド
{
"family_name_ja": "山田",
"given_name_ja": "花子",
"family_name_en": "Yamada",
"given_name_en": "Hanako",
"description_ja": "明るく元気な女の子。",
"description_en": "A cheerful and energetic girl."
}
変数プレースホルダーの使用
名前や説明文では、プレイヤー名やゲーム状態変数を埋め込めます。
{
"family_name_ja": "{{player.family_name}}",
"given_name_ja": "{{var.custom_nickname}}",
"description_ja": "{{player.given_name}}の幼馴染。一緒に過ごした日数は{{var.days_together}}日。",
"description_en": "{{player.given_name}}'s childhood friend. We've spent {{var.days_together}} days together."
}
使えるプレースホルダー:
{{player.*}}: プレイヤー名(given_name,family_name,full_name,nicknameなど){{var.*}}: ゲーム状態変数(イベントで設定した変数を参照)
詳細は 変数とconditional を参照してください。
性別・恋愛対象
gender
"gender": "female"
relationship_type(性別ごと)
relationship_type は「プレイヤー性別ごとに、そのキャラが恋愛対象かどうか」を表します。
"relationship_type": {
"male": "romance",
"female": "friendship"
}
target_player_gender(任意・推奨)
target_player_gender を指定すると、このキャラクターが選択可能になる主人公の性別を制限できます。未指定の場合は全性別で選択可能です。恋愛対象キャラでは混乱防止のため指定を推奨します。注意: 空配列([])は誰の性別でも選択不可になるため非推奨です。
"target_player_gender": ["male"]
立ち絵(portraits)
必須: spring / casual / normal の1枚が必須です(バリデーションエラー回避のため)。
"portraits": {
"spring": {
"casual": {
"normal": "portraits/spring/casual/normal.png"
}
}
}
詳しくは 立ち絵について を参照してください。
初期ステータス(initial_stats)
プレイヤー性別ごとに、初期値と関係性を持ちます。
relationship の有効値(5段階): dislike, acquaintance, friend, bestFriend, dating。初対面・知り合い程度の初期値には acquaintance を指定します(stranger は廃止済みで使用できません)。
"initial_stats": {
"male": {
"affection": 0,
"intimacy": 0,
"relationship": "acquaintance"
},
"female": {
"affection": 0,
"intimacy": 0,
"relationship": "acquaintance"
}
}
ステータス範囲(stat_ranges)
ステータスは範囲内に自動でクランプされます。
"stat_ranges": {
"affection": {"min": -100, "max": 100},
"intimacy": {"min": -100, "max": 100}
}
アンロック(unlock_conditions)
unlock_conditions は、主人公性別ごとに「このキャラクターが最初から選択可能か / 後からイベントで解放されるか」を定義します。
"unlock_conditions": {
"male": null, // または true: 最初からアンロック(選択可能)
"female": false // 最初はロック、イベントで解放
}
値の意味
nullまたはtrue: 最初からアンロック(キャラクター選択画面に表示される)false: 最初はロック、イベントでunlock_charactersコマンドを使って解放
イベントでアンロックする方法
ロックされたキャラクター(false)は、他のキャラクターのイベントで unlock_characters を使って解放します。
{
"scene_id": "introduction_event",
"type": "dialogue",
"speaker": "sakura_tanaka",
"text_ja": "私の友達を紹介するね!",
"unlock_characters": ["locked_character_id"]
}
日数やフラグによる条件付きアンロックは、イベントの required_conditions で実現します。詳細は イベント条件 と イベントスクリプト を参照してください。
CG/BGMギャラリー(cg_gallery / bgm_gallery)
イベント側では cg や bgm にIDを指定して呼び出します。ギャラリーは 配列ではなくオブジェクト(map) です(キーがID)。
cg_gallery(CGの登録)
"cg_gallery": {
"confession_rooftop": {
"path": "cg/confession_rooftop.png",
"title_ja": "屋上の告白",
"title_en": "Confession on the Rooftop",
"description_ja": "(任意)",
"description_en": "(optional)"
}
}
path は季節対応(マップ)も可能です。
"cg_gallery": {
"ending_cg": {
"path": { "spring": "cg/ending_spring.png", "default": "cg/ending.png" },
"title_ja": "エンディング",
"title_en": "Ending"
}
}
bgm_gallery(BGMの登録)
"bgm_gallery": {
"character_theme": {
"path": "audio/character_theme.mp3",
"title_ja": "テーマ",
"title_en": "Theme",
"loop": true,
"volume": 0.7
}
}
季節対応(マップ)も同様に使えます(path に { \"default\": \"...\", \"summer\": \"...\" } のように指定)。
theme_bgm(テーマBGM)
theme_bgm に bgm_gallery のIDを指定すると、そのキャラクターの「テーマ曲」として扱われます(キャラクター選択画面などで使われます)。
"theme_bgm": "character_theme"
よくあるミス
- 必須立ち絵がない:
spring.casual.normalが未定義/ファイルが存在しない →portraitsに登録し、実ファイルも配置する - cg_gallery を配列で書く:
[{...}]形式 → 正:{ \"id\": { ... } }(キーがID) - relationship_type / initial_stats の性別キー不足:
maleまたはfemaleが抜ける → 両方必須 - 関係性(relationship)の値が無効:
strangerなど → 有効値はこのページのinitial_stats.relationshipの説明どおり