← 返回主页

地图文件解剖

一张 .w3m / .w3x 地图,本质是一个加了 512 字节头的 MPQ 压缩档案包。用 MPQEditor 把它打开,就能看到地图的全部家当:地形、单位、触发、物编修改、导入素材,各占一个文件。本页逐个讲清这些文件(夹)的数据格式与内容作用。

工具:MPQEditor

Ladik's MPQ Editor(下称 MPQEditor)是经典的 MPQ 档案查看与编辑工具,免费、免安装。游戏本体在 1.30+ 已改用 CASC 存储资源(需用 Ladik's Casc Viewer),但地图文件至今仍是 MPQ 格式,所以拆地图不分新旧版本,一律用 MPQEditor。游戏本体的 CASC 分层结构与各数据文件格式,见姊妹篇 游戏文件解剖。

  1. 运行 MPQEditor,菜单 MPQ → Open File,选择任意一张地图(.w3m / .w3x 都可以)。
  2. 左侧列表即是包内全部文件,双击可直接查看(文本类文件会以纯文本打开),右键 Extract 可导出单个文件或整个目录。
  3. 改动后用 MPQ → Compact / Save 回写保存。动手前务必备份原地图。

战役文件 .w3n 同样是 MPQ 包,内含多张地图,也可以用同样方式打开。

地图头部(头 512 字节)

MPQ 数据之前有一个 512 字节的固定头部,游戏靠它识别文件类型:

用十六进制编辑器打开地图,开头就能看到这些信息;而 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 —— 三张辅助图

war3mapUnits.doo 与 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 —— 触发与文本

wtg / wct 只是给编辑器「看」的原始工程数据;游戏运行时并不读它们。删掉后地图照常运行,但再用编辑器打开会丢失全部触发工程。

war3map.j / war3map.lua —— 地图脚本

保存地图时,编辑器把触发的图形化数据、区域、镜头等编译成一个可执行脚本,这才是游戏真正运行的东西:JASS 地图是 war3map.j(纯文本,可在根目录,也常被挪到 Scripts\war3map.j);1.31 起新建地图可选 Lua,对应 war3map.lua。游戏读取地图后先执行 config 函数配置玩家槽位,再执行 main 函数开始一局游戏。改图进阶操作(反加密、定制逻辑)大多落在这个文件上。

war3map.w3r / w3c / w3s —— 区域、镜头、声音

这三个面板的数据同样会被编译进地图脚本,属「编辑器原始数据」,删了不影响已编译地图运行。

war3map.imp 与导入素材

war3map.imp 是导入管理器的清单:记录每个导入文件在包内的完整路径与标志位。模型、贴图、图标、音效等素材本体则散落在包内各文件夹中(见下节)。路径必须与模型内部引用的路径一致,贴图才能被正确找到——这也是改图常见「贴图丢失」问题的根源。

war3mapSkin.txt / Misc.txt / Extra.txt —— 三个设置文件

war3mapMap.blp / war3mapPreview.tga —— 两张图片

常见的文件夹

地图包里除上述数据文件外,其余基本是导入的素材,按用途落在这些目录:

看懂文件列表,就能看懂加密

社区所谓「加密地图」,多数只是在 MPQ 层面做手脚。对照上面的速查表,一眼就能认出常见手法:

本页只讲文件结构,用于学习与研究。请尊重地图作者:未经许可不要修改、传播他人地图。