日本語版RS単体での任意コード実行
こちらはPokémon Past Generation Advent Calendar 2024の5日目の記事となります。
昨年、メールリサイクルバグを利用することによりFRLG単体での任意コード実行が可能であることが示されました。
今回は日本語版RS単体で任意コードを実行したいと思います。通信も電池も使いません。前期版ならルビーでもサファイアでも実行可能なはずです。(一応関数アドレスなどは精査しましたが、デバッグはサファイアでしかしていないのでルビーで不具合があったらごめんなさい)
電池ありでもIDをちゃんと調整すればできますが、この記事では電池無しの場合しか計算していません。
エメラルドのザロクバグやポケモンのメモリ構造、乱数調整やアセンブリを熟知している人向けの解説になっている気がする。
追記:RSでもメールリサイクルバグができるようです
トリガーは?
今回使うのはバグわざ0x201cのアニメーションです。

実行すると0x02030400からのわざアニメが実行されます。これはボックス1の20番目のポケモンが存在するメモリで、ここからボックスの最後までポケモンを置かないことによりボックス名を任意コードとして使用することができます。
ただしこのわざは戦闘画面でわざ名を見ると画面が崩壊し操作不可になり、おまけに命中0です。その為ねこのてでロックオンとこのわざを出す必要があり、非常に面倒。なのでこのわざを使い、もっと簡単に任意コード実行可能なトリガーを呼び出すという段階を踏むことにします(簡単なトリガーについては後述)。
どうやってバグわざを入手する?
エメラルドならザロクバグによるズレた位置へのダメタマゴフラグ付与、FRLGならメールバグによるメモリ破壊がトリガーポケモンの入手方法になっています。しかしRSではこれらは再現不可能。そこで目を付けたのが徘徊バグです。
手持ちが二体以上いるトレーナーに負け、他のポケモンやトレーナーに出会わないようにして徘徊ラティと遭遇します。その状態でラティを倒すと、なぜかさっきのトレーナーの二匹目のポケモンが出てきます。
この時れっきとした野生ポケモンとの戦闘状態であるため、このポケモンを捕獲することができます。
しかし、基本的にはバトルタワー以外での戦闘だと捕獲後にポケモンがダメタマゴへと変化します。

これはNPCと主人公のIDが一致しないため。ここで第三世代のポケモンデータ構造を解説します。
ポケモンのデータ構造
ポケモンデータには暗号化機能が存在し、ポケモンの性格値とIDをxor演算した数値で更にxor演算を行い、データにマスクを掛けます。
マスクされた数値は再度暗号鍵でxorすることで復号できるのですが、復号したデータから計算されるチェックサムが事前に保存されたそれと一致しない場合、ダメタマゴが発生します。
先ほど説明した通り、NPCと主人公のIDが一致しないためダメタマゴ化は避けられないように思えます。

しかし、エメラルドのザロクバグで起きていることは性格値の上書き。暗号鍵に関連する数値を書き換えているのにダメタマゴへと変化せずに、バグポケモンがしっかり発生しています。
元の数値から0x40000000でxor演算がされるようになっているのですが、言うなればこれは復合後のデータでも0x40000000のbitが反転されるようになるということ。
チェックサムは16bit毎に足し合わせて計算され、17bit目以降に溢れた数値は無視されます。元々0x40000000のbitが立っているのが偶数箇所の場合は反転が行われても、桁溢れによりチェックサムが一致するようになっているわけです。
話をRSに戻します。徘徊バグでは性格値ではなくIDが上書きされることになるのですが、だいたい同じことを行えます。
今回のトリガーはわざコード0x201c。わざコード0x01cのすなかけを0x2000で反転させた場合に発現します。
0x2000で反転する場合、0x4000と異なりチェックサムが同じになるのは、元々bitが立っているのが2箇所か10箇所の時のみになります。
0x2000 * 2 = 0x4000, 0x2000 * 10 = 0x14000
なので17bit目以降を無視すれば同じになります。

119ばんどうろにいるオサムの持つツチニンはすなかけをわざ1に覚えており、元々立っている0x2000のbitは経験値(60万タイプのレベル26なので26012 = 0x659c)と捕まえた場所(119ばんどうろのマップIDは0x22、この数値が格納されているのはmiscellaneousブロックの1byte目なので8ビット左シフトされている)の二箇所のみとなっていて条件を満たします。
ID調整
実際に使うIDはこちら。

