CCM 压缩包标准
CCM 用 metadata.txt 描述战役的键值格式、目录布局与安装落点,以及星际枢纽读取这类包时的处理方式。
最后更新 2026年11月1日
新作品推荐按星际枢纽标准打包。 CCM 格式在这里只作兼容旧作的说明:星际枢纽能识别、能安装,但它表达不了类型、启动器地图、封面与文档,安装位置只能从
title 反推。改按星际枢纽压缩包标准打包,清单是明确的 JSON,字段与落点一一对应;已经用 CCM 发过的旧作不必重做。CCM(SC2 Campaign Manager)是《星际争霸II》战役包的另一套管理工具,它用一份 metadata.txt 描述作品,把战役放在游戏的 Maps/CustomCampaigns 目录下。星际枢纽的导入与扫描都能读这种包,按 CCM 的约定安装,因此同一份作品可以同时给两种工具使用。
本页说明 CCM 侧的约定,以及星际枢纽读取时补上的判定。
metadata.txt 的格式
文件内容是一行一个 键=值,键名固定为小写:
title=远征军之遗
desc=三章的单人战役,含自定义模组
author=示例作者
version=1.2.0
campaign=WOL
| 键 | 必填 | 说明 |
|---|---|---|
title | 是 | 作品名称,同时决定安装目录名 |
desc | 否 | 作品简介,缺省为空 |
author | 否 | 作者署名,缺省为空 |
version | 否 | 版本号,缺省为空 |
campaign | 是 | WOL、HOTS、LOTV、NCO 之一 |
解析规则:
- 逐行读取,每行以第一个
=分隔键与值,两侧空白会被去掉;所以值里可以再出现=(desc=x=y读到的简介是x=y)。 - 键区分大小写,必须写成小写;不认识的键会被忽略,不会报错。
- 文件按 UTF-8 解码,允许带 BOM;不是合法 UTF-8 时按 GB18030 再解一次,早年用 GBK 保存的包也能读。两种都解不出来时按清单损坏处理。
- 文件名是
metadata.txt(大小写不敏感),单个文件不超过 1 MiB,且不能放在.SC2Map/.SC2Mod组件目录里面。 campaign缺失或不在四个值里,整个包判为无效——CCM 格式只描述战役,没有别的类型。
目录布局
远征军之遗.zip
├─ metadata.txt
├─ Campaign.SC2Map # 入口地图
├─ Mission01.SC2Map
├─ Mission02.SC2Map
├─ evolution/ # 虫群之心专用
│ └─ Evolution01.SC2Map
└─ Mods/
└─ Retribution.SC2Mod
metadata.txt与地图文件同级,放在压缩包根目录。- 地图直接摆在根部,不要再套一层
Maps/;模组放在Mods/里。 - 与星际枢纽标准一样,压缩包外再套一层文件夹是可以的,应用会向下找到唯一一组文件;出现两套同级内容时无法判断,会判为不支持。
落点怎么算
打包时不用写 maps、mods 清单,落点由文件名和 campaign 推导:
| 包内位置 | 目标 |
|---|---|
根部的 X.SC2Map | 该战役的地图区域:WOL → Maps/Campaign/,HOTS → Maps/Campaign/swarm/,LOTV → Maps/Campaign/void/,NCO → Maps/Campaign/nova/ |
HOTS 包里的 evolution/X.SC2Map | Maps/Campaign/swarm/evolution/ |
LOTV 包里的 voidprologue/X.SC2Map | Maps/Campaign/voidprologue/ |
根部的 X.SC2Mod | Mods/,包内路径原样保留 |
Mods/ 下的 .SC2Mod | Mods/ 下同样位置 |
- 组件形式的地图或模组(以
.SC2Map、.SC2Mod结尾的目录)按整个目录处理,内部文件不逐个判断。 - 写在别的子目录里的地图不会被规划到任何位置,例如
Campaign/Level1.SC2Map;想让地图生效,就摆在根部或上面列出的战役子目录里。 - 目标是按扩展名和文件名认的,改文件名等于改落点,所以重命名地图前要确认战役里的引用。
安装后放在哪
星际枢纽不按上一节的规划把地图写进 Maps/Campaign,而是按 CCM 自己的约定安装:
- 整个包解压到CCM 管理目录下与
title同名的子目录里,包内相对路径保持不变。默认位置是<游戏目录>/Maps/CustomCampaigns,可以在「设置」里改。 - 其中的模组会另外复制到游戏
Mods/,因为游戏按路径加载模组,留在管理目录里没用。 - 因此 CCM 包不会覆盖官方战役的地图文件;卸载或取消激活时只清理管理目录,已经复制进
Mods/的模组不会被删除,也不会恢复被它替换过的同名模组。导入时界面会明确提示这一点:「CCM 导入时即安装 Mods,后续取消激活和卸载不会删除或恢复这些 Mods。」 - 已经存在于 CCM 管理目录里的作品,扫描时会被重新识别并出现在战役管理里;目录里只要有一份
metadata.txt就够。
目录名由 title 生成
管理目录下的子目录名不是原样复制 title,而是先清洗成能跨平台使用的名字:
| 处理 | 说明 |
|---|---|
去掉 <>:"/|?* 与控制字符 | 这些字符在文件名里不安全 |
去掉首尾空白,空白替换为 _ | 远征军之遗 改 → 远征军之遗_改 |
| 去掉结尾的点 | Windows 不允许目录名以点结尾 |
| 拒绝保留名 | con、prn、aux、nul、com1–com9、lpt1–lpt9 不能作为目录名 |
| 长度上限 | 255 字节(UTF-8)以内 |
名字洗成空串、撞上保留名或超过长度上限时,导入会失败并提示标题无法组成可用的目录名——换一个 title 再试。同一目录已存在同名子目录时,按「已安装」处理,需要先卸载或改名。
星际枢纽怎么识别这类包
导入或扫描时,客户端按下面的顺序找描述文件:
- 找到
package.json与metadata.txt中最外层的那一份。同一层里出现多份描述文件无法判断用哪个,判为不支持。 - 两份都在且作品类型不同时,会让你选择按哪一种安装;类型相同则优先用
package.json。 - 只有
metadata.txt时按 CCM 包处理,类型固定为战役。 - 两份都没有时,看包内有没有
Maps/Campaign目录:有按战役处理,没有按自制作品处理。
与星际枢纽标准的差别
| 项目 | 星际枢纽压缩包标准 | CCM 压缩包标准 |
|---|---|---|
| 清单文件 | package.json(JSON) | metadata.txt(键值对) |
| 能描述的作品 | 战役、自制作品、共享模组包 | 只有战役 |
| 安装位置 | 由清单逐项声明 | 按约定推导,落在 CCM 管理目录 |
| 版本校验 | 结构校验 + 发布时语义化版本检查 | 只当作文本,不做版本比较 |
| 多语言、图片、说明文档 | 支持 | 不支持 |
| 编辑器提示与 Schema | 有 | 无 |
需要多语言条目、封面图、说明文档或依赖包时,用星际枢纽标准;只是把已有的 CCM 作品交给玩家,保持原样即可。
自检清单
metadata.txt与地图同级,键名全小写,campaign是四个值之一。- 文件用 UTF-8 保存;从旧工具导出的 GBK 文件也能读,但新作品不要再依赖这一点。
- 地图摆在根部(或
evolution/、voidprologue/),模组放在Mods/。 title里没有路径分隔符之类的字符,也不会撞上保留名。- 导入后核对规划出来的目标文件,再进游戏确认章节能正常加载。
