Nintendo Switch版のスプラトゥーン2でイラスト投稿を自動描画する方法が以前よりもやりやすくなったのでやってみました。(利用できるマイコンボードが増えたおかげ)
この自動描画を実際に実行するには、ある程度の知識が必要となります。初心者向けではないですし、場合によっては、ゲーム機本体を損傷することもありえますので実行してみようと思う方は、それを念頭に置いて自己責任で始めてください。またこれは不正な改造行為ではありません。
スプラトゥーン2が出てからイラスト投稿で写真のような絵が投稿されているのをちらほらと見た方もいると思います。特にSwitch本体のシステムバージョンが3.0.0になってから出てきたのが多かったと思います。それは、3.0.0になってからコントローラー周りが更新されWii Uなどのコントローラーが使用できるようになったことにより、ポッ拳専用コントローラーと擬似的に思わせてコントロールするやり方で描画を自動で実行することをしているからです。そのやり方は、USBコントローラー付きのマイコンボードを利用した方法で、ArduinoやTeensyといったボードを直接Switch本体に接続してコントロールするものです。
スプラトゥーン2のイラスト描画は、白黒の2値でしか描画できず色の濃淡を表現するには、ドットのパターンで描画することで新聞の白黒写真のようなものやマンガでのスクリーントーンで表現する感じで描画するしかありません。うまい人は、マンガのスクリーントーンのように描画しているのをよく見かけます。
もしくは、新聞の写真のようなものを拡大して1ドットづつ描いていく方法があります。それを自動で描画しようということです。
手順としては、描かせたい画像を用意して2値画像に変換しディザリングを誤差拡散方法で変換してそれを元に描画させるという感じです。ディザリング誤差拡散方法は、要は濃淡をドットで表すような感じです。
用意するもの
- Arduino(Arduino IDE)もしくはTeensyボード
- Splatmeme-Printer(プリントするソフト本体)
- LUFA(AVR用のUSBフレームワーク)
- 2値画像に変換出来る画像編集ソフト(GIMP,Photoshopなど)
- Python2.7
- USB-CからUSB-micro B変換ケーブル(ドックのポートを使用すると問題が発生する可能性あり)
- PCかMac
- Windowsの場合は、MinGWが必要
当初マイコンボードは、Teensy 2.0++がメインであり、日本で入手するのが困難でした。その後、Arduinoなどにも対応したので日本で入手しやすいArduino Leonardoでやりたいと思います。
Teensy 2.0++は、直接PJRCで購入するしかありませんでしたが、最近ではAmazonで購入できるようです。対応しているマイコンボードは、Teensy2.0++,Teensy2.0,Arduino Leonardo,Arduino Micro,Arduino UNO R3です。
また、使用するPCは、MacOSで行います。もちろん、Windowsでも出来ますので適時置き換えてください。
自動描画するソフトの本家は、
ですが、使用するのは下記の本家からforkされた方を使います。(どちらでも大丈夫だと思いますが)
各プログラムをダウンロードして一つのディレクトリにまとめる
- SwitchFightstickというディレクトリを作成(名前はなんでもいい)
- 以下の2つをダウンロード
Splatmeme-printer.zip
LUFA-170418.zip - 1で作ったディレクトリに2でダウンロードしたものを解凍展開
- LUFA-170418.zipを解凍したディレクトリ名をLUFAに変更
- Pythonをインストール(Macの標準のものでも可能だが後の画像処理でPILが必要になる)
画像を変換する
- 描きたい画像を用意する
- 画像サイズは、320×120ピクセル
- GIMPなどを使用して2値画像に変換する。その際、ディザリングは、誤差拡散(通常)で変換。
- RAWデータでimage.dataという名前で保存。Splatmeme-Printer-masterディレクトリに保存する。
- Terminalを起動して、Splatmeme-Printer-masterディレクトリに移動
- python bin2c.py image.data
を実行してimage.cを作成する
Splatmeme-Printer-masterのディレクトリにpng2c.pyというプログラムがあります。pythonのライブラリPIL(Python Image Library)を使用しているので別途インストールする必要があります。Macの場合ですと標準のPythonに入れるのはいろいろ面倒なのでhomebrew系でpython自体をインストールしてそちらでpipを使用してインストールすると簡単です。
$ python png2c.py 変換したい画像.png
これを使うとGIMPなどでやらなくとも2値画像に変換してくれます。
ボードのプログラミング
- Arduino IDEをダウンロードしてインストールする
- Splatmeme-Printer-masterにあるmakefileをテキストエディタで開く
- at90usb1286の行を見つける(16行目あたりにある)
MCU = at90usb1286 - atmega32u4に書き換える
- Arduino LeonardをMacに接続して、Arduino IDEを起動する
- メニューのツール->ボード->Arduino Leonardを選択
- メニューのArduino->Preferences…を選び環境設定を開く
- 設定の「より詳細な情報を表示する」のコンパイル、書き込みにチェックを入れてOKボタンを押す(英語の場合は、Show verbose output during: upload)
- なんでもいいのでマイコンボードに書き込む(初期のさらのでもいい)
- ステータス枠にログが出てくるのでそこでavrdudeというコマンドが実行されているところを探す
- その行をコピーして別に控えておく
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/cu.usbmodem14244421 -b57600 -D -Uflash:w:/Users/xxx/Documents/SwitchFightstick/Splatmeme-Printer-master/Joystick.hex:i
- avr-gccへのパスを通しておく、ホームディレクトリの.bash_profileをテキストエディタで開く
- finderでcmd+shift+.を同時押しで隠しファイルが表示されるので.bash_profileを開く
- Terminalを開き、Splatmeme-Printer-masterに移動して、makeと打ち実行する
- コンパイルが終わって正常終了していれば、さっきコピーしたavrdudeの行を貼り付けてxxx.hexの部分をJoystick.hexに書き換えて準備(実行しない)
- 実行する前にボードのリセットボタンをダブルクリックし、一呼吸してからenterを押して実行する
export PATH=$PATH:/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin
を追加
これでボードに書き込みが完了したのでケーブルを外す。
Switch本体に接続して実行
- 先にスプラトゥーン2を起動して、ポストの投稿のところに行き描画状態にする。
- ペンを一番小さいのを選択しておく
- カーソルを右上に移動しておく
- USB-CからUSB micro B変換ケーブルを使って、本体に接続。ドックのポートではなくモバイルモードでの本体下部のポートに接続
(接続した直後にペンの種類が真ん中のものに選択されてしまうことがあるのでそのときは即座に小さいのを選択する) - 接続するとプログラムが起動し順繰りと描き始める
初期よりも描き込み速度が向上しているようです。だいたい30分くらいで描き終えていました。充電しながらは出来ないので50%以上バッテリ残量がある方がいいと思います。
Teensy2.0++が手に入るのであればそちらの方がコストパフォーマンスもいいですし、その他の利用にも最適なものです。今回はArduino LeonardでやりましたがそのうちTeensyでもやりたいと思います。