【ポケモンSV】パソコン1台でテラピース自動収集

動機

  • テラピースを50個集めるのが面倒で、とにかく自動化したい。
  • 複数のソフトやマイコン等を使う方法は確立されているが、テラピースさえ集められればよいので、もっとお手軽に実現したい。

手法

オンラインのテラレイドバトルをボタン連打で自動周回する。

注意事項

  • バトル中は基本的にAボタン連打のため、★6レイドなどの高難易度レイドは難しい。
  • そのため、簡単にクリアできるイベントレイド期間中に周回するなど、味方に迷惑がかからないように努める。

必要なもの

おおまかな手順

  1. Linux(仮想)環境を用意する
  2. LinuxにJoycontrolを導入する
  3. レイド周回用のマクロを作成する

Joycontrolとは

ニンテンドースイッチのコントローラをエミュレートし、Bluetooth経由でPCとスイッチが通信できる。

github.com

つまり、PCがコントローラになる。理屈上なんでも自動化可能。

USBドングルが必要なケース

PCの内蔵Bluetoothアダプタが機能しない場合がある。
筆者のMac miniでも機能しなかったため、TP-Link UB400 (Amazonで1000円) を使用した。

後継品のUB500はMac miniに対応していなかった (1敗)

Linux環境構築とJoycontrol導入

こちらのサイトを参照し、"4. 動作テスト" まで完了する。
すでにLinux環境がある場合はJoycontrolのインストールのみでOK。

qiita.com

なお、上記サイトにあるVirtual Box, Ubuntuのリンク先のバージョンは検証時より新しくなっている。
検証当時のバージョンはこちら。

レイド周回マクロ作成

上記の動作テストで使用したスクリプトの中身を書き変える。
ターミナル(端末)を立ち上げて、適当なエディタでスクリプトを開く。

nano plugins/tests/TestControllerButtons.py

一番下のrun関数

   async def run(self):
    logger.info('TEST Controller Buttons Plugin')
        await self.push_all_buttons()
        await self.pushing_button_simultaneous()
        await self.long_press_button()

を以下のように修正する。

   async def run(self):
        while True:
            await self.button_push('x')
            await self.wait(1.0)
            await self.button_push('a')
            await self.wait(0.5)
            await self.button_push('r')
            await self.wait(0.5)
            await self.button_push('a')
            await self.wait(0.5)

0.5秒間隔で X→A→A→R→A の順にボタンを押し続ける。

  • Xでメニューを開いてテラレイドバトルの画面に移動する。
  • Rでバトル中にテラスタルする。

レイドを周回する

事前準備

  • Aボタン連打で勝てるポケモンを用意する。
  • バッグ内のボールを空にする。自動で捕まえてしまうため。
  • おまかせレポートをONにする。通信エラーによるフリーズ対策。

実行

  1. スイッチをインターネットに接続する
  2. メニュー > ポケポータル > テラレイドバトル
  3. スクリプトを実行する
    (01:23:45:67:89:AB は自分のスイッチのMACアドレスに置き換える)
sudo joycontrol-pluginloader -r 01:23:45:67:89:AB plugins/tests/TestControllerButtons.py 

結果

ハピナスレイド最高。