[M14] 可破坏物件美术与剧情任务链
里程碑 M14 · 重要程度 ★★★☆☆ · 风险 中 · 依赖:M6, M7
完整路线图见ROADMAP.md
背景
可破坏物件美术
data\\global\\objects\\ 下是 1748 个 DCC + 1461 个 COF,只有 13 个 DC6——
也就是说 D2 画对象用的是和角色一样的 COF + DCC 合成管线。
资源包目前只烘焙了它们的位置与元数据(Objects.txt 的名称 / HP / Token + 选定的美术成员名),
像素留白。
⚠️ 不要把这些文件当 DC6 硬解:头部对不上,解出来是垃圾(已实测验证过)。必须走 DCC 路径。
另一个已知的坑:DS1 对象的 id 不是 Objects.txt 的行号,而是「该 act 对象表」的索引
(见 src/game/object-lookup.ts,数据由 npm run port:object-lookup 从 OpenDiablo2 的表生成)。
identity 映射会把 act1 的喷泉(id 0)读成 Objects.txt 第 0 行 "Expansion"。
剧情
questsFromTable 目前只有 1 个 demo 任务。
改动清单
- [MODIFY]
scripts/pack-act-assets.ts—— 烘焙可破坏物件美术(走 DCC/COF 管线,与 M7 的怪物精灵同一套机制) - [MODIFY]
src/game/quests.ts—— 真实任务链
验收
- 罐子 / 箱子 / 火把可破坏,有正确的破坏动画
- 对象美术在等距深度排序中位置正确(不穿墙、不盖角色)
npm run verify:object-lookup仍然通过(DS1 对象 id → token/mode 与Objects.txt交叉核对)- 第一幕完整任务链可通关
对 main (4c2e399) 的地图与怪物生成层全量审计结果。约 145 处硬编码 + 128 处 fallback,约 2200 行手写常量表本应解析自 MPQ。核心问题是贯穿三层的静默降级设计:数据完全损坏的世界仍能成功生成并通过全部测试。
Complete Diablo II: Lord of Destruction v1.13c player skill system (210 class skills across all 7 classes + 11 universal player skills = 221 tracking issues).
把「打怪 → 掉落物品」的完整运行时链路还原到 Diablo II: LoD v1.13c 原版行为。
M10 已经交付了掉落算法库(TreasureClassEx 展开、NoDrop 缩放、ItemRatio 品质判定、词缀抽取、auto-TC),
三方审计确认这些库函数本身与 1.13c 一致。本里程碑解决的是数据供给与运行时接线的断裂:
getEmbeddedDropTables()返回monsterKinds: new Map()/superUniques: new Map(),
src/data/canonical-drop-data.ts根本没有内嵌 MonStats.txt 与 SuperUniques.txt;
因此实机中每一只怪物都命中engine.ts的硬编码兜底tcName = 'Act 1 H2H A',
五幕三难度所有怪物共用同一张一幕普通掉落表。- MF、/players N、Boss 分类、精英 mlvl 加成、金币落地、死亡动画帧门控均未接线。
约束:严格以 1.13c 反编译行为与官方 MPQ 数据表为准绳,禁止任何编造规则与静默降级兜底。