2018年6月3日日曜日

Fallout Shelter のフォントについて

去年の3月末にリリースされた Fallout Shelter がリリースされて一年程経ちますが、まだ日本語MODがないようなので、ちょっと調べてみました。

このゲームの調査はリリース直後に一度試みたのですがフォントの座標情報が見つからず頓挫していました。今回、「お~るげーむず(仮)」さんから座標関連の情報を頂いたので再度調査してみたいと思います。
「お~るげーむず(仮)」
https://agk.saloon.jp/

■はじめに



Fallout Shelter は Bethesda Game Studios が開発したストラテジーゲームらしいです。英語が読めないので触りしかプレイはしていませんが・・・





■ゲームエンジン



Unity を使用していますがバージョンは不明です。
また、調査するゲームのバージョンは「1.13.8」です。


■使用ツール


1.falloutshelter_texttools


このツールの詳細については下記のフォーラムを参照ください。

「Fallout Shelter localization files - ZenHAX」
http://zenhax.com/viewtopic.php?t=2770

このツールは翻訳対象のファイルを unpack/pack するツールです。
なお、このツールはいくつかのウィルス対策ソフトでウィルスとして認識されていますので、実行するのは危険です。


このツールの使用によって発生するいかなる損害に対しても筆者は責任を負いません。使用する場合は自己責任のもとに使用してください。


このツールにはソースコードが同梱されていますので、ソースファイルを確認後、AutoIT を使用して自分でコンパイルしてから使用するのが良いと思います。

「Home - AutoIt」
https://www.autoitscript.com/site/
「AutoIt - Wikipedia」
https://ja.wikipedia.org/wiki/AutoIt



■翻訳対象テキスト



ゲームバージョン(1.13.8)では「resources.assets」内の「resources_00001.-8」に翻訳対象ファイルがあります。「falloutshelter_export.exe」でテキストファイル化し翻訳、「falloutshelter_import.exe」で翻訳結果を取り込むことができます。テキストファイルの文字コードはUTF-8N(UTF-8 BOMなし)で、改行コードはCRLFでです。


■フォント



このゲームではフォントテクスチャーと座標情報を元に文字を表示しているようです。

1.フォントテクスチャーと座標情報


このゲームで使用しているフォントテクスチャーと座標情報は次のとおりです。

・monofonto_0.tex と resources_00001.-20(座標情報)[25120 bytes]
細めのフォント。これはロシア語などで使用されているキリル文字でしょうか?


「キリル文字一覧 - Wikipedia」
https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%AA%E3%83%AB%E6%96%87%E5%AD%97%E4%B8%80%E8%A6%A7


・futura_0.tex(フォント)と resources_00002.-20(座標情報)[14260 bytes]
太めのフォント。西欧で使用されている文字(Windows-1252)でしょうか?


「Windows-1252 - Wikipedia」
https://ja.wikipedia.org/wiki/Windows-1252

とりあえず、futura_0.tex の方を差し替えて、日本語の表示を目指します。


2.座標情報



AssetBundleExtractor (UABE) を使用し、フォントの座標情報を調べます。
UABEでは「Name」は「MonoBehaviour」になってしまい、どれがどれなのかわかりませんので、サイズをヒントに探します。今回は Size=14260 のものを探します。


「View Data」ボタンを押し、「Asset Data」画面を開きます。

前半部分
後半部分


調査結果は、Gist にアップしました。
「フォントの座標情報(futura_0.tex)」
https://gist.github.com/synctam/e0753bd5306947c473c4abba4c6b9311

調査の結果、簡単にフォントの置き換えでは上手く行かず、以前調査した「Pillars of Eternity 2 で日本語が表示できない・・・その4(完結編)」と同様にフォントの座標データを差し替える必要があります。ツールの作成が必要ってことですね。


3.フォントの作成



調査結果を元にフォントテクスチャーと座標情報を作成します。今回はビットマップフォント作成ツール「BMFont v1.13」を使用します。(BMFont v1.14 beta では上手く作成できなかった)

「BMFont - AngelCode.com」
http://www.angelcode.com/products/bmfont/

3.1.日本語フォントの準備


今回は M+ FONTS の「mplus-2p-regular.ttf」を使用し、使用する文字の種類は、以前作成した「PoE2JoFont_mp2pr.txt」を使用します。使用するフォントは予めWindowsにインストールしておきます。

