ライフハック&ガジェット紹介ブログ!

ライフハック&ガジェット紹介ブログ!

ゲーム系のガジェット&ライフハックブログです。

GC版ポケモンコロシアム色違い厳選の自動化のやり方について【GC自動化のススメ】

GC自動化 Co色違い厳選編

~Co乱数の話も交えて~

 

こんにちは、露草です。

 

今回は友人のAllergenさんが、ゲームキューブポケモンコロシアム色違い厳選の自動化のための手引書を書いてくださったので、

私が読みやすいように再編集・再構成・校正を行い、文章として後世に残しておきます。

マジで編集が大変だったので、関係者にレアなポケモンをください。

 

 

【前置き】そもそもなんで今ポケモンコロシアムを?

ポケモンには、はるか昔3世代から「リボンと呼ばれる勲章のようなシステム」が存在します。

昔はそれこそステータス画面を見て、

コレクションをひっそりと眺める程度の楽しみ方しかできなかったのですが、

8世代(ポケモン剣盾)で導入されたあるシステムの影響でその価値が跳ね上がることになります。

その名は 「2つ名システム

ポケモンのニックネームの前に、

  • "しれんをともにした"(修行リボン)
  • "あめにむせぶ"(雨降りの証)
  • "うんめいかんじる"(運命の証)

などの称号が表示されるようになりました。

最高難易度リボン、ナショナルリボン

これらの称号の中でひときわ入手難易度が高い、

2つ名(リボン)がマニアの間で知られています。

それが「こんなんをのりこえた(ナショナルリボン)」 という2つ名です。

ナショナルリボンとは、ゲームキューブ専用ソフト、

というポケモン外伝ソフトに登場し、

捕獲することができるダークポケモンのみが所有する2つ名です。

XDではダークポケモンに色違いのブロックルーチンがかけられているため

通常色のダークポケモンしか捕獲ができませんが、

Coでは1/8192の確率で色違いが出現するので、

2つ名の希少性もあいまって多くのポケモントレーナーの射幸心を煽る結果となりました。

 しかし、この2つ名を含め現在、一部の過去作リボンは入手する機会が近い将来に失われようとしています。

そう、ポケモンバンクのサービス終了です。

そのため、この2つ名を持つ色違いポケモンを入手するためにはさながら過去から現在への時空ゲートが閉じる前に歴史を駆け抜けるSFの物語よろしく急ぎ古のゲームで希少なポケモンを探し出す必要が生じたのでした。

 

Coで色厳選をする前に覚えておかないといけない仕様

