把 Deadlock 的 Mod 管理做成了一个桌面应用
Deadlock 的 mod 到现在还是要手动往游戏目录里塞 pak 文件。删的时候得记住自己塞了哪些,装多了之后目录里一堆 pak01_xxx.vpk,谁也分不清哪个是原版哪个是 mod。这事手动做一次还行,做十次就该写工具了。
于是我做了 Deadlock Mod Manager:一个 Electron 桌面应用,能列出已装的 mod、按需启用禁用、一键还原原版文件。装机版 72MB,NSIS 打的。
为什么是 Electron
因为是给我自己和几个朋友用的,不是要评奖。Electron 的代价我清楚:一个空壳应用光运行时就要 150MB 内存,安装包随随便便几十兆。但换来的是我可以用 HTML 写界面,用前端那套东西做列表、拖拽、状态提示,一天就能出一个能用的版本。
用 C# 或者 Rust 写会更小更快,但界面部分要多花一周,而我一周能写完整个功能。这个取舍在个人项目里没什么好犹豫的。
真正难的部分不是界面
是做任何写操作之前,先搞清楚游戏目录现在是什么状态。几个具体问题:
- 游戏更新会覆盖或删除 mod 文件,本地记录和实际情况会对不上——所以启动时必须重新扫描目录,不能信任缓存。
- 原版文件必须先备份,而且备份要带版本号,否则游戏大版本更新后拿旧文件还原会把游戏搞坏。
- 文件读写要处理占用。游戏开着的时候去动它的包文件,轻则失败,重则文件损坏。所以启动前检查进程,发现游戏在跑就直接拦住。
- 路径里可能带中文和空格,所有路径拼接都得走正规 API,不能手拼字符串。
这几条写完,代码量比界面多两倍。
打包踩的坑
NSIS 本身不难,坑在于「装完之后用户从哪启动」。第一版装完只有桌面快捷方式,开始菜单里搜不到;第二版加了注册表项,又出现卸载后残留。最后是照着一个成熟项目的 NSIS 脚本改的,把安装路径、卸载信息、文件关联一次写全。
还有个细节:72MB 的安装包里有大半是 Electron 运行时的重复文件,但我没去做 ASAR 压缩和裁剪——为了省 20MB 引入构建复杂度,不值。
现在怎么样
能用,自己天天在用。下一步想加的是 mod 冲突检测:两个 mod 改同一个文件时,现在的实现是后装的覆盖前面的,界面上不提示。这个得先想清楚判定逻辑,不能拍脑袋做。
代码在本地,暂时没开源。等我把上面那个功能做完再考虑放出来。