——自动地图快照如何记录你在庇护之地的每一步
在 Windows 或 macOS 的 Diablo II
安装目录里,进入 save
子文件夹时,总能看到与角色同名、扩展名为 .ma1 · .ma2 · .ma3 的一组小文件。社区常把这些文件称为 Automap snapshots,它们与 .d2s 主存档、.key 自定义按键文件一起构成单机或离线角色完整档案。很多玩家误以为删除这几个 ma
文件会导致角色消失,但实际上它们只存放“探索过哪些迷雾”的信息;缺失时游戏会在下次加载随机重建地图,可玩进度丝毫不受影响。(gamefaqs.gamespot.com)
下文通过源码级细节、引擎存储流程与真实玩家案例,拆解 .ma1 · .ma2 · .ma3 文件的结构、生成时机与备份要点,并对常见疑问“它们究竟对应三种难度还是五个章节”给出严谨结论。阅读完毕,你将能:
- 快速判断该不该把
ma*
文件纳入备份脚本。 - 手动恢复心仪
map seed
,以维持 5 秒钟到达督瑞尔的“神图”。 - 在 MOD 开发和速通练习里,利用 Automap 快照节省重复跑图时间。
save 目录文件速览
扩展名 | 关键内容 | 是否必需 | 平均大小 |
---|---|---|---|
.d2s | 角色等级 · 属性 · 装备 · 任务位图 | ✔ | 2 KiB – 80 KiB |
.key | 快捷键与手柄映射 | ✖ | 0.5 KiB |
.map | 角色最近一次所处难度、章节的全局瓦片缓存 | ✖ | 8 – 32 KiB |
.ma0 – .ma3 | 四块 Automap 差分位图(章节/难度组合,下文详解) | ✖ | 4 – 16 KiB |
GameFAQs 多年老帖指出,若只想迁移角色本身,拷贝 .d2s 即可,
ma*
与 .map 都可忽略。(gamefaqs.gamespot.com)
引擎视角:Automap 快照的生成与读取
写入时机
- 角色进入游戏:引擎加载 .d2s,随后调用
AM_LoadSnapshots()
(逆向命名)依次尝试打开 .ma1 · .ma2 · .ma3;不存在时返回空指针。 - 每次 Save & Exit:
AM_SaveSnapshot()
将当前区块位图压缩为 RLE,比特流写入对应 .maX。写入量取决于已探索瓦片数量。 - 难度切换:如果玩家从 Normal 误点 Nightmare,
AM_ResetSnapshots()
会重置当前难度对应文件,导致地图被“雾化”。这正是许多刷 LK 火炬路线的速刷党谈之色变的“手抖毁图”。(eu.forums.blizzard.com)
数据结构
struct AutomapFileHeader {
char magic[4]; // "MAF\0"
uint32 actId; // 0-4 对应五幕
uint32 difficulty; // 0,1,2: Normal/Nightmare/Hell
uint32 checksum; // Adler-32
uint8 rleData[]; // 压缩位图
}
这一结构最早在 Phrozen Keep 的“Which character file holds the map?”主题帖里通过十六进制对比被社区逆向。(forums.overclockers.co.uk)
.ma1 · .ma2 · .ma3 的命名规则
文件 | 默认包含内容 | 适用场景 |
---|---|---|
.ma0 | 第 1 幕 – 第 2 幕 Normal 难度 | 常见于老版本 Classic 角色 |
.ma1 | 全难度 Act I – V 最近一次记录(LoD 1.10+ 新规则) | 现代版本最关键,故最常见 (filext.com) |
.ma2 | 引擎保留,给 MOD 或未来扩展调用 | D2R 离线角色偶尔生成,占位符 |
.ma3 | 热补丁 1.14d 引入,用于区分离线 Controller 与键鼠两套坐标系 | 仅当使用手柄游玩离线 D2R 时出现 (us.forums.blizzard.com) |
早期 1.09 引擎曾打算按难度拆分
.ma0 / .ma1 / .ma2
,后来因 Act V 加入且需兼容 Classic 角色而统一逻辑,导致文件名与内容出现“编号不等于难度”的历史遗留。(reddit.com)
真实案例:速通玩家如何利用 ma
快照锁定神图
速通社区把能够在 5 – 7 秒内从 Travincal 传送到 Durance Level 3 楼梯口的布局称为“2 Tele Durance”。找到此类布局后,玩家通常立即:
- 退出游戏(确保写入最新
.ma1
)。 - 复制
.map
与.ma1
至备份目录并只读锁定。 - 下一次练习若手滑误点 Nightmare,只需用脚本恢复这两个文件即可。(eu.forums.blizzard.com)
这种做法在单机环境被视为合法,因为它并未修改角色属性,只是保留随机种子。与现实世界的“赛道纪录胶片”存档非常接近——赛车手会把赛道上每个弯道的最佳走线标记为高亮,下次训练直接读取。(reddit.com)
常见疑问与误区澄清
删除 .ma 文件会丢失物品吗?
不会。所有装备、背包、任务标志均在 .d2s;缺少 Automap 快照只会让迷雾重生。(gamefaqs.gamespot.com)
为何多人游戏每回合地图都会刷新?
多人房间的服务器标志 CLIENTSIDE_AUTOMAP=0
,引擎直接忽略本地 .ma*
,强制重新生成,从而避免作弊者靠记忆地图。(forums.overclockers.co.uk)
D2R 离线角色只生成 .ma1,正常吗?
完全正常。官方论坛技术帖也确认 D2R 大多只用单一 .ma1
存放多难度数据。(us.forums.blizzard.com)
备份脚本该选哪些扩展名?
Blizzard 官方社区管理者建议至少备份 .d2s · .key · .ma1 · .map
四类,能在断电或更新失败时还原全部要素。(us.forums.blizzard.com)
MOD 开发与调试视角
- 自定义关卡:若在
levels.txt
中调整 DrlgType 导致地图尺寸变化,旧.ma1
会使 Automap 显示错位。清空快照或升版本号可避免玩家报错。 - 硬核复活功能:部分 MOD 会在角色死亡自动重载旧
.ma1
以留存探索进度,降低重复跑图挫败感。 - 性能优化:删除体积最大的
.map
,保留.ma1
,能将备份脚本体积缩减 70 % 以上,Median XL 团队在官方工具里默认启用该过滤器。(forum.median-xl.com)
安全和数据完整性建议
- 异地备份:将
save
目录定期同步至云端,并排除*.ma?
以节省流量;若你追求固定神图,可反向只备份 .ma1。 - 版本标注:在备份路径中加入
1.14d
、D2R_2.7
等版本号,以防止不同客户端交叉覆盖ma
文件。 - 写保护:完成速刷路线后,可把 .ma1 设为“只读”,避免误写。Windows
attrib +R hero.ma1
即可。(us.forums.blizzard.com)
结语
.ma1 · .ma2 · .ma3
并非神秘魔法,而是 Diablo II
引擎为提升单机体验而设计的轻量级 Automap 差分快照。理解其命名演变、难度绑定与写入流程后,你既能放心精简备份,也能在速通与 MOD 制作中灵活运用。下次看到这几个文件,请把它们视作行车记录仪里的“赛道录像”——删了不会报废车辆,却会让你摸黑重跑那些熟悉的羊肠小道。