emuiibo:基于 Nintendo Switch 生态的 amiibo 模拟工具项目

Virtual amiibo (amiibo emulation) system for Nintendo Switch

Branch7Tags17
This repository is empty

emuiibo

任天堂Switch的虚拟amiibo(amiibo模拟)系统

Discord Downloads License

Patreon GitHub sponsors PayPal

目录

下载

请务必仔细阅读 README 文件和发布更新日志(发布页面上可找到)!

您需要准备以下文件:

解压所有 ZIP 文件,并将文件夹复制到您的 SD 卡。最终目录结构应如下所示:

  • emuiibo: sd:/atmosphere/contents/0100000000000352/exefs.nsp/flags 文件夹
  • emuiibo 插件: sd:/switch/.overlays/emuiibo.ovl
  • tesla-menu: sd:/switch/.overlays/ovlmenu.ovl
  • nx-ovlloader: sd:/atmosphere/contents/420000000007E51A/exefs.nsp/flags 文件夹

请始终记住,如果是在未关闭主机的情况下(例如通过 FTP、MTP 等方式)放置这些文件,则需要重启主机,emuiibo 才能正常工作或重新加载!

虚拟 amiibo

虚拟 amiibo 存放于 sd:/emuiibo/amiibo 目录下。例如,名为 MyMario 的 amiibo 对应的路径为 sd:/emuiibo/amiibo/MyMario/<amiibo 内容>。它们也可以存放在子目录中,例如 sd:/emuiibo/amiibo/SSBU/Yoshi

emuiibo 通过两个方面来识别虚拟 amiibo:上述虚拟 amiibo 文件夹内必须存在 amiibo.jsonamiibo.flag 文件。如果(出于任何原因)您希望 emuiibo 不识别某个虚拟 amiibo,只需移除 flag 文件即可;重新创建 flag 文件即可重新启用。

JSON 文件包含 amiibo 需提供给游戏的所有必要信息和数据,但不包括一些特殊数据(如游戏存档数据、协议和标签类型等)。

amiibo 具有以下属性:

  • 名称(Name):amiibo 的名称(最多 10 个字符,超过 10 个字符的名称会被 emuiibo 自动截断为 10 个字符)

  • UUID:amiibo 的唯一标识符,由 10 字节组成。常见的 amiibo UUID 值似乎最后 3 个字节为零……?

  • 随机 UUID(Random UUID):如果启用此选项(设为 true),emuiibo 将忽略固定的 UUID 值,并在游戏访问 amiibo 时每次生成随机 UUID。这在某些游戏中可能带来好处,例如在《塞尔达传说:旷野之息》中,amiibo 每天只能使用一次,但通过随机化 UUID,可以绕过此限制,无限次扫描该 amiibo 以获取无限奖励。

  • Mii:每个 amiibo 都关联一个 Mii(即其“所有者”)。在内部,Mii 由一个 88 字节的结构组成,称为“char-info”,因此 emuiibo 将此数据存储在一个文件中(通常为 mii-charinfo.bin)。对于新创建的 amiibo,emuiibo 会使用主机服务生成一个随机 Mii;但如果您想使用主机中的某个 Mii,emuiibo 会将主机中的 Mii 转储到 miis 目录中,您只需复制粘贴/替换 charinfo bin 文件即可。注意:emuiibo 在 JSON 中记录了 charinfo 文件的名称(mii_charinfo_file),因此如果该文件被重命名,别忘了在 JSON 中也进行相应修改,否则 emuiibo 将根据 JSON 中记录的文件名生成一个随机 Mii。

  • 首次写入日期和最后写入日期(First and last write dates):(显然)这两个日期分别表示 amiibo 首次被写入/修改的时间和最后一次被写入/修改的时间。当使用 emuiigen 创建虚拟 amiibo 时,当前日期会被同时赋给这两个日期;当 amiibo 在主机上被修改时,emuiibo 会更新最后写入日期。

  • 写入计数器(Write counter):每次 amiibo 被修改时,此数字会递增(emuiibo 会模仿任天堂的行为),但当数值达到 65535 时,将不再递增(该数值实际上是一个 16 位数字)

  • 版本(Version):此值理论上代表任天堂 amiibo 库(NFP)的版本,因此 emuiibo 默认为 0。

