在steam中,我们常常发现自己下载的游戏是学习版,通常来说就是不完整的,也就是正版受害者,这样的情况下我们就需要一些小小的方法帮助我们实现完全体。
本期配套视频教程:https://www.bilibili.com/video/BV1tK411D7zA/
在最开始简单概括一下实现的功能和所做的事情
特性:
- 通过Steam作为启动器打开和管理本地游戏(包括在Steam库中但是使用本地文件替换游玩,也就是正版受害者的游戏,以及不在库中的纯本地游戏)
- 使不支持Steam云存档的游戏(如上述手动添加的游戏)拥有和Steam云存档相同的体验
实现:
- 替换Steam库中游戏的本地文件内容,自定义启动选项(以《魔女的夜宴》为例)
- 通过Steam添加本地游戏,并自定义头图和封面
- 通过同步盘和软链接将游戏的存档目录进行自动同步
如果看到这里你已经完全Get到我们要做的事情,那么恭喜你就可以不用看了,核心就是软链接配合同步盘。如果你还有不明白的地方,那么下面有详细的操作步骤和我个人的一些理解,比较详细。因为我喜欢将事情讲透,至少是我知道的部分,所以有点啰嗦,也是传统了,自己看着跳过吧。
1/ 优缺点说在前
优点:
- 当你有多台电脑时,可以实现多地存档共通,打开能继续玩
- 本身只有本地功能的游戏实现存档备份(适用于Galgame、DLSiteGame、PSP、PS3、Switch模拟器等等)
- 不仅仅适用于游戏,还适用于软件配置项,比如IDE的配置、文本编辑器的偏好等(不过对于密钥对等文件谨慎处理)
缺点:
- 全部存档同步,不能只限定于某款游戏(除非你的同步盘支持设置,不过文件没有变化也不会同步)
- 文件发生变化后就会触发同步,而不是游戏结束后一次同步,会有资源浪费——解决办法,可以定期开启同步
2/ 背景
为什么要做这个事情,简单讲一下我的出发点。首先就是我希望游戏启动能够有一个统一的入口,而不是需要我一个个目录去点,或者创建很多快捷方式。并且Steam更新后,库中可以自定义封面,对于很多小游戏来说很不错,看着好看(比如某网站买的那些像素游戏)。
还有就是小时候玩过的一些GalGame,现在补票了想重温,但是正版不一定有官方中文,所以自己还要打补丁,也就是正版游戏的受害者(老滚5退出群聊)。
好在Steam提供的自定义启动参数和添加本地游戏功能可以帮助我们解决问题。然后再使用同步盘和软链接,就能够实现Steam打开可以看到我所有想玩的游戏,而且即使我往返于出租屋和家,使用多台电脑,都可以继续之前的进度。
3/ Steam库中游戏打补丁
我们玩的游戏经常需要打汉化补丁、MOD、不可明说补丁等等。这里分两种情况:
第一种,类似Mod,大家直接将文件放入游戏文件夹,不影响Steam游戏的正常启动、成就获得、Steam云存档等。
举个栗子,公主殿下冷饭年度皇家版ProPlus,一些游戏的汉化补丁也类似:
第一种就不说了,没什么需要注意的。第二种,就是打了补丁以后,可执行文件变了,游戏无法从Steam库中直接启动,手动启动后也无法获取Steam成就,也无法通过Steam云进行存档。
这里的三个问题,我们可以解决1和3,第二点就比较困难了。因为成就的获得必定耦合在程序的各个流程中,无法简单修改。以《魔女的夜宴》为例说明下如何解决剩下两个问题,这样至少还有游戏时间等一些统计信息。
(话外音:本来以为《魔女的夜宴》上了Steam马上就会有官中,结果这么久了都没有,作为正版受害者只能自己搞了。)
首先将可以启动的本地游戏内容全部拷贝到Steam版本的安装目录中,进行覆盖。我这里习惯使用差异比较工具,大家ctrl+c和ctrl+v是一样的效果,这样就是替换游戏资源内容,但是保留了Steam的接口文件(其实这个例子中留不留已经无所谓了,其他情况大家酌情)。
覆盖完成后,Steam点击"开始游戏"是无法启动的,因为正常汉化版是通过"魔女的夜宴.exe"这个程序启动的。这里我们将她改个英文名,比如"Launcher.exe"(虽然这里用中文名也可以,但很多时候,别用中文路径可以解决许多奇怪问题)。
接下来,找到Steam中对应游戏,右键->属性,在启动选项中,输入我们上一步Launcher.exe的绝对路径加上" %command%"
如:"H:\SteamLibrary\steamapps\common\Sabbat of the Witch\Launcher.exe" %command%
%command%参数的作用,简单讲就是让我们的可执行文件在前面先执行,否则就会作为参数拼接在后面。有兴趣扩展可以看wiki:
https://wiki.archlinux.org/title/Steam
设置完成后点击"开始游戏"就可以正常运行了,问题1解决。Steam云存档我们放到后面一起说,接下来是添加本地游戏内容。
4/ 添加本地非Steam游戏到库中
Steam本身就支持此功能,只要在最下方 添加游戏->添加非Steam游戏 浏览找到exe可执行程序即可。
添加完之后就可以运行了。
顺便说一下,自定义图片的位置就在Steam用户文件夹下:...\Steam\userdata\<user id>\config\grid
不满意可以自己修改,命名规则就是
<游戏_id>.png
<游戏_id>p.png
<游戏_id>_logo.png
5/ 通过同步盘和软链接将游戏的存档目录进行自动同步
同步盘现在也比较多了,我在上大学的时候还做过一期使用坚果云和OneNote实现云同步笔记的视频:https://www.bilibili.com/video/BV14x411W7f4
(跑个题,现在也没再使用这个方法了,主要是因为工作以后跨平台需求比较高,所以现在改用Notion了)
我用过的同步盘只有坚果云和百度云,现在百度云也支持了,考虑到用户量,这次就以百度云作为栗子。
这里不比较不同同步盘的价格差异,但是从我目前看,如果你只是为了同步游戏存档,那么大多数的免费个人套餐都足够使用了。
之后我们来到设置的同步文件夹,新建一个我们想要用来存储存档的目录,我这里使用SaveDataTest来模拟新建的情况,然后我在里面创建了Sabbat of the Witch目录用于存放魔女的夜宴存档,其他游戏再新建目录。
然后我们来到游戏的存档目录,以魔女的夜宴为例,也就是游戏安装根目录中的savedata文件夹。这里我将它删除,如果其中已经有存档,那么可以自己先备份。
之后我们使用管理员的命令提示符。
找到cmd,右键以管理员运行,或快捷键win+x+a(高版本windows默认是powershell,一样)
我们使用如下命令创建软链接:
mklink /d <source: game savedata> <target: folder in syncdisk>
如:
mklink /d "H:\SteamLibrary\steamapps\common\Sabbat of the Witch\savedata" "G:\BaiduSyncdisk\SaveDataTest\Sabbat of the Witch"
如果你想同步的存档文件只是一个单一文件而不是文件夹,那么只要去掉/d参数即可,同时在同步盘中放一个相同的文件。
如:
mklink "H:\SteamLibrary\steamapps\common\Sabbat of the Witch\savedata.txt" "G:\BaiduSyncdisk\SaveDataTest\Sabbat of the Witch\savedata.txt"
命令成功后,我们就能够看到游戏目录内多了一个快捷方式似的图标。不过这个并不是快捷方式,快捷方式是.lnk文件,而这个是软链接。
如果双击这个文件夹,其实就访问的是同步文件夹,我们可以在这里新建一个txt文件测试。
文件是同时出现的,因为访问的本质上是一个东西。
到这里其实就完工了,只要正常进行游戏,然后保存,就能够发现存档文件被同步盘自动上传了。
然后我们再模拟下其他端设备使用这个云存档的情况,其实是一样的
我们现在对端设备上登录好同步盘,设定好同步文件夹,之后存档就应该被下载到对应的同步文件夹中了,比如这里举例的SaveDataTest
为了模拟,我先将游戏目录的savedata删除,这是不会影响到同步文件夹中的文件的,你可以认为它就是一个"快捷方式"
然后我们再使用命令,创建软链接
mklink /d "H:\SteamLibrary\steamapps\common\Sabbat of the Witch\savedata" "G:\BaiduSyncdisk\SaveDataTest\Sabbat of the Witch"
完成后我们双击进入,就能看到存档文件了
也就是每台设备,这样设置一次同步盘和软链接,就可以实现多端同步了。
然后我们详细讲一下软链接和硬链接的区别,以及我为什么推荐软链接。不想看的可以跳过。
深入到文件系统的部分我也讲不透,所以我建议大家用这两张图去了解。
由于Linux中符号链接就是软链接,Windows上貌似还有细分,Windows中的符号链接就类似Linux中的软链接,所以我在上文中都使用了"软链接"这个词。可以说,最大的区别就是软链接就像一个门牌号(快捷方式),指向的是真实文件的路径,而硬链接就像一个屋子有两扇门,和原本的文件是相同的,指向的就是文件本身。如果将软硬链接比作指针/地址,那么硬链接和源文件都指向同一块存储数据的区域。而软链接指向的事源文件的地址,而源文件指向真正的存储区域。
还是用栗子来辅助理解:
软链接:如果软链接被删除了,那么源文件没有任何影响。如果源文件被删除了,软链接还在,但是会失效,如下图:
但是如果又将源文件恢复,那么软链接又可以照常使用。
硬链接:如果硬链接被删除了,源文件没有任何影响。如果源文件被删除了,硬链接也不会受任何影响。因为他们是"一个屋子的两扇门",当删除一个,文件内部的计数器会-1,只有当计数器归0时,文件才会真正删除。同时由于实现机制,硬链接必须与源文件位于同一volume,简单说就是不能跨盘符。
基于这些理由,我才推荐使用软链接的方案。上面都不理解也没关系,你只要认为,所有的存档文件都是在同步目录中的才是真正的文件,游戏目录下的只是个"快捷方式"就行了。但是这种快捷方式可以让游戏正常访问,就像访问真正的文件一样。只要不删除同步目录中的文件,那么存档就不会被删除。
好了,分享就到这里了,希望能有帮助,大家有什么问题欢迎在评论区留言,也欢迎补充和指正。
想想你的文章写的特别好https://www.237fa.com/