Help us understand the problem. What is going on with this article?

ギアのかけらやチケットを無限に入手!Switch操作自動化のススメ【Splatoon2】

2019.05.10 ポイントの交換まで含めて完全自動化に対応しました
2019.05.25 注意事項をちょっと書き加えました
2019.08.14 必要なファイルの記載漏れを修正しました
2019.10.21 排出率を計算しました→【Splatoon2】"曖昧かつ厳密"な画像認識で8836回のガチャ結果から排出率を計算する


↑Twitterに貼った、実際に自動化している様子です


↑放っておくだけでこの通り、フードチケットもドリンクチケットもカンストまで自動的に溜まっちゃいます。
使い切れないレベルです。

概要

これは何をするもの?

外出中や 寝ている間に 機械がギアのかけらを集めてくれるようになるというものです!
Qiitaへの投稿ではありますが、Splatoon2プレイヤーは技術面に不慣れな方も多いと思いますので、少し優しめに書いていきますね。

注意

本体やソフトは改造しませんが、この方法を使って任天堂さんから怒られたりしても当方は責任を負いません。
本行為は特に「Nintendo Switch利用規約」における第1条第5項「任天堂の許諾を受けていない本ゲーム機の周辺機器およびソフトウェア等」の使用にあたる可能性がありますので、利用は自己責任でお願いします。

機械に操作させて深海メトロを無限にクリアする

Splatoon2は複雑な操作を求められるTPSのアクションゲーム。
対人戦はともかく、CPU相手となるサーモンランでも、機械操作でクリアすることは難しいです。

しかし、一人用モードであれば機械に操作させてもなんとかクリアできる!
そこに着目し、今回は次のようにかけら集めを自動化します。

  1. オクト・エキスパンションの【D02 バツチー郡駅】を自動でクリアできるプログラムを作る。
  2. 作ったプログラムを、マイコン(パソコンのちっちゃいやつ)に書き込む。
  3. マイコンとSwitchを接続して、マイコンの操作でバツチー郡駅を無限にクリア→自販機でポイント交換する。

たまったポイントが自動的に消費されていくわけなので、どんなに長時間放置しても途中で手を加える必要なしにかけらやチケットが溜まっていきます

具体的な作業内容

必要なもの(ハードウェア関連)

※1 このボードじゃなきゃダメという厳密な縛りはありません。開発元のリポジトリに記載がある「at90usb1286」「atmega16u2」「atmega32u4」いずれかのボードを搭載していればイケる?と思います。しかし私自身はマイコンは素人のため、詳細はわかりません。
※2 もしSwitchドックなしの環境で自動化したい場合は、Switch本体のUSB TypeC端子に繋ぐことになります。つまりこういうケーブルが必要になると思われますので注意。私はリンク先の商品ではなく、既に持っていたケーブルを使いました。

オクトを買っていなければ4000円、買っているなら2000円くらいの出費で実現できますね。
ただ、電子部品が故障することを考えていくつか余分に買っておくと安心です。

必要なもの(ソフトウェア関連)

いずれもWindows10のパソコンの中にインストールしていく形になります。
インストール手順も後述しますね。分かる方は下記リンクからどんどんインストールしてってください。

  1. マイコンに書き込むプログラム
  2. Arduino IDE
  3. bash on windows
  4. python
  5. avr-gccなどその他
  6. ちょっとだけソースコードを手直し

各種インストール手順

マイコンに書き込むプログラム

二つのリポジトリをダウンロードして配置します。
片方は私が作成したものです。
こちらのリポジトリを開きます。

右上の方にあるClone or downloadというボタンをクリック。
Download ZIPをクリック。
リポジトリ全体のZIPファイルを適当な場所に保存してください。
ZIPを展開してください。こちらのフォルダをAとしましょう。

もう一つは別の方が作成したものです。
こちらのリポジトリを開きます。
同様にダウンロードしてZIPを展開し、中身のlufaというフォルダを先ほど展開したフォルダAの中に配置します。
フォルダAの下にlufa/LUFA/Build/...のような階層構造ができればオッケーです!
lufa/lufa//LUFA/Build... のように余計なフォルダを作らないように注意しましょう。
以上で完了です。

