見出し画像

How to 日本語化~GoDot篇(追記)

はじめに

Godotというゲームエンジンがありますが、このゲームのファイルはパックされていることもありますので、そのアンパックの方法を紹介したいと思います。

とは言え、Godot製ゲームは実行ファイル(.EXE)にデータ類が結合されたものもあり、その場合はEXE内データが優先されてしまうため、抽出したデータが利用できないことやGodot標準の言語ファイル(*.translation)の場合、フォントが画像の場合はまだ解析ができていないため日本語化できません。

そのため、今回は運よく外部テキスト、ダイナミックフォントの場合に限ったものとなりますのでご了承ください・

サンプルゲーム:Steam Martial Law(無料)

追記

2022/05/22
・godotpcktool.exeによるリパックの方法を追記しました。

.pckファイル

Martial Lawのpckファイル

Godotのファイルは実行ファイル(*.exe)+パックファイルもしくはエンベッドタイプ(実行ファイルにパックファイルが取り込まれたもの)があります。パックファイルは改変されていなければ拡張子が「.pck」となっています。またファイルヘッダはGDPCとなっています(上図参照)。

エンベッドタイプ

エンベッドタイプは実行ファイルの最後が上図のようにGDPCで終了しています(ただし、Godotでエクスポートする際にバイナリーフォーマットが64bitでない場合のみ)。

現状Godot製ゲームかどうかの確認は上記の方法になりますので覚えておきましょう。

アンパックツール

.pckファイルをアンパックするには下記のツールを使う必要があります。

godot-unpackerは実行するためにpythonが必要です。後者は実行ファイル形式なので特に用意は不要です。前者はエンベッドタイプにも対応しており複雑な機能はないので使いやすい。後者はエンベッドタイプには対応しておらず、コマンドラインで引数を指定しなければならないなど面倒な部分もあります。

pythonのインストール

godot-unpackerを使われる場合のみ:
インストールされていない方はhttps://www.python.org/の「Downloads」から「Download Python 3.10.4」と書かれた黄色いボタンをクリックし、ダウンロードされた「python-3.10.4-amd64.exe」を実行してインストールしてください。

一番下の「Add Python 3.10 to PATH」にチェックを必ず入れる
Customize installationを選択
そのまま全て選択でOK
インストール先を簡単な場所に変更
(上記なら「d:\python\Python310」に変更しています)

上図のようにしてインストールしてください。
最初の「Add Python 3.10 to PATH」にチェックは重要です(この作業は環境変数にPathを追加するというものです)。またインストール先はご自身の環境に合わせてドライブ、フォルダを変更してください(Dドライブがない方はCドライブでも問題ありません)。

godot-unpackerのダウンロード

https://github.com/tehskai/godot-unpackerへ行き、上部にある緑色のボタン「Code」をクリックします。その中にある「Download ZIP」をクリックしてダウンロードします。ダウンロードしたアーカイブにある「godot-unpacker.py」を取り出しておきます。

テキストエディタでgodot-unpacker.pyを開いて7行目の
unpack_containers = True

unpack_containers = False
にして保存しておいてください(大文字小文字に注意)。

GodotPckToolのダウンロード

https://github.com/hhyyrylainen/GodotPckToolの右にある「Releases」の下にある1.7(Latest)をクリックし、画面が変遷したら「godotpsktool.exe」とある部分をクリックして実行ファイルをダウンロードします。ダウンロードしたファイルがツール本体となります。

アンパック方法

私はデスクトップにGodot_unpackというフォルダを作成し、godot-unpacker.pyとgodotpsktool.exeを入れています。その中に対象となるパックファイルをコピーし作業します。もちろん、ゲームフォルダーに直接アンパッカーを置いて作業しても構いません。

godot-unpacker.pyの場合

今回のサンプルゲームをインストールされていると思いますが、その中にある「martial-law.pck」をコピーします。

アンパックは非常に簡単でgodot-unpacker.pyの上にmartial-law.pckをドラッグ&ドロップ(D&D)するだけです。ファイルサイズによりますがDOS窓が開いてアンパックされる様子が自動的に流れ、終了したら勝手に閉じます。

補足:
本来はコマンドラインを開き
python godot-unpacker.py martial-law.pck
とするのが本来の使い方です。
それがD&Dで可能なのはpython本体へのPathを環境変数で通しているからです。「Add Python 3.10 to PATH」にチェックを入れたのはこのためでもあります。

ファイル群はoutputフォルダが自動的に作成され、その中にアンパックされます。ただし対応していない場合、本来メッセージが表示されますが上記の方法では確認することができません(outputフォルダが作成されないのでそれで判断するしかありません)。

GodotPckTool.exeの場合