123387F 44491-51846
待機時間は34分くらいありますが、頑張りましょう。時間がかかるだけで難しくはないです。
ストーリー

ごく普通に殿堂入りまで進めてください、ただし先述のオサムを必ずスルーし、マスターボールも使わないでください。
殿堂入り後
以下のポケモンを用意します。
・レベル40以下ででんこうせっかを覚えたポケモン

ラティに遭遇し体力をギリギリまで削る&倒す用のポケモンです。115ばんどうろで捕まえられるレベル25のオオスバメをレベル30くらいまで育てるのが手ごろでしょうか。第三世代だとスプレーを使っているときには瀕死でない中で一番前のポケモンを参照します。
・ねこのてを覚えたポケモン

エネコがレベル19で覚えるのみです。エネコは116ばんどうろ限定出現で出現率2%なので、サファリゾーンで捕まえたピカチュウをヒワマキシティで交換するのもよいでしょう。(ピカチュウも出現率5%で、エメラルドと異なりひらいしんも効きませんが)
・ロックオンを覚えたポケモン

コイル・レアコイル・ノズパス・レジ系が該当。コイルをレベル32にしましょう。ロックオン以外のわざは必ず忘れさせてください。
上記のポケモンを用意出来たら頑張ってラティと遭遇しましょう。キンセツシティ周辺で粘るのが良いと思われます。
一度遭遇したら次は図鑑の分布を見ることで比較的楽に遭遇可能です。キンセツ周辺にいない場合はそらをとぶでリセットできます。
また、「つづきからはじめる」を選択するまでのフレームを調整することで初期位置を乱数調整することも可能です。

でんこうせっかでHPを削るのを繰り替えし、次のでんこうせっかで落ちるというところにしましょう。
NPCのIDを調整する
準備ができたら最後に使ったポケモンセンターをキンセツシティにした状態で
・先頭ひんしにしたでんこうせっか持ち
・ひんしにしたなみのり持ち
・弱いポケモン
の三体を連れて119ばんどうろのオサムの元へと向かいましょう。この長い草むらに隠れているトレーナーは主人公の動きを真似るのですが、上手く調整し話しかけるだけで戦闘に入れるようにしましょう。

レポートしたら再起動し、GBAのロゴが出ている画面でStartボタンとSelectボタンを長押しします。ブートモードへと遷移し読み込みが止まります。

ここで任意のタイマーを用意し、10970Fを入力。タイマー開始と同時にAボタンを押し、そのままAボタンを押すだけで戦闘に入る状況にします。
タイマー終了と共に戦闘に入り、負けてください。そしてキンセツシティまでワープしたら、ラティアスの分布を確認。ゲームをリセットすると見ていたページもリセットされるのですが、一覧ページでStartボタンを押すと「リストのさいごへ」という選択肢が出るので、時短になります。

ラティに遭遇してでんこうせっかで倒すと、なぜかツチニンが出てくるのでマスターボールで捕まえましょう。
捕獲後、手持ちを確認したときに「ダメタマゴ」がいたら失敗です。
ステータスを確認し、ボールからズレを確認します。
| ズレ | ボール |
|---|---|
| -2F | モンスターボール |
| -1F | リピートボール |
| ±0F | ☆ |
| +1F | ネストボール |
| +2F | スーパーボール |
逆にニックネームが「ツチニン」、アイコンがはてなマークになっている場合成功です。ですが、絶対にステータスを見ないでください。

成功したらコトキタウンに飛び、パソコンで手持ちを
・先頭エネコ
・ロックオンを覚えたポケモン
・バグポケ
にします。
この時、「別のポケモンを掴んだ状態でとバグポケを入れ替える」とフリーズするので気を付けましょう。事前にパソコンの前でレポートを書いた方がいいでしょう。
そしてボックスの名前を編集します。
| ボックス番号 | ボックス名 |
|---|---|
| ボックス1 | _うさゥうい_く |
| ボックス2 | アいむけい_lア |
| ボックス3 | うぅけえGミ_l |
| ボックス4 | ア_い9ぃ_lア |
| ボックス5 | ギゥくェあぶ_び |
| ボックス6 | アアアュぬおくア |
※_はスペース、lは小文字のL
最後にボックス1の8番目のポケモンにポケモンがいたら別のところに移動させ、レポートしてから101ばんどうろで野生ポケモンとの戦闘に入ります。

