fc2ブログ

記事一覧

改良型簡易メモリエディタの解説及び応用

現在、コメントの返信は停止しております

【改良型簡易メモリエディタの概説】

2022年9月22日以降、簡易メモリエディタの導入記事では、従来のエディタプログラムを刷新して仕様変更を遂げた"改良型簡易メモリエディタ"の公開をしている。
改良型では、メモリエディタとしての基本的な機能や使い方は従来のものと特に変わらないが、新機能の追加や不具合の修正を行ったことでより使い勝手が良くなっている。

ここでは改良型で追加された新機能及びその応用、また旧型簡易メモリエディタからの"お引っ越しコード"について解説する。



【改良型簡易メモリエディタの新機能】

改良型エディタでは、従来のものより以下の機能が追加されている。

①動的RAM始点特定
エディタを起動した際に、プログラムを保存してあるポケモンの表IDに動的RAM始点アドレスの下位2バイトが10進数で表示される。
導入記事の活用例で紹介した動的RAM始点特定プログラムの機能を標準搭載したものであり、詳しくはこちらを参照。
エディタを起動する度に親IDが変化することになるが、プログラム本体とは関係のない領域なので問題はない。

②ASE機能保持
旧型エディタではエディタ起動後にASEが一切実行出来なくなる不具合が存在していたが、改良型では修正し起動後もASEが可能となっている。
旧型のこの不具合は割と致命的で、長らく後述のASEチャートショートカットを実行する上での障害となっていた。
今回の改良型では解消されASE機能を保持したまま起動出来るようになったが、これは地味ながら重要なことである。

③常時メニュー画面リタイア追加
パルパーク帰還後も常時メニュー画面にリタイアのコマンドが追加される(バッグやレポートも使用出来る)。
これにより通常世界でリタイアトリックが可能となり、現在地のマップIDを332/333に書き換えることでいつでもどこでもASEを実行することが出来る。
後述のASEチャートショートカットをする上でも要となる必須機能である。

これらの機能を活用して以下のことが出来る。


・どこでもASE
現在地のマップIDを332/333に書き換えることで、動的RAM始点アドレス+0x2EAF0(ASE開始点)に記述された任意のスクリプトコードを、メニュー画面に追加されたリタイアを使用して実行することが出来る。
現在地のマップIDは始点アドレス+0x144Cの位置にあり、始点アドレスはその下位2バイトがポケモンの表IDの値から確認出来るのでそれを利用する。
以下のエディタ操作によりマップIDの変更及びスクリプトコードの記述が行える。

・マップID333変更
始点アドレス+0x144C = 表ID + 36115532

0x0000014D = 333


・スクリプトコード
始点アドレス+0x2EAF0 = 表ID + 36301552

スクリプトコード → 10進数変換(4バイト区切り)


注意点として、書き換えたマップIDは1歩でも動くと元のマップIDに戻ってしまう為、書き換え後はその場から動かずにリタイアをすること。

<参考>
https://projectpokemon.org/home/docs/gen-4/dpp-script-commands-r10/


・ASEチャートショートカット
上記のどこでもASEの応用で、ワープスクリプトc00BEを使用してASEチャート上のパルパーク及びマップID332付近の座標(0xFF21,0xD8E1)にワープする。
この座標上でレポートを書くことで、次回再開時にはパルパークの目の前からスタートとなるので、ASEチャートを大幅にショートカットすることが出来る(殿堂入りデータを展開する為の復帰チャートの実行のみで済む)。
再開時にエディタ起動、終了時にワープからのレポートを徹底すれば、ASEチャートの約15分かかる移動を毎回省略することが出来、DP任意コード実行のハードルを大幅に低下させることが出来る。
ワープには以下のエディタ操作を行う。

・マップID333変更
始点アドレス+0x144C = 表ID + 36115532

0x0000014D = 333


・ワープスクリプト
始点アドレス+0x2EAF0 = 表ID + 36301552

0x000000BE = 190
0xFF210000 = 4280352768
0x0000D8E1 = 55521
0x00000002 = 2


上記操作後にリタイアをすると、謎の場所の暗黒空間上に上側を向いてワープするので、その場でレポートを書く
再開後は暗黒空間上のコトブキシティにマップが変わり、上に1歩でパルパーク、パルパークから左に1歩でマップID332に到着する。
まずはパルパークでリタイアをして殿堂入りデータを展開する為の復帰チャートを実行し、復帰後はパルパークを経由してマップID332に行きASEを実行する。



【改良型エディタ用補助ポケモン】

ASEチャートショートカットが可能となったことでDP任意コード実行環境が大幅に改善されたが、これらの機能を補助する以下のポケモンを用意することにより、更に利便性を高めることが出来る。