本来であればコマンドプロンプトを開いてアンパックする必要がありますが、batファイルを作成してアンパックする方法を紹介します。

godotpcktool.exe -p %~1 -a e -o %~1%_unpacked
pause

テキストエディタに上記2行をコピー&ペーストします。そのファイルをエンコード「UTF-8 BOMなし」もしくは「SHIFT-JIS」で「UNpack.bat」という名前でgodotpcktool.exeがある場所へ保存しておきます。

GodotPckTool.exeがあるフォルダへBATファイルを保存

後はこのBATファイルの上に対象のファイルをD&Dするだけです。アンパックされたファイルは「対象ファイル_unpacked」というフォルダに入ります(BATファイルでそのように指定しているため)。
こちらは実行ファイルにエンベッドされたものは対応できません。

日本語化への道

基本的な日本語化と同じでテキストとフォントを探すことから始めます。

ゲーム内文章

複数言語に対応しており、アンパックした中にtranslationフォルダがあり、その中に「*.translation」があればGodot標準のローカライズファイルとなります。このファイルは特殊なバイナリファイルになっており、今のところ私にはお手上げとなっています。

単言語の場合、作り方によるので一概に言えませんが*.tscnファイルに入っていたり、テキストファイルに入っていたりします。

サンプルゲームをアンパックしたファイルは1100もあるのでMeryなどの「ファイルから検索」ができるものを利用します。そのためにはゲーム内で使用されている文章をチェックしておきます。ゲームプレイ中のテキストが一番いいでしょう。
Martial Lawであれば新規ゲームでプレイし始めて主人公が話す「Tomorrow's Christmas Eve.」がいいでしょう。

ファイルから検索(Merry)

Merryを開き、ファイルから検索を呼び出します。上図のように「検索する文字列に「Tomorrow's Christmas Eve.」を入力し、検索するフォルダーはアンパックしたファイルがあるフォルダを指定します。「サブフォルダーも検索する」にチェックしておきましょう。

ファイル結果

検索が終了すると含まれているファイルの場所などが表示されます。場所をみるとlocaleフォルダに*.poファイルがあり、そこへ各言語のファイルがあることがわかります。8行目に表示されているのは英語用なのだと予測がつきます。

localeフォルダ

早速localeフォルダを見てみると各言語のファイル群が存在しているのがわかります。対応していない中国語まであるのが謎ですが。

英語は複数のファイルにゲーム内文章があるため上記のファイルでゲームで実際に対応しているものを書き換えてみます。なお、このpoファイルはテキストファイルなのでテキストエディタで開くことが可能です。

fr.poをテキストエディタで開いた場合

どの言語でも構いませんが、今回はfr.po、つまりフランス語を日本語にしてみたいと思います。先の「Tomorrow's Christmas Eve.」を検索してみます。

「Tomorrow's Christmas Eve.」を検索

上図のようにみつかりましたか? *.poファイルは参考とした言語と翻訳したい言語が対になっています(今回の場合は英語が参考言語、フランス語が翻訳言語)。
msgidが参考言語、msgstrが翻訳言語となっていますので、「Demain c'est la veille de Noël.」を日本語にします。ただし、まだフォントは調査していないため日本語が表示されるかどうかを確認するため、「Tomorrow's Christmas Eve.//明日はクリスマスイブだ」とします。もし、これで日本語が表示されればフォントが対応していることになりますし「Tomorrow's Christmas Eve.//」までしか表示されなければフォントを探す必要があるということです。

確認方法

*.pckファイルは削除するかリネーム

Godot製ゲームはリパックしなくてもアンパックしたファイル群をゲームフォルダーへコピーすれば起動するようになっています。ただし、元の*.pckファイルは削除するかリネーム(*.pck.backupなど)して認識しないようにしておく必要があります。

コピーした後(Martial Lawフォルダ)

準備が整ったらゲームを起動します。OptionからLanguage「fr」を選択します。フランス語になってしまいますが、分かりにくいでしょうが「Retour」をクリックし戻り、「Nouveau jeu」をクリックしてゲームを始めます。

最初のシーン

残念ながら「Tomorrow's Christmas Eve.//」としか表示されませんでした。つまりフォントが対応していないということになります。次はフォントを探します。

フォント

