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