Unreal Engineゲームの日本語化

https://note.com/game_mediation/n/n72cf4ed94170
Game Mediationさんの記事を読んで自分なりのトライしてみました。
今まで何度もトライして挫折していましたが、今回始めて成功しました。
記事にはない部分で何箇所か詰まりましたので、その補完も兼ねています。

今回はコードマスターのラリーゲーム EA SPORTS™ WRCにトライしました。
日本語は一瞬だけ有志が日本語化を公開してくれていたので、そのデーターを利用させてもらいました。(なので、このMODの一般公開はありません。

この記事での主なポイントは、
1:暗号化されたpakファイルの解凍
2:UE4LocalizationsToolの使い方
3:パックする時の注意点
4:MODの作成
です。

1:暗号化されたpakファイルの解凍

基本はGame Mediationさんの記事どおりなのですが、暗号化されたものの場合は、下の写真のようにエラーがでます。
復号化用のキーなようです。

下記のJamie Holdingさんのサイトでそのキーの探し方が載っていました。
https://blog.jamie.holdings/2019/03/23/reverse-engineering-aes-keys-from-unreal-engine-4-projects/

ですが、有名なゲームなら、このサイトで誰かが見つけてくれたキーが載っているかもしれません。
https://cs.rin.ru/forum/viewtopic.php?f=10&t=100672
今回は誰かが見つけてくれたキーを利用しました。
(EA WRC : 0x497B3578CBCCCC96C9E32BA3FAF……..)
ただ、これをそのまま使うことはできず、BASE64に変換する必要があります。
これも上記Jamie Holdingが「Hex to Base64 encoder」で検索すると見つかるよということで、ググってBase64に変換しました。
(EA WRC : SXs1eMvMzJbJ4yuj+vvLtPYS1KvEJTB…….)
この時、先頭の0Xは消して変換してください。0Xは16進数表記であることを示すもので不必要です。

Base64の復元キーが手に入りましたので、アンパックしていきます。
上記Jamie Holdingのサイトを参考に、crypto.jsonを作成します。

{
  "$types": {
    "UnrealBuildTool.EncryptionAndSigning+CryptoSettings, UnrealBuildTool, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null": "1",
    "UnrealBuildTool.EncryptionAndSigning+EncryptionKey, UnrealBuildTool, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null": "2"
  },
  "$type": "1",
  "EncryptionKey": {
    "$type": "2",
    "Name": null,
    "Guid": null,
    "Key": "Base64の復元キーをここに記入"
  },
  "SigningKey": null,
  "bEnablePakSigning": false,
  "bEnablePakIndexEncryption": true,
  "bEnablePakIniEncryption": true,
  "bEnablePakUAssetEncryption": false,
  "bEnablePakFullAssetEncryption": false,
  "bDataCryptoRequired": true,
  "SecondaryEncryptionKeys": []
}

DOSからUnrealPackを実行します。

[アンリアルエンジンインストール先]/Engine/Binaries/Win64/UnrealPak.exe []回答するPakファイルのフルパス -EXTRACT [Pakファイルの出力パス] -cryptokeys=[crypto.jsonのフルパス]

Game Mediationさんの解凍例に -cryptokeys=[crypto.jsonのフルパス]を追加すればOKです。

解答されたフォルダの中を探せば、Languageフォルダがあり、その中に各言語に対応したGame.locresが見つかります。
EA WRCは英語として、en とen-USが見つかりました。
一つ(en-US)は英語圏用、もう一つ(en)は多言語で見つからなかったテキストをフォールバックして探す基本テキストのようです。

2:UE4LocalizationsToolの使い方

UE4LocalizationsToolでloclesファイルを読み込むと、下記のようにNameとテキストが表示されます。
テキストを編集すると色が代わり編集したことが分かるようになっています。

テキストファイルとして、出力することもできます。(Export all Text)
出力する場合は基本はWith namesで出力すると思いますが、
Csvも選べます。With namesは.txtはNameとテキストが=で区切られて出力されます。
Csvはカンマで区切られます。
(txt)  CM::lng_track_surface_condition_name_light=Light 
(csv)  CM::lng_track_surface_condition_name_light,Light
テキスト形式はUTF8、CRLF,BOMなしです。
★ここで注意があります。
インポートはcsv(カンマ区切り)は受け付けてくれません。
受け付けてくれるのは、txt(=区切り)だけです。
これでかなりハマりました…
編集して保存すれば、日本語化したlocresが手に入ります。

3:パックする時の注意点

Game Mediationさんの記事を中心に補足しながら説明します。
記事の中心はdataToPack.txtの書き方です。
テキストの書き方ですが、端的に言うと、

A:書き込むファイルが入っているフォルダのパス  B:そのフォルダがゲーム内のどの位置に対応するかの指示

を記入します。
これを設定するには、オリジナルのフォルダ構造を知らないといけません。

Game.locresファイルを例に取ります。
Pakファイルを解凍すると、enのgame.locresファイルは、
解凍フォルダ\WRC\Content\Localization\Game\Windows\en\Game.locresとなっています。

ゲームインストフォルダを調べると。
EA SPORTS WRC(ゲームのインストルート)\WRC\Content\色々となっています。(Contentの下にLacalizationフォルダはありません)

B:の../../../はインストールフォルダ(EA SPORTS WRC)を示します。
なので、
Outputのフォルダ内が、
Output\Localization\Game\Windows\en\Game.locresとなっているとして、
A:がE:\UEWork\OUTPUT\*としていた場合、(Output以下の全フォルダを書き込みたいので最後に*が入っている)

B:は../../../WRC/CONTENT/とする必要があります。
(Contentフォルダ内のLocalizationフォルダがある)

A:のOUTPUTフォルダが、B:インストフォルダ\WRC\Contentの場所であることを指示しています。

あとB:の¥\のフォルダ区切りスラッシュ/に変わりますので間違えないようにしてください。

書き方参考例として載せておきます。
"E:\UEpack\OUTPUT\*" "../../../WRC/Content/"
(OUTPUTフォルダ内のものが、ゲームのContentフォルダ内に配置される。)
読んでもなかなかややこしいですが、トライ&エラーで頑張ってください。

4:MODの作成

パックするファイルは変更するファイルだけで良いようです。
変更したファイルだけをパックして、pakフォルダにいれるとそのファイルを先に読み込んでくれます。

ただ、すべてが上手くいくかはわかりません。ここらへんに関しては私もまだ他の人ができているからできているだけです。

EA WRCの場合、
pakchunk0-WindowsNoEditor_0_P.pakのファイル名にして、
CONTENT\PAKフォルダに入れればMODとして機能します。
(オリジナルはpakchunk0-WindowsNoEditor.pak)
ただし、
EA WRCはゲームの起動オプションに -fileopenlog を入れる必要があります。
入れていないと、下のような警告が出て、起動しません。

参考


EA WRCの言語ファイルの動き:
EA Appの言語設定でゲームの言語が決まるようです。日本語の場合は、最初にen-USが読み込まれます。(各言語ファイルへのアクセス)
そこで見つからなかったものは、enに読みに行きます。(フォールバック基本ファイル)
そこでも見つからなかったらIDが表示されます。
MODを作る際は、en-USとフォントだけをパックして入れておけば、新しいテキストなどができても、それらは英語で表示(enから読み込まれる)されるだけで、ゲームに支障はでなさそうです。(バージョン毎にアップデートしなくて良くなります。)
あと、フォントはttfフォントの拡張子をufontに変えただけでした。

もし日本語化ファイルを手に入れている人はご自身でトライしてみても良いでしょう。

この記事が気に入ったらサポートをしてみませんか?