diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/维护说明.md | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/docs/维护说明.md b/docs/维护说明.md index de5698a..6978a9a 100644 --- a/docs/维护说明.md +++ b/docs/维护说明.md @@ -1,6 +1,6 @@ # 维护说明 -结论先行:主分支保持 0 警告 0 错误 + Desktop 69/69、Kernel 50/50 全绿;性能基线 +结论先行:主分支保持 0 警告 0 错误 + Desktop 75/75、Kernel 79/79 全绿;性能基线 final_digest 固定 953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F7F6C。 本文记录模块职责、不变量与逐字可复制的验收命令。 @@ -33,6 +33,22 @@ final_digest 固定 953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F 4. **地图 512×384 大世界**:`ProceduralMap.generate` 同 seed 两次生成逐字节一致; 村核矩形(24..38 × 16..34)由生成器不变式保证可通行。 +## 动画语义(P13,全部为 `tick → 帧` 纯函数) + +- 角色图集 `Assets/jiangnan-characters.png`:3840×48,每个 (变体,方向) 占 **6** 格 + (4 走路 + 2 待机呼吸),格宽 32 高 48。 + - `cellIndex = (variantIndex * 4 + directionIndex) * 6 + frameIndex`; + 方向序 North/South/West/East = 0/1/2/3,变体序 Indigo/Ochre/Jade/Grey/StrawHat = 0..4。 + - frameIndex:Walk 0..3 = 0..3,IdleOne/IdleTwo = 4/5。 + - `animationFrame = (tick / 4) % 4`(16 tick 一循环);`idleFrame = (tick / 24) % 2`(48 tick 一循环)。 + - `characterFrame isMoving tick`:移动取走路帧,静止取呼吸帧。Avatar 用 `Game.fs` 的 + `avatarMoving`(比较前后位置);NPC 用 `npcSpriteSpecAtTarget`(目标向量 ≥0.5px 视为移动)。 +- 世界图集 `Assets/jiangnan-world.png`:800×32,25 格。水面 3 帧在 slot 1/13/21, + 炊烟 3 帧在 slot 22/23/24。 + - `waterFrameTick = (tick / 32) % 3` → Water / WaterSpriteB / WaterSpriteC; + - `smokeFrameTick = (tick / 40) % 3` → SmokeSpriteA/B/C,画在民居屋顶上方 `offsetTile pos -2 -3`。 +- 以上帧选择只用 `tick` 与「是否移动」,无墙钟/`System.Random`;同 tick 必得同帧。 + ## 性能基线命令 ```bash @@ -65,12 +81,30 @@ pkill -f "Xvfb :99"; Xvfb :99 -screen 0 1280x720x24 & sleep 2 ffmpeg -y -f x11grab -video_size 1280x720 -framerate 10 -i :99 -pix_fmt yuv420p out.mp4 LV_AUTOPLAY_SAMPLE=1 LV_AUTOPLAY_DAYLIGHT=1 LV_AUTOPLAY_RECORD=1 \ dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll + +# P13 动画证据(确定性接触表 + 真实运行帧) +python3 scripts/make-animation-evidence.py # -> evidence/walk-idle-frames.png 等 +# 真实运行帧(白天 / 夜晚各一次;record 目录与间隔可用环境变量覆盖) +timeout 45 xvfb-run -a -s "-screen 0 1280x720x24" env \ + LV_AUTOPLAY_SAMPLE=1 LV_AUTOPLAY_DAYLIGHT=1 LV_AUTOPLAY_RECORD=1 \ + LV_RECORD_DIR="$PWD/evidence/day-run" LV_RECORD_EVERY=2 \ + dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll +timeout 45 xvfb-run -a -s "-screen 0 1280x720x24" env \ + LV_AUTOPLAY_SAMPLE=1 LV_AUTOPLAY_RECORD=1 \ + LV_RECORD_DIR="$PWD/evidence/night-run" LV_RECORD_EVERY=2 \ + dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll ``` +- `LV_RECORD_DIR` 默认 `/tmp/lv-p5-prompt`,`LV_RECORD_EVERY` 默认 25(每 N 次绘制存一帧)。 + 跑完 `sample result=ok`;连续移动帧(如 day-run 的 0136..0146)即走路逐帧采样。 + ## 取证快照位置(近期) - `/tmp/lv-p2-ui/`、`/tmp/lv-p3-fixes/`(标题/键位/P5 提示与修) - `/tmp/lv-p6-art/`(昼夜光照/四帧行走/标题入场) - `/tmp/lv-p7-map/`(512×384 大世界巡游帧 + 夜灯对照) - `/tmp/lv-p8-cc0/`(CC0 同 seed 对照帧) +- `/tmp/opencode/lv-p13/evidence/`(P13:`walk-idle-frames.png`、`water-3phase.png`、 + `smoke-3phase.png`、`water-2frame.png`、`smoke-2frame.png`、`day-panorama.png`、 + `night-lantern.png`、`day-night-compare.png`、`walk-real-run.png`、`day-run/`、`night-run/`) - `artifacts/perf-independent/<TS>/`(digest 3 联测回读) |
