はじめに
ポケモン剣盾の乱数調整作業(+その他)の自動化のためのハードとソフトを作りました.
乱数調整の日付変更の作業などを自動でやりたいという人におすすめです.大量の日付変更(一万回くらい)も可能になります.
多少の電子工作の知識を必要とします.
注意:ここにあるものはすべて自己責任にて行ってください.
モチベーション
- さびたコイルさん(@rusted_coil)らがポケモン剣盾用乱数調整ツール 1-Star Seed Searchを公開してくださっているためレイド乱数ができるようになった.
- シード特定のための作業や最後の乱数消費作業はすべて手動でやるのは少し大変なので,自動化したい.
- @SobassyさんがArduinoを使ってSwitchを操作する方法を紹介してくださっている.
- 乱数調整は何種類か操作が必要なので,Arduinoのファームウェアを書き込みなおす必要性がある.それは面倒なのでPCとArduinoを接続してPCのプログラムからArduinoを操作すれば楽になりそう.
概要
- ArduinoはHID化してSwitchにコントローラとして接続できる.このコントローラをPCのソフトウェアから操作したいので,ArduinoのUARTで通信する.
- ArduinoはPCから受け取ったボタン命令をただ実行するだけで,内部に「日付を進める」などの操作を記述しない.操作を作る時,ボタンの間のdelayを調整することになるが,こうすることでいちいちArduinoに書き込む必要がない.
- PC側のプログラムはGUIを作りたかったのでVisualStudioでフォームアプリケーションを作った.
- github https://github.com/chibi314/PokemonSWSHAutomation
必要なもの
- .NET環境のあるWindowsPC (Windows 10を推奨 それ以外で動作確認していないので)
- Arduino Leonard 若しくはその互換
- FTDI FT232 (USBシリアル変換)
- ブレッドボード,ジャンパ線若しくはユニバーサル基板
- 詳しくは後述
- ユニバーサル基板を使うならはんだごて,はんだなども必要
- SwitchとArduinoをつなぐUSBケーブル (A - microB等)
- PCとArduinoをつなぐUSBケーブル (A - microB等)
手順1 Arduino+FT232基板の制作
- Arduino LeonardのUARTをFT232に接続します.
- 図のように接続してください.
- 注意点
- TX, RXはクロスするように接続(TX同士,RX同士を接続しないように)
- FT232側にCTS, RTSなどのピンがあるかもしれないが,何も接続しなくてよい
- ArduinoのUARTの電圧は5Vなので,FT232側で5Vに設定する(5Vと3.3Vを切り替えるスイッチが存在する.ない場合はそもそも5Vのものを買う)
自分は以下のようにユニバーサル基板にはんだ付けして接続しました.
ブレッドボードでもいいですが個人的には場所をとる上に接触不良しやすいのではんだ付けをお勧めします.
手順2 Arduinoのファームウェアの書き込み
-
- Arduino IDEをインストールする
- ここにアクセスし,JUST DOWNLOADを押す.(お財布に余裕のある方はCONTRIBUTE & DOWNLOAD)
-
- Switch操作用ライブラリをインストールする
-
- Arduino STLをインストールする
- ここから最新のZIPをダウンロードし,解凍する
- 2と同様に
[Arduinoがインストールされたディレクトリ]/libraries
の中に配置する
-
-
[Arduinoがインストールされたディレクトリ]/hardware/arduino/avr/boards.txt
を開き,285, 286行目を以下のように変更する.このときメモ帳ではなくVSCodeなどで編集すること。
-
leonardo.vid=0x0f0d
leonardo.pid=0x0092
同ファイルの311, 312行目を以下のように変更する.
leonardo.build.vid=0x0f0d
leonardo.build.pid=0x0092
(追記)boards.txtの場所が違う場合があるらしい.うまくいかない場合,
C:\Users\ユーザー名\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2\boards.txt
を編集する. 参考
-
- Arduinoに書き込むファームウェアをダウンロードする.
-
ここにアクセスし,
Clone or download
→Download ZIP
して解凍 - Arduino IDEを開き,
PokemonSWSHAutomation-master\arduino_firmware\pokemon_automation_arduino_firmware\pokemon_automation_arduino_firmware.ino
を開く.
-
- ArduinoをUSBケーブルでPCに接続する
-
- Arduino IDEでボードとポートを以下のように選択
- ポート番号はPCによって変わります.
-
- 図に示した書き込みボタンをクリックし,待つ.正しく書き込めたら図のように「ボードへの書き込みが完了しました」というメッセージが出る.
手順3 Switch,PC,Arduinoを接続し,PCプログラムを起動する
-
- Switchのホーム画面からコントローラー→持ちかた/順番を変えるに進み,コントローラを待機する状態にする.
-
- ArduinoとSwitchを接続する.FT232のUSBポートと間違えないように注意.ファームウェアが正しく書き込まれていればコントローラーとして認識される.
- このときFT232側をPCに先に繋いでいると給電されている可能性があるため,PCとの接続は切っておいたほうが良い.
-
- FT232とPCを接続し,手順2でダウンロードした
PokemonSWSHAutomation-master\PokemonAutomation\PokemonAutomation\bin\Release\PokemonAUtomation.exe
を実行する.以下,ソフトの使い方の説明.
- FT232とPCを接続し,手順2でダウンロードした
使い方説明
- 初めにポートを選択してFT232に接続する.
- 他にUSBデバイスをつないでいない場合(COMXが他にない場合)は起動と同時に繋がっている.もし複数ある場合はクリックしてプルダウンし,FT232のポートを選択すると繋がる.
- 正しく繋がっていれば,コントローラ部分のボタンを押せばSwitchを操作できる.例えばHomeを押せばHome画面へ行くはず.
- 日付を設定する
- まずSwitchの設定の
インターネットで時間を合わせる
をOFFにしておく - 今のSwitchの時間をソフトの右上の部分に設定する.クリックしてプルダウンすると年月日が選択できる.日を決定するとその日付に設定される.ボックス下の
Date
に設定された日付が表示されるので,それで確認する.
- まずSwitchの設定の
日付進めボタン(シード特定用)の使い方
-
この状態から
+1 Day
+3 Days
+4 Days
を押すとそれぞれ1日,3日,4日進む.- シード特定では
+3 Days
を押しまくることになる
- シード特定では
-
このボタンはトグルボタンとなっているので,もう一度クリックすると一連の動作を終えた後停止する.
日付進めボタン(シード特定後)の使い方
- ランクバトルを行い,対戦を終えた後インターネットの接続を切りローカル通信の状態にする.これでSwitchの日付を変更するとゲーム内で日付が変更された判定となる.
- コントローラーパネルのボタンを押してこの画面まで進める.
- カーソルが
現在の日付と時刻
に合っていることを確認
- カーソルが
-
+ N Days
ボタンの左のボックスに進めたい日付を入れ,+ N Days
ボタンをクリックすると,日付の変更が行われる.- これをワイルドエリアでやると高確率でポケモンがエラーを吐いて終了するので,ワイルドエリアにいない方が良い.また,それでも落ちる可能性はあるので,小分けにしてセーブを挟んだ方が安全.
- このボタンはトグルボタンとなっているので,もう一度クリックすると一連の動作を終えた後停止する.
Loto ID(IDくじ)ボタンの使い方
- ランクバトルを行い,対戦を終えた後インターネットの接続を切りローカル通信の状態にする.
- ポケモンセンターのロトミの前までくる.Aボタンを押したらロトミに話しかけられる状態にする.
- その状態でLoto IDボタンを押すと日付を変更し,IDくじを引くことを繰り返す.
- このボタンはトグルボタンとなっているので,もう一度クリックすると一連の動作を終えた後停止する.