2018年5月17日木曜日

Pillars of Eternity 2 で日本語が表示できない・・・その3

つづきです・・・

ここで、今まで調査した内容を整理しておきます。

1回目では・・・
  • ゲームエンジン(Unity)の情報を収集
  • 解析ツールの準備
  • ゲーム内のファイル構成の調査
  • Unityのフォントの仕組みの調査
  • ツールを使用したフォントファイルの探索
これにより、フォントは TextMesh Pro で作成されたものと推測しました。

2回目では、Unity の TextMesh Pro を使用してフォントテクスチャを作成し、これを使用したゲーム?を作成しました。

現時点で残された謎は二つ・・・
  1. フォントテクスチャの作成方法
  2. 座標情報の謎解き
  3. アセットファイルにあるフォントテクスチャの差し替え方法の調査

有り難いことに、お二人の方から座標情報に関するコメントを頂きました。共通するポイントは「バイナリーデータ」と言うキーワードです。そこで今まで調べてこなかったバイナリーファイル、主に MonoBehaviour を中心に調査を進めていこうと思います。

前回までは結構順調に進みましたが、今回はかなりカオスな展開になる予感が・・・



本当は、ここで PoE2 のアセットファイルを調べたいのですが、アセットファイルに含まれるファイル数が数百個以上と多いので、まずは前回作成したゲーム?のアセットファイルを使用し座標データの探してみたいと思います。含まれるファイル数も65個と少ないのでかなり楽になります。


■座標情報の探索



まずは、AssetStudio で自分で作成したアセットファイル (PoE2JpFont2_Data\resources.assets) を開いて MonoBehaviour を探してみます。ところが、それらしいファイルがありません。どうやらサポートされている種類のファイルしか出てこないようです。ちなみに、AssetStudio でサポートされている種類は次のものでした。
  • Texture2D
  • Sprite : bmp, png or jpeg
  • AudioClip : mp3, ogg, wav, m4a, fsb
  • Font : ttf, otf
  • Mesh
  • TextAsset
  • Shader
  • MovieTexture
  • VideoClip
  • MonoBehaviour
MonoBehaviour ってありますが、なぜか表示されませんでした。

まぁ、どちらせよ表示されるのは画像などの対応されたファイルのみで、それ以外のファイルは表示されないんですね。

では、別のツールで試してみます。コメントにあった UnityEX で「resources.assets」見てみます。

あれ? フォントテクスチャがでてこない・・・


MonoBehaviour はでてきましたが、今度はフォントテクスチャ (mplus-2p-regular) がでてきません。

では、AssetBundleExtractor (UABE) で「resources.assets」を見てみます。

Material と Texture。でもサイズが小さすぎる。なんだろう?

サイズから見てこれが座標情報だろうか?

サイズの大きい物が見つかりました。座標情報でしょうか? それと、フォントテクスチャらしき物は見つかりましたが、サイズが小さすぎます。
試しに、気になる以下のファイルをエクスポートしてみます。
  1. mplus-2pregular SDF Material (size: 1708)
  2. mplus-2pregular SDF Atlas (size: 132)
  3. MonoBehaviour mplus-2pregular SDF (size: 307164)
UABEではエクスポートのやり方が、二種類あります。ひとつはプラグインを使用して出力する方法、もう一つは Export Raw で生のデータを出力する方法です。
上記2番は Plugin 出力を使用して .png で出力します。それ以外は Export Raw で生のデータを出力します。わからない時は Plugins ボタンを押して選択項目がでてきたら Plugin が対応している事がわかります。選択項目がでてこない場合は Export Raw で出力すると良いです。

結果、2番はフォントテクスチャでした。サイズ(132)が小さいのにエクスポートするとサイズが 7,062,088バイトのPNGファイルができました。サイズは当てにならないのでしょうか?

1番は、エクスポート時のデフォルトのファイル名が「unnamed asset-sharedassets0.assets-3.dat」となっていました。ファイル名からは、中身が何かはわからないですね。これはバイナリーエディタ「Bz」で開いてみます。


画面の右側に文字が見えますので、そこに注目します。気になる文字列として以下のものが目に付きました。
  1. mplus-2p-regular SDF Material
  2. BumpMap
  3. FaceTex
  4. OutlineTex
  5. Bevel
  6. BevelClamp
む? なんか見覚えのある単語が並んでいます。1番はフォントの名前なので探しているフォントに関連することが想像できます。そして気になるのはそれ以外の部分です。ここで前回フォントアセットを作成した時の、Unity のプロジェクトを開いてみます。


画面左上の TextMeshPro を選択

これは画面右下の Material 部分

これは画面右下にある、3D Object の TextMesh Pro で「はじめての Unity」を定義した部分です。赤線で示したとおり、上記の気になる文字列がありました。この Material と言うファイルは「何かの設定」が書き込まれたファイルのようです。今回の調査には直接関係はなさそうです。

