Gamerzilla:一個開源游戲成就系統(tǒng)
一些開源游戲的質(zhì)量已經(jīng)媲美商業(yè)游戲。盡管還難以比肩 3A 大作,但開源游戲在獨立游戲中已頗具競爭力。不過,游戲玩家的期望是隨時間變化的。早期的游戲只有高分成就。不斷增加的成就種類促使玩家反復(fù)重玩游戲。比如你可能達到了滿級,卻還沒有找到所有隱藏物品或沒有完成全物品收集。Xbox 360 推出了首個在線多游戲成就系統(tǒng)。隨后其它游戲平臺也紛紛推出了自己的成就系統(tǒng)。
開源游戲在很大程度被游戲平臺的成就系統(tǒng)排除在外。你可以在 Stream 上發(fā)布開源游戲,但這需要付費。游戲平臺主要與公司合作,而不是與自由軟件社區(qū)合作。這也進一步把玩家鎖定在了非自由的游戲平臺上。
商業(yè)游戲開發(fā)商也沒有得到太多好處。由于不能共享成就,一些享受成就的玩家拒絕從其他商店購買游戲。這種鎖定效應(yīng)增強了游戲平臺的話語權(quán)。由于各個游戲平臺使用不同的系統(tǒng),開發(fā)者不得不針對它們分別進行適配和測試。較小的游戲平臺則可能完全被忽略掉。并且平臺方能夠訪問到所有使用該平臺的公司的成就數(shù)據(jù),這些數(shù)據(jù)可以被用來擴大競爭優(yōu)勢。
Gamerzilla 的架構(gòu)
??Gamerzilla?? 是一個致力于改善這種現(xiàn)狀的開源游戲成就系統(tǒng)。Gamerzilla 在設(shè)計上同時考慮了開源游戲和商業(yè)游戲。你可以運行自己的 Gamerzilla 服務(wù)器,使用游戲商店提供的服務(wù)器,甚至 Linux 發(fā)行版提供的服務(wù)器。服務(wù)器也可以由其他團體來運行。在哪里購買游戲不再重要。成就數(shù)據(jù)都會上傳到你的 Gamerzilla 服務(wù)器上。
一個基本的成就系統(tǒng)需要兩個要素:游戲和 Gamerzilla 服務(wù)器。然而隨著游戲數(shù)量增長,這種設(shè)計會暴露出其缺點。每個游戲都需要證書才能上傳數(shù)據(jù)到服務(wù)器。由于擁有大量的游戲資源,并且能夠在不同游戲商店之間同步數(shù)據(jù),游戲啟動器成為了眾多玩家的選擇。通過讓啟動器支持 Gamerzilla,游戲本身就不再需要證書了。游戲結(jié)果直接從啟動器上傳到 Gamerzilla 服務(wù)器。
??freegamedev.net??? 曾提供了社交網(wǎng)絡(luò)系統(tǒng) Hubzilla。我們基于此開發(fā)了一個插件來進行 Gamerzilla 的開發(fā)。不幸的是 Hubzilla 的一次升級導(dǎo)致了 ??freegamedev.net??? 的服務(wù)故障,因此 ??freegamedev.net?? 決定不再提供它了。
目前 Gamerzilla 服務(wù)器有兩種實現(xiàn)。維護 Hubzilla 是一項復(fù)雜的工作,所以我們用 .Net 和 React 開發(fā)了一個獨立的 Gamerzilla 服務(wù)器。游戲調(diào)用的 API 是相同的,所以不用關(guān)心連接的服務(wù)器是哪種實現(xiàn)。
游戲啟動器的開發(fā)和支持工作通常是滯后的。為了方便啟動器增加對 Gamerzilla 的支持,我們開發(fā)了 libgamerzilla。這個庫負(fù)責(zé)處理啟動器、游戲和 Gamerzilla 服務(wù)器之間的交互。目前只有 GameHub 實現(xiàn)了一個支持 Gamerzilla 的版本,并將在近期整合到項目中。Fedora 上的 libgamerzilla-server 是一個臨時解決方案。它不啟動游戲,而是監(jiān)聽成就并把成就上傳到服務(wù)器。
支持 Gamerzilla 的游戲在不斷增長。與游戲啟動器一樣,開發(fā)者使用 libgamerzilla 來完成 Gamerzilla 的集成工作。這個庫由 C 語言實現(xiàn),已經(jīng)被 Python 和 nim 等多種編程語言使用。對于那些已經(jīng)有成就系統(tǒng)的游戲,只需要花幾天時間就可以完成對 Gamerzilla 的支持。其他游戲想要支持 Gamerzilla,大部分時間都是花在收集信息和授予成就上。
架設(shè)服務(wù)器
架設(shè)服務(wù)器最容易的方式是使用 Hubzilla 插件。但是運行 Hubzilla 站點卻不是一件輕松的事情。在 Fedora 上架設(shè)基于 .Net 和 React 的服務(wù)器相對來說要容易一些,盡管這仍然需要許多步驟。詳細步驟請參考 ??readme?? 文件。需要這么多步驟的一部分原因是目前沒有預(yù)編譯好的發(fā)布版本。這意味著你需要自己安裝 .Net,動手構(gòu)建 React 源碼部分。構(gòu)建完成之后,React 代碼會直接運行在 Apache 中。.Net 后端則運行在單獨的服務(wù)上。Apache 作為代理負(fù)責(zé)把所有 Gamerzilla API 請求轉(zhuǎn)發(fā)給后端服務(wù)。
按上面的步驟操作,Gamerzilla 已經(jīng)運行起來了,但是現(xiàn)在還沒有用戶。當(dāng)然應(yīng)該有一個簡單的方式來創(chuàng)建管理員和注冊新用戶。但是該功能還沒有完成。目前只能通過 sqlite3 命令行來錄入用戶信息。具體步驟請參考 ??readme??? 文件。用戶可以是公開可見的,也可以是隱藏的。批準(zhǔn)標(biāo)記可以讓新用戶不立刻使用該系統(tǒng),但是網(wǎng)絡(luò)注冊是必須的。在設(shè)計時我們已經(jīng)考慮了用戶相關(guān)模塊的可替換性。通過替換 ??backend/Service/UserService.cs?
? 就可以與其他站點進行集成。游戲網(wǎng)站也可以通過這種方式來為用戶提供 Gamerzilla 成就系統(tǒng)。
目前 Gamerzilla 的后端使用的是 sqlite 數(shù)據(jù)庫。我們還沒有對它進行過性能測試。我們預(yù)計較大型的應(yīng)用安裝需要改進系統(tǒng)以使用更魯棒的數(shù)據(jù)庫。
測試
目前要找一個支持 Gamerzilla 的游戲啟動器太難了。如果你安裝了 libgamerzilla-server,就可以在命令行中運行 ??gamerzillaserver?
?? 命令。首次運行該命令時需要輸入 URL 和登錄信息。以后再運行時會直接從配置文件讀取這些信息。目前更正錯誤的唯一方法是刪除 ??.local/share/gamerzillaserver/server.cfg?
?? 再重新運行 ??gamerzillaserver?
? 命令。
大多數(shù)游戲還沒有支持 Gamerzilla 的版本。??itch.io 上的 《Pinball Disc Room》??,它的 Linux 版本支持 Gamerzilla,但是它的網(wǎng)頁版是沒有成就系統(tǒng)的。這款游戲只有兩個成就:一個是存活 10 秒鐘,另一個是解鎖并使用隧道。只需要稍加練習(xí),你就能獲得一個成就。由于這款游戲沒有可視化的成就提示消息,你需要查看 Gamerzila 服務(wù)器才能確認(rèn)成就。
目前打包到 Fedora 中的游戲都還不支持 Gamerzila?!禨uperTuxKart》 已經(jīng)整合了對 Gamerzila 的支持,正在等待發(fā)布新版本?!禨eahorse adventures》 和 《Shippy 1984》 添加了成就,但是新發(fā)布版本還沒有打包。還有一部分游戲由我們獨立完成了對 Gamerzila 的支持,但我們的拉取請求pull request或其它聯(lián)系嘗試還沒有得到開發(fā)者的回應(yīng)。
后續(xù)工作
Gamerzilla 需要更多游戲的支持。目前已經(jīng)有很多游戲支持 Gamerzilla,并且正在以大約每月一個的速度增長。如果你有喜歡的游戲,可以請求開發(fā)方支持 Gamerzilla。如果你是游戲開發(fā)者,并且在支持 Gamerzilla 上需要技術(shù)支持,請聯(lián)系我們。
服務(wù)器的開發(fā)工作在緩步開展中,我們希望不久之后就會有一個可用的注冊系統(tǒng)。在那之后我們可能會建立一個永久托管站點。目前你可以看到我們的 ??測試服務(wù)器??。一些人對于使用 .Net 作為后端表示擔(dān)憂。我們的 API 并不復(fù)雜,可以很容易用 Python 重寫。
最大的不確定性來自游戲啟動器方面。GameHub 希望有一個通過用的成就接口。未來我們可能會在這方面與他們開展合作。增加對 ??itch.io?? 應(yīng)用的支持可以提升系統(tǒng)的關(guān)注度。另一種方案是完全拋開啟動器。也許可以將 gamerzillaserver 添加到 Gnome 中。然后你就可以在一個設(shè)置頁面里配置 URL 和登錄信息。這樣任何啟動的游戲都可以記錄成就了。