背景
当你给游戏打了许多mod,游玩的常态是玩游戏五分钟,调 mod 两小时。而当游戏更新或mod更新后,辛苦完成的排序工作又要推倒重来。更雪上加霜的是steam创意工坊强制更新到最新版本,隔一段时间打开游戏发现冲突,想要回退到可玩的版本都不行,即使游戏的版本可以回退,已更新的mod和未更新的mod无论游戏版本新旧都会冲突。
部分游戏的mod管理器,例如P社游戏的 IronyModManager,可以导出一个可玩的mod合集文件,当游戏更新发生冲突后只需回退游戏版本就可游玩。但这种方式有很多弊端:
- 导出的合集文件需要手动管理
- 不同合集中相同的mod文件会重复占用体积,对于许多mod比本体大的游戏占用的磁盘空间不能忽略
- 想要部分升级或修改合集中的mod较为困难
设想解决方案
我设想了一种创意工坊的版本管理方式,包含创意工坊版本控制和modlist维护两大功能
版本控制
监测创意工坊文件夹发生变更,复制出变动的 mod 文件夹并记录更新时间。更新时间不知道有没有API提供,没有的话可以写个爬虫从网页获取。在支持cow的文件系统中,这样应该不会占用太多额外空间(NTFS不支持,Windows或许可以用第三方的Btrfs)。一段时间后,自动删除不存在于任何 modlist 中的 mod 版本。
还想到另一种方式,定期调用 steam-cli 下载并更新 mod,这样可以将版本控制完全集成,可以替代创意工坊的订阅功能。
modlist 维护
前提条件是游戏的 mod 管理器支持导入和导出 modlist,设想的维护功能有以下几点:
- 记录并备份当前可玩的 modlist 中的 mod 版本以及当前的游戏版本
- 导出包含版本的 modlist
- 一段时间后自动删除不包含在任何 modlist 中的 mod 版本
- 一些对模组管理器的增强功能
- 修改 modlist,例如更新或回退 mod 版本,增添或删除 mod
- modlist 之间的互相引用
- 记录 mod 依赖关系
- 记录 mod 分类以方便排序
- 设置排序规则检测 modlist 是否满足
- 检测 modlist 中的过期mod
程序编写
modlist 导入和导出需要对特定游戏进行适配,最开始打算做的是P社的几款游戏,后续可能加上文明6。
计划用 python 写一个 cli 程序,命令仿照着包管理器来。毕竟应该没什么性能需求而且我也只会 python。最近在学着用 nix,不知道 nix 能不能实现上面的功能。
完全没有开发经验,各位有什么意见或建议十分欢迎,以我个人的拖延症有成果之日怕是遥遥无期。