2022/02/12

【アルセウス×Arduino02】図鑑タスク埋め自動化@訓練場(力技や対戦相手変更など)

 ※本記事は、ポケモンLegendsアルセウスの経験値稼ぎと図鑑のタスク埋め(技の使用回数など)を自動化するプログラムについて解説した記事です。レジェンズアルセウスの操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は剣盾の00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。

今回の自動化は単純な動作の繰り返しのため、一部を除きマクロコントローラーでも可能かと思います。

2022/03/05追記:Legendsアルセウスのアプデ1.1に伴い、訓練場で「かちぬき道」などの勝負項目が追加、それにより会話量が増えたためホノなどとの対戦での操作を調整しました。

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


 

きっかけ、動機

レジェンズアルセウス、先日すべてのポケモンを捕獲、アルセウス戦をクリアしました。残すは図鑑タスクを埋めてひかおまをもらうくらいです。

ポケモンレジェンズアルセウスの経験値稼ぎとして訓練場でのA連打があります。訓練場にいるノボリの前でAボタンを連打することで、リスト1番上にいるタキと戦闘を繰り返すことができます。

今回は、経験値を稼ぐついでに、図鑑タスクをこなすことを目指しました。対戦相手の変更(ホノ、ペリーラ)、力技や早技の使用、タマゴうみのような補助技の回数を消費するべく考察しました。実用性あるか怪しいですが公開しておきます。


これで何ができるの?

訓練場で経験値を稼ぎつつ、特定の技を連続で使用して図鑑タスク埋めを行います。対戦相手をタキ以外に変更、力技や早技の指定、時間経過で技を打ち分けるなどを自動で行う方法を考察しました。プログラム公開というよりは、考察した内容のまとめ記事となります。

なお、ストーリーを一通り終えた後を前提としています。


原理、おおまかな流れ

概要

訓練場でのAボタン連打による経験値稼ぎについて、

・対戦相手の変更
・力技や早技の使用
・時間経過後の技の打ち分け

を目的としてAボタン連打のみの操作手順を改良しました。

 

以下では、上記それぞれの項目を実行するための操作手順の改良を解説しつつ、最後に3種類を組み合わせた操作手順についてまとめます。考察過程に興味がない場合は下の操作手順まとめまで飛ばしてください。

 

そもそものAボタン連打による経験値稼ぎについて

 訓練場にて、ノボリに話しかけると複数のトレーナーの中から指定した1人と対戦を行うことができます。Aボタン連打をした場合、リスト1番上のタキと対戦し、繰り出したポケモンの1番上の技を選択します。相手のすべてのポケモンを倒すと、手持ちの生存しているポケモン全員に経験値が得られます(=戦闘中に瀕死になった場合は経験値をもらえないので注意)。

 

なお、今作のトレーナー戦で最初に繰り出すポケモンは手持ち(ポーチ内)の1番上ではなく、フィールド上でLRボタンを押してカーソルの合ったポケモンとなります。対して、戦闘中に自分のポケモンが瀕死になった場合、次のポケモンの選択画面で手持ちの1番上にカーソルが合うため、Aボタンの連打のみで2匹までポケモンを使うことができます。 

 

対戦相手の変更について

以下の表が、訓練場にて対戦することのできるトレーナーのうち、リスト1ページ目で選択できるトレーナーとなります(Lv50台)。


通常、A連打のみで対戦する場合はタキとの戦闘となります。図鑑タスクを埋めるにあたり問題となるのは、技を無効にされる場合です。タキに対して、地面技は初手のガーメイルに、電気技は後から出てくるトリトドンに無効となります。技が無効の場合は相手を倒すことができないだけでなく、技を見た回数などの図鑑タスクも増えません。そのため、地面や電気タイプの技のタスクを埋めたい場合に工夫が必要となります。

そこで、訓練場でタキ以外のホノあるいはペリーラと連戦することとします。

これにより、タスクを埋めたい技が地面タイプであればホノを、電気タイプであればペリーラを選べば、無効にされずに済みます。

ただし、ホノはタキと同じく手持ち3匹であるのに対して、ペリーラの手持ちは4匹で強くなっております。被弾回数が増えるため、レベルやがんばレベルが不十分なうちは選ばない方が無難です。その場合、電気技をホノのミノマダム草に半減で当て続けて回数を稼ぎ、トリトドンが出てきたら倒してもらうのが無難かと思います。

 

続いて、操作方法について解説です。

対戦相手をタキ以外にするには、ノボリに話しかけて対戦相手のリストが表示されたところで、下ボタンを入力する必要があります。

[話しかける(A)→テキスト送り(AorB)→下ボタンでカーソルを動かす→決定(A)...]

の手順で選択肢を変更できます。

Aボタンを押し、AorBボタンでテキスト送りをした後に下ボタンを押さないとタキが選択されます。そのため、Aボタンを押して2つ後に下ボタンを押さない場合、Bボタンで会話をキャンセルできるようにします。

また、[話しかける(A)] のタイミングを合わせる必要があるため、ループの最後にBボタンを数回入力し、会話のタイミングを調整します。

 

ここで、下ボタンを押すと起こりうる誤動作として、以下が考えられます。

・フィールド上で下ボタンを押すと図鑑が開き、Aボタン連打ではページ切り替えが続く
→Bボタンを押すことでフィールド画面に戻ることが可能

・戦闘中、戦う等の選択画面でポーチを開いてしまう
→下ボタンを押した後にBボタンでキャンセルすれば戻ることが可能
 下→A→Aだと次のポケモンを出してしまうためB入力する

・戦闘中に技選択で2番目以降の技を打ってしまう
→戦闘画面で [戦う(A)→技の切り替え(下ボタン)] を連続して押すことがなければOK

・1匹目のポケモンが瀕死後、次のポケモン選択画面で2番目以降のポケモンを出してしまう
あきらめましょう。ホノ(ペリーラ)の場合、手持ち2(3)番目までのポケモンが選ばれる可能性があるため、強いポケモン、有効な技を用意しておく。


力技や早技の使用について

力技や早業は戦闘中の技選択画面にて、使用する技にカーソルを合わせた状態でLRボタンあるいは十字キー左右ボタンを押すことで切り替えができます

今回は、そのうちの左ボタンのみを使うことで切り替えを行います。これは、LRボタンの場合は最初に繰り出すポケモンが動いてしまうため、右ボタンの場合は最初のポケモンが瀕死になった後、次のポケモン選択の画面にてカーソルが技へと動いてしまうためです。

対して、左ボタンであれば誤作動による面倒な挙動は起こりません。

左ボタン(L)を押すと、通常、早技、力技の順に切り替わります。戦闘時は、

[戦う(A)→ 力技/早技選択(左×0~2)→技選択(A)...]

のように行うため、Aボタンを2連続で入力する場面の間に左入力を追加します。

時間経過後の技の打ち分けについて

技を1つだけ使い続ける場合、PPが少ない場合や、回復技をはじめとした補助技などでは瀕死になる前にPP切れとなり、Aボタンを押しても戦闘が進まなくなります(特にPP5の技を早技で打った時)。そこで、一定時間(ループ数)が経過した後に、使用する技を2番目の技に切り替えることとしました。

行う操作は単純、一定数のループを終えた後、技選択にて下ボタンを押し、カーソルを切り替えるだけです。自分のターンに確実に切り替えるため、切り替える前に待機時間を用意しておくことを推奨します。

 

作ってはみたものの、効率は悪くなり、また切り替えまでの時間調整が厄介となります。おとなしくA連打で技回数をこなし、気づいたころに人力で切り替える方が良いかもしれません。

 

操作手順まとめ

A連打のみの操作に対して、操作手順の改良点をまとめると以下のような操作となります。各種矢印は十字キーを指します。技の分岐をしない①②であれば、1ループの入力は最大16回のため、おそらくはマイコンでなくてもマクロコントローラーで同じことができます。明記されていない限りは0.5秒くらいの間隔で入力すれば問題ないかと思います(下にLeonardo用プログラムというよりメモ書きも公開します)。

①タキと連戦する場合

[A, ←×0~2回]  をループ(←×1回で早技、2回で力技を使用)

②タキ以外(ホノorペリーラ)と連戦する場合

[A, B, ↓×1~2回, A, B×2, (2秒ほど待機), A, ←×0~2回, A, B×5回くらい, (1.5秒ほど待機)] をループ

