FC2ブログ

記事一覧

最新の任意コード実行法の解説


【Emの最新の任意コード実行法の概説】

従来の任意コード実行法は、バグ技0x0D1Dの戦闘アニメーションを利用して、ボックスに配置したポケモンの努力値コンディションをコードとして読み込む、という方法であった。
しかしこの方法では、0x0D1Dの用意や取り扱いが面倒であったり、ボックスに配置するポケモンの調達や調整がかなり難しかったりした。

当初は私も解析知識やプログラミング知識がほぼ皆無の状態であった為、効率化を図る策を考案することが全く出来なかった。
しかし、現在ではある程度の知識や知見を会得したので、この知識を使ってより手軽で簡単な新しい任意コード実行法について考えた。

試行錯誤の結果辿り着いた方法は、バグ技0x2B5Cの戦闘アニメーションを利用して、ボックスに配置したポケモンのNNTNを参照させ、ボックス名に記述したコードを読み込む、というものである。
ポケモンのNNを参照させるという構想は他の方が考案されたものだが、私なりのアレンジを加えて成功率が上がるよう改良を施した。

この最新の方法には以下のような特徴がある。
・乱数調整が一切不要
・トリガーとなるバグ技の作製、取り扱いが容易
・コードを記述するデータの調整が容易
・成功率を3/32(従来の3倍)まで上昇可能
・成功率を2/32で妥協した場合、通信環境不要


従来の方法よりかなり簡単であることが分かる。
具体的な仕組み等の解説については後述する。



【任意テレポートの実践】

最新の任意コード実行法による任意の場所へのワープ方法について記す。
今回は例として"殿堂入り部屋"へのワープを目的とする。

従来は穴抜けの紐(穴を掘る)のワープ先を書き換えて任意の場所にワープしていたが、今回はテレポートのワープ先を書き換える。
テレポートであればダンジョン外で使用出来る為、ダンジョン内限定の従来の方法より場所の制約が緩い。

・0x2B5C作製
まず、最新の任意コード実行法で必要なバグ技0x2B5Cを、従来と同じくザロクバグにて作製していく。

作製には今回、"NPCとの交換で手に入るプラスル(NN:プラプラ)"を材料ポケモンとして使用する。
プラプラは、ヒワマキシティポケセンの直ぐ右上にある家の中にいるNPC(TN:アッキー)にバルビートを渡すと交換出来る。
201908282306424ee.jpeg201908282306516b8.jpeg
ウッディメールを持っているので外しておく。

プラプラの変化パターンは[iv]のGAEM→EGAMなので、努力値を調整して技を決定する。
今回の0x2B5Cの場合は努力値をH92 A43と振ると指定出来る。
また、技が種族へと変化するので、Lv0のラフレシアを生成する為に技を鳴き声のみにしておく。

このプラプラを材料ポケモンとしてダブルコラプションを行う。
ダブルコラプションの方法についてはこちらを参照。
プラプラは性格値・ID値のどちらも正反応を起こすポケモンなので、補助ポケモンを用意する必要は特にない。
というより、鳴き声のみを覚えさせたこのプラプラ自身が補助ポケモンとしての効果を持つようで、このプラプラをコピーしてボックス2に沢山並べて配置しておくとかなりの確率でダブコラが成功する。
20190828230647969.jpeg

ダブコラに成功するとLv0のラフレシアが生成する。
201908282306447fc.jpeg
技欄を見ると、技1に0x2B5C(「べべべけべべべ」と表示)、技4に0x0505を覚えているので、この2つを並び替えて、育て屋に預けてLv1以上に上げる。
すると0x0505は上書きされ、技構成が[アロマセラピー/0x2B5C/痺れ粉/メガドレイン]となる。
20190828230645258.jpeg

以上で0x2B5Cの用意は終了である。
0x2B5Cは最大PPが1以上且つ命中不問の補助技なので、従来の0x0D1Dとは異なりPPの管理が非常に楽な上、心の目等も必要としない。


・ボックス配置用ポケモン入手
次に、ボックスに配置する技スクリプト記述用のポケモンを入手する。

最新の任意コード実行法で必要なボックス配置用ポケモンは
①:NNが[てぶねうい]且つTNが[てタねうい]のポケモン
②:NNが[てこねうい]のポケモン

以上の2匹だけである。
どちらも種族や個体値、性格値やID値等は一切不問である為、乱数調整は一切必要としない。
201908282306486f8.jpeg↑①の例20190828230650221.jpeg↑②の例

①のポケモンは、適当なロム(ソフト不問)で新規セーブデータを作成して主人公の名前を[てタねうい]にし、そのロムで適当なポケモンを捕獲してNNを[てぶねうい]にした上で、任意コード実行を行うロムに輸送すれば良い。
尚、通信環境がないなどして①のTNを[てタねうい]に出来なくても、成功率は2/32となるが任意コード実行自体は問題なく可能。
また、②のTNは不問なので、任意コード実行を行うロムにて適当に調達すればよい。


