2021/02/28

【ポケモン×Arduino_05】冠の雪原レジエレキ・レジドラゴ色違い厳選自動化

※本記事は、ポケモン剣盾:冠の雪原の巨人伝説の遺跡に出現するレジエレキ、レジドラゴについて、色違いが出現するまでのリセマラ(逃げマラ?)を自動化するプログラムについて解説した記事です。ポケモン剣盾の操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。また、本記事は前回の記事(04回目)のプログラムを応用したものとなりますので、合わせてご覧ください

 

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


 

きっかけ、動機

前回の記事(04回目)にて、レジロック、レジアイス、レジスチルの色違い厳選の自動化が実現できました。同じ原理でレジエレキ、レジドラゴの色違い厳選も可能となるため、同様に作ってみました。

 

これで何ができるの?

主な動作は前回の記事(04回目)と同様ですので、そちらをご覧ください。今回は床の踏み方をレジエレキ、レジドラゴ用に作成したことで、床を踏む作業~色違いが出現するまでを同様に自動化しました。


原理、おおまかな流れ

概要

主な動作は前回の記事(04回目)と同様に、床の丸をすべて踏む>シンボルエンカウント>逃げるを繰り返すことにしました。レジ3種と異なる点は移動パート(非戦闘時)のみとなります。

移動パート

レジエレキ、レジドラゴは共通の遺跡から出現し、光らせる床の形はレジエレキ、レジドラゴで異なります。1度正しい形に光らせると、電気or龍で固定してもいいか聞かれ、戦闘が始まります。1度固定した後は、選んだ方のレジ系の形に使用しない床は光らなくなります。そのため、1度手動で光らせて戦闘した後は、関係ない床を踏んでも光らないため自動化が簡単となります。必ず1度手動で光らせて戦闘してください。

 

移動パートでは、以下の図のように動きます。図の四角は遺跡の部屋を表しています。黄色の丸はエレキ、ドラゴの出現に使用する床、黒色の丸は光らない床です。

 


レジエレキは、レジ3種のプログラムをほとんどそのまま流用できます(横移動の位置のみ調節)。対してレジドラゴは縦中央列を光らせるために、遺跡に入ってすぐのところで石像に向かって直進し、その後横移動を繰り返しています。

床の丸をすべて踏んだ場合、ニブニブニブと 揺れてテキストが表示されます。その後、壁づたいに石像(上中央の赤丸)に話しかけると、戦闘が開始します。

先頭から逃げた後は、部屋を一度出ることで床の光をリセットします。その後再び入り、壁づたいに進むことで初期位置に戻ります。あとは最初から順に動作を繰り返します。

 

誤動作への対策

レジ3種と同様のため省略。

 

準備、必要なもの

本スケッチでは、特に以下の準備が必要となります。

(レジ3種と共通)

・自爆技(自分が瀕死になる技)を1番上の技に持つポケモン、先頭に置き、けむり玉をもたせる。また、なつき度を下げる

(自爆技のうち、置き土産はクリアボディに効かないため不可。)

(なつき度が歩くとともに増えるため、レジ3種に使い続けると上がっている可能性あり。なつき度が上がるとモーションが増え、「たたかう」が表示されるまでの時間が増える。なつき度は漢方薬を与えることで減少。) 

・その他に捕獲用のポケモンやボールを用意

・ゲームを起動してからマイコンを挿して開始する前に、遺跡の入り口を出入りして外のフィールドを見ておく。

(ゲーム起動から最初のマップの切り替わりでロード時間が長くなり、ずれる可能性があるため) 

レジエレキ・ドラゴで新たに必要なこと(重要)

・レジエレキあるいはレジドラゴの形になるように手動で床を光らせ、1度戦闘を行いエレキ、ドラゴの出現を固定する。

 

作成したスケッチ

作成したスケッチ(レジエレキ・ドラゴで2種類)はそれぞれ以下のようになります。また、スケッチのファイルは以下からDLできます。

エレキ用はこちら

ドラゴ用はこちら

なお、執筆者がスケッチを作成するにあたり使用した環境は以下のようになります。

