以下の内容はhttps://tangential-star.hatenablog.jp/entry/Arduino_pokemon_ZA01__bench_shiny_huntingより取得しました。


【レジェンズZA自動化01】ベンチ色厳選(↓+A連打)

あけましておめでとうございます。ますたーです。

 

今回はポケモンレジェンズZAの「ベンチ色厳選」を自動化する記事です。

レジェンズZA自動化初の記事にして、実に3年ぶりの自動化での更新です。

 

なお、Arduino Leonardo自動化の導入・機材構成については導入記事を参考にしてください。

導入記事:【Arduino自動化01】Arduino開発環境の導入

※本ブログに初めてお越しの方は「本ブログについて」もぜひ、ご覧ください。

 

概要

ポケモンレジェンズZAでは、ベンチを背に「↓+A連打」を続けることで、昼と夜を切り替えて色厳選ができます(いわゆる「ベンチ色厳選」)。これをArduino Leonardoで自動化しました。

ベンチで昼夜を切り替え続ければ、色違いの厳選ができる。
体感だと、5~6時間放置で1、2匹くらい色違いがいる(ひかるおまもり未所持)

目次です。今回はあっさり!

 

1.レジェンズZAの色判定は「マップ切り替え」がトリガー

ポケモンレジェンズZAでは、マップが読み込みされる度に色違いの判定が行われるようです。より厳密には、主人公を中心にした一定の描画範囲内(一説によれば50マス)にポケモンが入る度に抽選が行われているようです*1

具体的に言い換えれば、建物に出入りしたり、ファストトラベル(空を飛ぶ)で移動したり、昼夜が切り替わったりする度に、主人公の近くのポケモンについて色違いの判定が行われることになります。

なお、いずれの場合についても一定の範囲内で色違いの再抽選が行われるため、マップ切り替えの手法を用いる場合には、狙いたいポケモンの近くで画面切り替えを行う必要があることに注意しましょう。

なお、色違いが出現後に画面を切り替えても、色違いのポケモンは10匹までキープされる仕様となっているため、とにかく画面を切り替え続けることが大事です*2

ベンチで昼夜を切り替えたり、ファストトラベル(空を飛ぶ)を行ったりすることで色厳選ができる

 

2.ベンチで昼夜を切り替えることで色厳選が可能

さて、前述の通り「画面を切り替えること」が色厳選の手段でしたが、その最たる例として、今作では「ベンチ厳選」があります。ベンチ厳選とは、ベンチで「時間をつぶす」を選択することで昼夜を切り替えることで、擬似的にマップの切り替えを実現する方法です。この方法であれば、ベンチの場所を中心に50マス以内のポケモンを再抽選できるため、非常に効率的に色厳選ができます。

ベンチで昼夜を切り替える度に、近くのポケモンの色が再抽選される。
画面に映っていなくても、主人公から50マス以内のポケモンは色違いになっている可能性がある

ベンチで昼夜を切り替えた瞬間、目の前に色違いが出ると気持ちが良い
(動画はワイルドゾーン10の中央ベンチ。サメハダーシビシラスヤドン等が厳選できる)

 

3.コントローラー操作は下入力しながらAを連打するだけ

さて、ベンチに座ることで昼夜を切り替えることで近くのポケモンを再抽選ができることを示しましたが、この「ベンチ色厳選」が特筆すべきはその操作性です。

具体的には、Switchの左スティックを常に下入力しつつAを連打(↓+A)するだけで、昼夜を問わず画面の切り替えを実現できます。つまり、画面を見ずとも操作できるため非常に簡単で、コントローラーの代替操作である「Switch自動化」にも適しています。つまり、ベンチ色厳選の手順をまとめると下記のように言い換えることができます。

【ベンチ色厳選の手順】

  1. 色違いにしたいポケモンの近くにあるベンチを選ぶ。
  2. そのベンチに向かってAを押して、昼夜を切り替える。
  3. 昼夜が切り替わって、背面にベンチがある状態にする。
  4. この状態で、左スティックを下方向(↓)に入力し続け、Aを連打する

ただし、手順1においては、昼にNPCが座るベンチがあるという点に気をつける必要があります。つまり、夜に空いているベンチでA連打を始めたら、昼にはNPCが座っていてA連打で昼夜を切り替えられなくなる場所があるということです。

