2023/04/09

【ポケモンSV×arduino04】テラレイドローカルホスト周回自動化

 ※本記事は、ポケモンSVにて固定したテラレイドのローカル通信のホスト側の戦闘およびソフトリセットを自動化するプログラムについて解説した記事です。ポケモンSVの操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は剣盾の00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。

 

[注] 本記事の内容は、ローカル通信で通信できるNintendo Switch本体とポケモンスカーレット/バイオレットを2台以上所持している方向けの内容となります。ローカル通信のホスト側の操作を自動化することで、アイテム稼ぎのために2台以上を同時操作しなければならない周回作業を簡略化します。 本記事の内容ではゲスト側の自動化はできません

ローカル通信のゲスト側については、画像認識を用いるためPoke-Controllerを使用してホスト側のレイドに参加するプログラムも公開しました近いうちに公開します。 

 

 2023/05/07:バージョンはVer1.0のまま、レイドローカルゲスト側の自動化(Poke-Controller用)の記事を公開しました。Switch2台とArduino Leonardo1台、Poke-Controller環境1セットの組み合わせでレイドバトルを自動化できます。また、動画も公開しました。

本記事では、このプログラム(スケッチ)でできることや原理を解説したうえで、スケッチを配布しています。とにかくスケッチが欲しいという方は下へと読み飛ばしてください。


 

きっかけ、動機

ポケモンSVでは、努力値、個体値、性格、持ち物など対戦に必要な準備の多くがお金の力で解決できるようになりました。そのため、ニンフィア金策を自動化するだけで育成が楽になります。

一方、金策だけでは解決できないアイテムとして、テラスタイプを変更するためのテラピース、色証厳選などに必要な高レベルサンドイッチを作るための秘伝スパイス、夢特性に変更するための特性パッチがあります。特に、テラピースは1匹ごとに50ピース必要(簡悔)。 対戦や厳選をするならテラレイドバトルでの稼ぎからは逃げられないため、せめてソフトを何台も同時操作しなくてもいいように1台(ホスト)を自動化しました。

(後にPoke-Controllerを使ってゲストも自動化しました)

これで何ができるの?

ポケモンスカーレット・バイオレットの本体とソフト2台以上を用意し、特定のレイドを固定したホスト側のソフトにてレイドの開催とソフトリセットを繰り返す操作を自動化します。①レイド開始直後一撃で倒す場合(メタモンレイドや弱い★3,4レイドを想定)と、②制限時間ぎりぎりまでパラボラチャージ等のドレイン系の技を連打する場合(積み技をもたない★6レイドを想定)の2通りを作成しました。前者はテラピース集め、後者はテラピースに加えて秘伝スパイスや特性パッチなども集められます。

ソフトリセットを繰り返すため、ホスト側はアイテム等を入手することはできませんが、そのレイドに周回参加するゲスト側で有用なアイテムを入手し続けられます(本記事ではゲスト側の操作は自動化していません)。ゲスト側はホスト画面上のあいことばを手動で入力すれば、あとは手動あるいはマイコン等でA連打すれば楽に周回できます。

以下、固定したレイドを開催してローカル通信で募集をかけ、戦闘後にリセットしてレイド開催を繰り返す1台目をホスト、ホストの開いたレイドに参加を繰り返す2~4台目をゲストと呼びます。

 

原理、おおまかな流れ

概要

本プログラムでは、ホスト側にて

 目の前のレイド(テラスタルオーブ)を開催→ゲストと共に戦闘
→戦闘終了後にソフトリセット→再びソフトを開始
→目の前のレイドが元に戻っているため再びレイド開催→...

を繰り返します。

ホスト側はソフトリセットするためレイド報酬を受け取れませんが、2台目以降のゲスト側は同じレイドに参加を繰り返すことができるため、あらかじめ報酬の良いレイドを厳選しておくことで何度もアイテム(+ポケモン)を回収できます。

なおゲスト側の操作について、ホスト側の画面に表示されるあいことば(ローカルの場合は数字4桁)がないとレイドに参加できません。したがって、画像認識のないマイコン単体でのゲスト自動化はできません。近いうちにPoke-Controllerを併用したパターンを公開します。あるいは、パスワード入力のみ人力で行い、その後の操作をA連打自動化するなど工夫してください。

 

レイド周回操作について

本自動化では、

 目の前のレイド(テラスタルオーブ)を開催→ゲストと共に戦闘
→戦闘終了後にソフトリセット→再びソフトを開始
→目の前のレイドが元に戻っているため再びレイド開催→...

を繰り返します。

 各動作ごとに分けてボタン操作を記載します。

 

レイド開催

テラスタルオーブの前にて、

