2021/03/14

【ポケモン×Arduino_07】木の実揺らし自動化

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

 

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


 

きっかけ、動機

第02回目の記事にて、対戦やオシャボ収集に役立つアイテムを一通り手に入るようになりました。ただし、これらの中に含まれていないアイテムとして、努力値を下げてなつき度をあげるきのみ(ザロク、マトマなど)があります。これらの木の実は努力値振りの微調整やなつき進化に役に立ちますが、収集する方法は

・1日1回ずつ、フィールド上の木を揺らすことで確率で落ちてくる

・一部のレイドバトルの報酬として手に入る

となります。意外と入手手段がなく、無駄遣いしていると枯渇しがちであるため、自動化することでの収集を試みました。

日本酒を飲みながらの息抜きに10分くらいで作った手抜きプログラムです。

これで何ができるの?

今回の自動化プログラムは、入手手段の限られる木の実について、日付変更バグ(時渡り、ランクマッチを使用)をすることによって繰り返し入手する作業を自動化しました。努力値下げの木の実やカレーの具材として使う木の実、あるいはぼんぐりの収集を楽にします。 


原理、おおまかな流れ

概要

今回の自動化では、日付変更バグを使用します。

ポケモン剣盾では、ランクバトルを1戦以上行った直後、他の通信を始めない限りはSwitch本体の時間をいじってもペナルティが発生しないという仕様バグがあります。これにより、1日1回しか発生しないイベントを日付変更により何度でも繰り返すことができます

 

本プログラムでは、

1日1回しか揺らすことのできない木を揺らして木の実を獲得する>日付を進めて木の実を復活させる

という動作を繰り返します。

準備、必要なもの

必要な準備、つまりは日付変更バグに必要な準備として

①ランクマッチを勝敗のつく形で1戦以上行う(Online加入必須)

②ランクマッチを終え、他の通信をせずにフィールド画面に戻り、Yボタンを押してから通信をローカル通信に戻す

③揺らしたい木の前に立つ

となります。


あとはマイコンを挿すことで、木を一回だけ揺らして木の実1~3個を回収します(2回以上揺らすと野生ポケモンが降ってきて戦闘になる可能性があります)。A連打、B連打を繰り返すだけです。

 

作成したスケッチ

作成したスケッチは以下のようになります。

スケッチのファイルはこちら。(Ver1.11)

Switch本体13.0.0アップデートに伴いVer1.1に更新しました。変更箇所について詳しい解説はこちら

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


(Ver1.0)

 
/**
* 目の前の木から木の実を取り続ける
* 揺らして1回目は野生ポケモンが出ないため、確実に木の実1~3個が手に入る
*
* 初期条件は以下の通り
* 1.ランクマバグを使用し、使える状態であること
* (オンラインでランクマッチを1戦以上行った後通信をローカルに戻す。また、本体設定の「日付と時刻」の時間合わせをOFF)
* 2.目的の木の実が出る木の前に立ってセーブ
* 3.マイコンを挿してスタート
*/

#include <auto_command_util.h>

void obtainBerry()
{
  //木に話しかけ、1回だけ揺らして木の実1~3個獲得
  pushButton(Button::A, 200, 10);
  // 計13.5秒
  pushButton(Button::B, 200, 35);
}

void dayTripper()
{
  // ホーム画面 > 設定
  pushButton(Button::HOME, 1000);
  pushHatButton(Hat::DOWN, 100);
  pushHatButton(Hat::RIGHT, 100, 5);
  pushButton(Button::A, 1000);
  // 設定 > 本体 > 日付と時刻
  pushHatButtonContinuous(Hat::DOWN, 2000);
  pushHatButton(Hat::RIGHT, 100);
  pushHatButton(Hat::DOWN, 100, 4);
  pushButton(Button::A, 500);
  // 日付と時刻 > 現在の日付と時刻
  pushHatButton(Hat::DOWN, 100, 2);
  pushButton(Button::A, 500);
  pushHatButton(Hat::RIGHT, 100, 2);
  pushHatButton(Hat::UP, 100);
  pushHatButtonContinuous(Hat::RIGHT, 1000);
  pushButton(Button::A, 500);
  // ホーム画面 > ゲーム画面
  pushButton(Button::HOME, 1000);
  pushButton(Button::A, 500);
}


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

void loop() {
  obtainBerry();
  dayTripper();
}
 

 

最後に

本スケッチを使用することで、木を揺らすことで手に入る木の実を量産することが可能となります。努力値を下げる木の実を使って、努力値振りの調整やなつき進化にどうぞ。

日付変更バグが必要なため、ランクマッチに潜った後にでも使用することをおすすめします。

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

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



 

0 件のコメント:

コメントを投稿

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

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