2024/04/29

【ポケモンSV×arduino05】そらとぶタイムアタック初級周回自動化(藍の円盤)

 ※本記事は、ポケモンSVの藍の円盤(DLC)にて、空を飛ぶチャレンジ初級を繰り返しクリアすることでBP稼ぎを自動化するプログラムについて解説した記事です。ポケモンSVの操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は剣盾の00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。


 2024/04/29:バージョン1.1を仮公開します。出先で録画環境がないため、解説の動画、画像等は後から追加予定です。

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


 

きっかけ、動機

ポケモンSVのDLC第2弾、藍の円盤が公開され、ブルーベリー学園に行けるようになりました(イマサラタウン)。学園では野生の御三家ポケモン出現やボールの投げ方など各種要素の解放、ジムリーダー等をリーグ部に招待して対戦・交換、道具プリンターによるレアボール、特性パッチ、テラピース量産、購買部での進化アイテムや技マシンの購入など、BP(ブルーベリーポイント)がたくさん必要になります。

BPを集めるには、ブルレク(マルチプレイで効率UP)やそらとぶタイムアタックをおこなう必要があります。そのうちそらとぶタイムアタックなら自動化できそうだったため、初級を自動化してみました。もちろん中級~超級の方がBP貰えるけど面倒


これで何ができるの?

ブルーベリー学園のキャニオンスクエアにて行うことのできるそらとぶタイムアタックの初級を繰り返しクリアします。1周約90秒に10BPずつ、1時間で400BP弱を稼ぐことができます。

稼げる効率はいまいちですが、寝ている間、複数台持ちのユニオンサークル時などに動かし続けることで要素解放等に必要なポイントくらいは十分稼げます。

原理、おおまかな流れ

概要

本プログラムでは、

 そらとぶタイムアタック受付に話しかけ、初級を開始
→初級コースをクリア
→受付に戻り10BP獲得→再度話しかけ...

を繰り返します。

中級以降だとコースが複雑になり面倒成功率が下がるため、ひとまずは初級のみ自動化です。

 

初級コースの進行ルートについて

本自動化では、受付でA連打して初級コースを選択、走破します。

詳しいルートは、後日動画を公開しますのでそちらで確認してください。

ここでは、人力での通常プレイとは異なるであろう動作について解説します。

開始直後に一時停止

そらとぶタイムアタックでは、3・2・1のカウントダウン後にスタートしますが、受付からコースに移動する際のロード時間にばらつきがあり、動作がずれることで成功率が下がることがありました。

そこで、本スケッチではスタート前後にYボタン(あきらめる)を連打することにより一時停止することとしました。Yボタン入力を連打しても解除されることはなく、主人公の動き、残り時間のカウントが止まります。その後にBボタンで解除することで、同じタイミングからタイムアタックを再開でき、その後の動作も比較的安定しました。


進行ルートについて

タイムアタックではリングをくぐることで残り時間が延長されるため、通常であればすべてのリングをくぐるように進んでゴールを目指すかと思います。

一方、本スケッチでは最初のリング4個だけくぐり、その後はコースを無視して直接ゴールまで向かいます。ほぼまっすぐ、上に上昇して岩場をくぐったところで左に方向転換、白い建物の左側、滝やゴール(アーチ)とほぼ平行方向に進み、タイムアップ数秒前にゴール左側から右折してゴールします。

ショートカットによる時間短縮(残り時間ではなく周回時間)になる他、万が一動作がずれてゴールできなかった場合にはすぐタイムアップとなり、ゴール時とほぼ同タイミングで受付に戻り次の周回で再チャレンジできます。

 

遠くを見ると処理落ちする

ポケモンSV、過去のポケットモンスターシリーズの中でも良作寄りなのでしょうが、いかんせん処理落ちする場合があります。

今回のそらとぶタイムアタックも例外ではなく、私の環境では雷雨の時、岩場をくぐって広大な景色が見えるようになったあたりから処理落ち、残り時間の時間経過が遅くなることが確認できました。景色の描画に負荷がかかってることが原因と考えられますホンマクソ

今回、この処理落ちへの対策として、上を向くこととしました。

滝やゴールと平行方向を向いたあたりから上を向くことで、空以外の建物などが見えず、描画されなくなることで処理落ちがあまり起こりません。雷雨の日の成功率が上がりました。


一方、空ばかり見えても動作確認ができないため、動作に問題がある際はカメラ視点変更のための右スティック上倒し

 tiltJoystick(0, 0, 0, -100, 2000);

を修正してください。近くに「★」をコメントアウトしています。


準備、必要なもの

本スケッチでは、マイコンを挿す前に特別な準備は必要ありません。

空飛ぶチャレンジ受付前でマイコンを挿してスタートしてください。

 

もしタイミングがずれてゴールできない場合、スケッチ中の「★」付近を参照し、調整してください。

 

作成したスケッチ

そらとぶタイムアタック初級周回自動化のスケッチ最新版2024.04.29_ver1.1はこちら


