目录
2010 年暑假,我在托管班第一次看见《魔兽争霸 3》。同学在玩 Boom 海战,我在旁边看了一下午。
接下来三年的寒暑假基本都搭在这个游戏上。那时候联机平台上的 RPG 图多到看不完,我的地图文件夹一路膨胀。那段时间很是着迷, 不仅是玩游戏, 我还去学习了地图编辑器,摸清了一点 .w3x 内部是怎么组织的, 掌握了光环效果的应用和技能脚本。
再后来玩得少了,偶尔和高中同学开一局自定义英雄世界、疯狂六角星,来回也就那几张图。这几年我发现,对战平台一轮轮的开了关, 关了开。当年天天玩的地图基本都消失了, 已有的平台也基本限制了游戏内交换地图, 同时充斥着大量的雷霆氪金图。 于是当初想做没做成的那件事又冒出来——搜集经典老图, 给它们建个档案馆(特别感谢B站up关先生)。
技术上的起点比这个念头早两年。2024 年 7 月,我想知道一张 .w3x 里到底存了什么。
游戏里显示的地图名、作者、推荐人数,还有加载界面预览图,肯定都写在文件里某个位置。我用 Rust 开了个坑叫 war3parser,写了一个月,能把地图里的文件掏出来、读出基本信息,然后就放下了。2025 年 1 月捡起来改过一轮,接着又是一年半没动。今年 7 月才把核心重写完。
解析这一半
代码在 war3parser,想直接试的话开 浏览器版 拖张图进去就行。
魔兽地图的信息文件叫 w3i,带版本号,早期 RoC 测试版是 v8,WC3 2.0 已经到 v33。二十年里字段一层层往后加,没有官方文档,社区靠逆向拼出来的表也各有出入。
版本多其实还好,照着抄就行。难的是老地图的破损方式:有的被保护过,文件头整个抹掉;有的可选段落从中间截断,读到一半没了。还有的连文件清单都不带,你根本不知道里面装了什么。解析器要做的是尽量读出还能读的部分,而不是碰到不认识的字节就退出。
顺手编了一份 WASM,做了个网页,地图拖进浏览器就能看,文件不上传。写到这儿我以为项目就完了。
硬盘上那 84 GB
归档用的命令和脚本都在 war3-manager,从 war3parser fork 出来的。
让它继续下去的是我攒的那堆压缩包。
从各种网盘拖下来的地图包,17 个栏目,一万多个源文件,压缩包套压缩包。文件名前面挂着各种前缀和小广告,同一张图在三个栏目里各存一份。这东西放在硬盘上除了占空间没别的用处,想找某张图还得靠 Finder 搜索加运气。
我给 CLI 加了个命令,做的事说起来挺笨:把压缩包递归扫一遍,按内容算哈希去重,能解析的读出信息,顺手把封面抠出来,再把地图名里残留的颜色代码和没替换掉的占位符清干净。
跑完剩下 10365 条。9218 张信息完整,858 张元数据读不出来但文件本身没问题,289 个战役包目前只能按文件名搜。
整个过程里最耗时间的其实不是解析,是判断两个文件到底算不算同一张图,以及收拾那些脏名字。
数据里有点意思的东西
下面这些栏目在 站点首页 上都能直接看到。
分类最大的一栏叫"未分类",5121 张,占了一半。还有一栏我原样保留着,叫"(官方平台报错地图)",244 张。这是当年整理的人自己写的分类名,我没动,改了反而丢信息。
DotA 有 190 个版本,守卫剑阁 151 个,澄海 86 个。同一张图的不同版本各算一条,它们内容哈希不同,本来就是不同的文件。翻到这一栏的时候我愣了一下:这些版本号我当年是一个个跟着更新过来的,现在它们并排躺在一个 JSON 里。
文件放哪儿
地图文件在 Hugging Face 数据集,网站代码在 war3-maps。
目前地图都在 Hugging Face 作为一个 Dataset 托管, 尽管我不认为未来会用它们有人训练 AI 模型, 但谁也不知道未来 AI 会发展成什么样子。
关于保存
这些地图大多是 2005 到 2012 年做的。作者 ID 写在简介栏里,联系方式早就失效了。网盘链接一过期,或者哪台机器报废,图就没了,也没人会收到通知。
每张地图的授权状态我没法一一确认,能做的是把内容指纹和来源路径留着,有人来说要下架就下架。
我不太确定这件事到底有多大意义,可能真没人会再去下 2007 年的某张塔防图。不过至少我自己找图的时候,不用再翻网盘了。
评论