※2023年2月9日に、flag3さんが通信交換無しでバイナリエディタを導入する方法を公開しました。今から任意コード実行環境を構築する場合は、1台で済むリンク先の方法がよいと思われます。
バイナリエディタ導入 毒サファリ・いあいぎりルート ピカチュウ版 - flag3833753
はじめに
ピカチュウ版で、冒険の途中から任意コード実行環境を構築する
上記の記事では、わざマシン05の不正な追加効果を利用して任意コード実行環境を構築する方法を説明しています。この方法はWRAMのミラー領域を使用しているため、ミラー領域が機能していない環境では、この手順を行うことはできないという問題があります。この記事では、ミラー領域を使用しないで任意コード実行環境を構築する方法を説明します。
構築手順
条件
- ななしのどうくつに行けること
- 赤緑青と通信交換できること
- 使っていないボックスが1つ以上あること
赤緑青で用意するもの
- 以下の条件を満たすポケモン(A)
※技やステータスの調整は、セレクトバグ・任意コード実行・バイナリエディタなどで行う。
ピカチュウ版で用意するもの
手順
- 通信交換で(A)をピカチュウ版に送る。
※送ったあとに(A)をポケモンボックスや育てやに預けてはいけない。引き出すときにステータスの再計算が行われ、調整したステータスが消えてしまう。 - 道具をすべてパソコンに預ける。
※預けていない道具は手順終了時点で消えるので注意。 - ポケモンボックスのニックネームを以下のようにする。
- v1.0用 ※[1]のニックネームをこの手順用に修正したもの
01:ョョョョョ 02:がめぜルべ 03:づョづぶづ 04:ぶづよマづ 05:にマづぜべ 06:ョオづにカ 07:づよナづぼ 08:づにレづざ 09:よバづにヨ 10:づよそづぼ 11:づにッづの
- v1.1~v1.3用 ※[2]のニックネームをこの手順用に修正したもの
01:ョョョョョ 02:べがめぜュ 03:づぶづぶづ 04:ぶづよマづ 05:にせづにさ 06:づよさづそ 07:にョづよバ 08:づよノづづ 09:にねづよー 10:づの
- v1.0用 ※[1]のニックネームをこの手順用に修正したもの
- 手持ちポケモンを以下の順に並べる。
- ななしのどうくつに行き、レベル60か65のメタモンとエンカウントする。
※条件を満たすメタモンの、フロアごとの出現率は以下のとおり[1]。
- 1階: 1%
- 2階: 10%
- 地下1階: 15%
- (A)に交代する。交代後はメタモンが(A)に変身する。
- (D)に交代する。
- メタモンが使用するわざマシン42が命中し一撃で倒されなかった場合、手持ちの道具が以下のように変化する(v1.0の場合は手持ち1・2匹目の親名も変化する)。命中しなかった場合は、補助技を使ってターンを稼ぐ。
任意コード実行方法
上記の手順で任意コード実行環境を構築したあとの任意コード実行方法については、前回の記事を参照してください。
解説
この構築手順は、バグ技「わざマシン42」の不正な追加効果を利用してポケモンボックスのニックネームに書いたプログラムを実行し、任意コード実行環境を構築しています。
ピカチュウ版におけるわざマシン42の技データを表1に示します(v1.0~v1.3共通)。
アニメーション | 78h (じばくと同じ) |
---|---|
追加効果 | 71h (不正値) |
威力 | 102 |
タイプ | C6h (特殊技、タイプ名参照先はFE13h) |
命中率 | 118/256 (約46.1%) |
PP | 43 |
わざマシン42のタイプ名は不正であり、不用意にメモリを書き換える可能性があります。そのため、構築手順ではタイプ名を表示させないようにしています。
ピカチュウ版で追加効果71hが発生した場合は、アドレスCD1Fhにジャンプします(v1.0~v1.3共通)。ここから、アドレスCD27h~CD29hに書いたジャンプ命令でボックス1番目のニックネーム1文字目のアドレスDE64hにジャンプし、ボックスのニックネームに書いた任意コード実行環境を構築するプログラムを実行しています。
アドレスCD1Fh~アドレスCD29hが何に使用されているかを表2に示します。
アドレス(16進数) | 内容 |
---|---|
CD1F | 自分のポケモンの回避率補正(1~13、初期値7) |
CD20 | 未使用(一度でも戦闘すると7になる) |
CD21 | 未使用(一度でも戦闘すると7になる) |
CD22 | 未使用(常に0) |
CD23 | 相手のポケモンのレベル |
CD24 | 相手のポケモンの最大HP上桁 |
CD25 | 相手のポケモンの最大HP下桁 |
CD26 | 相手のポケモンの補正前のこうげき実数値上桁 |
CD27 | 相手のポケモンの補正前のこうげき実数値下桁 |
CD28 | 相手のポケモンの補正前のぼうぎょ実数値上桁 |
CD29 | 相手のポケモンの補正前のぼうぎょ実数値下桁 |
表2に示したアドレスのうち、相手のポケモンが変身した場合は、アドレスCD26h~CD29hの値がこちらのポケモンの値となります。
メタモンとエンカウントする場所とレベルについて
ピカチュウ版では、メタモンはななしのどうくつ以外に、ポケモンやしきの地下1階にも出現します。構築手順でエンカウントする場所やレベルを指定している理由は、メタモンの個体によってはアドレスCD27h~CD29hに書いたジャンプ命令が実行できなかったり、ジャンプする前にスタックポインタやメモリを書き換えたりするためです。
それぞれの場所で出現するメタモンのレベルは、表3のとおりです。
場所 | レベル |
---|---|
ポケモンやしき 地下1階 | 12・18・24 |
ななしのどうくつ 1階 | 55・60 |
ななしのどうくつ 2階 | 60 |
ななしのどうくつ 地下1階 | 60・65 |
アドレスCD27h~CD29hに書いたジャンプ命令を実行するためには、アドレスCD1Fh~CD26hの間で停止しない・メモリを書き換えない・スタックポインタを書き換えない・ジャンプしない必要があります。このうちアドレスCD1Fh~CD22h・CD24h・CD26hに書かれた命令はこの条件を満たしているので、残りのCD23h・CD25h、すなわちメタモンのレベルと最大HPが問題となります。
表4はピカチュウ版での野生のメタモンのレベルごとの最大HPの値を示したものです。表4の太字で示しているレベルと最大HPは、それらの値を命令として解釈したときに条件を満たさない命令となります。出現する個体によらず安全に実行できるのはレベル60と65のときで、これらのレベルが出現するのはななしのどうくつのみとなります。
レベル | 最大HPの取りうる値 |
---|---|
12 | 33~37 (34) |
18 | 45~50 (48、49、50) |
24 | 57~64 (59) |
55 | 117~118・120~129・131~134 (117~118) |
60 | 127~128・130~134・136~140・142~145 |
65 |
137~138・140~143・145~147・149~151・153~156 |
参考文献
[1] ゲームの匠、メタモン|ポケモン赤緑青ピカチュウ攻略|ゲームの匠、https://pokemon.g-takumi.com/pokemon/132/、2023年1月29日閲覧。
[2] 昔のポケモンの裏技を語る【アネ゛デパミ゛】 14 [無断転載禁止]©2ch.net、https://medaka.5ch.net/test/read.cgi/poke/1477904768/87、2023年1月11日閲覧。
[3] 昔のポケモンの裏技を語る【アネ゛デパミ゛】 13、https://tamae.5ch.net/test/read.cgi/poke/1389422437/630、2023年1月11日閲覧。
更新履歴
2023年2月3日 公開
2023年2月9日 冒頭に通信交換無しでバイナリエディタを導入するflag3さんの記事へのリンクを追加