「PoE2JoFont_mp2pr.txt」
https://gist.github.com/synctam/5c79356cc60a7ee0ba99feb0f0f5f2a0


フォントの設定

「BMFont」を起動し、「Font Settings」と「Export Options」を次のように設定します。

 

次に、使用する文字の種類を指定します。
メニューの [Edit]-[Clear all chars in font] で、一度、登録文字をクリアします。その後、[Select chars from file] で「PoE2JoFont_mp2pr.txt」を読み込みます。なお、読み込むファイルは文字コードが「UTF-8 BOM付き」で改行コードは「CRLF」である必要がありますので注意してください。エラーメッセージが出なければOKです。


フォントテクスチャーの確認

メニューの [Options]-[Visualize] で正しくビットマップフォントができたかを確認します。全文字が一枚の画像に収まっていればOKです。




フォントのセーブ

メニューの [Options]-[Save bitmap font as...] で名前をつけて保存します。今回は「FSJpFont」にしてみました。これで、次のようなファイルが作成されます。

  • FSJpFont_0.png --- フォントテクスチャー
  • FSJpFont.fnt --- フォントの座標情報


3.2.フォントテクスチャーをDDSに変換


後で UnityEX で取り込めるように、フォントテクスチャーの形式をDDS(DXT5)に変換します。今回はフリーのペイントソフト「Paint.NET」を使用し変換しました。

「Paint.NET - Free Software for Digital Photo Editing」
https://www.getpaint.net/

保存の設定は次のとおりです。




3.3.フォント座標情報の差し替えツールの作成


フォントの座標情報は大きく分けて、次のようになっています。

  • フォントの各種設定情報の先頭部分(ヘッダー部)
  • 各文字の座標情報(座標部)。カーニング情報を含む。
  • フォントの各種設定情報の末尾部分(フッター部)

ツールの処理手順としては
  1. オリジナルの座標情報を読み込み、ヘッダー部分の転記と修正。
  2. BMFont で作成した「FSJpFont.fnt」を読み込み座標部を生成。
  3. オリジナルの座標情報を読み込み、フッター部分を転記。
  4. 結果を出力。


3.4.フォントテクスチャーと座標情報の差し替え


実際にツールを作成して、フォントテクスチャーと座標情報を差し替えてみましたが、Runtime Error が発生し、ゲームを起動できませんでした。
そこで、オリジナルの座標情報を確認してみたところ、Windows-1252 の文字以外に記号やアイコンがあり、それぞれに独自の文字コードが割り振られていました。これらの文字コードには本来は漢字コードに割り振られている部分もあり、単純に座標情報を差し替えるだけでは上手くいかないことがわかりました。
とりあえず、最低でもオリジナルで使用している文字を網羅することが最優先の課題です。

つづく・・・

3 件のコメント:

  1. 日本語でプレイしたいので続き気になります。。英語だとクエストなどの会話がさっぱりわからなくてもったいないので。

    返信削除
  2. NGUIはフォント画像にアトラス化した物を利用していてフォント定義体と画像以外にも修正が必要で面倒臭かったような…

    ゲームで使われているフォントはFontManagerクラスが管理する物をテキスト用の部品(UILabel)が取得する処理になっていますが、FontManagerには画像フォントとアウトラインフォントの両形式が格納され、UILabelのフォント取得処理は画像フォントが無ければアウトラインフォントを利用するようになっているので、画像フォントを用意せずともFontManagerの画像フォントの定義(UIFontの配列)を消すだけで日本語の表示は出来そうに思います。

    FontManagerのデータはresources.assetsの#10098ですので、未だ調べているので有ればご確認を。

    返信削除
    返信
    1. 現在、別のゲーム(Pillars of Eternity 2)の日本語化ツールの作成で手一杯の状態で、調査が中途半端になっています。
      落ち着いたら調査を再開したいと思っていますが、かなり先になりそうです。
      それと、NGUIに関しては全く知識がないので、頂いた情報を元に調べれたらいいな、と思っています。
      情報ありがとうございました。

      削除

Raspberry Pi 3 Model A+ で広告ブロックサーバーを作る(その2)

前回作成した 広告ブロックサーバー の稼働状況をAmbientにアップロードするスクリプトを書いたのでメモを残しておきます。