Version Guard是WeMod开发的一项技术,可让您运行游戏的旧版本。 我们之所以创建它,是因为游戏更新与其相应的Mod更新之间总是存在停机时间。 这对于培训师来说尤其普遍-与游戏的一个或多个特定版本相关联的mod。
本文介绍了Version Guard的需求(有趣的需求),它们为什么存在以及我们如何解决它们。
要求:
- 它必须记录每次游戏更新。
- 游戏更新必须占用尽可能少的磁盘空间。
- 它必须能够适应游戏的安装,卸载,移动和文件编辑。
- 它绝不能创建,修改或删除游戏文件夹中的文件。
这些要求中的每一个都同样重要。
对于我们来说,最大的挑战是弄清楚什么是游戏更新以及何时发生。 在每个平台(Steam,Origin,GOG,Uplay等)上,游戏的更新方式都不同。我们早先决定,每个游戏都需要自己的更新检测逻辑。 由于95%的WeMod成员在Steam游戏中使用培训师,因此Version Guard的第一版仅支持该功能。
确定何时更新Steam应用程序或游戏确实很宽容。 每个应用程序都有版本保护可以从磁盘读取的更新状态标志。 通过检测这些标志的更改,Version Guard可以知道何时写入游戏进行更新,何时移动游戏以及何时安装或卸载游戏。
当Version Guard检测到Steam正在更新游戏时,它将创建所有已更改文件的备份。 这些文件以后用于重新创建游戏的先前版本。
游戏开发商似乎认为游戏玩家拥有无限的硬盘空间。 我们知道这是不对的,因此很遗憾,我们不得不降低磁盘使用率。
为了保持较低的磁盘使用率,可以将Version Guard配置为以以下三种格式之一存储旧游戏文件:未压缩,压缩或增量压缩。 根据用户的喜好和文件更新的类型,为每个游戏文件分配了其中一种存储格式。
增量压缩
增量压缩将产生最少的磁盘使用量,因为仅存储在旧游戏文件和新游戏文件之间已更改的字节。 这样可以将1GB的文件更新转换为1MB的压缩文件! 版本保护使用XDelta3执行此压缩。 但这并不总是可能的。 如果游戏更新创建或删除了文件,则没有第二个文件可用于执行差异比较。 在这些情况下,Version Guard会转而使用单文件压缩。
单文件压缩
当没有其他版本的文件执行增量比较时,将使用常规压缩。 Version Guard为此使用了经过验证的7-Zip。
无压缩
为了获得最佳性能,并且对于具有无限硬盘空间的游戏玩家,可以将Version Guard配置为禁用旧游戏文件的压缩。 当您想玩旧版本的游戏时,您不必等待这些文件被解压缩。 请注意那些ARK更新…
压缩设置可以根据游戏进行更改。 否则,Version Guard将使用可配置的默认游戏设置。
使用Steam的应用程序更新标志可以轻松检测到安装,卸载和移动。 文件编辑更令人讨厌。
对于经过增量压缩的旧游戏文件,Version Guard必须确保永远不要修改游戏文件夹中相应的当前游戏文件。 修改将使增量文件无效,从而使其无法还原原始游戏版本。
为此,我们使用名为CBFS Filter的第三方驱动程序,该驱动程序可以拦截和阻止文件操作,如删除,重命名和写入。 使用该驱动程序,Version Guard可以防止修改重建较旧版本游戏文件所需的文件。 同样,这仅适用于使用增量压缩存储的文件。
触摸游戏的文件夹是不满意的。 它很容易破解,很难跟踪,当替换或放错文件时,它会变得一团糟。 这对我们来说是一个有趣的挑战,因为我们不能只在另一个文件夹中重新创建游戏的旧版本。 Steam希望游戏可以放在一个地方–它是游戏安装到的文件夹。
相反,Version Guard创建了一个虚拟文件系统,其中包含旧游戏版本的所有文件和文件夹。 然后,它将游戏真实文件夹中的文件操作重定向到虚拟文件夹。 播放完旧版本后,将删除重定向,删除虚拟文件系统,一切立即恢复正常normal
这种方法带来的性能损失极小(在播放时我们不会注意到),并且它不使用任何额外的磁盘空间。
Version Guard是作为系统服务安装的,因此它可以加载必要的驱动程序,并确保始终保持游戏状态。
Version Guard作为可选Beta包含在Infinity中。 在应用程序中,您可以查看,播放和管理所有旧游戏版本👍