(↓×1回でホノ、2回でペリーラと対戦 / ←×1回で早技、2回で力技を使用)

 

@時間経過で技を打ち分けたい場合

[上記①②をループさせる(技PPにあわせて1~2分?), B×4回くらい, (15秒ほど待機), A, ↓, A, B×5回くらい, (1秒ほど待機)] をループ

(①ならループ回数≒秒数、②ならループ回数≒技の使用回数×2くらいを目安に調整)

なお、ペリーラとの連戦は相手が強く事故率高め、技の打ち分けは待機時間が長く効率悪めとなります。


準備、必要なもの

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

 1. 手持ち(ポーチ)1番上を強いポケモン、1番下にタスクをこなしたいポケモンを配置。
 それぞれのポケモンの技の1番上を使用したい技にする
  対戦相手をホノ(ペリーラ)に変更する場合、手持ち2(3)番目まで強いポケモン、技を用意する
 強いポケモン最有力はアルセウス@さばきのつぶて、ただしLv75の早技だとニンフィアに耐えられてPP切れの可能性あり

2. 訓練場にてノボリの前に立ち、投げるポケモンをLRボタンで選んでおく。

3. 本スケッチの「設定項目」にて条件を選択
 wazaChange = 1の場合は最下段のvoid loop内のループ数なども要調整

4. マイコンを挿してスタート

 

作成したスケッチ

作成したスケッチはこちら。Ver1.1

2022/03/05追記:Legendsアルセウスのアプデ1.1に伴い、訓練場で「かちぬき道」などの勝負項目が追加、それにより会話量が増えたためホノなどとの対戦での操作を調整しました。

旧スケッチはこちらVer1.0。かちぬき道などが解禁されていなければこちらを使用してください。

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

Ver1.0スケッチ、以下の設定項目はホノと力技で戦闘する場合。

 
/**
* レジェンドアルセウス、特定の技/力技、早技の使用回数などの図鑑タスクをこなすための自動化
* 訓練場のノボリ前でのA連打を応用し、
*
* 初期条件は以下の通り
* 1. 手持ち(ポーチ)1番上を強いポケモン、1番下にタスクをこなしたいポケモンを配置。
*   それぞれのポケモンの技の1番上を使用したい技にする
*   対戦相手をホノ(ペリーラ)に変更する場合、手持ち2(3)番目まで強いポケモン、技を用意する
*   強いポケモン最有力はアルセウス@さばきのつぶて、ただしLv75の早技だとニンフィアに耐えられてPP切れの可能性あり
* 2. 訓練場にてノボリの前に立ち、投げるポケモンをLRボタンで選んでおく。
* 3. 本スケッチの「設定項目」にて条件を選択
*   wazaChange = 1の場合は最下段のvoid loop内のループ数なども要調整
* 4. マイコンを挿してスタート
*/



#include <auto_command_util.h>

// ----------以下、設定項目----------

// 使用する技が「通常」なら0,「早技」なら1、「力技」なら2を入力
const int wazaSelect = 2;

// 戦う相手がタキであれば0を、ホノであれば1、ペリーラであれば2を入力
// タスク消費したい技が地面、電気以外なら0、地面なら1、電気なら2を推奨
// タキ:ガーメイル、トリトドン、サンダース(無水氷超霊竜悪妖が等倍以上、地面、電気は無効)
// ホノ:ミノマダム草、トリトドン、ニンフィア(無氷飛超霊妖が等倍以上、電気、竜は無効)
// ペリーラ:エテボース、ドンカラス、レントラー、ゾロアーク(炎水氷毒岩竜妖が等倍以上、無闘地超は無効)
const int battleOpponent = 1;

// 使用する技がPPの少ない技や、なら1を入力(PP5を早技や力技で打つ時)
// 戦闘中しばらくしてから、使う技のカーソルを上から2番目に移動する
// 効率が著しく悪くなるため、非推奨。また、使用する場合はvoid loop内も要調整
const int wazaChange = 0;

// ----------以上、設定項目----------



// タキとの戦闘、対戦相手選択で下にカーソルを動かす必要なし
// Aボタンで戦う→左ボタンで力or早技を選択
// ポケモン瀕死時、次のポケモン選択画面で右ボタンを押すと技にカーソルが動くため、左ボタンのみ使用

