【ポケモン3世代】自動化プログラムを大量にアプデした

 

1.はじめに

この記事は Pokémon Past Generation Advent Calendar 2023 の190日目の記事です。今回は既存の自動化プログラムのアップデート内容をまとめた記事となります。87日目の「RSものひろい乱数自動化」から作り始めたNx Macro Controller用のプログラムとなりますが、初期の段階では使いこなせていない機能が多々あり、約100日経過した今では強引で美しくないプログラムが多々あるなぁという印象です。

直す時間が中々ありませんでしたが、多少は身辺が落ち着いてきたということもあり、一気に既存プログラムを修正を行いました。

主な変更内容としては以下の通りですが、個別で解説していきます。

・各フレームや、アイテムの回収個数を変数に値を渡すだけで済ませ、以降のコマンドを各自で修正する必要を無くした。(Var Frame = 1900、Var Candy = 9999 など。)
・OBS-Cameraから読み込んでいる方を想定して、ラグで正常に動作しないという現象を多少起こりにくくした。
・単純な機能アップ。
・ログへの出力。

なお、同時に自動化プログラム紹介記事の内容も修正しています。かなり大変でした...。

 

 

2.個別の修正内容について

RSものひろい乱数自動化

通称、生き恥マクロ。 従来はLoop数を必要なアイテム個数を合わせるために、強引な処理をしているだけではなく、画像認識範囲設定をサボっており、無駄な処理をしておりました。初めて作ったNxのプログラムということもあり、修正箇所があまりにも多いです。画像認識や、変数を大量に使うことで美しくなったと思います。

 

【修正点】

・ 変数「Candy」「PPup」「Frame1」「Frame2」に引数を渡すだけで、目標のアイテム数、フレーム調整を可能にした。
・ 各コマンドの入力に無駄をなくして、回転率を上げた。
・ レポートを書いた瞬間にリセットされるようにして、無駄な待機時間を削減した。
・ アイテム回収時の無駄な処理を無くした。
・ バッグが上限に達した場合、道具Boxに手持ちのアイテムを預けるようにした。
・ ログにリセット回数&アイテムの入手数を出力するようにした。
・ 想定外のアイテムを拾った場合の処理を追加した。
・ フレームを微調整して、拾いやすいようにした。
・ 経験値上昇ズレで何も拾えない場合の処理を追加した。

 

 

ふしぎなアメ自動使用

ものひろい乱数自動化とセットのプログラムです。各自で修正しなければならない、Loopコマンドが多かったですが、全て最初に引数を渡してやるだけで、解決できるようになりました。

 

【修正点】

・ 変数「TargetLevel」「CurrentLevel」「Change」「Cancel」「Change2」に引数を渡すだけで、目標レベルや、進化時の技の入れ替えをできるようにした。
・ ログにアメの使用回数を出力するようにした。

 

 

Emものひろい乱数自動化

やっていることはRSと同じです。こちらも考慮することが多く、修正にかなり苦戦しました。

 

【修正点】

・ 変数「Candy」「PPup」「PPMax」「Frame1」「Frame2」に引数を渡すだけで、目標のアイテム数、フレーム調整を可能にした。
・ 各コマンドの入力に無駄をなくして、回転率を上げた。
・ レポートを書いた瞬間にリセットされるようにして、無駄な待機時間を削減した。
・ アイテム回収時の無駄な処理を無くした。
・ BVなしのプログラムもバッグが上限に達した場合、道具Boxに手持ちのアイテムを預けるようにした。
・ ログにリセット回数&アイテムの入手数を出力するようにした。
・ 想定外のアイテムを拾った場合の処理を追加した。
・ フレームを微調整して、拾いやすいようにした。
・ 経験値上昇ズレで何も拾えない場合の処理を追加した。

 

 

BVSeed保存自動化

バトルチューブ、ものひろい、孵化乱数3種の5つ分のプログラムを用意しています。かなりフレーム調整が簡単になったと思います。

 

【修正点】