Coの色違いを決定するシステムの厄介な仕様として、

  • 性格値(暗号値)などの色々な値(=色違いを決定する値該当のダークポケモンが初めて戦闘に繰り出されたタイミングで決定する

という面倒な法則があります。

 

そのため戦闘を回避できる場所や、

ストーリークリア後に新たに入手できるダークポケモンを除いて、

基本的には

  • ストーリーの途中で戦う時点で色違いになるように乱数調整を行う

または、

  • 色違い厳選をしなければいけません。

 

そのため全てのダークポケモンで色違いを出すためは『1/8192の確率』を超えねばならず、

ダークポケモンで確率を超えるのはかなり厳しいです。

先にポケモンバンクの寿命が来るのは明確でしょう。

Co色違い厳選はどうして大変なの?

 

①色違いの確認方法が大変

色違いかどうかの確認方法でうが、戦闘開始時点では色違いかどうかが判りません。

「捕獲後」にステータス画面を見るもしくは戦闘に繰り出すことで初めて色違いかどうか分かります。

 

そのため厳選一回ごとに、

セーブポイントから該当のダークポケモンを持つトレーナーと戦うまでのイベントを1回ずつ延々と見ることになり、

厳選1回につき莫大な時間が必要となります。

 

参考に筆者(allergen)がヌオーの厳選を行った際のデータですが

マスターボール使用、余計なイベントなしという内容で1回の厳選が約2分半。

つまり24時間不眠不休で厳選したとしても1日576回しか厳選が行えない

ということになります。

 

②ズルができない

GBAのソフトから育成済みのポケモンが本作に送れるのは、

ストーリークリア後であり、

ストーリークリアまでにほぼ8割のダークポケモンと戦闘してしまうため、

色違いの厳選の機会を失ってしまうことになります。

そのためレベルの低いポケモンで挑まざるを得ず、厳選スピードの遅さも相まって、効率はかなり低いです。

つまり結論から言うと

乱数調整出来る個体は、乱数調整するのが現実的なライン

となります。

しかし、現実は厳しいもので乱数調整がほぼ不可能なポケモンも一部存在します

そのためゲームキューブの操作の自動化は、乱数調整が現実的ではないダークポケモンのために導入するという訳です!

 

乱数調整が厳しいダークポケモンは何体?

乱数調整が極めて困難であるポケモンは以下になります。

です。

具体的には、

ヌオー、ムウマポポッコ、モココ、ヨルノズクマグマッグ
オオタチヤンヤンマテッポウオハリーセン

という10体です。

このうち、戦闘がスキップできる(厳選が少し楽にできる)のは、

ヌオー、ムウマポポッコ、モココ、ヨルノズクマグマッグ

合計6体です。

マグマッグのトレーナーはランダムで動くので、

現行プログラムの『CoPyriteTownShinySearch.pyでの自動化に向いている、言い換えると捕獲にマスボを使用できるポケモン実質5体のみです。

なお繰り返しになりますが、

厳選したい場合は先述のように目的のポケモンとは戦わずストーリークリアする必要があるので注意が必要です。

 

小難しい乱数の解説【自動化導入だけ知りたい人は読み飛ばし推奨】

Co乱数のあれこれ(狙った個体生成までの到達の仕方)

先パイラタウンに出現するポケモンたちが、

なぜ乱数調整が不可能なのかを説明をするにあたり、

Co乱数の仕組みについて簡単に説明します。

Co乱数にはいくつか難易度ごとに種類分けがあります。

 

①道中の不定消費がない、もしくは後述するポケモンの瞬きで特定する【現在seed②】を求めた後には不定消費が生じないもの

 

不定消費(NPCや背景のせいで勝手に進んでしまう消費)が存在するもの

 

③連続戦闘のダークポケモン(戦闘中に瞬きを観測してseedを求めるもの)

 

連続戦闘に関してはラルガタワーの5連戦がわかりやすいかもしれません。

ただ、長くなるのでこの記事では連続戦闘に関しては説明を省きます。

【現在seed①】とは?

Co乱数は色違いが出る地点(目標seed)まで、

スタート地点である【現在seed①】と定義されているポイントから、

乱数値を前に進めるための【消費】を行って【色違いの出る目標seed】まで到着しないといけません。

人生ゲームでいうスタートからゴールまでのサイコロを意図的に操作するイメージです。

Co乱数に置いて「スタート地点のseedはランダムに決定される」のでとても厄介です。

しかも数億パターンあるという鬼仕様。


そのためゲーム開始後に、

バトルで表示されるポケモンのパターンを8回分集めて【現在seed①】を計算し、

『これから何マス進めば色違いが出るseedになるか』という乱数値を割り出す必要があります。

消費の仕方について

【消費】を進める方法は、

主に以下の4つの方法があります。

スナッチリストを開く (1回につき7消費
セーブポイントでセーブする (1回につき24消費)
③通常ポケモンのステータス画面を開く(瞬き10回で200消費くらい)
ダークポケモンのステータス画面を開く(秒間17200消費くらい
※③,④は多少前後します

 

基本的には目標seedまで必要な消費数は、

色違いということであればseed厳選をしない限り数万~数十万、

個体値まで粘りだすと数百万ということもザラであるので、

基本的には④の方法を用いて大まかな消費を進めるのが基本になります。

 

【現在seed②】とは?

そこで、どこまで消費を進められたか、目標までの消費数はあとどれくらいになったかというのを確認する方法が存在し、

それがポケモンの瞬き」による現在seed現在seed②】です。

具体的には、

ステータス画面などでポケモンの瞬きを10回連続で確認し、

瞬きから次の瞬きまでの間隔のパターンから現在seedを割り出す

という方法があります。

ここで得られた【現在seed②】から、

7の倍数で消費数が割り切れるseedまでの瞬きでの消費を、

夜綱様さんのCo Searchのタイマーで計算します。

Co Searchには、残りの消費数が7の倍数になるところまであとどれくらいの時間を待てばいいかというタイマー機能があります

あとは残った消費分をスナッチリストでの消費で行うのが、

基本的なCo乱数の流れになります。

不定消費とNPC消費について

ところで、このゲームには

  1. 背景のオブジェクトの処理不定消費)
  2. NPCの移動NPC消費)

により意図していない消費が発生するマップがあります。

 

先ほど消費数をスゴロクのゴールまでのマスに例えましたが、

不定消費は「そのマップにいるとランダムにマスを進められてしまう消費数」といったところです。

そのため、セーブポイントからトレーナーまでの移動の間に不定消費が存在するマップを通る場合には、

以下のように乱数調整を行います。

 

ゲーム開始時に【現在seed①】を特定

不定消費が存在しないマップ(トレーナーの目の前)まで移動

瞬きで【現在seed②】特定&スナッチリストで割り切れる消費のところまで瞬きタイマーで消費を進める。

スナッチリスト開閉で微調整して戦闘へ

 

Co乱数の実際(イメージ図 不定消費なしver)

 

Co乱数の実際(イメージ図 不定消費ありver)

不定消費が発生するマップに所持トレーナーがいるダークポケモンの乱数イメージは上の画像のようになります。

図の通り瞬きでの消費を終え、

不定消費による消費数を逆算し、必要な待機時間を1F(1フレーム)単位で微調整して目標の消費数ドンピシャリを狙うという、

かなり難しめの乱数調整です。

※該当ポケモンチルットアサナンアリアドスグランブルビブラーバライコウトゲチック、「ダークポケモン研究所」に出現するジョウト御三家※2

※2自分が選んでいないジョウト御三家は「ダークポケモン研究所」または「スナッチ団アジト」に出現するが「ダークポケモン研究所」に出現する御三家の個体

 

しかしパイラタウンにおいては、先述の「オブジェクトによる不定消費」と「NPCによる消費」が両方とも存在し

NPC消費が不定消費に干渉してしまうため、不定消費の正確な算出が困難な状態です

パイラタウンでの乱数調整が現実的ではないのはこれが理由です。

 

GC自動化実践編 ~pokeconでやるにはどうしたら・・・~

必要な前準備について①

さて、長い前置きとなりましたがここからは自動化の話に移りましょう。

Switchの自動化等と比べるとどうしても準備が多くなります。

 

※以下はアレルゲンさんの文章(に近いもの)

プログラム関係:

先述のような背景で、

Co色ヌオー厳選をどうにか自動化できないかと途方に暮れていたところに、

フウさんよりパイラ自動厳選プログラム「CoPyriteTownShinySearch.py」の提供を頂きました。ありがとうございます。

 

パイラ自動厳選プログラム「CoPyriteTownShinySearch.py」では、

フウさん作成のPoke-Controller Modified Extensionの導入が必要になります。(2023/7/16現在 ver.0.0.5 で正常動作確認済)

現在datファイルを用いた導入が可能となっており、非常に導入しやすくなっています。

機材関係その1

  • GCVideo
  • HDMI to HDMIのケーブル
  • HDMI用のキャプチャーボード

まず、GC Videoとはゲームキューブの映像データをHDMIに変換するコンバーターを指します。

ゲームキューブにはDIGITAL(デジタル)ANALOG(アナログ)と記載された画像出力用の差込口が存在しますが、

今回はDIGITALの方に差し込む形になります。(上の画像参照)

 

注意任天堂公式HPによると2004年7月以降出荷のゲームキューブに一部デジタルAV出力ポートが無いものがあるそうです。

 

GC Video単品ではキャプチャーボードの役割はないため、

簡素なもので構わないのでPCとの間にキャプチャーボード挟む必要があります。

 

機材関係その2

https://cdn-ak.f.st-hatena.com/images/fotolife/t/tangential_star/20220905/20220905005323.png

https://tangential-star.hatenablog.jp/entry/Arduino_pokemon_ex9_Operating_the_GameCube_with_Arduino_and_capture_the_100battle_challenge_in_Mt_Battle ますたー様の記事より画像引用

次にGCコントローラーの役割をするマイコン周りに関しては、

GC自動化の先駆者の「ますたー」さんが、
バトル山自動化の記事を挙げてくださっているのでこちらを参考に物品を揃えましょう。

双方向レベル変換モジュールと、LANコネクタDIPキットをブレッドボードに付けるにあたり、はんだゴテが必要になるので注意して下さい。

使用するマイコンはブレッドボードに差し込む関係でArduino microが推奨です

ブレッドボードに接続のための線はついてくるものの、

不器用な人はジャンパワイヤーも予備で購入するとよいかもしれません。

 

ますたーさんの記事↓↓

tangential-star.hatenablog.jp

機材関係その3

サーボモータ

GCのリセットは残念なことに本体上面左下のリセットボタンを物理的に押す

他に方法がありません。

そのため、SG90と呼ばれるサーボモーターでリセットボタンを押させています。

 

ただ、私(アレルゲン)が自動化を24時間駆動で行っていた際には、

概算12000回リセットあたりでSG90の内部のギアのかみ合わせが微妙になって使えなくなったため、

たくさんのダークポケモン自動化で粘りたい方は複数購入をお勧めいたします

 

ブレッドボードに各部品を差し込む前に

右の2つのパーツはブレッドボードに差し込む前にはんだ付けが必要になります。

上画像がGCのコントローラー差込口のLANコネクタDIPキット

下画像が双方向レベル変換モジュールというらしいです。

やることとしては差し込むための金属部品をはんだ付けで固定する形。

銀の玉みたいになっているとこは全部はんだ付けの痕と考えて大丈夫です。

 

ちなみに先ほど紹介したますたーさんのブログ内に、

はんだ付けの動画もありましたのでよろしければそちらもご参照ください。

 

ブレッドボードでの配線図

ますたーさんのブログからお借りした模式図を掲載はしていますが、

それでも分かりにくい方がいらっしゃるかと思いますので各ケーブルがどのような配線になっているか実際の写真を用いて掲載します

https://cdn-ak.f.st-hatena.com/images/fotolife/t/tangential_star/20220905/20220905013648.png

https://tangential-star.hatenablog.jp/entry/Arduino_pokemon_ex9_Operating_the_GameCube_with_Arduino_and_capture_the_100battle_challenge_in_Mt_Battle ますたー様の記事より画像引用

配線図詳細①

配線図詳細②

配線図詳細③

サーボのセッティングの仕方

サーボは9時の方向を0時として回転する動き方をさせます。

そのため、サーボの向きはゲームキューブのリセットボタンをうまく押せる画像のような位置にガムテ固定します

HITSUMABUSHIの下記の部分をwrite(45),write(0)にすると、

筆者の環境では丁度良い感じでした。

配線完成!!

※繰り返しますが、ブレッドボードを購入すると各穴をつなぐためのケーブルも付属でついてきますが、

筆者は超絶不器用で付属品の配線では接続不良を繰り返したため、

やけっぱちでジャンパワイヤの直刺しをしています。

ものをひっかけやすくなるのであまりマネしないようにしてください。

 

ライブラリ「Nintendo.h」の導入

先述のHITSUMABUSHIというArduinoファイルはNicoHood氏という方によるライブラリArduino Nintendo Library (Nintendo.h)」を、

Arduino IDEにインストールする必要があります。

Githubリンク→ https://github.com/NicoHood/Nintendo

これもますたー様の記事内に記載はありますが、

①ツール→「ライブラリを管理」を選択

②検索窓に「Nintendo.h」と入力して、絞り込みされた中から「Nintendo」を選んでインストールする

という手順をとります。

なんなら後述の配線もろもろ動画のリンクまでご用意されてますので、つまずいたらぜひ参考にしましょう。

 

CoPyriteTownShinySearch.py 使用編

「CoPyriteTownShinySearch.py」を使うにあたり

さて、ようやく事前準備が整い、pythonコマンドの使い方に移ります。

こちらも作成はフウさんです(実はある報酬として私個人用に頂いたものだったりします)

2023/7/16現在、一般公開に向け色々と動いてくださっています(ライセンス関係の調整や、READ ME作ったりetc)

そのためまだすぐに自動化開始とはなりませんが、どちらにせよ先述の環境整備が必要になりますので機材を整えて待機しましょう。

 

プログラムとして使うときはTemplateフォルダに画像ファイル入れて、

PythonCommandsというフォルダ階層にpyファイル入れるのはいつも通り。

このあたりはまず間違いなくRead meに記載されると思いますのでリリース後必ずよく読むようにしてください

Pokecon側の筆者の設定:

Baud Rateは4800、FPSは45、Show Sizeは640×360

で正常稼働をしています。

また、現時点ではヌオーとムウマにしか対応していないのですが、

ポポッコヨルノズクのトレーナーは動かないので移動部分を書き換えれば今後応用可能と思われます。

 

 ※2023/7/16追記: ポポッコ厳選の正常稼働を確認しました。 ヌオーの挙動の部分(67,68行目)の横移動のduration 3.75 下移動のduration 0.9へ変更する形です。

ただ、手持ちを草ポケモンなどにすると隣のクサイハナがようかいえきでポポッコを急所で倒してしまう事例があるため手持ちは水タイプへの変更を推奨します。

 

ゲーム内での事前準備

手持ちを1匹にしましょう。

そうするとマスターボールでの捕獲後、勝手に戦闘に出してくれるのでそこで色違いかどうかの判定がなされます。

②複数匹粘るのであればマスターボールをいっぱい用意しましょう。

(クリア後であれば他のGBAロムなどからの輸送は可能です。

早期購入特典セレビィディスク持ってるとポイント貯めれば1個追加で入手は出来るけど中々面倒。

※コロシアムには戦闘時のボール未使用バグが有名ではありますが正規の方法じゃないのでプログラムには組まれてません。

マスターボールは道具のボール欄の一番上にセッティングしておくと勝手に投げてくれます

※もし、今後オオタチとか粘るのであればプレミアボールとかで捕獲できるよう戦闘時ダメージをあたえて捕まえやすくするようなコードを加える必要があります

CoPyriteTownShinySearch.pyのプログラムの流れ

①パイラコロシアムのセーブポイント前でプログラムスタート、厳選したい子を選ぶ

②トレーナーのとこまで移動

③戦闘開始し、マスボを投げる

※この時ヌオーの場合は上段に出るが下段に出るかがランダムなのでコマンドがムウマよりはわずかに複雑です。

④捕獲後、戦闘に出るのでそこで画像認識使った色違い判定

⑤リセット or 色違い確保?(※問題点のところで後述)

 

Templateに入れる画像の差し替えについて

実は、筆者は第3世代での孵化乱数を履修していたため、

プログラムの簡易化のために対象のダークポケモンの色違いのアイコン画像を用意していました。

target_pokemon がヌオーを選択したときの捕獲前の通常色アイコン、

target_pokemon1が捕獲後に色違いだった時の画像といったように置き換える必要があります。

戦闘画面の画像で言うとアリゲイツのとこにヌオーが出てきます。

また、手持ちのポケモンもアイコンをキャプチャして差し替えてください(私の手持ちはキノガッサになっています)

フウさんから一番初めにこのプログラムをいただいた時点では色違い未所持を想定した内容だったので、一般公開されたらここの処理がどう変わっているか必ず確認をしてください。

 

残った問題点と対応策

厳選自体は現在筆者環境ではうまく稼働しているのですが

プログラム開始時と終了時にサーボが作動してしまう

という症状を認めています。

(※色違い1回リセットされました)

なので、フウさんと相談の上、130行目と131行目に「色違いが出たときにプログラムを一時待機させ続けるという文を設けて対応としています。

今後このプログラムを使用する方で、必要があれば何かしら打開策について協議できたら幸いです

 

最後に

 

いかがでしたでしょうか?

まとめ記事を作成するのは今回が初めてですので稚拙な文章で大変申し訳ありません。ただ、ポケモンバンクの寿命と厳選にかかる莫大な時間を考慮するとなるべく早く情報共有し少しでも自動化鯖の皆様方の一助になれば幸いです。

ここまでたどり着くにあたりプログラムを提供していただいたフウさん、素晴らしい記事を残していただいたますたー様その他関係者の方々に深く感謝いたします

ただ、コロシアムの自動化プログラムに関してはまだ黎明期もいいところです。このプログラムと記事を皮切りにほかのダークポケモンの自動化が発展することを切に願います

最後にこのプログラムで捕獲することに成功したCo色ヌオーの写真を添えて記事を締めくくらせていただきます。

 

                               Allergen   拝