技のアニメーションをみることで任意のコードを発動させています。
任意コード実行(ACE :Arbitrary code execution)とは簡単にいうとゲーム内のデータからスクリプトを作り起こしていることで、この現象自体は決してチートや改造ではありません。
今回の例は
あなぬけのヒモの脱出先の2byteを書き換えるコードを作りました。
技0x642Dのアニメーションは
0x0E005555になっています。
このアドレスはセーブデータのボックス内のアイテムの48個目からのコードとなっています。
0x0E005555 :03 35 55 00 0E FF 00 08
になるようにボックスに道具を預けます。
c03のスクリプト
03 XX XX XX XX YY ZZ 08
XX :飛ぶアドレス
YY :Z軸の操作?
ZZ :モーションの個数
08 :アニメーションを終了させる
飛ぶアドレスはボックス内でなくとも好きなアドレスを指定できます。
今回は同様にボックス内アイテムと同じ箇所(0x0E005535)に設定しました。
0x0E005534 :3A 20 00 02 1A 30 01 49 08 60 F0 BD C8 56 06 02
になるようにボックスに預けます。
203A mov r0, #0x3A
0200 lsl r0, r0, #0x08
301A add r0, #0x1A
4901 ldr r1, [$0E005540] (=$020656C8)
6008 str r0, [r1, #0x0]
0x20656C8はあなぬけのヒモの脱出するマップを指定するアドレスであります。
ここにたんじょうのしまのマップIDとNoである1A 3Aを入力しています。
石の洞窟で行った場合は00 15 FF 00が1A 3A 00 00に書き変わります。
技0x642Dの詳細
名前の長さ :191桁
頭文字 :00( )
威力 :52
命中率 :193
PP :62
確率 :51
タイプ :34
追加効果 :38 (一撃必殺)
一撃技の成功の判定には命中率が使われ確率は関係ないです。
0x0E005555になる技はいくつかあるがもっとも安定して使えるのがこの技でした。
SectionIDとはセーブデータの名前のようなものであり、エミュレータのメモリビュアーの0x0E000000から見ることができます。
3世代のセーブデータは14個のセッションにわけられています。(ここの詳細は割愛)
0~13までのセッションは2回レポートするたびに2回進みます。
つまり、奇数ズレを起こしていた場合は
絶対に成功することがないです。
例 :
0 1 2 3 4 5 6 7 8 9 10 11 12 13
とセッションが並んでいた場合に2回レポートすると
12 13 0 1 2 3 4 5 6 7 8 9 10 11
となる
これらの準備を終えたらバトルにはいり技アニメーションからスクリプトを発動させます。
あなぬけのヒモを使い脱出すればたんじょうのしまへいけます。