利益相关声明:作者与文中产品有直接的利益相关(开发者、自家产品等)

那些年我丢失的存档

       还记得当年第一次玩到3A大作时,那时候我在网吧刚刚结束了一场激烈的枪战,趁着贤者时间逛到了单机游戏区,阴差阳错地打开了一个名为《使命召唤6 现代战争》的游戏,自此以后,CF就从小甜甜变成了牛夫人。如今十几年时间过去了,我依旧保持着对单机游戏的热爱,单论PC平台上玩过的作品应该也有上百个了,但是这么多年我每次玩游戏时,总有一朵乌云萦绕在心头,那就是丢档。

 

       第一次丢档事故发生在《孤岛惊魂3》,那是我玩的第一款开放世界大作,直到现在为止我也不知道当初为什么会发生丢档,只知道一觉醒来毛都没了,那感觉真是从天堂到地狱,想死的心都有了,但是没办法,那时候还是个初出茅庐的小白,云存档什么的完全没听说过,无奈转投《孤岛惊魂4》了,直到现在《孤岛惊魂3》对我来说依旧是一段未尽的旅程。不过这还不是这严重的一次,最严重的一次是因为折腾双系统,直接把操作系统搞没了,等电脑从售后拿回来,C盘毫无意外地崭新如初,那次到底丢了多少个档都已经算不清了,但也就是那次丢档事故之后,我开始认真研究起了存档管理。

Git会是最终答案吗?

       存档管理这需求说复杂也不复杂,它本质就是文件备份和多平台同步,所以早期我一直在尝试使用网盘搭配各种同步软件,比如Synching、Goodsync等,然后再自己写点脚本搞得更加自动化一点,也就差不多凑合用了。直到后来那个男人出现了,没错他就是宫崎英高,老贼的魂游把我虐的死去活来却又欲罢不能,但魂学家们都知道老贼的游戏出了名地喜欢弱引导和多结局,不看攻略的话一不小心哪个结局就没了,不多玩几个周目根本下不来,像我这种强迫症直接横死当场。这时候我才意识到,存档管理这需求说简单还真没那么简单,现在的3A大作不多搞几个结局都不好意思叫3A,外加存档机制被他们玩的飞起,连什么存档献祭玩法都来了,简单的线性存档管理显然已经不适用于当下的环境了。怎么办呢,我第一时间就想到了那个程序员们家喻户晓的版本管理神器——Git,Git天生就适合创建多分支,一个Git仓库几十上百个分支完全不在话下,再加上其分布式的仓库同步机制,多分支管理和多平台同步一起盘活了,那么Git会是最终答案吗?

 

       接下来的岁月里,我一直用Git管理着我的游戏存档,也逐渐发现了Git的问题:

              1. 首先,Git的使用太过复杂,想要在玩家圈子里普及开来几乎是不可能的

              2. 其次,Git毕竟不是为存档管理而设计的,它不保存文件的创建时间、不保存空目录等特性在少数游戏上可能造成存档混乱

              3. 最后,我最理想的存档管理工具不仅仅只是存档管理,还包括诸如存档路径识别、存档分享、Mod管理等等功能,这些东西都无法围绕Git进行构建

       虽然Git不是最终的答案,但我认为站在Git的肩膀上是绝对没问题的,既然Git不能满足需求,那咱们就给它改造一下,创造一个专为玩家设计的Git,于是Gamekeeper这个独立开发项目就这么开始了。

Gamekeeper要如何做到

自动识别存档目录

       虽然玩家群体基本上都是懂电脑的,但游戏厂商实在是太能藏了,找游戏存档的位置依旧是个比较麻烦的活,好在社区的力量是无穷大的, mtkennerly 大神开源项目 ludusavi 会定期从wiki网站上抓取数量庞大的游戏数据,有了这些数据做支撑,寻找存档位置便不再那么棘手。

 

       Gamekeeper首次启动便会尝试下载 ludusavi 项目的全量数据文件manifest.yaml:

       下载完成后,在新增游戏界面中,输入游戏的官方英文名称便可搜索到目标游戏,直接选中后,包括游戏的安装目录、启动文件、存档目录甚至游戏封面和图标都全部准备好了,紧接着点提交便添加完毕:

自动识别

多存档空间设计

       Gamekeeper将游戏存档划分在一个个相互独立的存档空间内,所谓存档空间就是游戏内常说的存档槽位,因为现在的很多游戏都抛弃了存档槽机制,搞得大家只能一个存档玩到底,Gamekeeper把这套机制重新加了回来,而且更上一层楼。Gamekeeper的存档空间没有数量上限,你像要多少个存档空间就创建多少存档空间,一个玩战士、一个玩法师,一个给自己玩、一个给女朋友玩:

多存档空间

多分支存档管理

       多分支存档管理是Gamekeeper的开发重点。首先软件的所有存档空间都需要创建一个初始存档,初始存档是一个空存档,它代表的是游戏尚未开始前的存档数据,是后续所有分支的起点;同时,Gamekeeper参考Git设计了正在使用的存档的概念,它相当于Git中的HEAD指针,可以简单地理解为上一次保存的存档,在它的基础上提交新的存档和新的分支,就可以让存档空间内的分支图不断演进,最终形成一个由无数存档和分支组成的“分支树”:

多分支存档管理

 

       整个分支树在软件界面中井然有序,哪个存档属于哪个分支、谁先保存谁后保存,一目了然,可选择任意存档进行回档,再也不怕错过任何一个游戏结局。

差异存储模型

       现在的3A游戏容量是越来越膨胀,相应的存档容量也越来越膨胀,Gamekeeper口号是不放过游戏中的任何一个精彩瞬间,就以开放世界游戏举例,一个游戏玩完存档保存上千次都是常有的事,如果把这些存档全部保存下来,一个存档占用只有几MB的话,随着时间的推移也会达到以GB计算的程度。Gamekeeper参考Git和SVN的设计,采用差异存储模型保存存档,也就是每次只保存新旧存档之间产生变化的数据,而游戏每次覆写存档一般只改动少量数据,所以Gamekeeper所保存的存档数据,最终空间占用比较小,相应的软件所支持的存档数量便会直线上升。

差异存储模型

后续开发计划

       Gamekeeper目前还仅仅只是初版,围绕上面这些基础功能未来还计划开发新的玩法:

              1. 利用网络存储服务进行多平台同步,即云存档功能

              2. 存档分享,将自己的存档分享给他人或者获取他人分享的存档

              3. 跟踪游戏进程进行存档监控,实现实时保存存档、定时保存存档等

              4. 参考Git的Tag功能实现标签系统

       对Gamekeeper感兴趣的用户可前往官网 https://gamekeeper.thinkuni.net/ 免费下载并使用,详细说明请参考官网中的使用文档。

官网截图
13
0