PC ゲーム リメイク版 Shadowgate(2014)で日本語を表示する方法
PC ゲーム リメイク版 Shadowgate(2014) で日本語を表示する手順を確立することができましたので、そのやり方を公開します。
本記事では Unity ゲームエンジンの nGUI および各種解析ツールやソフトウェアを使い日本語フォントを作成・改造を行い、それを Unity ゲームへ実装して日本語フォントを表示する方法が含まれています。
(2022年5月時点)私が調べた限りでは nGUI 絡みでの Unity ゲーム日本語化 Mod 作成・解説記事は見つけていません。
今回の発見により今まで Unity ゲームの nGUI ビットマップフォントが原因で日本語化ができなかったゲームが、本記事の内容を活用することで日本語化を実現できる可能性が高くなるでしょう。
PC ゲーム リメイク版 Shadowgate(2014)基本情報
リメイク版 Shadowgate(2014) は 2012年に行われたクラウドファンディング Kickstarter で目標金額を達成したことにより、ゲーム完成後各プラットフォームで配信された経緯があります。ちなみに、AUTOMATON の FC 版『シャドウゲイト』にみる、あるべきローカライズの姿 の記事では過去作の伝説的な日本語ローカライズ内容を確認できます。
上の画像は Kickstarter での投資特典として、Humble Bundle のアカウント で様々なデジタルコンテンツを PC 版 DRM-Free バージョンとして受け取った内容です。
PC 版については日本語ローカライズに関する情報はなく、いずれ誰かが有志日本語化をやってくれるだろうと待ち続けていましたが、本記事を公開するまで本作の日本語化プロジェクトや国内有志の方は確認していません。海外では唯一 Zone of Games Forum でロシア語化スレ を見つけましたが、ちょくちょく進捗はあったものの 2022年5月時点では完成には至っていないようです。
幸いゲームエンジンは Unity だったので、いままでの日本語化に関する経験や情報、充実した解析ツールを駆使すれば日本語化を実現できるのではないかと思い解析したところ、これが想像以上に大変な内容でした。
このゲームで日本語を表示する方法は一つ一つの内容を細かく見ると(複合化・暗号化部分を除く、Unity ゲーム日本語化解析経験者か Unity ゲーム日本語化 Mod 作成経験者から見れば)それほど難しい内容ではありません。ただ、そこまでたどり着くのに時間と手間をかけて様々な試行錯誤を行い多くの手順を踏み、何度も問題に遭遇しながらもすべて解決できた結果、なんとか日本語を表示することに成功しています。
今回の解析で各種ツールを駆使し、(確認できた範囲ではおそらく)今までにないやり方で奇跡的に日本語フォントの実装とテキストデータを書き換えることができました。もしかしたらすでに誰かがやっている方法かもしれませんが、そういった情報がまったく見つからなかったので、この解析内容を発表・公開できたのはおそらく初ではないかと思います。
この記事では成果物の一部のファイルを配布するとともにそのやり方をすべて公開します。あとは誰かが翻訳すれば、日本語化した Shadowgate(2014) をプレイできるようになるでしょう。
PC ゲーム リメイク版 Shadowgate(2014)日本語表示テスト環境
今回、日本語フォントの導入と日本語表示テストするためにインストールした Steam 版 および GOG 版 Shadowgate(2014)です。どちらの配信プラットフォームでも このあと紹介する日本語フォントファイルを導入 することで、日本語が表示できるようになることを確認しています。
Steam 版 Shadowgate(2014) でインストール先フォルダを開きたい場合、Steam ライブラリからプロパティ画面を開き、ローカルファイルにある 「参照...」 ボタンをクリックすることでインストール先フォルダにすぐにアクセスできます。
または、Steam ライブラリでタイトルを右クリック → 管理 → ローカルファイルを閲覧、をクリックすることでインストール先フォルダを開くこともできます。
Shadowgate(2014)用日本語フォントサンプルファイル公開&インストール方法
こちらで作成した PC ゲーム リメイク版 Shadowgate(2014) - UnityEX インポート用ビットマップ日本語フォント BIZ UDPMincho(PC-Shadowgate2014-Unity4-nGUI-JPFont-BIZUDPMincho-Regular-UnityEX-Import-assets-20220412.7z) を公開します。フォントは Morisawa BIZ UDMincho を使って作成しました。
Steam 版 および GOG 版 Shadowgate(2014)で日本語フォントが表示されるのを確認しています。
翻訳ファイルは含めていません。編集可能な言語データはこちらで確認できた範囲では 2種類あります。翻訳方法は こちら と こちら で説明します。
フォントを作成したい方にはフォント解析情報を こちら で、フォントの作成方法は こちら で説明します。
Shadowgate(2014)ゲームインストール先 Shadowgate_Data フォルダにある sharedassets0.assets・sharedassets1.assets・sharedassets2.assets ファイルに日本語フォントファイルを取り込むことで日本語表示を実現しています。あとで元のデータに戻したい場合は事前に 3つの assets ファイルをバックアップしておくか、ゲームの整合性チェック機能(Steam 版、GOG Galaxy 版)を使うことで元に戻せます。
PC ゲーム リメイク版 Shadowgate(2014) - UnityEX インポート用ビットマップ日本語フォント BIZ UDPMincho(PC-Shadowgate2014-Unity4-nGUI-JPFont-BIZUDPMincho-Regular-UnityEX-Import-assets-20220412.7z) をダウンロードして展開・解凍します。
Unity_Assets_Files フォルダがあるので、ゲームインストール先 Shadowgate_Data フォルダに配置します。
以下、日本語フォントのインストール方法です。2種類のインストール方法があるのでいずれかの方法を実行します。1番目の方法はマウス操作で完結しますが、いくつか手順を踏む必要があります。2番目の方法はバッチファイル(.bat)作成・実行するので、一気にインストールできます。
Shadowgate(2014)用日本語フォントインストール方法その 1。
Shadowgate_Data フォルダにある sharedassets0.assets ファイルを UnityEX で開きます。
UnityEX で sharedassets0.assets ファイルを開いたら Import files ボタンをクリックしてインポートします。
続けて同じように Shadowgate_Data フォルダにある sharedassets1.assets ファイルを UnityEX で開きます。
UnityEX で sharedassets1.assets ファイルを開いたら Import files ボタンをクリックしてインポートします。
最後に Shadowgate_Data フォルダにある sharedassets2.assets ファイルを UnityEX で開きます。
UnityEX で sharedassets2.assets ファイルを開いたら Import files ボタンをクリックしてインポートして完了です。
Shadowgate(2014)用日本語フォントインストール方法その 2。
Shadowgate_Data フォルダに UnityEX.exe ファイルと空の bat ファイル(ファイル名は任意)を新規作成して配置します。
bat ファイルには以下のバッチスクリプトをコピー&ペーストして保存後、bat ファイルを(PC 環境によっては管理者権限で)実行して Unity_Assets_Files フォルダにあるファイルをまとめてインポートします。
UnityEX.exe import sharedassets0.assets
UnityEX.exe import sharedassets1.assets
UnityEX.exe import sharedassets2.assets
pause
PC ゲーム リメイク版 Shadowgate(2014) - UnityEX インポート用ビットマップ日本語フォント BIZ UDPMincho(PC-Shadowgate2014-Unity4-nGUI-JPFont-BIZUDPMincho-Regular-UnityEX-Import-assets-20220412.7z) ファイルインポート後の各 assets ファイルのファイルサイズです。
複数あるオリジナルのフォントファイル(ビットマップ)に、日本語ビットマップデータを追加する形をとっているため、ファイルサイズが大きくなっています。そのためか、ゲーム中のメモリ使用量が日本語フォントインストール前と比べて、さらに数百 MB 単位で消費する点に注意してください。
以下、BIZ UDPMincho フォントを使ったスクリーンショットを公開します。翻訳していないため字幕テキストは英語のままです。翻訳・編集方法については こちら と こちら で説明します。
PC ゲーム リメイク版 Shadowgate(2014)フォントファイル解析
PC ゲーム リメイク版 Shadowgate(2014) では nGUI で作成されたビットマップフォントを使っています。
雑用担当の備忘録さんのところで nGUI のバイナリデータ解析記録の記事 が残っていますが、Unity 用解析ツールを使うことでフォントファイルの特定と座標などのフォーマット情報を確認することができます。
以下、Unity 解析ツール AssetStudio と UABE 2.2 stable d を使った nGUI フォントデータの特定方法です。
AssetStudio を起動します。
PC ゲーム リメイク版 Shadowgate(2014) ゲームインストール先にある Shadowgate_Data フォルダを AssetStudio へドラッグアンドドロップして開きます。
Shadowgate_Data フォルダを AssetStudio で開いたら、メニュー Filter Type を All から MonoBehaviour にチェックマークに入れます。
Asset List タブを選択して検索欄に UIFONT を入力します。
Name 列に UIFont が列挙されるのでどれかクリックすると Select Assembly Folder 画面(上の画像)が表示されるので、ゲームインストール先にある Shadowgate_Data\Managed
フォルダを開き、フォルダーの選択ボタンをクリックします。
間違ってキャンセルしたり違うフォルダを選択してしまった場合は最初からやり直します。
Preview タブに表示された UIFont の MonoBehaviour 内容の一部です。
こちらの画像は Dump タブに表示された UIFont の MonoBehaviour 内容の一部です。synctam の雑談日記にある Fallout Shelter のフォントについて 記事の「2. 座標情報」のところで、同じ MonoBehaviour 内容であることが確認できます。
PC ゲーム リメイク版 Shadowgate(2014) で使われている nGUI フォントの座標データ(MonoBehaviour)はこの方法で特定できます。
ただし、AssetStudio ではわかるのは Path ID までで、どの assets ファイルに該当する UIFont の MonoBehaviour が含まれているかは(多分)わかりません。(ツールの使い方を完全に把握しているわけではないので、本当に調べる方法がないかどうかは不明)
どの assets ファイルに UIFont の MonoBehaviour があるのかを特定するには以下の 2種類の方法があります。
1つ目の方法は次に説明する解析ツール UABE 2.2 stable d を使って各 assets ファイルを開き、該当する Path ID まで移動して Type が MonoBehaviour : UIFont(Assembly-CSharp.dll) になっているものを見つける方法です。
確実な方法ですが assets ファイル数や目的の MonoBehaviour が多い場合は大変な作業になります。今回は特定するファイル数があまり多くなく、assets ファイル名の番号が先頭にあるものに格納されていたのですぐに特定できました。
もう一つの方法は後から判明した機能ですが、AssetStudio の Options → Export options 画面を開き、Export 欄にある Group exported assets by に設定されている type name を、source file name に変更してエクスポートする方法です。
エクスポート後に assets ファイル名のフォルダが生成されるので、すぐに assets ファイルが特定できるという方法です。ただ、エクスポートされた MonoBehaviour のファイル名は、Path ID と関係のないファイル名となっています。
どの assets ファイルからエクスポートされた MonoBehaviour かを判断するには、1つ目の方法で説明した UABE 2.2 stable d を使います。assets ファイルを開き Path ID に移動して Type が MonoBehaviour : UIFont(Assembly-CSharp.dll) があるかどうか調べていくことになります。
ほかの nGUI フォントを使った Unity ゲームであれば、同じ手順で MonoBehaviour を特定することができると思われます。
MonoBehaviour が特定できたので、次に各 MonoBehaviour がどのビットマップフォント(テクスチャ)ファイルを参照しているのかを調べる方法です。
解析ツールには UABE 2.2 stable d を使用します。
UABE 2.2 stable d を起動して MonoBehaviour(UIFont)がある assets ファイルを開きます。(画像では sharedassets0.assets ファイルを開いている状態)
Asset info 画面でメニュー Tools にある Get script information をクリックします。
Unity ゲームによっては UABE 2.2 stable d で asset ファイルや level ファイルを開いたときに Get script information を実行しないと、この後実行する View Data の内容がすべて表示されなかったり、エクスポート・インポートで必要なデータが欠落することがあります。
そのため、UABE 2.2 stable d では必ず Get script information を実行したほうがよいでしょう。
Path ID 863 の Type が MonoBehaviour : UIFont(Assembly-CSharp.dll)となっており、AssetStudio での検索結果の Path ID と一致 していることが確認できます。
View Data ボタンをクリックして中身を確認します。
sharedassets0.assets ファイルの Path ID 863 MonoBehaviour(UIFont)の Asset Data 画面です。
PPtr<$Material> mMat → [view assets] → Material Base → UnityPropertySheet m_SavedProperties → map m_TexEnvs → Array Array → 0 → pair data → UnityTexEnv second → PPtr<Texture> m_Texture まで階層をたどっていくと FileID = 0, PathID = 6 が見つかります。
これが Path ID 863 の MonoBehaviour(UIFont)が参照している nGUI ビットマップフォントのテクスチャ ID になります。
ちなみに PPtr<Texture> m_Texture 内にある [view assets] を展開することで、nGUI ビットマップフォントテクスチャ情報が確認できます。(UABE 2.2 stable d で Path ID 6 に移動して View Data で表示される内容と同じ)
AssetStudio ではテクスチャプレビュー機能があるので、見つかった Path ID のテクスチャ内容を確認してみます。
AssetStudio のメニュー Filter Type で Texture2D にチェックマークに入れます。
Asset List タブを選択して検索欄に ATLAS を入力します。
Name 列にある Path ID 6 の GameUIAtlas が、UABE 2.2 stable d で sharedassets0.assets を開いた際 Path ID 863 の MonoBehaviour(UIFont)で PPtr<Texture> m_Texture(FileID = 0、PathID = 6)で指していた nGUI ビットマップフォントテクスチャです。
上の画像のようにフォント以外のアイコンがある含まれるテクスチャは nGUI と呼ばれる Unity アセットを使って作成されたものとみていいようです。
おそらく、TextMesh Pro が使われる前の古いゲーム(エンジン)ではビットマップフォントに nGUI を採用しているゲームが多かったのではないかと思われます。
元は有償アセットでしたが古いバージョンのフリー版が公開されており、環境を用意すればだれでも nGUI でフォントが作成できるようになっています。ただ、今回の日本語化フォントを作成するにあたってはフォント以外の画像データはそのまま残す必要がありますので、ビットマップフォント画像の合成や座標データの修正・統合する手間はあります。
sharedassets0.assets の Path ID 6 の GameUIAtlas テクスチャには 3種類の英数字フォントがあります。
MonoBehaviour(UIFont)でこの GameUIAtlas テクスチャを参照しているのは、sharedassets0.assets の Path ID 863 と sharedassets2.assets の Path ID 494 の MonoBehaviour(UIFont)の 2種類のみです。
GameUIAtlas 画像中央にある太字の英数字フォントはゲーム内では未確認のためおそらく未使用です。
画像左上 にあるわずかに縁ありフォントがゲーム画面中央下ボックス内テキストフォント、画像右下 の縁ありフォントはオープニング字幕となっています。
これは実際に日本語フォントに差し替えたときにフォント変更箇所を確認しています。つまり、この時点でのフォント解析ではほぼ同じ形状のフォントが多い Shadowgate(2014)ではフォント使用箇所の特定はまだできません。
どちらの MonoBehaviour(UIFont)が GameUIAtlas 画像内にあるフォントを参照しているのかを特定するには、MonoBehaviour(UIFont)の x, y 座標データから判断します。
雑用担当の備忘録さんの記事 によると画像左下が原点(0, 0)(※)となっています。
※ MonoBehaviour(UIFont)の内容(Rectf mUVRect)によって原点座標は異なります。今回 nGUI で作成した日本語フォントの場合(Rectf mUVRect の float 型 x と y が 0、float 型 width と height が 1)、左上が原点座標になります。
index 65(Unicode の A)を例に x, y 座標より Path ID 863 は x = 37、Path ID 494 は x = 415 となっているので、Path ID 863 MonoBehaviour(UIFont)は画像左上のわずかに縁ありフォント、Path ID 494 MonoBehaviour(UIFont)は画像右下の縁ありフォントと判断できます。
以上の方法で Shadowgate(2014) フォント解析結果を以下まとめました。このフォント解析結果をもとに 日本語フォントを作成 します。
- sharedassets0.assets
- (UABE: Path ID、UnityEX: #)6 - GameUIAtlas.tex
- フォント - 3種類(うち 1種類は未使用)
- MonoBehaviour(UIFont)フォントサイズ - 35、45
- nGUI テクスチャ縦横サイズ - W2048xH1024
- (UABE: Path ID、UnityEX: #)6 - GameUIAtlas.tex
- sharedassets1.assets
- (UABE: Path ID、UnityEX: #)14 - InventoryItemsAtlas.tex
- フォント - 2種類(うち 1種類は未使用)
- MonoBehaviour(UIFont)フォントサイズ - 45
- nGUI テクスチャ縦横サイズ - W2048xH2048
- (UABE: Path ID、UnityEX: #)19 - Tips.tex
- フォント - 1種類
- MonoBehaviour(UIFont)フォントサイズ - 42
- nGUI テクスチャ縦横サイズ - W2048xH2048
- (UABE: Path ID、UnityEX: #)24 - MenuAtlas.tex
- フォント - 3種類
- MonoBehaviour(UIFont)フォントサイズ - 35、42、60
- nGUI テクスチャ縦横サイズ - W2048xH2048
- (UABE: Path ID、UnityEX: #)14 - InventoryItemsAtlas.tex
- sharedassets2.assets
- (UABE: Path ID、UnityEX: #)23 - MapAtlas.tex
- フォント - 2種類
- MonoBehaviour(UIFont)フォントサイズ - 35
- nGUI テクスチャ縦横サイズ - W2048xH2048
- (UABE: Path ID、UnityEX: #)31 - InventoryAtlas.tex
- フォント - 1種類
- MonoBehaviour(UIFont)フォントサイズ - 35
- nGUI テクスチャ縦横サイズ - W2048xH1024
- (UABE: Path ID、UnityEX: #)23 - MapAtlas.tex
- sharedassets0.assets
- (UABE: Path ID、UnityEX: #)863 - UnityEX: sharedassets0_00001.-2(MonoBehaviour: Garamond42.UIFont)
- フォント名 - Adobe Garamond Pro
- フォント形状 - 縁わずかにあり
- フォントサイズ - 45(base 39)
- 参照 nGUI フォント - sharedassets0.assets → (UABE: Path ID、UnityEX: #)6 - GameUIAtlas.tex
- フォント使用箇所 - プレイ画面下部中央ボックス内フォント
- (UABE: Path ID、UnityEX: #)863 - UnityEX: sharedassets0_00001.-2(MonoBehaviour: Garamond42.UIFont)
- sharedassets1.assets
- (UABE: Path ID、UnityEX: #)1035 - UnityEX: sharedassets1_00001.-2(MonoBehaviour: Immortal_34_Tips.UIFont)
- フォント名 - immortal_34
- フォント形状 - 縁あり
- フォントサイズ - 42(base 31)
- 参照 nGUI フォント - sharedassets1.assets → (UABE: Path ID、UnityEX: #)19 - Tips.tex
- フォント使用箇所 - チュートリアル Tips メッセージフォント
- (UABE: Path ID、UnityEX: #)1040 - UnityEX: sharedassets1_00002.-2(MonoBehaviour: Garamond42_invitem.UIFont)
- フォント名 - Adobe Garamond Pro
- フォント形状 - 縁わずかにあり
- フォントサイズ - 45(base 39)
- 参照 nGUI フォント - sharedassets1.assets → (UABE: Path ID、UnityEX: #)14 - InventoryItemsAtlas.tex
- フォント使用箇所 - インベントリアイテムメッセージフォント?
- (UABE: Path ID、UnityEX: #)1041 - UnityEX: sharedassets1_00003.-2(MonoBehaviour: Immortal_28_Menu.UIFont)
- フォント名 - immortal_28
- フォント形状 - 縁あり
- フォントサイズ - 35(base 26)
- 参照 nGUI フォント - sharedassets1.assets → (UABE: Path ID、UnityEX: #)24 - MenuAtlas.tex
- フォント使用箇所 - メニュー・オプションボタンフォント、アチーブメント文、ヘルプ内容、キーバインドキーボタン名、セーブ・ロードスロット内容(日付・時刻・難易度)、セーブスロット DELETE ボタンと YES・NO ボタンなど
- (UABE: Path ID、UnityEX: #)1042 - UnityEX: sharedassets1_00004.-2(MonoBehaviour: Immortal_34_Menu.UIFont)
- フォント名 - immortal_34
- フォント形状 - 縁あり
- フォントサイズ - 42(base 31)
- 参照 nGUI フォント - sharedassets1.assets → (UABE: Path ID、UnityEX: #)24 - MenuAtlas.tex
- フォント使用箇所 - オプション項目フォント、DEFALUT・APPLY・RESET ボタンフォント、システムタイトルフォント SAVE GAEM と LOAD GAME とセーブ・ロードリストのスロット名(地名)、QUIT システムメッセージ、セーブファイル DELETE 時のシステムメッセージ、アチーブメント名、キーバインド項目、ヘルプ項目、ニューゲーム Normal・Classic など
- (UABE: Path ID、UnityEX: #)1043 - UnityEX: sharedassets1_00005.-2(MonoBehaviour: Immortal_48_Menu.UIFont)
- フォント名 - mmortal_48
- フォント形状 - 縁あり
- フォントサイズ - 60(base 44)
- 参照 nGUI フォント - sharedassets1.assets → (UABE: Path ID、UnityEX: #)24 - MenuAtlas.tex
- フォント使用箇所 - システムタイトルフォント QUIT・DELETE GAME など
- (UABE: Path ID、UnityEX: #)1035 - UnityEX: sharedassets1_00001.-2(MonoBehaviour: Immortal_34_Tips.UIFont)
- sharedassets2.assets
- (UABE: Path ID、UnityEX: #)494 - UnityEX: sharedassets2_00001.-2(MonoBehaviour: Immortal_28_Game.UIFont)
- フォント名 - immortal_28
- フォント形状 - 縁あり
- フォントサイズ - 35(base 26)
- 参照 nGUI フォント - sharedassets0.assets → (UABE: Path ID、UnityEX: #)6 - GameUIAtlas.tex
- フォント使用箇所 - オープニング字幕
- (UABE: Path ID、UnityEX: #)495 - UnityEX: sharedassets2_00002.-2(MonoBehaviour: Inv_Gold.UIFont)
- フォント名 - INV_Spell_font
- フォント形状 - 縁あり(カラー: ゴールド?)
- フォントサイズ - 50(base 37)
- 参照 nGUI フォント - sharedassets2.assets → (UABE: Path ID、UnityEX: #)31 - InventoryAtlas.tex
- フォント使用箇所 - インベントリタブフォント、フォント名からインベントリのスペルフォント?
- (UABE: Path ID、UnityEX: #)496 - UnityEX: sharedassets2_00003.-2(MonoBehaviour: immortal_28_mapbase.UIFont)
- フォント名 - immortal_28
- フォント形状 - 縁あり
- フォントサイズ - 35(base 26)
- 参照 nGUI フォント - sharedassets2.assets → (UABE: Path ID、UnityEX: #)23 - MapAtlas.tex
- フォント使用箇所 - マップ地名ドロップダウンリストフォント
- (UABE: Path ID、UnityEX: #)497 - UnityEX: sharedassets2_00004.-2(MonoBehaviour: immortal_plain_white_28.UIFont)
- フォント名 - immortal_plain_white_28
- フォント形状 - 縁わずかにあり
- フォントサイズ - 35(base 26)
- 参照 nGUI フォント - sharedassets2.assets → (UABE: Path ID、UnityEX: #)23 - MapAtlas.tex
- フォント使用箇所 - マップ地名フォント
- (UABE: Path ID、UnityEX: #)494 - UnityEX: sharedassets2_00001.-2(MonoBehaviour: Immortal_28_Game.UIFont)
PC ゲーム リメイク版 Shadowgate(2014)日本語フォント作成方法
フォント解析情報 をもとに日本語フォントを作成します。
Shadowgate(2014)からテクスチャファイル(nGUI ビットマップフォント)と MonoBehaviour(UIFont)ファイルエクスポート
フォント解析結果 から日本語フォント作成に必要なファイルを UnityEX と UABE 2.2 stable d を使ってエクスポートします。
ここでエクスポートしたファイルは、作成した nGUI フォント から エクスポートした日本語フォントデータ(テクスチャ、座標データ) を、GIMP で日本語ビットマップフォントの合成 と 日本語フォントから座標データの移植 で使用します。
最初は UnityEX を使ってテクスチャファイル(nGUI ビットマップフォント)をエクスポートします。
Shadowgate_Data フォルダにある sharedassets0.assets ファイルを UnityEX で開きます。
#6 GameUIAtlas.tex を選択して右クリックで Export with convert or Raw を選択します。
Shadowgate_Data\Unity_Assets_Files\sharedassets0\Textures
フォルダに GameUIAtlas.tex.dds ファイルがエクスポートされます。
Shadowgate_Data フォルダにある sharedassets1.assets ファイルを UnityEX で開きます。
#14 InventoryItemsAtlas.tex・#19 Tips.tex・#24 MenuAtlas.tex を選択して右クリックで Export with convert or Raw を選択します。
Shadowgate_Data\Unity_Assets_Files\sharedassets1\Textures
フォルダに GameUIAtlas.tex.dds ファイルがエクスポートされます。
Shadowgate_Data フォルダにある sharedassets2.assets ファイルを UnityEX で開きます。
#23 MapAtlas.tex・#31 InventoryAtlas.tex を選択して右クリックで Export with convert or Raw を選択します。
Shadowgate_Data\Unity_Assets_Files\sharedassets2\Textures
フォルダに GameUIAtlas.tex.dds ファイルがエクスポートされます。
次に UABE 2.2 stable d を使って MonoBehaviour(UIFont)ファイルをエクスポートします。
Shadowgate_Data フォルダにある sharedassets0.assets
ファイルを UABE 2.2 stable d で開きます。
Asset info 画面のメニュー Tools にある Get script information をクリック後、Path ID 863 の MonoBehaviour(Type: MonoBehaviour : UIFont(Assembly-CSharp.dll))選択して Export Dump ボタンをクリックします。
任意の場所に MonoBehaviour(UIFont)テキストファイルをエクスポートします。
ここでエクスポートしたファイル名は unnamed asset-sharedassets0.assets-863-MonoBehaviour.txt となっています。
ちなみに目的の Path ID がわかっている場合、Asset info 画面のメニューにある View → Go to assets からジャンプすることができます。
Go to 画面で File ID に assets ファイルを選択(ここでは sharedassets0.assets を選択)、Path ID に数字を入力(ここでは 863 を入力)して OK ボタンをクリックすることですぐに目的の Path ID まで移動します。
Shadowgate_Data フォルダにある sharedassets1.assets
ファイルを UABE 2.2 stable d で開きます。
Asset info 画面のメニュー Tools にある Get script information をクリック後、Path ID 1035 と 1040~1043 の MonoBehaviour(Type: MonoBehaviour : UIFont(Assembly-CSharp.dll))選択して Export Dump ボタンをクリックします。
複数項目を選択して Export Dump した場合は Select a dump type 画面が表示されます。
3つのエクスポートオプションが選択可能ですが、ここではデフォルトの UABE text dump (can be imported) のままで任意の場所に MonoBehaviour(UIFont)テキストファイルをエクスポートします。
ここでエクスポートしたファイル名は unnamed asset-sharedassets2.assets-494-MonoBehaviour.txt、unnamed asset-sharedassets2.assets-495-MonoBehaviour.txt、unnamed asset-sharedassets2.assets-496-MonoBehaviour.txt、unnamed asset-sharedassets2.assets-497-MonoBehaviour.txt となっています。
Shadowgate_Data フォルダにある sharedassets2.assets
ファイルを UABE 2.2 stable d で開きます。
Asset info 画面のメニュー Tools にある Get script information をクリック後、Path ID 494~497 の MonoBehaviour(Type: MonoBehaviour : UIFont(Assembly-CSharp.dll))選択して Export Dump ボタンをクリックします。
複数項目を選択して Export Dump した場合は Select a dump type 画面が表示されるので、デフォルトの UABE text dump (can be imported) のまま任意の場所に MonoBehaviour(UIFont)テキストファイルをエクスポートします。
ここでエクスポートしたファイル名は unnamed asset-sharedassets2.assets-494-MonoBehaviour.txt、unnamed asset-sharedassets2.assets-495-MonoBehaviour.txt、unnamed asset-sharedassets2.assets-496-MonoBehaviour.txt、unnamed asset-sharedassets2.assets-497-MonoBehaviour.txt となっています。
エクスポートした各 MonoBehaviour(UIFont)テキストファイルをテキストエディタで開き、Rectf mUVRect 以下 PPtr<$UIAtlas> mAtlas までのデータをまとめて削除して保存します。
削除した個所については Unity ゲームエンジンで作成した nGUI フォント から エクスポートした日本語フォントの MonoBehaviour(UIFont)データ より 移植 します。
この方法は ブリッツ氏の Blacksad Under the Skin 日本語フォントデータ MonoBehaviour テキストファイル編集方法 を参考にしています。
Unity ゲームエンジン 4.7.2 と nGUI 2.7.0 Free Version インストール
Shadowgate(2014) と同じゲームエンジンのメジャーバージョンの最終バージョン Unity ゲームエンジン 4.7.2 とフォント作成用の nGUI 2.7.0 Free Version をインストールします。
どちらも無料でインストールして使うことができます。
Unity download archive にある Unity 4.x タブから、Unity 4.7.2 にある Unity Editor を選択してダウンロード&インストールします。古いゲームエンジンのためか Unity Hub は使いません。
Unity download archive から Unity 5 より前のバージョンがダウンロードできなくなってしまったようです。
ダウンロードする手段として Internet Archive からダウンロードするか、Unity Forum にあるような URL にバージョンを直打ちで指定して直接ダウンロードするしかなさそうです。
インストール手順については こちらのサイト が参考になります。
注意点として Unity 4 をインストールするにあたっては Unity アカウントが必要なようです。
私はもともとアカウントを作成済みだったのですんなりインストールできましたが、持ってない人はここでアカウントを作成することになると思います。
Unity 4.7.2 に nGUI 2.7.0 Free Version をインストールします。
nGUI 公式サイト から Free Version にある here リンクをクリックして ngui270.unitypackage ファイルをダウンロードします。
Unity 4.7.2 を起動してメニュー Assets → Import Package → Custom Package ... をクリックして、ダウンロードした ngui270.unitypackage を開きます。
Importing package 画面が表示されるので Import ボタンをクリックして nGUI 2.7.0 Free Version をインポートします。
nGUI(ngui270.unitypackage)インポート後に Projetct タブにある Assets フォルダ内に NGUI フォルダが追加され、メニューに NGUI が追加されたらインポート成功です。
これで nGUI フォントを作成できる環境が整いました。nGUI フォントを作成するには BMFont(Bitmap Font Generator)で日本語のビットマップフォントを生成 する必要があります。
BMFont(Bitmap Font Generator)日本語ビットマップフォント作成
BMFont(Bitmap Font Generator) で日本語ビットマップフォントを作成します。
BMFont(Bitmap Font Generator) で作成したビットマップフォントは Unity 4.7.2 にインポートして、nGUI フォント作成機能を使って Shadowgate(2014)用フォントを生成 に使用します。
BMFont(Bitmap Font Generator) の基本的な使い方については ここ や ここ、こちらの動画 などが参考になります。
BMFont(Bitmap Font Generator) で生成したファイルの成果物は PC ゲーム リメイク版 Shadowgate(2014) - BMFont(Bitmap Font Generator)ビットマップ日本語フォント(BIZ UDPMincho)生成&設定ファイル(png、fnt、bmfc)(PC-Shadowgate2014-BMFont-BIZUDPMincho-Regular-bmfc-fnt-png-20220412.7z) として公開しておきます。
以下、今回作成した日本語ビットマップフォントの設定内容です。
BMFont(Bitmap Font Generator) - Font Settings 設定内容その 1。
Font は BIZ UDP明朝(Morisawa BIZ UDMincho) を設定(OS にフォントをインストールしていない場合はその下の Add font file から ttf ファイルを指定)。今回はこの BIZ UDP明朝(Morisawa BIZ UDMincho) フォントのみ使用します。
Charset は日本語フォントを使用する場合 Unicode にします。
Autofit pages は 1 に設定(Size (px)は指定不可)。今回は用意した日本語を含む文字数で、決められたテクスチャ縦横サイズ内にフォントサイズが最大になるようにするために使用します。フォントサイズを直接指定した場合より、フォント生成に多少時間がかかります。
Bold にチェックマーク。ここの設定は任意ですが文字が読みやすくなると思い入れています。
Effets の Outline thickness は 1(縁ありフォント)。こちらも任意設定ですが、一応差し替え対象のフォントに似せるために入れています。
BMFont(Bitmap Font Generator) - Font Settings 設定内容その 2。
Font Settings 設定内容その 1 と同じで、違いは Effets の Outline thickness が 3(縁ありフォント)のみです。同じ理由で差し替え対象のフォントに似せるために入れています。
上記 Font Settings 2パターンとセットで次の Export Options もテクスチャサイズ違い(=フォントサイズ違い)の 2パターン作成します。
BMFont(Bitmap Font Generator) - Export Options 設定内容その 1。
Texture を Width 2048, Height 2048。このテクスチャサイズについては次の Export Options 設定内容その 2 で補足します。
Presets は Outlined text with alpha(A: outline、RGB: glyph)。縁ありフォントにする場合はこの Presets を使うようです。
画像では Presets は Custom になってますが、一度設定した後や設定ファイル(bmfc)を読み込んだ時など自動的に Custom 表記になるようです。ARGB 各項目が Presets にあった設定に切り替わっていれば問題ありません。
BMFont(Bitmap Font Generator) - Export Options 設定内容その 2。
Export Options 設定内容その 1 と同じで、違いは Texture が Width 2048, Height 4096 になっている点のみです。
Texture の縦横サイズについて。nGUI ではインポートしたフォントファイルのテクスチャ縦横サイズが 4096 までしか設定できない ようので、4096 以下にサイズを指定しています。
今回既存のオリジナル nGUI テクスチャに日本語ビットマップフォントを追加する形ですが、すでにあるテクスチャ内容にはフォント以外のアイコンなどがあります。アイコンとフォントが重ならないようにするために、テクスチャ縦横サイズを画像編集ソフトで拡張したうえで空いたスペースに日本語ビットマップフォントを配置 します。
既存のオリジナル nGUI テクスチャは 2048x2048 または 2048x1024 のいずれかのサイズとなっており、4096x4096(※)以内に収めようとすると、空いたスペースに配置できるテクスチャサイズは 2048x2048、2048x4096、4096x2048 のいずれか複数を組み合わせることになります。ただ、2048x4096 と 4096x2048 はお互い範囲内に重なってしまうため、同一テクスチャファイルでは一緒にできない組み合わせになります。
※ nGUI でインポートしたテクスチャサイズは 4096x4096 までしか指定できませんが、画像編集ソフトでそれ以上のサイズに拡大して配置すること自体はできます。ただ、Unity 4 ゲームエンジン上ではどのテクスチャサイズまで問題なく動くかわからない(試していない)ため、今回の記事では念のため nGUI で指定可能な 4096x4096 までを上限としてこのサイズ内にフォントを収めることにしています。
上記の Font Settings 設定内容 1 と 2、Export Options 設定内容 1 と 2、それぞれを組み合わせた 4パターンの縁ありフォントを作成しています。
BMFont(Bitmap Font Generator) - Font Settings 設定内容その 3 です。この設定では縁なしフォントを作成します。
Font Settings 設定内容 1 と 2 とほぼ同じで、違いは Bold のチェックマークはなし、Effets の Outline thickness は 0(縁なしフォント)にしています。
BMFont(Bitmap Font Generator) - Export Options 設定内容その 3 です。
Texture は Width 2048, Height 2048、Presets は縁なしのため White text with alpha(A: glyph、RGB: one)にします。
ボールド体ではない縁なしフォントを作成した理由ですが、Shadowgate(2014)にあるゲーム内マップのフォントが黒一色となっており、フォントが太いと日本語のような字数が多い漢字がつぶれて見えなくなってしまう恐れがあります。そのため、縁ありフォントとは別に作成しています。
BMFont(Bitmap Font Generator) のメニュー Edit → Select chars from file をクリックして、テキストファイルから Unicode 文字一覧を登録します。
文字が登録されているテキストファイルの文字コードは、Font Settings の Charset が Unicode の場合、文字コードは UTF-16 か UTF-8 になっている必要があります。(参考情報 1、参考情報 2)(どちらの文字コードも BOM 付きで改行コードは CRLF)
今回作成した日本語ビットマップフォントの文字一覧は synctam/UnicodeTableForJapaneseGameProduction: ゲーム制作用文字一覧表(UTF-8) から一部利用しました。
4種類あるテキストファイルのうち jis_1_kanji_utf8.txt(JIS 第一水準漢字 2,965文字)と jis_non_kanji.txt(JIS 非漢字 626文字)と ascii_and_other.txt(ascii 他 159文字)の 3種類を新規作成した UTF-16 のテキストファイルに貼り付け、目視で使われることはないであろうと思われる文字を削った 3,480文字を登録に使用しました。
jis_2_kanji_utf8.txt の JIS 第二水準漢字(3,390文字)はテクスチャサイズの都合上、これ以上文字数を増やすと文字が小さくなってしまうため今回登録していません。
上記作成した文字一覧テキストファイルを PC ゲーム リメイク版 Shadowgate(2014) - BMFont(Bitmap Font Generator)文字一覧テキストファイル(UTF-16、3,480文字)(PC-Shadowgate2014-BMFont-Unicode-JPFontText_UTF-16-20220412.7z) として公開しておきます。
一通り設定後、メニュー Optionst → Save bitmap font as... をクリックして名前を付けて保存すると、png と fnt ファイルとして保存されます。この png と fnt ファイルを nGUI フォント作成時に Unity にインポート して使用します。
下にある Save configuration as... から設定ファイルとして bmfc ファイルを保存することができます。同じメニュー内にある Load configuration から bmfc 設定ファイルを読み込むことができます。
Unity ゲームエンジンで nGUI フォント作成
nGUI をインストールした Unity 4 に BMFont(Bitmap Font Generator)で作成した日本語フォントファイル をインポートして nGUI フォントを生成します。
nGUI フォントの作成方法については ここ や ここ、こちらの動画 などが参考になります。
大まかな流れはバージョンや機能は違いますが、synctam 氏の記事、様々なバージョンの TextMesh Pro でフォントを作成する手順 とほぼ同じ内容です。
Unity の Project タブにある Assets フォルダに、BMFont(Bitmap Font Generator)で作成した png と fnt ファイル をドラッグアンドドロップでインポートします。
追加した png ファイル(ファイル名末尾~_0)を選択して、Inspector タブから設定を変更します。
Inspector タブにある Texture Type を Texture から Advanced に変更します。
Default タブにある Max Size を png ファイル縦横サイズの最大値に設定します。2048x4096 の場合であれば 4096 に設定するということになります。
なお、Default タブの Max Size は 4096 以上に設定できません。BMFont(Bitmap Font Generator)でテクスチャサイズを 4096 より上のサイズにしていない のはこのためです。
必須ではないかもしれませんが、Shadowgate(2014)オリジナル nGUI テクスチャフォーマットと同じ仕様に合わせる場合は、Default タブにある Format を RGBA 32bit に、Generate Mip Maps のチェックマークを外す、Wrap Mode を Clamp に、Filter Mode を Trilinear、Aniso Level を 4 に設定します。
以上、設定が終わったら Apply ボタンをクリックして設定を反映させます。
インポートした png のサイズおよび設定が変更されました。
インポートした png ファイル設定変更後、メニュー NGUI → Open the Font Maker をクリックします。
Font Maker 画面で Type が Bitmap になっている状態で、Font Data にインポートした fnt ファイルを、Texture にインポートした png ファイルをドラッグアンドドロップします。
Output にある Font Name に任意のファイル名(ここではインポート元のファイル名の末尾に -nGUI 追加)を入力して、Create a Font without an Atlas ボタンをクリックします。
Project タブの Assets フォルダに、Font Maker 画面で Font Name に入力した 2つのファイルが生成されます。
続けて別の nGUI フォントを生成する場合、Font Maker の Output にある Select に前回生成したファイルが勝手に設定されます。そのままの状態で Create a Font without an Atlas ボタンを押しても問題なく生成されて、その後の Shadowgate(2014)用フォント作成では特に問題はなかったので、ここは特に気にしなくてもよいかと思います。
Font Maker でフォント生成後、メニュー NGUI → Create a Label をクリックします。
Hierarchy タブに追加された Label を選択します。
Inspector タブにある UILabel(Script)の Font に生成した nGUI フォントを設定します。Label を作成した時点で自動的に Font が設定されますので、違うフォントが設定されてしまった場合は変更します。
同じ手順で nGUI フォントを生成して別の Label にも違うフォントを設定します。
作成した nGUI フォント数だけ Label を作成して、1対1 で nGUI フォントを割り当てるようにします。
nGUI フォントの作成と Label の作成とフォントの割り当てが終わったら最後にビルドします。
メニュー File → Build Settings... をクリックします。
Build Settings 画面で Build ボタンをクリックして任意のフォルダに保存します。
次にビルドしたファイルから フォントデータをエクスポート します。
Unity でビルドしたアセットファイルからテクスチャファイル(nGUI ビットマップフォント)と MonoBehaviour(UIFont)ファイルエクスポート
Unity 4 で nGUI フォント作成後ビルド して生成された assets ファイルからフォントデータをエクスポートします。
エクスポート方法は Shadowgate(2014)の assets ファイルからテクスチャファイル(nGUI ビットマップフォント)と MonoBehaviour(UIFont)ファイルエクスポート と同じです。
Unity 4 でビルドして生成された sharedassets0.assets ファイルです。
この assets ファイルからテクスチャファイル(nGUI ビットマップフォント)と MonoBehaviour(UIFont)ファイルをエクスポートします。
UnityEX で sharedassets0.assets ファイルを開きます。
Type: Texture2D の tex ファイル(ファイル名は nGUI フォント作成時に入力したフォント名)を選択、右クリックで Export with convert or Raw を選択して dds ファイルをエクスポートします。
この方法でエクスポートした dds テクスチャファイルを PC ゲーム リメイク版 Shadowgate(2014) - Unity 4 で nGUI フォント(BIZ UDPMincho)を生成、ビルドした assets ファイルから UnityEX でエクスポートした dds ファイル(PC-Shadowgate2014-Unity4-Create-nGUI-BIZUDPMincho-Regular-Font-UnityEX-Export-dds-20220412.7z) にまとめておきましたので公開しておきます。
ちなみに UABE 2.2 stable d で sharedassets0.assets ファイルを開いた場合、作成した nGUI フォントのテクスチャフォーマット内容の確認が可能です。
Asset info 画面のメニュー Tools にある Get script information をクリック後、Texture2D ファイルを選択して View Data ボタンをクリックします。
Unity 4 の nGUI で生成したフォントテクスチャフォーマット内容の Asset Data 画面です。
こちらの画像は UABE 2.2 stable d で Shadowgate(2014)オリジナルの sharedassets0.assets ファイルを開き、Path ID 6 にある GameUIAtlas のフォントテクスチャフォーマット内容の Asset Data 画面です。
Unity 4 の nGUI で生成したフォントテクスチャフォーマット内容と比較すると、名前(Name)・縦横サイズ(Width、Height)・ファイルサイズ(CompleteImageSize)・実データ(TypelessData image data)以外同じ設定値となっているのが確認できます。
これは Unity 4 で BMFont(Bitmap Font Generator)で生成したビットマップフォントファイル をインポートしたときの、ビットマップファイル(.png)の Inspector タブ内にある変更した設定内容 がぴったり合っていたことになります。
UABE 2.2 stable d で sharedassets0.assets ファイルを開きます。
Asset info 画面のメニュー Tools にある Get script information をクリック後、File ID 0 の Path ID の最後尾にある MonoBehaviour(UIFont)を選択して、Export Dump でテキストファイルをエクスポートします。
複数項目を選択して Export Dump した場合は Select a dump type 画面が表示されるので、デフォルトの UABE text dump (can be imported) のまま任意の場所に MonoBehaviour(UIFont)テキストファイルをエクスポートします。
複数の MonoBehaviour(UIFont)がある場合、どのテクスチャファイル(nGUI フォント)を参照しているかどうか確認する方法です。
MonoBehaviour(UIFont)を View Data ボタンから Assets Data 画面を開き、BMFont mFont にある string mSpriteName のフォント名で判断します。
UABE 2.2 stable d でエクスポートした MonoBehaviour(UIFont)テキストファイルをテキストエディタで開き、Rectf mUVRect 以下 PPtr<$UIAtlas> mAtlas までを残す形で、それ以外(上記画像の選択箇所)は削除します。
残したテキストデータ個所については、同じく UABE 2.2 stable d から エクスポートしたオリジナル asset ファイルの MonoBehaviour(UIFont) へ 移植して座標データを修正 します。
UABE 2.2 stable d で sharedassets0.assets ファイルからエクスポートした MonoBehaviour(UIFont)テキストファイルを、PC ゲーム リメイク版 Shadowgate(2014) - Unity 4 で nGUI フォント(BIZ UDPMincho)を生成、ビルドした assets ファイルから UABE でエクスポートした MonoBehaviour(UIFont)テキストファイル(PC-Shadowgate2014-Unity4-Create-nGUI-BIZUDPMincho-Regular-Font-UABE-Export-MonoBehaviour-UIFont-txt-20220412.7z) にまとめて公開しておきます。
上の 7z ファイルにある Export Dump MonoBehaviour txt フォルダにはエクスポート後の無編集の MonoBehaviour(UIFont)テキストファイルを、Fix MonoBehaviour txt フォルダには Rectf mUVRect から PPtr<$UIAtlas> mAtlas までを残してそれ以外を削除した MonoBehaviour(UIFont)テキストファイルに分けて格納しています。
画像編集処理ソフト GIMP でビットマップフォント合成
Shadowgate(2014)の assets ファイルからエクスポートしたテクスチャファイル(nGUI ビットマップフォント) に、Unity 4 で nGUI フォントを作成してビルドした assets ファイル から エクスポートした dds フォント(nGUI ビットマップフォント) を 画像編集処理ソフト GIMP で合成して 1つのテクスチャファイルにまとめます。
Shadowgate(2014)の assets ファイルからエクスポートした dds テクスチャファイル(nGUI ビットマップフォント)) を GIMP で開きます。
Load DDS 画面が開くので、OK ボタンでクリックして続行します。
GIMP で開いた GameUIAtlas.tex.dds ファイルです。
ここではこの GameUIAtlas.tex.dds ファイルを例に日本語ビットマップフォントを合成してみます。ちなみにこのテクスチャファイルの縦横サイズは W2048 x H1024 です。
テクスチャの縦横サイズを拡張して日本語ビットマップフォントを配置します。
メニュー 画像 → キャンパスサイズの変更を選択します。
キャンパスサイズの変更画面です。キャンパスサイズが幅 2048・高さ 1024 となっているのでこれを変更します。
キャンパスサイズを幅 4096・高さ 4096 に変更してリサイズボタンをクリックします。
GameUIAtlas.tex.dds ファイルのキャンパスサイズが幅 2048・高さ 1024 から幅 4096・高さ 4096 に変更しました。
Unity 4 で nGUI フォントを作成してビルドした assets ファイル から、GameUIAtlas.tex.dds に設定したい エクスポートした dds フォント(nGUI ビットマップフォント) をドラッグアンドドロップで追加します。(上の画像で追加したフォント画像サイズは W2048xH4096)
矩形選択モード状態で追加した画像(黄色点線枠)を、キャンパス内右上隅または右下隅に位置をあわせる形で移動(キーボード矢印キー or Shift + 矢印キー)して配置します。
続けて残りのスペースに Unity 4 で nGUI フォントを作成してビルドした assets ファイル から、GameUIAtlas.tex.dds に設定したい エクスポートした dds フォント(nGUI ビットマップフォント) をドラッグアンドドロップで追加します。(上の画像で追加したフォント画像サイズは 2048x2048)
矩形選択モード状態で追加した画像(黄色点線枠)を、キャンパス内左下隅に位置をあわせる形で移動(キーボード矢印キー or Shift + 矢印キー)して配置します。
日本語ビットマップフォント画像の追加・配置が終わったら、複数あるレイヤーを一つのレイヤーに統合します。
メニュー レイヤー → 下のレイヤーと統合を選択します。
再度メニュー レイヤー → 下のレイヤーと統合を選択します。
3つあったレイヤーが一つのレイヤーに統合されました。
合成したビットマップフォントファイルを dds ファイルとして保存します。
メニュー ファイル → 名前を付けてエクスポートを選択します。
画像をエクスポート画面で名前をインポートした時のファイル名(ここでは GameUIAtlas.tex.dds)のままエクスポートボタンをクリックします。
Save as DDS 画面で Compression は None のまま(ほかの設定もデフォルト値のまま)OK ボタンをクリックして保存します。
この方法で保存したファイルは Shadowgate(2014)用日本語フォントサンプルファイル の dds ファイルと同じ内容になります。
ちなみに GIMP で dds ファイルをエクスポートして保存(Compression - None)して UnityEX で dds ファイルをインポートした場合、オリジナル Type の Texture2D id: 4 - RGBA32 から id: 5 - ARGB32 にフォーマットが変更されます。
この状態でもフォント変更は確認できているので、テクスチャフォーマットがオリジナルから変更(id: 4 - RGBA32 → id: 5 - ARGB32)しても問題はなさそうです。
今回この nGUI フォントの合成方法のヒントとなったのが、Knights of Pen and Paper +1 Edition の日本語化調査中に見つけた中文化 Mod です。
上の画像は Knights.of.Pen.and.Paper.CHS.Patch.v1.0.rar ファイルに含まれる Unity アセットファイルを AssetStudio で開き、nGUI フォントが使われている Texture2D の Interface ファイルプレビュー内容です。
Knights.of.Pen.and.Paper.CHS.Patch.v1.0.rar には exe ファイルしかありませんが、Universal Extractor 2 を使うことで中文化 Mod をインストールすることなく Unity ファイルを展開できます。
プレビュー画面左上にオリジナルの nGUI を残す形で(厳密には一部の画像文字アイコンも中文化に書き換え)、テクスチャ領域を拡張して文字を追加していることが確認できます。
解析ツールでは中文化 Mod の座標データ MonoBehaviour(UIFont)テキストファイルのエクスポートができなかったので内容は確認していませんがおそらく x, y 座標データも同じように左上の原点座標から調整しているものと思われます。
エクスポートした MonoBehaviour(UIFont)ファイルのデータ差し替え・座標データ修正作業
Shadowgate(2014)の assets ファイルからエクスポートした MonoBehaviour(UIFont)テキストファイル に、Unity 4 で nGUI フォントを作成してビルドした assets ファイル から エクスポートした MonoBehaviour(UIFont)テキストファイル のデータの一部を移植します。
さらに MonoBehaviour(UIFont)テキストファイルの座標データ(x または y 座標)の値を、GIMP で合成した日本語ビットマップフォント にあわせてすべて書き換えます。座標データの書き換え方法はこの後説明します。
座標データを書き換えた MonoBehaviour(UIFont)テキストファイルを PC ゲーム リメイク版 Shadowgate(2014) - UABE でエクスポートした MonoBehaviour(UIFont)テキストファイル - BMGlyph_data 座標データ調整+フォントサイズ調整済みテキストファイル(PC-Shadowgate2014-UABE-Export-BIZUDPMincho-Regular-Font-MonoBehaviour-UIFont-txt-fix-BMGlyph_data-20220412.7z) にまとめたので公開しておきます。
上記 7z ファイルに含まれている UABE_Font-Resize フォルダにはフォントサイズを調整した MonoBehaviour(UIFont)テキストファイルを格納しています。
一部の MonoBehaviour(UIFont)テキストファイルにある BMFont mFont にある int mSize の値を変更してフォントの大きさを調整しています。Shadowgate(2014)用日本語フォントサンプルファイル ではこちらで設定したフォントサイズを採用しています。
MonoBehaviour(UIFont)テキストファイルのインポート方法は UABE のエクスポート手順と同じで Import Dump から行います。
Import Dump 実行時の画面操作については 複数ファイルをインポートする場合はこちら を、単一ファイルをインポートする場合はこちら の内容を参考にしてください。
ちなみに、日本語サンプルファイル に含まれる MonoBehaviour(UIFont)ファイル(sharedassetsx_0000x.-2)は、UABE でインポートしたアセットファイルを UnityEX でエクスポートしたものです。これを配布用として UnityEX でインポートできるようにしています。
MonoBehaviour(UIFont)テキストファイルの座標データ書き換え方法についてはこちらで 秀丸エディタ 用マクロを作成しました。
PC ゲーム リメイク版 Shadowgate(2014) - UABE でエクスポートした MonoBehaviour(UIFont)テキストファイル BMGlyph_data 座標データ調整用秀丸マクロ(PC-Shadowgate2014-Hidemaru-Macro-UABE-Export-Dump-fix-BMGlyph_data-20220412.7z) として公開しておきます。マクロの中身についてはマクロファイル(.mac)内にコメント文を入れてあるのでそちらを確認してください。
このマクロはテキストファイルにある対象項目を検索・演算(足し算のみ)・置換をしているだけなのですが、書き換え対象が多いと処理に時間がかかります。ほかのプログラム言語(C# や Python など)で行えばもっと処理効率の良いプログラムができるかもしれません。
以下、マクロの使用方法です。マクロの設定方法については 秀丸エディタ マクロ言語(入門用)ヘルプにあるマクロの概要(入門用)マクロの登録と実行について を参照してください。
マクロを実行するための環境設定を行います。
私の PC 環境では何度かマクロを実行した際に「クリップボード履歴の格納に失敗し、タイムアウトしました。~」というエラーメッセージが表示されました。
エラーメッセージの中に秀丸エディタの設定で「クリップボードの監視に新しい方式(Clipboard Format Listener)を使う」を ON(有効化)することで回避できる可能性がある、というメッセージ内容があったのでその設定を行います。
秀丸エディタのメニュー その他 → 動作環境 → 「トラブル対策」の中にある「その他のトラブル対策」ボタンをクリックします。
「クリップボードの監視に新しい方式(Clipboard Format Listener)を使う」にチェックマークを入れて有効化(OFF → ON 表示に切り替え)します。
MonoBehaviour(UIFont)テキストファイルの x 座標データ修正方法について。
UABE からエクスポートした MonoBehaviour(UIFont)テキストファイルをテキストエディタで開き、BMFont mFont 内の各 BMGlyph data にある座標数値(int x =
、int y =
)を GIMP で dds フォントファイル合成 時に原点座標(左上隅)から離れて配置した座標分の値に増やして調整します。
縦座標(y 座標)の変更はなく横座標(x 座標)が原点から離れている場合は int x =
~ の座標値をマクロで一律同じ数値で加算して調整します。
マクロ(Shadowgate2014-UABE-Export-Dump-fix-BMGlyph_data.mac) を実行すると最初のダイアログ画面では調整する座標値がある行の直前の文字列を検索します。キャンセルボタンをクリックすると終了します。
ここでは検索文字列に int x =
を入力しています。=
の前後に空白の半角スペースを入れます。
2番目画面のダイアログでは検索文字列以降にある数字文字列に、加算したい x 座標数値を入力します。キャンセルボタンをクリックするとマクロは終了します。
この MonoBehaviour(UIFont)テキストファイルでは 2048 を入力しています。(今回の日本語ビットマップフォントの例では x 座標はいずれも原点座標から 2048 離れた位置に配置しているので、2048 以外の数値は使っていません)
OK ボタンをクリックすると処理速度アップのため 秀丸エディタ が最小化してマクロ処理を続行します。プログレスバーなどの処理中であることがわかる画面などは表示されません。
今回の BMFont(Bitmap Font Generator)で設定した文字数は 3,480文字 のため、マクロでは 3,480個所の x 座標を修正します。マクロの処理時間は正確には計測していませんが、処理が完了するまでおよそ 3~4 分(5分以内)ほどかかります。
これで int x =
~ の数値すべてに、マクロによってダイアログ画面で入力した数値が加算されて座標値がすべて修正されます。
MonoBehaviour(UIFont)テキストファイルの y 座標データ修正方法について。以下、内容は x 座標データ修正方法と同じです。
MonoBehaviour(UIFont)テキストファイルをテキストエディタで開き、BMFont mFont 内の各 BMGlyph data にある座標数値(int x =
、int y =
)を GIMP で dds フォントファイル合成 時に原点座標(左上隅)から離れて配置した座標分の値に増やして調整します。
横座標(x 座標)の変更はなく縦座標(y 座標)が原点から離れている場合は int y =
~ の座標値をマクロで一律同じ数値で加算して調整します。
マクロ(Shadowgate2014-UABE-Export-Dump-fix-BMGlyph_data.mac) を実行すると最初のダイアログ画面では調整する座標値がある行の直前の文字列を検索します。キャンセルボタンをクリックすると終了します。
ここでは検索文字列に int y =
を入力しています。=
の前後に空白の半角スペースを入れます。
2番目画面のダイアログでは検索文字列以降にある数字文字列に、加算したい y 座標数値を入力します。キャンセルボタンをクリックするとマクロは終了します。
この MonoBehaviour(UIFont)テキストファイルでは 2048 を入力しています。(今回の日本語ビットマップフォントの例では y 座標はいずれも原点座標から 2048 離れた位置に配置しているので、2048 以外の数値は使っていません)
OK ボタンをクリックすると処理速度アップのため 秀丸エディタ が最小化してマクロ処理を続行します。プログレスバーなどの処理中であることがわかる画面などは表示されません。
今回の BMFont(Bitmap Font Generator)で設定した文字数は 3,480文字 のため、マクロでは 3,480個所の x 座標を修正します。マクロの処理時間は正確には計測していませんが、処理が完了するまでおよそ 3~4 分(5分以内)ほどかかります。
これで int y =
~ の数値すべてに、マクロによってダイアログ画面で入力した数値が加算されて座標値がすべて修正されます。
以下、今回の 秀丸エディタ のマクロ作成で、テキストファイルにある対象項目を検索・演算・置換処理をマクロで一通り動作させるために参考にしたサイト一覧です。
PC ゲーム リメイク版 Shadowgate(2014)言語ファイル編集方法
PC ゲーム リメイク版 Shadowgate(2014) のゲーム内に表示される字幕・テキストを編集する方法です。
2015年に 有志によって日本語化されたゲーム 14 スレ にて言及されていますが、Shadowgate(2014) では言語ファイルがテキストファイルで assets ファイルに格納されており、Base64 で暗号化されていることが判明しています。
そのまま複合化してもテキストに変換できずに、以降解析が進展することはなかったようです。
2014年に Zone of Games Forum の Shadowgate ロシア語化スレにある Haoose 氏のコメント に複合化ツールと思われるファイルがすでに公開されていましたが、こちらはダウンロードすることはできませんでした。
これ以上ヒントとなる情報はなくダメもとでこちらで解析してみたところ、dll ファイルを dnSpy でデコンパイルした結果、複合化・暗号化と思われるプログラム部分を発見 し、その処理を CyberChef で変換できるように構築することができました。
以下、Base64 テキストファイルの複合化・暗号化のやり方を説明します。
言語テキストファイル(Base64)エクスポート
PC ゲーム リメイク版 Shadowgate(2014) の assets ファイルから言語テキストファイル(Base64)をエクスポートする方法です。
Shadowgate(2014) ゲームインストール先 Shadowgate_Data フォルダにある resources.assets ファイルを UnityEX で開きます。
#99 ~ #176 にある txt ファイルを選択して、右クリックから Export with convert or Raw を選択して txt ファイルをエクスポートします。
Shadowgate_Data\Unity_Assets_Files\resources
フォルダにエクスポートされた言語テキストファイル(Base64)です。テキストファイル数は全部で 78 ファイルあります。
ちなみにゲームインストール先 Shadowgate_Data フォルダに UnityEX.exe と bat ファイルを配置して、bat ファイルに以下のバッチスクリプトを実行することでも、resources.assets ファイルにある txt ファイルのエクスポートが可能です。
UnityEX.exe export resources.assets -t txt
pause
CyberChef で言語テキストファイル Base64 デコード → AES 複合化
resources.assets ファイルからエクスポートした言語テキストファイル(Base64) を複合化する方法です。
ここではオンラインツールとして CyberChef を使います。基本的な使い方については 入門ハンズオン CyberChef など解説サイトがあるのでそちらを参照してください。
こちらで作成・用意した PC ゲーム リメイク版 Shadowgate(2014) - 言語テキストファイル(Base64 + AES 暗号)複合化用 CyberChef Recipe ファイル(PC-Shadowgate2014-CyberChef-resources_assets-language-txt-Base64-Decode-AES-Decrypt-recipe-20220412.7z) をダウンロードして展開・解凍します。
ダウンロードしたファイルの URL.txt ファイルにあるリンクからブラウザで CyberChef を開くか、CHEF FORMAT.txt・CLEAN JSON.txt・COMPACT JSON.txt ファイルのいずれかのテキストファイルを開き内容をコピーして、CyberChef の Load recipe へ貼り付けて LOAD ボタンをクリックします。
上記画像中央の Recipe 列にこちらであらかじめ作成した Recipe が表示されていることを確認します。
AES Decrypt の Key のみダミーを入力しているため、そのままでは複合化できません。次に紹介する解析ツールで AES の Key を取得してください。(AES Decrypt の IV は不要のため空欄のまま)
Shadowgate_Data\Managed
フォルダにある PAC.dll ファイルを dnSpy で開きます。
namespace PAC.GameData.Crypto の class Key を開き、string _256 の return ダブルクォーテーション内にある 32文字をコピーします。
CyberChef の Recipe にある AES Decrypt の Key に、dnSpy でコピーした 32文字を貼り付けて入力します。(上の画像では加工して塗りつぶし、以降 Key 欄は非表示)
なお、CyberChef で暗号化 するときにも同じ Key を使用します。
これで Base64 テキストファイルを複合化する準備が整いました。
CyberChef の Input にある Open folder as input をクリックします。
resources.assets ファイルからエクスポートした言語テキストファイル(Base64) 78ファイルを含むフォルダを指定して、Base64 テキストファイルをまとめてアップロードします。
ファイルを個別にアップロードしたい場合は Opne file as input からファイルを手動で選択してアップロードします。
Base64 テキストファイルアップロード後、Output にアップロードした Base64 テキストファイルがタブ化された状態で表示されます。
Output タブにはアップロードしたファイルがアルファベット順で並び、アップロードした時点で先頭のテキストファイルのみ複合化が完了します。
残りのファイルはアップロード時のままなため、STEP にある BAKE ボタンをクリックしてすべての Base64 テキストファイルを複合化します。
すべての Base64 テキストファイル複合化後、Output にある Save all outpus to a zip file で複合化したファイルを zip でダウンロードします。
ファイル単体でダウンロードしたい場合は Output にある Save output to file でダウンロードできます。
「Please enter a filename:」と表示されるので download.zip のまま OK ボタンをクリックします。zip ファイル名は任意で変更可能です。
次に「Please enter a file extension for the files, or leave blank to detect automatically.」と表示されるので、拡張子の「.txt」を入力して OK ボタンをクリック、zip ファイルのダウンロードが開始します。
ダウンロードした zip ファイルを展開・解凍して 1.txt ~ 78.txt ファイルまであるのを確認します。
ファイル番号がずれていた場合は CyberChef の Recipe ページをリロードして、もう一度同じ手順で Base64 テキストファイルの複合化を行います。
ダウンロードしたテキストファイル(1.txt ~ 78.txt)を元のファイル名にリネーム(名前変更)します。以下、リネーム用バッチスクリプトを用意したのでフォルダ内に配置して実行します。
リネームしたテキストファイルは 暗号化後のリネームおよび assets ファイルへインポート するときに必要になります。
バッチスクリプト実行後、オリジナルのファイル名にリネームされたテキストファイルです。バッチファイルは不要なので削除します。複合化されたテキストファイルをテキストエディタで文字コード UTF-8 で開き翻訳します。
注意点としてこちらで確認できた限りでは Menus.txt ファイルを編集してもゲームに反映されませんでした。これについては 別の方法で翻訳 することになります。
CyberChef で言語テキストファイル AES 暗号化 → Base64 エンコード
CyberChef で Base64 テキストファイルから複合化した UTF-8 テキストファイル を暗号化する方法です。
暗号化手順の流れは CyberChef の Base64 テキストファイル複合化方法 とほぼ同じです。
こちらで作成・用意した PC ゲーム リメイク版 Shadowgate(2014) - 言語テキストファイル暗号化(AES 暗号 + Base64)用 CyberChef Recipe ファイル(PC-Shadowgate2014-CyberChef-resources_assets-language-txt-AES-Encrypt-Base64-Encode-recipe-20220412.7z) をダウンロードして展開・解凍します。
ダウンロードしたファイルの URL.txt ファイルにあるリンクからブラウザで CyberChef を開くか、CHEF FORMAT.txt・CLEAN JSON.txt・COMPACT JSON.txt ファイルのいずれかのテキストファイルを開き内容をコピーして、CyberChef の Load recipe へ貼り付けて LOAD ボタンをクリックします。
上記画像中央の Recipe 列にこちらであらかじめ作成した Recipe が表示されていることを確認します。
AES Encrypt の Key のみダミーを入力しているため、そのままでは暗号化できません。
AES Encrypt の Key には、複合化したときに利用した AES Decrypt の Key を入力します。
解析ツールを使って Key を調べる場合は、Shadowgate_Data\Managed フォルダにある PAC.dll ファイルを dnSpy で開き、namespace PAC.GameData.Crypto → class Key → string _256 の return ダブルクォーテーション内にある 32文字 をコピーして AES Encrypt の Key に貼り付けます。(AES Encrypt の IV は不要のため空欄のまま)
これで Base64 テキストファイルへ暗号化する準備が整います。
CyberChef の Input にある Open folder as input をクリックします。
CyberChef で Base64 テキストファイルから複合化した UTF-8 テキストファイル 78ファイルを含むフォルダを指定して、UTF-8 テキストファイルをまとめてアップロードします。
ファイルを個別にアップロードしたい場合は Opne file as input からファイルを手動で選択してアップロードします。
UTF-8 テキストファイルアップロード後、Output にアップロードした UTF-8 テキストファイルがタブ化された状態で表示されます。
Output タブにはアップロードしたファイルがアルファベット順で並び、アップロードした時点で先頭のテキストファイルのみ暗号化が完了します。
残りのファイルはアップロード時のままなため、STEP にある BAKE ボタンをクリックしてすべての Base64 テキストファイルへ暗号化します。
Base64 テキストファイルへ全部暗号化後、Output にある Save all outpus to a zip file で暗号化したファイルを zip でダウンロードします。
ファイル単体でダウンロードしたい場合は Output にある Save output to file でダウンロードできます。
「Please enter a filename:」と表示されるので download.zip のまま OK ボタンをクリックします。zip ファイル名は任意で変更可能です。
次に「Please enter a file extension for the files, or leave blank to detect automatically.」と表示されるので、拡張子の「.txt」を入力して OK ボタンをクリック、zip ファイルのダウンロードが開始します。
ダウンロードした zip ファイルを展開・解凍して 1.txt ~ 78.txt ファイルまであるのを確認します。
ファイル番号がずれていた場合は CyberChef の Recipe ページをリロードして、もう一度同じ手順で Base64 テキストファイルへ暗号化を行います。
ダウンロードしたテキストファイル(1.txt ~ 78.txt)を元のファイル名にリネーム(名前変更)します。以下、リネーム用バッチスクリプトを用意したのでフォルダ内に配置して実行します。
assets ファイルへインポートする前に暗号化した Base64 テキストファイルを、必ず元のファイル名にリネームする必要があります。
バッチスクリプト実行後、オリジナルのファイル名にリネームされた Base64 テキストファイルです。バッチファイルは不要なので削除します。このテキストファイルを assets ファイルにインポートして翻訳した内容をゲームに反映させます。
Shadowgate_Data\Unity_Assets_Files\resources
フォルダに暗号化した言語テキストファイル(Base64)全 78ファイルを配置します。
Shadowgate_Data フォルダにある resources.assets ファイルを UnityEX で開き Import files ボタンをクリックしてインポートします。
バッチスクリプトでインポートしたい場合は Shadowgate_Data フォルダに UnityEX.exe ファイルと空の bat ファイル(ファイル名は任意)を新規作成して配置。bat ファイルには以下のバッチスクリプトをコピー&ペーストして保存後、bat ファイルを(PC 環境によっては管理者権限で)実行 して Unity_Assets_Files フォルダにあるファイルをまとめてインポートします。
UnityEX.exe import resources.assets -t txt
pause
注意点としてこちらで確認できた限りでは Menus.txt ファイルを編集してインポートしてもゲームに反映されませんでした。これについては 別の方法で翻訳 することになります。
こちらの画像は nGUI 日本語ビットマップフォント差し替え と言語テキストファイルを書き換えた日本語サンプルスクリーンショットです。
おまけ:dnSpy を使った Shadowgate(2014)の PAC.dll ファイル解析
dnSpy を使って Unity ゲーム dll ファイルの複合化・暗号化処理部分を特定した時のおおまかな手順です。
Shadowgate_Data\Managed
フォルダにある PAC.dll ファイルを dnSpy で開きます。
Unity ゲームには(ゲームによりますが)Managed フォルダに複数の dll ファイルがあります。その中に見慣れないファイル名がある場合、ゲーム専用のプログラムが含まれている可能性があります。(関連記事)
namespace PAC.GameData.Crypto にある class Decrypter の Decrypt 関数内容です。関数名の通り複合化の C# プログラムです。
CyberChef で複合化処理プログラムを再現 しています。
namespace PAC.GameData.Crypto にある classEncrypter の Encrypt 関数内容です。関数名の通り暗号化の C# プログラムです。
CyberChef で暗号化処理プログラムを再現 しています。
namespace PAC.GameData.Crypto の class Key を開き、string _256 の return 行にあるダブルクォーテーション内に 32文字の文字列が格納されています。
CyberChef の AES Decrypt と AES Encrypt の Key に使用しています。なお、今回の複合化・暗号化では AES の IV は空欄のままです。
たまたま namespace PAC.GameData.Crypto 内に複合化・暗号化プログラムと Key が含まれていましたが、Steam 版 I Love You, Colonel Sanders! A Finger Lickin' Good Dating Simulator のように別の namespace に Key が含まれているパターンもあります。
- Steam 版 I Love You, Colonel Sanders! A Finger Lickin' Good Dating Simulator で日本語を表示する方法 → Steam 版 I Love You, Colonel Sanders! A Finger Lickin' Good Dating Simulator 言語ファイル編集方法
- Steam 版 I Love You, Colonel Sanders! A Finger Lickin' Good Dating Simulator で日本語を表示する方法 → Steam 版 I Love You, Colonel Sanders! A Finger Lickin' Good Dating Simulator 言語ファイル編集方法 - ILYCS.bsw ファイル用複合化・暗号化 C# ソースコードコンパイル
PC ゲーム リメイク版 Shadowgate(2014)システムテキスト編集方法
こちらで確認できた限りでは 言語テキストファイルの編集方法(暗号化・複合化) にて Menus.txt ファイルを翻訳してもゲーム内に反映されないようです。
別の方法でテキストを書き換えることでゲーム内に反映できることがわかったので、そのやり方を以下説明します。
Shadowgate(2014)から MonoBehaviour ファイル(UILabel)一括エクスポート
このセクションではテキストデータの編集に必要な MonoBehaviour(UILabel)テキストファイルの一括エクスポートする方法を説明します。
こちらであらかじめエクスポートしてまとめた PC ゲーム リメイク版 Shadowgate(2014) - UABE で level0 および sharedassets1.,assets ファイルからエクスポートした MonoBehaviour(UILabel)テキストファイル(PC-Shadowgate2014-UABE-Export-Dump-UILabel-level0-sharedassets1_assets-txt-20220412.7z) を公開しておきます。
Shadowgate_Data フォルダにある level0 ファイルを UABE 2.2 stable d で開きます。
Asset info 画面でメニュー Tools にある Get script information をクリックします。Get script information を実行しないと、この後実行する View Data の内容がすべて表示されなかったり、エクスポート・インポートで必要なデータが欠落することがあります。
Type 列をクリックして並び替え、Type 列にある MonoBehaviour : UILabel (Assembly-CSharp.dll) をすべて選択した状態で Export Dump ボタンをクリックします。
複数ファイルを選択した状態で Export Dump すると Select a dump type 画面が表示されます。
デフォルトの UABE text dump (can be imported) のまま OK ボタンをクリックして任意の場所のテキストファイルをエクスポートします。
エクスポートした MonoBehaviour(UILabel)テキストファイルの編集方法については こちらで説明 します。
こちらの画像は Asset info 画面のメニュー View にある Dependencies をクリックしたときに表示される Dependencies 画面です。
UABE 2.2 stable d の場合、開いたアセットファイル(~.assets、level~)に応じて関連アセットファイルと一緒に表示されます。(参考情報・・・文中にある「AssetBundleExtractor (UABE) の場合)」箇所)Dependencies 画面に表示されている 「0 - level0」 の先頭 0 は File ID で、sharedassets1.assets ファイルの File ID は 1 となっています。
ちなみに「2 - library/unity default resources」は Shadowgate_Data\Resources
フォルダにある unity default resources ファイルを指しています。
UABE 2.2 stable d で level0 ファイルを開いた場合、Type 列でソートすると MonoBehaviour : UILabel (Assembly-CSharp.dll) を含むアセットファイルは File ID が 0 と 1 しかありません。
つまり level0 ファイルを開いた場合、MonoBehaviour : UILabel (Assembly-CSharp.dll) を含むアセットファイルは、level0 ファイルと sharedassets1.assets ファイルだけということになります。
Shadowgate(2014)へ MonoBehaviour ファイル(UILabel)一括インポート
アセットファイルからエクスポートした MonoBehaviour(UILabel)テキストファイル の テキストデータを編集 した後、アセットファイルへまとめてインポートする方法です。
個別に MonoBehaviour(UILabel)テキストファイルをインポートする方法については こちら で説明します。
アセットファイルから MonoBehaviour(UILabel)テキストファイルをエクスポートした手順 と同じ方法で UABE 2.2 stable d で level0 ファイルを開き、Asset info 画面のメニュー Tools にある Get script information をクリックします。
Type 列をクリックして並び替え、Type 列にある MonoBehaviour : UILabel (Assembly-CSharp.dll) をすべて選択した状態で Import Dump ボタンをクリックします。
Type 列にある複数の MonoBehaviour : UILabel (Assembly-CSharp.dll) を選択した状態で Import Dump ボタンをクリック後、インポート対象の MonoBehaviour(UILabel)テキストファイルがあるフォルダを指定します。
インポート対象フォルダ指定後に Batch Import 画面が開きます。
画面左側にある Assets to import にインポート先ファイルが、画面右側にある Matching files にインポートする MonoBehaviour(UILabel)テキストファイルが表示されます。
OK ボタンをクリックするとインポートを開始します。
MonoBehaviour(UILabel)テキストファイルインポート後、Modified 列にアスタリスク(*)マークが表示されます。
インポート対象すべてに Modified 列にアスタリスク(*)がある状態で OK ボタンをクリックします。
「Would you like to save changes?」と表示されるのではいボタンでファイルを保存します。
Shadowgate_Data フォルダにあるオリジナルファイル(level0 と sharedassets1.assets)には直接上書き保存ができないため、別のフォルダに保存してからオリジナルファイルと差し替えるか、別名で保存してからリネームしてオリジナルファイルと差し替えることになります。
MonoBehaviour ファイル(UILabel)編集&個別インポート
アセットファイルからエクスポートした MonoBehaviour(UILabel)テキストファイル について、テキストデータの編集方法と個別にインポートする方法を説明します。
UABE でエクスポートした MonoBehaviour : UILabel (Assembly-CSharp.dll) テキストファイル が非常に多いため(ファイル数 300以上)、まずは格納しているフォルダに対して書き換えたいテキストファイルを特定します。
上の画像では 秀丸エディタ の grep 検索 で(編集したい)テキストを検索します。
例えばタイトル画面にある NEW を検索したい場合は、検索文字列の前後にダブルコーテーションをつけて "NEW" と入力して検索します。検索結果は unnamed asset-level0-2744-MonoBehaviour.txt ファイルがヒットします。
こちらの画像は バイナリエディタ FavBinEdit の GREP 検索 FavBinGrep 画面です。
秀丸エディタ の grep 検索 と同じように検索することができます。
UABE 2.2 stable d 上からテキストデータの確認と個別インポートする方法です。テキストデータの確認については上で紹介した grep 検索を使えば不要ですが、一応方法の一つとして紹介だけしておきます。
タイトル画面にある NEW という文字列は unnamed asset-level0-2744-MonoBehaviour.txt ファイルに含まれているので、ファイル名からアセットファイル level0 の Path ID 2744 にテキストデータがあることになります。
UABE 2.2 stable d で level0 ファイルを開き、Asset info 画面のメニュー Tools にある Get script information をクリックします。
続けて Assets info 画面のメニュー View → Go to assets を選択して Go to 画面が開くので、文字列 NEW がある File ID の指定と Path ID 番号を入力して OK ボタンをクリックします。ここでは File ID に level0 を指定、Path ID に 2477 と入力します。事前にアセットファイルと Path ID が特定しているパターンなので、不明の場合この方法は使えません。
指定の Path ID まで移動します。View Data をクリックして書き換えたいテキストがあるかどうか確認します。
string mText に目的の文字列 NEW があることが確認できました。
Path ID 2744 の Type: MonoBehaviour : UILabel (Assembly-CSharp.dll) を選択した状態で Export Dump を実行することで、MonoBehaviour(UILabel)テキストファイルを個別にエクスポートすることができます。
Path ID 2744 の MonoBehaviour(UILabel)テキストファイルをテキストエディタ(文字コード UTF-8)で開き、テキストデータ string mText を書き換えます。
ここでは「NEW」から「ニューゲーム」に書き換えています。
MonoBehaviour(UILabel)テキストファイルを書き換えたら、再度 UABE 2.2 stable d で level0 ファイルを開き、Asset info 画面のメニュー Tools にある Get script information をクリックします。Get script information を忘れたままインポートしたアセットファイルをオリジナルファイルと差し替えるとゲームがクラッシュします。
Path ID 2744 の Type: MonoBehaviour : UILabel (Assembly-CSharp.dll) を選択した状態で Import Dump を実行して、書き換えた MonoBehaviour(UILabel)テキストファイル(この場合は unnamed asset-level0-2744-MonoBehaviour.txt)を選択してインポートします。
インポート後、Level0 の Path ID 2744 - MonoBehaviour(UILabel)を Viwe Data で開き、Asset info 画面から string mText のテキスト内容が書き換えられているかどうか確認できます。
インポート後、Modified 列にアスタリスク(*)マークが表示されている状態で OK ボタンをクリックします。
「Would you like to save changes?」と表示されるのではいボタンでファイルを保存します。
Shadowgate_Data フォルダにあるオリジナルファイル(level0 や sharedassets1.assets)には直接上書き保存ができないため、別のフォルダに保存してからオリジナルファイルと差し替えるか、別名で保存してからリネームしてオリジナルファイルと差し替えることになります。
こちらの画像は nGUI 日本語ビットマップフォント差し替え とシステムテキスト(MonoBehaviour(UILabel))を書き換えた日本語サンプルスクリーンショットです。
おまけ:UnityEX MonoBehaviour(UILabel、UnityEX 表記 Type -3)ファイルエクスポートとバイナリエディタ編集
おまけで UnityEX とバイナリエディタを使ってシステムテキスト(MonoBehaviour(UILabel))を編集する方法を紹介します。
UnityEX にある Import files でファイルをまとめてインポートできる点では楽ですが、バイナリエディタを使った方法では UTF-8 テキストデータのバイト数計算やアライメント調整が必要です。手動でのバイナリデータ書き換えは手間がかかるうえ、間違うとゲームが起動せずクラッシュする可能性があります。
テキスト編集対象の MonoBehaviour(UILabel)ファイルがある level0 または sharedassets1.assets ファイルを UnityEX で開きます。
Type 列 -3(MonoBehaviour id: 114)のファイルを選択してエクスポートします。ちなみに Type 列 -3 は UILabel 扱いになっているのでソートすれば、UILabel ファイルのみまとめエクスポートすることができます。
画像では level0 を UnityEX で開き、#2744 の level0_00180.-3 を選択して右クリックで Export with convert or Raw をクリックします。
Unity_Assets_Files フォルダにエクスポートした拡張子 -3 ファイル(ここでは level0_00180.-3 ファイル)をバイナリエディタで開きます。
UTF-8 テキストバイト数 0x3
(4バイト)と編集対象テキスト「NEW」(アラインメント - 4バイト倍数(参考情報1、参考情報2))があるバイナリデータを特定します。
文字列「NEW」→「ニューゲーム」に書き換える手順です。
文字列「ニューゲーム」の UTF-8 テキストバイト数は 18 となるため 16進数にすると 0x12
となります。4バイトの 16進数バイナリデータ(リトルエンディアン)にすると 12 00 00 00
になるのでこの内容で書き換えます。
UTF-8 テキストデータは 4バイト倍数にアライメントを調整します。(参考情報1、参考情報2)
文字列「ニューゲーム」の場合 UTF-8 テキストバイト数は 18 なので、4 で 割り切れる 20 バイトに調整するため残り 2バイトを 00
データで埋める形になります。ちなみに 4 で割り切れる UTF-8 テキストデータの場合は 00
データは不要です。
UTF-8 テキストバイト数と UTF-8 テキストデータを書き換えたら UnityEX でインポート先アセットファイル(level0 か sharedassets1.assets)を開き、Import files をクリックしてインポートします。
- PC ゲーム リメイク版 Shadowgate(2014)で日本語を表示する方法(現在開いているページ)
- PC ゲームの日本語化実現のために役に立つかもしれないローカライゼーション技術情報サイトまとめ
- PC ゲームで使われているゲームエンジンを特定する方法
- Steam 版 I Love You, Colonel Sanders! A Finger Lickin' Good Dating Simulator で日本語を表示する方法
- PC ゲーム Wasteland 3: Colorado Collection で日本語を表示する方法
- PC ゲーム Syberia 3 で日本語を表示する方法
- PC ゲームが起動しない・安定しない場合に確認と設定したほうがいいかもしれないリスト