2021/02/20

【ポケモン×Arduino_03】カレーの証厳選自動化(カレー作り~ゲット)

※本記事は、ポケモン剣盾のカレーの証について、キャンプでカレーを作り、やってきたポケモンに話しかけてゲットする操作を自動化するプログラムについて解説した記事です。ポケモン剣盾の操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。

 

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


 

きっかけ、動機

今回は一般的な需要を無視して、ほぼ自己満足のために作成したプログラムです。

 

コレクター勢にとって、ポケGOで量産される色違いより珍しいポケモンといえば

証持ち色違いポケモン

かと思います。 じゃあ、その証色違いの中でも特に難しいポケモンとは何でしょうか。1つの回答は

証持ち真作色違いポットデス(ヤバチャ)

と思っております(真作色ポットデス自体は乱数さえ使えば冠の雪原のレイドバトルで量産できるようになりましたただの真作色違いなら誰でも手に入ります)。

ヤバチャの真作は本編のルミナスメイズの森、冠の雪原の古の墓地に出現します(野生全体の1%のようです)。

色違いの確率はお守り有で3/4096≒0.073%

(野生産、種類問わず)の確率は15%くらい?

つまり、仮にルミナスメイズの森でランダムエンカウント(ポケモンの姿が見えないエンカウント)をすることで真作色証ヤバチャを狙う場合、

ざっと計算して0.00011%、つまり100万回くらいエンカウントすれば1匹くらいゲットできるよ!無理

というわけで、100万分の1は無理として、レイド産真作色ポットデスよりはレア個体・・・としてたどり着いたのがカレーの証です。

ワイルドエリアやDLCエリア以外の道路などでキャンプを開きカレー作りをすると、稀に野生のポケモン(ランダムエンカウントするポケモン)がやってきます。そのポケモンは話しかけるとゲットでき、必ずカレーの証を持っています。手持ちのなつき度を最大にし、マホミル級以上のカレーを作ることで1/7≒14%くらいの確率のようです。光るお守りの効果は出ませんが、1/4096≒0.024%で色違いも出現します。

さらに、やってくる野生ポケモンは そのフィールドでランダムエンカウントするポケモンから等確率で選ばれ、ヤバチャは真作と贋作で別ポケモンの判定のようです。

 

つまり、 ソードでは野生ポケモン8種類(+真作)のため、1/9で真作ヤバチャが出現します。(シールドはGポニータも出るため1/10)

↓ヤバチャ6匹中2匹が真作でした。

 

したがって、カレーの証真作色ヤバチャは約0.00039%、つまり約26万回カレーを作れば1匹くらいゲットできるよ!まだまだ無理

無謀に見えますが、ランダムエンカウントではなく、キャンプでのカレー作りであれば自動化できるのではないかと考え、以下のスケッチを作成しました。

(何よりも「カレーずきなポットデス」って良さげじゃない?)

 

これで何ができるの?

今回はポケモン剣盾本編のフィールド(道路、洞窟等)でキャンプを開いた状態から、カレーを作る>広場にいるポケモンに話しかける を繰り返すプログラムを作成しました。これにより、カレーにつられてやってきたポケモン(=カレーの証を持っているポケモン)をゲットする作業を自動化できます。

今回は真作色証ヤバチャを最終目標としましたが、一般的なカレーの証持ちポケモンをゲットするために採用できます。色違いにこだわらなければ証ポケモンを簡単に手に入れられます。

執筆者はカレーの証S0コータス(NN:スターアニス)を対戦用に使用しています。



原理、おおまかな流れ

概要

本プログラムでは、カレーを作る>広場にいるポケモンに話しかける を繰り返しております。

カレー作り

キャンプを開いた後、ポケモンとふれあえる広場の画面からカレー作りを開始します。

カレーの出来がマホミル級以上であれば高い確率で野生ポケモンがやってくるので、そのために

・手持ちポケモン6匹をなつき度MAXにする。