・ボックス名変更
最新の任意コード実行法ではボックス名データを使ってコードを記述するので、各ボックス名を以下のように変更する必要がある。

・ボックス1:[うラねういィ く]
‪・ボックス3:[うらねういィ く]
‪・ボックス5:[うヒねういィ く]
‪・ボックス6:[アえべけネ l]
‪・ボックス7:[えぶNチぃBFC]
‪・ボックス8:[アxコ う]
‪・ボックス9:[たさ  ]

※"べ"は平仮名、"l"は小文字L

ボックス9の名前がワープ先を決定付けるのだが、他の場所へのワープの仕方については後程紹介する。
因みに、ボックス配置用ポケモン①のTNを[てタねうい]にしなかった場合、ボックス5の名前変更は不要となる。


・任意コード実行
ここまでの用意が済むと、いよいよ任意コード実行に移れる。

まず、ボックス12の26番目にボックス配置用ポケモン27番目を置く。
2019082823065336e.jpeg

次に、手持ちの先頭に0x2B5C持ちラフレシアを置き、テレポートを覚えたポケモンを用意して手持ちに加える。
テレポートはラルトス(Lv16)やネイティ(Lv20)、ネンドール(Lv1)などが覚える。
そして、設定で戦闘エフェクトを「見る」にしておき、テレポートを使用可能な適当な草叢にてレポートを書く。

野生ポケモンと戦闘し、0x2B5Cを使用する。
対象を選択出来るが、どちらを選んでもよい。
0x2B5Cを使用すると、成功の時にはアロマセラピーと同じ効果が発生し、失敗の時にはフリーズしたり強制リセットがかかる。
失敗した場合はリセットして再試行。
成功した場合はそのまま戦闘から逃げ、その場でテレポートを使用する。
成功率は3/32(或いは2/32)であり、体感的には20〜30分前後の試行で1回成功する程度なので、根気良く行う。

何もミスがなければ無事殿堂入り部屋へワープする。
201908282306564dc.jpeg201908282306546b4.jpeg20190828230657f43.jpeg
実践動画↓


【任意テレポートの解説】

今回の任意テレポート用のコードは以下のようになっている。

・c13技スクリプト部
13 48 18 03 02(12/26NN:てぶねうい)
13 60 18 03 02(12/26TN:てタねうい)
13 0A 18 03 02(12/27NN:てこねうい)

・c03技スクリプト部(終了コードc08含む)
‪03 77 18 03 02 80 00 08‬(1:うラねういィ く)
‪03 27 18 03 02 80 00 08‬(3:うらねういィ く)
‪03 6B 18 03 02 80 00 08‬(5:うヒねういィ く)

・テレポートワープ先変更プログラム部
51 ‪04 49 ‪09 68 00 E0(6:アえべけネ l)
04 ‪48 C8 61 30 BC C0 BD(7:えぶNチぃBFC)
51 EC 5A 00 03(8:アxコ う)
10 0B 00 00(9:たさ  )

技スクリプトと文字コードの詳細は以下を参照のこと
・技スクリプト
https://wikiwiki.jp/pokemonhack/技アニメーションスクリプト
・文字コード
https://wikiwiki.jp/pokemonhack/文字コード

バグ技0x2B5Cの技アニメーション参照ポインタは0x02030400であり、これはボックス12/26のポケモンのNNやTN、12/27のNNの開始アドレスとなる(RAMのアドレス変動により変化)。
流れとしては、0x2B5Cの使用により、まず12/26NN,TN,12/27NNを参照し技スクリプトc13が実行され、c13の効果で次にボックス1,3,5にジャンプし技スクリプトc03が実行、そしてc03の効果でボックス6にジャンプしボックス6〜9に記述されたプログラムが実行される。

c13は5バイトを要する技スクリプトで、c03は最低7バイト、終了コードc08は1バイトを要する。
終了コードc08は絶対として、任意のプログラムの読み込みにはc03が必須なので、c03を記述する為にまず最低でも8バイトの連続したデータ領域を確保する必要がある。
従来の方法ではc03のみを使用していたので、c03を記述する為にボックスに配置したポケモンの性格値+ID値の8バイトや、努力値コンディションの8バイトを調整しなければならず、その為には乱数調整が必須であった。
しかし、今回の方法では併せてc13も使用しており、c13の記述にはボックスに配置したポケモンのNNやTNの5バイト、c03の記述にはボックス名の8バイトを使用することで、全てのコードを任意に調整可能である文字データの羅列だけで表現することが可能となり、乱数調整は不要となった。

