Windows 电脑模拟 Nitendo Switch Amiibo

整体思路如下:

  1. 使用 mart1nro 的 joycontrol 项目在 Linux 虚拟机里连接 Switch
  2. 下载 Amiibo 二进制文件
  3. 进游戏,刷之

纯小白建议看最下面参考资料的教程,他们的带图,会更详细点。

JoyControl

关于 JoyControl 项目,这是 martnro 大佬的项目,原本有人提交了 Amiibo 的 Pull Request,大佬合并了,后来发现这部分代码是抄的 YouTubePlays 大佬的 JoyConDroid 项目代码(一个手机 NS 手柄模拟器)。虽然 YouTubePlays 只是希望修改下开源协议,不过考虑到没有严格审核 PR 也是自己的原因,所以 martnro 还是在相关 Issue 下道了歉,并移除了相关代码。
详情见 Request to Change License to Apache 2.0

不过作为用户而言,我们还是可以使用相关功能的,只需要回退版本即可(Git 大法好)。

Linux 虚拟机

只要别用 Windows 系列的虚拟机就行(Hyper-V、WSL),使用 Vmware 或者 VirtualBox 皆可,这里选择使用 VirtualBox。
直接官网下载即可,下载完双击安装。

系统采用最新版本的 Ubuntu(Ubuntu 20),直接在 Ubuntu 官网下载最新的镜像即可,如果速度太慢可以考虑用清华或者科大的镜像。

而后新建虚拟机选择挂载 Ubuntu 的镜像即可,而后按照正常安装 Ubuntu 的流程即可。

具体步骤可在谷歌搜 “VirtualBox Ubuntu”

配置环境

如果是最新版的 Ubuntu,那么理论上可以在没有任何报错的情况下装好所有依赖(之前偷懒用的 18 的镜像,全程依赖冲突)

sudo apt-get update -qy
sudo apt-get upgrade -qy
sudo apt-get install -qy git python3-pip libglib2.0-dev libhidapi-hidraw0 libhidapi-libusb0 libdbus-1-dev
sudo pip3 install hid aioconsole crc8 dbus-python

git clone https://github.com/mart1nro/joycontrol
cd joycontrol
sudo python3 -m pip install .
git checkout bf2e7e5 # 回退到没有移除 amiibo 的版本

接下来,需要把宿主机(Windows)的蓝牙允许虚拟机(Virtual Box)调用。在右下角的 USB 设置里找到自己的蓝牙设备,选中即可。

Virtual Box USB 设备Virtual Box USB 设备

如果无法加载,需要在 Windows 的设备管理器里把蓝牙卸载掉,然后再添加到 Virtual Box

Amiibo 文件

NFC Bank 已炸,但是善用 Google 即可
What to do without nfc bank

手柄模拟

sudo python3 ./run_controller_cli.py PRO_CONTROLLER

而后,NS 进入到 “更改握法/顺序” 页面,等待 JoyControl 连接。如果过了很久都连接不上,尝试去蓝牙设置里把 Nitendo Switch 删掉。似乎它只会连接自己不认识的设备

连接成功建立后,原则上,应该通过输入 home 回车 返回首页。
相关的按键为对应的键名,如 upleftrightdownabxylrzlzr……
摇杆使用 stick l upstick r center来分别控制左摇杆上推、右摇杆归位。也可以使用 stick l v 3000 控制左摇杆垂直位置推到 3000
具体的操作可以输入help查看。

如果要模拟 Amiibo,输入 nfc 1.bin 就会持续加载 joycontrol 目录下的1.bin文件。刷取完毕后,使用nfc remove清除持续发送的 Amiibo 信息

其他问题

使用喷射战士的 Amiibo 尝试了在塞尔达里,可以正常刷出来宝箱。

但是在喷射战士、大乱斗里,是无法正确刷 Amiibo的,因为这些游戏不仅仅是读取 Amiibo,还需要向 Amiibo 写入数据(比如大乱斗需要记录斗士等级之类的信息),因而会出现问题。

所以,有这功夫不如直接闲鱼买自制 Amiibo,算下来也就 2、30 块钱,比折腾这么久省事多了。而且有一说一作为手办而言,Amiibo 确实便宜,就是国行现在的太少,如果几个经典的出了,也不是不可以买一波。

参考资料