・ショトカ用データ展開ポケモン
マップIDを332に書き換え、ASE開始点にASEチャートショートカット用ワープスクリプトを展開するプログラムを保存したポケモン。
このプログラムはポケモンのCブロック及びDブロックに保存し、保存したポケモンにCブロック呼び出しコードのマーキングACEを行うことで、ショトカに必要なデータがメモリに展開される。
データ展開後に即リタイアをすることで、ASEチャートショトカ時の座標(0xFF21,0xD8E1)にワープ出来る。
これにより、ショトカの度に一々アドレス計算やワープスクリプトの書き込みを行う手間を省ける。

また、ショトカ用スクリプトコードの展開とともに、エディタの指定アドレスポインタにASE開始点のアドレスを自動でセットするようになっているので、エディタ操作でアドレスセットをせずにそのまま任意スクリプトコードの値書き込みを行えば、ショトカ用スクリプト以外の"どこでもASE"を実行することも可能である。

導入手順は以下の通り。


まずプログラムを保存させる適当なポケモンをボックス内に用意しておく。
性格値等の要件は特になく何でもよい。

エディタを起動し、暗号化停止コードを下記のエディタ操作で打ち込む。
打ち込み後はボックスを開き、用意したポケモンに対して⚫︎マークを選択してマーキングACEを行う。

・暗号化停止
0x0206DAB0 = 34003632 × 1

0x0000E7C7 = 59335


暗号化を停止したら、まずは用意したポケモンのCブロックのアドレスを取得する為、Cブロックアドレスセットコードを以下のエディタ操作により打ち込む。

・Cブロックアドレスセット
0x0206DAB0 = 34003632 × 1

0x60066F20 = 1611034400

0x027E3B80 = 41827200 × 1

0x02293020 = 36253728


ボックスを開き、用意したポケモンに対してマーキングACEを行う。
これで、そのポケモンのCブロックのアドレスがエディタの指定アドレスポインタにセットされる。
以降はそのポケモンを動かさないようにし、以下のエディタ操作によりプログラムを連続書き込みする。

・Cブロックプログラム
0x6800C91F = 1744881951
0x53420C15 = 1396837397
0x60201840 = 1612716096
0x041A21BE = 68821438
0x24020C1B = 604113947
0xF90BC01E = 4178296862


次に、Dブロックのアドレスを取得する為のDブロックアドレスセットコードを以下のエディタ操作により打ち込む。

・Dブロックアドレスセット
0x0206DAB0 = 34003632 × 1

0x60016F20 = 1610706720

0x027E3B80 = 41827200 × 1

0x02293020 = 36253728

※Cブロックアドレスセット時に打ち込み済みなので打ち込み不要

ボックスを開き、同じ要領で再びマーキングACEを行う。
これでDブロックのアドレスがセットされるので、以降はそのポケモンを動かさないようにし、以下のエディタ操作によりDブロックへプログラムを書き込んでいく。

・Dブロックプログラム
0x02108818 = 34637848
0x0002EAF0 = 191216
0x144C014C = 340525388
0xD8E1FF21 = 3638689569
0x02293020 = 36253728


これでプログラムの導入は完了なので、レポートを書いて保存する(レポートは必ず「沢山書き込んでいる」ことを確認すること)。


プログラムを使用する場合は、プログラムを保存したポケモンに対して以下のCブロック呼び出しコードのマーキングACEを行う。

・Cブロック呼び出し
0x0206DAB0 = 34003632 × 1

0x000046B7 = 18103


マーキングACEの直後にフィールド画面へ戻ると、マップIDが書き換わっていてグラフィックがおかしくなっている。
そのままリタイアをするとASEチャートショトカにより座標(0xFF21,0xD8E1)にワープし、アドレスセットをせずにそのまま任意のスクリプトコードを書き込んでからリタイアをすればどこでもASEが出来る。


・エディタ専用セットアップポケモン
改良型エディタを起動してしまえば、一般の電卓計算方式のASEはほぼ不要となることから、現状のASEのセットアップをエディタの起動へと特化するよう調整したポケモン。
このポケモンを用意すると、ペイロードにCブロック呼び出し及びボックス整理画面表示コードが直接組み込まれるので、(殿堂入りデータ展開後に)マップID332到達時点でリタイアをすれば、その場でボックスが開きCブロック呼び出しコードのマーキングACEを即実行することが出来る。
起動の度に必要だった電卓リミッター解除及びCブロック呼び出しコードの計算を省略出来るというのは地味ながらも非常に便利で、後述するがその他のセットアップデータも一部制限が緩和されるので自由度も若干上がる。
ASEチャートショトカと並びDP任意コード実行のハードル低下に貢献するので、是非用意しておきたい。
更に"NPC ASE"という手法と組み合わせることでASEチャートショトカよりももっと簡単にエディタを起動することが可能。
詳しくはこちらを参照。


導入手順は以下の通り。