前述した通り、0x2B5Cの参照ポインタ0x02030400は、それぞれ1/32の確率でボックス12/26のNN、12/26のTN、12/27のNNの開始アドレスとなる。
よって、この3箇所全てにc13を記述しておくことで、成功率を3/32に出来る。

ボックス6以降に記述したプログラムの内容を要約すると、テレポートのワープ先を記録するアドレスに、ボックス9に記述された4バイトの値を代入する、となる。
つまり、ボックス9の名前に付けた4文字によって、テレポートのワープ先を任意のものに変更することになる。
ボックス9の名前を以下のように変更することで、ワープ先を以下のものに変更出来る。
・[はけ  ]:南の孤島
・[はぎ  ]:最果ての孤島
・[はげ  ]:誕生の島
・[はぢ  ]:臍の岩
スポンサーサイト



コメント

ダブルコラプションをする場合には卵を1度産まさせなければいけないのでしょうか?あまり知らないので教えてくれると幸いです。

No title

ダブルコラプションでは材料ポケモン→性格値またはID値が破損したタマゴ→バグったポケモンの順にポケモンが変化します。なので、タマゴは孵化せずに、もう一度タマゴバグをしてタマゴをバグったポケモンに繁華させます。

No title

ラフレシアLv.0は生成できたのですが技画面に行くとフリーズしてしまいます。また技1の0x2B5Cのタイプがこおりではなくノーマルが反転じた状態で表示されています。これは努力値あたりでしくじってしまった感じですか?教えていただけると幸いです。

はじめまして
こう言ったデータに関して疎いものでかなり初歩的なものかも知れませんが質問させていただきます
ダブルコラプションによって作成したプラプラ(ラフレシア)のトレーナー名が「アッキー」から「アッキz」に変化してしまいましたが、これは任意コード実行する上で問題のないことなのでしょうか?
またこの任意コード実行時にはボックス12においた2体のポケモン以外は全て空にしておくべきでしょうか?

No title

ボックス12以外にポケモンがいても大丈夫でしょうか?

No title

>ボックス12以外にポケモンがいても大丈夫でしょうか?

大丈夫でした

No title

ダブコラ後のプラプラはポケモンセンターで回復させても大丈夫なのでしょうか?

南の孤島で、ラティアス・ラティオスは捕まえれないのですか?行ってもでてきません

アルタイルでも出来るの?

ザロクバグの仕様をあまり理解していないのですが、卵となったプラスルをラフレシアにする場合ザロクバグの手順を繰り返すときいたのですが、レポートを書き直前に作った瀕死の手持ちのまま作業を繰り返すということでしょうか?

質問なのですが実践したみなさんのように実数値がマイナスになることなくけつばんを出現させているのですが、このことに問題はあるでしょうか?このまま作業を進めていいのか不安です。一応ラフレシアを出現させたことは一回だけあります。

>南の孤島で、ラティアス・ラティオスは捕まえ>れないのですか?行ってもでてきません

失礼ですが殿堂入りはしましたか?
エメラルドの場合殿堂入り後徘徊するラティ兄妹を決めて、選ばれなかった方が南の孤島に出現する形を取っているため、そのイベントをこなしていなければ出現しないのかもしれません

マボロシ島のコード知りたいです。
誕生の島や臍の岩には行けたもののマボロシ島には行ったことがないので行ってみたいです。どうかよろしくお願いします。

No title

へそのいわにテレポートすると船着場横の水上に波乗りした状態でワープしてしまい、そこから動けません。何か地上にテレポートできない原因があるでしょうか?

技0x2B5Cが1時間以上繰り返しても成功しないのですが原因がわかりません。

No title

ボックス9の名前にスペース2つ入れるのを忘れてたせいで水上にテレポートしていたみたいです。無事へそのいわに行くことができました。

0x2B5Cを成功させてもテレポート先がコトキタウンになっているのですが何故でしょうか?

間違えて氷タイプの技を持ったラフレシアの作成に失敗した個体をセーブしてプラプラがいなくなったのですが、プラプラ以外で0x2B5Cを作成することは可能でしょうか?

バグを行う際に必要なボックス以外のボックス(名前を変えたボックスを含む)にはポケモンを配置してもよろしいのですか?

No title

ラフレシアのコードでフリーズした時GBAのリセットコマンドを押してもリセットできないんですが、電源を切ってゲームを開始させた場合なにか変わったことはあるのでしょうか?
ちなみにたんじょうのしまには一応行けました

No title

ラフレシアを生成することができませんでした。ボックス2の23番目のプラプラがダメタマゴになり、24番目はなにも変わらずでした。努力値ぶり、ダブコラ、もちゃんとしたはずなのですがいったい何が原因なのでしょうか?
何度か試したのですがダメで生成されるダメタマゴはすべて?かつモンスターボールでした。バトルに出してみてもプラスルのシルエットでした。

