【マイコン】ダイマックスアドベンチャーを自動化!エンドレスモードの周回でマックス鉱石稼ぎ!

  • 2021年2月12日
  • 2021年2月17日
  • 自動化

今回は、ポケモン剣盾のカンムリ雪原で遊べるダイマックスアドベンチャーの「エンドレスモード」を自動化していきたいと思います。

ポケモンの特性を夢特性に変える『とくせいパッチ』は需要があるのにもかかわらず、『マックスこうせき』が200個も必要ということで、尻込みしてしまっている方も多いと思います。ですが、そんな心配も今日で終わりにしましょう!

マイコンで自動化するコードを紹介していきます。

この記事をご覧になる前に

マイコンをまだ導入していない方は、以下の記事を参考に導入してみてください。このブログでは、Arduino Leonardoというマイコンを使っているため、異なる種類のものではうまく動かない可能性があります。

関連記事

マイコンと呼ばれるものをご存知でしょうか? Switchに接続するだけで様々な作業を "自動" で行ってくれるというものです。 導入すれば作業が楽になるだけでなく、寝てる間に色々稼ぐこともできちゃう便利なアイテムなわけですね! […]

マイコンを使って
ポケモン剣盾
自動化しよう!
【導入編】

今回のコードは「NintendoSwitchControlLibrary」を使用しています。まだダウンロードされていない方は、解凍したフォルダを『Arduino』フォルダの中にある『libraries』フォルダの中にコピーしておいてください。

GitHub

A library for microcontrollers that uses Arduino to automate…

今回のコードについて

ダイマックスアドベンチャーを自動化するアルゴリズムについては、あずき(@Azukiss_poke)氏のブログを参考にさせてもらいました。

140字以上つぶやき

サムネ画像 どうも。あずき(@Azukiss_poke)です。 以前はトーナメントやバトルタワーの自動周回をしていました…

この記事ではマクロコンを使って自動化を行っているということですが、こちらの手順をマイコンに落とし込んだものにも需要があると考えました。

改善案も求められているようなので、コードを検証しつつ効率よく回すアイデアが見つかれば、報告してあげると良いかもしれません。

ソースコード

実際に書いたコードはこちらになります。

コードの改良に成功したため、コードを更新しました。
15時間ほど回してみましたが、1時間あたり平均22個の「マックスこうせき」を稼ぐことができました。(元のコードは平均19個)

変更点は主に2つです。
・1サイクルあたりの周期をやや短くしました。
・ループ破綻を回避するために組まれている↓キーのせいで、「たたかう」を選択すべき状況であっても「ポケモン」や「にげる」を開いてしまうことがあるのですが、そこにハマってしまう確率を少し下げました。

『元のコード』を確認したい方はこちらをクリック
/**
 * 初期条件は以下の通り
 * 1.エキスパンションパスを購入済みであること
 * 2.ダイマックスアドベンチャーの「エンドレスモード」を解放済みであること
 * 3.「マックスダイ巣穴」内の清掃員前で待機していること
 * 4.オフライン状態であること
 * 5.無線のコントローラーが接続されていないこと
 * 6.「設定」から「話の速さ」を「速い」にしておくこと
 * 7.モンスターボールを大量に用意し、ボールの先頭に設定しておくこと
 */

// ライブラリを読み込むためのコード
#include <NintendoSwitchControlLibrary.h>

// マイコンのセット時に1度だけ行われる処理
void setup() {
    // Switchがマイコンを認識するまでは信号を受け付けないため、適当な処理をさせておく
    pushButton(Button::B, 500, 5);
}

// ここに記述した内容がループされ続ける
void loop() {
    pushHat(Hat::DOWN, 2000);
    pushButton(Button::A, 2000, 5);
    delay(2000);
    pushHat(Hat::DOWN, 2000);
    pushButton(Button::A, 2000);
    pushHat(Hat::DOWN, 2000);
    pushButton(Button::A, 2000, 2);
    pushHat(Hat::DOWN, 2000);
    pushButton(Button::A, 2000, 2);
    pushButton(Button::B, 3000);
    holdButton(Button::B, 1500);
}
/**
 * 初期条件は以下の通り
 * 1.エキスパンションパスを購入済みであること
 * 2.ダイマックスアドベンチャーの「エンドレスモード」を解放済みであること
 * 3.「マックスダイ巣穴」内の清掃員前で待機していること
 * 4.オフライン状態であること
 * 5.無線のコントローラーが接続されていないこと
 * 6.「設定」から「話の速さ」を「速い」に、「戦闘アニメ」を「みない」にしておくこと
 * 7.モンスターボールを大量に用意し、ボールの先頭に設定しておくこと
 */

// ライブラリを読み込むためのコード
#include <NintendoSwitchControlLibrary.h>

// マイコンのセット時に1度だけ行われる処理
void setup() {
    // Switchがマイコンを認識するまでは信号を受け付けないため、適当な処理をさせておく
    pushButton(Button::B, 500, 5);
}

// ここに記述した内容がループされ続ける
void loop() {
    pushHat(Hat::DOWN, 2000);
    pushButton(Button::A, 2000);
    pushButton(Button::A, 2000);
    pushButton(Button::A, 2000);
    pushButton(Button::A, 2000);
    pushButton(Button::A, 2000);
    delay(1800);
    pushHat(Hat::DOWN, 2000);
    pushButton(Button::A, 800);
    pushHat(Hat::DOWN, 2000);
    pushButton(Button::A, 2000);
    pushButton(Button::A, 800);
    pushHat(Hat::DOWN);
    pushButton(Button::A, 1000);
    pushButton(Button::A, 1000);
    pushButton(Button::B, 2800);
    holdButton(Button::B, 1400);
}

設定の確認

マイコンを繋げる前に、以下の状態になっていることを確認してください。

『「戦闘アニメ」を「みない」にしておくこと』を追加しました。必須の設定ではないですが、効率に関わってくるため基本的には「みない」にしておくことを推奨します。
  1. エキスパンションパスを購入済みであること
  2. ダイマックスアドベンチャーの「エンドレスモード」を解放済みであること
  3. 「マックスダイ巣穴」内の清掃員前で待機していること
  4. オフライン状態であること(機内モード推奨)
  5. 無線のコントローラー(プロコンなど)が接続されていないこと
  6. 「設定」から「話の速さ」を「速い」に、「戦闘アニメ」を「みない」にしておくこと
  7. モンスターボールを大量に用意し、ボールの先頭に設定しておくこと

ほとんどの設定はいつもどおりですが、「モンスターボールを大量に用意し、ボールの先頭に設定しておくこと」は絶対に忘れないでください。

これを怠ると、マスターボールやガンテツボールといった希少なボールを投げてしまうことに繋がります。

本来であればボールを全て処分しておくのがベストなようですが、そこまでするのは厳しい方も多いと思います。そのため、当ブログでは「モンスターボールを大量に用意すること」を推奨環境とすることにしました。

さいごに

このコードを回していると、各所に無駄な動作が見受けられるかと思いますが、ループから抜けないことを優先しているためにこのような形となっています。

自身でもこのコードは検証していますが、ループから抜けてしまうような自体には遭遇していないので、放置しながら稼ぐのにはすごく重宝しそうです。

また、伝説のポケモンについては「エンドレスモード」では捕まえることができないため、勝手に捕まえてしまう心配がないのもうれしいところですね!

スポンサーリンク