Просто пожаловаться зашел.
Все это время я тупо пытаюсь разобрать дизасм игры. И это чудовищно. Куча бессмысленных операций, повторы одного и того же, топтания на месте.
Ну, вот свежайший пример: код в одном месте осуществляет вызов подпрограммы (call), которая сложнейшими долгими вычислениями, с применением специально записанной в коде программы константы 0 (да, константа со значением ноль, прямо в середине кода, в виде двух нопов - код эту константу использует в качестве одного из слагаемых), вычисляет адрес возврата из этой подпрограммы, а затем торжественно осуществляет безусловный переход по этому адресу.
И я бы сказал, что проще было бы взять адрес возврата из стека, куда он автоматически помещается при вызове подпрограммы. И что его можно было бы и вообще не брать из стека вручную, ибо команда возврата (ret) сама его оттуда возьмет. Но самое чудовищное, что эти несколько подпрограмм БОЛЬШЕ НИЧЕГО БЛИН НЕ ДЕЛАЮТ, КРОМЕ ВЫЧИСЛЕНИЯ ЭТОГО ЧЕРТОВА АДРЕСА ВОЗВРАТА И ВЫПОЛНЕНИЯ ПЕРЕХОДА ПО НЕМУ!
На разбор этой цепочки кода я потратил не менее часа. И еще час я не мог поверить и перепроверял свои выводы в отладчике, чтобы убедиться, что я всё правильно понял, и что этот нехилый кусок кода можно просто безболезненно выбросить.
Я понимаю, что это компилированный ЯВУ. Но я не ожидал, что это был такой ТАЛАНТЛИВЫЙ компилятор!
- - - Добавлено - - -
И это я еще до игровой механики не дошел.