Skip to content

Pokemon sword & shield controller using LUFA Project (AVR), serial communication and video capture for the Nintendo Switch.

License

Notifications You must be signed in to change notification settings

jerrutledge/Poke-Controller

 
 

Repository files navigation

Poke-Controller

Pythonで書く!Switchの自動化支援ソフトウェア

All Contributors

セットアップと使い方

分からないことや改善要望などがあれば遠慮なく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で頂けると非常に喜びます

Pythonファイル管理

作成したコマンドのclassは1つのPythonファイルの中にいくつも記述できます
またPythonCommandsのフォルダ内であればいくつもフォルダを作成可能です
自由に配置していきましょう

実行時のコマンド切替

配置したコマンド群はマウス操作で簡単に切り替えることができます

リロード機能

Poke-Controllerを動作しながらファイルの変更を再読込して反映することができます
こつこつデバグしたい方におすすめ!

画像認識

キャプチャボードでSwitchの画面を取り込めば, シリアル通信だけでは叶わない操作もできるかも
これらもライブラリとして機能を提供しています
self.isContainTemplate('status.png') # テンプレートマッチング

現在の機能(実装内容)は少ないがアップデート予定
リリース前GUI

キーボード操作

キーボードをスイッチのコントローラとして使用することができます

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ライセンスです

Fork元: Switch-Fightstick

マイコンをコントローラに偽装してSwitchと通信を行えるようにするプロジェクト
有名なプロジェクトなので詳しくはそちらのReadmeや解説してくれてるサイトを参照してください

Abstract

ポケモン剣盾の自動化ソフトウェア
マイコンやPythonで書いた自動化コードを抜き差しなくPCで切り替えて操作できます
またマイコンに書き込んだコードはPCとの接続を切っても動き続けます

リリース前参考画像 リリース前GUI

Releases

リリースについて
以降も下記目標までリリースを続けていきます

About this project

AVRマイコンとPC(+キャプボ)を用いてポケモン剣盾における以下の操作の自動化が目的です

  • 非バグ技
    • バトルタワー周回
    • トーナメント周回
    • 卵孵化/厳選/色粘り
    • A連打 > 穴掘り兄弟とか
  • バグ技(日付変更バグ いつか修正されるかも)
    • ワット回収
    • レイド厳選
    • idくじ
    • などなど...時渡り全般

自動化以外の目的としては

  • マクロ作成機能(Pythonコード/マイコン書き込み)
  • PythonコードからのMCU変換
  • 取得情報の記録と通知
  • 不測挙動時の自動停止 など

本プロジェクトではキャプボを使わない動作/軽い動作はマイコン独立で,
それ以外はPCに繋いで動作させるつもりです
既存マクロの切り替えやPCで作成したマクロのマイコン/.cファイルへの書き込みはPCからすべて行う予定

現在実行可能な操作

現バージョンではデバグの効率化/接続用ボタン押下の廃止のために
一番最初の接続ではコントローラの接続画面からSyncを押してStartする必要があります
Poke-Controllerの使い方 ← 準備中

  • MCU

    • A連打
      その名の通りです

    • リーグ自動周回
      発案元 を要参照

    • ワット自動化
      無限ワット対象の巣の200W/2000Wの光は消しておく.
      レイドのある巣を選ぶ場合倒しておくかレイドの無い巣を選ぶ.
      またSwitch側の本体設定で「インターネットで時間を合わせる」をONにしておく.

      1: 「ねがいのかたまり」を巣に投げてレポート書いた後, 話しかけずに待機
      2: .hex書き込み済みのマイコンを接続

      提供元の>>25を参照

  • Python
    <画像認識なし/任意>

    • A連打
      MCU版と同じ

    • リーグ自動周回
      MCU版と同じ
      発案元 を要参照

    • ワット自動化 高速化版(ランクマッチバグ使用)
      無限ワット対象の巣の200W/2000Wの光は消しておく.
      レイドのある巣を選ぶ場合倒しておくかレイドの無い巣を選ぶ.
      ランクマッチに一戦潜る(シングルorダブル)
      Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく.

      1: 「ねがいのかたまり」を巣に投げてレポート書いた後, 話しかけずに待機
      2: Startを押す

    • IDくじ自動化(ランクマッチバグ使用)
      ランクマッチに一戦潜る(シングルorダブル)
      Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく.

      1: ポケモンセンターの機械(ロトミ)の話しかける位置に立つ
      2: Startを押す

    • きのみ自動化(ランクマッチバグ使用)
      ランクマッチに一戦潜る(シングルorダブル)
      Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく.
      自転車からは降りておく

      <画像認識なし>
      野生のポケモンが降ってこない1回目だけ取得して終了し時渡り
      <画像認識あり> Experimental
      画像認識を用いてゆれが強くなったら終了し時渡り
      晴れなどの差分画像の変化が生じにくい天候に調整しておく(日付変更等)
      画面上半分に変化が生じにくい方向を向いておく

      1: きのみを収穫したい木の話しかける位置に立つ
      2: Startを押す

    • シュートシティ カフェ自動化(ランクマッチバグ使用)
      ランクマッチに一戦潜る(シングルorダブル)
      Switch側の本体設定で「インターネットで時間を合わせる」をOFFにしておく.
      Xメニューのタウンマップを左上に移動させてカーソルを合わせておく(Yボタンで入れ替え可能)
      戦闘アニメーションをOFFにしておく
      PPを回復しておく

      必要なポケモン
      マジカルシャインを覚えさせたブリムオン100レベルCS極振り
      マジカルシャインを技構成の一番上にしておく

      ブリムオンよりSが低く戦闘開始時に特性が表示されないポケモン(レベルUP演出省略のため100レベル推奨)
      私はレイド用のHA極振りのニャイキングを使ってます

      1: 上記ポケモンをブリムオン先頭にして2匹だけいれておく(戦うには2匹以上必要)
      2: シュートシティのカフェで話しかける位置に立つ
      3: Startを押す

    • 自動リリース
      <画像認識なし>
      1ボックスすべてのポケモンを逃がします. 空きは不可
      <画像認識あり>
      空いている箇所(空白or卵)があればスキップする
      色違いであればスキップする(後実装で選択式に変更予定)

      プラスボタンで技構成のあるステータス画面を表示するようにしておく
      ボックス内の持ち方を「つうじょう」にする(デフォルトの赤い矢印の状態)

      1: ボックスを開き一番左上のポケモンにカーソルを合わせる
      2: Startを押す


    <画像認識必須>
    現在なし


