【解説記事】ポケモンの自動化の歴史と動向【#Switch自動化 】
こんにちは。ますたーです。
今回は「ポケモン自動化」の歴史・動向についての「解説記事」です。
大学生の講義で15週間に分けて説明できるぐらいのボリュームです。講義名は「#Switch自動化 概論 II」とかどうでしょう*1。
「これを読まずしてポケモン自動化の歴史は語れない――」そんな記事を目指して書きました。
Switch自動化ユーザー(特にArduino Leonardoユーザー)にとっては、垂涎モノの「歴史の教科書」としてどうぞ。今回は「図表」が多めです!(文章を読み飛ばす人にも優しい設計!)
※本ブログに初めてお越しの方は「本ブログについて」もぜひ、ご覧ください。
概要
本記事は「ポケモン自動化」の歴史・動向について、筆者なりに俯瞰的に書き記したものです(先人へのリスペクトを込めて読んでいただければ)。
多分、どこよりも体系的なのですが、やはり長いので、論文を読むような気持ちで読んでいただければと思います(そんな大層なものでは無いですが)。
0.はじめに(この記事のコンセプト)
この記事は、プログラムや環境構築方法について詳しくは言及せず*2、よりマクロな視点から「Arduino Leonardoを使った自動化」を中心に解説しています(環境構築は【Arduino自動化01】Arduino開発環境の導入をおすすめします)。
これを読むことで「Switch自動化」の方法論・立ち位置、すなわち、先人(先駆者・開発者)の活動を大局的に知ることができます。
これさえ読めば、あなたも自動化マスター!になれるかも(←怪しい有料教材かな?)
※本記事内容の一部・全部を問わず、内容・画像の無断転用は固くお断りいたします*3。
※このブログ記事では「ATmega32U4」「ATmega16U2」と言った呼称は使わず、それぞれ「Arduino Leonardo」「Arduino UNO」という書き方をしています。
※2022年6月現在において正しい情報を書くよう心がけましたが、筆者の独自調査を含み、期せずして誤りを含む可能性があることをご了承ください。
もくじです。5章構成です。
1章が「ポケモン自動化」の考え方、2~4章が「Switch自動化の歴史」、5章は「応用・発展形として『画像認識自動化』にもフォーカス」してそれぞれまとめています。
各章の最後には「章のまとめ」となる節も入れておりますので、そこだけ読んでも理解が深まると思います。思い思いの部分から読んでいただければ幸いです。
- 概要
- 0.はじめに(この記事のコンセプト)
- 1.ポケモンの「孵化作業」で紐解く「自動化」の歴史
- 2.Nintendo Switchの自動化の歴史【黎明期 編 (2017.3~2017.7)】
- 3.Nintendo Switchの自動化の歴史【Arduino Leonardo 編 (2018.1~2020.2)】
- 4.Nintendo Switchの自動化の歴史【乱立するLeonardo 編 (2020.3~2021.2)】
- 5.「Switchとのインタフェース」としてのArduinoの活用と画像認識
- 6.おわりに
- 参考文献
- 追伸(筆者のコメント)
1.ポケモンの「孵化作業」で紐解く「自動化」の歴史
2022年6月現在、剣盾を皮切りに、BDSP・レジェンズアルセウスなど、様々な「ポケモン自動化」プログラムが日々開発・公開されています。
一方で、ポケモンでの「自動化」の歴史は意外にも古く、実は20年前*4のポケモンルビー・サファイア(第3世代)の頃には「孵化自動化」がすでに確立されていました。そして驚くべきことに、これら自動化の本質は20年間変わらず「コントローラーの代替操作」だったと言えます。
本章では、切っても切れない「ポケモンの『孵化厳選』作業」の側面から、各世代での「自動化」について、詳しく見てみましょう。
1-1.第3世代~第5世代(GBA・DS)は「洗濯バサミ」で十字キーを固定
時代は2002年。ゲームボーイアドバンス用のポケモンソフト「ポケットモンスタールビー・サファイア」が発売されます。ポケモンの「とくせい」の追加、「きそポイント」仕様の刷新ほか、現在の「ポケモン」を形作った作品と言えるでしょう。
当時は現在のようにマイコンは愚か、外部入力できるコントローラーなどは一切ありませんでしたから、「ゲーム機本体を洗濯バサミで固定する」というアナログかつシンプルな方法でコントローラーの操作を代行していました(発売からわずか3ヶ月足らずの2003/2/11には 「ワザップ」で本手法が投稿 されています)。
これらは「坂ダッシュ」や「マッハ海流」などと親しまれ*5、特に後発の「マッハ海流」は、24時間放置で50万ほどの経験値が稼げるため、FRLGやエメラルドが発売されてからも、わざわざレベル上げのためにRSと通信交換をする人もいたそうです*6。
つまり、タマゴの孵化や歩数によるレベル上げなどの作業について、現代で言うべきところの「自動化」を、ハードウェア・ソフトウェアジャック*7一切なしで実現していたと言えます。
そして、この系譜は、GBAからDSにハードウェアが変わった第4世代以降のポケモンタイトルでも受け継がれました。ポケモンDPPt(第4世代)ではタタラせいてつじょ、ポケモンBW(第5世代)ではギアステーション、のように「十字キー固定(=1方向の入力)で孵化歩数が稼げる場所」があることが通例となりました。
言い換えれば、孵化作業の自動化を、開発側も黙認もとい意図してマップ設計をしていたと言えます。当時はレベル上げも大変で、育て屋(現:預かり屋)での入手経験値はプレイヤーの歩数と同値だったため、隙あらば歩数稼ぎが望まれていたことも背景にあるでしょう。
1-2.第6世代(3DS)は「輪ゴム」「バッグクロージャー」でスライドパッドを固定
ポケモンを遊ぶハードがNintendo 3DSに変わった「ポケモンXY」および「ポケモンORAS」でも、この系譜は受け継がれました。
本体がDSから3DSになったことで、コントローラーとしてはスライドパッドが増え、ソフトウェアの容量は256MBから8倍の2GB*8に跳ね上がり、複雑な動きにも複雑なマップ描画にも対応できるようになりました。もちろん、ゲームハードとしても3D表示をデフォルトでサポートしており、例えばポケモンバトルでは、奥行きのある3Dで楽しめるようになりました。
DSから3DSに変わったことにより、ポケモンシリーズも十字キー操作での上下左右の直線的な動きから、スライドパッドによる自由な方向への主人公移動ができるようになりました*9。
これにより操作の自動化も、直線的な動きから360度的な動きを加味した固定(=角度のついた固定)を模索するようになりました。結果として、多数のユーザーは輪ゴムやバッグクロージャー*10に行き着き、スライドパッドでの自動化も見事に達成してのけました*11。
これらも、形こそ十字キーからスライドパッドに変わったものの、1方向の固定で自動化ができる系譜を順当に継いだ結果と言えます。
1-3.第8世代(Switch/Switch Lite)では「わりばし」でJoy-Conを固定
そして2019年11月21日。ポケモンは第8世代、剣盾に突入します。ハードウェアはNintendo Switchになりました。スライドパッドが左右2つに進化したため、左側でプレイヤー操作というベースはそのままに、右側で視点操作という革新的な操作方法を会得しました。当時は、ワイルドエリアに預かり屋があることも相まって、様々な効率化が模索されました。結果、またたく間に2つのJoy-Conのスライドパッドに割り箸を挟む方法が考案されました。
割り箸を挟むことで、左手側を上に、右手側を右にそれぞれ傾けることができ、手軽にその場で無限に周回することができるようになります。
1-4.まとめ:ポケモンの操作「自動化」はすなわち「孵化厳選」の歴史だった
以上に挙げた通り、過去20年間のポケモンの歴史の中で「自動化」の作業とは、すなわち「孵化厳選」のための創意工夫でした。
そして、これらの自動化操作に共通するのは、GBA・DS・Switchなどハードウェアの違いこそあれど「入力をどのように実現・代替するのか?」「どのようにループして動作をさせるのか?」という、今でも受け継がれる「自動化操作」のエッセンスだったと言えます。
ポケモンのレベル上げ(育て屋)や孵化厳選など、単調で長時間の操作をプレイヤーに強いる仕様(別の言い方をすれば「やりこみ」要素)が、この流れを自然と生みだしたのでしょう。
さて、ここで余談をはさみますが、ここまでの内容を踏まえれば、昨今の「マイコンボードを利用したポケモン自動化」の流行に至るまでの道程が考察できます(下図参照)。
上図を要約すると、20年間の孵化厳選の歴史を経たポケモン界隈には「ある制約条件の中で『孵化厳選』を成り立たせる」ためのノウハウが溜まっており、そこに「技術」が流れてきた構図であると言えます。
すなわち、「マイコンボード」や「マクロ対応コントローラー」などの出現により、今までは制約だった「キーの入力」や「移動」などが安易にコントロールできるようになったことが、この自動化のブレイクスルーと考えられます。
いずれにしても、この20年間は、孵化厳選と共に「プレイヤーの操作を自動化・省力化する文化」がポケモン界隈には根付いていたと考えられ、それ故に「マイコンボード」も徐々に受け入れられつつあるのでしょう*12。
まとめると、ポケモンの操作「自動化」は、孵化厳選の歴史そのものであり、20年間地続きだったと言えます。
2.Nintendo Switchの自動化の歴史【黎明期 編 (2017.3~2017.7)】
続いて「Nintendo Switch」本体を取り巻くハードウェアと、その自動化についてです。
ゲーム機としてのSwitchの歴史とその解析結果などを織り交ぜつつ、ポケモン自動化に至るまでの「Switch操作」の自動化との関係性について、時系列に見ていきます。
2章では、Switch自動化の「黎明期*13」とも言うべき「2017年3月~2017年7月」について記します。
2-1.Nintendo Switch発売当初のリバースエンジニアリング
2017年3月3日には、任天堂より「Nintendo Switch」が発売されました。当時としては「据え置き型」「携帯型」の両側面を持つこのハードウェアはまさに「異色」の存在で、賛否両論でした。
賛否両論と書きましたが、当時は「否」寄りの意見が多かったと記憶しています(何を隠そう当時の私も「否」寄りの人間でした)。当時は「白猫プロジェクト」*14などのスマホゲームが大ヒット中で、前身となる据え置き機「Wii U」が失敗作と酷評されており、新型機にも関わらずSwitchと同時発売のローンチタイトルが8種類と少なかったことなど、複合的に向かい風な状況だったと言えます。
もっとも、悪評・向かい風は発売日までの話で、2017年4月、すなわち2017年3月期の決算短信では、世界で274万台販売という実績が公表されており、結果的には成功だったということは含みおく必要があります。
さて、この記念すべきNintendo Switchの発売日ですが、海外の開発者を中心に、解析コミュニティも盛り上がりました。
例えば、翌日3/4にはRedditで解析スレッドが立ったり、1週間後の3/10にはコントローラー(Joy-Con)の動作についてリバースエンジニアリングした結果がGitに公開されたりしました*15。
海外のみならず、日本国内においても4Gamer.netによる分解レポートが3/6に公開されており、Joy-ConおよびSwitch本体に含まれるセンサ類や基盤の役割の推測なども行われました。
またネットワーク関係では、Nintendo Switchの内蔵Webブラウザ「NetFront Browser NX」に使用されていたWebKitに脆弱性があることが3/11に発覚*16、これを応用した解析により、3/14にはシステム内で使用されている関数の呼び出しまで実現してしまいました(PegaSwitchという名前でExploit KitとしてGitに公開され、瞬く間に広がりました)。
これらのように、Switchは発売当初から様々な解析コミュニティが盛り上がり、ハードウェア・ソフトウェア(シェルを含む)の解析が進みました。
一方で、しばらく「操作の自動化」や「コントローラーの模倣」については、芳しい進捗はなかったように思われます(もっとも、発売から間もない時期なのでどちらかと言えば基礎に近い解析を行っていたと考えるのが筋ですが)。
そして発売から3ヶ月が経過する2017年6月20日。「操作の自動化」において転機が訪れます。有線接続でのリバースエンジニアリングに大きな変革がもたらすアップデートが公開されたのです*17。
2-2.Nintendo SwitchのVer3.0.0公開で、USBコントローラーをサポート
発売から3ヶ月あまりが経過した2017年6月20日。Nintendo Switchのメジャーバージョンアップが行われ、ファームウェアバージョンが「3.0.0」になりました。
ファームウェアのバージョン3.0.0では「他社製のコントローラー(任天堂ライセンス商品)に対応しました。」という謳い文句のもと、ライセンスされたUSBコントローラーに対応するアップデートが行われました。これはすなわち、USBのHIDクラスでの操作をSwitchがサポートした、ということです。
語弊を恐れずに言い換えると、それまでは「USBのカタチをしただけの穴」「実質プロコン用の充電端子」でしかなかったSwitchドックの側面USBポートが、このアップデートで「USBデバイスを接続・認識するための端子」に生まれ変わったということです*18。
2-3.Wii-U用コントローラー「Pokken Tournament Pro Pad」とリバースエンジニアリング
さて、2017/6/20にSwitchのファームウェアがver.3.0.0にアップデートされ、「ライセンスされたUSBコントローラー」であるHORI*19製の一部コントローラーも使用できるようになりました。中でも、Wii U用のコントローラー「Pokken Tournament Pro Pad」は、アップデート後すぐさま海外の解析勢に非常に着目されることになります。
なぜならば、解析勢にとってこれまでリバースエンジニアリングの対象としてきた「Switch Proコントローラー」を直接扱わずとも「Pokken Tournament Pro Pad」の解析をすればSwitchの操作を代替できるということだからです*20。解析リソースを、Switch本体とコントローラーの両方に割かなければならなかった解析勢にとって、このアップデートはまさに僥倖だったと言えます。
このような経緯で「Pokken Tournament Pro Pad」は、Switch操作のハックを行う上で重要な役割を担うことになりました。
しかし「Pokken Tournament Pro Pad」には「アナログスティック」が無いため、これについては別途解析をする必要がありました。そんな課題を克服するべく、他社製ハード「PlayStation 3」のコントローラーに白羽の矢が立ちました。
2-4.Wii-UとPlayStation 3の奇跡の出会いが、Switchの自動化を実現した
ここで、「Pokken Tournament Pro Pad」の興味深い特徴・奇妙な部分を紹介します*21。
「Pokken Tournament Pro Pad」は、御存知の通り先代の任天堂ゲーム機「Wii-U」のためのコントローラーですが、実はSonyの「PlayStation 3」も操作することができます。文字通りプラグ・アンド・プレイ、すなわちなんの準備もいらず挿し込むだけで使うことができるそうです*22。これは、Pokken Tournament Pro Padから送信されるUSB信号が、PS3コントローラーと互換する*23ということを意味します。ただし、その一方で、PlayStation 3用のコントローラーはSwitchで認識しません。
この「PS3と同等の操作信号でSwitchが操作できているはずなのに、PS3用のコントローラーではSwitchを操作できない」という、奇妙な食い違いこそが、SwitchのUSB操作に対するリバースエンジニアリングの糸口となりました。
この奇妙な食い違いを比較・分析しつつWii-Uにはなかったアナログスティック操作やCaptureボタンなどの差分を吸収し、Proコントローラーの代替を実現することを目的に、デバイス記述子やベンダー情報をリバースエンジニアリングするスレッドがGitHubにて2017/6/22に公開されました。
それを皮切りに、海外では解析が進み、約3ヶ月後には左記からフォークされたプロジェクトとして、ついに、「arduino」や「Teensy++」を使って実際にゲーム操作のジャックするプログラムが公開されます。特筆すべきは、同プロジェクトでは、Splatoon 2でのドット打ちでの活用が既に成されていたことでしょう。これはSplatoon2のプレイヤーの中で大きな話題となり、これを契機にSwitch自動化に踏み出すエンジニアも多く登場しました。
なお、2017/9/2にフォーク・公開されたこちらのGithubリポジトリですが、現在では「Arduino UNOにはDFUモードでのプログラム書き込み」「Arduino microにはIDE経由でのプログラム書き込み*24」といった、こんにち日本で流行している「Arduinoを使ったSwitch自動化」の方法論についても言及されており、素地がすでに完成していた、とも言えます*25。
これらのリポジトリについては、日本でもしばしば話題となっており、公開されてからまもなく成功報告や導入記事も公開され、日本においてもSwitchの自動化に対する素地が徐々に固まっていったと言えるでしょう。
-
Teensy 2.0 ++での成功報告(2017/8/19):Splatoon2で自動ドット打ちしてくれるやつ試した - しゅみぷろ
-
Arduino Microでの成功報告(2017/9/13):splatoon2用ドット打ち機(Switch-fightstick, atmega32u4) - takashiskiのブログ
2-5.Arduinoによる自動化の黎明期(2017.3~2017.7)のまとめ
ここまでをまとめると、Switch発売からわずか4ヶ月、USB対応のアップデートから起算すると「1ヶ月」という極めて短い時間でSwitchの自動化が完成していたと言えます。
この中で、特筆すべきはWii-U用のポッ拳コントローラー(Pokken Tournament Pro Pad)の対応でしょう。HIDとVIDをこのHORIデバイスに偽証し成り代わるという発想は、今後のArduinoを使った自動化において完全にコアとなっている部分です。
また、発端となったマイコン「Teensy++」にはHIDが搭載されていなかったことから、LUFA(Lightweight USB Framework for AVRs)によるJoyStick化を余儀なくされ、DFU(デバイス・ファームウェア・アップデート)モードによるプログラム書き込みを行っていることも特徴的でしょう。
ここまでで分かりますが、2022年現在において一定層に浸透した「Arduino UNO」を利用したポケモン自動化は、歴史的に、ここまでの系譜を順当に受け継いだ流れだったと言えます。
一方、私のブログで紹介している「Arduino Leonardo」を使ったポケモン自動化が萌芽するには、さらにここ(2017/9)から約1年の歳月を要します。ここからは、主にそちらのお話になっていきます(なお、同じくATmega32U4を積んでいるArduino microでの成功報告があるにも関わらず、Leonardoでの成功報告がないのは、そもそもコンセプトが違うためです)。
3.Nintendo Switchの自動化の歴史【Arduino Leonardo 編 (2018.1~2020.2)】
2章ではSwitch自動化の黎明期(2017.3~2017.7)すなわちSwitch発売からの4ヶ月間の歴史を振り返りました。「Teensy++2.0」による自動化の成功が特徴でしたね。
本章では、HIDの機能を持つArduinoによる自動化、すなわちArduino Leonardoを使った「Nintendo Switch」の自動化について歴史を紐解いていきます。
3-1.Arduinoで動かすためのHID記述子ハックの試み
2018/1/9に、GitHub上で「pedroslopez/Switch-Arduino-Joystick」が公開されました。本リポジトリは、Pokken Tournament Pro PadについてHID*26記述子についてのリバースエンジニアリングと、これをベースにしたHIDをサポートするArduino(すなわちArduino LeonardoやArduino micro)でSwitchの操作ができるようにするためのライブラリ作成のためのものでした。
特に着目すべきは、既存の「Teensy++2.0」や「Arduino UNO」向けのアプローチとは異なり、「HIDデバイスとしてArduinoを利用する」というコンセプトの部分です。これは、すなわち、Pokken Tournament Pro PadのHID Report Descriptor(=HID記述子)をそのまま模倣してレポートとして送信することで、本物のコントローラーと同等(=ネイティブ)な操作をArduinoで実行できる、ということになります。
本リポジトリは、当時の主流(というか確立されていた自動化方法)であった「AVRとしてマイコンボードを使う」自動化とは一線を画すコンセプトとも言うべき、「純正のArduinoの機能(HID)でSwitchを動かす」という非常に革新的な取り組み*27でした。
しかしながら、結果的には製作者の多忙などの理由により完成には至らず、残念ながら構想で終わってしまいました。
3-2.Arduino用ライブラリ「SwitchControlLibrary」が登場
さて、ついに本ブログで利用しているライブラリが登場します。
2018年12月29日、celclow氏*28が、上記のpedroslopez氏のGitを参考に、HIDクラスにおけるSendReport()関数内でUSBに送信するデータ列を、ポッ拳コントローラーのHID Report Descriptorに揃えて修正することで、Switchの操作ができたことを自身のブログで報告しました。そして、年が明けた2019年1月14日、同氏がライブラリとして全面ソースコードの書き直しを行い、「SwitchControlLibrary」としてGitに公開されました( celclow/SwitchControlLibrary)。
当時常識だった「DFUモードでのArduinoへのプログラム書き込み」を必要とせず、環境構築も通常のArduino IDEのみで完結することもあり、このライブラリの登場はまさに「画期的」でした。…が、しかし、当時はあまりにも先進的(異端)だったのか、はたまた需要がなかったのか、あまり着目されませんでした。
何より、当時のゲームタイトル(Splatoonやゼルダの伝説、ゼノブレイドなど)には、既に別の方法での自動化が進んでいたこともあり、わざわざ新しい環境での開発を行うメリットが薄かった、というのはあるかもしれません。
それを裏付けるかのように、ポケモン剣盾が発売された2019年11月15日を境に、本ライブラリはだんだんと注目されていきます(何を隠そう、筆者もそのうちの一人です)。もっとも、ポケモンの発売によって自動化にチャレンジする人口が絶対的に増えたことが、因果としては正しいのかもしれませんがね。
なお、余談ですが、pedroslopez氏のGitのライセンスMITを継承してか、このライブラリはMITライセンス下での公開となっていた点も、非常にデベロッパーフレンドリーだったと考えます*29。
ちなみに、余談続きですが、2022年6月現在においても本ライブラリを利用したプログラムは多数公開されており、名実ともにSwitch自動化に大きな役割を果たしていると言えます。変わりどころでは「電車でGoマスコン」の変換器や、PS4専用「DIVAコントローラ」の変換器など、ハードウェア自作にも大いに役立っているようです。
3-3.最新作「ポケットモンスター ソード・シールド」の発売と「無限Wバグ」の発見
そして時は2019年11月15日。ポケモンはシリーズでの完全最新作・第8世代として「ポケットモンスター ソード・シールド」(ポケモン剣盾)が発売されます。
ポケモン剣盾では「ワイルドエリア」のようなオープンワールドライクな空間表現や、巣穴によるプレイヤー連携レイドバトルの登場、そして忘れてはならない「ダイマックス」など、新要素がふんだんに追加されました。
さて、ポケモンに限らずですが、シリーズ作品の新作での「新要素」というのは、得てして発売日にバグ技や裏技が見つかるもので、その例に漏れずポケモン剣盾でも様々なバグ技が発見されました。それは「巣穴での無限W(ワット)稼ぎ」です。
この「日付変更バグ(あえて当時の感覚でバグと呼びます)」について、当時は非常にセンシティブな話題で、仕様として容認する派閥と、バグとして否定する派閥の2つに分断されていたことが記憶に新しいです(2022年現在では大手ゲーム攻略サイトAppMediaでも「日付変更バグ」として取り上げられており、一定の市民権を得た仕様だともいえます)。
さて、この無限W稼ぎですが、その手順はシンプルかつ極めて機械的で、わずか5ステップで実現できてしまいます。
- 巣穴に「ねがいのかたまり」を投げ入れる
- 「みんなで挑戦」を選択する
- ホーム画面に戻って「設定」→「本体」→「日付と時刻」を選択する
- 日付を1日進める
- ゲームに戻って「やめる」を選択する
この頃には、Arduinoを使った自動化はUNO/Leonardoともに「Home」ボタンにも対応していましたし、上述の通りシンプルな操作だったこともあり、自動化界隈では、5ch(旧2ch)を中心に話題となりました。2019年11月27日には、5chで「【剣盾】無限ワット自動化スレ」としてスレッドが出来上がり、これを機に「マイコン」を知る人も増えてきたと言えます。ただし、この当時は、まだまだ「Arduino UNO」を利用するタイプの自動化が主流だったこともあり、Leonardo用のライブラリを用いた実装報告は指折り数えるほどしかありませんでした。
そして、2019年12月27日には、九州大学のプログラミングサークルのメンバーが、Qiitaにて「ワット稼ぎ」の自動化成功の報告を挙げています。このときに利用されていたマイコンこそ、今のLeonardo系の自動化で有名になった「HiLetgo Leonardo Pro Micro」です。互換機とは言え、れっきとしたArduino Leonardoを使った自動化の成功報告です。私自身、この成功報告を参考にして実装したので、頭が上がりません。
これを皮切りに、Arduino Leonardo系列でのSwitch自動化はさらに勢いを増していくことになります。
3-4.Arduino用ライブラリ「NintendoSwitchControll」が登場
2020年1月14日に突如、interimadd氏・takeutchi氏・kurimoun氏の3名により、Arduino Leonardo用のライブラリ「NintendoSwitchControll」がGitに公開されました( interimadd/NintendoSwitchControll)。
この公開の前日1/13には、interimadd氏(Twitter:みがわり氏)が自身のTwitterで孵化作業の自動化成功の報告を挙げており、翌日の1/15には自身でQiitaに「ポケモン剣盾の孵化作業をArduinoで完全自動化する」として投稿しており、ライブラリの公開前後3日間は特に話題となりました。
本ライブラリにはサンプルコードとして「自動孵化」「自動逃し」などのポケモン剣盾用のサンプルが同梱されており、ダウンロードするだけですぐに使うことができました。「開発」をしないユーザー目線で見れば、これ以上無いくらい「親切」なライブラリ公開だったことは特筆すべきだといえます(自動化にチャレンジする敷居がぐっと下がるので)。
また、こちらはArduino STLの導入も不要であり、「外部依存が少ないシンプルな構成」となっている点もユーザー目線には嬉しい部分でしょう。2022年現在においても、本ライブラリを利用したプログラムが多数公開されており、Switch自動化には大きな役割を担ったライブラリと言えます。
ただし、公開当初から丸2年経過した2022年5月30日現在においても、本ライブラリの「利用ライセンス」は明記されておらず、デベロッパー目線では著作権絡みで少々”使いにくい”ライブラリである点は注意が必要でした*30。
※2023年2月1日追記:2023年1月28日、当該ライブラリは、みがわり氏が自身のTwitter上で「MITライセンス」表記として明記したことで、著作権絡みでの懸念は晴れました
3-5.筆者(ますたー)がSwitch自動化に成功する
ここで、ついに私が登場します*31。
2020年1月28日、私が大学時代に所属していた音楽サークル*32の後輩が「IDくじ」を無限に引いている様子をTwitterで公開しており、その投稿を見るやいなや、私はその場でArduino LeonardoをAmazonでポチりました(行動が早い)。
そして2020年2月2日、筆者がSwitchの自動化に成功しました(Twitter投稿)。私の自動化人生のはじまりです。
当時お気に入りだったビジネス用ノートパソコン「Let's note*33」とArduino Leonardoをつなぎ、これまた当時お気に入りだった「限定カラーのSwitch Lite」を使って、自動化している様子を動画に撮っていました。
このときこそ、私がArduino Leonardoを触る初めての機会となり、前述のcelclow/SwitchControlLibraryを触る初めての機会でした*34。
今思えば、このときの成功体験が本当に嬉しくて、このブログを立ち上げようと発起した時も「如何に『楽しく』自動化にチャレンジができるのか」という感動を伝えたいという衝動が抑えきれなかったのかもしれません。現に2022年6月になっても本ブログを更新しているわけですしね。
なお、当時に実装したソースコードは下記の通りです(公開に合わせて色々変更を加えております)。
3-6.Arduinoによる自動化のArduino Leonardo 編 (2018.1~2020.2)のまとめ
さて、3章(2018.1~2020.2頃)の動向をまとめます。
2018年に入り、Switchの自動化に新たな風として「Arduino Leonardo用のライブラリの登場」「ポケモン剣盾の発売」の2つが大きなターニングポイントでした。
特に、celclow氏によるライブラリ化は、Switch自動化界隈において、非常に重要な活動だったと考えます。
同氏のライブラリについて、デベロッパー目線で特筆すべきは「ライセンス」の明記があったことだと思われます。特に、ライブラリを書き換えて利用したり、別ハードウェアとの連動を考えた場合、「ソースコードの権利」はどうしても避けて通れない問題です。同氏のライブラリでは「MITライセンス*35」が明記されており、広い開発者に受け入れられたのだと思われます。結果として、「ポケモンの自動化」以外に「コントローラー変換コネクタの自作」など幅広い利用用途で多数の利用者に活用・紹介されました。
そして迎えた2019年11月15日のポケモン発売は、この「Arduino LeonardoによるSwitch自動化」の認知を広げました。もちろん、発売当初は従来のArduino UNO用のプログラムが大多数を占めていましたが、徐々にArduino Leonardoによるプログラムも普及していきます。
後発のライブラリ「NintendoSwitchControll」については、もともと同梱されていたサンプルに「ポケモン剣盾」用のものが同梱されていたことも相まって、Arduino Leonardo利用での「ポケモン自動化」の普及に一役買ったと言えます。
上記を振り返ると、2018年1月~2020年2月までの自動化界隈では、Arduino UNOを利用した自動化に追随する形でArduino Leonardoでの自動化が着々と歩を進めた構図となります。その火付け役となったのは、やはりポケモン剣盾の発売でしょう。
しかし、当時こそ問題となりませんでしたが、こと「Arduino Leonardoを使った自動化」については、同じ目的で機能も名前も類似するライブラリが2つも登場しているという点で、新たに自動化にチャレンジする人には混乱を一定招きました。次章ではこれについて説明していきます。
4.Nintendo Switchの自動化の歴史【乱立するLeonardo 編 (2020.3~2021.2)】
2章・3章ではそれぞれ、「自動化の黎明期(Arduino UNO自動化)の先駆け」および「Leonardo自動化」について時系列に追いかけてきました。4章では、特に「Arduino Leonardo」での自動化に着目して紹介していきます。
「乱立するLeonardo編」と題している通り、Arduino Leonardoを使った自動化は、利用できるライブラリが複数提供されており、しかも解説記事ごとにこれらが異なるという混沌とした状況になります*36。
このあたりの、Leonardoにおける「ライブラリの派生」や「解説記事・ブログの乱立」などに焦点を当て、歴史的にどういう経緯なのかを解き明かします。
私のブログも登場するのでお見逃しなく!
4-1.Arduino Leonardo用ライブラリの登場当時と5chの反応
まずは、3章と内容が一部重複しますが、Arduino Leonardo用のライブラリが登場・認知されはじめた頃について振り返ります。
Arduino Leonardo向けにライブラリとして最古のものは2019/1/4に公開された、celclow氏による「SwitchControlLibrary (ver1.0.0)」でしょう。同氏によるライブラリは、Arduino Leonardoを用いたSwitch自動化の紛れもないルーツとして、ひいてはSwitch自動化の普及において、一役買ったと言えます。そしてその約1年後、新たなライブラリとして、みがわり氏が2020/1/14に「NintendoSwitchControll」を公開します。
-
2019/1/4公開:GitHub - celclow/SwitchControlLibrary
-
2020/1/14公開:GitHub - interimadd/NintendoSwitchControll
当時「Arduinoを使ったSwitch自動化といえば『Arduino UNO』を利用したものが”スタンダード”だった」ということもあり、Arduino Leonardoを用いたものはそもそも普及していませんでした。そのため、そもそも「ライブラリが2つあること」があまり認識されておらず、区別・比較されることもなかったように思います。
ゆえに、登場当初~2020年初頭頃において、Leonardo用のライブラリの利用者の多くは「当時の主な自動化コミュニティ(5ch)の外側の人たち」すなわち、Arduino UNOによる自動化の存在を知らない人だったと思われます*37。
これに関して、やや逆説的な論拠ですが、Arduino Leonardoを使う手法について5chで言及され始めた初期の頃はかなり冷遇的な対応で、スレ民からすれば、興味関心ともに排他的だったことも伺えます(一方、後発のライブラリ「NintendoSwitchControll」については、みがわり氏による成功報告がTwitterで注目され、肯定的な反響が見られました。5chとTwitterでのコミュニティとしての違いやバックグラウンドの違いはあるかもしれません)。
下記は、5chのポケモン自動化界隈で(おそらく)初の、SwitchControlLibraryを話題にした投稿です。内容としてはSobassy氏によるSwitchControlLibraryの解説記事が紹介されてますね。
351 名無しさん、君に決めた! (アウアウエーT Sa3f-pIXJ [111.239.167.18]) 2020/01/03(金) 05:27:11.76 ID: uT0fioTLahttps://qiita.com/sobassy/items/cb707e50f2f27a851886
全く違うライブラリになっちゃうけど、誰かこれ試してみてほしい。 記事同様Arduino Leonardo互換機では成功した。354 名無しさん、君に決めた!(アウアウカー Sacf-BdgP [182.251.31.251]) 2020/01/03(金) 14:05:35.03 ID: X+aoLcw7a>>351>>353
自演してまで他の奴にやってもらうよう仕向けるとか死ねよ355 名無しさん、君に決めた! (ワッチョイ fb10-E95m [106.168.52.230]) 2020/01/03(金) 14:06:51.03 ID: 2hKEB0AX0「記事同様Arduino Leonardo互換機では成功した」って言うんだから試す必要まったくないんだが
”2chならでは”の殺伐としたレス内容に目が行きがちですが、着目すべきはこれらの投稿日時。Sobassy氏が解説記事を執筆したのは2019/12/27ですから、ほぼタイムリーに自動化スレに取り上げられていることがわかります。
当初こそ排他的なレスが多かったものの、時間が経つに連れて、生産的・建設的なレスもいくつか付くようになり(特に同スレの>>452など)、5ch内でも「Leonardoでの自動化」は広がっていきます。
そしてわずか3週間後(2020/1/26)には次スレが建ち、>>4には「■IDEを使った方法」として掲載されるまでに至りました。ただし、やはりLeonardoを使った自動化は少数派で、Arduino UNOを使ったものが中心だったとも言えます。
4-2.Arduino LeonardoによるSwitch自動化を扱う3つのブログの登場
さて、Leonardo用のライブラリ2種(SwitchControlLibrary・NintendoSwitchControll)が公開されてからというものの、5chは次のスレッドが建たないまま半年が経過し、Switch自動化(特にLeonardoによる自動化)は鳴りを潜めていきます。
そんな折、文字通り「三者三様」に「Arduino Leonardoによる自動化」を扱うWebサイトが公開されていきます。ここでは時系列(登場順)に紹介します。
レフマーナ氏による「ポケモニット」
2020/9/23に、レフマーナ氏が運営するポケモン専門ポータルサイト「ポケモニット」でSwitch自動化が取り上げられます。
Windowsが前提で説明されているサイト・記事が多いなか、「『Macユーザー向け』のLeonardo利用Switch自動化」という側面で情報を補完した当該記事は、今日のSwitch自動化において新たな層が参入するきっかけづくり・火付け役になったと言えるでしょう。
本ブログは広くポケモンの解説・構築に関わる攻略情報があったことも相まって、一般ユーザーへの「Switch自動化」の認知拡大において一定の効果があったと考えられます。
ちなみに、本記事で利用しているライブラリは「NintendoSwitchControll」でした(過去形*38)。
筆者による「ますたーの忘備録」
続いて、2020/11/7には、筆者が本ブログ(ますたーの忘備録)を立ち上げます*39。ちなみに本ブログ初の更新内容こそ、2022年6月現在においても本ブログで最もアクセス数が多い「環境構築」記事であり、本ブログの根幹と言っても差し支え無いでしょう。
他のブログと比して、私のブログが特徴的なのは「ソースコードの全文掲載」および「GIFアニメによる動作イメージの掲載」でしょうか。これにより「ポケモン自動化に興味の無かったプログラマの取り込み」および「堅苦しいイメージを持たれがちな自動化を視覚的に理解しやすく変換」ができていたと思います。
使用しているライブラリは、ご存知のとおり「SwitchControlLibrary」です。
ブログ作成の翌日2020/11/8には、Switch自動化の方法論や、Leonardo向けのライブラリが2種類あることを紹介する記事も執筆し、当時混沌とし始めた「複数のライブラリが提供されている」という情報をいち早く整理しました。
ミドリカワセミ氏による「苔むした日記帳」
そして、2021/2/10には、ミドリカワセミ氏が自身のブログ「苔むした日記帳」を公開します。本ブログは、俯瞰的に見れば、当時まだまだマイナーだったLeonardo自動化を一般に広く認知・参入させるポテンシャルを持っていたと言えます*40。
また、比較的安価な「互換機」の積極的な紹介(=環境構築の単価を下げる工夫)や、サンプルソースコードの「ino形式」での配布など(=コピペすら不要)、初心者が参入するための敷居を極力下げる工夫が随所に見られました。
ちなみに、本サイトが利用しているライブラリは「NintendoSwitchControll」です。
上記これら3つのWebサイトについて、簡単に特徴をまとめたものが下図となります。
要するに、「ますたーの忘備録」「ポケモニット」「苔むした日記帳」それぞれで別々のライブラリを使っており、それぞれが思い思いの自動化を解説・公開した結果として、それらが互いに「補完する形」で現存している、という構図です。
それぞれの利用ライブラリが異なるという特徴も「一つのライブラリに依存していない」という点において「リスクヘッジ」になっていると言えます(なにかの拍子にいずれかのライブラリ提供・ブログ閉鎖などがあった場合にも、代替手段が講じられるということですし、ライブラリ導入に失敗しても残り2つで補完できるかもしれないということ)。
4-3.Arduino Leonardo用ライブラリの増加
さて、Switch自動化を扱う主要なブログ3つを紹介しましたが、それぞれの執筆時点において「Leonardo向けのライブラリ」はわずか2種類でした。
しかしながら、時が経つにつれて、ここにバリエーションが出てきており、2022年6月現在は3種類(バージョン違いを含めると4種類)にもなります。これがLeonardoによる自動化に「今からチャレンジ」する人を混乱させる原因とも言えます。
本節では、上記2種類の後続となるライブラリ2種類について、時系列に解説します。
■「SwitchControlLibrary (ver. 2.0.0)」の登場
まず、2021/1/24、celclow氏が自身が公開するライブラリ「SwitchControlLibrary」をメジャーアップデートし、Version2.0.0としてGit上に公開しました。
「SwitchControlLibrary Version2.0.0」では、ボタン操作周りの関数の仕様が改められ「同時押し」の概念が新設されました。また、USBのコマンド送信が明示的にsendReport()関数として実装されたため、Version1.0.0と比較して、より複雑なSwitch操作を、プログラムでは簡単に書くことができるようになりました。
2021/9/1には、2019/12/27にver1.0.0の動作報告を率先して行っていたSobassy氏がver2.0.0でもQiitaに「Nintendo Switch自動化 【2021年9月最新】」として公開しており、同一人物による検証報告が挙がった点も安心できるポイントと言えます。また、同記事では新しく購入したMacでのSwitch自動化導入を行っていることから、内容補完としても優れた記事でした。
しかし、この「SwitchControlLibrary Version2.0.0」では、内部の関数などが一新されたことにより下方互換性が一切無く、「Version1.0.0とは別物」のライブラリとして扱わざるを得ません(本ブログ目線は当面、Version1.0.0を使う「つもり」ですのでここは重要です)。
ちなみに、このVersion2.0.0は定期的にアップデートされており、2022/6/12現在はver. 2.0.2が最新版となります。
■「NintendoSwitchControlLibrary」の登場
上記ver2.0.0の登場からわずか1ヶ月足らずの2021/2/11、さらに新しいライブラリが登場します。その名も「NintendoSwitchControlLibrary」。
「NintendoSwitchControlLibrary」は、その名が冠する通り「NintendoSwitchControll」と「SwitchControlLibrary」を、足して2で割ったようなライブラリです(よくできたネーミングですね)。作成したのは「ポケモニット」の運営管理をしているレフマーナ氏。
基幹に「SwitchControlLibrary (ver 2.0.0)」を利用しつつも、「NintendoSwitchControll」の関数に近づけた設計をしている、という特徴を持つライブラリです。技術的には、「SwitchControlLibrary」が依存していたArduino STLとの依存を切りつつ、内部的にはSwitchControlLibrary(ver2.0.0)の関数も利用できる点が特徴です。すなわち、キーの同時押しはもちろん、Arduino STLに依存しない部分であればSwitchControlLibrary ver2.0.0で書かれたソースコードの流用もできる、ということです。
レフマーナ氏によって提供されていることもあり、同氏のWebサイト「ポケモニット」で提供されているプログラムはすべてこの「NintendoSwitchControlLibrary」に対応しているため、既にソースコードも大量に公開されている、というのが大きな利点です。
以上の経緯で、上記2つの「Arduino Leonardo」向けライブラリが後発で登場したことにより、2022年6月現在において、実に「4種類」ものライブラリが混在することになったのでした。
4-4.Arduinoによる自動化の「乱立するLeonardo 編 (2020.3~2021.2)」のまとめ
さて、4章(2020.3~2021.2頃)の動向をまとめます。
筆者の「ますたーの忘備録」や、ミドリカワセミ氏の「苔むした日記帳」など、自動化にフォーカスを当てたブログが開設されたり、攻略記事も豊富な「ポケモニット」で自動化記事が執筆されたりなど、本期間は「Arduino Leonardoの自動化」が世の中に普及するにあたり、非常に重要な期間だったと言えます。
その一方で、使用できるライブラリが4種類に増えてしまい、「初心者の方が『どのWebサイト』をメインにLeonardoの自動化を志すか」によって、大きく意味合いが変わる、という別の懸念をはらむようになりました。
そういう意味で、Arduino Leonardoでの自動化は、Switch自動化界隈で最も「混沌とした」自動化になった期間と言えるかもしれません。
これをフロー図としてまとめたのが下図です。
上図でわかる通り、本記事で紹介した3つのWebサイトは、歴史的な経緯から読み解くと、それぞれ下記の特徴を持つと言い換えることができるかもしれません。
- ますたーの忘備録:ライブラリとして「SwitchControlLibrary(ver1.0.0)」を利用*41
→ 歴史を重んじた、最もトラディショナルなLeonardo自動化 - 苔むした日記帳:ライブラリとして「NintendoSwitchControll」を利用
→ ポケモン自動化に特化していたライブラリの可能性を最大化 - ポケモニット:ライブラリとして「NintendoSwitchControlLibrary」を利用
→ 最新のLeonardo自動化の系譜を受け継ぎ、独自に進化させた自動化
上記3つのWebサイトはそれぞれ独立したWebサイトですが、いずれも同じ目的(ポケモンの自動化)を紹介しており、実装できる幅も広がったと言えます。
なお、初心者にこそ「難しい」「混沌としている」といった印象をもたれるかもしれないので、ユーザー目線で補足しておくと、「上記3種類のライブラリのインストール」さえ済ませてしまえば、どのブログのプログラムソースかを意識すること無く利用できる、というのは特筆すべきポイントです。
利用するハードウェアも同一構成で済むため、そういう意味では互換があります。これらはいずれも利用している「ライブラリ」の違いでしかなく、「Arduino Leonardo」として提供しているHID機能を使っている点は変わらないためです。
ライブラリ目線で見ると、2022年6月現在において「SwitchControlLibrary(ver.2.0.0)」をメインにポケモン自動化を紹介したWebサイトは無いため、そういう意味では、しばらく本記事でまとめた通りの系譜が受け継がれていくと考えます。
今後のLeonardo自動化界隈がより盛り上がると信じて、本章は締めたいと思います(この章が、Arduino Leonardoを使ったSwitch自動化勢の参考になることを願っています)。
5.「Switchとのインタフェース」としてのArduinoの活用と画像認識
4章までは、主にArduinoを使ったSwitch自動化について、歴史的な観点から紹介してきました。
5章では、レイヤーを変えて、「マイコンボードで完結しないSwitch自動化」を考えます。すなわち「マイコンを変換器とした、PCを使ったSwitch自動化」です。
※注:5章の内容は、遅くとも2020年1月頃には実装報告があります。以降の内容は、時系列として必ずしも「4章の後(2021年2月~)というわけでは無い」ことに注意してください。こちらは先の議論とは「レイヤーが異なる整理」だと捉えていただければ幸いです
論点としては、Switch自動化を実現するハードウェアとしての「マイコンボード」が担っているのは、「コントローラーの擬態」なのか「Switchの操作コマンドの入力」なのか、という点です。
もう少しだけ噛み砕くと「ArduinoにSwitchの操作プログラム指示を直接書く」のか「ArduinoをSwitchとの接続変換ハブとして使い、外部から操作用のコマンドを別に用意する」のかという違いです。
少々技術畑な話題ですが、この発想・考え方が理解できると、例えば「画像認識を使ったSwitch自動化」のような拡張ができるようになります。
本章では4章までのコントローラー派生・歴史との考え方の違いから「画像認識Switch自動化」の成り立ちを整理します。
5-1.「コントローラーへの擬態」「Switchの操作」を両立した自動化からの脱却
4章に述べた通り、2017年~2020年2月までの歴史を振り返ると、利用するマイコンの違いや、Leonardoであれば利用するライブラリの違いこそあれど、接続の構図は「Nintendo SwitchとのUSB接続したマイコン」で共通していることがわかります。
より具体的に言えば、いずれの方法も「Pokken Tournament Pro Padに擬態している」という根幹・「コントローラー操作を含めてプログラミングされている」という共通点は特筆すべきでしょう。
まずは、改めての整理として、それぞれ代表的なマイコンボード「Teensy++ 2.0」「Arduino UNO」「Arduino Leonardo」について、Switch自動化の方法を下表にまとめてみました。
この表からも容易に読み取れる通り、いずれのマイコンボード・ライブラリ・組み合わせにおいても、最終的な擬態先は「Pokken Tournament Pro Pad」であることがわかります(Pokken Tournament Pro Padをリバースエンジニアリングして、マイコンに擬態させているので当たり前と言えば当たり前ですが)。
そして「Switch自動化」の実現のためには、コントローラーの擬態だけではなく、コマンド入力すなわち「コントローラーの操作部分」の実装も必要不可欠です。そのため、サードパーティ製のマクロ対応コントローラーのように「キーを押して●秒間待機して次のコマンド」という具合に、Arduino Leonardoであれば「loop()関数の中」に、ArduinoUNOであれば「JoyStick.c」の中にコマンド列をひたすら書き下していきます。
この入力コマンド列と一緒に、Pokken Tournament Pro Padへの擬態に関わる部分もマイコンボードに書き込み、これをSwitchと接続することで、いわゆるSwitch自動化は実現できています。すなわち、これを踏まえて「Switch自動化」を言い換えると「自作したコントローラーを使ったマクロ操作」と等価であると言えます。
続いて、この要件を整理した下図をご覧ください。
この図では、Switch自動化の構成要素を「1.ソフトウェアの互換性」「2.ハードウェアの互換性」「3.コマンド操作の可変性」の大きく3つに分解して整理しています。
このうち「2.ハードウェアの互換性」は前提なので、「1.ソフトウェアの互換性」と「3.コマンド操作の可変性」を備えたマイコンボード(例を挙げれば「Pokken Tournament Pro Padに擬態できるArduino Leonardo」)というふうに、これら2つ(1番・3番)の機能を持つマイコンが、Switch自動化のための要件である、と言い換えることができます。
したがって、改めて4章までに説明したSwitch自動化の歴史におけるマイコンボードは、「1.コントローラーへの擬態」と「3.Switchの操作」を両立したものだったと整理することができるというわけです。
次節では、このような考え方を前提として、「インタフェース」としてのマイコンボードについて着目・解説します(人によっては「シリアル変換器」としてのマイコンボードと表現したほうがしっくりくるかもしれません)。
5-2.Switch自動化用のマイコンから「コマンド操作」を除いたら何が残る?
※本節は概念論です。具体例を知りたい方は次節まで読み飛ばしてください。
前節では、Switch自動化について「Pokken Tournament Pro Padへの擬態」と「コマンド入力操作」の2つで構成され、これらを一緒に書き込んだものが「Switch自動化用のマイコンボード」であると整理しました。
ここで、これら2つの機能(=「擬態」と「操作」)の関係性について着目してみます。すなわち「これらを両立する」とはどういうことかという観点です。
これは「コントローラー」と「それを操作する手」の関係に似ています。「コントローラー」はゲーム機を操作するための、「手」はコントローラーを操作するための、それぞれ「インタフェース」と捉えることができます。このように、「コントローラー」と「それを操作する手」と捉えると、これら2つが互いに依存していないことの理解が容易になります。
例を挙げれば、コントローラーを右手で持っても左手で持っても他の人に渡しても、それがきっかけで「Switchから認識されなくなる」ということはありません。逆も然りです。つまり、これら2つは分離可能な特性と言えます。
さて、それでは「擬態」と「操作」の2つを持つマイコンボードから「操作」を取り除くと何が残るのかと言えば、自明ですが「擬態」のみが残ります。すなわち、Switchに認識されるコントローラー「Pokken Tournament Pro Pad」への擬態部分のみを行うマイコンボードになります。
そして、マイコンボードから取り除いた「操作」の部分を、別の機材やシステム、あるいはパソコンから経由で入力できるように「分離」すれば、より柔軟なSwitch操作を実現することが可能になります。
このような「コントローラー」と「操作する手」を分ける考え方こそが、次節で解説する「インタフェース(シリアル変換器)としての利用」の根幹です。
5-3.インタフェースとしてのマイコン利用(シリアル変換器としてのArduino)
前節では下記2つを概念として説明しました。
- 「Switch自動化」の2つの構成要素「Pokken Tournament Pro Padへの擬態」と「入力コマンドの操作」を分離ができること
- これらを分離することでより「柔軟なSwitch操作」が実現できること
これについて、本節ではマイコンボード「Arduino Leonardo」を例に解説をします。
Arduino Leonardoを使った自動化では、一般に、「手順A.boards.txtを書き換えてHORI社のVID・PIDに擬態」し、「手順B.『SwitchControlLibrary』などのライブラリによってUSB記述子を擬態」し、「手順C.Arduino IDEを使ってプログラム(コマンド操作)を書き込み」する、という3つの手順で実装をします。
この手順のうち、「手順C」で書き込むプログラムを、「コマンド操作列」にするのではなく「Arduinoの外部から入力された信号を変換してSwitchに送信する」ように書き換えることを考えてみましょう。
Arduino Leonardoには外部入力端子(=Digitalピン)を備えていますから、そのピンで信号(例えばシリアル通信、電圧値の変化など)を読み取って、適切にSwitch側に送信するプログラムを実装すれば良いことになります。
このように実装することにより、Switchの操作部分は別の機材に任せつつも、Switch側との接続は「(見かけ上)Pokken Tournament Pro Pad」のまま実装することができます。すなわち、「Switchの操作プログラム部分」を分離した、いわばSwitchとの「変換ハブ(=インタフェース)」として振る舞うArduino Leonardoが実現できます。この時、Arduino LeonardoのDigitalピンとシリアル通信をする場合は、特に「シリアル変換器」と呼ぶこともできますね。
この「Switchとのインタフェース化」の概念を、従来のSwitch自動化と比較・図示したのが下図になります。
上図は、Switchとのインタフェース化の一例として、「Arduino Leonardoを『シリアル変換器』として使う様子」を概念図として描き下ろしたものです。
ポイントは、「Switchとのインタフェース」を挟むことによって「Switchと直接つなぐことができない機材や機器」を接続できることです。
例えば、PCと接続したり他社コントローラーを繋いだり、そのレパートリーは枚挙に暇がありません。主な「例」としては下記のようなものがあります。
※一緒くたに「シリアル変換器」と呼ぶのは語弊があるので、あえて「インタフェース」と呼び方をぼかしています。概念として「SwitchとPC、Switchと他社コントローラーがつながるんだな」とご理解ください。
※「SwitchControlLibrary」を利用しているものはその旨を記載しておきます
※順不同です。
- インタフェース経由でSwitchとPCを接続
- シリアル経由で既存のプログラムを操作・JoyStick操作
- 画像認識Switch自動化「NX Macro Controller」
【Nintendo Switch】画像認識マクロツール NX Macro Controllerの使い方 - チラ裏雑記帳
- ポケモンの乱数調整をPCで自動化(※SwitchControlLibrary利用)
- 専用ソフト「PokeAutoEX(さらに経由でXInput対応コントローラー)」でSwitchを操作(※SwitchControlLibrary利用)
【ポケモン剣盾】自動化ツール-PokeAutoEX(乱数調整・自動孵化等):Game Arena - PC用「Webブラウザ」からSwitchを操作
- 画像認識Switch自動化「Poke-Controller」「Poke-Controller modified」
Poke-Controller Guide(参考:【Poke-Controller】画像認識自動化の導入おぼえがき【中級者向け】 - ますたーの忘備録)
- シリアル経由で既存のプログラムを操作・JoyStick操作
- インタフェース経由でSwitchと他社コントローラーを接続
- PS4専用「DIVA」コントローラー(※SwitchControlLibrary利用)
PS4専用DIVAコントローラを任天堂Switchでも使える様にArduino Leonardoで変換器を作る - Qiita
- PS用「電車でGo」コントローラー(※SwitchControlLibrary利用)
- DIVAアーケードコントローラー
- PS4専用「DIVA」コントローラー(※SwitchControlLibrary利用)
これらに掲げたように、「コントローラー操作部分」を分離させる(=マイコンボードをSwitchとのインタフェースに変換する)ことにより、Switch自動化において「できること(自由度)」が大きく増えることがわかります。
このような経緯もあり「Switch自動化」という言葉は、「マイコンボードとSwitchだけ」のシンプルなものから「マイコンボードとSwitchとPCとキャプチャーボードとUSBシリアル変換器…」というガチガチな構成まで、幅広い意味のある言葉となりました。
また、「ポケモンの自動化」や「Switchの自動化」とは趣旨が異なるためここでは多くは語りませんが、「他社コントローラーとの変換アダプタ」として利用できる、というのは含み置く必要があるでしょう。
5-4.ポケモン自動化における「Switchインタフェース」と「画像認識」
さて、Switchの自動化において、マイコンボードがシリアル変換器(インタフェース)になることが分かりましたが、この系譜はポケモン界隈にも引き継がれています。
手法としては前節にも紹介した通りですが、語弊を恐れずにエッセンスだけ抜き出すと「パソコンとSwitchを接続することで、様々な自動化・Switch操作を、豊富なGUIで扱うことができる」というものです。
実際の機器構成は多岐にわたりますが、代表例として「『Arduino Leonardo』を用いたPCとの接続構成イメージ」を下図に示します。
「厳選」「乱数調整」「育成」「アイテム収集」「日付変更」など、ポケモンの自動化に求められる”機能”は少なくありませんが、これらを独立したプログラムでマイコン側で実装するわけではなく、これをPCでコントロールできたことが最大の利点であり、マイコンボードの「Switchとのインタフェースとしての利用」が普及した理由の一つだと思います。
すなわち、自動化の内容を変える度にSwitchからArduinoを抜き差しする必要もコンパイルし直す必要もなくなり、その気になればGUI上でそのままコントローラー操作もできるという、自動化ユーザーにとってはこれまた「画期的」な発明だったのです。
そして、PCとSwitchを接続した自動化の真骨頂は、何と言っても「画像認識」が使えることでしょう(キャプチャーボードを使う必要がありますが)。
例えば、ポケモンで言えば、エンカウントして「色違いかどうか」の判定を行ったり、タウンマップから好きな場所に移動したりなど、まさにユーザーがゲーム画面を「目」で見て判断をしていたことがプログラムでも実現できるようになります。
そんな「画像認識に対応したSwitch自動化ツール」は様々ありますが、2022年6月現在、特に代表的なものは「NX Macro Controller」と「Poke-Controller」の2つです。
ここでは配線方法やセットアップ方法は割愛しますが、それぞれの概要を紹介します。
Poke-Controller(およびPoke-Controller Modified)
Windows・Macほかクロスプラットフォームで動作するSwitch操作マクロツール。愛称は「ポケコン」。
GitHubの作成日時は2019年12月7日。大きく「KawaSwitch氏が手掛ける本家版」と「Moi氏が手掛ける機能追加版(Modified)」がある(ModifiedのGit作成日時は2020年1月18日)。開発言語はPython(=起動時にPythonの利用が必要)。マクロの拡張子は「.py」。
機器構成としては「Nintendo Switch―Arduino Leonardo*42―FTDI―PC」。
じゃんきー氏によるポケコン(主にModified)の導入解説サイト「Poke-Controller Guide」が2021年7月5日より公開されており、2022年6月現在も利用者は増加中。ただし、Pythonの導入が必要不可欠なので導入にはそれ相応の知識が必要なので慎重に。
導入に興味があれば、本ブログのModifiedの導入記事も合わせて参照されたい。
NX Macro Controller
ぼんじり氏が作成・公開しているSwitch操作マクロツール。自身のGoogle driveにて2019年12月18日よりGUIプログラムを公開。開発言語はC#。対応OSはWindowsのみ。
画像認識・Switch自動化(マクロ操作)はもちろんのこと、「マクロの作成支援」がGUIで扱えるのはPoke-Controllerには無い強み。マクロの拡張子は「.nmc」(独自フォーマット)。
機器構成は、公開当初は「Nintendo Switch―Arduino Micro―FTDI―PC」。後に「直接Nintendo SwitchとBluetooth無線接続」もサポートした(Bluetoothドライバーの置換が必要)。
Switch自動化なのに「マイコンを使わずに自動化」「無線接続」という、本記事と真っ向から反するような革新的なSwitch自動化なので、興味がある方はぜひ下記を参照されたい(Bluetoothのドライバーを触るので、無線接続する際には自己責任。他のBluetooth機器を利用している方には不向きかも)。
5-5.画像認識を使ったポケモン自動化の例
前節でも紹介しましたが、「画像認識をサポートしたSwitch自動化」が手法として確立されたことにより、ポケモンの自動化界隈ではより幅広い自動化に対応できるようになりました。
各作品タイトルにおいて、具体的に「何ができるか」については枚挙に暇がありませんが、2022年6月現在においてはTwitterなどのSNSを中心にプログラムが配布・公開されています。
ここでは、ポケモン界隈における「画像認識Switch自動化」として、「Poke-Controller Modified」を利用したシンプルな事例・比較的新しい事例、2つの例を紹介します。
画像認識Switch自動化の例1:BDSP「パルキア」色厳選自動化(2022/4/2の事例)
こちらのSwitch自動化では、画像認識を使うことで色違いかどうかを判定して、通常色ならリセットを繰り返し行っています。仕組み自体はシンプルですが「画像認識ならでは」なSwitch自動化の例だといえます。
なお、導入方法については、私の記事で合わせて掲載しておりますので、興味があればご覧ください(中級者向けです)。
画像認識Switch自動化の例2:剣盾「ウッウロボ」ガンテツボール自動化(2022/6/9の事例)
こちらは前の例と比べると、応用色が強いものになります。
内容としては、画像認識を使うことでマスター道場にあるウッウロボから排出されるボールがガンテツボールになるように調整をしています。
詳細は割愛しますが、大まかな理屈としては、「手持ちポケモン1番目の『モーション』(Lスティックを押し込むことで「物理技」「特殊技」いずれかのモーションを見ることができます)」を128回連続で確認することで、次に出てくるボールが予測できる、という仕組みを利用しています。
なお、こちらのプログラムの導入方法はPoke-Controller Modifiedの解説サイト「Poke-Controller Guide」に記載されています(このプログラムは上級者向けです。本ブログでは解説する予定はありませんので悪しからず)。
さて、本節では上記2つの「画像認識Switch自動化」を例に挙げましたが、とくに後者(ウッウロボの排出ボールの調整)については、こと「画像認識」だけで成り立つものでは無いことは、ここで触れておく必要があります。
もう少し踏み込んで言えば、乱数調整や解析などの「別側面からのアプローチが技術として”合流”する形」で実現に至っている、ということです。
先程から「ポケモン界隈」と表現していますが、これを巨大な”コミュニティ”として捉えたときに、各方面の技術が融合する「総合力」は、目を見張るものがあります。単なる「先人へのリスペクト」にとどまらず、過去の技術や人が歩み寄って融合し、新たにできたプログラムが開発・公開され、それを利用する人がコミュニティを活性化する「エコシステム」がサイクルしていると言えるからです。
この観点からも、様々な技術をバックボーンに持つポケモン界隈は、Switch自動化において大きく貢献を果たしていると言えます。
5-6.「Switchのインタフェースとしてのマイコンボード」のまとめとこれから
さて、本章の内容を振り返ります。
まず、「Pokken Tournament Pro Padへの擬態」と「Switchの操作プログラム」の2つを「一緒にマイコンボードに実装する」というのが2~4章で主に取り扱ったSwitch自動化の特徴でした。これらと比して、本章で紹介したマイコンボードは「Pokken Tournament Pro Padへの擬態」にとどまっていることが特徴的です。
そして、「Switchの操作」部分を別の機材やプログラムと分離することで、より”柔軟”なSwitch操作ができることを、例を交えて紹介しました。
「操作部分」については、プログラムとして実装するだけでなく、他社製コントローラーを接続したり、画像認識に対応したPC用ソフトウェアと接続したりなど、自動化に限らず、様々なプレイスタイルに対応できるようになったと言えます。
このような経緯でコントローラーへの擬態に特化した「マイコンボード」の台頭により、様々な機器・ツール・ソフトウェアと接続できる「インタフェース」として機能するようになり、文字通り”可能性”が広がっていたと言えます。
特筆すべき点は、Arduino Leonardoの自動化が黎明期を迎えた2020年2月頃には、既にこの手法が確立されており、2022年6月現在においても広く利用されているという事実でしょう。
これについて「ポケモン界隈」で有効に利用している例として有力なのは、主に下記2つです。
- ぼんじり氏の「NX Macro Controller」
- KawaSwitch氏の「Poke-Controller」
これらはいずれも2019年12月には公開・手法として確立されており、現代においても広く利用され、2022年6月現在においても新しい操作プログラムが考案・検討・開発・公開されています。
これを支えるのは、技術としての保守・更新はもちろんのこと、多数のユーザーがいるコミュニティとして成り立っているからこそと言えます。そして、別切り口からのアプローチ(解析・乱数調整など)や、手法の提案(画像認識など)が、よりこのサイクルを加速させていると考えられるでしょう。
このように、「画像認識」「乱数調整」などの他の技術や「Switch自動化」のさらなる発展につながっている現状は、本章で紹介したように「ハードウェアとしての可能性・裾野」が広がっていたからこそ成り立ったと言えます。最近の事例として挙げた「ウッウロボの排出ボールの調整」は、これを如実に体現した例だったと言えるでしょう。
言い換えれば、「Switch自動化」が一つの技術・知識に決して固執・依存すること無く、別の技術が並行して進み、それが大きなコミュニティの中でサイクルしているからこそ成り立っていると言えます。
今後は、これらの画像認識ツール(NX Macro Controller・Poke-Controller (Modifiedを含む))は、利用者が増えることが予想されます。すなわち「画像認識」を活かした自動化がますます発展していくと考えられます。
本節で紹介・考察したような「技術と知識の融合」「コミュニティの活性」「エコシステムのサイクル」が、自動化界隈を自ら発展させていくことを願い、本章を結びます。
6.おわりに
まずは、ここまで読んでいただき、ありがとうございました&お疲れ様でした。
本記事では、本ブログがメインで扱っている「『Arduino Leonardo』によるポケモン自動化」を中心に、Switch自動化の歴史を紐解いて来ました。
1章では、「ポケモンの自動化」という概念が、遅くとも第3世代(ポケモンRSE)の頃には確立されており、これが形を変えて20年来続いている、という構図を紹介しました。また、今日のマイコンボードによる「Switch自動化」がポケモン界隈で流行った理由について、これまでの「孵化厳選」の経緯から、素地があったことを考察しました。
2章では、特に「Switch自動化」において、どのような経緯でマイコンボードが普及したのか、どういう解析・リバースエンジニアリング等があったのかを紹介しました。
3章・4章では2章の流れを受け、特に「Arduino Leonardo」での自動化が成り立つためのライブラリの派生、紹介ブログ・Webサイトの台頭などについて時系列で整理しました。私のブログも、この系譜を受け継いだ一つだったと言えます。
5章では、2章~4章とは打って変わって「インタフェース(変換コネクタ)としてのマイコン」の考え方、「画像認識を使ったSwitch自動化ツール」の紹介、今日の「ポケモン界隈でのSwitch自動化の流れ」について紹介と考察をしました。
これらの歴史的な経緯を振り返ると、如何にたくさんの技術者・開発者・解析者・ユーザー・コミュニティ・ツール・サイトなどが相互に連動して、「ポケモン自動化」ひいては「Switch自動化」を盛り上げてきたかがわかると思います。
そして、2022年6月現在において、この流れが肌で感じられるほど加速・活性化しているというのは改めて特筆すべき点だと考えます。
今後とも、このような「Switch自動化」「ポケモン自動化」がますます発展することを願い、この記事を結ばせていただきます。
2022年6月19日 ますたーの忘備録
参考文献
本記事を執筆するにあたって、多大に参考とさせていただいたサイトや、ぜひとも紹介したいと感じたサイトです(順不同・ヌケモレあるかも)。いずれも、読んでてめちゃくちゃ面白かったのでおすすめです。
※実装が絡むものについて、筆者はほとんど試していないため「読み物」としてオススメしています。悪しからず。
■おすすめその1
Switch自動化について、主に無線での操作(Bluetooth)~画像認識の利用まで、論理建てて記載されている、みずようかん氏のnote記事。
画像認識を使う「NX Macro Controller」が世の中に広まるまでの歴史的な紆余曲折が、簡潔にまとまっていて、技術書としても読み物としてもとてもおもしろかったです。
特に、私の記事では主に「有線接続」でのSwitch自動化の歴史について紐解いていたので、「無線接続」のSwitchの歴史についての補完という意味でもオススメです。
■おすすめその2
私がこのブログで利用している操作用ライブラリ「SwitchControlLibrary」の作者であるcelclow氏の記事。もはやこれを読まずして「今の私はいない」と言っても過言ではありませんし、本ブログのプログラムを利用している人は、足を向けて寝られない人だと思います(celclow氏にはこの場を借りて、改めて御礼申し上げます)。
内容としては、Arduino(Leonardoやmicro)をSwitchに認識させるための技術的な改良点が書かれています。Switchの操作について本質的な情報(ライブラリが何を行っているのか、SwitchがどうArduinoを認識しているのか)について、技術的な考察と実装を交えて解説されています。非常に興味深いのでぜひ。
■おすすめその3・その4
上記celclow氏のライブラリ「SwitchControlLibrary」を使って「コントローラー変換器」を作成した人たちの記事です。
本当に「SwitchControlLibrary」が最初期のライブラリとは思えないほどの「広がり」が見て取れるので、「こんなことにも使えるのか」と目から鱗が落ちると思います。プログラムとハードウェアの融合がもたらす技術革新をぜひともその目で見ていただければ。
・PS4専用「DIVAコントローラー」用変換器
・PS用「電車でGoマスコン」用変換器
■おすすめその5
今回の記事には触れてすらいない「Bluetooth接続」によるSwitch自動化の導入解説記事です。なんと、本記事では「自動化のルーツ」とまで掲載していたPokken Tournament Pro Padではなく、「Proコントローラー」のリバースエンジニアリングから派生したSwitch自動化を扱っています。
2020/1/23に公開された「joycontrol」について、マクロを組めるように改良された「joycontrol-pluginloader」の動作環境構築・実装簡易マニュアルが掲載されているようですが、動作にはBluetoothアダプタおよびUbuntu(Linux)の仮想デスクトップ環境が必要になるため、Arduinoを利用する自動化とは別の次元に難易度が上がります。
とは言え、マイコンを使わない自動化というのはロマンが溢れます。興味がある方はぜひ御覧ください。
■おすすめその6
じゃんきー氏による「Poke-Controller」当時の環境構築について解説をしたnote。
2022年6月現在は、「Poke-Controller (Modified)」について、ろっこく氏による導入バッチファイルの提供があるなど、それほど導入ハードルが高くない(とは言え中級者向け)印象をもたれる方も多いかもしれません。
しかし、このPoke-Controllerが公開・普及し始めた2020年12月頃は環境構築が非常に難解なものでした(私は当時、読んでも「やろう!」とはとても思えませんでした)。
本記事では5章だけで扱いましたが、画像認識を用いたポケモン自動化は「Switch自動化」を大きく発展させる原動力の一つだったと言えます。そして、この記事は「Poke-Controller」を広げるきっかけとなった記事の一つだと思いますので、当時の「大変さ」「先人の『知恵』」にあやかるべく、興味があればぜひ読んでみてください。
追伸(筆者のコメント)
この記事、参考になった!という方はぜひ、拡散をお願いします!!
というかめちゃくちゃ時間かかりました~。
2022年4月にはまとめはじめていたので、まとめるだけで2ヶ月はかかったと思います。
歴史の教科書作ってる人の大変さがよくわかりました。
この記事に歴史をまとめようと思った理由は、「先人が何をしてきたのかがわからない!」「そもそも知らない!」となったからです。
が、いざ纏め始めると、驚きの連続でした。想像以上に、本当にたくさんの人が入り組んで自動化を発展させてきた、というのを如実に感じたからです。調べれば調べるほど、色々な自動化の進捗、トライ・アンド・エラー、開発ログ、構想、諸々が渦巻いて芋づる式に出てきます。
そんな中、どういう切り口で整理・分類をして、体系立てて記事にまとめるか、本当に迷いました。結果としては、私のブログとしてまとめることもあり「Arduino Leonardo」を中心とした記事構成に仕上げましたが、この記事に書ききれなかった先人が、まだまだたくさんいるというのが、実情である、というのを知ってほしいです。
そういう意味でも、上記「参考文献」に並べた記事は、「読み物」としてはもちろん、情報の補完としても重要だと思います。
このブログ記事は、今までどこにも無かった「Switch自動化のまとめ」と呼べる記事の、ある意味草案です。
「Arduino Leonardo」を用いた自動化という側面では我ながら体系的な構成になっていると思いますが、触れてすらいない「無線でのSwitch自動化」など、構成上入らなかったものはまだまだたくさんあります。
ぜひとも、この記事を読んで「へー参考になったわー」という方も、もう1つ、もう2つ、別の記事を読んでいただき、他の側面からの理解を深めていただけると、幸いです。
*
ともかく、もう一度いいます。
この記事、参考になった!という方はぜひ、拡散をお願いします!!!!!
(コメントも歓迎です~!)
ではでは~c⌒っ.ω.)っ
--
本ブログについて:本ブログについて
導入記事:【Arduino自動化01】Arduino開発環境の導入
ポケモン剣盾の記事:ポケモン剣盾Arduino自動化 カテゴリーの記事一覧
ポケモンBDSPの記事:ダイパリメイクArduino自動化 カテゴリーの記事一覧
レジェンズアルセウスの記事:レジェンズアルセウスArduino自動化 カテゴリーの記事一覧
---
*1:理系的に言えば「サーベイ論文」「レビュー論文」みたいな、文系的に言えば「卒業論文」みたいな、高校生的に言えば「自由研究」といった位置づけでしょうか
*2:この記事を読んでも、プログラムが書いたり、何かしらの自動化ができるようになるわけではありません
*3:公序良俗に反しない媒体からのリンクや、著作権法上の「引用」などに際しては、筆者への連絡は不要ですし、これを妨げる意図はありません。特に営利目的など、この範囲を逸脱する利用を厳に謹んでいただくようお願い申し上げます
*4:ポケモンRS発売日は2002年11月21日。20年も前というのが信じられない…
*5:もっとも、当時のゲーム機(GBA)は乾電池駆動だったので、長時間放置中に電源が切れたり電池を買い替えるコストがかかったりするため、ACアダプタが必須でした。余談ですが、2022年現在であれば、入手性の観点からも、ゲームキューブの「GBAプレーヤー」でGBA放置による電池問題は解決しています。むしろ連射コンを併用すれば「おや…?」で止まらなくなるため、タマゴ孵化の自動化に時代が追いついたと言えますし、「ニュートラaルポジション(挿し込んだ時の傾きで初期化)」を使えば、スティックを傾け続ける必要すらありません
*6:エメラルド版では、育て屋での経験値が入らなくなりました
*7:当時は「プロアクションリプレイ」「エックスターミネーター」など、セーブデータの改竄やメモリ改変ができるツール、改造コードを流布するWebサイトが出回っていました
*8:2GBはカートリッジ内のゲームデータサイズとして。ゲームの実体はORASで1.76GB程度
*9:ポケモンXY・ORASはスライドパッドのみならず、十字キーでの移動操作にも対応しています
*10:バッグクロージャー:食パンのビニールを固定するプラスチックのアレ
*11:3DSのスライドパッドは輪ゴムではなく洗濯バサミでも固定はできましたが、スライドパッドが傷む可能性があり、角度調節もシビアだったため、賛否両論でした
*12:大事なことですが、「自動化」に否定的な意見を持つポケモンプレイヤーも一定数いることは事実です。世間的に「自動化は容認されている」というわけではないことには注意しましょう。ましてや、公式は一切言及・名言しておりませんし、許諾しない外部入力機器としての要件を満たさないとは言いきれません。くれぐれも扱いは慎重にお願いします
*13:自動化に黎明期なんてありません。勝手に筆者が名付けているだけですので悪しからず
*14:2017年3月当時、白猫プロジェクトでは、ストーリーの中で重要な位置づけになる11島(監獄タルタロス)が解禁され、2022年4月現在でも人気のキャラ「ソアラ」「オスクロル」が登場した頃でした
*15:当然、英語なので読みにくいと思いますが、何が書いてあるかをざっくり知るだけなら、Gigazineの記事「Nintendo SwitchのJoy-Conをリバースエンジニアリング」が参考になります。Switch本体がJoy-Conと15msごとに更新を要求する仕様や、Joy-Conから本体への無線接続時の応答には難解なチェックサムが付く仕様などもあったそうで、Joy-Conのリバースエンジニアリングが難しかったことは想像に難くありませんね
*16:発売日当時のNintendo Switchでは、内部で利用されているWebKitのバージョンが、当時のiOS 9.3.5のJailbreak(脱獄)に使われた脆弱性を持つものでした。これにより、ローカルWi-Fi上にプロキシサーバーを立てることでトラフィックの傍受や任意のhtmlファイルの表示・シェルスクリプトの実行などができるようになっていたそうです
*17:忘れてはなりませんが、以降は「『有線』接続でのProコントローラーの模倣」によるSwitch操作の代替であり、引き続きSwitchの「無線制御」のリバースエンジニアリング、すなわちBluetoothでの操作も継続して解析が進んでいきます。こちらは私が調べきれていないので、機が熟せば=筆者が調べる機会があれば、まとめていくかもしれません
*18:USB機器なら何でも接続・認識できる、というわけではなく、HIDクラスでの入力を受け付けられるのは「ライセンスされたUSBコントローラー」に限るという点は、当時から留意すべき事項として挙がっていました
*20:Switchの操作という観点から、「Pokken Tournament Pro Pad」は、純正の「『Switch Proコントローラー』に擬態したUSBデバイス」であると言い換えることができる
*21:注:別に、USBの技術的には「奇妙」では無いのですが、当時の心情を(勝手に)筆者が推察して「奇妙」と表現しています
*22:筆者は未検証。日本語版のポッ拳コントローラーとは仕様が異なる可能性があります
*23:つまり、Pokken Tournament Pro PadでSwitchもPS3も操作できる事実から、SwitchのUSB操作に使われる信号形態(記述子と言います)が、PS3用コントローラーのそれと同等であることが帰納的に示されています
*24:現在のようなライブラリがあるわけではなく、AVRとしての利用なので、本ブログで紹介しているような手法そのものズバリではありません
*25:もっとも、当時の現地ではarduinoではなく「Teensy++v 2.0」と呼ばれるマイコンボードを使ったUSBデバイスにLUFAと呼ばれるソフトウェアを活用したUSBエミュレーションが主流だったそうです
*26:Human Interface Device;キーボードやマウスなどのUSB機器に使われるクラス定義ライブラリ。より詳しく言うと、ReportとReport Descriptorの2概念からなる、標準化されたUSBデバイスの規格です
*27:「非常に」という表現は主観になりますが、既に確立されていた方法とは違う視点から構想を立て、検証するこの発想・姿勢は、プログラマとしての知的好奇心・探究心・向上心を持つ大変大きな意義のある試みだったと感じます
*28:celclow氏:本ブログで利用しているライブラリ「SwitchControlLibrary」の製作者
*29:例えば、レフマーナ氏は、本ライブラリのVer2.0.0をベースにして独自のライブラリ「NintendoSwitchControlLibrary」を立ち上げており、それについて自身のブログで言及しています。このような派生は、「MITライセンス」が明記されていたからこそできる芸当です。プログラムとしての寿命が伸びるため、ライセンスの明記は歓迎すべき慣習だと思います
*30:ライセンス形態が明記されていないライブラリを「使用すること」自体は特に問題が無いが、このライブラリに改良を加えたり再配布したりする場合には、著作権上の問題となる場合がでてくる
*31:「『Switch自動化の歴史』にますたーが名を連ねるのか?」という疑問はごもっともですが、「『ポケモン自動化』の歴史」になら私の名前が入っても良いと思いますので、ここにぶっこみました(この歴史をまとめているのも私ですし、ちょっとくらい良いでしょ!ね!!)
*32:実は、筆者はサックスが吹けます!高校時代に参加した、日本吹奏楽連盟主催のアンサンブルコンテストでは、地区予選・県予選を通過した九州大会で「金賞」(得点ベースで5位)を受賞した経験もあります。木管3重奏なので3人の功績ですが「かつては九州地方で5本の指に入る実力者」だったという自慢話にしておきます
*33:グラボもついていないビジネス用ノーパソに、メモリを32GBも詰め込むアホみたいなカスタム構成に加え、天板とマウスホイールを青色にカスタムオーダーするという「GPUを知らない素人が考えたつよつよスペック」なパソコンでした
*34:私自身、大学時代にはC言語を授業で学んでいたこともあり、研究室では1ヶ月くらいArduino UNOを触っていたこともあり、知識という点では全く苦戦せずに実装ができたことを覚えています
*35:MITライセンス:簡単に語弊を恐れず表現すると、「著作権表示さえ残せば、複製・改変・商用利用・永続利用OKなライセンス」という比較的”緩い”ライセンス形態です
*36:2022年6月12日現在、Arduino Leonardo用のSwitch操作用ライブラリは少なくとも3種類あります。バージョン違いを含めると4種類です
*37:特に当時の5chは転載・まとめサイトへの規制が厳しく、マイコン自動化の外部公開記事も絶対数として少なかったこともあり、定期的にスレッドを覗いていない人には知りようがなかった情報という背景も大きいと考えられます
*38:レフマーナ氏が自身のサイト紹介しているように、2022年現在は利用しているライブラリが「NintendoSwitchControlLibrary」に変わっています
*39:この当時は「ポケモン剣盾とSwitch自動化が中心のブログ」というジャンルは珍しく、私自身もまさか現在まで更新を続けられるとは思っていませんでした
*40:2022年6月現在、ミドリカワセミ氏の「苔むした日記帳」では、ストーリー攻略の自動化という(褒め言葉として)常軌を逸した、大規模・超大作な自動化を実現しています
*41:別途、ライブラリ「ArduinoSTL」も必要です