diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-22 16:43:35 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-22 16:43:35 +0800 |
| commit | b8f2a6850904f951cdf690ad23d52764f202966b (patch) | |
| tree | 7966d7716c2e423d043776a5722bdf16cc7c71b5 /docs/维护说明.md | |
| parent | 4f512323e521bf57dee7b2bd5e060b69b7b6d029 (diff) | |
| download | living-village-b8f2a6850904f951cdf690ad23d52764f202966b.tar.gz | |
docs: P31 maintenance notes (dialogue bias + four storylines)
Change points, evidence commands, frozen gates restated: kernel 119 /
desktop 160 green, digest 953775FAEB2F unchanged, 64x48/256x192 checksums
pinned, M3 files untouched; art/ evidence kept out of the repo.
Diffstat (limited to 'docs/维护说明.md')
| -rw-r--r-- | docs/维护说明.md | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/维护说明.md b/docs/维护说明.md index e234283..202d3b2 100644 --- a/docs/维护说明.md +++ b/docs/维护说明.md @@ -603,6 +603,53 @@ dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll - **遗留**:散落农舍与乡村树丛为纯布局/美术层,不与 NPC 数值、任务系统耦合;默认 64x48/256x192 判定不进入新分支、不消费额外 RNG,观感不变。 +## P31:职业系统 P-d——对话分支倾向 + 四条轻剧情线 + +- **① 对话分支倾向(design §5)**:`Occupation.biasResponse (kind option) (intent) (personality)` + 是 `Sim.responseFor` 之上的纯函数重映射,无职业(None)逐字节等于原输出。规则各自只作用于 + 签名意图:农夫 AskHelp `Refused->Helpful`;渔夫 SmallTalk `Reserved->Friendly`(聊天气鱼汛, + 冷场变热络);货郎 SmallTalk `Reserved->Bargaining`(三句不离买卖);书生 Joke **完全覆盖** + 为 `Reserved`(与 personality 相反时取完全覆盖语义而非概率偏向,禁随机,design §5 反差感)。 + 接线:`Sim.responseFor` 改为公开(同一纯函数,原口径不变);新增 + `Sim.chooseDialogueWith respond target intent world`(`chooseDialogue` 保留为 identity 包装, + 既有行为逐字节不变);Desktop `M5Interaction.chooseIntent` 按玩家职业传 `biasResponse`, + 偏差后的回应照常进 DialogueOutcome/双向记忆/年鉴(`Sim.appendAnnal` 改公开,语义不变)。 +- **② 轻剧情线状态机**:`Occupation.Story`,每职业三段式 接任务→走访→收束,`StoryStage` + 语义 `0 未开始 / 1 已接任务 / 2 走访中 / 3 已收束`(v3 occupation 段早已序列化该字段, + 读取路径原样恢复,存档段格式未动)。每次玩家对话至多推进一段:开线日 + `startDayOf seed kind = hash(seed ^ storySeed, day 0) mod 3 + 2 ∈ [2,4]`(沿每日任务的 + splitmix `(seed, profession, day)` 哈希模式,story 种子与任务种子两两不撞);`1→2`、`2→3` + 分别要求 `day >= startDay+1`、`startDay+2`。终局由 `relationMeanToPlayer`(与 + `Sim.relationMatrix` 同口径的衰减 valence,只计认识玩家的村民;无一认识 = 0)过纯阈值 + `≥0.3 Warm / [0,0.3) Plain / <0 Distant` 定格三种结局文案,写入年鉴快照后不再随关系衰减改变。 + 四条线:农夫「雨水与年成」、渔夫「水位与收成」、货郎「新货的路子」、书生「庙前的争论」。 + (设计稿 §5 的「药童」在 P-a 落地时以「农夫」为第四职业合入 main,故第四线写农夫题材, + 其余三线名照设计稿。) +- **③ 年鉴条目**:`Sim.AnnalKind` 新增 `StoryAnnal`(文案落 `Summary`),v3 存档以新 token + `story` 序列化;v1/v2(无职业)永不产生该 token,字节口径不变;v3 存→读→存逐字节一致 + (有测试)。§3「身份条目」此前未落地,本单补齐:带职业开局由 `StartNewGame` 写入 + `以耕田为生 / 以打渔为生 / 以贩货为生 / 以读书为生`(年鉴短句风格,不带主语)。 +- **④ 显示层收口(最小展示)**:任务面板(T 键)在职业名/每日任务下新增一行 + `剧情线:<线名>,<段名>`;职业选择页选中职业时提示 `剧情线:<线名>`;年鉴面板按既有 + `annalLine` 渲染 `StoryAnnal.Summary` 原文。M5View 新增 `Seed` 字段(与开局种子同源), + 供剧情线开线日哈希。 +- **⑤ 中文图集**:新增文案(四线名、四段名、身份条目、接任务/走访/12 条结局文案)全部进入 + `ChineseText.requiredUiLabels`;`cjk-glyphs.txt` 与 `CjkGlyphAtlas.characterTable` 同步 + 238 -> **307** 字(384x480,行数 15 -> 20),`scripts/generate-cjk-glyph-atlas.sh` 确定性 + 再生成 PNG;`CjkGlyphAtlasHasAStableCharacterTableAndGeometry` 计数/行数/尺寸断言同步更新。 +- **回归**:Kernel **92 -> 119**(偏差 9 + 剧情线 14 + 存档/身份 4)、Desktop **156 -> 160** + (面板剧情行 2、M5 对话接线 2)全绿;Release build 0 警告 0 错误; + `final_digest=953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F7F6C` 多次一致; + **64x48=6042052、256x192=1284656962 锁定不变**(`DefaultSizeChecksumsArePinned`)。 + M3 相关文件零改动;无职业世界(Occupation=None)全部走 identity/原路径,模拟数值语义 + 未触碰(Sim.fs 仅 visibility 公开 + chooseDialogue 重构为 identity 包装,行为逐字节等价)。 +- **取证** `/tmp/opencode/lv-p31/art/`(gitignore 不入库,真实 Xvfb 帧非概念图): + `p31-story-{farmer,fisher,peddler,scholar}-stage2.png`(1280x720 各 1 张,任务面板含 + 剧情线行 + 年鉴身份条目)。复现命令: + `timeout 120 xvfb-run -a -s "-screen 0 1280x720x24" env LV_STORY_SHOT=1 LV_STORY_OCCUPATION=fisher LV_STORY_STAGE=2 LV_RECORD_DIR=/tmp/opencode/lv-p31/art dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll`。 +- **范围外**:设计稿 §5 的「视频证据」以 4 张真实渲染截图替代(本单验收清单口径); + 药童线以农夫线替代(见 ②);NPC 职业化、补选职业、剧情线多线并行仍为设计边界外。 + ## 已验证命令 ```bash |
