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

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

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

ePSXe wasn’t able to find a GPU plugin in your epsxeplugins 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件のフィードバック

コメントを残す

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