・変数「Frame1」「Frame2」「Frame3」に引数を渡すだけで、絵画選択、レンタルポケモン決定、BVSeed保存のフレームを調整可能にした。
・バトルチューブ用のBVは絵画選択が短いSeedに変更した。
・ログにループ回数を出力するようにした。

 

 

バトルチューブ完全自動化

個人的には最高傑作です。大きく変更点はありませんが、4箇所ある調整が必要な待機時間を一括で調整できるようにしています。

 

【修正点】

・変数「Pike」「Frame」に引数を渡すだけで、周回数、フレーム調整を可能にした。
・元々は手持ちポケモンのNNでシンボルを判別していたが、「Symbol」を"銀"または"金"の引数を与えることで、NNをつけても動くようにした。
・ログに突破数を出力するようにした。

 

 

BP自動引き換え

かなり単純なプログラムですが、その割には便利と思っています。こちらも大きな変更点はありません。

 

【修正点】

・変数「Item」「Vitamin」に引数を渡すだけで、交換数、えいようドリンクの種類を設定できるようにした。
・ログに交換数を出力するようにした。

 

 

コンテスト周回自動化

修正が少ないように見えて、実は直すところが結構ありました。色々と融通が利くようになったと思いますが、精査しきれていない部分もあるので、不具合があれば教えていただければと思います。

 

【修正点】

・ 変数「LuxuryBal」「Painting」「PPMax」「Contest 」「ContestRank」に引数を渡すだけで、ゴージャスボールの目標数、絵画上書きの有無、コンテスト部門、コンテストランクの変更を可能にした。
・ ログに参加回数&ゴージャスボールの入手数を出力するようにした。
・ Emの場合は初期のコンテストランクを設定することで、ランク解放まで自動で行うようにした。
・ なぜか女主人公に対応していなかったので、両対応できるようにした。

 

 

ポケルス感染乱数自動化

ものひろい乱数の修正内容に近いです。ものひろい乱数は奇数ズレで、ポケルス感染するSeedを永遠に引けない場合があるので、その場合の調整方法をプログラム内のコメントで明示するようにしました。「ものひろい要員」を1匹減らして、1消費調整するのが基本ですが、RSは道具消費があるので、少し調整が特殊です。

 

【修正点】

・ 変数「Frame1」「Frame2」に引数を渡すだけで、目標のアイテム数、フレーム調整を可能にした。
・ ログに試行回数を出力するようにした。
・ フレームを微調整して、感染しやすいようにした。
・ 奇数ズレで感染しない場合の調整をコメントをコマンド内に明示した。

 

 

タマゴ受け取り&孵化自動化

生き恥マクロその2。 無駄な処理が多く、見るに堪えない非効率なプログラムでしたが、変数&画像認識範囲を取り入れることで、いい感じになったと思います。ものひろい乱数ほどではありませんが、こちらも修正が大変でした。

 

【修正点】

・ 変数「Eggs」に引数を渡すだけで、孵化させるタマゴの数を指定できるようにした。
・ 無駄な処理による遅延をなくした。
・ 認識する画像を減らして、差し替えが必要になった時の手間を減らした。
・ 孵化させる数以上にタマゴを受け取らないようにした。(孵化数=受け取り数になるようにした。)
・ ログに孵化回数を出力するようにした。

 

 

孵化用メタモン捕獲自動化

各自での調整が面倒だった部分を全て変数を使って解消しました。使いやすくなったと思いますので、別の個体用に調整して共有いただけると泣いて喜びます。

 

【修正点】

・ 変数「Frame1」「Frame2」「Threshold」に引数を渡すだけで、絵画選択フレーム、メタモン出現フレーム、画像認識の閾値を設定できるようにした。
・ ログに試行回数を出力するようにした。

 

 

Em孵化乱数自動化(性格値)

消費する差分や待機時間を算出するために、Excelシートを使用する必要がありましたが、C#スクリプトを使用して、変数を与えるだけで全て調整できるようになりました。ものひろい乱数の次に修正が大変でした。

 

【修正点】

・ 変数CurrentDifferenceTargetDifferenceFrameに引数を渡すだけで、自動で残り差分の計算&待機時間の調整ができるようになった。
差分ちょうど消費できない場合や、 設定フレームが少なすぎて差分を消費しきれない場合に、ログでエラーが出力してプログラムが停止されるようにした。

 

 

Em孵化乱数自動化(個体値)

元々はBV利用にしか対応してませんでしたが、変数を使って有り無し両方を選択できるようにしています。もちろんフレーム調整も簡単にできるようにしています。

 

【修正点】

・ BVの使用有無を選択できるようになった。
・変数FrameBVに引数を渡すだけで、タマゴ受け取りフレーム、BV利用の有無を設定できるようにした。

 

 

火山灰集め自動化

ネタ要素が強く修正するか迷いましたが、やんわりと需要はあるかなと思い、一応微修正しました。

 

【修正点】

・ 変数「VolcanicAsh」に引数を渡すだけで、目標の火山灰の数を設定できるようにした。
・ ログに集めた火山灰の数を出力するようにした。(エントリーコールされた場合は、計算が狂いますが、下回ることはありません。)
・事故って野生ポケモンと遭遇した際にもプログラムを継続できるようにした。

 

 

野生努力値振り完全自動化

「ぼうぎょ」や「とくぼう」を振る場合、振りたい努力値を入力する箇所が多く、設定ミスの原因になり兼ねませんでしたが、変数一発で解決できるようにしました。また、ポケルス関連の処理を整理しました。

 

【修正点】

・変数「EVs」「Pokerus」「Chansel」に引数を渡すだけで、振りたい努力値、ポケルスの有無、進化キャンセルの有無を設定できるようにした。
・ポケルスを使用する場合にログと、実際の努力値が異なっていたため、合わせるようにした。

 

 

Em ID調整自動化

直近に作ったプログラムですが、画像認識関係を修正しました。力業で「TID」、「画像認識の閾値」を指定できるようにしていますが、逆に認識が難しくなる場合もあるかもしれません。もしご意見があれば連絡願います。

 

【修正点】

・ 変数「TID」に引数を渡すだけで、目的のTIDを設定できるようにした。
・「Threshold」に引数を渡して、まとめて画像認識の閾値を変更できるようにした。

・C#スクリプトの無駄処理「#r "./Tesseract.dll"」を削除した。(OCRを諦めた際に消し忘れた。)
・ログに引いたTIDを出力するようにした。また、引いたTIDを目立たせるため、Frame1開始~等のログが出ないようにした。

 

 

※ 修正がなかった自動化プログラム

フレーム制御等の変数が不要な自動化プログラムの中には、修正が必要ないものもありました。以下のプログラムは従来のまま更新していません。

・Em、FRLG孵化自動化
・Em野生色厳選自動化
・RSEヒンバス釣り自動化
・Em御三家乱数自動化

 

 

3.おわりに

100日間に渡り作り続けていた自動化プログラムとなりますが、ようやく修正することができました。十分に試行できていない部分がありますので、不具合等があれば筆者のX(@Natu5307051)まで連絡いただければ幸いです。

ちなみに「3世代自動化鯖」では、これまでに作成された自動化プログラムが集約されていますので、良ければ参加してみて下さい。記事で公開されていないプログラムもあります。

 

アドカレ200日目からは重めのプログラムにも取り掛かりたいと思っています。一応、3世代でこれから作られるであろうプログラムは以下のようなイメージです。早く終われば、ORCA / DOL用プログラムの移植も考えています。

 

今後作りたいプログラム

・RSE固定・野生乱数自動化
・RS絵画あり固定自動化(method4対応)
・FRLG 初期Seed集め自動化
・FRLG アキホゴジャボ回収自動化
・Em バトルピラミッド自動化
・FRLG 孵化乱数自動化
※ その他、細々としたプログラムが複数あります。

 

私以外の方が着手しているプログラム

・FRLG ストーリー自動化
・FRLG 固定&野生乱数自動化

 

破綻しているプログラム

・Co/XD リライブ完全自動化

私にダークポケモン大量に捕獲したデータを用意する時間があるわけないだろ!いい加減にしろ!

 

こんなところです。また、新しく作ったら記事にしたいと思います。