まずはプログラムを保存する為のポケモンの用意についてだが、こちらはCブロックがブロック配列の先頭に位置するような性格値を持つ専用のポケモンを用意する必要がある。
そこで、以下のエディタ操作により任意乱数値指定からの任意タマゴ入手コードを実行し、特定の性格値を持った何かしらのタマゴを入手する。

・任意乱数値指定
0x021C65A8 = 35415464 × 1

0x00000000 = 0


・任意タマゴ入手
ショトカ用データ展開

0x00010097 = 65687
0x00020000 = 131072

※ショトカ用データ展開を使用しない場合、マップID332内での電卓計算方式のマナフィタマゴ入手コード実行で代用可

上記の操作後にリタイアをすることで、ブロック配列CDABとなる性格値0xE97E0000を持ったタマゴが手持ちに加わる。
予め手持ちに空きを作っておくことと、NPC消費等が発生しないよう注意することを忘れずに。

タマゴを入手したらボックス内に預け、暗号化停止コードを下記のエディタ操作で打ち込む。
打ち込み後はボックスを開き、入手したタマゴに対して⚫︎マークを選択してマーキングACEを行う。

・暗号化停止
0x0206DAB0 = 34003632 × 1

0x0000E7C7 = 59335


暗号化を停止したら、入手したタマゴのCブロックのアドレスを取得する為、Cブロックアドレスセットコードを以下のエディタ操作により打ち込む。

・Cブロックアドレスセット
0x0206DAB0 = 34003632 × 1

0x60066F20 = 1611034400

0x027E3B80 = 41827200 × 1

0x02293020 = 36253728


ボックスを開き、入手したタマゴに対してマーキングACEを行う。
これで、そのタマゴのCブロックのアドレスがエディタの指定アドレスポインタにセットされる。
以降はそのタマゴを動かさないようにし、以下のエディタ操作によりプログラムを連続書き込みする。

・Cブロックプログラム
0xDAB00007 = 3668967431
0x07B70206 = 129434118
0x06DAB100 = 114995456
0x00AB4602 = 11224578
0xBC00A102 = 3154157826
0x01000600 = 16778752
0x00000100 = 256
0x00000200 =512


これでプログラムの導入は完了なので、レポートを書いて保存する(レポートは必ず「沢山書き込んでいる」ことを確認すること)。


このポケモンを使用したセットアップでは、現状のセットアップより以下の点を変更する。

・回復ポケット
1番目:インドメタシン×22
2番目:万能粉×1
3番目以降は不問。

・ボックスポケモン
ボックス5/21番目:エディタ専用セットアップポケモン
ボックス18/30番目:性格値0x00FB014C
その他は不問。

・ボックス壁紙
不問。

・手持ちポケモン
不問。

上記セットアップに変更後、ASEチャートショトカにより座標(0xFF21,0xD8E1)へワープしレポートを書くと、再開後は(殿堂入りデータ展開後に)マップID332でリタイアをするだけで、自動でボックス整理画面表示からのCブロック呼び出しコードのセットが行われ、マーキングACEにより即エディタを起動することが出来る。



【旧型エディタからのお引っ越し】

2022年9月22日以前に掲載していた旧型の簡易メモリエディタを導入されていた場合、旧型エディタを用いた下記のエディタ操作によって改良型へのお引っ越しが出来る。
再保存先にはそのまま元の性格値0xFFFD20F4のポケモンを使い、暗号化停止済み且つブロック配列も特定済みなのでCブロックアドレスセットコードによって直ぐに書き換えられる。
このポケモンにCブロックアドレスセットコードのマーキングACEを行い、以降は動かさないようにしそのまま改良型エディタプログラムを書き込んでいく。

・Cブロックアドレスセット
0x0206DAB0 = 34003632 × 1

0x60066F20 = 1611034400

0x027E3B80 = 41827200 × 1

0x02293020 = 36253728


・改良型エディタプログラム
  
0xC80EA004 = 3356401668
0x22C06011 = 583032849
0x3909601A = 956915738
0xDF0B2210 = 3742048784
0xF8F94C03 = 4177087491
0x02293009 = 36253705
0x020F90A0 =
0x02038F3C = 33787708
0x02108818 = 34637848
0x00112F00 = 1126144
0xCF073F0D = 3473358605
0x588B6809 = 1485531145
0x588A3258 = 1485451864
0xD1012A00 = 3506514432
0xC20869BA = 3255331258
0x477061BA = 1198547386


これで改良型に置き換わるが、旧型を起動した影響によりASEをすることは出来ず、つまりASEチャートショトカも使用出来ないので、置き換え直後は一度ASEチャートをフルで実行する必要がある。
もしくは、NPC ASEの為のイベントIDの書き換えは有効なので、エディタ起動用NPC ASEの準備をしておけば再開後からはNPC ASEにより改良型エディタを起動出来る。
スポンサーサイト



コメント

コメントの投稿

非公開コメント