EU4パッチの技術情報です。
前回
パッチです。
マップテキストの調整
概要
今までのパッチ修正だけだと、マップ(国名など)のテキストが日本語化されません。修正したものとは別の関数で表示処理されているからです。
さらに妙に間延びしていることがわかります。これはエスケープ文字も含めてバイト単位で処理されているからです。エスケープされた単位で扱うように変更しましょう。
修正
これはとあるループ内の処理です。
途中、同じものをleaとcmovnbしてるところがあります。これは後述します。
修正して、エスケープされた単位で扱うようにします。
良かったですね。
マップテキストの表示処理1
概略
表示処理の修正に取り掛かります。ブレークポイントを駆使して見つけます。いつものやつです。
修正前
修正後
文字が出るようになりました。
マップテキストの表示処理2
概略
テキストの幅が変だったのを直していきます。ブレークポイントを駆使して見つけます。いつものやつです。
修正前
修正後
マップテキストの表示処理3
テキストの幅が変だったのを直していきます。ブレークポイントを駆使して見つけます。いつものやつです。
修正前
途中、得体の知れないコードがありますね。[ecx+14h]と10hを比較して大きければecxをアドレスとして解釈している場所がそれです。EU4では文字列が構造体になっている箇所があり、先頭から10hまでに文字列がはいり、14hは文字数が入ります。ただし文字数が10hを超えると構造体には入らないので、文字列はヒープに移されて文字列が入っていた場所にはそのアドレスが入ります。上記で言っていた同じ物をleaとcmovnbしているのもそれが理由です。
修正後
マップのテキストが調整されました。
話的にはここまで来ました。
プログラムを改造する(7)へ続く