pop↑ push↓

☆ (ゝω・)v

プログラムを改造する(1)

EU4のパッチの技術情報です。

もくてき

いままで解析してきたゲームを日本語化します。

さくせん その1

まず2バイト以上の文字が?(0x3F)になってしまう箇所を修正します。

なんとかして2バイトのコードポイントをその後の処理に渡して上げる必要があります。

ただし単純にUCS2に変換させると、バイト列に0x00バイトが出てきてしまい、失敗します。なぜならば0x00がnull文字だと勘違いされるからです。

そこでSHIFT_JISコード(実際にはCP932)を使います。これだとバイト列に0x00が出てきません。すべて1バイト文字だと錯覚させます。

でもまだ問題があります。このままだと後ろの処理で2バイト文字と1バイト文字との区別がつけられなくなってしまいます。

そこで適当な文字をエスケープ記号として使います。実験では0x10(伝送制御拡張)を使いました。他に使われてなさそうだからです。この後の文字は2バイト文字というオレオレルールにします。つまり下のような感じになります。

[ABあC] → [0x41][0x42][0x10][0x82][0xA0][0x43]

※もしくはUCS2に変換する方式をとって、バイト列に00があったときは0x01に置き換えて、さらにエスケープ文字を0x11にして、あとで1を引くというルールでも良いかもしれません。

さくせん その2

上記の理由でフォントデータのコードポイントはSHIFT_JISコードで作る必要があります。

BMFontのSVNにGeneratorのコードがあるので、これを改造してShiftJISのコードポイントになったフォントを吐き出すようにします。

それと、フォントのマッピング時にこんなことをしているので、ヒープを少し大きくして上げる必要があります。

後は1バイトづつ取り出して、対応する文字データを読み出している箇所で、エスケープ記号にした0x10が来た場合には、その後の2バイトをコードポイントとするように修正します。

次回はプログラムを改造する(2)です。