2022/03/05

【BDSP×Arduino03】シェイミ色違い厳選自動化

 ※本記事は、ポケモンBDSPのシェイミの色違い厳選を自動化するプログラムについて解説した記事です。ポケモンBDSPの操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は剣盾の00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。

 

このプログラムは、過去にポケモン剣盾用に作成した色違い厳選プログラムをもとに、BDSP用に改変したプログラムです。剣盾第04回などの記事を参考にしてください。

2021/03/13追記:色違いの出現を確認しました。特に何も変わっていないためVer0.9のままです。

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


 

きっかけ、動機

2/27のポケモンデーということで、ポケモンBDSPにて「オーキドの手紙」が配信となりました(1か月の期間限定のため受け取りはお早めに)。プラチナ以来、久しぶりに色違いシェイミが正規で手に入ることとなりました。Let’s色厳選

BDSPの伝説ポケモンは逃げる、倒すなどした場合は殿堂入りしなければ復活しないため、厳選にはソフトリセットが必要となります(そしてソフト再起動が長い)。一方で今回のシェイミはマップ切り替えのみで復活するため、色厳選自動化します。


これで何ができるの?

主な動作は剣盾第04回などの記事と同様となります。色違いが出るまで「固定シンボルへの話しかけ」>「逃げる」>「マップ下方向へ移動して戻る」、を繰り返します。色違いの光るエフェクトにより時間差が生じることを利用し、色違いが出現した際には「逃げる」を選択せず、「たたかう」から癒しの願い等の技で退場、次のポケモン選択画面で待機します。あとは手動で捕獲してください。


原理、おおまかな流れ

概要

主な動作は剣盾剣盾第04回などの記事と同様となります。

「固定シンボルへの話しかけ」>「逃げる」>「マップ下方向へ移動して戻る」を繰り返しつつ、色違いが出た際には癒しの願い等の自滅技により退場、次のポケモン選択の画面が切り替わらないようにしています。

 

移動パート

シェイミを捕まえずに戦闘を終えると、シェイミの固定シンボルはいなくなります。ただし、場所が切り替わるとシェイミが復活するので、シェイミのいる「花の楽園」と、道中の「海割れの道」を行き来します。

シェイミの固定シンボルの場所から3秒ほど下へ走るとマップが切り替わります。単純に上下移動を行い、固定シンボルにぶつかったところでAボタンを押すだけで戦闘パートへ移ります。


戦闘パート

戦闘パートでは、基本的には「たたかう」「ポケモン」「バッグ」「にげる」の選択画面で「にげる」を選択して戦闘を終了します。

「にげる」を選択する操作は簡単です。「たたかう」などのコマンド画面で、

1. 十字ボタン上↑を1回押し、カーソルを「たたかう」から「にげる」に動かす
2. Aボタンを押す(うまくにげきれた!)

となります。色違いのシェイミが出た場合、光るエフェクトが約2秒ほど入るため「たたかう」の表示が遅れます。そのため、通常時の「たたかう」表示から2秒以内に1の上入力が入れば、色違いの出現の有無で動作を分岐させることができます。

 色違いが出現した場合は、下記の「待機パート」に移ります。

 

BDSPで戦闘開始時に考慮すべき要素として以下が挙げられます。

