斯普拉遁3自动涂鸦指南

斯普拉遁真的很鱿型

尽管2代没有中文,但犹豫了很久之后还是没忍住入了卡带,果然对老任的想法没有任何抵抗力,涂地+FPS的设计真的是太好玩了!所以当老任公布Splatoon3的时候,毫无悬念入了数字版,准时开启了喷喷之路。

2代的时候就在广场上看到了很多有意思的涂鸦,既然作为一个手残画手,看了看已经吃灰的树莓派,只能靠科技的力量来润色自己的涂鸦了。

原理

斯普拉遁3的涂鸦可以看作一张320*120的单色位图图片,所以完全可以通过像素画工具先绘制出想要的图形,然后通过树莓派模拟的手柄逐行扫描进行绘制。

模拟手柄

从Github上看到了这个项目:Poohl/joycontrol,可以将树莓派通过蓝牙连接到Switch中模拟Pro手柄,并且作者提供了可编程式按键控制,所以利用「宏编程」用代码控制像素就可以做到自动涂鸦了!

位图

如果想自己尝试绘画,这里有两个像素画的制作工具:

再通过PhotoShop导出PNG8的「黑-白」图片,这时候会自动转换成单色的PNG图片,最后通过PNG2BMP工具转成位图.bmp文件就可以使用了。

本次的主题是新世纪福音战士风格涂鸦:Wave1,开大,不违法!😤
Splatoon3涂鸦

准备工具

  • Nintendo Switch 一台
  • 树莓派3B及以上(需要Python3环境)

绘画

要确保Switch处于掌机模式(JoyCon需要插在主机上),连接充电线。进入手柄页面,选择「更改握法/顺序」。

配对手柄

进入joycontrol目录,先手动配对手柄获取到Switch的蓝牙MAC地址:

# 连接Switch
sudo python3 run_controller_cli.py PRO_CONTROLLER

此时应该显示一个黑色的Pro手柄ICON:

如果蓝牙不能正常的连接,可能需要修改树莓派蓝牙的配置文件:

sudo vim /lib/systemd/system/bluetooth.service

# 修改ExecStart
ExecStart=/usr/libexec/bluetooth/bluetoothd -C -P sap,input,avrcp

# 重启bluetooth.service
sudo systemctl daemon-reload
sudo systemctl restart bluetooth.service

或者在这个issue中寻找帮助:Cursed Bluetooth Hardware #4

连接正常后,通过bluetoothctl命令获取到主机的MAC地址:

bluetoothctl paired-devices | grep -F "Nintendo Switch" | grep -oE "([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}"

导入位图

将位图图片重命名为test.bmp放在joycontrol目录,通过Image模块获取:

img = Image.open('./test.bmp') 
print("Load image success!")
WIDTH, HEIGHT = img.size
print ("Image Width:" + str(WIDTH) + ", Height:" + str(HEIGHT))

最后就可以遍历图片的像素来控制是否使用铅笔或者橡皮了:

for h in range(HEIGHT):
    print ('Draw row:' + str(h))
    for w in range(WIDTH):
        p = w if h % 2 == 0 else WIDTH - w - 1
        color = img.getpixel((p, h))
        direct = 'right' if h % 2 == 0 else 'left'
        # black
        if color == 0:
            await button_push(controller_state, 'a')
            await button_push(controller_state, direct)
        # white    
        else:
            await button_push(controller_state, 'b')
            await button_push(controller_state, direct)
    
    await button_push(controller_state, 'down')

完整的代码在Gist:

开始涂鸦

准备好手柄和图片后就可以开始涂鸦了:

  1. 进入游戏的绘画界面(在邮筒📮的地方)
  2. 退出到主页面开始执行脚本,需要替换reconnect_bt的地址
  3. 配对好手柄后,返回绘画界面中,将光标移动到左上角
  4. 按L键选择最细的画笔,按下X键放大画布
  5. 在脚本处输入yes确认
  6. 等待绘画

大概需要2个多小时,中间一定要确保电量充足和网络正常,中间有次断网喷喷强制掉线导致失败了😠,最终的成品:
Splatoon3涂鸦

点击发布就可以大功告成了!👍🏻

最后

贴一下最近的游戏截图: