【マイコン】スプラトゥーン3のヒーローモードでイクラ集めを自動化する

マイコンを使ってスプラトゥーン3の自動化を行いました。今回、自動化したのはヒーローモードでのイクラ集めです。

イクラ999 使ってドローンを動かす? オルタナのどっかから アイテムを見つけてくれるよ

ヒーローモードを進めると毎日アイテムを持ってきてくれる「ブキチドローン」という要素が解禁されるのですが、ドローンを飛ばすのにイクラが必要になるため自動化しようと思いました。

当ブログはポケモンのブログなのでこの記事を書くかは迷ったのですが、自動化記事を目当てに来られる方もおり、他のSwitchのゲームの自動化もそれなりに需要があると考え公開することにしました。

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

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

関連記事

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

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

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

ソースコード

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

/**
 * スプラトゥーン3のヒーローモードでイクラ集めを自動化するスケッチ
 *
 * ※ 当プログラムはスプラトゥーン3のVer1.1.1で動作確認を行っております。アップデートにより正常に動作しなくなる可能性がありますのでご了承ください。
 *
 * 初期条件は以下の通り
 * 1. ヒーローモードで「宇宙の中心が、ここにある。」のヤカン上にいること
 * 2. Rスティックの操作感度が「0」であること
 * 3. Rスティックの上下操作が「ノーマル」であること
 * 3. ジャイロ操作が「OFF」であること
 */

// ヤカンに潜る際のロード時間
const int START_LOADING_TIME_MS = 10000;

// ミッションをクリアした後、自由行動できるようになるまでの時間
const int CLEAR_LOADING_TIME_MS = 30000;

// リッターを構えるまでの時間
const int ADJUST_TIME_MS = 6000;

// ライブラリを読み込むためのコード(詳細: https://github.com/lefmarna/NintendoSwitchControlLibrary)
#include <NintendoSwitchControlLibrary.h>

// 「使いたいコントローラーのL+Rを押してください」を閉じる
void selectController() {
    pushButton(Button::L, 100);
    pushButton(Button::R, 100);
    pushButton(Button::A, 3000);
}

// ミッションを開始する
void startMission() {
    holdButton(Button::ZL, START_LOADING_TIME_MS);
    pushButton(Button::A, 2000);
    tiltLeftStick(Stick::NEUTRAL, Stick::MIN, 2000);
    pushButton(Button::A, 3000);
}

// インクを発射する
void shootInk() {
    tiltRightStick(Stick::NEUTRAL, Stick::MIN, 50);
    holdButton(Button::ZR, 2000);
}

// マイコンのセット時に1度だけ行われる処理
void setup() {
    // Switchがマイコンを認識するまでは信号を受け付けないため、適当な処理をさせておく
    pushButton(Button::B, 500, 5);
    // 「使いたいコントローラーのL+Rを押してください」の画面が出るまで待機する
    delay(5000);
    // 「使いたいコントローラーのL+Rを押してください」を突破する
    selectController();
}

// ここに記述した内容がループされ続ける
void loop() {
    startMission();
    delay(ADJUST_TIME_MS);
    shootInk();
    delay(CLEAR_LOADING_TIME_MS);
}

コードの使い方

コードを使うにあたって確認して欲しいことが3点ほどあります。

設定の確認

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

  1. ヒーローモードで「宇宙の中心が、ここにある。」のヤカン上にいること
  2. Rスティックの操作感度が「0」であること
  3. Rスティックの上下操作が「ノーマル」であること
  4. ジャイロ操作が「OFF」であること

今回はRスティックを使うため、感度や操作設定を統一する必要があります。

また、ジャイロ操作がONの際はRスティックでの上下操作が無効になってしまうため、ジャイロもOFFにする必要がありました。

スタート位置は以下になります。「ZL」ボタンでヤカンに入れる位置でスタートしてもらえればキャラクターの向きなどの指定はありません。

宇宙の中心が、ここにある。

動作環境について

今回の動作はシビアな動きが要求されるため、「環境が異なると動かなくなる」といったことが起こる可能性があると考えております。

なお、筆者の環境は以下の通りです。

  • Nintendo Switch 有機ELモデル
  • スプラトゥーン3 – ダウンロード版
  • ゲームソフトの保存先 → 本体保存メモリ
  • Nintendo Switch本体のバージョン: 14.1.2
  • スプラトゥーン3のバージョン: 1.1.1
  • TVモードで動作確認

また、ヒーローモードのクリア状態は以下の通りです。

  • ヒーローモードクリア済
  • 隠しヤカンクリア済
  • 全エリア調査完了済
  • ヒーロー装備全強化済

もし、うまく球が当たらない事象が発生する場合は、Rスティック感度を「0.5~1」程度に上げてみるなどの微調整を試していただきたいです。

感度調整をいくら試しても難しい場合は、19~20行目にある以下の値を調節することで撃つまでの待機時間を変更することができます。自身の環境に合った値を探していただき安定して当てられる調整を探してもらえればと思います。

// リッターを構えるまでの時間
const int ADJUST_TIME_MS = 6000;

そもそも、ロードに時間がかかっていてプログラムがうまく動作していないという場合は、13~14行目、16~17行目にロード時間を指定する値を用意していますので、ここの値をより大きな値に変更して試していただければと思います。

// ヤカンに潜る際のロード時間
const int START_LOADING_TIME_MS = 10000;
// ミッションをクリアした後、自由行動できるようになるまでの時間
const int CLEAR_LOADING_TIME_MS = 30000;
筆者の環境でも20000 → 99999まで稼ぐ中で、5回ほど失敗を確認しています。(2日に分けて動かしていたのですが、1日目(70000程度まで)は成功率100%を記録していました。しかし、2日目は20%程度の確率で失敗するようになりました。2日目はRスティック感度を0.5にすることでその後安定するようになったので、不安定な場合は感度をいじってみると良いと思います。)
成功率100%ではないため、ある程度は見張れる環境での使用をおすすめします。

最後に

球が当てられない点に関しては自身で微調整していただきたいのですが、それ以外の点で何かループから抜けてしまうような事象が見受けられましたら、@lefmarnaまでお知らせください。

スポンサーリンク