1. 連れ歩きをOFFにしてもなつき度が上がり続け、余計なテキストやモーションが生じる
2. 野生ポケモンが2V以上の場合、戦闘開始時に主人公正面のカットイン演出が追加されることがある(シェイミは3V固定だが確定演出ではない

そのため、光るエフェクト2秒での分岐には、これらを考慮する必要があります。

1. なつき度が上がらないように、定期的にリセットを手動でかける、漢方薬などでなつき度を下げる動作を追加する(未実装)などをする
2. カットイン演出により1秒くらいの時間差が生じるため、どちらの場合でも色違い判定2秒におさまるようにする


なつき度を最大にした状態で実行することも不可能ではないかと思いますが、

①カットイン無し+なつきテキスト無し
②カットイン無し+なつきテキスト有り
③カットイン有り+なつきテキスト無し
④カットイン有り+なつきテキスト有り

の4通りの時間差を2秒以内に収める必要があり、シビアです。①と④の差で2秒くらいの体感。

 

今回はシェイミに会う前に漢方薬を買い忘れたため、なつき度を下げる動作は実装しておりません。実装するのであれば、ポケモンに火炎玉などをもたせ、万能粉や力の根っこの使用を繰り返すことをおすすめします。


待機パート

色違いが出現した場合に、上記の移動パート<>戦闘パートの繰り返しと同じ動作のまま、自身の先頭のポケモンを戦闘不能にし、次のポケモン選択画面へ移ります。

自身のポケモンを戦闘不能にするためには、癒しの願い、置き土産等の自滅技を使用します。戦闘パートの2秒の時間差に引っかかった場合、「にげる」を選択せずにしばらく待機します。移動パートでマップを切り替えた後、固定シンボルに話しかけるA連打にて技を選択(癒しの願い)して退場、次のポケモンを選択します。

次のポケモン選択では、1番上の瀕死ポケモンにカーソルが合っているうちは次のポケモンとして戦闘が再開されることはありません。

以上のことから、手持ち1番上のポケモンの1番上の技を自滅技にしてください。

 おすすめはサーナイト@いやしのねがい となります。地下大洞窟でラルトスorキルリアLv60が出るので、捕まえて進化、技思い出しで癒しの願いを覚えます。 

特性シンクロで捕まえれば、性格厳選も兼ねることができます。

 

準備、必要なもの

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

初期条件は以下の通り

1. 先頭を、自爆技を1番上の技に持つポケモン(癒しの願い推奨、置き土産なども可)、足が遅いならけむり玉を持たせる。
   また、なつき度は下げておくことを推奨(なつき度によりモーションやテキストが増えるため)

2. その他、捕獲要因やボールを用意

3. 戦闘アニメーションOFF、テキストスピード速いなど設定しておく

4. シェイミのいる「花の楽園」へ行き(期間限定アイテムの受け取り必要)、固定シンボルのシェイミの前に立ちレポート

5. マイコンを挿して周回スタート、なつき度が上がる場合は適宜ソフトリセットしてやり直し

 

作成したスケッチ

作成したスケッチはこちら。動作確認できていないためしたうえで変更点はないためVer0.9のままです。

2021/03/13追記:色違いの出現を確認しました。特に何も変わっていないためVer0.9のままです。

 

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


 /**
* ポケモンBDSP、シェイミの色違い厳選用プログラム
* 画像認識等は用いず、遭遇して光るエフェクトが出る約2秒の時間差で色違いを判定。
* いつものように、色違いが出現した場合は癒しの願い等で退場、次のポケモンの選択画面で待機します。
*
*
* 初期条件は以下の通り
* 1. 先頭を、自爆技を1番上の技に持つポケモン(癒しの願い推奨、置き土産なども可)、足が遅いならけむり玉を持たせる
*    また、なつき度は下げておくことを推奨(なつき度によりモーションやテキストが増えるため)
* 2. その他、捕獲要因やボールを用意
* 3. 戦闘アニメーションOFF、テキストスピード速いなど設定しておく
* 4. シェイミのいる「花の楽園」へ行き(期間限定アイテムの受け取り必要)、固定シンボルのシェイミの前に立ちレポート
* 5. マイコンを挿して周回スタート、なつき度が上がる場合は適宜ソフトリセットしてやり直し
*/


#include <auto_command_util.h>



// シェイミと戦闘>逃げる>上下移動>戦闘 を繰り返し
// 色違いの場合は2秒ほど遅れるため癒しの願い等で退場
// 2V以上の主人公カットイン1秒くらいがある時とない時があるため、両者が2秒の中に収まるようにする

void shayminBattle(){
    // シェイミ固定シンボルに話しかけ、戦闘開始。「たたかう」表示まで約18秒
    // 16秒ほどA連打(癒しの願い~)
    pushButton(Button::A, 100, 80);
    // ここの時間を調整
    // なつき度が低い場合は1500程度、懐いている場合は2800くらい?
    // 色違いのエフェクトが約2秒のため、「たたかう」が表示されて2秒以内に次の十字上↑入力がされるようにする

    delay(1500);
    // 2秒ほどB連打
    pushButton(Button::B, 100, 10);
    // 戦闘開始、色違い光モーションなければ十字上>逃げる
    // 色違いならば、1つめの上入力間に合わないため戦闘>自爆技で自分側瀕死

    pushHatButton(Hat::UP, 1000);
    pushButton(Button::A, 800);
    // 戦闘終了、B連打でテキスト送り
    pushButton(Button::B, 100, 30);
    // ダッシュのためB押しっぱなし
    SwitchController().pressButton(Button::B);
    // シェイミのいなくなったフィールド上にて、下へ移動してマップ切り替え

    pushHatButtonContinuous(Hat::DOWN, 3200);
    // 上へ移動してシェイミ復活、繰り返し
    pushHatButtonContinuous(Hat::UP, 3700);
    SwitchController().releaseButton(Button::B);

}



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

void loop(){
    shayminBattle();
}

 

最後に

本スケッチを使用することで、シェイミ色違いの厳選が楽になるかと思います。もっとも、今作の光るお守りは孵化にしか効果がない=シェイミ厳選は1/4096のようなので、気長に待ちましょう。

オーキドの手紙複数受け取りのために、しばらくは新規データを進める作業となるかと思います。配布期間限定しなくてもいいのに・・・。

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

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

1 件のコメント:

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

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