夜には誰もいないのに、昼になるとNPCが座っているベンチがある。
つまり、ベンチ色厳選のためのベンチ選びは、昼に行ったほうが良い

 

4.ソースコード

さて、今回のベンチ色厳選の操作(↓+A連打)をArduino Leonardoで自動化してみました。使い方は、ベンチを背にした状態でArduinoを挿すだけです。

/*  ポケモンレジェンズZA 色違い厳選(ベンチ座り)
 *   
 *   【説明】
 *   ベンチに座って朝と夜を繰り返すだけ。
 *   単純に、左カーソルを下に倒したまま、Aを連打するだけの簡単プログラムです。
 *   【!】ドックに差す際は、プロコントローラーなど、他のコントローラーとの接続を切っておきましょう。
 *   
 *   【準備】
 *   ・1度ベンチに座って昼→夜または夜→昼に切り替える。
 *   ・★★★ベンチを背にして立ち上がったそのままの状態★★★ にしておく。
 *   (下入力されるので、ベンチには正対しない)
 *   ・Arduinoをさすだけ。
 *   
 *   【挙動】
 *   ArduinoをSwitchにさすと、手持ちポケモンのカーソルが右に何回か動きます。
 *   その後、左スティックが下入力されっぱなし(倒しっぱなし)になり、A連打されます。
 *   
 *   
 *  (c) 2026 ますたーの忘備録
 *  https://tangential-star.hatenablog.jp/
*/

#include <SwitchControlLibrary.h>
#define HOLDTIME (95) // 1回のキー入力の長押し時間
#define SWITCH_VER (20)

// ボタン押しラッパー関数
int PushKey(char* keyname, int holdtime, int delaytime);
void TiltLeftStick(int direction_deg, double power, int holdtime, int delaytime);

void setup() {
  for(int i=0;i<7;i++)PushKey("RIGHT", HOLDTIME, 300); // 十字右ボタンを7回押してSwitchに認識されるのを待つ
  PushKey("B", HOLDTIME, 300); // とりあえず1回Bを押しておく。
  delay(1000);

  // 下入力(倒しっぱなし)
  TiltLeftStick(180,1.0, 0, 0);
  
}

void loop() {
  // A連打
  PushKey("A", HOLDTIME, 100);
}


