一些开源游戏的质量已经可以与商业游戏相媲美。 虽然还难以与AAA级大作抗衡,但开源游戏在独立游戏中已经具有相当的竞争力。 然而,玩家的期望随着时间的推移而变化。 早期的游戏只有高分成就。 不断增加的各种成就鼓励玩家一遍又一遍地重玩游戏。 例如2d游戏素材,您可能已达到最高等级,但尚未找到所有隐藏物品或完成所有物品收集。 Xbox 360 引入了第一个在线多游戏成就系统。 随后,其他游戏平台也推出了自己的成就系统。
开源游戏很大程度上被排除在游戏平台的成就系统之外。 您可以在 Stream 上发布开源游戏,但这需要付费。 游戏平台主要与公司合作,而不是与自由软件社区合作。 这进一步将玩家锁定在非免费游戏平台上。
商业游戏开发商也没有获得太多好处。 由于成就无法共享,一些喜欢这些成就的玩家拒绝从其他商店购买游戏。 这种锁定效应增强了游戏平台的声音。 由于每个游戏平台使用不同的系统,开发人员必须分别进行适配和测试。 较小的游戏平台可能会被完全忽略。 并且平台方可以访问所有使用该平台的企业的业绩数据,可以用来扩大竞争优势。
Gamerzilla 的架构
Gamerzilla 是一个致力于改善这种情况的开源游戏成就系统。 Gamerzilla 的设计同时考虑了开源和商业游戏。 您可以运行自己的 Gamerzilla 服务器,使用游戏商店提供的服务器,甚至 Linux 发行版提供的服务器。 服务器也可以由其他方运行。 在哪里购买游戏不再重要。 成就数据将上传到您的 Gamerzilla 服务器。
基本的成就系统需要两个元素:游戏和 Gamerzilla 服务器。 然而,随着游戏数量的增长,这种设计的缺点就会暴露出来。 每个游戏都需要证书才能将数据上传到服务器。 凭借着大量的游戏资源以及不同游戏商店之间数据同步的能力,游戏启动器成为了很多玩家的选择。 通过使启动器支持 Gamerzilla,游戏本身不再需要证书。 游戏结果直接从启动器上传到 Gamerzilla 服务器。
提供社交网络系统Hubzilla。 基于此,我们开发了一个用于Gamerzilla开发的插件。 不幸的是,Hubzilla 的更新导致服务中断,因此决定不再提供该服务。
目前 Gamerzilla 服务器有两种实现。 维护 Hubzilla 是一项复杂的工作,因此我们使用 .Net 和 React 开发了一个独立的 Gamerzilla 服务器。 游戏调用的API是一样的3D角色,所以你不用担心连接的服务器是哪个实现。
游戏启动器的开发和支持往往滞后。 为了方便启动器添加对Gamerzilla的支持,我们开发了libgamerzilla。 该库处理启动器、游戏和 Gamerzilla 服务器之间的交互。 目前只有GameHub实现了支持Gamerzilla的版本,并将在不久的将来集成到该项目中。 Fedora 上的 libgamerzilla-server 是一个临时解决方案。 它不会启动游戏,而是监听成就并将其上传到服务器。
支持 Gamerzilla 的游戏数量持续增长。 与游戏启动器一样,开发人员使用 libgamerzilla 来完成 Gamerzilla 集成。 这个库是用C语言实现的,已经被Python、nim等多种编程语言所使用。 对于那些已经有成就系统的游戏来说,只需几天的时间即可完成对 Gamerzilla 的支持。 其他想要支持 Gamerzilla 的游戏大部分时间都花在收集信息和奖励成就上。
设置服务器
设置服务器最简单的方法是使用 Hubzilla 插件。 但运行 Hubzilla 网站并不是一件容易的事。 在 Fedora 上设置基于 .Net 和 React 的服务器相对容易,尽管仍然需要许多步骤。 详细步骤请参阅文档。 它需要这么多步骤的部分原因是目前没有预编译的发行版本。 这意味着您需要自己安装.Net并自己构建React源代码。 构建完成后,React代码将直接在Apache中运行。 .Net 后端在单独的服务上运行。 Apache 充当代理,负责将所有 Gamerzilla API 请求转发到后端服务。
按照上述步骤,Gamerzilla 已经运行,但还没有用户。 当然应该有一种简单的方法来创建管理员和注册新用户。 但该功能尚未完成。 目前游戏开发巨头成就,用户信息只能通过sqlite3命令行输入。 具体步骤请参考文档。 用户可以公开可见或隐藏。 批准印章阻止新用户立即使用该系统,但需要在线注册。 我们在设计时就考虑了用户相关模块的可替换性。 可以通过替换 backend/Service/UserService.cs 来实现与其他站点的集成。 游戏网站也可以通过这种方式为用户提供Gamerzilla成就系统。
目前 Gamerzilla 的后端使用 sqlite 数据库。 我们还没有对其进行性能测试。 我们预计较大的应用程序安装将需要改进系统才能使用更强大的数据库。
测试
目前很难找到支持 Gamerzilla 的游戏启动器。 如果安装了 libgamerzilla-server,则可以从命令行运行 gamerzillaserver 命令。 第一次运行此命令时,您需要输入 URL 和登录信息。 以后运行时会直接从配置文件中读取这些信息。 目前纠正错误的唯一方法是删除 .local/share/gamerzillaserver/server.cfg 并重新运行 gamerzillaserver 命令。
大多数游戏还没有支持 Gamerzilla 的版本。 itch.io 上的《Pinball Disc Room》Linux 版本支持 Gamerzilla,但其网页版本没有成就系统。 游戏只有两项成就:一项是生存10秒,一项是解锁并使用隧道。 只需一点点练习,您就可以取得成就。 由于游戏没有视觉成就消息,因此您需要检查 Gamerzila 服务器以确认成就。
目前打包到 Fedora 中的游戏都不支持 Gamerzila。 《SuperTuxKart》已集成对Gamerzila的支持,正在等待新版本的发布。 Seahorse Adventures 和 Shippy 1984 增加了成就,但尚未打包到新版本中。 还有一些游戏我们已经独立完成了对 Gamerzila 的支持游戏开发巨头成就,但我们的 Pull Request 或其他尝试联系尚未收到开发者的回复。
跟进
Gamerzilla 需要更多游戏的支持。 已经有很多游戏支持 Gamerzilla,并且数量以每月一款左右的速度增长。 如果您有喜欢的游戏,可以要求开发商支持 Gamerzilla。 如果您是游戏开发者并需要支持 Gamerzilla 的技术支持,请联系我们。
服务器开发正在缓慢进行中,我们希望很快就有一个可用的注册系统。 之后我们可以建立一个永久的托管站点。 目前您可以看到我们的测试服务器。 有些人对使用 .Net 作为后端表示担忧。 我们的 API 并不复杂,可以轻松地用 Python 重写。
最大的不确定性来自游戏的启动器方面。 GameHub希望有一个人性化的成就界面。 我们将来可能会在这方面与他们合作。 添加对itch.io应用程序的支持可以增加系统的关注度。 另一种选择是完全放弃启动器。 也许 gamerzillaserver 可以添加到 Gnome 中。 然后,您可以在设置页面中配置 URL 和登录信息。 这样任何启动的游戏都可以记录成就。
通过:
作者:丹尼斯·佩恩 选题:lujun9972 译者:toknow-gh 校对:wxy
本文由 LCTT 原创编译,Linux China 自豪推出