Aボタン2回で「みんなで挑戦」を選択、
その後1分ほどゲストを募集したまま待機、
A連打でレイドを開始

の順に動作します。ゲスト募集待機については、必要に応じてdelay(30000)の数字を調整してください。32767より大きい値を設定するとオーバーフローするため、60秒待機する場合はdelay(30000)を2回命令しています。

1分間の待機中に、手動でゲスト側のSwitchを操作し、ホスト画面に表示されるあいことば(数字4桁)を入力して参加してください。

 

レイド戦闘開始

レイドの募集が終わりレイドを開始したら、45秒程度で「たたかう」などのコマンドが表示されます。レイド戦闘時の動きについては、

①レイド開始直後一撃で倒す場合(メタモンレイドや弱い★3,4レイドを想定)
制限時間ぎりぎりまでパラボラチャージ等のドレイン系の技を連打する場合(積み技をもたない★6レイドを想定)

の2通りを想定し、それぞれ作成、公開しています。

①の場合

ホストはレイド開始から1分ほど何も操作せず、次のソフトリセット操作に移ります。

主にイベントレイドではないメタモンレイド(特性:変わり者)でホストはLv.1ポケモンを使っている場合を想定しています。ホストが行動したときにNPCも行動するため、ゲストが攻撃した方が不確定要素が少なくなります。

メタモンレイドの他、★3,4あたりの一撃で倒すことのできるレイドにも使用可能です。テラピース集めに利用してください。

≪注≫現在開催中のメタモンのイベントレイドでは、特性が変わり者でないメタモンも出現するようです。その場合、メタモンは最初に行動したプレイヤーのポケモンに変身するようです。特性が変わり者でないメタモンレイドを周回する場合は、1分待機の箇所をA連打に変更して先に行動させるなど、弱いポケモンに変身させるようにしてください。

 

②の場合

レイド開始から30秒(たたかう表示より前)待機、
90秒ほどA連打でドレイン系の技を連打(3回ほど攻撃)、
1分ほどAとRを交互に連打してテラスタル起動、
さらに3分半ほどA連打でレイド撃破or時間切れのまま終了

の順に動作します。

こちらでは、①と異なり一撃で倒すことができない場合を想定しているため、ホスト、ゲスト共に同じ攻撃技を連打し続けることを想定します。ハラバリーでドヒドイデを倒すように調整しました。★6のドヒドイデやハピナスなどでは、秘伝スパイスや特性パッチなどが報酬として出ることが期待できます。報酬はリセットして同じレイドを繰り返した場合も同じであるため、あらかじめ報酬の良いレイドを探してください。

後述するように、ホスト、ゲスト共にパラボラチャージ、無念の剣のようなドレイン系の技を連打してください。上記の時間配分であれば、基本的には丁度良いタイミングでテラスタル起動できます。万が一テラスタルが起動できない場合、オーブが足りないメッセージが出たうえで通常通り攻撃し、次のターンに改めて起動を試みます。

テラスタル後のA連打については、必要に応じて時間を調整してください。

 

なお、剣舞などの積み技を多用してくるレイドポケモンには安定しません。報酬目的であれば別のレイドを厳選することをおすすめします。どうしても挑む場合は、不安定覚悟で周回するか、ホストゲストで使用ポケモンで役割を変えるか(力を吸い取る連打など) などしてください。

 

 ソフトリセット~再起動

レイドが終了する頃に、

HOMEボタンを押してHOME画面に戻る、
Yボタンでユーザー切り替え、
同じユーザーを選択してソフト再起動

の順に動作します。再起動したら、最初に戻り再びレイドを開催します。

一応、Switch本体の更新が表示された場合でも更新せずに再起動できるようにしています。

使用ポケモンについて

ここではレイド参加に使用するポケモンについて解説します。 

レイド周回において、手持ちの1番上のポケモンを使用し、1番上の技を使用することとなりますので、あらかじめ手持ちや技の順番を調整してください。

なお、本記事では

①レイド開始直後一撃で倒す場合(メタモンレイドや弱い★3,4レイドを想定)
制限時間ぎりぎりまでパラボラチャージ等のドレイン系の技を連打する場合(積み技をもたない★6レイドを想定)

の2通りのプログラムを公開しています。

①の場合

ホスト側の使用ポケモンは不問(メタモンレイドの場合はLv1の弱いポケモンに変身させることを推奨)、

ゲスト側はレイドポケモンを一撃で倒せるポケモンを使用してください。周回を安定させるため、

・Lv100で確定1発で相手を倒せるように攻撃or特攻特化、レイドポケモンより素早さを高くする
・威力が高く命中率100%で安定する、相性を考慮した技を使う
・ダメージを高めるため、こだわり鉢巻or眼鏡をもたせる