エネコにねこのてを使わせます。この時の行動は
・ロックオン
・みねうち
・みだれひっかき
・「ノーマルわざ」という謎のわざ
の四種類がありますが、みだれひっかきで相手を倒した場合は再度ポケモンとエンカウントしましょう。
「ノーマルわざ」は普段の命中率が0なので成功することはありません。
ロックオンが出た場合、またねこのてを使い「ノーマルわざ」が出ることを祈ります。
ロックオン後ノーマルわざが出た場合、二つのパターンがあります。
パターン1 使った瞬間画面の色がめちゃくちゃになる

これは外れの方のわざを引いたパターンです。ソフトリセットも効かないので本体側でリセットしてください。
パターン2 そのまま動きが止まる
こうなった場合は成功です。一見フリーズしたように見えますが、裏で処理が走っていて8~9分後に戦闘から離脱します。10分ほど経っても画面が動かない場合、ボックス名を間違っている可能性があるのでリセットしてから確認してください。
先頭から離脱後、ボックス1の8番目にはてなマークのポケモンがいれば成功です。このポケモンは何なのかというと、「ポケモンを入れ替えるだけでコードを実行する」バグポケモン0xC1AAです。つまりツチニンくんはお役御免です。(一応念のため逃がさない方がいいかもしれません)

Grab ACEについて
ポケモンを入れ替えるだけでコードを実行できるGrab ACEについて解説します。
かなり簡潔に説明すると、種族名が長すぎるバグポケモンを読み込むことで、「ポケモン入れ替え時のアニメーションに関する情報を一時的に保存するメモリを上書きする」ことによって実現しています。0xC1AAの場合は0x02033351からの命令をアセンブリで直接実行できます。
これはボックス6の22番目のポケモンのメモリに該当し、そこからボックス14までポケモンを置くことができなくなります。
これを回避するために、「その位置からボックス名のメモリまでジャンプさせ、ついでに一部のメモリを整理する」というコードを保持したダメタマゴを配置するコードを実行します。(このコードを実行するときも、ボックス6の22番目以降は空にしてください)
| ボックス番号 | ボックス名 |
|---|---|
| ボックス1 | ぃ♂いむけいうぅく |
| ボックス2 | アけいぉぅ_lア |
| ボックス3 | けいっぅしぶくタ |
| ボックス4 | アさぶぶタ_lア |
| ボックス5 | さぶギタしぶくチ |
| ボックス6 | アすぶNタ_lア |
| ボックス7 | いむあミしぶすぎ |
| ボックス8 | ア_びアアアアア |
| ボックス9 | ぃ♂いぶいむあミ |
| ボックス10 | アアアあぶ_びア |
| ボックス11 | アアあゥういアア |
| ボックス12 | ア7し_いアアア |
| ボックス13 | _ヲけくアアアア |
※_はスペース、lは小文字のL
念のためレポートを書き、別のポケモンを掴んだ状態でバグポケモンとの入れ替えを行うと、ボックス6の22番目にダメタマゴが配置されます。これ以降は好きなところにポケモンを置いても構いません。
汎用コード持ちのダメタマゴの配置
ついでにボックス14の30番目に汎用コードを埋め込んだダメタマゴを格納します。コードの終了処理・イベントスクリプトの実行処理・bl命令用の処理を持たせます。
一回目
| ボックス番号 | ボックス名 |
|---|---|
| ボックス1 | リばめぎきべあタ |
| ボックス2 | アきべだタ_lア |
| ボックス3 | きべゥタくべGタ |
| ボックス4 | アlsアアアアア |
| ボックス5 | くミいぶすぎ_び |
| ボックス6 | アアアねお_うア |
| ボックス7 | アア_ヲけくアア |
二回目
| ボックス番号 | ボックス名 |
|---|---|
| ボックス1 | リばぇぎきべあタ |
| ボックス2 | アきべだタ_lア |
| ボックス3 | きべゥタくべGタ |
| ボックス4 | アlsアアアアア |
| ボックス5 | おべくチいみ_い |
| ボックス6 | アアアあぃくゥア |
| ボックス7 | アア_みNタアア |
三回目
| ボックス番号 | ボックス名 |
|---|---|
| ボックス1 | リばざぎlむたぅ |
| ボックス2 | アけいあィ_lア |
| ボックス3 | lむねぅけいあぅ |
| ボックス4 | アだィいべ_lア |
| ボックス5 | だタgsオlみび |
※_はスペース、lは小文字のL、べは全て平仮名

