pop↑ push↓

☆ (ゝω・)v

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

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

前回

popush.hatenablog.com

バグ修正

下記の記事で修正したときに混入したバグを直します。

popush.hatenablog.com

var_630というのがいますね。これは元々いませんでした。 f:id:saito-matanki:20171007204409p:plain

いないのに上書きするとメモリが破壊されて死にます。

修正

ルーチンの最初でローカル変数用の領域を確保しています。0x630に書き込むためには0xC(3回push)しているので、0x630 - 0xC = 0x624に修正する必要があります。 f:id:saito-matanki:20171007204529p:plain

ツールチップの修正1

内容的にはこのあたりです

popush.hatenablog.com

修正前1

文字転送です。 f:id:saito-matanki:20171007213130p:plain

修正後1

エスケープだけ転送されてしまうのを防ぎます。 f:id:saito-matanki:20171007215020p:plain

修正前2

修正前1の下の方にあるいつものやつです。 f:id:saito-matanki:20171007213523p:plain

修正後2

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

ツールチップを直していたはずですが、何故かボタンのテキストの位置が調整されました。 f:id:saito-matanki:20171007220855p:plain

ツールチップの修正2

いつものやつです

修正前

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

修正後

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

ツールチップの修正3

内容的にはこのあたりです。 popush.hatenablog.com

ツールチップの改行位置の特定ですが、1文字づつ幅を計算して・・・とはいきません。改行位置の特定は二分探索で行われるからです。全体の文字列がNあったらN/2の文字列の長さを計算し、表示に余裕があれば、N/4を足して・・といった感じです。ここで問題なのが文字列の長さ=バイト数なので、エスケープされた文字列に対してはうまくいきません。そこで、文字列の長さを計算する関数を改造して、文字列の長さを正しく返却するようにします。

修正

ツールチップの修正2を更に修正します。バイトがはみ出たら強制的にループを抜けるようにします。 f:id:saito-matanki:20171007233307p:plain

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