summaryrefslogtreecommitdiff
path: root/docs/维护说明.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/维护说明.md')
-rw-r--r--docs/维护说明.md42
1 files changed, 42 insertions, 0 deletions
diff --git a/docs/维护说明.md b/docs/维护说明.md
index 972af87..21eff71 100644
--- a/docs/维护说明.md
+++ b/docs/维护说明.md
@@ -1160,3 +1160,45 @@ late pass),故「灯笼光晕 + 水面」以生成器夜帧为准,「炊�
dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll
# 运行日志逐帧打印 panel/prompt/home 对照点,末行 p36-shot=done
```
+
+## P37 职业系统首切片(先设计后实现)
+
+设计/验收依据:`docs/design/profession-system.md`(4 职业:农夫/渔夫/货郎/书生 + 暂不选择)。
+职业只挂在玩家侧:世界(地图/NPC/谣言/关系)仍只由 seed 决定,职业不改变世界生成确定性。
+
+- **已落地(P11–P15/P31 血统,本单给出设计基线与显式验收)**:
+ - 开局属性差异:农夫/渔夫/货郎/书生开局钱 60/45/90/70、体力 100/95/100/100,写进
+ `WorldBootstrap.initialWorldWithOccupation` 的 `Avatar.Mind.Needs`;开局物品包在职业档案
+ `Occupation.profileOf … .InitialInventory`(随 v3 状态持久化)。**注意**:玩家 `Avatar` 结构体
+ 无 `Inventory` 字段(NPC 才有),且设计禁止改 World 结构(会动 digest),故物品差异落在职业
+ 档案/状态而非世界实体上;世界数值路径零感知。
+ - 每日任务:池按职业分化(农 3 / 渔 3 / 货 2 / 书 2,无职业 0),当日任务 =
+ `hash(seed ⊕ 职业种子, 天) mod 池大小`(splitmix 同源,禁 System.Random),确定性可复现;
+ 完成走既有事件通道,逾期判负,完成写年鉴。
+ - 对话/剧情接点:村民回应按职业做确定性小幅重映射(农夫求助、渔夫闲聊、货郎闲聊、书生讲
+ 笑话各一规则);每职业一条三段式轻剧情线,靠对话推进、关系均值决定结局;货郎/书生报价小幅
+ 偏置(4 位定点基点,钳 ±5%),其余恒 1.0。
+ - 开局界面:主菜单「开始」→「选择职业」页(`OccupationSelect`),上下选择、Enter 确认、
+ Esc 返回,中文文案(标题「选择职业」+ 四项 + 「暂不选择」+ 剧情线提示)。
+ - 存档兼容:无职业存档保持 v2;v1/v2 读入职业为「无」(等同旧行为),不吞档。
+- **回归测试**:新增 `src/LivingVillage.Desktop.Tests/P37ProfessionTests.fs`(8 例,覆盖设计 §4
+ 验收 1–5),并复用既有 `DailyTaskTests`/`OccupationBiasTests`/`OccupationStoryTests`/
+ `M6bTests`(OccupationSelect 页)。Release 全量 Desktop **182/182**、Kernel **119/119**。
+- **证据**(`docs/evidence/`,`git add -f`;`check-no-white-blocks.py` 3 帧 0 命中):
+ - `p37-occupation-select.png`:主菜单职业选择页(标题「选择职业」+ 农夫/渔夫/货郎/书生/暂不选择,
+ 选中项高亮;`selected=1` 即渔夫)。
+ - `p37-fisher-start.png`:选渔夫(`LV_P37_OCCUPATION=fisher`)开局后 HUD + 任务面板。
+ - `p37-farmer-start.png`:同 seed 选农夫开局对照。
+ - 对照量化:两帧同一确定性世界(tick=0、同站位),差异像素共 2479,其中顶部 HUD 1648、
+ 左下任务面板 831、**场景区 0** —— 直接证明职业不改变世界生成,差异只在开局属性与任务。
+- **复现**:
+
+ ```bash
+ DLL=src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll
+ for occ in fisher farmer; do
+ LV_P37_SHOT=1 LV_P37_OCCUPATION=$occ LV_RECORD_DIR=/tmp/opencode/lv-p37-evidence \
+ xvfb-run -a -s "-screen 0 1280x720x24" dotnet "$DLL"
+ done
+ # 运行日志打印 p37-shot=... page/selected/task 对照点
+ ```
+- **范围**:首切片仅 4 职业;全村 NPC 职业化、技能树/等级、其他职业与玩家实体背包留待后续单。