b命令を使い、0x020380e2へとジャンプすることで自動で安全に命令を終了させられます。
また、r0に実行したいスクリプトアドレスを保持している状態で0x020380d0へとジャンプすることでそのスクリプトが実行されます。
一例としてボックス1を「_ぶqsゥgとく」にしてコードを実行後、ボックスを閉じることで御三家選択のスクリプトが開かれます。
最後にr4にbl命令で遷移したい関数のアドレスを保持した状態で、0x020380c8へとジャンプすることでその関数を実行し。そして0x0203817aへとジャンプします。これはボックス14の名前の6文字目なので、そこからb命令で好きなアドレスへと戻してあげましょう。
一つ注意点があり、ポケモンを掴んでいる状態で画面が遷移するような処理を行うと、そのポケモンが消えます。一応こうなった場合はセーブデータ全削除中に途中で電源を切ると、一つ前のセーブデータで復帰できるという裏技が有効かもしれません。(完全にデータが消えてしまった場合の保証はしません、ツチニンくんも逃がさず残しておいた方がいいかもしれない理由はこれ)
最後に
こんなことをやるくらいならエメラルドやFRLGでやった方がいいと思います。
一応エメラルドと違いRAM変動がないというのが強みなのですが、それでも情報の多さやチケットの有無で完全に負けています。好事家の方は真似してみてください。
明日の記事はきゆうりさんによる「岐阜前夜祭からくどオフ修学旅行」となります。岐阜が世界三大都市の一角であるというのを風の噂で聞いたのですが本当でしょうか。
XDのミュウ教えわざが解析されたらしい
こちらはPokémon Past Generation Advent Calendar 2023の354日目の記事となります。
XDのミュウのおしえわざを使ったところ、このように特徴的なわざの組み合わせが出てきました。

これについてツイートしたところ、海外乱数勢のJohn氏から今年の6月に質問とわざの関係性が解析されたということを教えていただきました。
内部に三つの数値が存在し、質問の答えによって数値の増減が変化するという仕組みらしいです。また五問目は影響なし。またこれは既に分かっていましたが、ここだけの限定わざが複数選ばれることもないようです。
上のパンチわざ四つという組み合わせの場合、Attack値が最も高くStrategy値とRisk値が同じ時に選ばれる可能性があると分かります。
これを踏まえねこだましが選ばれるパターンを見てみると、Attack値が最も低くStrategy値とRisk値が同じ時に選ばれるらしいです。完全ランダムでやっている人を調べると「時間がかかった」と多くの型がおっしゃっていましたが、確かにこれを完全ランダムで引くのは難しそうです。
ねこだましを引けたパターン
上記サイトを見ながら、このように回答したところねこだましを覚えさせることができました。
Q1.キミにとって ポケモンとは?
A1.お友だち
Q2.どんなミュウにしたい?
A1.やさしいミュウにしたい
Q3.キミはどんなトレーナーかな?
A3.負けるが勝ち
Q4.シャドーとスナッチ団 悪いのはどっちだと思う?
A4.スナッチ団

質問内容や解答後の数値の増減がランダムということでこの通りにはいかないでしょうが、参考にしていただければ幸いです。
XD乱数 つないでバトルn固定&不定消費の調査
こちらはPokémon Past Generation Advent Calendar 2023の353日目の記事となります。
XDのつないでバトル(ファイヤー×4)を使用したn固定と不定消費についてです、ポケモンによってフィールドが違っていてごめんなさい

ヨマワル
ラルガタワーコロシアム n=29

レポートを書く場所(ここは不定消費なし、エンカウントする上のフロアはあり)

エレベータに乗ってから右長押しでエンカウント、不定消費は40くらい
ガルーラ
バトル山コロシアム n=31

レポートを書く場所(不定消費あり)

最速でエンカウントすると不定消費は2900くらい、展開は広めなので起動前にSEED調整しましょう
ブーバー
ラルガタワーコロシアム n=33

レポートを書く場所(不定消費なし)

ずぶとい31-x-31-31-31-31は存在しません
ラッキー
バトル山コロシアム n=31

レポートを書く場所(不定消費なし)