基本は「Fonts」フォルダを探すことです。これも作り方によるのであくまで方法の1つでしかありません。このゲームの場合、¥interfaces¥theme¥fontsフォルダという少し深い部分にあります。中にはfontsフォルダにはない場合もありますので*.ttf/*.otfを探すといいでしょう。

fontsフォルダ

上図がfontsフォルダです。*.tresファイルはフォントが指定してあるファイルなのですが、こちらを書き換えてもダメなので*.ttfを直接置き換えます。

menu.dynamicfont.tresをの名前から察するにメニューに使用するフォントが定義されていると思われます。中身を開いてみると「ARCADECLASSIC.ttf」が指定されていますので、まずはこのフォントを置き換えてみます。
フォントはなるべく見分けのつきやすいものにします(ゲームにあったフォントにするのは最後です。このゲームの場合ドットフォントが使用されていますが、最初からそれに置き換えると本当に置き換わったか分かりにくいため。面倒ですが日本語化とはそういうものです)。

今回は「にくまるフォント」を使ってみたいと思いますので、サイトからダウンロードしてきたフォントをfontsフォルダにコピーします。07にくまるフォント.otfという名前ですので、リネームして「ARCADECLASSIC.ttf」にします(拡張子が違いますが、このゲームエンジンも特に問題なく認識してくれます。もちろんゲームエンジンによります)。元のARCADECLASSIC.ttfを残しておきたい場合はリネームをしておいてください。

ではゲームを起動してみましょう。

フォントを置き換えた画面

本来メニューに使用されているフォントはドットフォントでしたので問題なく置き換えができたことがわかるかと思います。

最終チェック

次に日本語が表示できるかを確認します。
fr.poを開きます。検索で「New Game」を検索し、Nouveau jeuとあるところを「新規ゲーム」にしてみます。その勢いで、Continue、Options、Credits、Exitの項目も「つづきから」「オプション」「クレジット」「終了」と書き換えておきましょう(書き換える場所を間違えないように)。

msgstrのほうを書き換えます。ダブルクォーテーションを消さないように注意。

書き換えが済んだら保存してゲーム開始! もちろん、フランス語を置き換えているのでオプションから言語を「fr」にするのを忘れずに。

ゲームを起動し、言語を「fr」に変更した後

めでたく日本語が表示できました。
同様に他のフォントも置き換えていきます。どれがどこに使用されているか不明ですので*.tresのファイル名で推測したりしますが、まずは全て置き換えてみるといいでしょう。
それが終わったら*.poファイルを開いてゲームが開始されるまでに表示されるゲーム内文章や開始直後のテキストを翻訳して日本語にしていきます。
特徴あるフォントにしておけばどこで使われているか一目瞭然なので使われていないフォントは元に戻してもいいかもしれません。

リパック方法

godotpcktool.exe限定となりますがリパックし、*.pckに戻す方法がわかりましたので紹介します。この方法を取る場合は*.pckを置き換えるようになるので上記の「日本語化への道|確認方法」の作業は不要です。

godotpcktool -p %~1 -a r -f %~1.new
godotpcktool -p %~1.new -a a %~1_unpacked --remove-prefix %~1_unpacked
pause

上記のコードを「REpack.bat」として保存してください。
このBATファイルにオリジナルの「*.pck」をD&Dすることでアンパックしたファイル群が収められている「*.pck_unpacked」フォルダの更新されたファイルが追記され、最終的に「*.pck.new」というファイルで出力されます。

全体の流れ

  1. アンパック

  2. 編集(翻訳、フォントなどの置き換え)

  3. リパック

このツールは一般的なリパックとは違い、アンパックしたフォルダをそのままリパックするという形ではありません。
上記BATファイル1行目でオリジナルの*.pckをリパックに適した形にします。出力ファイルは*.pck.newとなります。新しく出力されたパックファイルにアンパックされたフォルダ内データを追加するという形になります(フォルダ構成などはそのままにしておく必要があると思われます)。

編集していないデータがあったとしても*.pck.newに追加されるわけではなく、編集されたデータのみが追加されるようです。
この方法で作られた「*.pck.new」の「.new」を削除したものをオリジナルのものと置き換えてください(Martial Lawで動作確認済み)。

日本語化ファイル(下翻訳版)

Twitterのフォロワーであるブリッツ氏より下翻訳版ではありますが、日本語化を提供していただきましたので興味ある方は下記Googleドライブからダウンロードしてください(翻訳してくださった氏に感謝!)。
ダウンロード:Googleドライブ

最後に

今回はフォントがダイナミックフォントだった場合ですが、画像フォントの場合はまだ未調査となっています。これらは今後調査していきたいとは思っています。同様に「*.translation」も解析ができればと思っています(日本語化してみたいゲームがあるので)。

あまりGodot製ゲームは多くありませんが、もし出会うことがあり、日本語化したいというものがあればぜひとも挑戦していただければと思います。
サンプルゲームとして紹介した「Martial Law」も評価の高いゲームなのでこの記事を見てだれか日本語化してくれればと思っています。

内容が気になりましたらぜひサポートをお願いします。そのサポートが継続の力になります。よろしくお願いします。