ことを推奨します。

 

 ②の場合

一撃のダメージ量よりも、複数回攻撃した総ダメージと継戦能力を重視します。複数の技を打ち分けることが難しいため、ドレイン系の技を連打させてHPの確保を優先します。

使用ポケモンは

・Lv100でHP吸収量を増やすため攻撃or特攻特化、他の努力値は素早さよりもHPや防御特防を優先し、できるだけ倒されないようにする
・レイドポケモンに相性の良い(等倍以上)のタイプ一致ドレイン技
・連続で同じ技を使うため、メトロノームをもたせれば威力最大2倍

を推奨します。

ドレイン系の技には主に以下が挙げられます。特に上の4つを揃えておくと、自動化に限らずレイドで活躍します。

          ----------------------------------------

フェアリー:ドレインキッス(威力低め50だが吸収率75%)
(ニンフィア(金策個体と併用可)、ブリムオン(補助技反射)、ハバタクカミなど)(ニンフィアブリムオンは卵でテラスタイプ厳選不可)

電気:パラボラチャージ(威力は低め65だが特性込みで高火力)
(ハラバリー(電気に変えるで充電威力2倍)、ミライドン(ハドロンエンジンでエレキフィールド1.3倍×特攻1.33倍=1.729倍、高種族値))

炎:無念の剣(高威力90、接触技なので胞子など注意、ソウブレイズ専用)

格闘:ドレインパンチ(威力75、接触技なので胞子など注意、パンチグローブをもたせるくらいなら他の技がいいかも)
(テツノカイナ(レイド定番)、コライドン(ひひいろの鼓動で攻撃1.33倍、高種族値)、ハリテヤマ(根性火炎玉で状態異常耐性)、コノヨザル(やるきで眠り無効、負けん気で能力ダウンに対抗)など他多数)

草:ギガドレイン(威力75、ほぼオリーヴァ(こぼれダネ)一択)

草:ウッドホーン(同じく威力75、ゴーゴートメブキジカのみ、どうしても物理草を使いたい場合に)

虫:吸血(威力80、タイプ相性的に上よりは使う頻度少なめ)
[チヲハウハネ、エクスレッグ(色眼鏡で全タイプに等倍以上、ただし低種族値)]

          ----------------------------------------


準備、必要なもの

本スケッチでは、マイコンを挿す前に以下の準備が必要となります。

1. ポケモンSVのホスト(1台目)を起動し、報酬の良いテラスタルオーブを探す。目的の報酬を落とすレイドポケモンを見つける。必要に応じて、オーブ前でセーブしてから1度レイドに挑み、報酬を確認しておく。

2. オーブ前、Aボタンでレイド開始できる位置でセーブし、1度ソフトを終了する。

3. Switch本体の日時を、同じ日付の範囲で時計を巻き戻す(日付が変わるとレイドが変更されるため、自動化中に日付が変わらないようにする)

4. ソフトを起動し、手持ちの1番上にレイドで使用するポケモンを置く。使用する技を1番上に置く。

5. オーブに話しかけられる状態からマイコンを挿してスタート。自動でレイドを開催するため、ゲスト側はホスト画面に表示されるあいことばを入力して参加する。


作成したスケッチ

レイドローカルホスト周回自動化のスケッチ最新版2023.04.09_ver1.0

①レイド開始直後一撃で倒す場合こちら

制限時間ぎりぎりまでパラボラチャージ等のドレイン系の技を連打する場合こちら

  2023/05/07:バージョンはVer1.0のまま、レイドローカルゲスト側の自動化(Poke-Controller用)の記事を公開しました。Switch2台とArduino Leonardo1台、Poke-Controller環境1セットの組み合わせでレイドバトルを自動化できます。また、動画も公開しました。

Poke-Controllerを併用することで、ゲスト側の周回も自動化し、完全放置で稼ぐことができるようになりました。ゲスト側の自動化についてはこちら↓

 

本スケッチを実際に使用した動画はこちら↓(ホスト・ゲスト共通)


 ↓以下は②ドレイン技連打のスケッチVer1.0。①はレイド開始後に攻撃せず1分待機。