既存のコマンドは順次移植/追加予定で自作も上げていきます
プルリクエストも受け付けています

コマンドの書き方

必要なコマンドは自分で簡単に書いて追加することができます
MCUとPythonの双方を選択可能ですがPythonを強く推奨します

  • 実時間形式で秒を単位として書くことができます
  • ループや条件分岐を簡単に実装できます
  • ホールド(押しっぱなし)や画像認識を手軽に使用できます

Pythonコマンドの作成

self.press(Button.A, 0.1, 1)
self.hold([Direction.UP, Direction.R_LEFT])
self.isContainTemplate('status.png')
など

画像認識

ポケモン剣盾において便利な画像認識用の機能をメソッドして提供しています
今後もユーティリティを含めて追加していく予定です
詳しくはここを参照してください

  • 実装済み
    • テンプレートマッチング
    • フレーム間差分法(動体検知)
  • 実装予定
    • OCR(文字認識)
    • 特徴量マッチング
    • 動体認識

コントローラ

"Controller"ボタンを押下すると次のような簡易コントローラが表示されます
これらのボタンの押下でUSBを繋いだままの移動や操作に使用できます
またキーボード(コントローラ表示時のみ)でも同様の操作を行うことができます

現在の簡易コントローラUI
簡易コントローラUI

キーボード操作のキー配置

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'キー
左スティック 矢印キー

What you need

こちらに載せています

準備物と使用できる機能の表を用意しました
マイコンのみの場合はGUIによる操作はできません

MCUコマンド GUIコマンド切替 Pythonコマンド
(画像認識なし)
Pythonコマンド
(画像認識あり)
マイコン × × ×
上記+シリアル変換器 ×
上記+キャプチャボード

How it works

こちらの下の方に順番で載せています

上の記事にも同じ画像がありますが実際の接続部分は次のようになります
シリアル変換接続

接続状態
Switch-(USB_A-USB_B)-Arduino Uno R3-(ワイヤ接続)-シリアル変換アダプタ-(USB_micro_B-USB_A)-PC

References

Arduino-Switch間の無限ワットプログラム配布をしてくれた所
マイコン-Switchでの実行はここで教わりました アクセスできなくなったら詳細も載せます
https://medaka.5ch.net/test/read.cgi/poke/1574816324/

キャプボを用いたPC-AVRマイコン-Switch操作の先行者です
NYSLライセンスということで本当に色々使わせてもらってます
Switch版DEAD OR ALIVE Xtreme3 Scarlet (DOAX3S) 自動プレイ

PCからSwitchへの通信のやり方 おいら屋ファクトリー

ATmega16U2へdfu-programmerでカスタムファームを書き込み

PC-ATmegaマイコン-PCを繋いでる プログラムを参考にさせていただきました
https://github.com/ebith/Switch-Fightstick

その他沢山のブログ等を参考にさせていただいています
また本プロジェクトでは自動化コード(それ以外でも)のプルリクエスト歓迎してます!

License

本プロジェクトでは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

About

Pokemon sword & shield controller using LUFA Project (AVR), serial communication and video capture for the Nintendo Switch.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 73.2%
  • C 26.0%
  • Makefile 0.8%