日本語化
Thief DP/G の日本語化関連
ムービーの日本語化
ムービーの日本語化は
で解説されている。
羊皮紙、本に書かれたテキストの日本語化
Thief DP/Gを動かすDark Engineはマルチバイト文字を認識してくれないので、漢字を含む日本語を普通のテキストとして表示することができない。そこで、1×1ピクセルの文字を隙間なく並べることで、ドット絵として日本語の文字を表示できるようにする。
本編の中で本や羊皮紙の文字に使われているフォントのフォーマットは、1ピクセルあたり8ビットのアルファ値で表現されたピクセルマップなので、
0x30 - 0x3f の範囲に 0 - 0xff までのアルファ値を持つドット文字を割り当てたフォントを作成
作成したフォントを対応するThiefのフォントと置き換える
あらかじめ何らかの形でレンダリングしておいた文字列の画像を読み込み、 対応する色のドット文字を並べた文字列に置き換える
置き換えた結果を文字列としてゲームに読ませる
という手順で日本語を表示する。テキストの折り返し処理はレンダリングの時点で済ませておく。
インターフェースの日本語化
インターフェースに使われているフォントには、本や羊皮紙のように、1ピクセルあたり8ビットのアルファ値を持つフォントと、ビットマップで表現されるフォントの二種類が使われている。前者は本や羊皮紙のフォントと同じフォーマットで、メインメニューの"NEW GAME"... などのボタンに使われているフォント(FONTAA**.FON)。後者はキー設定やセーブデータ名、ミッション中の文字列表示(New Objectivesなど)、アイテム名に使われているフォント。
前者の日本語表示には一つ問題がある。本や羊皮紙と同じフォーマットのフォントを使っているのだから、同じ方法で日本語表示できると思って、実際に試してみたものの、メニューのインターフェース用の文字列の長さには制限が存在するらしく、長すぎる文字列を読み込むとゲームがクラッシュした(ドット文字で表現された文字列は元の数十倍の長さになる)。そこで、メニュー部分にはそれぞれフォントの空いているコード(0x40以降)を割り当てて、対応する文字列の画像をフォントに組み込むことで対応する。(メニューの数はあまり多くないので、フォントのすべてのコードが埋まることは無いだろう。)
後者のフォントにはビットマップフォントしか使えないようなので、0x80 - 0xff の範囲に7ビットのバイナリパターンが並んだ1x7ピクセルの文字を割り当てた日本語表示用フォントを作る。はじめはドット文字を使おうと考えたものの、再び文字列長制限に引っかかったのでこの形になった。0 - 0x7f までの部分は元のフォント(SMALFONT.FON)を高さ7ピクセルに切り詰めたもので流用する。また、ビット列の文字とUIが生成した文字列を同時に表示するとき(聖水を使った時の表示{Hory Water Arrow 0:00:13}など)に問題が起こるので、適当に空いているコードを文字列の画像に割り当てる。
日本語化しないインターフェース
セーブデータの名前表示
キーバインドの設定ファイルの名前
これらは日本語する予定なし。
会話の日本語化
ゲーム中のキャラクターが会話する場面に字幕をつけて日本語化する。
Thief 1/2 用のカスタムスクリプトの一つ、"Public Script"
http://whoopdedo.org/doku/public_scripts/index
の"IntrinsicText"を使って、会話ごとにテキストを表示。これはミッションファイルを編集する必要がある。