虚拟amiibo创建

虽然旧版emuiibo格式受支持并会转换为当前格式(见上文),但强烈建议(除非bin转储是必不可少的)使用emuiigen——这是一款直观的电脑工具,专为创建和编辑虚拟amiibo而设计:

截图

注意:emuiigen需要在Java 11或更高版本环境下运行!

现在,您可以将生成的amiibo文件夹复制到SD卡中的sd:/emuiibo/amiibo目录或其下的任何子目录中!

支持的手办

一些游戏(如《Skylanders》)除了amiibo外,还使用其特定的NFC技术。本项目仅模拟amiibo;因此,以《Skylanders》为例,这里只能模拟两个支持amiibo的特殊手办,并且emuiibo只会模拟它们的“amiibo部分”。

区域

区域(技术上称为应用区域)是每个游戏的amiibo保存数据。从技术上讲,真实的amiibo只能为单个游戏保存数据,但emuiibo允许保存任意多个游戏的数据(因为保存数据以文件形式存储)。这些保存数据非常小,通常为216字节或更小。

emuiibo将此数据保存在amiibo目录内的areas文件夹中的bin文件中,bin文件的名称是游戏区域访问ID的十六进制格式。

访问ID是每个游戏用于amiibo保存数据的唯一ID/编号,用于检查游戏是否在amiibo中确实有保存数据。以下是部分游戏及其访问ID列表:

各游戏访问ID

游戏名称 应用ID 访问ID
Splatoon 2 0x01003BC0000A0000 0x10162B00
Shovel Knight: Treasure Trove 0x010057D0021E8000 0x1016E100
The Legend of Zelda: Breath of the Wild 0x01007EF00011E000 0x1019C800
Super Smash Bros. Ultimate 0x01006A800016E000 0x34F80200
Splatoon 3 0x0100C2500FC20000 0x38600500
The Legend of Zelda: Link's Awakening 0x01006BB00C6F0000 0x3B440400

其中部分ID来源于switchbrew

使用与控制

如果您已完成上述所有设置,就可以在游戏中使用 emuiibo 了。

提示: 请在启动游戏前启用(模拟状态),因为在某些游戏中,如果您在启动游戏后才启用,可能无法正常工作!这实际上取决于游戏内部如何使用 amiibo,因此提前启用可以确保 emuiibo 能够拦截游戏。

要查看 emuiibo 是否在游戏中正常工作,请检查当游戏尝试访问 amiibo 时,emuiibo 是否正在拦截。如果没有,请尝试先启用 emuiibo 再启动游戏。

要打开 Tesla 悬浮窗,请按住 L1 + 方向键下,然后按 R3(右摇杆)。成功操作后,悬浮窗将在屏幕左侧打开。现在选择 emuiibo。

您可以在悬浮窗的顶部看到/控制以下选项:

  • 模拟状态(开/关):当 emuiibo 的模拟状态为开启时,意味着任何尝试访问/读取 amiibo 的游戏都会被 emuiibo 拦截。当模拟状态为关闭时,amiibo 服务将正常工作,不会有任何拦截。这基本上是一个全局启用或禁用 amiibo 模拟的开关。

  • 活动虚拟 amiibo:如果模拟状态为开启,这是指将发送给尝试扫描 amiibo 的游戏的 amiibo。如果该 amiibo 有图像,将显示在悬浮窗的顶部。

  • 虚拟 amiibo 状态(已连接/已断开连接):当活动虚拟 amiibo 处于已连接状态时,表示该 amiibo 始终“放置”在 NFC 感应点上,就像您将真实 amiibo 一直放在 NFC 感应点上不移动一样——游戏会一直检测到它。当处于已断开连接状态时,表示您“移除”了它,就像您刚刚将 amiibo 从 NFC 感应点移开一样。有些游戏在保存数据后可能会要求您移除 amiibo,因此您必须断开虚拟 amiibo 的连接来“模拟”这种移除操作。这是一个较新的功能,因为在早期版本中,emuiibo 尝试自动处理此操作,导致某些游戏出现问题。

  • 随机 UUID(开/关):当选择了一个虚拟 amiibo 时,此选项将切换该 amiibo 的随机 UUID 功能(见上文),这将使 emuiibo 在游戏每次访问 amiibo 时使用随机化的 UUID。