(補足:イチから私がプログラムを作ったわけではなく、フォーク元のリポジトリが存在するのですが、GitHub上でうまくFork出来てないままになってしまっています。なんかいい方法ないですか……)
(余談:リポジトリ内のJoystick.cの中に核となる操作手順を記載しているのですが、for文とかで書けそうな操作を上手くfor文に落とし込めませんでした。こちらも何かいい方法あれば教えてください……)

Arduino IDE

Arduinoの公式サイトを参照して入手・インストールを完了してください。
マイコンにSwitch自動操作のプログラムを書き込むとき、このIDEに代わりに書き込み操作をやってもらいます。

bash on Windows

これについては完全にこちらの記事にお世話になりました!
ですのでインストール方法も丸投げさせて頂きます。

python

上記bash on Windowsのインストール終了後にインストールします。
bashを起動したあと、次の2つのコマンドを打ち込むとインストールできるはずです。
sudo apt-get install -y python-minimal
sudo apt-get install -y python-pip

avr-gccなどその他

作ったプログラム(ソースコード)を機械が理解できる形式に変換=コンパイルするのに必要な機能などのインストールです。
python関連をインストールした時と同様に、下記のコマンドを打ち込んでいってください。
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y gcc-avr
sudo apt-get install -y avr-libc
pip install --upgrade pip

ちょっとだけソースコードを手直し

私と全く同じ機材を使っていればこれで準備は完了です。
しかし、マイコンボードが異なるものを使っている場合は一つ手直しが必要になります。

ダウンロードしたリポジトリのZIPを展開した中からmakefileというファイルを探してテキストエディタで開いてください。
この中のMCU = atmega32u4と書かれた行を修正します。
あなたの使っているマイコンが例えば「at90usb1286」ならMCU = at90usb1286のように修正して上書き保存です。

ここまで出来たら事前準備は完了です!

プログラムをマイコンに書き込む

コンパイル

先ほどちょろっと触れましたが、コンパイルという作業を通してソースコードをマイコンにも読めるようにしてあげる必要があります。
とは言っても、コンパイルはコンピュータ任せで簡単にできます。心配ご無用!
makefileがあるフォルダでbashを開いて、makeコマンドを実行するだけ。
これでコンパイルが実行されて、Joystick.hexというファイルが同じフォルダの中に新しくできているはずです。
この.hexというファイルをマイコンの中に書き込んでいきます。
bashは終了してしまってください。

書き込み

ここは少し難しいです。
まずはマイコンをPCから外した状態にします(当然、まだ繋いでいないと思いますが)。
ここでデバイスマネージャーを開いてください。
ポート (COM と LPT)と書いてあるノードを展開します。
既に色々なポート番号のデバイス名が見えるかもしれませんが、それらはいま無関係です。
現在何が繋がっているのかということを画面上で確認できる状態になったら、マイコンボードとPCをケーブルで接続します。

するとマイコンの方も光って反応しますが、デバイスマネージャーに注目してください。
新しくポートが増えたのが確認できるはずです。それがあなたのマイコンです。
ここでPCに繋いだままマイコンのリセットを行います。

マイコンのリセット方法は、RSTと書いてある端子とGNDと書いてある端子の二つを導線でつなぐだけです。
ブレッドボードとジャンパーワイヤを買った人は、それらを使うと少し楽にリセットできるでしょう。
リセットできたら、デバイスマネージャーに注目しながら導線を外してみてください。
そのとき、デバイスマネージャーであなたのマイコンを示すポートの番号が少しのあいだ変化するのが確認できるでしょうか?
変化した番号を覚えておいてください。この番号をXとしておきます。
私の場合では、COM6COM5のように番号が変化したため、X6となります。
再びマイコンの二つのリセット端子を繋いだら、いったんそのままにしてPCの方に戻ります。

PCに移ったら、Joystick.hexがあるフォルダ(つまりはmakefileがあるのと同じフォルダ)でPowerShellを起動してください。
起動したら、マイコンへ.hexファイルを書き込むコマンドを打ちます。
ただし、タイピングするだけでEnter実行はしないようにしてください。
コマンドは次の通りです。
avrdude -c avrdude.conf -v -patmega32u4 -cavr109 -PCOMX -Uflash:w:Joystick.hex:i
途中にある -PCOMXXは先ほど確認したCOMポートの番号に置き換えてください。

