Splatoon2で自動ドット打ちしてくれるやつをWindows10のWSLで使う


おおまかまとめ

  • Switch-Fightstickすごい
    • マイコンボードにポッ拳コントローラのフリをさせて1ドットずつ描画する
  • スプラトゥーン2とPCを持っていれば、3,000円くらいで可能
    • teensy++ 2.0を買う、teensy 3.xは未対応なので買ってもできない
    • Arduino UNO R3やArduino microでも可能
  • ソフトウェア開発・マイコンボードに対する知識があると良い
  • Windows10ならWSLを利用すると、環境をあまり汚さなくてよい

必要なもの

  • ハードウェア
    • Nintendo Switch(本体)
    • Splatoon2(ソフト)
    • Windows10 PC(cmdがあるWindowsやLinux PCやMac PCでも可能、本稿では手順の違いを述べない)
    • teensy++ 2.0(マイコンボード)
      • 3,000円くらい
      • Switch-Fightstick公式によれば、Arduino UNO R3とArduino Microでも動作確認済みらしい
      • teensy 3.xはarm cpuになっておりLUFAライブラリが非対応
      • うっかりteensy 3.2を買ってしまったよ…
    • (追記:なくてもOK)USB-A to USB Type-C変換コネクタ(teensy++ 2.0についているUSB-A/USB-Micro-BのケーブルをNintendo Switchに接続する)
      • Switchのクレードルを使えば、必要ない
      • 500円くらい
      • これが安かったし、動作もした
  • ソフトウェア(少なくとも、個人利用ならどれも無料)
    • GIMP(画像編集ソフト、白黒化とpngデータ吐き出しをする。手持ちのソフトでもOK)
    • Switch-Fightstick(偉大なツール、LUFA同梱・非同梱のどちらかを使う)
    • LUFA(AVRマイコン用USBライブラリ、上記ツールが使用する)
    • teensy.exe(teensy公式のバイナリ書き込みソフト)
    • WSL (Bash on Windows)
      • python2.7(LL言語、WSLにすでに入っているはず)
      • gcc-avr、avr-libc(avrコンパイラとライブラリ、WSLでのUbuntuパッケージ)
      • git(バージョン管理ツール、Switch-Fightstickを落とすのに使う)
      • WSLを準備する方法については、本稿では取り上げない

手順

下準備

GIMPのインストール

  • GIMP公式からdirectlyダウンロードし、gimp-xxx-setup.exeを実行する

WSL上に必要なパッケージをインストール

WSL上で作業する

  • git、avrコンパイラとライブラリをインストールする
  • python2.7(パッケージ名python)がなければ入れておく
    • たぶん元から入っている
    • png2c.pyを動かすのにPILライブラリが必要
sudo apt install git gcc-avr avr-libc python-pil

Switch-Fightstickをダウンロード

WSL上で作業する

LUFA同梱版で行う場合(簡単)

Switch-Fightstickの最新には追従しきれていないが、LUFAライブラリが同梱されている。
(追記)最近、高速化コミットを取り入れた。

git clone https://github.com/EsProgram/Switch-Fightstick.git
cd Switch-Fightstick
git checkout 1.1.0f

非同梱版でやる場合(ちょっと手間だけど最新版)

こちらはLUFAライブラリが同梱されていない。
そのため、自分でダウンロードし配置してから作業する。
本稿執筆時点では、GithubのPRにて高速化バージョンが提案され、マージされた。

git clone https://github.com/abcminiuser/lufa.git
git clone https://github.com/shinyquagsire23/Switch-Fightstick.git
cd Switch-Fightstick

本作業

本節以降を繰り返せばいろいろなドット絵を扱える

元画像の準備

  • 320x120サイズを良いする
  • jpgでもpngでも、GIMPで開ければ良い

画像を白黒化

GIMPで作業する
もちろんGIMPを使わず、各自手元のIllustratorやPhotoshopやCOMIC STUDIOなどを使って320x120サイズの白黒画像を用意してもよい。(トーン使ってみたい)

  • 画像を開く
    • 画像をGIMPにドラッグアンドロップで開ける
  • 白黒化

    • [Image] -> [Mode] -> Grayscale]
      • 2値化はSwitch-Fightstickツールがやってくれるため、やらなくてもよい
      • [Image] -> [Mode] -> [Indexed]の「Use black and white (1-bit) paltette」を使い、自分で2値化してもよい
      • 2値化の処理によって見え方がだいぶ変わるため、自分でやるほうが綺麗な画像をつくれる
      • 拘るなら、明るさ、コントラスト、フィルター、2値化処理方法をいじる
      • さらに拘るなら、生成されたpngのドットを微修正する
      • さらにさらに、2値化前に、[Fileters] -> [Artistic] -> [Cartoon]で先に輪郭を強調しておくと、よりキレイにできる
  • PNG画像で保存

    • [File] -> [Export As...]
    • [PNG image]を選択
    • ファイル名は.pngにしておく

画像をc言語ソースファイルに埋め込み

WSL上で作業する
git cloneしたSwitch-Fightstickディレクトリ内で作業する

  • python2.7とpng2c.pyでcソースファイルに埋め込むため、下記コマンドを打つ
    • ファイル名は自分が保存したパスと名前にする
    • PNGが2値化してあるなしを認識し、良しなにしてくれる
    • 用意した画像がraw data(.data)ならbin2c.pyを使えばよい
python png2c.py [image.png]

うまく行けば、下記のメッセージが出る。
また、git statusimage.cが更新されているのを確認できる。

image.png converted with original colormap and saved to image.c

teensy++ 2.0用のバイナリファイルの作成

WSL上で作業する
git cloneしたSwitch-Fightstickディレクトリ内で作業する

  • makeを叩きビルドする
    • 成功すると、[INFO] : Finished building project "Joystick".と出る
    • Makefile内のMCU項目を書き換えることで、Arduino UNO R3/Microへ対応できる(らしい)
  • 生成されたJoystick.hexをWindows側Cドライブ内へコピーする。
make
...(ログ省略)
cp ./Joystick.hex /mnt/c/[いい感じのところ]
  • LUFA非同梱版を使った場合はmakeコマンドでLUFAライブラリのパスを指定する
    • もしくは、自分でmakefile内のLUFA_PATHの項目を正しく書き換える
make LUFA_PATH=../lufa/LUFA
...(ログ省略)
cp ./Joystick.hex /mnt/c/[いい感じのところ]

teensy++ 2.0への書き込み

Windows10環境にて作業する。
先項で生成されたJoystick.hexを、公式の書き込みツールでteensy++ 2.0へ書き込む

  • teensy.exeを起動する
  • tennsy++ 2.0をPCに接続する
  • [File] -> [Open HEX File]
    • Joystick.hexを指定する
  • tennsy++ 2.0のスイッチを押す
  • [Operation] -> [Program]
  • [Operation] -> [Reboot]

Nintendo Switchで画像描画を実行

Nintendo Switchとスプラトゥーン2で作業する

  • 投稿画像編集画面へ行く
  • ペンを一番細いものにする
    • (追記)開始点への移動、キャンバスのクリア、は勝手にやってくれる。
  • Nintendo Switchにteensy++ 2.0を接続する
    • 画像はUSB Type Cで接続している図
    • (追記)SwitchのクレードルのUSB-A端子に接続してもできる
  • 1時間30分ほど待つ
    • 高速版なら30分くらいかかる
    • (追記)LUFA同梱版も高速化された

参考文献