Я просто оставлю это здесь (пока)
кажется, второй самый худший код для героев после реализации драконьей башни, а я неплох в плохом коде!
https://pastebin.com/QJ2Te0tF
Для добавления заклинаний как новых кнопок вообще важны только первые три хука, причем они все проще молотка (в молотке и то деталей больше)
Code:
patcher->WriteHiHook(0x4D95A0,SPLICE_,EXTENDED_, THISCALL_, (void*)GiveSpell_hook);
//Spell book
patcher->WriteLoHook(0x59CD5B,(void*)HasSpellLoHook);
patcher->WriteDword(0x59CDBF,0x2530+0x88*40);
первый позволяет давать новые заклинания, если они, например, заданы в святыне на карте при помощи ERM (как-то так я их и тестил)
третий - отображать их в книге, расширяя просматриваемый массив структур заклинаний, кажется, на сорок (наверное, для примера. 0x88 - sizeof структуры заклинаний)
второй - при отображении их в книге брать их не из артефактов выхода за границы массива заклинаний в структуре героя, а там, куда положил первый
дальше нам нужно, например, что-то ими делать в бою
для этого в хуке SpellChosen мы патчим обработку свитча на тему того, что в бою происходит после того, как книжка закрылась. Насколько я помню, это выбор того, насколько у нас немедленная реакция: шарахаем ли мы сразу, или надо помахать курсором, или еще что-то. Не помню все варианты, надо смотреть свитч и логически рассуждать.
SpellCast - собственно каст спелла. Насколько я помню, мы добрались только до ререализации заклинаний существ как заклинаний поля боя (и то не всех), отдельных массовых версий для баффов и какой-то демонстративной палки-убивалки, но там на самом деле делать чистый каеф, ты просто берешь и делаешь геймплей, особо не борясь с обычными проблемами. Можно вообще CallERM вызвать, и обрабатывать в скрипте.
После этого уже идут более нишевые правки.
Дальше идет расширялка структуры анимаций, потому что нам понадобились дополнительные, и вынос её заполнения в текстовик, потому что нам надо было её редактировать не через три кхм пары рук. Расширялка, кстати, несамосогласованная, 999 - это перебор, потому что там все равно дальше мы упираемся в ограничение на знаковый байт. Насколько я помню, оно довольно легко обходимо, но руки не дошли, и нужды не было.
Еще дальше изменение обработки текстовика заклинаний, с выносом в него индекса анимации и флагов.
Еще ниже идут совсем наши заморочки, новая анимация для хладного луча, двоечная анимация для молнии и цепной молнии — кстати, вы знали, что код генерации снарядов-лучей унаследован из двойки со всеми её фичами, даже не используемыми в тройке? теперь знаете — новая анимация для грохота титанов и двоечная же для удачи (комментарий к последнему хуку врет).
Совсем после этого - попытки в добавить новые заклинания в ГМ городов (точнее, переписать генератор, заодно избавившись от четырех защит от стихий и двух вызовов элементалей в одной ГМ). Недоделанные.