作者:guiltygyoza
翻译:MetaCat
排版:MetaCat

本地优先游戏循环是一种优先考虑链下/离线体验的模式。它的特点是核心游戏循环完全在玩家的机器上运行,不受链上交易确认或来自其他联网机器响应的影响,除非玩家选择与它们互动。这个名字是从本地优先软件(local-first software)借用的。在我共同创立的组织 Topology 的实验中,这种模式首次出现在 Solve2Mint (2022 年 3 月)中。它同时描述了Solve2Mint 2(2022 年 7 月)、MuMu(2022 年 11 月)和Shoshin(2023 年 1 月)的设计模式。

动机(Motivation)

在联网游戏中,计算工作负载的分布可能会偏向服务器或客户端。由于边缘设备的计算能力比网络速度提升更快,因此将尽可能多的处理转移到这些边缘设备是有利的。此策略可最大限度地减少延迟并增强游戏体验

在设计自治世界时,也会出现类似的选择。链上应用程序通常需要等待交易完成,然后才能呈现最终的应用程序状态并继续进行下一个玩家交易。与更流行的 Web3 游戏模式(其中只有代币所有权在链上执行)相比,自治世界和全链上游戏将更多的计算工作负载从边缘移开,从而加剧了延迟情况。例如,Topology 的 Isaac 实验(2022 年 8 月)在游戏循环中遇到了长且不稳定的区块时间问题。

解决此问题的方法有很多,但没有一种方法能解决等待去中心化共识,最终确定交易的根本问题。为了解决这个问题,我们试图设计一个游戏循环,每个玩家每场只发送一笔交易,从而有效地使游戏循环不受交易速率和变化以及区块时间的影响。通过在本地运行核心游戏循环,我们可以从游戏体验计算中移除区块时间,并利用本地计算能力。

模式(The Pattern)

该模式由两个部分组成:“核心游戏循环”和“元游戏循环”。核心游戏循环构成了主要的游戏体验,完全在玩家的本地机器上运行。元游戏循环异步运行,促进玩家之间的互动,而不会阻止核心游戏循环的执行。核心游戏循环将信息传递到元游戏循环,然后元游戏循环根据玩家发送的信息得出新信息。当新信息可用时,这些新信息将异步传输回玩家的机器。

这里提供了元游戏循环实现的几种可能性,最简单的一个是记分牌。在这种情况下,核心游戏循环可以实现一个益智游戏,玩家通过反复试验来解决难题。一旦对解决方案感到满意,玩家就会提交解决方案并将其转发给元游戏循环。元游戏循环根据其有效性对谜题解决方案进行评分,并将它们与玩家姓名一起组织在一个按等级排序的表格中。该表格被转发给每个玩家的机器。该表格可以包含原始提交的全部内容,让玩家可以研究和比较它们,或者只是包含排名和等级信息。

元游戏循环的更高级用途是匹配。在这种情况下,核心游戏循环和元游戏循环的组合可以实现自动战斗游戏。例如,核心游戏循环可以实现一个系统,让玩家设计和测试战斗策略。对设计满意后,玩家提交设计,并将其传递给元游戏循环。元游戏循环在玩家提交的内容之间进行匹配,以相互提出策略。此外,元游戏循环可以实现评级系统(例如 Elo 或 Glicko),以评估单个提交内容或其背后玩家的实力。可以构建显示这些评级的表格并将其传回玩家机器。

最后的建议是,考虑实现两个耦合的游戏循环,一个多人游戏循环和一个单人游戏循环。多人游戏循环进展速度较慢,并在元游戏循环中实现。单人游戏以本地速度运行,并在核心游戏循环中实现。例如,元游戏循环可以实现玩家设计的机器人之间的大逃杀游戏,而相应的核心游戏循环实现机器人建造站,玩家可以在其中设计机器人行为,并在不同的模拟遭遇中对其进行测试。核心游戏循环以玩家需要的速度运行,以便进行反复试验。元游戏循环定期推进大逃杀竞技场的全局状态,例如每 X 小时一个游戏刻度或所选区块链的 Y 个区块。在元游戏竞技场中,当两个机器人相遇时,会自动进行多轮战斗模拟。奖励和惩罚分别应用于获胜和失败的机器人。

实现示例(Implementation Example)

MuMu 是 Topology 的最新实验,其灵感来自 Zachtronic 的Opus Magnum 的炼金术逻辑,玩家可以在其中寻找可视化编程谜题的解决方案。MuMu 的核心游戏循环,是一个在每个玩家的 Web 浏览器中运行的 Web 前端。它包括:

  1. 图形用户界面,允许玩家输入他们的解决方案并查看他们的表现如何。

  2. 一个根据谜题模拟器逻辑运行解决方案,并产生性能结果的模拟程序。

玩家可以随意将特定谜题的解决方案提交给 MuMu 的元游戏循环。该管道由 Starknet(测试网)上的智能合约和索引服务器组成,索引服务器捕获智能合约发出的事件,并将其保存在有组织的数据库中。MuMu 的智能合约实现了核心游戏循环的相同模拟程序,并在玩家提交的解决方案上执行该程序。在核心和元游戏循环中运行相同模拟程序的相同实现,可确保玩家在提交解决方案之前能够有效地评估解决方案。智能合约发出两个事件:

  1. new_simulation 事件,其中包含玩家提交的解决方案的完整描述。

  2. end_summary 事件,承载着有关解决方案性能的信息。

MuMu 的核心游戏循环订阅了元游戏循环索引服务器数据库中的更改。这些更改从元游戏循环传输到核心游戏循环有两个目的:

  1. 玩家可以查看针对特定谜题提交的所有解决方案的表格,并根据其表现进行排名。

  2. 玩家可以点击表格中的解决方案将其拉入谜题模拟器。这样他们就可以检查其他玩家提交的解决方案的工作原理,并希望设计出更好的解决方案。

扩展(Extensions)

此模式可以扩展为使用带有证明的数据 (PCD):玩家的机器生成证明,以表示模拟程序在玩家解决方案上有效执行。解决方案、声称的性能结果(在玩家的机器本地生成)和相关证明随后被提交到元游戏循环。元游戏循环不会在提交的解决方案上执行模拟程序,而是验证证明。成功的验证可验证提交的性能结果的正确性

此扩展有助于降低元游戏循环的计算复杂性,因为验证证明通常比重新执行模拟程序的计算成本更低。

此外,解决方案隐藏可以通过零知识证明来实现。在这里,只有证明和声称的性能结果会从玩家的机器发送到元游戏循环。除了节省计算成本之外,原始解决方案严格保留在玩家的机器上。实际上,元游戏循环能够在不知道解决方案本身的情况下对解决方案进行排名。

更多资源

本地优先软件:https://www.inkandswitch.com/local-first/

Mumu 的前端代码:https://github.com/topology-gg/mumu-view

MuMu 的智能合约:https://github.com/topology-gg/mumu-cairo

Mumu 的索引服务器代码:https://github.com/topology-gg/mumu-backend

原文链接:https://aw.network/primitives/primitive-local-first