画像の個体(ずぶとい 31-0-31-5-31-31)はストライク固定で出てきて、XD特性がてんのめぐみなので二回負ける必要あり
エレブー

レポートを書く場所(不定消費あり)

ボスなのでnは関係なし、不定消費は3285くらい、起動前にSEED調整しましょう
バリヤード

レポートを書く場所(不定消費あり)

ボスなのでnは関係なし、不定消費は1000くらい、こちらも起動前にSEED調整しましょう
色違いデオキシスゲット
した。

こちらはPokémon Past Generation Advent Calendar 2023の230日目の記事、
及びPokémon Past Generation Advent Calendar 2021の23日目の記事へのトリビュート記事となります。
mahodoriproject.hatenablog.com
半年ほど前にFRLGを買い漁った結果、合計15本目でオーロラチケットを所持していて尚且つデオキシスを捕獲していないROMを入手することができました。
現代基準で考えると相当幸運だったのは間違いないでしょう。
しかも近所のブックオフがその現場だったのもまた幸運。

このROMの持ち主がデオキシスを捕獲できなかった理由ですが、それは四天王に勝てなかったからでしょう。
その証拠にトライパスがレインボーパスに変わっていませんでした。

さて、それでは乱数調整の手順を紹介していきます。
裏ID特定
FRLGのIDはまず下の画面でAボタンを押したタイミングで表IDがTimerの数値によって決まり、

その後表IDを初期SEEDとして、下の面でAボタンを押したタイミングで通常の乱数から裏IDが決定されるという仕組みになっています。

元の持ち主がどんな操作をしたかは見当もつかないので、遭遇した色違いのポケモンの個体値からIDを割り出すことにしました。
幸いFRLGでは景品交換でケーシィを大量に受け取ることができるので、普通にエンカウントするよりも何倍もよい効率で色違い厳選をすることができます。

しかし、それすらも面倒になったので自動化に頼ることに。
奈都さんがちょうど良いタイミングで自動化のネタを募集していたのでケーシィの自動受け取り色厳選プログラムを提案し、その恩恵を受けることにしました。

このケーシィはメスで特性がせいしんりょく。
レベルを上げると、個体値が4-12-8-7-12-2であると判明。
しかし、3genSearchで調べるとその個体候補が二つ。どちらが正しいのか一瞬判断に困ります。

これに関しては先ほどの裏IDの決定方法が重要で、よほど変なことはしない限りは表ID決定から裏ID決定までに数分経過するということはありえないということが分かります。
なので表IDと候補個体の性格値をTIDFinderに入れ、より早い時間で出現しうる組み合わせが正しいと分かります。なのでこのROMのIDは00803-54227と断言することが出来ました。


実際の乱数調整
得られたIDからできるだけ高個体値で色違いになる個体を検索。
やんちゃを狙いたかったが、いい感じの個体が出現しないためうっかりやの個体で妥協。

ここから待機フレームを計算していきます。
まず3genSearchの初期seed検索タブを開き、先ほどの画面の「開始seed」を「目標seed」へとコピペ。
次にトノさんが公開されている初期seedリストをコピーし、「初期seed」欄へとペースト。

今回は0xDE02、640847Fを使うことにします。
64万Fも待つなんて非現実的じゃないかと思うかもしれませんが、FRLGには秘密兵器が存在します。
それがおしえテレビ。背景の砂嵐を生成するために1Fに312乱数を消費し、通常の消費と合わせて313/f消費を実現できます。

初期SEED合わせ・おしえテレビ使用・おしえテレビ終了・エンカウントと合計四回も1Fを合わせないといけませんが、結果的に時短になることは間違いありません。
ピーナツさんがこれ用のフレーム計算ツールを公開しているのでそちらも活用しましょう。
フレームが決定したら三角のアレのパズルを最期のところまで進めレポートして、乱数調整の作業を開始します。

そして何回も試行した結果色違いのデオキシスとエンカウント。

ゴージャスボールを使い切ってしまい一度リセットしたものの、二回目でなんとか捕獲することができました。
最期に
この記事の内容は今後YouTubeでも公開すると思いますが、眼鏡ポッポさんへのリスペクトとしてアドカレでも公開しようとROMを入手した頃から思っていました。
また、映画公開20周年というタイミングでこの記事を公開できたことも幸運だったと思います。来年までにミュウを引きたいですね。
デオキシスじゃないにしろこの記事はFRLGの乱数調整全般へと応用できると思うので皆さんぜひご活用ください。
調べたランダムイベントの処理まとめ(需要皆無)
こちらはPokémon Past Generation Advent Calendar 2023の103日目の記事となります。
この記事ではポケットモンスターというゲームにおけるランダムイベントの処理のうち自分が調べたものをまとめています、需要は知りません。(随時追記する予定です)
第三世代のまもる

