なるほどえたきちのブログじゃねーの

チラ裏雑記帳

ポケモン過去作の解析とか乱数調整とかそこら辺。不定期更新。

【Em】バイナリエディタの導入

数ヶ月前に書いたこの記事の情報が色々と古くなってきたので新しく纏め直しました。
bzl.hatenablog.com

この記事では0x085F入手後~バイナリエディタ起動までの流れについて解説します。

この記事で紹介しているコードは0x2B5Cによる呼び出しを推奨していません。
使用しているRAM改竄方式にもよりますが、技アニメスクリプト用のコードを挟ませていないので状況次第でクラッシュに繋がります。
0x085Fをまだ持っていない場合はこの記事の手順を踏んで生成させてください。
bzl.hatenablog.com

以下実行手順の説明です。
この記事で使用されている『へ』『べ』『ぺ』は全て平仮名になります。

1)RAMコピー用のダメタマゴ生成


ボックスRAMへ効率良くデータをコピーする為に、メモリコピー処理を埋め込んだダメタマゴをボックス1/15に生成します。
以下の通りにボックス名を編集した後、0x085Fのステータスを開いて処理を実行してください。

ボックス ボックス名
ボックス1 『ォめンばつい『は』
ボックス2 『アこぅほょ l』
ボックス3 『せもっめコづグね』
ボックス4 『アCTなGけl』
ボックス5 『ロば むいぽゆリ』
ボックス6 『アアアzをけd』
ボックス7 『CTぃGCTるG』
ボックス8 『アへTなGねl』
ボックス9 『9をうW l99』
ボックス10 『アアアキっうぅ』
ボックス11 『アアオエあぅ』
ボックス12 『アっるあV』
ボックス13 『あゃポば l99』
ボックス14 『アアアミBィC』

正しく処理が実行できていれば、以下のようにダメタマゴが配置されます。
このダメタマゴは動かさないでください。
f:id:BZL:20190929152204p:plain


2)バイナリエディタ実体コピー


バイナリエディタのプログラムデータをボックス1/2~1/13にコピーします。

まず先程生成したダメタマゴを参照するための処理を入力します。
以下の通りにボックス名を編集してください。

ボックス ボックス名
ボックス1 『ォらぜいっむきぼ』
ボックス2 『アぼづワば l』
ボックス3 『oひせみぶづボね』
ボックス4 『アひねねゃポば』

この処理で先程のダメタマゴを呼び出すことでボックスRAM上に0x50byteのデータをコピーできます。
データのコピー先はボックス5の最初の4文字で決定され、『    』(0x00000000)の場合はボックス1/2、『ふ   』(0x0000001C)の場合はボックス1/30といったようにポケモンの位置に対応したコピー先を指定できます。
ボックスのポケモン1匹分のデータサイズは0x50byteで、バイナリエディタは0x3C0byte(ポケモン12匹分)のデータで構成されているので合計12回のコード実行でコピーが完了します。
以上の通り、ボックス5-ボックス13のボックス名は任意コードの呼び出し毎に変更してください。

1回目

ボックス ボックス名
ボックス5 『    ィ♂ミ」』
ボックス6 『fぶYぴァばおが』
ボックス7 『Dばルl9おふV』
ボックス8 『ぴァばおがDばム』
ボックス9 『l みUぴ9ァば』
ボックス10 『おがDばノl9く』
ボックス11 『むUぶPぴァば9』
ボックス12 『けがDばセlOべ』
ボックス13 『9すメSぶ』


2回目

ボックス ボックス名
ボックス5 『あ   くタ リ』
ボックス6 『くム みべムミB』
ボックス7 『ィCPぶ9たむけ』
ボックス8 『いぞね めMべあ』
ボックス9 『ィあぅあも9あも』
ボックス10 『あもあもあも9あ』
ボックス11 『もあもあもいぃ9』
ボックス12 『あィあぇせれxW』
ボックス13 『9あぅあィ』


3回目

