使用对立物 SDK 解决塞尔达

这是一篇关于使用 Antithesis 平台探索《塞尔达传说》(1986 年)游戏的博客文章。

  • 主要观点:展示 Antithesis 平台在探索非线性开放世界游戏《塞尔达传说》方面的新功能和成果,包括解决探索难度大、 combat 战斗、游戏先决条件等问题的方法。
  • 关键信息

    • Antithesis 平台用于探索 NES 游戏,《塞尔达传说》是其早期探索目标之一,该游戏具有非线性开放世界、多种武器和敌人的 combat 系统以及完成游戏所需的多个特殊物品。
    • 为解决探索《塞尔达传说》地图大且复杂的问题,Antithesis 的 SDK 新增了SOMETIMES_EACH函数,可用于生成大量有时断言,帮助平台更均衡地探索所有屏幕和洞穴。
    • 针对 combat 战斗问题,新增了ALWAYS_LESS_THANSOMETIMES_GREATER_THAN等函数,让平台更关注数值量的最大值,从而更有效地进行战斗。
    • 对于游戏的先决条件,如收集八块三角力量碎片才能进入最终地牢等,SOMETIMES_ALL函数可帮助平台更高效地探索,同时也提到因状态空间过大,只探索了一种地牢完成顺序。
    • 平台在探索游戏过程中发现了一些 speedrunner 常用的漏洞,如 block clipping 和 khananakey 等,且这些漏洞的发现得益于 SDK 可指定高级目标而不指定低级实现的特性。
    • 最后提到 1980 年代的 NES 游戏与 Antithesis 的分布式系统不同,但解决问题的工具可相互借鉴,如有难以追踪的 bug 可联系 Antithesis 。
  • 重要细节

    • SOMETIMES_EACH函数可接受复合参数,如SOMETIMES_EACH({room_id, (bool)bombs>0}),用于尝试在有或没有炸弹的情况下探索每个房间。
    • ALWAYS_LESS_THAN(x, 5)SOMETIMES_GREATER_THAN(y, 3)等函数可让平台更关注数值量的特定范围。
    • SOMETIMES_ALL(a,b,c,...)函数用于断言多个条件同时满足,平台将其视为子目标并尝试在实现最多子目标的状态下进行探索。
    • 文中还提到了一些技术细节,如笛卡尔积和状态爆炸问题、避免过度侵入式检测游戏相关计数器的EVER_SINCE()组合器以及平衡 Link 健康状态和探索的方法等。
阅读 12
0 条评论