プログラムを変更する(2)
CK2パッチの技術情報です。
前回
改造用にコードセグメントを追加
EU4でいうと下記です。今回は0x2000とりました。 popush.hatenablog.com
ヒープ拡張
EU4でいうと下記です。ランチャーのヒープは見つかりました。0x2684で、オフセットは0x8Cでした。サイズは0x400でEU4と同じでした。ヒープサイズは0x42684にしました。 popush.hatenablog.com
ヒープサイズの見つけ方についてメモしておきます。[edx+ecx*4+8Ch]というコードが配列にデータを入れているということがわかったら、edxが関数にどのように渡されているかを調べます。今回はecx→edi→[ebp+var_1C](ローカル変数)→edxでした。ということで、ecx渡しされていることがわかります。そうしたら、呼び出し元の関数までいき、また同じことを繰り返します。しばらく繰り返すと、今度はそのアドレスに対して、heepAllocしている関数がでてくるはずなので、探します。heepAllocを見つけたらその前でpushされている値があるのでそれがヒープサイズです。
フォント
フォントの定義はスプレッドシートにまとめてあります。基本的には遊書体とSource Hanを使っています。一部例外としてメイリオを定義しています。 フォントの作り方に注意があります。EU4と同じ方法でつくると読み込みません。下記に注意します。
- 1行目のunicode=1 は削る
- 1行目のoutline=0は削る
- 1行目のpacked=0以降は削る
- 2行目のpage id=0は削る
- chars count=xxxxは削る
- charの行にある chnl=xxは削る
このフォントとヒープサイズの修正で、日本語フォントを読み込んでもランチャーが強制終了すること無く起動するようになります。