・データは中国語(繫体字)のソード

・手持ち最初のポケモンはイエッサン♀(二つ名無し)、1番上の技はいやしのねがい

捕獲するレジ系の種類や、使用する言語やポケモン、あるいは本体などによって話しかけてから戦闘が始まるまでの時間が前後する可能性があります。その場合はレジ3種と同様に調節してください。


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

 レジエレキ用

 
/**
*
* 初期条件は以下の通り
* 1. 先頭を、自爆技を1番上の技に持つポケモン(癒しの願い推奨)、確実に逃げるためにけむり玉を持たせる
*    また、なつき度は下げておく(歩いているうちに上がり、余計なモーションが増えるため)
* 2. その他、捕獲要因やボールを用意
* 3. フィールドの切り替わり初回のみロードが長いことがあるので、ソフト起動してから1回は遺跡入り口を出入り
*   (遺跡外でセーブ推奨、その場合は遺跡に入るだけでOK)
*
* 4. ※重要※.レジエレキ・ドラゴの遺跡で1度レジエレキorドラゴの形に床を光らせ、1度戦闘する(逃げる)。これにより、以降の床の光がエレキorドラゴ用に固定される。
*
* 5. 床が光っていない状態で部屋左角からマイコンを挿して周回スタート、ソフトリセットした場合は3からやり直し
*/

// エレキ用
#include <auto_command_util.h>

void regiBattle(){

     // レジ3種と同様のため省略
}

void regiElekiWalk(){
    // 左上角に進み続けてぶつかる
    tiltJoystick(-100, -100, 0, 0, 4500);
    // 下移動、光る床上段へ
    tiltJoystick(0, 100, 0, 0, 955);
    // 右移動、光る床上段を光らせる
    tiltJoystick(100, 0, 0, 0, 4000);
    // 下移動、光る床中段へ
    tiltJoystick(0, 100, 0, 0, 440);
    // 左移動、光る床上段を光らせる
    tiltJoystick(-100, 0, 0, 0, 4000);
    // 下移動、光る床中段へ
    tiltJoystick(0, 100, 0, 0, 430);
    // 右移動、光る床下段を光らせる
    tiltJoystick(100, 0, 0, 0, 4000);
    // 石像光る、テキスト進める
    pushButton(Button::B, 1000,4);
    // 右壁に進み続けてぶつかる
    tiltJoystick(100, 0, 0, 0, 2000);
    // 右上角に進み続けてぶつかる
    tiltJoystick(100, -100, 0, 0, 4500);
    // 左上に進み続けて石像まで移動
    tiltJoystick(-100, -100, 0, 0, 2000);
    
}

void regiReset(){
    // 石像前から、一度外に出ることで床をリセットする
    tiltJoystick(0, 100, 0, 0, 7000);
    // 左上移動、光る床を踏まずに左上角へ
    tiltJoystick(-100, -30, 0, 0, 2000);
    
}


