PC ゲーム Sunless Sea + DLC Zubmariner 日本語化と日本語化ファイル解析メモ
PC ゲーム Sunless Sea + DLC Zubmariner 日本語化と日本語化ファイル解析メモです。
PC ゲーム Sunless Sea + DLC Zubmariner 日本語化手順
Sunless Sea と DLC Zubmariner の日本語化ファイルは こちらのアップローダ で公開されています。
Steam 版 Sunless Sea + DLC Zubmariner 日本語化方法
日本語化の動作確認するためにインストールした Steam 版 SUNLESS SEA と Steam 版 DLC Zubmariner です。
インストール後、日本語化ファイルを配置するためのフォルダを生成するため、一度ゲームを起動させておきます。
Steam 版 SUNLESS SEA でインストール先フォルダを開きたい場合、Steam ライブラリからプロパティ画面を開き、ローカルファイルにある 「参照...」 ボタンをクリックすることでインストール先フォルダにすぐにアクセスできます。
または、Steam ライブラリでタイトルを右クリック → 管理 → ローカルファイルを閲覧、をクリックすることでインストール先フォルダを開くこともできます。
アップローダから Steam_ssjptr_1224.zip をダウンロードして展開・解凍します。
Steam_ssjptr_1224 フォルダにある japanese_translation フォルダをコピーします。
japanese_translation フォルダには日本語に翻訳された json ファイルが含まれています。テキストエディタで編集可能。
このファイルは GOG 版の日本語化ファイル の GOG_ssjptr_1224.zip に含まれているものとまったく同じものです。
そのため、GOG 版の japanese_translation フォルダ を流用しても日本語化できるようになっています。
コピーした japanese_translation フォルダを %USERPROFILE%/AppData/LocalLow/Failbetter Games/Sunless Sea/addon
フォルダに配置します。(参考:%USERPROFILE% を開く方法)
配置先の addon フォルダがない・見つからない場合、ゲームを起動してから再度アクセスしてみてください。
japanese_translation フォルダの配置先場所は GOG 版と共通 です。
次に Steam_ssjptr_1224.zip に含まれている、Steam用dll フォルダにある Sunless.Game.dll ファイルをコピーします。
Steam 版 のインストール先 Sunless Sea_Data\Managed
フォルダに Sunless.Game.dll ファイルがあるので、先ほどコピーした Steam用dll フォルダの Sunless.Game.dll ファイルに差し替えます。
ゲームを起動して日本語化されているかどうか確認します。
日本語化ファイル Sunless.Game.dll に差し替えた場合、元の dll ファイルと比べてゲーム起動後のタイトル画面に到達するまで、時間がかかるようになります。
以下、クリックすると日本語化した Steam 版 SUNLESS SEA のスクリーンショットが開きます。
ゲーム内設定 Options → Video Settings にある UI scale と Font scale はともに最小値(デフォルト)1x 時のスクリーンショットです。両設定をバランスよく上げることで文字が見やすい大きさに調節することができます。
GOG 版 Sunless Sea + DLC Zubmariner 日本語化方法
日本語化の動作確認するためにインストールした GOG 版 Sunless Sea と GOG 版 DLC Zubmariner です。
インストール後、日本語化ファイルを配置するためのフォルダを生成するため、一度ゲームを起動させておきます。
アップローダから GOG_ssjptr_1224.zip をダウンロードして展開・解凍します。
GOG_ssjptr_1224 フォルダにある japanese_translation フォルダをコピーします。
japanese_translation フォルダには日本語に翻訳された json ファイルが含まれています。テキストエディタで編集可能。
このファイルは Steam 版の日本語化ファイル の Steam_ssjptr_1224.zip に含まれているものとまったく同じものです。
そのため、Steam 版の japanese_translation フォルダ を流用しても日本語化できるようになっています。
コピーした japanese_translation フォルダを %USERPROFILE%/AppData/LocalLow/Failbetter Games/Sunless Sea/addon
フォルダに配置します。(参考:%USERPROFILE% を開く方法)
配置先の addon フォルダがない・見つからない場合、ゲームを起動してから再度アクセスしてみてください。
japanese_translation フォルダの配置先場所は Steam 版と共通 です。
次に GOG_ssjptr_1224.zip に含まれている、GOG用dll フォルダにある Sunless.Game.dll ファイルをコピーします。
GOG 版 Sunless Sea のインストール先 Sunless Sea_Data\Managed
フォルダに Sunless.Game.dll ファイルがあるので、先ほどコピーした GOG用dll フォルダの Sunless.Game.dll ファイルに差し替えます。
ゲームを起動して日本語化されているかどうか確認します。
日本語化ファイル Sunless.Game.dll に差し替えた場合、元の dll ファイルと比べてゲーム起動後のタイトル画面に到達するまで、時間がかかるようになります。
Epic 版 Sunless Sea + DLC Zubmariner 日本語化方法
日本語化の動作確認するためにインストールした Epic 版 Sunless Sea と Epic 版 DLC Zubmariner です。
GOG 版の日本語化ファイル GOG_ssjptr_1224.zip を使うことで日本語化可能です。
GOG 版の日本語化ファイルに含まれる Sunless.Game.dll ファイルを使用すると バグが発生する可能性が高い ということで、Sunless.Game.dll ファイルの上書きは非推奨という案内が 2021/10/28 に出されています。
インストール方法は GOG 版 Sunless Sea と同じです。
PC ゲーム Sunless Sea + DLC Zubmariner 日本語ファイル解析メモ
PC ゲーム Sunless Sea および Sunless Sea の日本語化ファイル を解析した時のメモです。
日本語化の活動内容については、5ch に当時のスレ住人による解析記録や日本語化情報などが残っています。
Sunless Sea ではゲームエンジンに Unity を使用しているため、海外で公開されているツールを使うことで配信プラットフォーム問わずこのゲームで使われているテキストやフォントを、かんたんにエクスポート・インポートすることが可能となっています。
今回の調査では Sunless Sea の日本語化ファイル に含まれている日本語化用 dll ファイルについて、どのようなやり方で日本語化したのか、記録を見つけることはできませんでした。
そこでこちらで試行錯誤してみた結果、dll ファイルを日本語化するにあたっておそらく使われたと思われるツール及びその方法を見つけることができたので、その内容を公開します。
Sunless Sea + DLC Zubmariner - UnityEX を使った翻訳ファイルエクスポート・インポート
UnityEX を使うことでゲーム内に表示される一部のテキストファイルをエクスポート・インポートができます。UnityEX を使い方については下部にある関連記事の過去記事より確認してください。
上の画像は UnityEX を使ってゲームインストール先 Sunless Sea_Data フォルダにある resources.assets ファイルから、同フォルダ内の Unity_Assets_Files\resources
フォルダにエクスポートされたテキストファイルです。
すべてではないですが、このうちいくつかのテキストファイルがゲーム内で英語を表示するテキスト文字が含まれています。
日本語化ファイル に含まれる json ファイルはこちらのテキストファイルから流用したものと思われます。
試しに 日本語化ファイル に含まれる json ファイルを txt に拡張子を変換して UnityEX でインポートしてみましたが、日本語で表示することはできませんでした。
WinMerge で UnityEX でエクスポートしたテキストファイルと、日本語化ファイル の json ファイルを比較してみたところ、構成内容がまったく異なっておりました。(events.json、events.txt はそのままの形式で比較すると非常に時間がかかるため注意)
おそらくファイル内容の差異が原因で json → txt に変更したファイルを UnityEX でインポートしただけでは、日本語化はできないようです。
上の画像は UnityEX でエクスポートしたテキストファイル(events.txt)に日本語文字を追加し、UnityEX でインポートした後のスクリーンショットです。
ゲーム内で追加文字(ノート内に表示されている最初の文面 Three decades ago, ~ の先頭にひらがなの 「あ」 を追加)が表示されていることが確認できます。
このように UnityEX でエクスポートしたテキストファイルの英文表示箇所を日本語に書き換えてインポートすることで、日本語が表示できるようにもなっています。
ただ、エクスポートしたテキストファイルや日本語化ファイルの json ファイルも含めて、一部のファイルは改行なし 1行で記述されているため、テキストエディタで編集したいときは非常に不便です。
JSON Online Editor のような JSON エディタサービスなどを使って整形してから編集したほうがよいでしょう。(events.json、events.txt のように 20MB もあるファイルをオンラインサービスで整形すると非常に時間がかかるため注意)
Sunless Sea + DLC Zubmariner - UnityEX を使ったフォントファイルエクスポート・インポート
UnityEX を使うことで別のフォントに変更することができます。
2020年12月に こちらの記事 でフォントの変更方法が公開されていましたが、どういう理由かわかりませんが 2021年2月時点こちらで試した限りでは少しやり方が変わっていました。
以下、こちらで確認できた UnityEX を使ったフォント変更方法です。
ゲームインストール先 Sunless Sea_Data フォルダにある resources.assets ファイルをバックアップしてから UnityEX で開きます。
Type 列をクリックしてソートし Type 128(Font)フォントファイル(~.font_raw) を選択、右クリックから Export with convert でエクスポートします。
UnityEX を使って Unity_Assets_Files\resources\Fonts
フォルダにエクスポートされた ~.ttf(DroidSerif~、TrajanPro~)フォントファイルです。Steam 版 では一部 ~.otf 形式でエクスポートされます
このフォルダに使いたいフォントファイルに差し替えて、ファイル名をエクスポートしたファイル名に変更します。
Unity_Assets_Files\resources
フォルダにある ttf フォントファイルを、リネーム(名前変更)した UD デジタル教科書体 NK-B(UDDigiKyokashoNK-B-03.ttf)フォントファイルにすべて差し替えたところです。(全部のフォントを変更する必要はありませんが、ここでは変更したフォントの動作確認テストのため、すべて差し替え)
ちなみに UD デジタル教科書体 NK-B(UDDigiKyokashoNK-B-03.ttf)フォントファイルは Windows 10 Fall Creators Update(バージョン 1709)以降の C:\Windows\Fonts
フォルダにある UDDigiKyokashoN-B.ttc ファイルを、ttc → ttf に変換するサイト を使って入手したものです。
Steam 版 では一部のフォントファイルが ~.otf 形式となっていますが、ファイル名が同じであれば ttf 形式のフォントファイルでも一応問題ないようです。
ただ動作が確実に保証されているわけではないので事前に使いたい otf フォントを用意しておくか、ttf → otf 変換サイト を使うなどして otf ファイルに差し替えたほうがいいかもしれません。
Unity_Assets_Files\resources
フォルダに変更したいフォントファイルに差し替えた後、UnityEX で Import files ボタンをクリックしてインポートします。
UnityEX でインポートしたフォントファイルの Size が反映されたら、フォントファイルの差し替えは完了です。
ゲームを起動してフォントが変更されているかどうか確認します。
以下、クリックすると UD デジタル教科書体 NK-B フォントに変更したスクリーンショットが開きます。
ゲーム内設定 Options → Video Settings にある UI scale と Font scale はともに最小値(デフォルト)1x 時のスクリーンショットです。両設定をバランスよく上げることで文字が見やすい大きさに調節することができます。
Sunless Sea + DLC Zubmariner - dnSpy を使った Sunless.Game.dll ファイル英語・日本語編集方法
Sunless Sea 日本語化ファイル に含まれる Sunless.Game.dll ファイルを導入することで、言語ファイルの json ファイルだけでは日本語化できなかった部分が日本語で表示できるようになります。
Sunless.Game.dll ファイルを何らかの方法で編集して日本語化しているのはすぐ予想できましたが、バイナリエディタで覗いてみてもそれらしい箇所はわからず、仮にその場所がわかってもバイナリエディタ上で文字を編集するのはできれば避けたいところ。
ふと、デコンパイラツールで dll ファイルを開けば編集できるのではないかと思い試してみたところ、文字の編集ができるようになりゲームで編集した文字を表示することができました。以下、そのやり方を紹介します。
dnSpy で Sunless Sea 日本語化ファイル の Sunless.Game.dll ファイルを開きます。
ここでは例としてゲーム終了時の確認メッセージを編集してみます。Sunless.Game.UI.Menus → MainMenu → ExitGame までを開き、右クリックで Edit Method C(#)... をクリックします。
Edit Code 画面が表示されるので、ここで追加・変更したい文字に編集したら Compile ボタンをクリックして画面を閉じます。
ここでは適当に先頭文字にひらがなの 「あ」 を追加します。
元の画面に戻るので、メニューから File → Save Module をクリックします。Save Module 画面が表示されるので OK ボタンをクリックします。
これで Sunless.Game.dll ファイルの文字編集ができたので、ゲームを起動して編集した文字が表示されるかどうか確認します。
ゲーム中に編集した文字が表示されたら成功です。
今回は dnSpy を使って文字を編集することに成功しましたが、おそらくほかのデコンパイラツールでも同様なことが可能だと思われます。
Sunless Sea + DLC Zubmariner - dnSpy と grep を使った Sunless.Game.dll ファイル日本語データ検索方法
dnSpy では Search 画面(画像右下)で探したい文字を入力することで検索できますが、Search For 欄にある項目を適切に設定しないと検索に引っ掛かりません。
デフォルトでは 「All of the Above」 に設定されていますが、今回のような翻訳文字列(ゲーム中に表示される文字)を検索する場合は 「Number/String」 に設定してから検索することで、目的の文字を見つけることができます。
この方法では特定の文字を検索できますが、すでに日本語化されている Sunless.Game.dll ファイルから日本語訳のみを一気に検索したい場合には向いていません。
そこで、以下の検索方法を思いつきました。内容はコードファイルに出力(エクスポート)して grep の正規表現で検索するというものです。
dnSpy で Sunless.Game.dll ファイルを開いた状態から、メニューから File → Export to Project をクリックします。
Export to Project 画面が表示されるので Folder(保存先フォルダ)を設定して Export ボタンをクリックします。
grep を使って正規表現で検索します。ここでは 秀丸エディタ を例に説明します。
dnSpy の Export to Project で保存したフォルダを指定、正規表現にチェックマーク、検索ファイルは cs ファイルを指定、検索する文字列を [^ -~。-゚\t\n]
にして検索を開始します。
正規表現は ここの記事 を参考にして、さらに改行を除外するため \n
を付加した形になっています。
目的の日本語文字列が検索できたら成功です。