ボックス ボックス名
ボックス5 『い   あぅAぶ』
ボックス6 『ぞもためついィね』
ボックス7 『あィGイ9いぅふ』
ボックス8 『ぃあィGイあぅ♀』
ボックス9 『ぶためつい9ィね』
ボックス10 『あィあぅ め9あ』
ボックス11 『もあもあもあも9』
ボックス12 『あもあもあもあも』
ボックス13 『9あもあも』


4回目

ボックス ボックス名
ボックス5 『う   いぃあィ』
ボックス6 『あぇせれxWあぅ』
ボックス7 『あィミび96ばF』
ボックス8 『ばィ♂ミ」ャ…ビ』
ボックス9 『ぷりレちむ9ッぴ』
ボックス10 『ァばけがDば9ヲ』
ボックス11 『l やんふりリ9』
ボックス12 『あけけるいeたぅ』
ボックス13 『90ぅぅヤ』


5回目

ボックス ボックス名
ボックス5 『え   そむあぞ』
ボックス6 『ける eたぅ0ぅ』
ボックス7 『ムヤあゅ9いょあ』
ボックス8 『ゃおわおVえわp』
ボックス9 『Wあょns9ィぷ』
ボックス10 『んふぇふたゲ9W』
ボックス11 『ゲVェちェっゲ9』
ボックス12 『ダゲゾェアェ み』
ボックス13 『9ぃツミツ』


6回目

ボックス ボックス名
ボックス5 『お   …ツミル』
ボックス6 『えりきVぞ たぃ』
ボックス7 『ぅコたぃ9ぅイき』
ボックス8 『lミンるむミエ…』
ボックス9 『ンれむミエ9ァみ』
ボックス10 『ィぃぃラ…ュ9た』
ボックス11 『ょいバ みあゾ9』
ボックス12 『ノぶ ゾりレ む』
ボックス13 『9 め も』


7回目

ボックス ボックス名
ボックス5 『か   ミぴィゃ』
ボックス6 『ァばおがDばはl』
ボックス7 『たょいバ9 みあ』
ボックス8 『ゾタぶ ゾりレ 』
ボックス9 『む め も9ニぴ』
ボックス10 『ィゃァばけが9D』
ボックス11 『ばえlえ…ミB9』
ボックス12 『ィC6ばィ♂ミ」』
ボックス13 『9きふリば』


8回目

ボックス ボックス名
ボックス5 『き   おぃョば』
ボックス6 『てsぷぷサぺょギ』
ボックス7 『たみぃぞ9おVネ』
ボックス8 『ルえりヤVあぃネ』
ボックス9 『ムヒlみみ9ぃぞ』
ボックス10 『けVネル り9ヌ』
ボックス11 『Vあぎネムセl9』
ボックス12 『ぞみぃぞつVネル』
ボックス13 『9えりいV』


9回目

ボックス ボックス名
ボックス5 『く   Fづうむ』
ボックス6 『くぞるシあぅるエ』
ボックス7 『えりぴV9りネ 』
ボックス8 『リりムばlィみぃ』
ボックス9 『ぞそVネル9えり』
ボックス10 『えVFづうむ9く』
ボックス11 『ぞるシあぐ ぐ9』
ボックス12 『osネルえりとW』
ボックス13 『9たみ あ』


10回目

ボックス ボックス名
ボックス5 『け   ぃぞうV』
ボックス6 『るルたぅるムよl』
ボックス7 『みみ あ9ぃぞえ』
ボックス8 『Vえみるルたぐる』
ボックス9 『ムひlあみ9ぃぞ』
ボックス10 『おVりネるル9あ』
ボックス11 『ミたlいみぃぞ9』
ボックス12 『ちVぎふよぴァば』
ボックス13 『9けがDば』


11回目

ボックス ボックス名
ボックス5 『こ   ァsやぶ』
ボックス6 『 むあミおlァば』
ボックス7 『けがDば9trミ』
ボックス8 『BィCFば けけ』
ボックス9 『せいそゼ 9 い』
ボックス10 『う  えお 9っ』
ボックス11 『ぇ くシょ く9』
ボックス12 『ぶめ くリギこく』
ボックス13 『9 bうい』


