あけましておめでとうございます。ますたーです。
今回はポケモンレジェンズ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自動化」にも適しています。つまり、ベンチ色厳選の手順をまとめると下記のように言い換えることができます。
【ベンチ色厳選の手順】
- 色違いにしたいポケモンの近くにあるベンチを選ぶ。
- そのベンチに向かってAを押して、昼夜を切り替える。
- 昼夜が切り替わって、背面にベンチがある状態にする。
- この状態で、左スティックを下方向(↓)に入力し続け、Aを連打する
ただし、手順1においては、昼にNPCが座るベンチがあるという点に気をつける必要があります。つまり、夜に空いているベンチでA連打を始めたら、昼にはNPCが座っていてA連打で昼夜を切り替えられなくなる場所があるということです。
夜には誰もいないのに、昼になるとNPCが座っているベンチがある。
つまり、ベンチ色厳選のためのベンチ選びは、昼に行ったほうが良い
さて、今回のベンチ色厳選の操作(↓+A連打)をArduino Leonardoで自動化してみました。使い方は、ベンチを背にした状態でArduinoを挿すだけです。
#include <SwitchControlLibrary.h>
#define HOLDTIME (95)
#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);
PushKey("B", HOLDTIME, 300);
delay(1000);
TiltLeftStick(180,1.0, 0, 0);
}
void loop() {
PushKey("A", HOLDTIME, 100);
}
int PushKey(char* keyname, int holdtime, int delaytime){
if(strlen(keyname)==1){
switch(keyname[0]){
case 'A': case 'a':
SwitchControlLibrary().PressButtonA(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonA(); delay(delaytime);
break;
case 'B': case 'b':
SwitchControlLibrary().PressButtonB(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonB(); delay(delaytime);
break;
case 'X': case 'x':
SwitchControlLibrary().PressButtonX(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonX(); delay(delaytime);
break;
case 'Y': case 'y':
SwitchControlLibrary().PressButtonY(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonY(); delay(delaytime);
break;
case 'L': case 'l':
SwitchControlLibrary().PressButtonL(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonL(); delay(delaytime);
break;
case 'R': case 'r':
SwitchControlLibrary().PressButtonR(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonR(); delay(delaytime);
break;
case 'H': case 'h':
SwitchControlLibrary().PressButtonHome(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonHome(); delay(delaytime);
break;
case '+': case 'p': case 'P':
SwitchControlLibrary().PressButtonPlus(); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().ReleaseButtonPlus(); delay(delaytime);
break;
case '-': case 'm': case 'M':
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':
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':
SwitchControlLibrary().MoveHat(2); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
break;
case 'l': case 'L':
SwitchControlLibrary().MoveHat(6); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
break;
case 'u': case 'U':
SwitchControlLibrary().MoveHat(0); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
break;
case 'd': case 'D':
SwitchControlLibrary().MoveHat(4); delay(holdtime);
if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
break;
case 'H': case 'h':
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){
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