blob: f2f009c5a44e8f2cbaaaece00e3403a0f955d63c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# P60 江南可玩样板整体验证与缺口盘点(证据单)
- 日期:2026-09-29
- 目标:对「用户批准的江南水乡可玩样板」做一次端到端状态盘点,为今晨用户确认门准备证据。
- 本单只盘点,**未修改任何代码**(Kernel/Sim/HUD/对话框/外部素材均未动)。
- 帧与数字证据:`docs/evidence/p60-*.png`、`p60-analysis.txt`、`p60-p53-chain.txt`、`p60-verification.txt`。
## 入口说明(重要)
仓库中**不存在 `LV_DEBUGGAME`**(全仓 grep 无匹配)。可玩样板的真实入口即 Desktop 应用本身;
本单用**真实游戏内证据钩子**驱动同一 Game 循环取证,未新增/mock 任何渲染路径:
| 用途 | 钩子 | 产出 |
|---|---|---|
| 启动 / 菜单 | `LV_P46_SHOT=1` | `p46-splash-ripple.png`、`p46-menu-lantern-a/b.png` |
| 白天村内 NPC + 对话 | `LV_P44_SHOT=1` | `p44-dialog-a/b/c.png`(真实 `Interact` 开对话) |
| 夜晚村内石灯笼光晕 | `LV_P39_SHOT=1` | `p39-day/night/lantern-night.png` |
| 情境提示-交互-关闭 短帧链 | `LV_P53_REC=1` | `p53-far/prompt/dialog/gone.png` |
复制进证据目录的帧:`p60-startup` `p60-menu` `p60-day-dialogue-a/b` `p60-night-lantern` `p60-prompt` `p60-prompt-gone`(共 7 帧 ≥ 3)。
## 逐项盘点
| # | 样板项 | 状态 | 证据 | 缺口 |
|---|---|---|---|---|
| 1 | 民居可进入 | **部分完成** | 功能:`src/LivingVillage.Desktop/Interaction.fs:400-424`(`EnterHome` → `home entered`/`home exited`),内景渲染 `Game.fs:2688-2690`(`VillageArt.drawInterior`),中文串 `Interaction.fs:575-576`;测试:`PrototypeTests.fs`(`EnterHome`/door→prompt 解析)、`P36PromptTests.fs`、`SampleTests.fs`、`P53InteractionPromptTests.fs:166` | **无内景游戏截图**(`docs/evidence` 无任何 interior/home 帧)→ 用户无法据此做视觉确认 |
| 2 | 桥、河、岸、石板路、植物 | **已完成** | 生成器 `MapGen.fs`(water/stone/peat、`Paths`、`MainRoadCenter`、`Bridges`)、`SceneDetail.fs:93-96`(岸线芦苇);帧:`p39-day.png`(桥)、`p47-day.png`(河道)、`p40-boat.png`;测试:`MapGenTests.fs` 37、`P47SceneDetailTests.fs` 6、`P39ArtTests.fs` 9、`P40ArtTests.fs` 8 | — |
| 3 | 村民四向动画 | **已完成** | `VillageArt` 四向×6 帧;测试 `P45CharacterAnimTests.fs:45`(四向可分)、`:67`(源格互异)、`:92`(行走推进/停止回 idle) 共 7;帧:`p45-char-a/b/c.png` | — |
| 4 | 中文界面 | **部分完成** | UI 文案集中 `ChineseText.fs`(`requiredUiLabels` 等);帧:`p60-menu.png`、`p60-startup.png`;测试 `P16UiTests.fs` 13 | **字形图集缺 16 个 UI 用字**,缺字被置空 → 详见缺口 G1 |
| 5 | 昼夜光照 | **已完成** | `M6Presentation`(`resolveStartTick`/`timePeriodLabel`/tint);帧:`p60-night-lantern.png`、`p39-night.png`、`p47-night.png`;测试 `P46MenuAmbienceTests.fs` 8、`P43HudTests.fs` 8、`P47SceneDetailTests.fs` 6 | — |
| 6 | 情境提示-交互-关闭 短帧链 | **已完成** | `Interaction.fs`(`InteractionResolver`)+ `P53InteractionPromptTests.fs` 9;链证据 `p60-p53-chain.txt`:far→prompt(`E 交谈`, `TalkTo (NpcId 0)`)→dialog→gone,提示只在邻近时出现、开对话即消失、关闭离开恢复 | — |
| 7 | 玩家与可区分村民 | **已完成** | 玩家四向动画同 #3;村民可见性巡游 `Game.fs:170-184`(P25 路点);帧:`p60-day-dialogue-a/b.png` 屏内见村民与对话弹层 | — |
## 端到端帧数字(`p60-analysis.txt`)
- 黑块(24×24 全不透明 ≤8):**0**;白块(`check-no-white-blocks.py` MIN_SIDE=64):**0/7 failures**。
- 字面「豆腐块(□)」:**0**(`Game.fs:73-92` 对缺字置空、绝不画伪字)。
- 对话弹层 rect(P44):`(190,558,900,138)`,page 1/3 → 2/3,4 行/页,avatar=true。
- 提示条 rect(P53):`(598,288,52,26)`,paint delta 44.55,restore delta 0.00 → PASS。
## 缺口清单
### A. 阻塞用户确认门
- **G1 字形图集缺字 16 个(中文界面不完整)**
- 事实:运行时字形集为 `CjkGlyphAtlas.fs:14` 的 `characterTable`(307 字)。扫描全部 Desktop 源内用户可见字符串,缺:
`冬 包 卷 品 夏 料 春 玩 秋 第 背 车 轴 页 香 鱼`。
- 影响(真实 UI,缺字处为空白):
- 右上日历首行 `春/夏/秋/冬 · 第N天`(`HudLayout.fs:181`)→ 季节与「第」空白;
- 对话页脚 `第 %d/%d 页 … 翻页 …`(`Game.fs:2859`)→「第/页」空白;
- 交易/背包:`背包不足`、`背包里没有可卖物品`(`PlayerTrade.fs:190,238`)、热键 `V 卖出 背包物品×1`(`Interaction.fs:694`);
- 物品名 `鱼/卷轴/香料`(`Interaction.fs:272-274`)、`玩家`(`Interaction.fs:630`)、`回车:接受任务`(`Interaction.fs:714`)。
- 最小整改:把上述 16 字补入 `characterTable`(保持有序)并重新生成 `Assets/cjk-glyph-atlas.png` 与 `cjk-glyphs.txt`,再补一条「UI 字符串字符 ⊆ 图集」的回归测试。**未在本单实施。**
- **G2 民居内景无游戏截图**
- 事实:`民居可进入` 功能与测试齐备,但 `docs/evidence` 无内景帧,用户无法做视觉确认。
- 最小整改:新增一条取证钩子(如真实 `EnterHome` 后拍整帧)或复用 autoplay 进屋,产出 `p60`/下一单的内景 PNG。**未在本单实施。**
- **G3 逐帧 vision 可读性自审未执行(本 writer 能力限制)**
- 事实:本 writer 模型不支持图像输入;环境无 `tesseract`、无 `mmx`/vision CLI、无 vision API 凭据,无法对 PNG 做图像级可读性判断。
- 已用可复算的自动检查替代(黑/白块、rect 差、图集覆盖、帧统计),但**不能等同人工/视觉复核**。
- 最小整改:由具备视觉输入的验收者(Hermes vision 三层复核流程)或视觉能力 writer 对 `p60-*.png` 逐帧复核。**属流程阻塞。**
### B. 不阻塞
- **G4 长期逐日成本(P59 已记)**:M3 phase2 在 100 天视野的逐日成本上升未在 20 天窗口复现;与样板视觉确认无关,留档。
- **G5 证据帧复用既有钩子**:因无 `LV_DEBUGGAME`,本单复用 P39/P44/P46/P53 钩子;若需「单一入口连贯录屏」,可另立一单做连续录制(非确认门必需)。
## 复现
```bash
D=/tmp/lv-p60
mkdir -p $D/{p46,p44,p39,p53}
hook(){ timeout 150 xvfb-run -a -s "-screen 0 1280x720x24" env "$1"=1 LV_RECORD_DIR=$D/$2 \
dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll > $D/$2/log.txt 2>&1; }
hook LV_P46_SHOT p46
hook LV_P44_SHOT p44
hook LV_P39_SHOT p39
hook LV_P53_REC p53
python3 scripts/analyze-p53.py $D/p53 docs/evidence/p60-p53-chain.txt
python3 scripts/check-no-white-blocks.py docs/evidence/p60-*.png
```
(字符串字符覆盖与帧统计见本目录 `p60-analysis.txt` 的生成脚本概要;本单未新增脚本。)
|