[M13] .d2s 存档互通:读写官方存档
里程碑 M13 · 重要程度 ★★★★☆ · 风险 中高 · 依赖:M8, M10, M11
完整路线图见ROADMAP.md
背景
Master 明确要求支持读取真实 .d2s 存档并与官方游戏互通。
当前 src/game/save.ts 只解析 签名 / 版本 / 名字 / 职业 / 等级 / 校验和,
其余段原样保留字节(这是对的——见下方铁律)。
为什么排在 M11 之后
.d2s 的数据段涵盖:
| 段 | 依赖的里程碑 |
|---|---|
| 角色属性(stats) | M9 |
| 全部 30 个技能的加点(skills) | M11 |
| 背包 / 身上 / 腰带 / 仓库的全部物品(items) | M10 |
| 任务进度(quests) | M14 |
| 传送点解锁状态(waypoints) | M8 |
| 雇佣兵 / 尸体 / 铁傀儡 | M7 |
没有 M8 / M10 / M11 就无法做有意义的往返。
改动清单
- [MODIFY]
src/game/save.ts—— 逐段实现:header(765 B)quests(298 B)waypoints(81 B)npc(51 B)stats(变长位域)skills(32 B)items(变长位域)corpse/mercenary/iron golem
- [NEW]
src/formats/d2s-bits.ts—— 物品段是位对齐而非字节对齐的变长编码,需要独立的位读写器 - [NEW]
scripts/verify-d2s.ts—— 往返差分:读入真实存档 → 解析 → 重新序列化 → 逐字节与原文件比对
⚠️ 安全约束
铁律 8:解码器宁可拒绝也不猜。
猜错的
.d2s解码器会静默产出坏存档,而坏存档可能损坏 Master 的真实角色。在往返比对逐字节通过之前,写入路径必须默认禁用。
校验和必须重算正确,否则官方客户端拒绝加载。
验收
- 用本引擎读取官方 1.13c 存档,角色属性 / 技能 / 背包完全正确
scripts/verify-d2s.ts往返逐字节比对通过- 反向写出的存档能被官方客户端正常加载,且角色无损
- 对无法确认的字段保持原样保留字节,不做「看起来合理」的解析
No due date
100% Completed