編注:我們會不定期挑選 Matrix 的優質文章,展示來自用戶的最真實的體驗和觀點。 文章代表作者個人觀點,少數派僅對標題和排版略作修改。
記得當年第一次玩到 3A 大作時,我在網吧剛剛結束了一場激烈的槍戰,趁著「賢者時間」逛到了單機游戲區,陰差陽錯地打開了一個名為《使命召喚 6:現代戰爭》的游戲。自此以后,CF 就從「小甜甜」變成了「牛夫人」。
![]()
如今十幾年時間過去,我依舊保持著對單機游戲的熱愛,單論 PC 平臺上玩過的作品應該也有上百個了,但是這么多年以來,每次玩游戲時也總有一朵烏云縈繞在心頭,那就是丟檔。
第一次丟檔事故發生在《孤島驚魂 3》,那是我玩的第一款開放世界大作,直到現在我也不知道當初為什么會發生丟檔,只知道一覺醒來什么都沒了,那感覺真是從天堂到地獄,想死的心都有了。但沒辦法,那時候還是個初出茅廬的小白,云存檔什么的完全沒聽說過,無奈轉投《孤島驚魂 4》——所以直到現在《孤島驚魂 3》對我來說依舊是一段未盡的旅程,而這還不是這嚴重的一次。最嚴重的一次是因為折騰雙系統,直接把操作系統搞沒了,等電腦從售后拿回來,C 盤毫無意外地嶄新如初。
那次到底丟了多少個檔都已經算不清了,但也就是那次丟檔事故之后,我開始認真研究起了存檔管理。
Git 為什么不行
存檔管理這需求說復雜也不復雜,它本質就是文件備份和多平臺同步。
所以早期我一直在嘗試使用網盤搭配各種同步軟件,比如 Synching、Goodsync 等,然后再自己寫點腳本搞得更加自動化一點,也就差不多湊合用了。直到后來「那個男人」出現了——宮崎英高,老賊的魂游把我虐得死去活來卻又欲罷不能,但魂學家們都知道老賊的游戲出了名地喜歡弱引導和多結局,不看攻略的話一不小心哪個結局就沒了,不多玩幾個周目根本下不來,像我這種強迫癥直接橫死當場。
這時我才意識到,存檔管理這需求說簡單還真沒那么簡單,現在的 3A 大作不多搞幾個結局都不好意思叫 3A,外加存檔機制被他們玩得飛起,連什么存檔獻祭玩法都來了,簡單的線性存檔管理顯然已經不適用于當下的環境了。
怎么辦呢?我第一時間就想到了那個程序員們家喻戶曉的版本管理神器——Git,Git 天生就適合創建多分支,一個 Git 倉庫幾十上百個分支完全不在話下,再加上其分布式的倉庫同步機制,多分支管理和多平臺同步一起盤活了,那么 Git 會是最終答案嗎?
![]()
接下來的日子里,我一直用 Git 管理著我的游戲存檔,也逐漸發現了 Git 的問題:
首先,Git 的使用太過復雜,想要在玩家圈子里普及開來幾乎是不可能的;其次,Git 畢竟不是為存檔管理而設計的,它不保存文件的創建時間、不保存空目錄等特性在少數游戲上可能造成存檔混亂;最后,我最理想的存檔管理工具不僅僅只是存檔管理,還包括諸如存檔路徑識別、存檔分享、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/
https://sspai.com/post/102928?utm_source=wechat&utm_medium=social
作者:Thinkuni
責編:克萊德
:作者與文中產品有直接的利益相關(開發者、自家產品等)
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.