初代ポケモン ありす*さんによるバイナリエディタの入力方法の改良
背景
ゲームボーイのポケモン赤・緑では任意コード実行バグを使ってバイナリエディタを実行することができます。
これはボックスのポケモンのニックネームにバイナリエディタのプログラムを仕込んでおき、バグアイテムを使って現在の実行アドレスをボックスのポケモンのニックネームの位置に移すという方法で実現されています。
しかし、バイナリエディタのプログラムはプレイヤーが入力できない文字も含まれているため、別のコードを使ってそれを入力する必要があります。
それを行う一つの方法としてはありす*さんのポケモン印刷機 (文献 [1])を使う方法があります。 (他にもアイスさん考案の方法もあるようです; 文献 [2] )
この記事ではありす*さんの方法を改良します。
ありす*さんの方法
ありす*さんのポケモン印刷機の方法は所持アイテムの1番目〜6番目の個数を手持ち1匹目のニックネームにコピーするというものです。 しかし、これだと所持アイテムを毎回多くの数捨てる作業が必要になり、間違えやすく大変です。 そこで私はここを「所持アイテムの1番目〜6番目の個数を手持ち1匹目のニックネームに加算する」という方法に修正しました。
たとえば、ユンゲラーが手持ち1匹目にいる場合、アイテムの1番目〜4番目の個数をそれぞれ1個にして5〜6番目の個数を0にして実行すると文字のコードが1ずつ足されて「ヨッゴル゜」という名前に変わります。
この新しい方法によって所持アイテムを捨てる作業が軽減されます。
実践
これを使って以下の表の通りニックネームを付けて改良版ポケモン印刷機で修正してボックスに次々と入れていけばバイナリエディタが完成します。
表の見方ですが、上から順番にニックネームをつけていきます。 1匹目は3列目に注目して「ボーみへさ」です。 あとは、改良版ポケモン印刷機を一回実行してアイテム1番目〜7番目を全部0個にした後、1番目の個数が5個、2番目の個数が30個になるようにアイテムを捨てます。6番目は114個捨てます (マイナスはその個数捨てるという意味)。 これでもう一度改良版ポケモン印刷機を実行すれば、1匹目の名前が「あ"イ"みへさん」に変わります。 これを続きの行についても行っていき合計27匹処理すればおしまいです。
0000 21 ボ +5 0001 01 ー +30 0002 d0 み +0 0003 cd へ +0 0004 bb さ +0 0005 de 終端文字 -114 0006 e5 ー +2 0007 54 ぽ +12 0008 5d ぽ +21 0009 3e ぼ +0 0010 f8 ー +21 0011 83 終端文字 +51 0012 5f ぽ +23 0013 38 ど +4 0014 01 ー +30 0015 15 ド +2 0016 06 ギ +0 0017 12 終端文字 -62 0018 21 ボ +5 0019 ab ン +0 0020 c3 て +0 0021 3e ぼ +0 0022 7c ぽ +52 0023 22 終端文字 -46 0024 7a ぽ +50 0025 cd へ +0 0026 af ョ +0 0027 de ん +0 0028 7a ぽ +50 0029 cd 終端文字 +125 0030 b1 あ +0 0031 de ん +0 0032 7b ぽ +51 0033 cd へ +0 0034 af ョ +0 0035 de 終端文字 -114 0036 7b ぽ +51 0037 cd へ +0 0038 b1 あ +0 0039 de ん +0 0040 3e ぼ +0 0041 7f 終端文字 +47 0042 22 ボ +6 0043 1a ビ +0 0044 cd へ +0 0045 af ョ +0 0046 de ん +0 0047 1a 終端文字 -54 0048 cd へ +0 0049 b1 あ +0 0050 de ん +0 0051 36 ど +2 0052 7c ぽ +52 0053 3e 終端文字 -18 0054 0c ズ +0 0055 85 カ +0 0056 6f ぽ +39 0057 30 だ +0 0058 01 ー +30 0059 24 終端文字 -44 0060 1c ボ +0 0061 20 ボ +4 0062 01 ー +30 0063 14 ド +1 0064 05 ガ +0 0065 20 終端文字 -48 0066 d2 め +0 0067 21 ボ +5 0068 4b ぽ +3 0069 c4 と +0 0070 36 ど +2 0071 ed 終端文字 -99 0072 e1 ゅ +0 0073 18 ド +5 0074 b8 く +0 0075 cb ひ +0 0076 37 ど +3 0077 e6 終端文字 -106 0078 0f ダ +0 0079 c6 に +0 0080 f6 ー +19 0081 30 だ +0 0082 02 ー +31 0083 c6 終端文字 +118 0084 60 ぽ +24 0085 22 ボ +6 0086 c9 の +0 0087 cd へ +0 0088 67 ぽ +31 0089 38 終端文字 -24 0090 f0 ー +13 0091 b3 う +0 0092 cb ひ +0 0093 57 ぽ +15 0094 28 ぐ +0 0095 01 終端文字 -79 0096 e9 ー +6 0097 cb ひ +0 0098 5f ぽ +23 0099 28 ぐ +0 0100 02 ー +31 0101 c1 終端文字 +113 0102 c9 の +0 0103 cb ひ +0 0104 77 ぽ +47 0105 28 ぐ +0 0106 04 ー +33 0107 3e 終端文字 -18 0108 ff ー +28 0109 18 ド +5 0110 15 ド +2 0111 cb ひ +0 0112 7f (空白) +0 0113 28 終端文字 -40 0114 04 ー +33 0115 3e ぼ +0 0116 01 ー +30 0117 18 ド +5 0118 0d ゼ +0 0119 cb 終端文字 +123 0120 67 ぽ +31 0121 28 ぐ +0 0122 04 ー +33 0123 3e ぼ +0 0124 10 ヂ +0 0125 18 終端文字 -56 0126 05 ガ +0 0127 cb ひ +0 0128 6f ぽ +39 0129 c8 ね +0 0130 3e ぼ +0 0131 f0 終端文字 -96 0132 cb ひ +0 0133 43 ぼ +5 0134 28 ぐ +0 0135 03 ー +32 0136 86 キ +0 0137 77 終端文字 +39 0138 c9 の +0 0139 cb ひ +0 0140 4b ぽ +3 0141 28 ぐ +0 0142 03 ー +32 0143 84 終端文字 +52 0144 67 ぽ +31 0145 c9 の +0 0146 cb ひ +0 0147 7f (空白) +0 0148 28 ぐ +0 0149 05 終端文字 -75 0150 85 カ +0 0151 6f ぽ +39 0152 d8 り +0 0153 25 ボ +9 0154 c9 の +0 0155 85 終端文字 +53 0156 6f ぽ +39 0157 d0 み +0 0158 24 ボ +8 0159 c9 の +0
締め
ではハッピーハッキング!
参考文献
[1] ありす*, 【初代ポケモン】バイナリエディタで Do-Dai 【任意コード実行】 - Wonderland Seeker
[2] ア▶イス, 【初代ポケモン】初心者必見!バイナリエディタ作成チャート バグ・任意コード実行 - YouTube
[3] Cyana, ポケモン赤緑でプログラミング!!|ぽけもんとか。
[4] おふがお, VC版ポケットモンスター緑 5かいバグでバイナリエディタを作ってみた - ニコニコ動画
[5] thfan, バイナリエディタを真似して作ってみた - thfanのブログですね分かりますん
先人の皆様ありがとうございます。