※本記事は、ポケモン剣盾のストーリーについて、殿堂入りまでをおおよそ自動化するプログラムについて解説した記事の、補足的な解説を行っている記事です。ポケモン剣盾の操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方は00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。ストーリー自動化の記事はこちらをご覧ください。
本記事では、ポケモン剣盾のストーリーを、主人公設定~最初のワイルドエリア、エンジンシティ~殿堂入りまでを自動化したプログラムについて、要所ごとの動きについて個別に解説しております。ストーリー自動化の記事に対して、視認性が悪くなりそうだったので別記事として分割しております。
ストーリー中の要所ごとの解説
ここでは、ストーリーの自動化においてA連打のみの脳筋突破ではない箇所について、特に説明が必要そうな箇所の解説となります。
はじめに、プログラムを書き込む前に行う設定についての解説となります。-------------------------以下、設定に関連する項目-------------------------
背番号の決定(設定項目①)
エンジンシティでの開会式の前日に、受付にて背番号の入力が求められます。本プログラムでは、スケッチ中の「char sebango[] = "25";」の番号を変えることで、指定した番号を背番号として設定します。背番号には1~3桁の数字が設定可能です。
なお、キーボード入力にはふしぎなおくりもの自動化の画面上キーボード入力プログラムを流用しています。そのため"文字列"として数字を設定してください。"1"と"001"のように書き分けも可能です。
各スタジアムのオシャボ回収
エンジン、スパイクジムを除く6つのジムならびにシュートスタジアムでは、ボールガイからガンテツボールならびにドリームボールをもらうことができます。本プログラムでは、スタジアムを訪れた時に順に受け取りをします。後述するムゲンダイナ捕獲に使用可能です。
ただし、スピードボールはボールガイからではなく、ワイルドエリアを走るロトムラリー10回報酬であるため、本プログラム中では現在入手できません。
また、マスターボール、ウルトラボール、サファリボール、コンペボールについても殿堂入り前の入手が困難となるため非対応です。
ムゲンダイナ捕獲
ストーリー終盤、ダンデとの決勝戦の前にムゲンダイナとの戦闘、捕獲イベントがあります。ここでは捕獲を後回しにすることができないため、自動化の中で捕獲を行います。
始めから所持しているモンスターボールを投げても良いのですが、今回はストーリー中で入手可能なガンテツボールやドリボ、その他ショップで購入可能なボールを設定することで、そのボールをムゲンダイナの捕獲に自動で使用します。
ムゲンダイナ戦では、通常のレイドバトルと同様、倒した後にボールを選択して捕獲します。モンボを持っていればモンボが、持っていなければボールポケット1番上のボールが選択画面の最初に表示されるため、本プログラムではA連打でそのボールを投げることになります。
ムゲンダイナ捕獲ボールによる動作の分岐(設定項目②)
前述のムゲンダイナ捕獲を踏まえ、ここからはボールごとの動作分岐について説明します。
本プログラムでは、スケッチ中の「const int ball_number = 0;」の番号を変えることで、対応した動作に変更されます。
0の場合はモンスターボール、つまり序盤から所持し続けているモンボをそのまま投げます。
1以上の場合、モンボ以外のボールを投げる必要があるため、すべてにおいてモンスターボールを売却し、その後に目的のボールを先頭に並び替えるという動作が入ります。
1~7にはガンテツ、ドリボがそれぞれ設定されております。この場合、ボールガイから受け取ったボールが順に並んでいるため、モンボの売却後、上から1~7番目のボールをお気に入り登録して並び替えることでリスト先頭に移動させます。
(8:スピードボールは現在非対応、要ロトムラリー)
9は、マスボなどストーリー途中で入手困難なボールを設定するための番号となります。どうしてもマスボなどで捕獲したい場合は、プログラムAを終えた後に通信交換でボールを輸送してからプログラムBを開始してください。その場合、バッグのボールポケットの1番上をモンボ、2番目を任意のボールとします。プログラムBでの動作分岐では、1番上のモンボの売却のみ行うことで、2番目だった任意ボールがリスト1番上となります。
10~12はプレミア、スーパー、ハイパーとなります。それぞれどこのポケセンでも購入可能なボールです。シュートシティ中央のポケセンの左の店員に話しかけ、モンボ売却と同時に指定のボールを購入(プレミアの場合はモンボ11個購入してからモンボ売却) します。
13~21は、ヒールボール~リピートボールといった、特定の町のショップでのみ購入可能なボールとなります。13~15はエンジン、16~18はナックル、19~21はシュートシティの、それぞれ右の店員から購入できます。動作分岐では、指定の町へと空を飛び、モンボ売却と同時にリストの上から1~3番目のボールを1個購入します。バッグにはガンテツ、ドリボと購入したボールのみが存在するため、種類順に並び替えることで購入したボールが1番上となります。
-------------------------以下、その他の項目を順に解説-------------------------
ここからは細かな仕様についての説明です。不可解な動きをしているように見える場合や、自動化がうまくいっていない場合に対応する部分を読んでください。
ワイルドエリアでのデスルーラ
ストーリー中、次の町へ行くためにワイルドエリアを通らなければならない場面が2回あります(ブラッシー~エンジン/エンジン~ナックル)。
この2回について、どちらも手持ちポケモンを全滅させることで移動を行います。
今作ワイルドエリアの仕様として、ワイルドエリア内で全滅した場合、ワイルドエリア駅へ送られた後、エンジンシティorナックルシティへ送ってもらうことができます。 この使用を利用し、手持ちをレベルの低いポケモン1体のみにして突撃します。1回目は駅近くのイワークと戦闘し、道中で捕獲した弱い野生ポケモンでA連打、攻撃します。2回目はエンジン入り口近くにいるダストダスorイノムーorバンバドロと戦闘を行い、自爆ポケモンを爆発させることで確実に昇天します。
ターフジムのウールー転がし
ターフジムのウールー転がしが、本プログラムにおける最難関事項となります。
ジムチャレンジスタート直後は左右に動いてウールーを1点にまとめます。
その後はイヌヌワンのいないルートを通るorトレーナーと先に戦闘してイヌヌワンを排除してから動かす、といったことをしています。壁際に寄せつつゆっくり歩くことでウールーが散らばるのを防ぎます。
現在は少し不安定、要改善箇所です。 成功率を上げるためにはどうしたことやら。
第二鉱山攻略直後について
第二鉱山にてカブと出会った後、会話の流れでそのまま鉱山の外に出ます。この段階でエンジンシティのジムチャレンジが可能となるので、エンジンシティはずれは進まず、空を飛ぶですぐに移動します。なお、会話が終了した直後、鉱山出口の近くには草むらがあり、そこに出てくるダゲキなどが突撃してきます。そのため、会話終了間際にはBボタンとXボタンを交互に押し、会話終了直後にメニュー画面を開閉し続けることで戦闘となることを回避しています。
エンジンジムの捕獲イベント
エンジンジムのチャレンジでは、草むらにいるポケモンを捕獲して2ポイント、倒して1ポイントで計5ポイントを集める必要があります。本プログラムでは、一切捕獲せずに5匹倒します。
また、倒すのは左下のロコン、上のヒトモシの繰り返しとなります。右下のヤクデは、横にいるトレーナーのヤトウモリがねこだましをしてくる事故要因なので放置します。
ワイルドエリアでの水の石入手
ワイルドエリアはデスルーラにより通過しませんが、ナックルシティ到着後(空を飛べるようになった後) に水の石入手のために向かいます。
ナックル丘陵から、巨人の鏡池を通過しつつハシノマ原っぱの育て屋に話しかけ、一旦空を飛ぶで位置を調整してから水の石まで向かいます。入手後、パルシェンに進化させ、4番目以降のジムを攻略します。
野生との戦闘が多いため、全体的にA連打などを長めにとっています。
ラテラルジムのピンボール
ラテラルジムでは、ジムのギミックとしてコーヒーカップのような乗り物に乗ってスティックをグルグル回し、ピンボール台のようなところを降りていきます。
これに伴い、右スティックを任意の速度、秒数、向きを設定して回すための関数を作成しましたが、速度調節は不要でした。ギミックは複雑そうに見えて、割と単純です。
アラベスクジムのクイズ
アラベスクジムでは、戦闘中にクイズが出題され、正解すれば能力上昇、間違えば下降します。本プログラムでは、すべて無視してAボタンを連打します。
選択肢の上を選んだ場合、防御や素早さが減少します(攻撃は上昇します)。S-2でも相手のポケモンを抜き、1撃で倒すことができるので関係ありません。
キルクスジムの落とし穴
キルクスジムでは、落とし穴が隠された道をダウンジングによる振動を頼りに進んでいきます。自動化では振動など関係なく決まったルートを進みます。自動化2番目の難所。
キルクスジム後の技マシン、広角レンズの入手
キルクスジム攻略後、本プログラムではスパイクタウンへと向かう前にキルクスタウン内で技マシンと広角レンズをそれぞれ入手するために寄り道します。
技マシンは、ポケセンすぐ後ろの民家にて「岩石封じ」または「凍える風」が入手できます。後述するダブルバトルにおいてパルシェンに覚えさせるために「凍える風」をもらいに行きます。なお、シールド版の場合は既に「凍える風」の技マシンをジム攻略時に受け取っていますが、必要ありませんが、動作時間に大きな影響はないため「岩石封じ」をもらいに行きます。
広角レンズは、後述するダブルバトルにおいて使用する凍える風の命中率を100%にするために入手します。2つあるうちの右のホテル、2階へ上がったエレベーター左側の部屋にて、ホームズハウスズの推理イベントでもらうことができます。
入手後、ボックス左下に配置しておいたダブルバトル用のポケモンに持たせます。ダブルバトルの前になったらパルシェンと持ち物を入れ替えます。
スパイクジム前のこだわりハチマキの入手
スパイクタウンのシャッター前に着いたときにマリィに下方向の迂回路へと誘われますが、一旦無視してこだわりハチマキを入手しに寄り道します。
こだわりハチマキは2番道路、博士の家から右下の水路を進んだ先にあります。9番道路で自転車が水上を進めるようになって初めて行くことのできる場所となります。
なお、ここでこだわりハチマキを入手する理由は、
となります。ハチマキはパルシェンに持たせ、スパイクジムのダブルバトル前で広角レンズと入れ替えます。
なお、道中で氷柱針のPPが減っており、スパイクジムチャレンジのみ開始時に回復してもらえないため、スパイクタウンへ空を飛ぶで戻る前にポケセンでの回復を挟みます。
スパイク、ナックルジムのダブルバトル
スパイクジム、ナックルジムではダブルバトルが存在するため、ポケモン2匹以上でないとチャレンジを開始することができません。そのため、「B. ダブルバトル用のポケモン」にて前述したポケモンをボックス左下に待機させておき、スパイクジム開始時に手持ちに加えます。その時の持ち物はあらかじめ広角レンズをもたせておきます(前述)。
スパイクジム中盤、ダブルバトルを行う前になったら①技マシン「凍える風」をパルシェンに使用、②パルシェンとダブル用ポケ(オノノクス)の持ち物入れ替え、③パルシェンの技の1番上を「凍える風」に変更、を順に行います。この後、ダブルバトルではA連打により必中の凍える風を打ちます。
スパイクジム終了後、そのままナックルジムでも凍える風を連打します。ナックルジムまで終わった後に、パルシェンの持ち物をハチマキに戻し、ダブル用ポケ(オノノクス)をボックスに戻し、ポケセンで凍える風を忘れさせます。その後はすべてシングルバトルです。
コメント失礼します
返信削除Bパートについて質問なのですが、合計10回ほど試しているのですが、最後まで到達できたことが無く、何か改善策がないか教えていただけないでしょうか?
動画で撮影したりしているのですが、特定の場所で失敗しているわけではなさそうです
バッジが4つで終わっていたり、バッジが0で終わっていたり、パルシェンに進化できずに終わっていたりします
もし何か改善策があれば教えていただきたいです
環境はソード(パッケージ)、バージョン最新、DLC未購入です
どうしても要所ごとの動作(特に野生ポケモンの出る草むら)で成功率100%とはいかない状態の繰り返しのため、どこかで止まってしまうことはあります。また、Switch本体による個体差も多少はあるようです。
削除void setup内にストーリー進行のための関数が順に並んでいるため、途中で止まってしまった場合はキリの良いところまで手動で進め、進行した部分までsetup内の関数を削除(コメントアウト)して途中から再開するようにしてください。
コメント失礼します
返信削除ストーリー自動化プログラムについてなのですが何回やっても8番道路で止まってしまい変な動きになってしまいます…
何か対策等あれば教えていただきたいです。
DLCは購入済みなのでスケッチには1を記載しています。
自己解決いたしました。
返信削除プログラム上の// はしご上り下り連続、右端のくぼみへ、はしご上る前、下りた後に野生1ずつ
runStraightWithA(90, -70, 450);の90の値を100に変えてみたところ積むことなく進行するようになりました。
ただやはりウールー運びは少し運が絡む要素でしてここは詰まったら仕方ないと思うしかないと感じました。
とにかく自動化プログラムを作ってくださりありがとうございます。
自己解決したようで良かったです。
削除8番道路について改善案ありがとうございます。今後本自動化を使用した際に確認してみます。
// 広角レンズ入手後、キルクス右下から9番道路へ
返信削除void goToRoute9(){
// ホテルを出たところからキルクス出口へ
tiltJoystick(0, 100, 0, 0, 1800);
tiltJoystick(100, 0, 0, 0, 2800);
tiltJoystick(0, 100, 0, 0, 2000);
delay(500);
// 自転車に乗って真下へ、草むら近くの壁まで
pushButton(Button::PLUS, 300);
この流れの
> 1396 tiltJoystick(100, 0, 0, 0, 2800);
> 1397 tiltJoystick(0, 100, 0, 0, 2000);
どうやってもここの2行が認識されず、少し下に歩いた後に自転車に乗り始めますね
右に移動する部分が抜け落ちます
返信遅くなり申し訳ありません。
削除こちらでは2行抜け落ちることはなく動作しており、状況再現できないため原因は分かりません。コメントアウト[//]されていないかなど確認してみてください。