2020年12月26日土曜日

Baldur's Gate 3 のローカライズについて(その2)

前回は、日本語の表示が可能なことを確認しました。また、フォントの差し替えが上手く行かないことを確認しました。

 

今回は翻訳上の問題点と解決策についてわかったことを纏めていきます。このゲームでは、翻訳対象のテキストが入っているファイル "emglish.xml" は、順不同でそれぞれのテキストの用途がわかりません。実際の "emglish.xml" は以下のようになっています。

例えば9行目の「I'm sure I do.」は、話者が誰で誰に向かって、どのような状況での話されたのかが不明です。これでは翻訳する場合、無難な訳にするしかなくなってしまいます。同様に12行目の「Arcane Light」がアイテムなのか、スキル名なのかで翻訳も変わってくるかもしれません。それぞれのテキストの用途や文脈がわからないと翻訳がとても難しくて辛い作業になってしまいます。そこで、各テキストの情報を調べることにしました。



1.解析に使用するツール

 

1.1.LSLib

このツールは *.pak ファイルの解凍や再pak化、バイナリーファイル(*.lsb, *.lsf)の変換や逆変換ができます。変換は、XML形式(*.lsx)とJSON形式(*.lsj)の二種類あり任意に指定することができます。

入手先:
Norbyte/lslib: Tools for manipulating Divinity Original Sin and Baldur's Gate 3

ツールをダウンロード後、解凍し "ConverterApp.exe" を実行すると、ツールが起動します。

該当するタブを選択し解凍や変換を行うことができます。必ず、画面上部のGameの選択で「Baldur's Gate 3(64-bit)」を指定してください。

 

2.調査結果

*.lsb や *.lsf ファイルはバイナリー形式のファイルなので、上記「LSLib」でテキスト形式に変換しておきます。

2.1.会話

場面、会話順、話者の情報を取得するには以下のファイルを参照します。

  • pakファイル名:Gustav.pak
  • 解凍後のファイル:Gustav\Mods\Gustav\Story\Dialogs\*.lsj

各 lsj ファイルは、章や場所などを示すフォルダーで分けられており、場面を判断するのに役立ちそうです。

例えば、オープニング直後のNPC "Lae'zel" さんとの初めて出会いの場面は、"Gustav\Mods\Gustav\Story\Dialogs\Tutorial\TUT_LowerDeck_AfterImpFight.lsj" にあります。フォルダー名から、チュートリアルのインプとの戦闘前の場面と判断することができます。

このファイルには、話者の番号、話者のID、会話順、会話テキストの contextid が記されています。話者の番号は、"0"、"1" がプレイヤーを示し、"-666"は主人公の思考(心の声)を示すのかも(未検証)。

次に話者のIDから話者名を取得するには以下のファイルを参照します。
  • pakファイル:Gustav.pak
  • 解凍後のファイル:Gustav\Mods\Gustav\Story\Journal\marker_prototypes.lsx

このファイルには、話者のID(MarkerTargetObjectUUID)と話者名を示す "DisplayText" に "contextid" が記されています。

 

2.2.クエスト

クエストの情報を取得するには以下のファイルを参照します。

  • pakファイル名:Gustav.pak
  • 解凍後のファイル:Gustav\Mods\Gustav\Story\Journal\quest_prototypes.lsx
  • 解凍後のファイル:Gustav\Mods\Gustav\Story\Journal\questcategory_prototypes.lsx
  • 解凍後のファイル:Gustav\Mods\Gustav\Story\Journal\objective_prototypes.lsx

"quest_prototypes.lsx" ファイルには、クエストのIDやカテゴリー、クエストの親子関係、クエスト名や説明文の contextidが記されています。

"questcategory_prototypes.lsx" には、クエストのカテゴリーの説明文の contextid が記されています。

"objective_prototypes.lsx" には、クエストの目的や説明が記されています。

 

2.3.書籍・場所など

書籍や場所の情報を取得するには以下のファイルを参照します。なお、*.lsb ファイルは、*.lsx に変換して調査を行いました。

  • pakファイル名:Gustav.pak
  • 解凍後のファイル:Gustav\Public\Gustav\Localization\*.lsb

 

2.4.アイテム、ステータスなど

アイテムや Origins 、各種状態などの情報を取得するには以下のファイルを参照します。なお、*.lsb ファイルは、*.lsx に変換して調査を行いました。

  • pakファイル名:Gustav.pak
  • 解凍後のファイル:Gustav\Mods\Gustav\Localization\*.lsb

 

2.5.レベルごとのキャラクター情報

各レベルごとのキャラクター情報を取得するには以下のファイルを参照します。なお、*.lsb ファイルは、*.lsx に変換して調査を行いました。
  • pakファイル名:Gustav.pak
  • 解凍後のファイル:Gustav\Mods\Gustav\Levels\*.lsb or *.lsf

 

2.6.レベルごとのアイテム情報

各レベルごとのアイテム情報を取得するには以下のファイルを参照します。なお、*.lsb ファイルは、*.lsx に変換して調査を行いました。
  • pakファイル名:Gustav.pak
  • 解凍後のファイル:Gustav\Mods\Gustav\Levels\*.lsb or *.lsf

 

2.7.RootTemplate情報

ルート品なのでしょうか?各種アイテムの名称や説明が記されています。なお、*.lsf ファイルは *.lsx ファイルに変換して調査を行いました。
  • pakファイル名:Gustav.pak
  • 解凍後のファイル:Gustav\Public\Gustav\RootTemplates\_merged.lsf

 

3.今後の予定


3.1.翻訳シートの作成

上記の情報を元に実際に翻訳作業で使用するための翻訳シートを作成していきます。

 

4.未解明の項目

現時点で判明している情報は以上となります。しかし、まだ不明な点があります。

  1. 用途不明なテキストが2万項目近く残っている。
  2. フォントの差し替え方法がわからない。

解決策やヒントなど情報がありましたらコメントをいただけると助かります。

では・・・

0 件のコメント:

コメントを投稿

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

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