>ラフレシアを生成することができませんでした。ボックス2の23番目のプラプラがダメタマゴになり、24番目はなにも変わらずでした。努力値ぶり、ダブコラ、もちゃんとしたはずなのですがいったい何が原因なのでしょうか?
何度か試したのですがダメで生成されるダメタマゴはすべて?かつモンスターボールでした。バトルに出してみてもプラスルのシルエットでした。

自分もかなり苦戦しました。
運がないからだと思いますが自分は10時間近くかかりました。

>0x2B5Cを成功させてもテレポート先がコトキタウンになっているのですが何故でしょうか?

自分も南の孤島に行こうと思った時になりました。
もう一度ボックス9を書き直したり、レポートしてリセットしたりしてから、再度0x2B5Cを成功させたら南の孤島に行けました。

>ラフレシアLv.0は生成できたのですが技画面に行くとフリーズしてしまいます。また技1の0x2B5Cのタイプがこおりではなくノーマルが反転じた状態で表示されています。

自分も最初全く同じミスをしてましたw
何度やっても同じ結果になるので、よく見て見たらプラスルにポケルスが付いてて、それで努力値ズレたせいだったみたいです。なので恐らく努力値ズレかと思います。
自分の場合はタイプはノーマルの反転、技名の文字は重なって読めない、技説明欄を開いてもフリーズ、コンテストわざの画面から確認するとタぃタぃタぃタぃタぃって書かれてるやつでした。

半分成功?

ザロクバグでプラスルをたまご→ラフレシアにして手順通り進めたところ、
最果ての孤島にテレポートできましたが
壁に埋まってしまいました。
位置を特定するコードが間違っていたのでしょうか?

南の孤島

既に記述してる方もいますが、南の孤島に行けてもラティオス(ラティアス)が出てきません。遭遇は出来ないのでしょうか

南の孤島のタイトルで投稿したものです

既に殿堂入りは済ませ、ラティオスも捕まえております。

No title

さいはてのことう行きから一回船で戻った後、もう一度さいはてのことうに行こうとしてもテレポート先が変わりませんでした
同じ場所には何回も行けないのでしょうか

孤島ラティを捕まえたいなら任意コードじゃなくて、配達員のフラグを建てる方のバグを使うっていう方法もありますよ。ttps://youtu.be/X6UrLsgejFc
デデロニーさんが上げてる動画の中にザロクバグを使った孤島チケの入手法を解説した動画があるので、これを参考にすれば行けると思います。
自分が試したら実際行けた上にちゃんとラティも捕まえられました。

バトルタワーでバグ技成功させて、BVに保存すればいつでも任意コード実行出来る!って思ったけどそんなことは無かった
普通にフリーズする…

タマゴをラフレシアにした時にのみこむやノーマル技を覚えていて上手く出来ません。。。何度も努力値は振り直しましたが何がいけないのでしょうか…

テレポート先

バグ技が成功して、さいはてのことうやへそのいわにテレポート出来たのですが、テレポート先が
身動きひとつ取れないとこにいるのですが
何が原因だと思いますか?

努力値について

プラプラをH92 A43に調整する場合ってレベルをあげてしまっていいんですよね?
初心的な質問ですみません。

承認待ちコメント

このコメントは管理者の承認待ちです

承認待ちコメント

このコメントは管理者の承認待ちです

承認待ちコメント

このコメントは管理者の承認待ちです

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

マボロシ島のを教えて下さい

プラプラを別ROMに持っていけば別ROMでもバグを使えますか?

No title

成功しました。丁寧な説明ありがとうございました

はじめまして。バグ技に不慣れなので質問です。
手順通り行い生成されたラフレシア(プラプラ)を、エメラルド→ルビサファに送り、エメラルドのデータを消して送り直すことは可能なのでしょうか?
送り直した場合、その消えたデータでボックスの名前とかを整えれば再度テレポートで殿堂入りや島などに飛べるでしょうか?

不正に殿堂入りした際に、図鑑を全国版にしてもらえないバグが起こりました(ラティの選択は起きたのに…)
夢幻のチケット入手の長時間ザロクバグの影響な気もしますが…。

「べべべけべべべ」ではなく、「ぇ せトそ」と表示されますが、大丈夫ですか?

2回目のべべべけべべべ

べべべけべべべ から テレポートをして、ミュウを捕まえました。2回目は再度 べべべけべべべ を発動すればデオキシスを捕まえられますか?
それとも、プラプラ増殖からやり直した方が良いですか?

テレポート先を他にも変更したいんですが、どうしたらいいでしょうか。
フエンタウンでものまね、キナギタウンでだいばくはつを覚えさせるのにボックス名をどうしたらいいか教えて頂けませんか。
できれば仕組みもしりたいです。

コメントの投稿

非公開コメント