チュートリアル2 -セリフの変更-
AMやポケシンセの使い方はある程度把握できましたか?
今回扱うのはポケハック定番のオーキド博士のセリフの変更です。
ポケモン改造研究所-そして伝説へ-で同様の内容を扱っていますが、ツールや用語を最新にして説明します。
ポケモン改造研究所-そして伝説へ-で同様の内容を扱っていますが、ツールや用語を最新にして説明します。
ValzHexとPokeTextEditor(以下PTE)をDLしてください。
※ValzHexでショートカットが保存されない人向け解決法
ValzHexインストール先フォルダ内のValzHexを右クリック →プロパティ →セキュリティ →編集 →追加 →オブジェクト名のところにwindowsのユーザーID入れる(Microsoftの表示名ではない) →追加されるのでセキュリティの画面の一覧から自分のユーザー選択 →フルコントロール許可
エミュで変更したいセリフを確認しにいきましょう。


ValzHexでROMを開いておきます。

PTEでROMを開き、探したいセリフを左のテキストボックスに入力したら、オフセットの検索を押します。
ヒットするとこのようにオフセットの候補に出るので、どれかクリックした後にセリフのロードを押してください。
ヒットするとこのようにオフセットの候補に出るので、どれかクリックした後にセリフのロードを押してください。
3件ヒットしていますが、もう少し検索テキストを長くすれば一本に絞れます。

3つ目の0x1aa211が該当のセリフですね。
※16進数表記をする際は読む人にとって分かり易くするために0xと先頭に表記します。
※16進数表記をする際は読む人にとって分かり易くするために0xと先頭に表記します。
ここで少し記号の解説をします。
¥p→改ページです。ゲーム内では三角の赤いグリフですね。
¥n→改行です。基本的には2行表示なので、基本は1度改行を入れたら¥pで改ページします。
¥m→続改行です。改行した文章の次にコレを入れて使います。実際に確認して挙動を確かめてください。
Ω→終端記号です。
¥n→改行です。基本的には2行表示なので、基本は1度改行を入れたら¥pで改ページします。
¥m→続改行です。改行した文章の次にコレを入れて使います。実際に確認して挙動を確かめてください。
Ω→終端記号です。
詳しいことは資料wikiの文字コードを参照。
https://wikiwiki.jp/pokemonhack/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89
https://wikiwiki.jp/pokemonhack/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89
オーキド博士の最初のセリフが0x1aa211に存在することが分かったので、参照先を変更してみましょう。
短いセリフなら問題ないのですが、長いセリフだと別のデータまで上書きしてしまう可能性があります。
練習も兼ねて空き容量にテキストを書き込んでみましょう。
練習も兼ねて空き容量にテキストを書き込んでみましょう。
ValzHexで空き容量を探します。

FF FF FF FF……と続いているところが空き容量です。
FRは空き容量が多いです。
適当なアドレス(オフセット)を見つけ、メモしましょう。
今回はテキストなので探知ができますが、大事なデータを入れたアドレスはメモ帳などで管理しましょう。

FF FF FF FF……と続いているところが空き容量です。
FRは空き容量が多いです。
適当なアドレス(オフセット)を見つけ、メモしましょう。
今回はテキストなので探知ができますが、大事なデータを入れたアドレスはメモ帳などで管理しましょう。

PTEに戻り、オフセットに空き容量のアドレスを書き込みます。今回は0x6E20E0にしてみます(別にどこでも構いません)。
好きなテキストを入力したら、オフセットに間違いが無いか確認したのち、ROMに上書きボタンを押しましょう。
漢字パッチを当てている場合は漢字も表示できます。
好きなテキストを入力したら、オフセットに間違いが無いか確認したのち、ROMに上書きボタンを押しましょう。
漢字パッチを当てている場合は漢字も表示できます。
※今後PTEで書き込み→ValzHexでどこかのデータを変更した場合、
PTEには古いデータが読み込まれているので、PTEでROMの再読込ボタンを押してください。
PTEには古いデータが読み込まれているので、PTEでROMの再読込ボタンを押してください。

ValzHexに戻るとこのようなウィンドウが表示されますが、再読込でOKを押して続けます。

0x6E20E0に書き込まれたことを確認します。
先ほどオーキド博士のセリフは0x1aa211だと特定できているので、このテキストを参照している場所を探します。
ValzHexの検索ウィンドウを開き、「11 A2 1A 08」と入力してください。
アドレスが0x1AA211なので、リトルエンディアンにして、11 A2 1Aとなります。
たとえばアドレスが0x123456であれば、リトルエンディアンにすると56 34 12になります。
0x0001という2byteのデータを書き込むときであれば、リトルエンディアンだと01 00という表記になります。
アドレスが0x1AA211なので、リトルエンディアンにして、11 A2 1Aとなります。
たとえばアドレスが0x123456であれば、リトルエンディアンにすると56 34 12になります。
0x0001という2byteのデータを書き込むときであれば、リトルエンディアンだと01 00という表記になります。
テキストは0x1aa211という場所ですが、ROMを起動すると0x80000000からROMイメージが展開されます。
0x801aa211という場所に展開されるので、11 A2 1A 08と、末尾に08が付くということになります。頭の片隅に入れておいてください。
難しければ、リトルエンディアンにしたときに08が後ろに付くとだけ覚えてくれれば大丈夫です。
0x801aa211という場所に展開されるので、11 A2 1A 08と、末尾に08が付くということになります。頭の片隅に入れておいてください。
難しければ、リトルエンディアンにしたときに08が後ろに付くとだけ覚えてくれれば大丈夫です。

前検索でも次検索でも一致箇所一覧でもなんでもいいので、とりあえず検索してヒットさせてください。

ヒットしましたね。0x130104からの4byteで参照先を指定しています。
では、ここを先ほど入力した0x6E20E0にしてみましょう。リトルエンディアンにして「E0 20 6E 08」です。
保存ボタンを押し、エミュで確認します。

ということで、既存のイベントの参照先を変更することができました!
- 参照先を変更する
- リトルエンディアンにする
- 空き容量の概念
- バイナリエディタ(ValzHex)の使い方
- PokeTextEditor(PTE)の使い方
が理解できましたでしょうか。
次のチャートは新規イベント作成になります。