在底部的主菜单中,您可以通过 sd:/emuiibo/amiibo 中的(子)目录浏览虚拟 amiibo(并选择它们)。您还可以将其中一些标记为收藏,这样可以从下方的单独菜单中轻松访问。

选择 amiibo 后,您会在悬浮窗顶部看到它已被选中,并且处于已连接状态。 虚拟 amiibo 处于已连接状态,相当于将真实的 amiibo 手办/卡片放在 NFC 感应点上。要断开连接 amiibo(相当于将真实 amiibo 从 NFC 感应点移开),只需再次选择同一个 amiibo 即可。

要返回上一级菜单,只需按 B 键。

使用示例

  1. 打开悬浮窗并选择 emuiibo
  2. 启用 emuiibo
  3. 启动游戏
  4. 导航到游戏中使用 amiibo 的 NFC 功能并激活它
  5. 打开悬浮窗并选择您的 amiibo(此时 amiibo 将连接)。
  6. 游戏现在应该会识别/使用该 amiibo
  7. 如果游戏提示您移除 amiibo,请断开连接

启动流程

  • 以下是 emuiibo 在控制台启动时会自动执行的操作列表:

    • 控制台 Mii 数据将保存至 sd:/emuiibo/miis/<index>,包括其名称(由于可能包含非 ASCII 字符,故存储在文本文件中)和数据(保存为 mii-charinfo.bin 文件)。

    • 旧版 amiibo 格式(原始 bin 转储文件和旧版虚拟 amiibo 格式)会自动转换为现代格式:

      • 若存在 sd:/switch/key_retail.bin,则 bin 转储文件的加密部分也可被使用,这意味着 amiibo 设置(Mii、名称等)和游戏应用区域(保存数据)(若存在)也会被提取至新格式。

      • bin 转储文件不会被删除,但会连同解密文件一起移至现代 amiibo 格式目录中。

编译

要编译 emuiibo,您需要为 Nintendo Switch 开发设置 Rust 环境。您还需要 devkitPro(特别是 devkitA64)来编译覆盖层。

满足上述要求后,只需递归克隆此仓库并运行 make 命令即可。

面向开发者

emuiibo 托管了一个名为 emuiibo 的自定义 IPC 服务,其他自制工具可通过该服务控制 amiibo 模拟。

覆盖层代码是一个很好的示例,展示了如何使用 libnx 控制 emuiibo。

致谢

  • 所有为原始 nfp-mitm 项目(及其他分支)做出贡献的人:Subv、ogniK、averne、spx01、SciresM

  • AmiiboAPI 网络 API,emuiigen 使用该 API 获取完整、准确的 amiibo 列表,以便生成虚拟 amiibo。

  • 3dbrew 提供的 amiibo 详细文档,尽管 Switch 上的某些方面有所不同。

  • LoOkYe 编写了 emuiibo 的维基百科并提供支持。

  • AD2076AmonRaNet 协助开发 tesla 覆盖层。

  • AmonRaNet 为覆盖层投入了大量工作。

  • AmonRaNetImpeezaamazingfateqazrfv1234shadow2560SimoCasa 提供/协助翻译。

  • Thog / Ryujinx 开发者对 Mii 服务及其各种类型进行了逆向工程。

  • Citra 开发者提供了 3DS 系统中使用的多种 amiibo 格式。

  • Manlibear 协助改进和开发早期的 emutool

  • 来自我的 Discord 服务器的所有测试人员和支持者,他们对本项目的进展和发展至关重要 😃

许可豁免

  • Ryujinx 项目/团队不受 GPLv2 许可的限制,可使用 emuiibo 的代码并根据其当前许可进行授权。

Introduction

任天堂Switch虚拟amiibo(amiibo模拟)系统【此简介由AI生成】

Customize your domain
511.4 K100Visit GitHub