Virtual amiibo (amiibo emulation) system for Nintendo Switch
任天堂Switch的虚拟amiibo(amiibo模拟)系统
目录
下载
请务必仔细阅读 README 文件和发布更新日志(发布页面上可找到)!
您需要准备以下文件:
- emuiibo 和 emuiigen(前身是 emutool)(从此处获取最新版本)
- Tesla(获取最新的Tesla-Menu 和 nx-ovlloader)
解压所有 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.json 和 amiibo.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 键。
使用示例:
- 打开悬浮窗并选择 emuiibo
- 启用 emuiibo
- 启动游戏
- 导航到游戏中使用 amiibo 的 NFC 功能并激活它
- 打开悬浮窗并选择您的 amiibo(此时 amiibo 将连接)。
- 游戏现在应该会识别/使用该 amiibo
- 如果游戏提示您移除 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 的维基百科并提供支持。
-
AD2076 和 AmonRaNet 协助开发 tesla 覆盖层。
-
AmonRaNet 为覆盖层投入了大量工作。
-
AmonRaNet、Impeeza、amazingfate、qazrfv1234、shadow2560 和 SimoCasa 提供/协助翻译。
-
Thog / Ryujinx 开发者对 Mii 服务及其各种类型进行了逆向工程。
-
Citra 开发者提供了 3DS 系统中使用的多种 amiibo 格式。
-
Manlibear 协助改进和开发早期的
emutool。 -
来自我的 Discord 服务器的所有测试人员和支持者,他们对本项目的进展和发展至关重要 😃
许可豁免
- Ryujinx 项目/团队不受 GPLv2 许可的限制,可使用 emuiibo 的代码并根据其当前许可进行授权。
Introduction
任天堂Switch虚拟amiibo(amiibo模拟)系统【此简介由AI生成】