void takiBattle(){
    pushButton(Button::A, 300);
    pushHatButton(Hat::LEFT, 200, wazaSelect);
}

// タキ以外との戦闘、対戦相手選択で下にカーソルを動かす
void honoBattle(){
    // ノボリとの会話開始、ホノorペリーラを選択する
    // 戦闘時は、別の技を選ばないように下入力前にBボタンを挟む

    pushButton(Button::A, 500);
    pushButton(Button::B, 300);
    pushHatButton(Hat::DOWN, 200, battleOpponent);
    pushButton(Button::A, 500);
    // フィールド画面で図鑑を開いたとき、戦闘中に下ボタンでバッグを開いたときの対策としてBボタンで戻る
    // Bボタンで逃げるを選択した場合、テキスト表示で2秒硬直

    pushButton(Button::B, 500, 2);
    delay(1500);
    // 戦う→力or早技選択→決定
    pushButton(Button::A, 300);
    pushHatButton(Hat::LEFT, 200, wazaSelect);
    pushButton(Button::A, 500);
    // 次のループ開始でノボリに話しかけるために会話をBキャンセル
    pushButton(Button::B, 300, 5);
    delay(1000);
}


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

void loop(){
  // 通常通りのループ、wazaChangeを使用する場合、ループ回数は要調整
  for(int i=0; i<120; i++){
    if (battleOpponent == 0){
      takiBattle();
    }else{
      honoBattle();
    }
  }
  // 2番目の技に切り替える場合、上のfor文のループ回数を調整
  // 上のfor文のループ回数はbattleOpponent == 0なら秒数、1なら使用する技の回数÷2を目安

  if(wazaChange == 1){
    // 戦闘中、自分のターンになるまで待機
    pushButton(Button::B, 200, 4);
    // 素早さの関係で相手が連続で行動しうる場合はdelay内を調整
    delay(13000);
    // たたかう>1つ下の技にカーソルを合わせる
    pushButton(Button::A, 500);
    pushHatButton(Hat::DOWN, 200);
    pushButton(Button::A, 500);
    pushButton(Button::B, 300, 5);
    delay(1000);
  }
 
}

 

最後に

本スケッチを使用する(というよりはA連打訓練場を改良する)ことで、経験値稼ぎのついでに図鑑タスクを埋めることが可能となります。何か別の作業をしながら技の使用回数を自動化で稼ぎ、気が向いたら使用ポケモンを変更していくことで、少しでもひかるおまもり獲得に役立てば幸いです。

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

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

 

6 件のコメント:

  1. ループ数の変更は
    i<120
    の数字箇所を変更するということで合ってますか?

    wazaChangeを使用する場合、PP5の力技であれば120になっている所を3or2にすればいいですか?

    返信削除
  2. ②のタキ以外の場合、÷2ではなく、×2の誤りでした。後で修正します。
    PP5の力技の場合、技を使用できる回数は3回となります。対して、タキ以外のループの場合、自分のターンが次に回ってくるまでおよそ2ループとなりますので、3×2の6をi<120に書き換えてください。そこから数回動かしてみて切り替わりが早い、遅いによって調整してください。

    返信削除
    返信
    1. for(int i=0, i<6,i++)
      に書き換えればpp5の技を早業力技で使用した際に3回早業力技をしたあとで1つ下の技を選ぶということで合ってますか?

      削除
  3. うまく動けばそのようになるかと思います。ただし、ループ数については技のエフェクトの長さや相手の行動数などで変わりますので、始めに上記のような目安数で設定し、技の切り替わりが早ければループ数を増やし、遅くてPP0の状態が続くなら減らすなどしてください。

    返信削除
  4. すみません、ポケモンlegendsアルセウスのバージョンアップが入り、従来のようにノボリに話しかけるとすぐ、対戦相手のリストがでないようになってしまったため、修正の程よろしくお願いいたします。

    返信削除
    返信
    1. ソフトのアプデにより「かちぬき道」などの項目が増えて会話量が増えたため、操作を改善したVer1.1を先ほど公開しました。話しかける場面の操作にA,B入力を追加しております。

      削除

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

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