日本語化考察(過去)

(注) この記事は時代遅れです。

The Dark ModはDoom3のゲームエンジンを利用したModなので、日本語表示にはid Tech4が持つ制約

    • フォントデータに含められる文字数は256文字まで(制御文字を除く)

    • 現在ソースコードが公開されていない(そのうち公開されるらしい)

    • 行間にスペースが挿入される(少なくともDoom3では)

に対処する必要がある。

まず、ソースコードはいつ公開されるのかわからないので、現状でマルチバイト文字へ対応するようにプログラムを書き換えることはできない。

そこで、Thiefの場合と同じようにドット絵表示で日本語表示することを考える。ドット文字を隙間なく並べることができれば、ドット絵として文字列を表示させることができるものの、Doom3では行間にスペースが挿入されるため、そもそも文字を隙間なく並べることができない。これではThiefと同じ方法が使えないことになる。

Thiefと同じ方法が使えないならということで、他の方法を探してDoom3のSDKのソースコードを読んでみる。すると、src/renderer/RenderSystem.hにグリフデータのフォーマットが見つかる。

typedef struct {

int height; // number of scan lines

int top; // top of glyph in buffer

int bottom; // bottom of glyph in buffer

int pitch; // width for copying

int xSkip; // x adjustment

int imageWidth; // width of actual image

int imageHeight; // height of actual image

float s; // x offset in image where glyph starts

float t; // y offset in image where glyph starts

float s2;

float t2;

const idMaterial * glyph; // shader with the glyph

char shaderName[32];

} glyphInfo_t;

xSkipは文字送り幅のことだ。ということは文字送り幅ゼロのドット文字を作ればドット絵表示ができるかもしれない。高さ0から高さN-1のドット文字を重ねて表示すれば高さNのビットマップ画像一列分の表示になるはず。この表示を一列ずつ並べれば日本語表示ができるだろう。この方法なら同じ行にドット絵表示と通常文字を混在させることができるので、Thiefの時のドット絵表示の問題が一つ解決する。

・・・と考えて実際に試してみると、数文字分の表示には問題ないものの、それより少し長い文字列を渡すと目的のguiを表示する瞬間にクラッシュしてしまう。どうやら一行で表示する文字数が1000文字を越えるあたりでクラッシュしているようだ。それでもThiefの字幕のようにビット列を並べれば制限に収まるかもしれないが、ビットマップフォントを拡大したような汚い表示になる。それにこの方法はエンコードされたテキストデータを用意するのも面倒なので、素直にソースコードの公開を待った方がいいだろう。