バイナリエディタをなるべく早く作るための先行研究
バイナリエディタをなるべく早く作ること自体は多くの人がやっています.
アイスさんの動画やてらろーしゃさんの動画が有名なのかと思います.
- 【初代ポケモン】初心者必見!バイナリエディタ作成チャート バグ・任意コード実行 - YouTube
- 【初代ポケモン】最強のバグ、バイナリエディタはどれだけ早く導入できるのか 導入方法解説 - YouTube
どちらの方法もおもしろい方法でバイナリエディタが作られています.
しかしどちらの方法もミスをした際のリカバリが難しいのではないかと考えました.
簡易版バイナリエディタ
そこでリカバリが簡単になるように,そしてお二方の動画よりもさらに早くバイナリエディタを導入することができるようにするため,僕とでぃぐさんで簡易版バイナリエディタを作りました.
(でぃぐさんはミニバイナリエディタと呼んでいます)
初代ポケモンでバイナリエディタのコードを入力するためのミニバイナリエディタを作りました!入力可能な文字だけで作られています! (協力: @flag3833753)https://t.co/bGbp6VfoXy pic.twitter.com/v6bsxx5mhV
— でぃぐ(ゲーム用垢) (@fujidig_game) 2022年1月9日
またでぃぐさんに記事で紹介していただきました.
以下に載せるニックネームは ver.220121 よりもさらに短縮したもので 23 匹のニックネームを用いて簡易版バイナリエディタを実行するものとなります.
簡易版バイナリエディタ導入の方法
環境:ポケモン赤緑の後期版のみ動作を確認しています.
赤緑の初期版と青版については後述します.
準備するもの
- なかよしバッヂ
あると望ましいもの
- 未使用のボックス
なかよしバッヂの入手方法は調べてください.
もし「さいしょからはじめる」でプレイするならありす*さんのチャートがオススメです.
【初代ポケモン】なかよしバッヂ導入チャート【任意コード実行】 - Wonderland Seeker
以下の手順を踏むと簡易版バイナリエディタが起動します.
- サファリボールの残り個数を 0 個にする.「さいしょからはじめる」の場合はサファリゾーンによらなければ大丈夫です.
- 育て屋にニックネーム「うるてぽん」のついたポケモンを預ける.このポケモンは預けっぱなしにしてください.
- 以下のニックネームをつけたポケモンを未使用のボックスに預ける.(ありす*さんのチャートで進めているのであれば「5.イーブイをプログラムにしよう」でニックネームをつけていくのが良いです)
- なかよしバッヂを使用する.
もし簡易版バイナリエディタが起動しない場合はニックネームを見直してみる.
もしくはボックスを未使用のものに切り換えましょう.
(または後で紹介する方法に進んでください)
ぶづぜンづ
よヅぜウづ
にぽづにぞ
づなゅへへ
ううグ空だ
どグだギョ
べへにんグ
だゲぼダぞ
空へにんグ
わとんヅー
グリググだ
ざグわねん
ぱへふんぴ
へふんボぷ
へふんだし
ぼヂキづご
ョのなひだ
へよんち空
ぼダメにぽ
にュだガに
にヂ空ギて
ボデの
注意
初期アドレスは D9B3 となっています.
これは育て屋に預けるポケモン「うるてぽん」の最初の 2 文字が初期アドレスとなっているためです.
この最初の 2 文字を変えることで初期アドレスを変更することができます.
簡易版バイナリエディタの操作方法
以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了
バイナリエディタを起動するまで
ぽけもんとか。さんのコードを使ってバイナリエディタを起動させましょう.
https://pkmn.tk/z80/files/binary.txt
簡易版バイナリエディタを使って D9B3 から DA52 のアドレスの中身をリンク先のものに書き換えます.
書き換えたら簡易版バイナリエディタを終了してセーブすることをオススメします.
そしてその後 D984 から D987 のアドレスの中身を
00 C3 B3 D9
に書き換えます.
書き換えたら終了してもう一度なかよしバッヂを起動するとバイナリエディタが起動します.
起動しなかった場合はリセットしてバイナリエディタのコードを確認しましょう.
未使用のボックスがない場合
ニックネーム「うるてぽん」の変わりに「うるてEん」を使ってください.
ニックネーム「うるてEん」は以下の手順で作れます.
- サファリボールの残り個数を 0 or 30 個にする.
- 育て屋にニックネーム「てウん」のついたポケモンを預ける.サファリボールの個数が 0 の場合は預けたポケモンを引き取ってください.
- 以下のニックネームをつけたポケモンをボックスの 6 匹目から順番に配置する.
- ニックネーム「うるてぽん」のポケモンを手持ちの 6 匹目に配置する.
- なかよしバッヂを使用する.
ギめなぼづ
ゅにづづの
注意 (2022/08/07 追記)
D9B3 から DA52 のアドレスを用いてバイナリエディタを作成しているので,
この部分をバイナリエディタでいじると壊れるので注意してください.
特に DA00 から始まるプログラムを公開している方が一定数 (?) いらっしゃるので
これらのプログラムを動かしたいのであれば DA53 からでも実行できるように調整するというのが一つあります.
もう一つの方法として詳細は省くのですが完成したバイナリエディタを使ってもう一度 DE64 からバイナリエディタを作るという方法があります.
余談
オーキドせんせい研究者さんが 12:45 でバイナリエディタを起動するという RTA を走っていました.
今回紹介した 23 匹のニックネームは
に手を加えたものですが,一部オーキドせんせい研究者さんのプログラムを拝借させていただきました.
赤緑版初期版と青版について (2022/08/07 追記)
上から 4, 5 匹目づなゅへへ
づなゅへへ
空なゅへタ
なお執筆者はどちらも持っていなく実際にできるか確認していないので自己責任でお願いします.何か問題がありましたらお知らせいただけますと幸いです.
またバイナリエディタ作成の際は
WRA1:DA0A CD 67 38 call 3867
の部分を赤緑初期版では
WRA1:DA0A CD 79 38 call 3879
としてください.青版では
WRA1:DA0A CD 8F 38 call 388F
としてください.
バイナリエディタ導入チャート (2022/12/10 追記)
オーキドせんせい研究者さんがバイナリエディタを 20 分で作成するチャートを解説していました.
自分の記事を参考にされたようで紹介していただきありがとうございます.
【初代ポケモン】お手軽20分。バイナリエディタ作成チャート解説【バグ技 任意コード実行】 - YouTube
まだ見たことない方は是非 1 度見ておくことをおすすめします.
この動画の簡易版バイナリエディタでは DCE0 にジャンプする機能をつけていました.
自分もその機能をつけて作ってみたので以下の URL の miniatur_memory_editor_RGB(JP).asm を参考に試してみてください.
ボックスに預けるポケモン 21 匹 (上のものより 2 匹少ない!) で作ることができます.
オーキドせんせい研究者さんの動画のものとは操作方法が異なるので好みが分かれるかもしれません.
またバイナリエディタを 171 byte から短縮したので以下の URL の memory_editor.asm に置いておきます.
memory_editor.asm · GitHub
バイナリエディタ導入の動画 (2024/03/06 追記)
バイナリエディタを導入するだけの動画を作成しました.
以下の動画が 2024/03/06 現在における最新の導入方法かと思います.
上記ではパソコンに預けているポケモンの領域を使ってバイナリエディタを作成しているのですがこの方法では未使用領域を使ったバイナリエディタとなります.
www.youtube.com
コード
WRA1:DE64 26 DE ld h,DE WRA1:DE66 2E 87 ld l,87 WRA1:DE68 AF xor a WRA1:DE69 50 ld d,b WRA1:DE6A 3C inc a WRA1:DE6B 32 ldd (hl),a WRA1:DE6C 2E AB ld l,AB WRA1:DE6E 32 ldd (hl),a WRA1:DE6F 50 ld d,b WRA1:DE70 D6 11 sub a,11 WRA1:DE72 2E 82 ld l,82 WRA1:DE74 32 ldd (hl),a WRA1:DE75 50 ld d,b WRA1:DE76 C6 48 add a,48 WRA1:DE78 32 ldd (hl),a WRA1:DE79 C6 2F add a,2F WRA1:DE7B 50 ld d,b WRA1:DE7C 32 ldd (hl),a WRA1:DE7D C5 push bc WRA1:DE7E E1 pop hl WRA1:DE7F CD (67) (38) call 3867 WRA1:DE82 (F0) B3 ld a,(ff00+B3) WRA1:DE84 07 rlca WRA1:DE85 7F ld a,a WRA1:DE86 30 (01) jr nc,DE89 WRA1:DE88 34 inc (hl) WRA1:DE89 07 rlca WRA1:DE8A 30 06 jr nc,DE92 WRA1:DE8C AF xor a WRA1:DE8D 50 ld d,b WRA1:DE8E 3D dec a WRA1:DE8F CD C6 DE call DEC6 WRA1:DE92 07 rlca WRA1:DE93 50 ld d,b WRA1:DE94 30 08 jr nc,DE9E WRA1:DE96 3E 0F ld a,0F WRA1:DE98 2F cpl WRA1:DE99 50 ld d,b WRA1:DE9A 7F ld a,a WRA1:DE9B CD C6 DE call DEC6 WRA1:DE9E 07 rlca WRA1:DE9F 50 ld d,b WRA1:DEA0 DC C4 DE call c,DEC4 WRA1:DEA3 11 E3 50 ld de,50E3 WRA1:DEA6 07 rlca WRA1:DEA7 D8 ret c WRA1:DEA8 07 rlca WRA1:DEA9 07 rlca WRA1:DEAA 30 (01) jr nc,DEAD WRA1:DEAC 2B dec hl WRA1:DEAD 07 rlca WRA1:DEAE DC C8 DE call c,DEC8 WRA1:DEB1 50 ld d,b WRA1:DEB2 44 ld b,h WRA1:DEB3 CD CC DE call DECC WRA1:DEB6 45 ld b,l WRA1:DEB7 50 ld d,b WRA1:DEB8 CD CC DE call DECC WRA1:DEBB 1C inc e WRA1:DEBC 46 ld b,(hl) WRA1:DEBD 50 ld d,b WRA1:DEBE CD CC DE call DECC WRA1:DEC1 30 BC jr nc,DE7F WRA1:DEC3 50 ld d,b WRA1:DEC4 3E 10 ld a,10 WRA1:DEC6 86 add (hl) WRA1:DEC7 32 ldd (hl),a WRA1:DEC8 2A ldi a,(hl) WRA1:DEC9 50 ld d,b WRA1:DECA AF xor a WRA1:DECB C9 ret WRA1:DECC C5 push bc WRA1:DECD CB 30 swap b WRA1:DECF 50 ld d,b WRA1:DED0 CD D6 DE call DED6 WRA1:DED3 C1 pop bc WRA1:DED4 7F ld a,a WRA1:DED5 50 ld d,b WRA1:DED6 3E 0F ld a,0F WRA1:DED8 A0 and b WRA1:DED9 C6 48 add a,48 WRA1:DEDB 50 ld d,b WRA1:DEDC C6 AE add a,AE WRA1:DEDE 30 05 jr nc,DEE5 WRA1:DEE0 C6 50 add a,50 WRA1:DEE2 C6 10 add a,10 WRA1:DEE4 7F ld a,a WRA1:DEE5 06 C3 ld b,C3 WRA1:DEE7 50 ld d,b WRA1:DEE8 1C inc e WRA1:DEE9 12 ld (de),a WRA1:DEEA C9 ret WRA1:DEEB 50 ld d,b
バイナリ
26 DE 2E 87 AF 50 3C 32 2E AB 32 50 D6 11 2E 82 32 50 C6 48 32 C6 2F 50 32 C5 E1 CD CD 50 B3 B3 07 7F 30 50 34 07 30 06 AF 50 3D CD C6 DE 07 50 30 08 3E 0F 2F 50 7F CD C6 DE 07 50 DC C4 DE 11 E3 50 07 D8 07 07 30 50 2B 07 DC C8 DE 50 44 CD CC DE 45 50 CD CC DE 1C 46 50 CD CC DE 30 BC 50 3E 10 86 32 2A 50 AF C9 C5 CB 30 50 CD D6 DE C1 7F 50 3E 0F A0 C6 48 50 C6 AE 30 05 C6 50 C6 10 7F 06 C3 50 1C 12 C9 50