ポケモンWikiに確率の記載があるがこれは厳密には違う。RSではこれで正しいが、FRLGとEmでは分子が1ずつ大きくなる。(比較処理が未満から以下になっているため)
ちなみに五回目以降の確率は「ゆびをふる」で出ない技リストなど関係のないテーブルを参照している。
FRLGいわくだき

ほてりのみちとしっぽうけいこくは25% それ以外は50%でエンカウント
乱数値 % 0xb40 < 16 * 確率 が真の時エンカウント
通常初期SEEDの二つ後の乱数の上位16bitがエンカウント用乱数の初期SEEDになる
起動後最初の場合は初期SEED*0x41c64e6d+0x3039の上位16bitが計算に使われる
Lv25マグカルゴをやるときの参考にどうぞ
DPtきのみじいさんがくれるきのみの種類

乱数値 % 26 + 1の番号のきのみをくれる
もりのようかんの少女

乱数値 % 101 < 25が真のときに発生、食堂の爺さんは調べていないけど同じだと思います。()
追記:爺さんは乱数値 % 101 < 10が真のときに発生するようです
%101<=10で間違いないみたいです
— ジラーテ (@namofure) 2024年11月6日
ちなみに部屋から出た後の床はエンカウント判定有りで軽減を考慮する必要があるので連続遭遇は面倒そう。(小部屋側のカーペットは出入口なので判定なし)

イッシュ6番道路の気温

気温範囲
春 11~19°C
夏 19~34°C
秋 11~19°C
冬 -1~-9°C
決定方法
気温範囲の左側を基礎気温とする、季節研究所に入る時に決定
気温 = 基礎気温 + (乱数値 * 気温幅) >> 32
気温幅は夏が16、それ以外が9
冬だけ基礎気温に足すのではなく引いた値になる
確率が確率なので乱数調整を使うまでもない
マナフィ色孵化乱数(蒼玉) in DPt

こちらはPokémon Past Generation Advent Calendar 2023の86日目の記事となります。
ポケモンレンジャーシリーズの特別ミッションをクリアした時に貰えるマナフィのタマゴ、通称蒼玉。

このタマゴには通常色違いブロックルーチンが掛かっています。
しかし、このルーチンが働くのはタマゴを受け取る時のみ。その為受け取ったROMとは別のROMで孵化をすれば色違いになる可能性があります。
乱数調整の難易度としてはそこまで高くないものの、間違えた状態で受け取って通信交換をすると取り返しがつかない事態になってしまいます。
そもそも第四世代の配達員乱数では基本的に唯一不定NPCの居ないHGSSハナダシティのフレンドリィショップが好まれるのですが、途中で交換を挟む必要がある以上失敗が許されないので更にその一面が強調されます。

なので基本的にタマゴをの受け取りをDPtですることは推奨されないのですが、DPtで受け取ることによるメリットが一つだけ存在します。
それは第五世代以降へと送った時の出身地方。HGSSで受け取るとジョウト地方、DPtで受け取るとシンオウ地方で出会ったことになります。孵したROMは関係ありません。
というわけでDPtで安全に受け取る方法を考えた結果思い付いたのが、受け取りに使われる消費を考慮しペラップの鳴き声を聞くというものです。

不定NPCによる消費が入って困るのは、消費を終えメニューを閉じてから配達員に話しかけるまでの一瞬の隙です。なので配達員との会話が終わった後またすぐメニューを開きペラップの鳴き声を聞くことにより、その隙に消費が入っていないかを調べられます。もちろん会話後からメニューを開くまでの間にNPC消費が入っていてタマゴには影響していない可能性もありますが、そこはまあ妥協しましょう。
やり方
まず個体検索や初期SEED検索は4genSearchで行う。性格決定処理にチェックを入れなければよい。(余談だが性格決定処理がないという共通点からマナフィの生成処理は「徘徊」と呼ばれることがある、厳密には間違い)


ID検索はGen4 ID Seed Searchを使いましょう。周辺IDの検索はDDDDLoopが一番良いと思います。

