# MVP人物・来客カタログ この文書は14日MVPで使用する静的な人物データの索引である。ゲームルールの正本は `GAME_SPECIFICATION.md`、機械処理の正本は `SYSTEM_SPECIFICATION.md` とし、実データは `data/characters/` のJSONを正本とする。 ## データ境界 - 客クラスと種族は別データとし、8クラス×4種族の32組合せを生成できる。 - 自由雇用候補20人は固定ID、成人確認済み年齢、役割、日給、契約金、4技能、許可業務を持つ。 - MVPのユニーク人物はアンリとライの2人とし、相互の`counterpart_id`を必須にする。 - 全IDは表示名から独立したlowercase snake_caseとする。セーブやイベント参照にはIDだけを使う。 - JSONはSchema 1として厳密検証する。不明フィールド、不明タグ、重複ID、不足技能、18歳未満、成人未確認、孤児参照が一件でもあればカタログ全体を公開しない。 - 14日MVPで参照されるID集合は固定する。同数の別IDへ差し替えて既存セーブ・イベント参照をすり替えることも許可しない。 - JSONは1文書1 MiB、深さ64、10万値までとし、同一Object内の重複KeyはUnicode escape表現を含めて構文解析前に拒否する。検証エラーは最大256件で打ち切りを明示し、不正データによるメモリ増幅を防ぐ。 - IDは64文字、表示名は80文字までとし、表示名の制御文字、経路の`..`、非有限数、JSONで正確に往復できない巨大数を受け入れない。 - 倍率は浮動小数ではなくbasis pointで保持する。`10000`が1.00倍、`9000`が0.90倍である。 - 客クラスの`need_rates`は`hunger`、`sleep`、`hygiene`、`medical`、`leisure`、`intimacy`の6 Keyを必須とする。種族の`need_rate_modifiers`もこの6 Key以外を許可しない。 - Hygieneは汚れ、Medicalは負傷・病気、Intimacyは成人確認と昼夜Contextで変化させるため、MVP静的データの基礎値は0とする。安全は`risk_tolerance`と候補Risk、交流は選好・GroupFit・関係Eventへ分離する。 ## 客クラス8種 | ID | 表示 | 主な需要・判断特性 | |---|---|---| | `warrior` | 戦士 | 忍耐と危険許容が高く、食事・酒場を優先 | | `mage` | 魔法使い | Manaと静かな施設を好み、騒音を忌避 | | `rogue` | 盗賊 | 夜・地下を好み、警備を避ける | | `cleric` | 聖職者 | 信仰と清潔を重視し、違法・地下への感度が高い | | `noble` | 貴族 | 高予算・低忍耐・高品質要求・VIP需要 | | `merchant` | 商人 | 交易と価格差を重視 | | `outsider` | 亜人・魔族客 | 夜行性傾向と地下嗜好を持つ来客枠 | | `diplomat` | 外交官 | 高品質・安全・VIP対応を要求 | `outsider`は種族そのものではない。たとえば`outsider_human`も生成可能だが、通常の需要構成では獣人・魔族の出現重みを高くする。種族と職業を同一軸に戻さないための互換クラス名である。 ## 種族4種 | ID | 表示 | 成人基準 | 主な補正 | |---|---|---:|---| | `human` | 人間 | 18 | 基準値 | | `elf` | エルフ | 20 | Mana・静穏嗜好、忍耐増、危険許容減 | | `beastfolk` | 獣人 | 18 | 食事需要、忍耐、危険許容がやや高い | | `demonfolk` | 魔族 | 20 | 夜・地下嗜好、危険許容が高い | 種族は所持金、忍耐、危険許容、嗜好、欲求増加率だけを補正する。性別や種族を破産結果、基本能力、成人契約の可否へ直結させない。 ## 自由雇用候補20人 | ID | 表示 | 年齢 | 役割 | 希望番 | 日給G | |---|---|---:|---|---|---:| | `staff_akane` | アカネ | 24 | 受付 | 昼 | 120 | | `staff_bardo` | バルド | 38 | 受付 | 夜 | 135 | | `staff_chika` | チカ | 27 | 調理 | 昼 | 145 | | `staff_doran` | ドラン | 44 | 調理 | 夜 | 160 | | `staff_eri` | エリ | 22 | 清掃 | 昼 | 90 | | `staff_fugo` | フゴ | 31 | 清掃 | 夜 | 100 | | `staff_gina` | ジーナ | 29 | 運搬 | 昼 | 110 | | `staff_haru` | ハル | 21 | 運搬 | 夜 | 95 | | `staff_iris` | イリス | 26 | 接客 | 昼 | 130 | | `staff_juno` | ユノ | 33 | 接客 | 夜 | 140 | | `staff_klaus` | クラウス | 36 | 警備 | 昼 | 155 | | `staff_lina` | リナ | 30 | 警備 | 夜 | 150 | | `staff_marc` | マルク | 41 | 警備 | 任意 | 170 | | `staff_nadia` | ナディア | 28 | 酒場 | 夜 | 145 | | `staff_otto` | オットー | 35 | 酒場 | 夜 | 150 | | `staff_petra` | ペトラ | 25 | 施術 | 昼 | 145 | | `staff_quinn` | クイン | 32 | 施術 | 夜 | 160 | | `staff_rika` | リカ | 23 | 事務 | 昼 | 105 | | `staff_sven` | スヴェン | 39 | 保守 | 任意 | 125 | | `staff_tessa` | テッサ | 34 | 医療 | 任意 | 165 | 雇用時には静的データから`role_id`、4技能、許可業務、日給、通常雇用種別を実行時従業員へ投影する。希望番はSchedule作成側へ、年齢・成人確認・契約金は雇用Commandの検証境界へ渡し、コンテンツ条件を実行時の暗黙知にしない。これにより、カタログから生成した従業員の日給が実行時に0へ脱落することを防ぐ。 ## ユニーク人物 | ID | 表示 | 種別 | 年齢 | 役割 | 対応人物 | 初期機械効果 | |---|---|---|---:|---|---|---| | `heroine_anri` | アンリ | ヒロイン | 25 | 女将 | `rival_rai` | 配置階の忍耐減少を0.90倍 | | `rival_rai` | ライ | ライバル | 29 | 影響者 | `heroine_anri` | Shield攻撃8、夜間+4 | 両者は`unique`かつ`unsellable`であり、通常の売却・自由雇用解雇へ流さない。関係値50・80の境界は静的効果だけでは越えず、予告付きの明示イベントを必要とする。 ユニーク人物の機械効果Keyは既知の効果だけを許可し、ヒロイン用とライバル用を相互に流用しない。倍率は0.25~3.00、MVPのShield攻撃値は0~100へ制限する。自由雇用候補へ`unique`または`unsellable`を付与することも、ユニーク人物から両タグを外すことも拒否する。 ## 実装上の次境界 静的カタログは、内容の欠落や危険な人物データを起動時に検出するところまでを担当する。自動来客でのクラス・種族出現重み、雇用画面、アンリとライの同一施設・同一シフト接触判定は、運営Coordinatorと実行環境を接続した後に行う。 客個体の年齢、性別、社会ランク、危険度はアーキタイプではなく生成個体の責務である。現在の`GuestDefinition`は成人確認済みフラグまでを受け取るため、個体生成を接続する際は、選択種族の`adult_age`以上の実年齢を生成・保存し、年齢不詳の個体を成人向け判定へ流さない検証を追加する。