6.8 KiB
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以上の実年齢を生成・保存し、年齢不詳の個体を成人向け判定へ流さない検証を追加する。