Pythonで書く!Switchの自動化支援ソフトウェア
-
まずはモノの準備
-
準備ができたら進みましょう
分からないことや改善要望などがあれば遠慮なくIssueまで
Q&Aや解決済みIssueなども役に立つかもしれません
簡単に機能を見てみましょう
通常のボタン押下
self.press(Button.A) # Aボタンを押して離す
self.press(Button.A, 0.1, 1) # Aボタンを0.1秒間押して離した後, 1秒待機
左右スティック & HAT(十字)キー
self.press(Direction.RIGHT, 5) # 左スティックを右に5秒間倒す
self.press(Hat.LEFT) # 十字キー左を押して離す
同時押し
self.press([Button.A, Button.B]) # AボタンとBボタンを同時に押して離す
ホールド
self.hold([Direction.UP, Direction.R_DOWN], wait=1) # 左スティックを上, 右スティックを下に倒して1秒待つ
self.press(Button.A) # スティックを倒した状態でAボタンを押して離す
リファレンスやデフォルトのコマンドなども参考にして中身を覗いてみましょう
作成したコマンドや便利な機能はプルリクやIssueで頂けると非常に喜びます
作成したコマンドのclassは1つのPythonファイルの中にいくつも記述できます
またPythonCommandsのフォルダ内であればいくつもフォルダを作成可能です
自由に配置していきましょう
配置したコマンド群はマウス操作で簡単に切り替えることができます
Poke-Controllerを動作しながらファイルの変更を再読込して反映することができます
こつこつデバグしたい方におすすめ!
キャプチャボードでSwitchの画面を取り込めば, シリアル通信だけでは叶わない操作もできるかも
これらもライブラリとして機能を提供しています
self.isContainTemplate('status.png') # テンプレートマッチング
現在の機能(実装内容)は少ないがアップデート予定
キーボードをスイッチのコントローラとして使用することができます
Switchコントローラ | キーボード |
---|---|
A, B, X, Y, L, R | 'a', 'b', ...キー |
ZL | 'k'キー |
ZR | 'e'キー |
MINUS | 'm'キー |
PLUS | 'p'キー |
LCLICK | 'q'キー |
RCLICK | 'w'キー |
HOME | 'h'キー |
CAPTURE | 'c'キー |
左スティック | 矢印キー |
本プロジェクト自体はMITライセンスです
マイコンをコントローラに偽装してSwitchと通信を行えるようにするプロジェクト
有名なプロジェクトなので詳しくはそちらのReadmeや解説してくれてるサイトを参照してください
ポケモン剣盾の自動化ソフトウェア
マイコンやPythonで書いた自動化コードを抜き差しなくPCで切り替えて操作できます
またマイコンに書き込んだコードはPCとの接続を切っても動き続けます
リリースについて
以降も下記目標までリリースを続けていきます
AVRマイコンとPC(+キャプボ)を用いてポケモン剣盾における以下の操作の自動化が目的です
- 非バグ技
- バトルタワー周回
- トーナメント周回
- 卵孵化/厳選/色粘り
- A連打 > 穴掘り兄弟とか
- バグ技(日付変更バグ いつか修正されるかも)
- ワット回収
- レイド厳選
- idくじ
- などなど...時渡り全般
自動化以外の目的としては
- マクロ作成機能(Pythonコード/マイコン書き込み)
- PythonコードからのMCU変換
- 取得情報の記録と通知
- 不測挙動時の自動停止 など
本プロジェクトではキャプボを使わない動作/軽い動作はマイコン独立で,
それ以外はPCに繋いで動作させるつもりです
既存マクロの切り替えやPCで作成したマクロのマイコン/.cファイルへの書き込みはPCからすべて行う予定
現バージョンではデバグの効率化/接続用ボタン押下の廃止のために
一番最初の接続ではコントローラの接続画面からSyncを押してStartする必要があります
Poke-Controllerの使い方 ← 準備中
-
MCU
-
Python
<画像認識なし/任意>-
リーグ自動周回
MCU版と同じ
発案元 を要参照
-
ワット自動化 高速化版(ランクマッチバグ使用)
無限ワット対象の巣の200W/2000Wの光は消しておく.
レイドのある巣を選ぶ場合倒しておくかレイドの無い巣を選ぶ.
ランクマッチに一戦潜る(シングルorダブル)
Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく. -
IDくじ自動化(ランクマッチバグ使用)
ランクマッチに一戦潜る(シングルorダブル)
Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく. -
きのみ自動化(ランクマッチバグ使用)
ランクマッチに一戦潜る(シングルorダブル)
Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく.
自転車からは降りておく<画像認識なし>
野生のポケモンが降ってこない1回目だけ取得して終了し時渡り
<画像認識あり> Experimental
画像認識を用いてゆれが強くなったら終了し時渡り
晴れなどの差分画像の変化が生じにくい天候に調整しておく(日付変更等)
画面上半分に変化が生じにくい方向を向いておく -
シュートシティ カフェ自動化(ランクマッチバグ使用)
ランクマッチに一戦潜る(シングルorダブル)
Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく.
Xメニューのタウンマップを左上に移動させてカーソルを合わせておく(Yボタンで入れ替え可能)
戦闘アニメーションをOFFにしておく
PPを回復しておく必要なポケモン
マジカルシャインを覚えさせたブリムオン100レベルCS極振り
マジカルシャインを技構成の一番上にしておくブリムオンよりSが低く戦闘開始時に特性が表示されないポケモン(レベルUP演出省略のため100レベル推奨)
私はレイド用のHA極振りのニャイキングを使ってます1: 上記ポケモンをブリムオン先頭にして2匹だけいれておく(戦うには2匹以上必要)
2: シュートシティのカフェで話しかける位置に立つ
3: Startを押す
-
自動リリース
<画像認識なし>
1ボックスすべてのポケモンを逃がします. 空きは不可
<画像認識あり>
空いている箇所(空白or卵)があればスキップする
色違いであればスキップする(後実装で選択式に変更予定)プラスボタンで技構成のあるステータス画面を表示するようにしておく
ボックス内の持ち方を「つうじょう」にする(デフォルトの赤い矢印の状態)
<画像認識必須>
現在なし
既存のコマンドは順次移植/追加予定で自作も上げていきます
プルリクエストも受け付けています
必要なコマンドは自分で簡単に書いて追加することができます
MCUとPythonの双方を選択可能ですがPythonを強く推奨します
- 実時間形式で秒を単位として書くことができます
- ループや条件分岐を簡単に実装できます
- ホールド(押しっぱなし)や画像認識を手軽に使用できます
self.press(Button.A, 0.1, 1)
self.hold([Direction.UP, Direction.R_LEFT])
self.isContainTemplate('status.png')
など
ポケモン剣盾において便利な画像認識用の機能をメソッドして提供しています
今後もユーティリティを含めて追加していく予定です
詳しくはここを参照してください
- 実装済み
- テンプレートマッチング
- フレーム間差分法(動体検知)
- 実装予定
- OCR(文字認識)
- 特徴量マッチング
- 動体認識
"Controller"ボタンを押下すると次のような簡易コントローラが表示されます
これらのボタンの押下でUSBを繋いだままの移動や操作に使用できます
またキーボード(コントローラ表示時のみ)でも同様の操作を行うことができます
キーボード操作のキー配置
Switchコントローラ | キーボード |
---|---|
A, B, X, Y, L, R | 'a', 'b', ...キー |
ZL | 'k'キー |
ZR | 'e'キー |
MINUS | 'm'キー |
PLUS | 'p'キー |
LCLICK | 'q'キー |
RCLICK | 'w'キー |
HOME | 'h'キー |
CAPTURE | 'c'キー |
左スティック | 矢印キー |
こちらに載せています
準備物と使用できる機能の表を用意しました
マイコンのみの場合はGUIによる操作はできません
MCUコマンド | GUIコマンド切替 | Pythonコマンド (画像認識なし) |
Pythonコマンド (画像認識あり) |
|
---|---|---|---|---|
マイコン | 〇 | × | × | × |
上記+シリアル変換器 | 〇 | 〇 | 〇 | × |
上記+キャプチャボード | 〇 | 〇 | 〇 | 〇 |
こちらの下の方に順番で載せています
上の記事にも同じ画像がありますが実際の接続部分は次のようになります
接続状態
Switch-(USB_A-USB_B)-Arduino Uno R3-(ワイヤ接続)-シリアル変換アダプタ-(USB_micro_B-USB_A)-PC
Arduino-Switch間の無限ワットプログラム配布をしてくれた所
マイコン-Switchでの実行はここで教わりました アクセスできなくなったら詳細も載せます
https://medaka.5ch.net/test/read.cgi/poke/1574816324/
キャプボを用いたPC-AVRマイコン-Switch操作の先行者です
NYSLライセンスということで本当に色々使わせてもらってます
Switch版DEAD OR ALIVE Xtreme3 Scarlet (DOAX3S) 自動プレイ
ATmega16U2へdfu-programmerでカスタムファームを書き込み
PC-ATmegaマイコン-PCを繋いでる プログラムを参考にさせていただきました
https://github.com/ebith/Switch-Fightstick
その他沢山のブログ等を参考にさせていただいています
また本プロジェクトでは自動化コード(それ以外でも)のプルリクエスト歓迎してます!
本プロジェクトではLGPLライセンスのDirectShowLib-2005.dllを同梱し使用しています
About DirectShowLib
本プロジェクト自体はMITライセンスです
See here LISENCE
-
過去リリース
-
進捗状況の確認
-
ロードマップ
これらの貢献者に感謝します (emoji key):
KawaSwitch 💻 🚧 📖 💬 |
Moi-poke 💻 💬 |
xv13 🐛 |
vyPeony 💻 |
このプロジェクトは, all-contributors仕様に準拠しています. どんな貢献も歓迎します!
本プロジェクトはMITライセンスです
詳細は LISENCE を参照ください
また, 本プロジェクトではLGPLライセンスのDirectShowLib-2005.dllを同梱し使用しています
About DirectShowLib