ポケモン剣盾の乱数調整作業自動化


はじめに

ポケモン剣盾の乱数調整作業(+その他)の自動化のためのハードとソフトを作りました.
乱数調整の日付変更の作業などを自動でやりたいという人におすすめです.大量の日付変更(一万回くらい)も可能になります.
多少の電子工作の知識を必要とします.
注意:ここにあるものはすべて自己責任にて行ってください.

モチベーション

  • さびたコイルさん(@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 若しくはその互換
    • 自分はこれを買いました
    • リンク先のものが売り切れているようでしたが,「Leonardo Pro micro」などで調べて出てくるものでATmega32U4が載っているものであればおそらく大丈夫です.(これとか) 手元で確認はしていません.
  • FTDI FT232 (USBシリアル変換)
    • ジャンパ線を使うならこれとか
    • 自分はユニバーサル基板にはんだ付けしたい+USB microBケーブルを使いたかったのでこれ買いました
  • ブレッドボード,ジャンパ線若しくはユニバーサル基板
    • 詳しくは後述
    • ユニバーサル基板を使うならはんだごて,はんだなども必要
  • 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のファームウェアの書き込み

  • 1. Arduino IDEをインストールする
    • ここにアクセスし,JUST DOWNLOADを押す.(お財布に余裕のある方はCONTRIBUTE & DOWNLOAD)
  • 2. Switch操作用ライブラリをインストールする
    • ここにアクセスし,Clone or downloadDownload ZIP
    • ZIPを解凍し,できたSwitchControlLibrary-master[Arduinoがインストールされたディレクトリ]/librariesの中に配置する.
    • 参考
  • 3. Arduino STLをインストールする
    • ここから最新のZIPをダウンロードし,解凍する
    • 2と同様に[Arduinoがインストールされたディレクトリ]/librariesの中に配置する
  • 4. [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を編集する. 参考

  • 5. Arduinoに書き込むファームウェアをダウンロードする.
    • ここにアクセスし,Clone or downloadDownload ZIPして解凍
    • Arduino IDEを開き,PokemonSWSHAutomation-master\arduino_firmware\pokemon_automation_arduino_firmware\pokemon_automation_arduino_firmware.inoを開く.
  • 6. ArduinoをUSBケーブルでPCに接続する
  • 7. Arduino IDEでボードとポートを以下のように選択
    • ポート番号はPCによって変わります.


  • 8. 図に示した書き込みボタンをクリックし,待つ.正しく書き込めたら図のように「ボードへの書き込みが完了しました」というメッセージが出る.

手順3 Switch,PC,Arduinoを接続し,PCプログラムを起動する

  • 1. Switchのホーム画面からコントローラー→持ちかた/順番を変えるに進み,コントローラを待機する状態にする.
  • 2. ArduinoとSwitchを接続する.FT232のUSBポートと間違えないように注意.ファームウェアが正しく書き込まれていればコントローラーとして認識される.
    • このときFT232側をPCに先に繋いでいると給電されている可能性があるため,PCとの接続は切っておいたほうが良い.
  • 3. FT232とPCを接続し,手順2でダウンロードしたPokemonSWSHAutomation-master\PokemonAutomation\PokemonAutomation\bin\Release\PokemonAUtomation.exeを実行する.以下,ソフトの使い方の説明.

使い方説明

  • 初めにポートを選択してFT232に接続する.
    • 他にUSBデバイスをつないでいない場合(COMXが他にない場合)は起動と同時に繋がっている.もし複数ある場合はクリックしてプルダウンし,FT232のポートを選択すると繋がる.
  • 正しく繋がっていれば,コントローラ部分のボタンを押せばSwitchを操作できる.例えばHomeを押せばHome画面へ行くはず.
  • 日付を設定する
    • まずSwitchの設定のインターネットで時間を合わせるをOFFにしておく
    • 今のSwitchの時間をソフトの右上の部分に設定する.クリックしてプルダウンすると年月日が選択できる.日を決定するとその日付に設定される.ボックス下のDateに設定された日付が表示されるので,それで確認する.

日付進めボタン(シード特定用)の使い方

  • まず光の柱が立っている巣穴を選択し,この画面まで進める.

  • この状態から+1 Day +3 Days +4 Daysを押すとそれぞれ1日,3日,4日進む.

    • シード特定では+3 Daysを押しまくることになる
  • このボタンはトグルボタンとなっているので,もう一度クリックすると一連の動作を終えた後停止する.

日付進めボタン(シード特定後)の使い方

  • ランクバトルを行い,対戦を終えた後インターネットの接続を切りローカル通信の状態にする.これでSwitchの日付を変更するとゲーム内で日付が変更された判定となる.
  • コントローラーパネルのボタンを押してこの画面まで進める.
    • カーソルが現在の日付と時刻に合っていることを確認

  • + N Daysボタンの左のボックスに進めたい日付を入れ,+ N Daysボタンをクリックすると,日付の変更が行われる.
    • これをワイルドエリアでやると高確率でポケモンがエラーを吐いて終了するので,ワイルドエリアにいない方が良い.また,それでも落ちる可能性はあるので,小分けにしてセーブを挟んだ方が安全.
  • このボタンはトグルボタンとなっているので,もう一度クリックすると一連の動作を終えた後停止する.

Loto ID(IDくじ)ボタンの使い方

  • ランクバトルを行い,対戦を終えた後インターネットの接続を切りローカル通信の状態にする.
  • ポケモンセンターのロトミの前までくる.Aボタンを押したらロトミに話しかけられる状態にする.
  • その状態でLoto IDボタンを押すと日付を変更し,IDくじを引くことを繰り返す.
  • このボタンはトグルボタンとなっているので,もう一度クリックすると一連の動作を終えた後停止する.

最後に

  • ここに書いてあることを行う場合,すべて自己責任にてお願いします.
  • 説明に抜けがある気がするので,不足している部分やソフトウェアのバグ報告などがありましたら,githubのissueに報告お願いします.
  • 質問はtwitter @chibi314 まで
  • 「自動化」といいつつわりと手動なので,Switchの画面をキャプチャして画像認識にて完全自動化したいですね・・・