/**
* テラレイドホスト周回自動化
* ポケモンSVのテラレイドバトルのローカル通信のホストとして、同じレイドの開催とリセットを繰り返すプログラム
* あらかじめ報酬の良い(テラピース、秘伝スパイス、特性パッチなど)レイドを探し、そのレイドを何度も開催してゲストとなる2~4台目のソフトで何度も報酬を回収可能
* ゲストはホスト画面のあいことば(数字4桁)を入力する必要あるためマイコン単体では自動化不可。手動or画像認識付の自動化環境で周回
*
* こちらは★6のドヒドイデやハピナスなどの一撃で倒すことのできないレイド用。テラピース、秘伝スパイス、特性パッチなど集め用。
* ホスト、ゲストともにドレイン技を連打して時間内に倒すことを想定。ハラバリー@メトロノームのパラボラチャージなどをホスト、レイド共に使用。
*
*
* 初期条件は以下の通り
* 1. ポケモンSVのホスト(1台目)を起動し、報酬の良いテラスタルオーブを探す。
*   ★6ドヒドイデなどの一撃で倒せないポケモンで、目的のテラピース、秘伝スパイス、特性パッチなどを落とすものを見つける。
*   必要に応じて、オーブ前でセーブしてから1度レイドに挑み、報酬を確認しておく。
* 2. オーブ前、Aボタンでレイド開始できる位置でセーブし、1度ソフトを終了する。
* 3. Switch本体の日時を、同じ日付の範囲で時計を巻き戻す(日付が変わるとレイドが変更されるため、自動化中に日付が変わらないようにする)
* 4. ソフトを起動し、手持ちの1番上にレイドで使用するポケモンを置く。使用する技を1番上に置く。
* 5. オーブに話しかけられる状態からマイコンを挿してスタート。自動でレイドを開催するため、ゲスト側はホスト画面に表示されるあいことばを入力して参加する。
*/


#include <auto_command_util.h>



// クリスタルの目の前に立った状態からレイドを開始する
// 募集4秒+指定時間/レイド開始3秒+指定時間

void raidLocalHost(){
   
// 目の前のクリスタルに話しかけ、ローカル通信で募集する
    pushButton(Button::A, 2000, 2);
   
// 60s待機
    delay(30000);
    delay(30000);
   
// レイドを開始する
    pushButton(Button::A, 500, 5);
   
// 1分待機(戦闘開始まで45秒程度)(必要であればここにA入力などすることで戦闘補助)
    delay(30000);
   
// 1分半程度A連打
    pushButton(Button::A, 400, 180);
   
// RA連打でテラスタル起動1分
    // チャージが足りないとメッセージ4秒ほど、Rの4秒後にAを押せるようにする

    for(int i=0; i<90; i++){
      pushButton(Button::R, 500);
      pushButton(Button::A, 300);
    }
   
// 3分半程度A連打
    // 繰り返すレイドに応じてここのループ回数を調整
    // レイド時間いっぱいかかる場合は450程度。レイド失敗の可能性がある場合は450推奨

    pushButton(Button::A, 400, 450);
    //delay(30000);
}

// レイドの途中でHOME画面へ移り、ソフトを終了、再起動する
// 53秒程度

void gameResetAndRestart(){
   
// ホーム画面に戻る
    pushButton(Button::HOME, 1000);
   
// ユーザー切り替え
    pushButton(Button::Y, 800);
    pushButton(Button::A, 5000);
   
// 同じユーザーを選択、動けるところまで待機
    // 「本体更新」が出る場合は更新せずに始める

    pushHatButton(Hat::UP, 300);
    pushButton(Button::A, 500);
    pushButton(Button::A, 20000);
    pushButton(Button::A, 25000);

}


void setup(){
   
// 最初の数回の入力はswitchが認識しない場合があるので、無駄打ちをしておく
    pushButton(Button::B, 500, 13);
    

}

void loop(){
   
// テラスタルオーブの前からスタート
    raidLocalHost();
    gameResetAndRestart();

}

 

最後に

本スケッチを使用することで、ポケモンSVのテラレイドバトルのローカル通信のホスト側の周回操作を自動化できます。レイドバトルを周回することで、金策だけでは入手できないテラピースや秘伝スパイス、特性パッチなどをあつめることができます。あくまでゲスト側でのアイテム回収を目的としており、ホスト側はリセットするためアイテムなどは貯まりません。

本記事の内容だけではゲスト側を自動化することはできません。ホスト画面のあいことばを読み取る必要があるため、マイコン単体での自動化はできず、手動目視であいことばを入力するか、Poke-controllerなどの画像認識を使用できる自動化環境を整える必要があります。

 

プログラムの不備、改善点などありましたらコメントやお問い合わせからお願いいたします。

Arduino Arduino Leonardo (ピンソケット・ピンヘッダ実装済) 【A000057】
by カエレバ

0 件のコメント:

コメントを投稿

【ポケモンSV×arduino06】道具プリンター乱数自動化(藍の円盤)

 ※本記事は、ポケモンSVの藍の円盤(DLC)にて、 道具プリンター を決まった日時に起動することで 特定のアイテム、ボールを狙って量産する操作を自動化 するプログラムについて解説した記事です。ポケモンSVの操作をArduino Leonardoで自動化しております。 本記事の内...