本スケッチを実際に使用した動画は準備中↓

 

 ↓以下はスケッチVer1.1

/**
* SV藍の円盤、空飛ぶチャレンジ初級をひたすら周回してBP回収するプログラム
* 受付前からスタート、空飛ぶ初級>開始直後に一時停止>最初のリング4個をくぐった後はゴールへ直行>クリアして受付前戻る、以下ループ
* 約90秒で1周10BP、たまに失敗するので1時間400BP弱。
*
* 初期条件は以下の通り
* 1. 空飛ぶチャレンジ受付前でマイコンを挿してスタート
* 2. もしタイミングがずれてゴールできない場合、下記プログラムの「★」付近を参照、調整。
*/


#include <auto_command_util.h>


// 空飛ぶチャレンジ周回
void flyBiginner(){
    // そらとぶタイムアタック受付に話しかけ。A連打で初級コースを選択
    pushButton(Button::A, 100, 25);
   
// ロードが終わるまで待機、開始まで約20秒。誤動作対策のため最初だけB連打
    pushButton(Button::B, 100, 25);
   
// ★Switch本体によりロード時間に差が出た場合は、ここのdelay値を調整(ミリ秒)
    delay(9700);
   
// Y連打。タイムアタック開始直後に一時停止する
    pushButton(Button::Y, 50, 60);
    delay(300);
   
// タイムアタックを諦めますか(テキスト送り)→いいえ
    pushButton(Button::B, 100, 2);
   
// キャンセルから3秒ほど、リング1個目通過あたりまでそのまま進む
    delay(1500);
   
// 直進途中で十字キー右を押す。タイムアタック時は何も起きず、誤動作でフィールド上にいる場合はブルレク一覧を開く
    pushHatButtonContinuous(Hat::RIGHT, 1400);
   
// リング1個目通過あたりでLスティック右上1秒ほど、そこからまっすぐ2秒ほど
    tiltJoystick(40, -100, 0, 0, 800);
    delay(2000);
   
// リング2個目通過直前からLスティック上3.5秒ほど(3個目の上側ギリギリを通過)、そこからまっすぐ5秒弱(4個目の左側ギリギリを通過)
    tiltJoystick(0, -100, 0, 0, 3000);
    delay(4500);
   
// Lスティック左1.6秒ほど、5個目以降のリングからは逸れた状態でカメラリセットL
    // ★角度が問題なければ、白い建物左角の上空、滝(2本のうち南西側)を通過し、滝やゴール(アーチ)とほぼ平行方向に飛行
    // 角度に問題がある場合はtiltJoystick(~~~)末尾の1600を調整

    tiltJoystick(-100, 0, 0, 0, 1600);
    pushButton(Button::L, 100);
   
// 滝のあたりまで直進、15秒ほど。
    // コースが雨の日に遠くの景色を見る(描画する)と処理落ちするため、その対策として右スティックを上に倒して上空を向く(進行方向はそのまま)
    // ★動作確認時は直下のtiltJoystick(~~~)をdelay(2000)に置き換えることを推奨。雨の日以外は処理落ちしない・・・はず(ホンマクソ)

    tiltJoystick(0, 0, 0, -100, 2000);
   
//delay(2000);
    // 滝のあたりで下降

    tiltJoystick(0, 20, 0, 0, 12000);
    tiltJoystick(0, 20, 0, 0, 1000);
    delay(5000);
   
// ゴールが左側に見えたら左に曲がる
    // ★タイミングが合わない場合は直前のdelayを調整。ゴール(アーチ)の奥側に入るように調整することを推奨
    // うまくいけばタイムを3.5秒ほど残してゴール。失敗してもタイムアップのため次のループから再挑戦可能

    tiltJoystick(100, 0, 0, 0, 5000);
   
// 暗転、受付に戻るまで約15秒
    delay(13000);
   
// BPを受け取り(or失敗後会話)
    pushButton(Button::B, 100, 45);
    delay(500);
    
}

// 空飛ぶチャレンジ受付前、会話していない状態からスタート
void setup(){
   
// 最初の数回の入力はswitchが認識しない場合があるので、無駄打ちをしておく
    pushButton(Button::B, 500, 13);

}

// 空飛ぶチャレンジ初級を繰り返す
void loop(){
    flyBiginner();
}

 

最後に

本スケッチを使用することで、ポケモンSVのそらとぶタイムアタックを周回し、地道ながらBP稼ぎを自動化できます。寝ている間にも稼ぎができる他、1人で2台以上本体とソフトを持っている場合、ユニオンサークルを開いて1台だけ手動でブルレク、他は初級自動化することをおすすめします。自動化している本体ではそらとぶ自動化のBPが稼げつつ、手動でこなしたブルレクのBPも全員に入ってくるため、効率よく稼げます。

いつか超級も自動化・・・はたぶん面倒だから作らない。

 

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

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

0 件のコメント:

コメントを投稿

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

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