[M13] .d2s 存档互通:读写官方存档 #28
Labels
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: troytt/diablo2-web#28
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
Master 明确要求支持读取真实
.d2s存档并与官方游戏互通。当前
src/game/save.ts只解析 签名 / 版本 / 名字 / 职业 / 等级 / 校验和,其余段原样保留字节(这是对的——见下方铁律)。
为什么排在 M11 之后
.d2s的数据段涵盖:没有 M8 / M10 / M11 就无法做有意义的往返。
改动清单
src/game/save.ts—— 逐段实现:header(765 B)quests(298 B)waypoints(81 B)npc(51 B)stats(变长位域)skills(32 B)items(变长位域)corpse/mercenary/iron golemsrc/formats/d2s-bits.ts—— 物品段是位对齐而非字节对齐的变长编码,需要独立的位读写器scripts/verify-d2s.ts—— 往返差分:读入真实存档 → 解析 → 重新序列化 → 逐字节与原文件比对⚠️ 安全约束
校验和必须重算正确,否则官方客户端拒绝加载。
验收
scripts/verify-d2s.ts往返逐字节比对通过