・食材を950円や2200円の食材を使用する。 

必要があります。

今回のプログラムでは、「2200食材と購入可能木の実1個」あるいは「950食材と木の実10個」でマホミル級となります。

カレーの調理は、うちわであおぐ>かき混ぜる>まごころを込める(タイミングA押し) の3工程となります。今回はスティックを回す動作が面倒くさいので、「かき混ぜる」操作は放置し、その前後のAボタンのみの操作を行いました。

 

広場での話しかけ

カレーを作り終えた後、広場の画面に戻ります。ここで、野生ポケモンがやってきた(「・・・」吹き出しが出ている)場合は話しかけることでゲットできます。バッグにモンスターボールが入っている場合は必ずモンスターボールに入ります。モンスターボールがない場合はスーパーボール、ハイパーボールの順に優先されてボールに入ります。その他のボールには入りません。

ハイパーボールに入れたい場合はモンスター、スーパーボールをすべて売りましょう。

やってきたポケモンに話しかけるにはカメラをポケモンに合わせる必要がありますが、画像認識をしていないのでカメラを横移動させて手当たり次第にAボタンを押します。この時、手持ちのポケモンに対してAボタンを押すと寄ってきます。近くにいると会話となりカメラ移動等ができないので、手持ちポケモンは足の遅いポケモンを推奨します。



誤動作への対策

上記の動作にあたり、以下の誤動作が考えられ、対策をしております。

・広場での話しかけで、やってきた野生ポケモンにうまく話しかけることができない

>カメラを横移動しながらAボタンを押す動作1回では話しかけられず通り過ぎることがあったため、3回(左右左)行っています。また、カメラの高さがずれる可能性があるため3回目のカメラ操作の前にわずかにカメラを上方向にずらしています。

しかしながら、まれに3回のカメラ操作でも洩れがあります。(ユキハミのように足の遅いポケモンや、マッギョのように高さのないポケモンが特に多いです)カメラ操作の回数を増やすことで洩らす可能性を減らせますが、同時に時間がかかり効率の低下につながるため3回のみとしました。狙うポケモンがそのような場合は個別にプログラムの修正をお願いします。また、多少の洩れを許容した自動化のため、確実に捕まえたい場合は広場での話しかけのたびに画面に目を向けることをおすすめします。

 

準備、必要なもの

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

・なつき度をMAX、かつ足の遅いポケモン6匹

(執筆者は第二鉱山でカレー厳選したカラナクシとカムカメにザロクの実などを与えたものを使用しています)

・捕獲用のボール(モンスター、スーパー、ハイパーボールのいずれか。モンスターから順に優先されるため、スーパーハイパーで捕まえたい場合は優先順位の高いモンスター等を空にする)

・カレー作りに必要な食材と木の実

食材はワイルドエリア等の食材屋から2200あるいは950円のものを購入する。木の実はプラッシータウン等で購入する(共に999個推奨)。

 

作成したスケッチ

カレーに使用する食材について、「2200食材と購入可能木の実1個」と「950食材と木の実10個」との2通りの組み合わせに対応するスケッチをそれぞれ作成しました。本記事では「2200食材と購入可能木の実1個」用のスケッチを以下に示します。スケッチのファイルは以下からDLできます。

「2200食材と購入可能木の実1個」でのスケッチはこちら

「950食材と木の実10個」はこちら

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

 

 
/**
* カレー作る>調理開始>マホミル級>フィールド上のポケモン(やってきたやつ)に話しかける>以下ループ
* 2200食材と木の実1個、使用する木の実の個数を節約し、買いに行く手間を減らす
*
* 初期条件は以下の通り
* 1. 設定より、捕まえたポケモンは自動でBOX送りにする
* 2. 高級食材(2200)(巨大パウダーも可)と木の実(何でもOK、クラボなど)を大量に買い、それぞれお気に入りにしてリスト上へ並び替え、
*   木の実や食材のカーソルを1番上にしてバッグを閉じる
* 3. 懐きMAX6匹を手持ちに入れる。足の遅い6匹にすると野生ポケモンに話しかけやすくなる。
* 4. 目的の野生ポケモンがいるエリア(本編道路等のみ、ワイルドエリアやDLCエリアは不可)に行き、キャンプを開く
*   草むらの外、万一ループが途切れて誤動作してもいいように、影響の少ない場所を選ぶ。
*/


