プログラムを改造する(5)
EU4のパッチに関する技術情報です。
前回
パッチです。 popush.hatenablog.com
文字の修正1
概略
8/24のメモには文字を修正した1と書かれていました。実際は前回(幅関連?)のバグフィックスでした。
修正
ローカル変数に上書きするのを忘れていた処理を追加しただけ。
文字の修正2
概要
8/25のメモには文字を修正した2と書かれていましたが日付的に下記の変更ですので、改行周りの修正になります。
そもそも文章が改行されないのは、欧文はスペースで区切られているのが基本であり、そのどこかで改行をするのが一般的だからです。これをword wrapといいます。EU4では文字を1文字づつ送り出していきながら、送り幅を合計していき、文字にスペースが来たときに初めて送り幅の合計と表示できるエリアの幅を比較して、文字を改行するかどうか(バイト列に改行コードを入れるか)を決定します。よってスペースが1個も無いと、1回も比較されることがなくなり、文字がズビャビーと長くなってしまいます。
そして修正方を色々と考えたのですが、面倒だったため、UCS2が0xFFを超えていたら(エスケープされていたら)、強制的に幅を比較する分岐に入るようにしました。本当はもっと良いアルゴリズムがあると思います。上記の記事で技術的に妥協というのはそうゆうことです。
修正
UCS2を比較に使えるようにとっておきます。
UCS2が0xFFより大きいと強制的に比較処理に入るようにします。
結果として文章が改行されます。
次回はプログラムを改造する(6)です