int PushKey(char* keyname, int holdtime, int delaytime){
  // ホームボタン・方向キーはRight, Left, Up, Down, Homeなど2文字以上で入力。
  // その他ボタン入力は1文字(A,B,X,Y,R,L,+,-)ZR・ZLにも対応
  // 同時押しは非対応
  
  if(strlen(keyname)==1){
    switch(keyname[0]){
      case 'A': case 'a': // A
        SwitchControlLibrary().PressButtonA(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonA(); delay(delaytime);
      break;
      case 'B': case 'b': // B
        SwitchControlLibrary().PressButtonB(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonB(); delay(delaytime);
      break;
      case 'X': case 'x': // X
        SwitchControlLibrary().PressButtonX(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonX(); delay(delaytime);
      break;
      case 'Y': case 'y': // Y
        SwitchControlLibrary().PressButtonY(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonY(); delay(delaytime);
      break;
      case 'L': case 'l': // L
        SwitchControlLibrary().PressButtonL(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonL(); delay(delaytime);
      break;
      case 'R': case 'r': // R
        SwitchControlLibrary().PressButtonR(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonR(); delay(delaytime);
      break;
      case 'H': case 'h': // Home
        SwitchControlLibrary().PressButtonHome(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonHome(); delay(delaytime);
      break;
      case '+': case 'p': case 'P': // Plus
        SwitchControlLibrary().PressButtonPlus(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonPlus(); delay(delaytime);
      break;
      case '-': case 'm': case 'M': // Minus
        SwitchControlLibrary().PressButtonMinus(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonMinus(); delay(delaytime);
      break;
      default:
      break;
    }
  }else if(strlen(keyname)>=2){
    switch(keyname[0]){
      case 'z': case 'Z': // ZR/ZL
        if(keyname[1]=='R'||keyname[1]=='r'){
          SwitchControlLibrary().PressButtonZR(); delay(holdtime);
          if(holdtime>0)SwitchControlLibrary().ReleaseButtonZR(); delay(delaytime);
        }
        if(keyname[1]=='L'||keyname[1]=='l'){
          SwitchControlLibrary().PressButtonZL(); delay(holdtime);
          if(holdtime>0)SwitchControlLibrary().ReleaseButtonZL(); delay(delaytime);
        }
      break;
      case 'r': case 'R': // right
        SwitchControlLibrary().MoveHat(2); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'l': case 'L': // left
        SwitchControlLibrary().MoveHat(6); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'u': case 'U': // up
        SwitchControlLibrary().MoveHat(0); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'd': case 'D': // down
        SwitchControlLibrary().MoveHat(4); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'H': case 'h': // Home
        SwitchControlLibrary().PressButtonHome(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonHome(); delay(delaytime);
      default:
      break;  
    }
  }else{
    return -1;
  }
  return strlen(keyname);
}

void TiltLeftStick(int direction_deg, double power, int holdtime, int delaytime){
  double rad = (double)direction_deg*PI/180.0; // 弧度法(ラジアン)変換
  int x, y;
  x = (double)128*sin(rad)*power;
  y = (double)-128*cos(rad)*power;
  x += 128; y += 128;
  if(x >= 255) x=255; if(x <= 0) x=0;
  if(y >= 255) y=255; if(y <= 0) y=0;

  SwitchControlLibrary().MoveLeftStick(x,y);
  if(holdtime> 0){ // holdtime=0のときは押しっぱなし。
    delay(holdtime);
    SwitchControlLibrary().MoveLeftStick(128,128); // 傾きを直す
  }
  if(delaytime>0) delay(delaytime);
  return;
}

 

5.おわりに

お久しぶりです&あけましておめでとうございます。ついに2026年ですね!

時が経つのは早いもので、本ブログが2020/11/7に公開されてから丸5年が経過し、6年目に突入しています。

世間はポケモンレジェンズZAのDLC「M次元ラッシュ」で遊んでいる頃かと思いますが、まだ私はDLCの購入どころか、シナリオクリアすらしていない状態で、のんびり遊んでいます。実は、昨年にプライベートも仕事も大きな転機を迎えており、この年始も繁忙を極めている状態で、ゲームもブログ更新もする暇がなく、大好きなソシャゲ「ポケモンマスターズEX」すらあまり遊べていない始末です。現に、本ブログにおいても、自動化記事として実に3年ぶりの更新となってしまいました。

さて、そんな多忙な状態で、色違い厳選が出来たのは一重に今作の色厳選が簡単だったからだと考えます。世間でもマクロコントーラーを使った自動化も流行っているようですし、流行りに乗って(もう遅いかもですが)、この記事を書いてみました。このブログでを使った自動化にチャレンジする人が増えると嬉しいですね笑。

気づけば7ボックス分の色違いを捕まえた

さて、このブログとしては、2026年で6年目となりますが、まだまだ引き続き更新はマイペースながらも続けていきたいなと思っているので、引き続きよろしくお願いします。一応、今年の2月中旬でプライベートが落ち着く予定なので、その頃にまた更新ができたらな、と思います。

 

それでは、本年も本ブログをどうぞ、よろしくお願いいたします。

 

ではではc⌒っ.ω.)っ

 

--

本ブログについて:本ブログについて

 

Arduino導入記事:【Arduino自動化01】Arduino開発環境の導入

ポケモン剣盾の記事:ポケモン剣盾Arduino自動化 カテゴリーの記事一覧

ポケモンBDSPの記事:ダイパリメイクArduino自動化 カテゴリーの記事一覧

レジェンズアルセウスの記事:レジェンズアルセウスArduino自動化 カテゴリーの記事一覧

スカーレット・バイオレットの記事:スカーレットバイオレットArduino自動化 カテゴリーの記事一覧

レジェンズZ-Aの記事:レジェンズZA自動化 カテゴリーの記事一覧

 

YouTubeチャンネル:ますたーの忘備録 - YouTube

www.youtube.com

 

 

 

 

*1:つまり、極端な話、ポケモンから50マス離れる・近づくの往復運動でも色違いの厳選が行えるといえます

*2:ただし、昼にしか出ないポケモン・夜にしか出ないポケモン・出現率が100%じゃないポケモンについては、画面切り替えを行った後にキープされた色違いが一見いない場合もあります。その際は再度画面を切り替えましょう




以上の内容はhttps://tangential-star.hatenablog.jp/entry/Arduino_pokemon_ZA01__bench_shiny_huntingより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14