#include <auto_command_util.h>

// 料理をするシーケンス
void curryEatAndSearch()
{
    //料理開始、食材と木の実1個選択
    pushButton(Button::X, 1000);
    pushHatButtonContinuous(Hat::LEFT, 1400);
    delay(200);
    pushHatButton(Hat::RIGHT, 500);
    pushButton(Button::A, 500);
    pushButton(Button::A, 1500);
    pushButton(Button::A, 500, 8);
    //ハマり防止のため
    pushButton(Button::X, 1000);
    pushButton(Button::B, 800);
    //料理開始
    pushButton(Button::PLUS, 500);
    pushButton(Button::A, 500);
    // カレー完成1:10, うちわ-0:28まごころ0:50、混ぜるのは放置
    delay(10000);
    pushButton(Button::A, 150,80);
    delay(19600);
    pushButton(Button::A, 19400);
    //完成~評価
    pushButton(Button::A, 13000);
    pushButton(Button::A, 2000);
    // ここから広場にいるかもしれない野生ポケモンに話しかける
    // 広場にて、Rスティックにて視点を右へ

    tiltJoystick(0, 0, 100, 0, 1000);
    // Rスティック左へ、かつA連打2.5sec
    SwitchController().setStickTiltRatio(0, 0, -50, 0);
    pushButton(Button::A, 50,20);
    // ポケモンと会話している場合は終了
    pushButton(Button::A, 1000);
    pushHatButton(Hat::DOWN, 200, 2);
    pushButton(Button::A, 3000);
    // 視点を右へ、再びA連打
    SwitchController().setStickTiltRatio(0, 0, 50, 0);
    pushButton(Button::A, 50,65);
    // ポケモンと会話している場合は終了
    pushButton(Button::A, 1000);
    pushHatButton(Hat::DOWN, 200, 2);
    pushButton(Button::A, 3000);
    // カメラ上持ち上げ
    SwitchController().setStickTiltRatio(0, 0, 0, -100);
    delay(150);
    // カメラ向き変更、繰り返し
    SwitchController().setStickTiltRatio(0, 0, -50, 0);
    pushButton(Button::A, 50,90);
    // 会話を終了
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    pushButton(Button::B, 500, 6);
    pushButton(Button::X, 1000);
    pushButton(Button::B, 500);
    pushButton(Button::X, 1000);
    pushButton(Button::B, 800);
    pushHatButtonContinuous(Hat::DOWN, 1000);

}

// キャンプ広場スタート
void setup(){
    pushButton(Button::B, 500, 13);  // 最初の数回の入力はswitchが認識しない場合があるので、無駄打ちをしておく
    pushButton(Button::X, 500);
    pushButton(Button::B, 500);
}

void loop(){
    curryEatAndSearch();
}

 

最後に

本スケッチを使用することで、カレーの証持ちのポケモンをゲットするためのキャンプでのカレー作りを自動化することができます。

カレーの証は戦闘時に役立つことはありませんが、冠の雪原での特性パッチにより情報ディスアドバンテージもなくなりました。純粋なコレクション、あるいは対戦での相棒としてゲットすることになります。試行回数さえこなせば色証も可能となります。

ぜひカレーの証色違い、さらにはカレーの証真作色ヤバチャの厳選に役立ててください。

 

今回のプログラムでは、やってきたポケモンに話しかける操作でうまく話しかけられない場合が存在しています。 より効率的、確実に話しかける方法がありましたら教えていただけますと幸いです。

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

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



0 件のコメント:

コメントを投稿

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

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