雑用担当の備忘録

技術的な話のみになります。翻訳データそのものはありません。 カテゴリ>その他>注意事項を必ず参照してください

概要
  • UE3
  • 翻訳データ INT, テキストデータで文字コード UTF-16-LE
  • ムービー中の字幕データ *_INT.txt テキストデータで文字コード UTF-16-LE
  • フォント UE3 (動画の字幕) + Scaleform (動画以外の文字)

翻訳データはテキストデータなのであまり書くことはないのですが。

な ぜ変換スクリプトが python なのか、作業所のシートが複数に分かれていたため、まとめてダウンロードして一括置換できる形の方がいいよなということで odf 形式を採用。odf のライブラリは何があるかということで java, c#, ruby, python に絞られ。java はランタイム必要なので除外、c#のライブラリは有料だったので除外、ruby, python どっちでも良かったんですが python を選択。


以降の記事で取り扱う内容
  • UE3 フォント作成方法 (動画の字幕)
  • Scaleform フォント関連 (動画以外の文字)

フォント

uasset 置換は難度が高めなので slate 置換で問題が出ないならそちらをお勧めします。

uasset 置換
メニュー画面のみでの確認なので、置換対象フォントが複数フォルダに分かれている可能性もあります注意してください。
Kholat/Content/Kholat/UI/Fonts/MenuFOnt.uasset

uasset にカスタムヘッダで調整されている?のかUE4で生成しただけではうまく読み込まれません。EFontCacheType::Runtime の場合 ttf ファイルは FontBulkData という形で格納されています。ヘッダ部分はオリジナルのままで、UE4で日本語フォントをインポートして生成した uasset から FontBulkData の部分をオリジナルの FontBulkData に上書きするということをします。

FontBulkData の位置は bulk_data_start_offset という場所にあるのですが
この位置の探し方
uasset01
まずこの FString を探す。パス文字列の前の i32 の部分 1F 00 00 00 も含みます。
次に i32(4バイト) * 2 戻ります 00のピンクの部分ですね。
そこから u64(8バイト) 戻る D2 05 00 00 00 00 00 00 ここが
bulk_data_start_offset = 0x5D2

0x5D2 の部分を見ます
uasset03
C1 83 2A 9E というのがありますね、ここからファイルの最後までが FontBulkData となります。
自作した日本語フォントをインポートした uasset から同じように検索した FontBulkData をコピーして上記の部分に上書きで貼り付ければ良いです。

このやり方は難度が高いのですが、TVECR のように単純に作成して uasset コピーするだけで読み込むものは少ないかもしれないので、多少応用が利くかもしれません。

locres の注意点

TVECR と同じなんですが、実装時に躓いた部分があるのでそこの補足
TVECR は namespace_count = 1 だったんですが

Khl の開始は
08 00 00 00 00 00 00 00

問題は FString の実装にあったんですがパッと見 locres のバージョンが違うのか?と判断してしまったのが間違いでした。単純に FString.length = 0x0 だったら String の部分は出力されないというだけだったんですが
ちょっと変な方向に走りました…

結論として Khl は namespace_count = 8 で Namespaces[0].namespace= ""    // 空き文字
ということです。

FString の実装としては length > 0 なら ANSI で length < 0 は UTF-16-LE
length == 0 は空き文字として実装すると良いです。

↑このページのトップヘ