日本語化パッチの作り方 3

e2j_12.jpg
日本語化パッチの作り方、第3回です。
今度はバイナリエディタを使って日本語化してみましょう。

バイナリエディタで日本語化
前回の最後に書いたとおり、リストの項目やエラー時に
表示される文章などはリソースエディタでは編集できません。
代わりにバイナリエディタを使って文字列を書き換えます。
最初の例として、GPUプラグインがプラグインディレクトリに
見つからなかったときのエラーメッセージ
gpunotfound.jpg

ePSXe wasn’t able to find a GPU plugin in your epsxe\plugins directory. Take a look at the list of recommended plugins and download the latest version from pages like www.psxemu.com or www.emulatronia.com

を書き換えます。
バイナリエディタで検索するとオフセット0x0004FDC0付近に
この文章が見つかりました。
edit1.jpg
これを下のように書き換えます。
edit2.jpg

ePSXeはpluginディレクトリにGPUプラグインを見つけることができませんでした。
推奨するプラグインを参考に、www.psxemu.comやwww.emulatronia.comなどから
最新バージョンをダウンロードしてください。

注意として、書き換える際は文章の終わりに必ず0x00を入力してください。
また、余った部分も0x00で埋めておきましょう。
なお例では一つの文章が長くなってしまうので適当なところで
0x0Aを入れ改行をしています。
こんな感じでとりあえず日本語化できました。
gpunotfoundjp.jpg

さらに踏み込んで日本語化
※最初に、次に紹介する方法はすべてのアプリケーションで
使えるものではないということを注意しておきます。
また書き換えを間違えるとアプリケーションやOSの動作が
おかしくなったりすることがあります。

さて今度はコントローラー設定ダイアログ右上
リスト項目にある文章を日本語化します。
e2j_8.jpg
バイナリエディタで検索すると0x0004F790付近に
このリスト項目にある文字列がありました。
e2j_9.jpg
まず最初の項目を

[SLEH-0007] Namco G-con45/Digital (F5)

[SLEH-0007] ナムコ ガンコン/デジタル (F5)

に書き換えたいところなのですが、
元の文章が長さが38バイト(がんばって39バイト)、
翻訳後の文字列の長さが41バイト
最初より文章が長くなってしまいます。
もしこのまま書き換えてしまうとなると
すぐ後ろに控えている[SCPH-1200] DualShock (F5)の領域を
侵略してしまうことになり表示がおかしくなってしまいます。
半角カナ文字を使えば余裕で入るようにはなりますが
半角カナはなるべく使いたくはありません。
どうにかしてここに41バイトの文章を入れたいのですが
それには2バイトほどスペースが足りません。
逆に言えば2バイトほどスペースが増えれば
文章を入れることができるはず。
さて、もう一度上の画像をよく見てください。
[SLEH-0007]~のすぐ前
上の方にあるPositiveNegativeなどがあるあたり、
このあたりに少し隙間がありますね・・・
ここの間を少しずつ詰めていきましょう。

ここでわかりやすくするためにプロセスエディタの登場です。
下の画像はePSXeを逆アセンブルしたところですが、
先ほどのPositive、Negativeなどが参照されているのがわかります。
disasm.jpg
たとえば

0x00406B1F: 6810F74400  PUSH 44F710h  str:”Negative”

これはメモリの、アドレス0x44F710にある
“Negative”という文字列を参照している部分です。
これの参照しているアドレスを書き換えることができれば
文字を詰めることができるはずです。

それはバイナリエディタに戻ります。

バイナリエディタを使って、
ファイルのオフセット0x0004F710にあるNegativeを
少し前にずらしてみます。
Negativeのまえには0x00が4バイト続いています、が
文字列の後ろには必ず0x00が必要なのでそれをのぞいて
3バイト分、オフセット0x0004F70DにNegativeを
ずらしましょう。
オフセット0x0004F710に、0x00400000を足した値0x0044F710を、
さらにひっくり返した値10F74400をバイナリエディタで検索します。
このときデータ種別は16進データにしましょう。
edit3.jpg
なぜ0x00400000を足すのかは、ファイルの
オフセットをメモリのアドレスに変えるためです。
大抵この値でいけますがたまにこの値が使えない
こともあるので注意です。
まぁおまじないだと思ってください
気になる人はファイルの文字列の位置と
実行中のメモリ上の文字列の位置とを比べてみましょう。

検索でいくつか出てきたところを
0DF74400に書き換えます。
edit4.jpg
最後にNegativeの位置を前にずらします。
edit5.jpg
これでとりあえず3バイトずらせました。
プロセスエディタで確認してみると先ほどのアドレスが
0x44F70Dに変わっているのが確認できるはずです。
disasm2.jpg

0x00406B1F: 680DF74400  PUSH 44F70Dh  str:”Negative”

あとはこれを繰り返せば好きなだけ
スペースを稼ぐことができます。
e2j_10.jpg
こんな感じでリスト項目を
全角ですべて日本語化することができました。
e2j_12.jpg


この方法を使えばスペースの足りないところに
長い文章を埋め込むことができますが、その課程で
参照先のアドレスを奇数アドレスなど4バイトで割り切れない
アドレスに変えることになるのでアクセス速度が低下したり
ソフトによっては不具合が出ることがあると思います。

まぁ日本語化パッチぐらいでは
そんなに気になることではないと思いますが
念のため。
次回
これまでで日本語化の作業は終わりです。
次回は差分をとって日本語化パッチを作ります。

「日本語化パッチの作り方 3」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です