Commit Graph

3 Commits

Author SHA1 Message Date
troytt b28ce37e8a docs(roadmap): correct M6 — discard map-scene.ts instead of merging
原诊断断言 act-scene.ts「无战斗/无物品/无技能/无存档」,据此把 M6 定为
「两轨合流、抽出第三个共享层」。逐行核查后发现这个断言是错的。

act-scene.ts:777 就实例化了 GameEngine,820 行 tick 它,962/968/978/984 行
分别绘制怪物、NPC、投射物、地面掉落,826-827 行的存读档也是经引擎走的。
之前 grep 不到是因为查的是 tickCombat/spawnMonsters 的直接导入,而
act-scene 是通过 GameEngine 间接获得这些能力的。

真相是 GameEngine(engine.ts,350 行)本身就已经是地图无关的共享层——
它只依赖 WorldMapProvider { widthPx, heightPx, overlap() }。原计划要新建的
src/scene/shared/gameplay.ts 不需要了。

「真地图上没有怪物」的全部原因是 act-scene.ts:785 的 stats: [],
因为 combat.ts:376 是 if (stats.length === 0) return 0。

反过来 map-scene.ts 查出三个确凿缺陷:

1. 孤儿世界:399-403 行 createWorld + spawnMonsters 建的世界从未被 tick,
   453 行的 GameEngine 又建了自己的世界;let player = world.player 是死变量。
2. 怪物动画冻结(真实 bug):572 行读孤儿世界的 world.tick,而 world.tick += 1
   只在 combat.ts:518 的 tickCombat 里发生,map-scene 从不直接调它。world.tick
   恒为 0,表达式退化成每只怪一个固定帧,追击/攻击时动画静止。
3. 存读档绕过引擎:488-489 行传 saving:false/loading:false,然后在 492-511 行
   于引擎外部读写 localStorage。在 tick 外做存读档对确定性是隐患。

另有 12 个死导入(tickCombat/rebindPlayer/damageMonster/castSkill/
tickProjectiles/QuestLog/npcDialog/captureSnapshot/parseSnapshot/
restoreSnapshot/serializeSnapshot/Rng),是逻辑搬进 GameEngine 后未清理的外壳。

因此 M6 改为:舍弃 map-scene.ts 与 map.html,收敛到 act-scene.ts 单轨。
范围收窄为三件事——打通 stats、修复 overlap 布尔化导致的脱困梯度丢失、
删除 map-scene 并把夹具回归检查改为直接驱动 GameEngine。风险由「高」下调为「中」。

TAG=agy
CONV=c89513df-cd12-4749-b5bd-5e9f16639391
2026-09-15 06:52:29 +00:00
troytt b9671b015f docs(roadmap): link milestones to tracking issues #21-#29
TAG=agy
CONV=c89513df-cd12-4749-b5bd-5e9f16639391
2026-09-15 06:36:31 +00:00
troytt de384f0744 docs: replace HANDOVER.md with ROADMAP.md (M6-M14)
HANDOVER.md 有三处已经过期:§4f 说 101 个生成关卡未烘焙(现已全部烘焙,
788/788 断言)、§7A-4 说 DCC/COF 未实现(现已实现,法师 16 层 8 方向)、
§7A 说 ADPCM+Huffman 音频未做(现已完成,11 项测试通过)。

新的 ROADMAP.md 分两部分:

第一部分是路线图。核心发现是一个此前没被点破的架构断层——acts.html
有真实等距地图和真实角色但零玩法,map.html 有完整玩法栈但跑在夹具地图
和 demo-data.ts 的 3 怪 / 3 物 / 2 技能上,两条轨道从未合流。因此把
「两轨合流」定为 M6,它是 M7-M14 全部里程碑的前提。后续依次为:真实怪物、
世界连通、真实战斗数学、真实物品系统、七职业与技能树、完整 UI/HUD、
.d2s 存档互通、可破坏物件美术与剧情。

第二部分保留 HANDOVER 中仍然有效的工程知识:23 条引擎铁律(模拟纯函数、
瓦片匹配键用 DT1 +20 的 Type 而非 +0 的 Direction、地面槽位只能画 type 0、
LvlPrest 用 LevelId 关联等)、差分验证方法论、验证命令清单、环境依赖、
性能基线与发布流程、目录结构。

README.md 同步更新:文档入口改指 ROADMAP.md,关卡数从「35 个预置」更正为
「365 张(含 70 迷宫 + 31 野外)」,「尚未实现」段落重写为真实缺口。

TAG=agy
CONV=c89513df-cd12-4749-b5bd-5e9f16639391
2026-09-15 06:32:59 +00:00