でも、あれですね。Material を差し替えればフォントの属性(見た目の特徴?)みたいなものが変更できるって事ですかね。 今すぐ、なにかに利用できるわけではないけど、覚えておいて損はないかな。

残るは3番の「MonoBehaviour mplus-2pregular SDF」です。これもデフォルトのファイル名が「unnamed asset-sharedassets0.assets-8.dat」なので、バイナリエディタで確認してみます。

右側にはヒントがないなぁ・・・

今度は右側のテキスト部分を見てもフォント名くらいしかヒントはありません。そこで Bitmap View ボタンを押し、画面左側にビットマップを表示させます。これは1バイトを1ドットとして色分けして表示するものです。使い方の詳しいことは、以下に素晴らしいスライドを作ってくださった方がいらっしゃいましたので、参考にしました。

「目grepのはなし」
https://www.slideshare.net/konoiz/grep-54888700
「目grep入門 +解説」
https://www.slideshare.net/murachue/grep-8132856

それで、このファイルの特徴ですが、ファイルの最初から最後まで、模様が綺麗に斜めに並んでいます。綺麗に並んでいるということは、規則性のあるデータが繰り返し現れている可能性が高いです。今回探している座標情報ファイルには、ざっくりいうと・・・

  • 文字コード、文字のx,y座標、文字の幅と高さ

これが文字数分(8571個)入っているはずです。なにか裏を取る方法はないかな~



試行錯誤してみた結果、ツールの使い方を一部勘違いしていることに気が付きました。
それは、ツールで開くファイルについてです。

AssetStudio の場合
開くことのできるファイルを開くとそのフォルダーにある関連するファイルも読み込んでくれるみたいです。一番確実なのはメニューの Load Folder で (ゲーム名)_Data フォルダーを開くと、対象ファイルをすべて読みこんでもらえるみたいです。

AssetBundleExtractor (UABE) の場合
アセットファイル「resources.assets」を開くと同一フォルダー内のある関連ファイルも自動的に読んでくれるようです。

UnityEX の場合
一番悩んだのがこれです。
これは、上記とは異なり、指定したファイルの内容のみを表示してくれるように感じます。例えば「resources.assets」を開くと65個のファイルが表示されます。次に「sharedassets0.assets」を開くと、8個のファイルが表示されました。今までは「resources.assets」しか調べてなかったので、辻褄が合わなかあたんですね。

以下は UnityEX で「sharedassets0.assets」を開いた時の様子です。UABEの方は「resources.assets」を開いたものです。ファイル名とサイズは若干異なりますが、同じものが表示されています。

やっと見えたよ!
MonoBehaviour は「sharedassets0_00001.114」となっていますね。UABEともサイズが同じですので、多分これが座標ファイルっぽいですね。





さて、裏を取る方法を探している最中に良いものを見つけました。
UABEで「resources.assets」を開き「MonoBehaviour mplus-2pregular SDF」を選択し、「View Data」ボタンをクリックすると、次のダイアログが表示されるので、「はい」を答えます。使用するDLLを開くダイアログが表示されるので、すべて「キャンセル」を答えます。

詳しい情報を見ることもできるよ、どうする?
「はい」を答えると使用するDLLを
求められるけどひたすら「キャンセル」っと。

すると、次の画面が表示されます。

必要なところだけ展開して表示してます


必要なところだけ展開して表示してます


必要なところだけ展開して表示してます

ビンゴ!!!
この Asset Data 画面では、選択した項目の詳細情報が見れるようです。
フォントの名称、登録されている文字数、フォントテクスチャのサイズ、そして登録されている文字の座標情報が表示されました



これで、中ボスの「座標情報」の在り処と裏の取り方が判明しました。ちょっと手ごわかったですが、事前にコメントで得た攻略情報がとても参考になりました。

これで本丸(PoE2のアセットファイル)に侵入するための鍵(情報)が手に入りました。次回は、PoE2の座標情報の探索に進みます。

では・・・

参考資料
「目grepのはなし」
https://www.slideshare.net/konoiz/grep-54888700

「目grep入門 +解説」
https://www.slideshare.net/murachue/grep-8132856

3 件のコメント:

  1. >結果、2番はフォントテクスチャでした。サイズ(132)が小さいのにエクスポートするとサイズが 7,062,088バイトのPNGファイルができました。サイズは当てにならないのでしょうか?

    resources.assetsは言ってみればindexでresources.assets.resSというファイルはありません?そちらに画像の本体はあります。

    返信削除
    返信
    1. あ、そうですね、.resS か・・・
      容量的にも納得です。

      削除
  2. Tool類はそちらのresSから画像を抜きだすしまた格納するのであまり考えないで大丈夫です。

    返信削除

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

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