そらとぶタイムアタックを自動化してBPを稼ごう

はじめに

ポケットモンスター スカーレット・バイオレットのDLC【ゼロの秘宝 後編 藍の円盤】で追加されたミニゲーム「そらとぶタイムアタック」の初級を自動化し、BPを無限に生み出すためのプログラムとその解説です.

先駆者として、しゅみるさん@PokeSyumiruの実装がありますが、本プログラムはそれらの飛行ルートを参考にしつつも画像認識によるタイミング制御を入れることでTA成功確率を98.8%まで高めたものになっています.

数日間連続で安定動作したことを確認したので公開します.
参考までに6万BPをノンストップで稼ぎました.

必要なもの

  • マイクロコントローラー
    • arduino, atmega32u4など
  • キャプチャボード
    • 1万以下の安物でOK
  • PC
    • たぶんwindows?macは未検証

動作方法

1.Poke-Controller-Modifiedのセットアップ

本プログラムの動作にはPoke-Controller-Modified( https://github.com/Moi-poke/Poke-Controller-Modified )を必要とします.
↑こちらのセットアップを一読の上で実行できるようにしてください.
筆者はFPS30、ShowSize640x360で実行しています.

2.リソースのダウンロード

そらとぶタイムアタックに必要な画像リソースとコマンドコードはすでにgithubに上がっています.
https://github.com/kosakasakas/PokeConSKS
こちらを丸ごとダウンロードするか、gitとしてpullするなどしてください.

3.リソースの配置

ダウンロードしたリソースをPoke-Controller-Modified内に以下のように配置します.

1
2
3
4
5
6
7
Poke-Controller-Modified/
└─ SerialController/
└─ Commands/
└─ PythonCommands/
└─ ImageProcessingOnly/
└─SKSCommands.py #ダウンロードしたリソース
└─ Template/SKS/ #ダウンロードしたリソース

直接ファイルを置いてしまって問題ないですが、シンボリックリンクを張るようにすると構造をいじらなくて済むので便利です.
シンボリックリンクのやり方はWindowsの場合は以下を参考にしてください.
http://kosakasakas.com/2023/12/25/winsymlink/

4.実行

配置が終わったらPoke-Controllerを起動し、SKSSV_そらとぶTA_初級コマンドを実行するだけです.
以下のように受付前にいる状態で起動してください.

実装簡易解説

プログラムで気になりそうな部分だけ掻い摘んで解説します.

テスト実行

1
2
3
4
5
6
7
def Test(self):
if self.OpenMenu():
self.press(Button.X, wait=1.0)
print('=========================')
print('準備完了')
print('=========================')
return True

これはswitchのコントローラーをプログラムが得るための動作確認みたいなもんです.
一度メニューを開いて開けるかどうかをテストしてます.

最後の旋回

1
2
3
4
# 旋回して無理やりゴールする
self.press(Direction(Stick.LEFT, 0), duration=1.6, wait=0.1)
# ゴールポスト手前で旋回してしまった場合の対策としてもっかいゴール目指して曲がる
self.press(Direction(Stick.LEFT, 180), duration=3.2, wait=0.1)

本プログラムは開始時刻をある程度画像認識で同期していますが、完全にはタイミングが取れないのでときどきズレます.
ズレが大きい場合にゴールポスト手前で曲がりきって逆走を始めることがあるので、旋回して戻ってくる実装でなんとかゴールしようとしています.

結果/精度

以下が500回試行した際のログです.494/500回クリアできているので98.8%の成功率としています.

ラップタイムは一周87~89sといったところです.
1時間400BPは安定して稼ぐことができるでしょう.

さいごに

位置取り/走行ルートなどにまだ研究の余地があるかと思いますが現状安定しているので公開しました.

改良点などインプットがある方いましたらご連絡お待ちしております.
X:@sakas_pokeにお気軽にDMください.