(Steam)9th Dawn III(Unity製ゲーム) の 日本語化を含めた多言語化の可能性について(Multi Language)
◆はじめに
多言語化がある程度は出来るのではないかと予想しています。なぜ可能性なのか、また実際に行った方法をメモとして残しておきます。今回はSteam版の9th Dawn IIIで行いましたが、Unity製であれば同様の手法が取れると思います。
◆9th Dawn IIIというゲームについて
記事を書いた現時点でSteam版は対応言語が英語のみ。IとIIの2つの過去シリーズがあり、これらも英語のみでしかプレイが出来ない状況です。過去のシリーズの日本語化について調べましたが構造上出来ないようで、このシリーズをプレイしようとすると英語が不得意な方は内容を把握してのプレイは困難であることが容易に想像できます。
◆ゲーム内部を調べる
これらを解決するために、まずこのゲームの構造や内部を確認してみました。9th Dawn IIIに関してはUnityで制作されており、一般的なUnity製であればゲームの変更を施す各種ツールが揃っていることもあり、それらのツールを用いれば比較的容易に改変などが行えるので試しました。実際に使用したツール名の記載はしますが、画面や詳細な解説はしません。
まずはUnityExというツールで各ファイルを取り出してゲーム内のテキスト類を探してみましたが発見できず、次にILSpyやdnSpyでプログラム内部を調べたところ、コード自体は難読化もされていないので読みやすく、会話やアイテム名などの文字列がプログラム内部にコーディングされている状態でした。一部の文字列を除く殆どがコーディングされているようです。
◆単一言語の日本語化
プログラム内部の英語の文字列を日本語の文字列に単純に変更する手法をとり、ゲームを起動したところ文字化けする状態で起動しました。次に、表示するフォントを特定できたので既存のものから置き換えたところ、日本語の文字列表示をする事ができました。コーディングされたすべての文字列を日本語やその他の言語に変更し、対応しうるフォントに置き換えれば単一言語ではあるが容易に行える状態にはなりました。実際に置き換えた画像をSteamのスクリーンショットとして投稿してあるので見たことがある方も居るかもしれません。
しかし単純に元の文字列を置き換えている関係上、ゲームのパッチによりバージョンが更新されるたびに、そのコーディングを調べ直しそれらの文字列を全て変更する必要があります。可能か不可能かといえば可能ではあるが、維持しなければならないと考えるととても簡単には行えない現状があります。
またコーディングされたプログラムを置き換える関係上、そのプログラムを単体か差分パッチとして配布するのは、一般的な解釈で著作権やら他の法律に絡む大きな問題があるように思える。
◆プラグインMOD
そこで、問題を解決できそうな代案が無いか調べてみたところ、BepInEx というものを発見しました。これはUnity製のものであればプラグイン形式でMOD導入を行えるようにするものらしい。
実際に9th Dawn IIIでも試してみたところBepInEx経由で動作しているのを確認できました。このBepInExの非常に良い点は、ゲーム本体のプログラム等の既存ファイルを上書きや変更することなく動作する点です。プラグイン形式のMODの為それにそったプラグインを制作する必要がありますが試す価値はありそうです。
まずは試しにと、Visual Studio2019でC#でクラスライブラリを作成し、ゲームを起動後にコンソール上に文字を表示するだけの"Hello World"プラグインMODですが、動作を確認する最低限のものですが制作は出来ました。C#はいままで触ったことがなかったですが動いたのでよしとしてます。C#の知識があればもっと深いところまで行けそうな雰囲気です。
現状はこのあたりで制作を止めています。これらを行う上で参考にしたサイトは下にリンクを残しておきます。
◆多言語対応のプラグインMOD化構想
※ここから先は予想など曖昧な点が多いです。
このBepInExを経由したプラグインを使用する際にHarmony(HarmonyX)というライブラリを使い、特定のプログラムコードを乗っ取り、プログラムコードが実際に動くの前もしくは後に独自のコーディングが行えたり、既存の変数を変更できるようなのです。これにより本来できない動作を加えることが可能なようです。
ゲーム側の内部の内容に入りますが、このゲームの特徴として会話の文字列やアイテム名などもほぼ全てがコーディングされています。そのなかで、会話文表示のプログラム部は、コーディングされた文字列を引き渡して1文字づつ表示するようなプログラムが内部に存在していました。
簡単に説明すると会話をさせたいときは毎回その命令を経由して文字を表示しています。そのほかアイテムの説明等も毎回表示する際にはなんらかの形で文字列を扱ってるのでそれらをうまく使えないかと考えました。
まず表示する前の文字列の情報をMODで乗っ取り、その文字列をGoogleやDeepL等の翻訳サイトで翻訳し、結果を本来の文字列の変数に渡すようにすれば現状の英語のみの表示から、無理やり多言語化(マルチランゲージ Multi Language)が出来るのではないかと。元々コーディングされている文字列は必要になります。会話表示プログラム部等が変更されない限りは、本体が更新された場合でも変更する必要がない利点がありそうです。
※C#上からGoogle翻訳を容易に行うためのGoogleTranslateFreeApi というフリーのライブラリがあるのでそれらを使えば翻訳の実装が楽になるかもしれません。
毎回翻訳し、その結果を出すのでは無駄が多いので、翻訳を行った文字列は翻訳前の文字列と一緒に言語ファイルのテキスト(CSV,JSON等)に保存し、以後は言語ファイル内に翻訳前と同じ文字列が存在があれば、翻訳後の文字列を読み込むようにすれば極端な遅延も起こりにくい仕組みにはなりそうです。本体の更新で追加された文字列に関しては、翻訳する状況になれば勝手に追加翻訳できるので意識する必要が無くなります。言語ファイルの翻訳精度を含めた完成度は追々詰められば良い。
最終的には複数の言語ファイルの切り替えや、言語に対応したフォントデータを外部のアセットとして用意し都度切り替えを行えればと。
ここまでが多言語化の可能性についてです。制作を行っていない以上どの辺りまで出来るのかはわかりませんが、実現可能な方は是非チャレンジを!
◆さらなる問題
ここまでの事がすべて可能であったとしても、次の問題があります。
こういったMODプログラムを制作できたとしても、言語関連はいろいろな問題発生する恐れがあるので、開発元であるvalorwareに事前に連絡し配布許可を取る必要があると思います。
この点も考慮し、個人でDiscordを使用し管理者であるvalorwareへメンションでメッセージを書きましたがそれに対する返答はありませんでした。
見逃した可能性も考慮し確実に目に入る形を取りたかったので、valorwareに対して、DMにてMODの可否を条件もあるならば返答してほしいという旨で問い合わせました。残念ながらDMでも一切返答はありませんでした。たぶん今後も来ないと思います。
多言語化の情報は伝えなかったのが悪かったのかは正直分かりません。現実はこのような結果でしたので、一番重要な問題だけが残りましたね。
◆最後に
これ以上開発元へ個人としてのアクションを起こすことは無いので日本語化や多言語化を実現したい方は各自で対応していただければと思います。
個人的な意見ですが、MODがあることで人気を得ている作品も少なからずあるのでSteam版(PC)に関してはインディーメーカーあるが故の柔軟な対応を示してほしかったのですね。
以上
◆使用したツールやライブラリ名称
ILSpy、dnSpy、UnityEX、BepInEx(HarmonyX)、Visual Studio、GoogleTranslateFreeApi
◆参考サイト
お~るげ~むず(仮) :日本語化や各種ツールの使用方法等 https://agk.saloon.jp/
craftopiamodder @ ウィキ:BepInExの導入、プラグインの制作の日本語解説https://w.atwiki.jp/craftopiamodder/pages/11.html