pop↑ push↓

☆ (ゝω・)v

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

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

前回

パッチです。

popush.hatenablog.com

マップテキストの調整

概要

 今までのパッチ修正だけだと、マップ(国名など)のテキストが日本語化されません。修正したものとは別の関数で表示処理されているからです。

f:id:saito-matanki:20171001203444p:plain

さらに妙に間延びしていることがわかります。これはエスケープ文字も含めてバイト単位で処理されているからです。エスケープされた単位で扱うように変更しましょう。

修正

これはとあるループ内の処理です。 f:id:saito-matanki:20171001203716p:plain

途中、同じものをleaとcmovnbしてるところがあります。これは後述します。

修正して、エスケープされた単位で扱うようにします。 f:id:saito-matanki:20171001203849p:plain

良かったですね。 f:id:saito-matanki:20171001204110p:plain

マップテキストの表示処理1

概略

表示処理の修正に取り掛かります。ブレークポイントを駆使して見つけます。いつものやつです。

修正前

f:id:saito-matanki:20171001211508p:plain

修正後

f:id:saito-matanki:20171001211617p:plain

文字が出るようになりました。 f:id:saito-matanki:20171001211757p:plain

マップテキストの表示処理2

概略

 テキストの幅が変だったのを直していきます。ブレークポイントを駆使して見つけます。いつものやつです。

修正前

f:id:saito-matanki:20171001212521p:plain

修正後

f:id:saito-matanki:20171001213643p:plain

マップテキストの表示処理3

 テキストの幅が変だったのを直していきます。ブレークポイントを駆使して見つけます。いつものやつです。

修正前

f:id:saito-matanki:20171001214345p:plain

途中、得体の知れないコードがありますね。[ecx+14h]と10hを比較して大きければecxをアドレスとして解釈している場所がそれです。EU4では文字列が構造体になっている箇所があり、先頭から10hまでに文字列がはいり、14hは文字数が入ります。ただし文字数が10hを超えると構造体には入らないので、文字列はヒープに移されて文字列が入っていた場所にはそのアドレスが入ります。上記で言っていた同じ物をleaとcmovnbしているのもそれが理由です。

修正後

f:id:saito-matanki:20171001221728p:plain

マップのテキストが調整されました。 f:id:saito-matanki:20171001222623p:plain

話的にはここまで来ました。

popush.hatenablog.com

プログラムを改造する(7)へ続く