12回目

ボックス ボックス名
ボックス5 『さ   シYうい』
ボックス6 『どXういネYうい』
ボックス7 『フYうい9   』
ボックス8 『いたv かとn 』
ボックス9 『 っv か9Vv』
ボックス10 『 かねご く9ワ』
ボックス11 『ボのくゾも う9』
ボックス12 『トグこくわそ う』
ボックス13 『9アアアア』

以上のコード実行を終えるとボックス1が以下のような状態になります。
コピー先のミスはタマゴの位置で判別可能ですが、細かいデータ内容のミスまでは判別できません。
(チェック用のコードを書くことも可能ですが、できればミスのないよう慎重に打ち込んでもらうのが望ましいです)
f:id:BZL:20190929155156p:plain



3)バイナリエディタの起動


バイナリエディタを起動する為のコードです。

以下の通りにボックス名を編集した後、0x085Fのステータスを開いて処理を実行してください。

ボックス ボックス名
ボックス1 『ォめリばついィは』
ボックス2 『アこぃおべ l』
ボックス3 『しふみぅリめヂ 』
ボックス4 『アさkいべおl』
ボックス5 『 Vういりぃ も』
ボックス6 『アみふいふ l』
ボックス7 『むぇえぱせFいぶ』
ボックス8 『ア むあタおl』
ボックス9 『ぎせ うらい  』
ボックス10 『アGタあむ l』
ボックス11 『あメあぅだメえチ』
ボックス12 『アミBィC』

バイナリエディタの打ち込み、起動コードの打ち込みにミスが無ければバイナリエディタが実行されます。
操作に関しての簡潔な纏めは以下の通り

  • 十字キーでフォーカスの移動、0x01単位での値操作
  • Aボタンで値の書き込み
  • LRボタンで0x10単位での値操作
  • Bボタンでバイナリエディタ処理終了、主人公のロック解除

f:id:BZL:20190929150026p:plain

バイナリエディタ導入後、セーブハックを行うと更に自由度が高まります。
bzl.hatenablog.com
操作ミスでセーブデータが破損する可能性があるので実践する方はセーブデータのコピーを推奨します。
(一見するとセーブデータコピーの方が危険そうですが割と安全です)
bzl.hatenablog.com


おまけ


スクリプト実行

0x03000E40 <- 0x01
0x03000E41 <- 0x02
0x03000E44 <- 0x00000000(word)
0x03000E48 <- イベントスクリプトのアドレス(word)
0x03000E38 <- 0x00 ※このアドレスの上書きは必ず最後に行う

任意ポケモンエンカウントスクリプト

個体値等はランダムです
乱数調整したいならMethod1で計算するといいかもしれないです

B6 PP PP LV IT IT B7 02

PP PP = ポケモンコード
LV = レベル(100 = 0x64)
IT IT = アイテムコード
任意マップワープスクリプト
39 MP MP 00 00 00 00 00 02

MP MP = マップID
1A 38 = さいはてのことう
1A 09 = みなみのことう
1A 3A = たんじょうのしま
1A 42 = へそのいわ
18 67 = うみのどうくつ
18 69 = りくのどうくつ
フラグ書き換えスクリプト
フラグをONにする
29 FL FL 02

フラグをOFFにする
2A FL FL 02

FL FL = フラグID

91 00 = ルギア捕獲済み
92 00 = ホウオウ捕獲済み
AD 01 = デオキシス捕獲済み
BB 01 = レジロック捕獲済み
BC 01 = レジアイス捕獲済み
BD 01 = レジスチル捕獲済み
BE 01 = カイオーガ捕獲済み
BF 01 = グラードン捕獲済み
C0 01 = レックウザ捕獲済み
C9 01 = 孤島ラティ捕獲済み
CA 01 = ミュウ捕獲済み
C0 01 = レックウザ捕獲済み
50 0D = むげんのチケット配達員出現