void setup(){

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

void loop(){
    regiElekiWalk();
    regiBattle();
    regiReset();
}

 

 レジドラゴ用

 
// ドラゴ用
#include <auto_command_util.h>

void regiBattle(){

     // レジ3種と同様のため省略
}

// 遺跡に入ったところからスタート
void regiDragoWalk(){
    // 上移動、光る床中央列を光らせる
    tiltJoystick(0, -100, 0, 0, 4500);
    // 左上角に進み続けてぶつかる
    tiltJoystick(-100, -100, 0, 0, 4500);
    // 下移動、光る床上段へ
    tiltJoystick(0, 100, 0, 0, 955);
    // 右移動、光る床上段(左右のみ)を光らせる
    tiltJoystick(100, 0, 0, 0, 4000);
    // 下移動、光る床中段へ
    tiltJoystick(0, 100, 0, 0, 460);
    // 左移動、光る床上段を光らせる
    tiltJoystick(-100, 0, 0, 0, 4000);
    // 石像光る、テキスト進める
    pushButton(Button::B, 1000,4);
    // 左壁に進み続けてぶつかる
    tiltJoystick(-100, 0, 0, 0, 2000);
    // 左上角に進み続けてぶつかる
    tiltJoystick(-100, -100, 0, 0, 4500);
    // 右上に進み続けて石像まで移動
    tiltJoystick(100, -100, 0, 0, 2000);
    
}

// 遺跡の出入りのみ、左上角へは行かない
void regiReset(){
    // 石像前から、一度外に出ることで床をリセットする
    tiltJoystick(0, 100, 0, 0, 7000);
    
}



void setup(){

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

void loop(){
    regiDragoWalk();
    regiBattle();
    regiReset();
}

 

最後に

本スケッチを使用することで、レジ系3種と同様、レジエレキ、レジドラゴの色違いを出現させるまでの作業を寝てる間などに可能となります。床を踏んで光らせるといった作業も必要なくなります。色違いが出た場合、マイコンを外してプレイヤーが操作するまで待機し続けるため、好きなボールでの捕獲が可能です。

レジエレキ、ドラゴは冠の雪原での新規ポケモンであり、過去作では手に入らないことからレジ3種以上に需要はあるかと思います。ぜひ色違い厳選にお役立てください。

また、レジギガスについても色違い厳選が可能であり、プログラム自体はほぼ完成しております。 近いうちに記事を作成するかと思います。

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

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



 

10 件のコメント:

  1. こちらの記事を参考に自動化導入しました。
    何も内容は何も弄ってないんですが一晩やってイエッサンが自滅してたので色違いかなと思ったら色違いではありませんでした。
    何か原因ありますかね?

    返信削除
    返信
    1. Twitter側にも答えましたが、記録を残すためこちらにも回答します。
      イエッサン自滅について、なつき度(なかよし度)が上がると戦闘開始時の飛び跳ねモーションで動作がずれてしまいます。長時間歩くだけでもなつき度上昇してしまうので、せめて自動化開始前に漢方薬を与えてなつき0にしてください。
      なつき度が関係なければ、癒しの願い前の待機時間の再調整が必要かと思います。

      削除
  2. 待機時間の微調整は
    pushButton(Button::A,15000)
    ここの15000の数字ですか?
    その場合この数字を減らしていく認識であってますか?

    返信削除
  3. あと懐き度最低、おまかせレポートOFFの状態でプレイして数時間稼働させて電源OFFにして再度プレイするってやり方でも問題ないですかね?この場合懐き度は毎回最初からになるので

    返信削除
    返信
    1. 待機時間の微調整は15000を増減させてください。単位はミリ秒(1000分の1秒)です。色違いが出ないのに癒しの願いをしてしまう場合は待機時間が足りないため、数を増やしてください。逆に通常色でたたかう表示から2秒以上動かない場合は色違いが出ても逃げてしまう恐れがあるため時間を減らしてください。
      なつき度は最初に1度最低にした状態でセーブすれば大丈夫です。リセット後は最低に戻るため再びのなつき度下げは不要です。

      削除
    2. このコメントは投稿者によって削除されました。

      削除
    3. 今のプログラム動作を確認する時って自分で色違いを初手戦闘に出しても色違いレジエレキが出た時と同じ動作するんですかね?

      削除
    4. 色違いエフェクトを自分側で出した場合と相手側で出た場合が同じ動作かは試していないので断言できませんが、概ね同じくらいの時間になるかと思います。
      気休め程度に試してみるのはOKかと思います。

      削除
    5. 色々教えてくださりありがとうございます。
      寝る前に必ず起動させたりその他数時間ほど起動させてるんですがやはり通常色でいやしのねがいをしてしまいます。
      待機時間も16000、懐き度低いのも確認済みなんですが…
      他に失敗する原因ってありますか?switchの個体差の問題ですかね?

      削除
    6. Switch本体やマイコンの個体差は考えられます。
      戦闘開始→逃げるの動作が安定して決まった秒数で動いているか確認してください。多少は上振れ、下振れなどあるかと思いますので、極力それらすべてを2秒以内に収まるように待機時間を調整してください。

      削除

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

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