不定NPCが一人のショップの配達人の目の前でレポート。ゲーム起動後、そのNPCが動いたのを確認したらすぐメニューを開きます。(ちなみにNPCの動きを確認した直後にメニューを開けば猶予時間が得られるという考えはいーさんのアイデアです、ありがとうございます。)

ここでペラップの鳴き声を利用して初期SEEDを特定します。使用するのはChatotTool、事前消費上限はNPC消費の都合上4や6でいいでしょう。(もちろん徘徊がいる場合はそれも考慮する)

特定したら目標消費までひたすらペラップを「しばく👊」します。もちろん「声帯」にチェックボックスを入れることを忘れずに。目標消費に辿り着いたらメニューを閉じてすぐに配達員に話しかけます。

そして会話終了後またすぐにメニューを開きます。ここで「しばく👊」ボタンを追加で四回押します。これは個体生成時に乱数が四回(性格値下位、性格値上位、個体値HAB、個体値SCDの順)使われるからです。
再びペラップの鳴き声を聞くと共に「しばく👊」ボタンを押し、実機側の鳴き声とChatotTool側の鳴き声が何回か聞いて一致しているなら成功です。不安なら一度交換させずに孵化し、性格や個体値が合っていることを確認しましょう。

これでID調整したROMへ交換すれば色違いのマナフィが産まれます。タマゴを孵した画面では通常色の見た目になっていますが、これはこの時点では親IDの情報が受け取ったROMの情報になっているからです。

実際に手持ち画面を開けばしっかり色違いになっています。

というわけでDPt産色マナフィで差をつけたい、という方向けの記事でした。
海外版第三世代でめちゃくちゃなニックネームのポケモンを作ろう
こちらはPokémon Past Generation Advent Calendar 2023の76日目の記事となります。
サムネ用

やる気に満ち溢れた顔をしている(?)ナゾノクサ
めぽさんの以下の記事の発展形なので先にこちらの記事を是非ご覧ください。
mahodoriproject.hatenablog.com
mahodoriproject.hatenablog.com
三世代のNN変更におけるトレーナー名判定は、あくまでも文字コードが一致かを判定しているだけ。
というわけで言語IDが日本語のポケモンを海外版へと送り、6文字以上の名前を付けて第四世代以降へと送ると通常ではありえない個体を作れるわけです。
では逆に言語IDが日本語以外のポケモンを日本版へと送りニックネームを変更するとどうなるのでしょうか?
まずは第三世代における文字コードの使用を確認しましょう。種百科にちょうどいい記事があります。
8bitで一文字が管理されており、行が上位ニブル、列が下位ニブルです。そして文字入力画面で使用できる文字は白背景、そうでないものは灰背景になっています。

この文字の中には海外版限定の文字は含まれておりません。そちらはどのように表示しているのでしょうか。
海外版では日本語版とは別のフォントセットが用意されており、このような内容になっています。

トレーナー名やニックネームなど、日本語が必要な時だけは日本語版のフォントセットを参照するようになっているわけです。(日本語版には海外版のフォントを参照する機能はない、海外版限定文字は文字入力画面には存在しないため)
ではここで言語IDが日本語以外のポケモンを日本版へと送りニックネームを変更するとどうなるのかを考えていきます。
結論から言うと、同じ文字コードの海外版用フォントの文字が表示されます。例えば「あ」は文字コードが0x01なので、「À」へと変化します。これを使用すればめちゃくちゃなニックネームのポケモンを作り出すことが出来ます。

PKMNPOKéLv

(Ò¿Ó)
難点を挙げると、日本語版で見た場合や第四世代へと送ると日本語の名前へと戻ってしまうというものがあります。ちなみに一部の海外版NPC交換ポケモンは入力不可文字が使われているので、名前がおかしくなるというバグが存在します。
余談ですがエメラルドだと海外版のポケモンを日本語版でニックネーム変更することは出来たのですが、逆に日本語版のポケモンを海外版でニックネーム変更することはできませんでした。(FRLGは未確認、本題内の個体は全てRSのみを使用)
追記:FRLGでは可能であることを確認しました。ニックネームが六文字しか表示されませんが、内部的には七文字目以降も反映されており、第四世代以降へ連れていくと表示されるようになります。
というわけで皆さんもニックネームで大喜利をしてみましょう。