Пока я готовлюсь к релизу, опишу нововведения, которые ждут вас в NH3API:
1. Сегодня добавил в patcher_x86.hpp "новый" вид хуков - jmp-лоухук,
JmpHook. Интерфейс примерно такой:
- Код: Выделить всё
// Сид RMG всегда будет = 1337.
CREATE_JH(JH_SetRandomSeed1337, edi, { mov eax, 1337 });
// ... //
p->WriteJmpHook(0x53662C, 0x536637, JH_SetRandomSeed1337);
По-сути это аналог
WriteAsmHook, но чуть быстрее при инициализации Patcher-a.
Особенность в том, что он
супербыстрый и меняет только те регистры, которые нужны. Таким образом его очень хорошо вставить, например, в цикл. Обычный лоухук будет долго сохранять старые регистры а потом восстанавливать, и все ради буквально одного изменения регистра. Это можно теперь избежать.. Для
небольших изменений в коде jmp-лоухук подходит идеально.
2. Поддержка трёх компиляторов.
Планируется поддержка всех версий
Microsoft Visual C++ начиная от
VS 2008. А так же
MinGW-w64 и
Clang.
Таким образом это в т.ч. и поддержка стандартов от C++98 до C++23.
3. Поддержка легаси-кода. Те самые воговские макросы _dword_, _ptr_, MemCopy, MemZero будут в положении
deprecated, но всё ещё будут поддерживаться.
4. В дальнейшем планируется поддержка других версий игры, можно будет одним переключением макроса компилятора забилдить мод для другой версии экзешника игры.
5. Отсутствие .cpp файлов. Для кого-то это плюс. Тем не менее, для удобной интеграции NH3API с вашими проектами с разными библиотеками это хорошо.
6.
Скорее всего, я сделаю многие функции weak-символами. Таким образом можно будет их переписывать в своём проекте и не трогать исходники NH3API.
7. Удобный интерфейс в отношении работы с функциями экзешника. К сожалению для сохранения обратной совместимости с C++98 CALL_ макросы придется оставить, но в NH3API уже будут многие функции, необходимые для удобной разработки мода. Так, например, ключевые функции по типу
operator new,
operator delete,
atexit будут иметь приставку
exe_