ジュナリの森

switchやGCの自動化の記事を書いたり書かなかったり。

【ポケモンEm】ストーリー完全自動化

 

※この記事はPokémon Past Generation Advent Calendar 2023の17日目の記事となります。

adventar.org


ジュナリです。
その場のノリでエメラルドストーリー自動化書きますと言ってしまったので作りました。(作るのに2ヶ月もかかった、いわなきゃよかった…)
プログラムを公開しますのでよかったら使ってください。

※2024/5/6追記 ver1.0.2に更新しました。

※2024/5/8追記 ver1.0.3に更新しました。古いverで動かしている方はEm_Storyフォルダ内の画像を全て削除してから実行してください。

 

 

目次


注意事項


  1. Poke-Controller MODIFIED(※最新版にする必要あり) または Poke-Controller MODIFIED Extensionが導入済みであること。(導入のサポートはしません。)

  2. 商用利用禁止。(本プログラムの販売、本プログラムを用いて得られた成果物の販売など。)

  3. 自作発言、無許可の二次配布禁止。

  4. 想定外の動作をした場合でも責任はとれません。自己責任で利用ください。

Poke-ControllerでGCを動かす手順


ゲームキューブゲームボーイプレイヤーで動かすことを前提に作っているため以下の記事を読み事前に導入しておいてください。

junari.hatenablog.com

ダウンロード


drive.google.com

ファイルの置き場所


以下のファイルを指定の場所にコピーしてください。

 
Em_Story_Auto.py
 → SerialController\Commands\PythonCommands

画像フォルダについて(Em_storyフォルダ)


Poke-Conで動かす以上、画像認識を使っているのですがフォルダには画像を1枚も入れていません。
ではどうやって画像認識をするのかというと、プログラムを実行中に必要な画像を勝手に切り取って集めるようにしてあります。
例として、NPCとの会話を検知するためにメッセージウィンドウの右端の部分を画像認識に使っているのですが、NPCとの会話が発生した際に該当する画像がない場合は、その場で右端の部分を切り取って保存し、以降はその画像を使って画像認識を行います。
(実際に動かしてみるとわかるかも)

ゲームキューブの画面出力は人によって違いすぎるので事前に用意した画像ではうまくいかないと考え、こんな面倒なやり方をしています。

 

正しく撮れていれば最終的にこんな感じになります。


ゲーム内の事前準備


1.ゲームキューブの設定

・「サイズ」を「フル」に変更してください。


2.エメラルドの設定

・タイトル画面でキーボードの X + B + ↑ を押して完全にデータを削除してください。


・「さいしょからはじめる」の下にある 「せっていをかえる」を選び以下の設定にしてください。
 はなしのはやさ:はやい
 せんとうエフェクト:みない
 しあいのルール:かちぬき
(たぶんウインドウもタイプ1にしたほうがいいかも)


プログラムの実行


事前準備ができたら「さいしょからはじめる」にカーソルを合わせて「エメラルドストーリークリア自動化 ver.1.0.3」を実行します。


実行すると設定画面が出るので好みの設定に変更しOKを押す。


~各項目の説明~
・NO.1 スタート番号
プログラムの開始位置を決める部分。基本は0からスタート。手動で進めたデータを途中から動かすことはできません。プログラムが想定外の場所でループしたり、停止していた場合に再スタートさせるときに選ぶ。

・NO.2 ストップ番号
プログラムの終了位置を決める部分。何も弄らなければ殿堂入りまで進む。
マスボの回収や教えわざ(みがわり、大爆発など)が目当ての場合はミナモシティやキナギシティに到着するあたりを設定すると効率がいい。

 

・NO.3 言語
ソフトの言語を決める部分。日本版と海外版で画像の切り取り範囲が異なるので再スタートさせる場合でもしっかり設定しましょう。

・NO.4 主人公
主人公の性別を決める部分。最初から始めたときの性別の選択以外にも、ライバルの手持ちやバッグにも影響するため再スタートさせる場合でもしっかり設定しましょう。

・NO.5 名前
最初から始めたときにつける名前の設定。デフォルトネームは用意してありますが、ほかの名前を付けたい場合はプログラムの73行目あたりに設定したい名前を足し、603行目あたりにあるenter_name関数にそれに対応する動きを書いてください。わからない人はトラックの中まで手動で進めてスタート番号に1を入れてプログラムを実行してください。

・NO.6 実行開始時リセット
普通に動かす分には使いませんが、何かしらでプログラムが停止し、再スタートさせたい場合はするを選んでください。

スタート番号0以外で開始する設定


上記でプログラムが想定外の場所でループしたり、停止していた時にだけ使うと書きましたが、ID調整をしたい場合は1や2からでも実行できます。

・1で動かす場合

ID調整で目当てのIDが引けたら、以下の画像の位置でレポートを書きます。


スタート番号を1に設定し、リセットをするにして実行してください。


・2で動かす場合

裏ID確認のために御三家を光らせるところまで手動でやりたい方は最初の戦闘に勝利し、御三家を受け取るところまで手動で進め、以下の画像の位置でレポートを書きます。
※1.自宅PCのキズぐすりは回収してください。
※2.御三家はミズゴロウを選んでください。
※3.一度もスタート番号0か1で動かしたことがない場合はうまく動作しません(戦闘に必要な画像を集められないため。)2から動かす場合は一度は0か1からスタートして画像を集めてください。


スタート番号を2に設定し、リセットをするにして実行してください。


プログラム実行後


実行を押したあとは終了するまで待つだけです。
ミズゴロウ1匹でトレーナーを倒し、地道にレベルを上げながら進むので
殿堂入りまでおおよそ9~10時間かかります。気長に待ちましょう。
(他ROMから強い個体を輸送して動かすことはできないので注意)
戦闘で敗北したり、想定外の動きをして一定時間ループしたらリセットしてレポート地点からやり直す機能があるため、基本は放置で問題ないはずです。
(なみのりで移動してるときなんかは移動しすぎたりして想定外のうごきになったりします。)

参考動画


先行してHopeさんに未完成のプログラムを渡し人体実験デバッグしてもらいました。正常動作の様子が見れます。

www.youtube.com

おわりに


プログラムの修正や一部コードを利用させていただいた、フウ様、yayoi様
デバッグに協力してくれたHopeさんに感謝。
また、何か不具合や不明点はジュナリ(@junari000)にDMかリプライで報告お願いします。

明日の記事は、サイファーさんの7世代捕獲乱数についてです。7世代はガンテツボールがストーリー中1~2個程度しか入手できない(ストーリー自動化もない)ので色違いにガンテツボールを投げたい人には必見です。