地图文件解剖
一张 .w3m / .w3x 地图,本质是一个加了 512 字节头的 MPQ 压缩档案包。用 MPQEditor 把它打开,就能看到地图的全部家当:地形、单位、触发、物编修改、导入素材,各占一个文件。本页逐个讲清这些文件(夹)的数据格式与内容作用。
工具:MPQEditor
Ladik's MPQ Editor(下称 MPQEditor)是经典的 MPQ 档案查看与编辑工具,免费、免安装。游戏本体在 1.30+ 已改用 CASC 存储资源(需用 Ladik's Casc Viewer),但地图文件至今仍是 MPQ 格式,所以拆地图不分新旧版本,一律用 MPQEditor。游戏本体的 CASC 分层结构与各数据文件格式,见姊妹篇 游戏文件解剖。
- 运行 MPQEditor,菜单
MPQ → Open File,选择任意一张地图(.w3m / .w3x 都可以)。 - 左侧列表即是包内全部文件,双击可直接查看(文本类文件会以纯文本打开),右键
Extract可导出单个文件或整个目录。 - 改动后用
MPQ → Compact / Save回写保存。动手前务必备份原地图。
战役文件 .w3n 同样是 MPQ 包,内含多张地图,也可以用同样方式打开。
地图头部(头 512 字节)
MPQ 数据之前有一个 512 字节的固定头部,游戏靠它识别文件类型:
- 4 字节魔数:
HM3W(.w3m,冰封王座之前)或倒写的SIGN(.w3x,冰封王座起,紧跟 256 字节数字签名)。 - 其后依次是:地图名称、地图标志位(是否对战图、是否自定义科技 / 技能 / 升级、是否迷雾部分可见等)、最大玩家数,剩余补零。
用十六进制编辑器打开地图,开头就能看到这些信息;而 MPQEditor 只展示 MPQ 部分,不显示这段头。
MPQ 系统文件
任何 MPQ 包内都有三个以括号命名的内部文件,它们不是地图数据,而是档案自身的管理信息:
| 文件 | 作用 |
|---|---|
| (listfile) | 包内全部文件路径的清单。加密地图常删掉它,此时 MPQEditor 里看不到文件名,但文件其实还在。 |
| (attributes) | 各文件的校验值与时间戳,用于完整性校验。 |
| (signature) | 地图的数字签名(.w3x 由头部 SIGN 区引用)。 |
文件速查表
| 文件 | 对应编辑器面板 | 内容 |
|---|---|---|
| war3map.w3i | 地图属性 | 地图基本信息总表 |
| war3map.w3e | 地形面板 | 地形格点数据 |
| war3map.shd | — | 地形阴影图 |
| war3map.wpm | — | 路径贴图(通行 / 建造判定) |
| war3map.mmp | — | 小地图标记 |
| war3mapUnits.doo | 单位面板摆放 | 预置单位与物品 |
| war3map.doo | 装饰物面板摆放 | 装饰物 / 可破坏物摆放 |
| war3map.w3u / w3t / w3b / w3d / w3a / w3h / w3q | 物体编辑器七个子面板 | 单位 / 物品 / 可破坏物 / 装饰物 / 技能 / 特效(增益) / 升级 的自定义数据 |
| war3map.wtg | 触发编辑器 | 触发器完整数据(类别 / 变量 / ECA) |
| war3map.wct | 触发编辑器 | 自定义 JASS 文本触发 |
| war3map.wts | — | 字符串表(地图内所有引用文本) |
| war3map.j 或 war3map.lua | — | 编译后的地图脚本(游戏真正执行的东西) |
| war3map.w3r / w3c / w3s | 区域 / 镜头 / 声音面板 | 区域 / 镜头 / 声音定义 |
| war3map.imp | 导入管理器 | 导入文件清单 |
| war3mapSkin.txt / Misc.txt / Extra.txt | 界面 / 高级 / 杂项 | 界面自定义、平衡常数、杂项设置 |
| war3mapMap.blp / .tga | — | 游戏中显示的小地图图像 |
| war3mapPreview.tga / .blp | — | 创建游戏界面右侧的地图预览图 |
逐项详解
war3map.w3i —— 地图基本信息
地图的「户口本」:地图名、作者、描述、推荐玩家数、加载画面、游戏模式与语音设置、玩家与势力配置、可用种族、科技树限制等。触发里用到的全部自定义文本也登记在它的字符串引用表中。物编与触发里凡出现 TRIGSTR_xxx 占位符,实际文本都存放在 war3map.wts。整张地图的玩家、联盟、胜利条件初始设定都由它确定。
war3map.w3e —— 地形数据
环境 / 地形文件,以 W3E! 魔数开头,记录地形主题(如洛丹伦夏天、艾泽拉斯)与使用的地面、悬崖贴图 ID 表。主体是逐格点的地形格数据:一张 N×N 格的地图有 (N+1)×(N+1) 个格点,每个格点固定 8 字节,包含高度、水面高度、标志位(斜坡、变黑、盲区等)、地面贴图、贴图细节与悬崖贴图。改高度图、批量换贴图等「外科手术」,改的都是这个文件。
war3map.shd / wpm / mmp —— 三张辅助图
- war3map.shd:阴影位图。按地形网格分块的单字节位图,每一位记录一小块地面是否处于阴影中,对应装饰物、悬崖投下的静态阴影。
- war3map.wpm:路径贴图。与地形同尺寸的网格,逐格标记可通行、可建造、不可见等属性,是寻路与建造判定的依据。
- war3map.mmp:小地图标记。记录小地图上显示的矩形标记(如中立建筑图标、不可见区域),含坐标与镜头 / 边界标志。
war3mapUnits.doo 与 war3map.doo —— 摆放数据
两个文件名字相近,分工明确:
- war3mapUnits.doo:单位面板里摆上去的所有预置单位与物品——类型 ID、位置、朝向、缩放、所属玩家、生命 / 魔法值、掉落物表、金币木材等,全部逐条记录。
- war3map.doo:装饰物面板的摆放数据——装饰物与可破坏物的类型、位置、变体、生命值,以及地图上放置的特效。
游戏开局后,这两份「摆放清单」会被编译进地图脚本逐条创建;所以删除它们后地图仍能玩(脚本里的单位还在),但用编辑器再打开就「空了」。
war3map.w3u / w3t / w3b / w3d / w3a / w3h / w3q —— 物编七件套
物体编辑器七个面板的数据各存一个文件,格式完全统一:文件头(版本 + 条目数)之后,每条记录为「原始 ID + 新 ID + 修改项列表」,修改项再细分为「属性 ID + 类型(整数 / 实数 / 布尔 / 字符串……)+ 值」。只改了一项属性,记录里就只有那一项,其余全部继承原版数据:
| 文件 | 面板 | 内容 |
|---|---|---|
| war3map.w3u | 单位 | 自定义单位与单位修改 |
| war3map.w3t | 物品 | 自定义物品与物品修改 |
| war3map.w3b | 可破坏物 | 自定义可破坏物(树、金矿、箱子等) |
| war3map.w3d | 装饰物 | 自定义装饰物 |
| war3map.w3a | 技能 | 自定义技能与技能修改 |
| war3map.w3h | 特效(增益) | 自定义魔法效果与增益 |
| war3map.w3q | 升级 | 自定义科技升级 |
在物体编辑器里「导出物体数据」得到的 .w3o 文件,就是这七个文件按固定顺序拼在一起的合集,可以整包再导入另一张地图。
war3map.wtg / wct / wts —— 触发与文本
- war3map.wtg:触发编辑器的完整原始数据——触发类别、全局变量,以及每个触发的注释、开关状态和事件 / 条件 / 动作(ECA)列表。1.31 起重制版编辑器改用了新版 wtg 格式,但内容结构一致。
- war3map.wct:触发编辑器里的自定义 JASS 文本区(地图头代码与各触发的自定义脚本段)。
- war3map.wts:字符串表,纯文本,UTF-8 编码。物编、触发里所有
TRIGSTR_xxx占位符对应的实际文本都在这里,一条一段。给地图汉化,改的主要就是它——本站汉化词条表核对名词时用的也是同一套机制。
wtg / wct 只是给编辑器「看」的原始工程数据;游戏运行时并不读它们。删掉后地图照常运行,但再用编辑器打开会丢失全部触发工程。
war3map.j / war3map.lua —— 地图脚本
保存地图时,编辑器把触发的图形化数据、区域、镜头等编译成一个可执行脚本,这才是游戏真正运行的东西:JASS 地图是 war3map.j(纯文本,可在根目录,也常被挪到 Scripts\war3map.j);1.31 起新建地图可选 Lua,对应 war3map.lua。游戏读取地图后先执行 config 函数配置玩家槽位,再执行 main 函数开始一局游戏。改图进阶操作(反加密、定制逻辑)大多落在这个文件上。
war3map.w3r / w3c / w3s —— 区域、镜头、声音
- war3map.w3r:区域面板定义的矩形区域——坐标、名称、天气效果、环境音效、是否作为变量导出等。
- war3map.w3c:镜头面板定义的镜头——目标点、旋转角、攻击角、视距与各类距离 / 视野参数。
- war3map.w3s:声音面板定义的声音——引用的音效路径、音量、衰减距离等。
这三个面板的数据同样会被编译进地图脚本,属「编辑器原始数据」,删了不影响已编译地图运行。
war3map.imp 与导入素材
war3map.imp 是导入管理器的清单:记录每个导入文件在包内的完整路径与标志位。模型、贴图、图标、音效等素材本体则散落在包内各文件夹中(见下节)。路径必须与模型内部引用的路径一致,贴图才能被正确找到——这也是改图常见「贴图丢失」问题的根源。
war3mapSkin.txt / Misc.txt / Extra.txt —— 三个设置文件
- war3mapSkin.txt:界面自定义。替换游戏界面元素(计分板、资源图标、按钮框等)、自定义界面提示文本。
- war3mapMisc.txt:平衡常数。英雄最高等级、经验获得系数、英雄复活时间等全局数值规则。
- war3mapExtra.txt:杂项设置,如地图使用的游戏数据集(冰封王座 / 重制版)与编辑器版本信息。
war3mapMap.blp / war3mapPreview.tga —— 两张图片
- war3mapMap.blp(旧图亦见 .tga / .b00):游戏中显示的小地图图像。
- war3mapPreview.tga(重制版亦见 .blp):创建游戏界面右侧的地图预览图,在地图属性里设置。
常见的文件夹
地图包里除上述数据文件外,其余基本是导入的素材,按用途落在这些目录:
- war3mapImported\:在导入管理器里不手动改路径时,新导入文件的默认落点。
- ReplaceableTextures\:游戏约定的贴图目录,最常用的是
ReplaceableTextures\CommandButtons\(亮图标 BTN)与CommandButtonsDisabled\(暗图标 DISBTN)。 - Sound\、Music\:导入的音效与音乐。
- Scripts\:存放编译脚本(如被挪进来的
Scripts\war3map.j)。 - Units\:slk 拆分型地图的标志——物编数据被拆成一堆 .slk / .txt 表格放在这里(如 Unit.slk、Ability.slk),用于精简 / 加密地图数据。
看懂文件列表,就能看懂加密
社区所谓「加密地图」,多数只是在 MPQ 层面做手脚。对照上面的速查表,一眼就能认出常见手法:
- 删 (listfile):MPQEditor 里文件名不可见,需靠特征恢复或暴力列名。
- 删 war3map.wtg / wct:触发工程被抹掉,地图能玩但无法还原原始触发——这也是加密最不可逆的一刀。
- 把 war3map.j 挪到 Scripts\ 或改名:藏起核心脚本。
- slk 拆分:物编数据整体搬进 Units\ 下的 slk 表,原 w3u / w3a 等文件消失。
本页只讲文件结构,用于学习与研究。请尊重地图作者:未经许可不要修改、传播他人地图。