Elinのmodを作っていた。戦争依頼で敵を呼ぶ角笛を無限に吹けるようにするmod。
if文にev.wave % 5 != 0という条件があって、5 waveに1回角笛が吹けなくなっていた。これを常にtrueにするために、Harmony Transpilerという仕組みを使ってC#のILを書き換えていた。
stackへの5のpushをpopに、%に対応する命令をtrueのpushに置き換えて、stackを調整しつつ常に条件をtrueにしている。
modを作るのってこんなことするのだなあと学びがある。メソッド全体を置き換えるのに比べてゲーム自体のアップデートへの追従や、他modとの組み合わせで問題が起きづらくなるらしい。 コンパイラの最適化とかでILが変わったりしてmodが動かなくなるとかありそうでちょっと怖い。