2021/08/07

【ポケモン×Arduino11】バトルタワー周回自動化(BP集め)

※本記事は、ポケモン剣盾のふしぎなおくりものの受け取りの自動化について解説した記事です。ポケモン剣盾の操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。

2021/08/08追記 言語によってテキスト送りが間に合わないところがあったので微調整、こっそり差し替え。

 

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


 

きっかけ、動機

対戦に必要な一部のアイテムには、バトルポイント(BP)以外での入手が不可能あるいは面倒なものがいくつかあります(パワーウエイト等、赤い糸、ミントなど)。今回は、BPの主な入手先であるバトルタワーでの戦闘を周回することでのBP集めを自動化することにしました。

久しぶりにバトルタワーに挑みましたが、自動化以前にバトルタワーそのものの効率が悪いです。自身でプレイできる時間や戦闘経験があるのであれば、ランクマッチでマスターボール級まで到達(シングルダブル合わせて毎月600BP×2+@)、あるいは鎧の孤島での縛り組手(1勝3BP、5連勝で20BP)をおすすめするというのが本音です。

 

マクロコントローラーを使用した自動化は他所で報告されておりますが、マイコン用に最適化したものが見つからなかったので、遊び心でやってみようと思いました。今回は実用よりも好奇心優先です。


これで何ができるの?

今回作成したプログラムでは、殿堂入り後のバトルタワー(旧ローズタワー)で挑むことのできる戦闘を自動で繰り返し、BPを稼ぐことができます。

バトルタワー自体の効率が悪いので、手っ取り早くBPを集めるなら他の方法をおすすめします。ストーリークリア直後や、普段ランクマッチなどをしない人が使うなど、対戦環境が整っていないのであれば使えるかと思います。

 

原理、おおまかな流れ

概要

本プログラムでは、バトルタワーの受付からスタートし、ポケモンの選択などをしたうえでバトルを開始し、ザシアンやウオノラゴンなどで1つの技のみを選択して戦闘を繰り返します。

今回の自動化では、

AAAABAAA ↓↓ AAA ↓↓ AA ↓↓ AAABBBBB ↑長押し

という操作をひたすら繰り返しています。この操作は、

受付に話しかける~ポケモンを選出して戦闘を開始する

という操作をベースとして作っています。ループの最後のBボタン連打と上入力長押しをすることにより、ループの最初のAを基準として受付やポケモン選択を行えるようにしました。

 

そのうえで、

・戦闘中に「たたかう」以外の選択肢(逃げるなど)が実行されないようにする
・戦闘不能時に、瀕死でないポケモンを繰り出せるようにする

といったことを考慮してボタンの順番や時間を調整しています。 1ループ約19秒であり、意図しない操作が起きても19秒ごとに正しい操作に戻れるようにしています。


準備、必要なもの

本スケッチでは、以下の準備が必要となります。

・バトルタワー周回用のパーティーを用意する。

バトルタワー周回のためのパーティーの条件は

1つの技のみをもつポケモン3匹だけ用意する

となります。Aボタンの連打だけで戦闘を行う性質上、威力の高い技、持ち物、ポケモンの種類などを選択することが重要となります。

おすすめはザシアン(朽ちた剣、きょじゅうざん)、ウオノラゴン(スカーフ、頑丈顎、エラがみ)、ムゲンダイナ(ダイマックス砲or火炎放射など)、パッチラゴン(電撃嘴)あたり。伝説ポケモンも使用可能なので過去作伝説も良いかと。

ただしタイプ相性や特性などにより無効となる場合があるので注意。 

私が使用したパーティーを公開しておきます(2021/08/07、しばらくすると公開をやめているかもしれないのでお早めに)。タイプ的に無効化されず攻撃の高いザシアンを先頭に、鋼技が半減されるポケモンの多くに等倍となる悪技かつ特殊技としてイベルタル、最後に先制エラがみで威力の高いウオノラゴンとなります。悪技があるのでヌケニンが出てきても大丈夫です。大半の勝負には勝てるかと思いますが、どうしても負ける場合も時々あります(ラス1ウオノラゴンに貯水持ち、ギルガルドにキンシで粘られるなど)。

 

 パーティーさえ準備できたら、あとはバトルタワー受付に話しかけることのできる位置でマイコンを挿して開始してください。

 

作成したスケッチ

作成したスケッチのファイルはこちら

2021/08/08追記 言語によってテキスト送りが間に合わないところがあったので微調整、こっそり差し替え。


なお、執筆者がスケッチを作成するにあたり使用した環境は以下のようになります。

・データは日本語のシールド(パッケージ版+DLCあり)


使用する言語、あるいは本体やソフトの動作環境、通信速度などによって待機時間などが変わる可能性があります。

本スケッチを実際に使用した動画はこちら↓

 

 
/**
* バトルタワーの攻略を自動化。BP集め用。
* 1戦2BPと効率は悪いので注意。
*
* 初期条件は以下の通り
* 1.Aボタン連打で戦えそうなポケモン3匹、技は1つのみのパーティーを用意する(ザシアンなど推奨)。
* 2.バトルタワーの受付に1度会話をし、パーティー選択画面で使用するパーティーをあらかじめ選んでおく。
* 3.受付に話しかける前、あるいは受付を終えたところでマイコンを挿してスタート
*/


#include <auto_command_util.h>

// タワー受付での会話をスムーズに進めることをベースとして、戦闘時の挙動に合うように調整
void towerLoop(){
    // ループ開始地点。受付との会話スタート
    pushButton(Button::A, 400);
    pushButton(Button::A, 200);
    pushButton(Button::A, 200);
    pushButton(Button::A, 900);
    pushButton(Button::B, 900);
    // シングルバトル選択
    pushButton(Button::A, 400);
    pushButton(Button::A, 1200);
    pushButton(Button::A, 400);
    // パーティ選択、はい
    pushHatButton(Hat::DOWN, 100, 2);
    pushButton(Button::A, 1400);
    // 上から1番目を選択、決定
    pushButton(Button::A, 900);
    pushButton(Button::A, 400);
    // 上から3番目を選択
    pushHatButton(Hat::DOWN, 100, 2);
    pushButton(Button::A, 900);
    pushButton(Button::A, 400);
    // 上から2番目選択
    pushHatButton(Hat::DOWN, 100, 2);
    pushButton(Button::A, 400);
    pushButton(Button::A, 400);
    // 完了にカーソル移動するので完了
    pushButton(Button::A, 400);
    // B連打と上入力長押しで会話リセットorカーソルを1番上に。
    // 受付ではいったん会話をキャンセルし、次のループで会話を開始する
    // 戦闘時は「たたかう」まで戻る
    // 戻れない、つまり戦闘不能であれば瀕死でないポケモンを順に選択

    pushButton(Button::B, 200);
    pushButton(Button::B, 1200, 2);
    pushButton(Button::B, 200, 2);
    pushHatButtonContinuous(Hat::UP, 1000);
    
}


void setup(){
    pushButton(Button::B, 300, 13);
}

void loop(){
    towerLoop();

}
 

 

最後に

本スケッチを使用することで、殿堂入り後のバトルタワーを周回してBPを稼ぐことができます。ただし、1戦2BPと効率は悪いので、通信対戦が苦でなければランクマッチでマスターボール級到達をおすすめします。ランクマッチをする余裕がない、あるいはしても足りない場合に用いる程度が良いと思います。

個人的にも、遊びで作ったは良いものの、ランクマッチでBP余りがちなんで使う機会はあまりなさそうです・・・

 

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


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



0 件のコメント:

コメントを投稿

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

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