このコマンドを打っていつでも実行できる状態になったら、またマイコンの方に戻ります。
ここからがいよいよプログラムの書き込みです!以下の要領で書き込みましょう。

  1. マイコンで繋ぎっぱなしになっているRSTGNDを外す。
  2. デバイスマネージャーのCOMポートの数字が変わる。
  3. 数字が変わっている間にPCから打ち込んでおいたコマンドを実行する。

うまくいけばavrdude.exe done. Thank you.という表示が出て、書き込み成功です。お疲れさまでした。

実際に自動化を実行する

いよいよお待ちかねの自動化です。
プログラムは私のコントローラー設定(カメラオプション)に合わせてあるので、あなたのカメラオプションも同じにするとうまくいくでしょう。
※TVモードか携帯モードかは、お使いの状況によって適切な方を設定してください。

項目 設定値
ジャイロ操作 OFF
[R]操作感度 +0.5
[R]上下操作 リバース
[R]左右操作 リバース

自動化を走らせるたびにカメラオプションを切り替えるのが面倒だという場合は、Joystick.cの中身を書き換えてからコンパイル・書き込みの流れをやり直すことで機械操作の挙動を修正することができます。

あとは初期状態のセットです。
手動で深海メトロに入り、メトロ車内でXボタンを押したときにバツチー郡駅にカーソルが合っている状態にしてください。
この状態にするには、一度バツチー郡駅に入ってブキを選択してからすぐに電車内に戻るのがお手軽です。

初期状態ができたらマイコンをSwitchドックのUSB端子に接続!
マイコンには起動スイッチや終了スイッチにあたるものはなく、接続した瞬間からすぐに動作が始まります。
最初はコントローラー(実際にはマイコン)の認識から始まり、やがてプレイヤーキャラが自動的に動き始めたら成功です!
念のため、2周か3周くらいの間はちゃんと自動でクリアできているか見守るのもよいでしょう。

あとはSwitchの電源をオンのしている限りずーーーーーっとバツチー郡駅をクリアし、ポイントがたまるたびに自販機まで行ってポイントの交換をし続けてくれます。
私が試しに計測したところ、おおよそ20分に1度のペースで自販機まで交換しに行きます
たまったポイントが自動的に消費されていくわけなので、どんなに長時間放置しても途中で手を加える必要なしにかけらやチケットが溜まっていきます

自動化を止めたいときは好きなタイミングでUSB端子を引っこ抜いてください。
そのあとプロコンなり何なりを再認識させることで自由に動き回れるようになります。

また自動化を再開したいなあと思ったら、上記の初期状態を自分でセットしたあと、またマイコンをSwitchのUSB端子に接続するだけでOKです。
カメラオプションの変更はつい忘れやすいので注意してください!

それでは良き厳選ライフを!

実際のところ、NAMACOポイントガチャにどの程度の期待値があるのかはわかっていません。
その調査も同時並行で進めているところです。

実は、上記リポジトリのstatisticsブランチでは「ガチャを回したときにスクショを撮影する」操作を追加してあります。
こうしてスクショを貯めておいて、あとから各アイテムの排出率を計算してみようという計画ですね。

ですが、そんなに神経質になることもないのかもしれません。

なんと、私はヒト速のかけらを主に集めているのですが、上記ツイートのように早々とお目当てのかけらが出てきたのです!
これは排出率を計算できるくらいスクショが貯まるまでもなく、アッという間に必要なぶんだけのかけらが集まってしまうかもしれませんね。
2019.10.21 排出率を計算しました→【Splatoon2】"曖昧かつ厳密"な画像認識で8836回のガチャ結果から排出率を計算する
実際にはギアパワーのかけらの期待値はそれほどでもありませんでした😂ドリンクチケット目的で回すのが良いかと思われます。

また、このプログラムにはまだまだ効率を追求できる余地が残っています。
あまり追求しすぎると動作が不安定になったりするので私はほどほどにしておきましたが、さらなる効率を重視する場合はプログラムの書き換えにもチャレンジしてみてください。
それでは良き厳選ライフを!

参考記事

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした