Ох, Херомант, долго тебе писать. По моему мнению, не прав ты по всем пунктам. И скорость тоже меряешь явно на глаз. Хуки здесь не при чём, даже в ИИ коде. Скажу проще, лапшу из асм кода никто никогда править не будет. А хук из ЕРМ/Lua/плагинов поправить — пара байт или одна строка кода. По скорости быстрее Эровских хуков ничего не придумаешь. Глобальных переменных не использует, мосты лаконичные, адреса статичные (для предсказания переходов и спекулятивного выполнения).
Если кто-то перехватил функцию и переписал её код, есть два варианта:
1) Сделать свой перехват и полный свой функционал.
2) Сделать свой перехват, выполнить доп. команды и вызвать перехваченную функцию, возможно с другими аргументами (а та может вызвать до этого перехваченную и т.д).
Оба подхода работают без проблем.
Если нужна замена части функционала, то call-перехвата почти всегда хватает. Если он умный, сам определяет размер перезаписанных данных, сам создаёт мост и бережно клонирует затёртые команды с их изменением (адреса, типы прыжков). Ну, таблицу switch-case пропатчить можно, конечно, но это обычный патч на запись N байт адреса.
P.S. Некоторые люди сталкивались с микроподлагиваниями в бою, но пока так и не нашли причину. Думаю, если она и есть, то в одном конкретном месте.
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|