Объявления

Форум о Героях Меча и Магии и King's Bounty. Если Вы любите эти игры, мы будем рады видеть Вас в наших рядах. :smile2:

Плагины для оригинальных Героев 3

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1212
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 309 раз.

Плагины для оригинальных Героев 3

Сообщение Ben80 » 11 сен 2020, 07:09

Решил развивать альтернативный подход к моддингу Героев 3, использующий как моддинговую платформу саму оригинальную игру (без HD мода). Здесь будут представлены плагины, которые по сути представляют собой целый мод - мод, развивающий идеи Heroes 3 Plus viewtopic.php?f=56&t=921.

Для подгрузки плагинов мы используем Loader.asi (автор AlexSpl), которая, будучи расположенной в корневой папке игры, загружается автоматически
самой игрой. Таким образом, отпадает необходимость редактировать EXE файл.

Наши плагины (как и плагины для HD мода) используют библиотеку, созданную baratorch, patcher_x86.dll, поэтому этот файл также должен присутствовать в корневой папке игры.

Здесь будут выкладываться плагины именно для оригинальных версий игры. Возможно (и рекомендуется) совместное использование с GL Wrapper, автор verok). Версии, поддерживаемые на данный момент:

Restoration of Erathia 1.4 (English)
Armageddon's Blade 2.2 (English)
Shadow of Death 3.2 (English)
Complete (English)
Armageddon's Blade 2.1 (Russian, Buka)
Armageddon's Blade 2.2 (Russian, Buka)
Shadow of Death 3.1 (Russian, Buka)
Complete (Russian, Buka)
Armageddon's Blade 2.1 (France)
Shadow of Death 3.1 (France)
Shadow of Death 3.2 (Poland)
Armageddon's Blade 2.2 / Shadow of Death 3.2 (Poland)

Heroes Chronicles (English)
Heroes Chronicles (Russian, Buka)
Heroes Chronicles, Sword of Frost (USA)
Heroes Chronicles, Clash of the Dragons (Germany, GOG)


Данные по структурам оригинальной игры SoD 3.2 Eng были использованы по результатам анализа разных источников (IDA база от ZVS и Роженко, С++ заголовочники от baratorch и Sav, исходники WOG, H3API от RoseKavalier и тд).

В целом планируется небольшое число крупных плагинов (можно назвать их модулями), которые можно будет использовать независимо друг от друга в любых сочетаниях.
Планируется, что это будут модули:
1) исправления багов оригинальной игры
2) улучшенный ИИ
3) дополнительные горячие клавиши и иные удобства для игры
4) изменения игрового процесса. Допускаются следующие изменения:
a) такие, благодаря которым оригинальная игра сильно выигрывает в качестве в целом (например, ослабление заклинаний Медлительность и Ускорение), то есть, как правило, это устранение явных и сильных дизбалансов.
б) элементы игры, первоначально намеченные разработчиками NWC к реализации, но не внедренные в итоговую версию игры. При этом эти элементы должны положительно влиять на изменение игрового процесса. Пример - отрицательная удача.
Изменения, призванные просто сделать игру лучше в каких-то аспектах (например, балансирование заклинаний, вторичных навыков, существ) - не являются приемлемыми.

Необходимо скачать архив и распаковать файлы оттуда в корневую папку игры.
loader.zip
(106.69 КБ) Скачиваний: 964

Плагины, которые вы хотели бы добавить в игру нужно будет положить в папку Plugins (класть нужно непосредственно DLL файлы, а не папки, содержащие DLL файлы).

Готовые модули:

1) Исправления багов оригинальной игры
H3_10_BugFixes.zip
(16.04 КБ) Скачиваний: 138

исходный код
H3_10_BugFixes_Sources.zip
(3.67 МБ) Скачиваний: 129

Обновлено 27.06.2021
(использованы собственные наработки, а также труды baratorch, igrik, RoseKavalier, Sav (которые, в свою очередь, несомненно использовали наработки первых моддеров-первопроходцев Героев 3))
- баг с увеличеним урона от стрелковых башен при наличии навыка Доспехов, а также наложенных Окаменении или Воздушного Щита
- баг с несрабатыванием удачи в битве для монстров без героя
- баг с добавлением очков передвижения по морю, если другой игрок отстроил маяк в Замке
- баг с заклинанием Клон в битве
- баг с Лагерем беженцев на случайных картах
- баг с Хижиной ведьмы на случайных картах
- баг генерации героев на случайных картах
- баг со слухами в таверне (возможный вылет игры)
- баги "подсматривания" в мультиплеере ("Not me bugs")
- баг с оставлением героя без войск вообще ("ghost hero")
- баг ИИ в RoE и AB - учет урона рва в битве
- баги с использованием строения "Торговцы артефактами"
- баг с артефактом Альянс ангелов
- баги при игре с игроком-союзником
- баг с отлетом Гарпий после контратаки Дендроидов в битве
- баг использования заклинания Маскировка
- баг со Шляпой Адмирала
- баг в теоретической битве ИИ против ИИ, связанный с передачей артефактов после боя
- баг с применением Некромантии в битвах ИИ
- баг с исчезновением улучшенного стека после битвы с нейтралами
- баг с применением ИИ заклинания Полет вместо заклинания Хождение по воде
- баг быстрой битвы, связанный с летающими стеками
- баг двойного применения заклинаний в течение одного раунда
- баги русских версий (агрессивность героев, отсутствие надписей количества существ по правой кнопке на герое на карте)
- баг с типами зон для случайных карт
- баг с применением в битве Устранения препятствий при наличии препятствий, созданных заклинаниями (вылет)
- баги отсутствия в некоторых ситуациях расчета актуального максимального запаса движения героев на карте
- баги, связанные с применением Забывчивости в битве (массовая версия на продвинутом уровне навыка Магия воды + лишний штраф к наносимому урону)
- баг непересчета мувпойнтов из морских в сухопутные при побеге в битве на море.

Готовые небольшие плагины:

1) Генератор случайных карт для SoD - то есть не для Complete, без необходимости создавать пустые файлы h3blade.exe и другие (возможность работы ГСК без этих пустых файлов можно было увидеть достаточно давно в бин.патче Берсеркера). И - на картах и в игре не будет ни замков Сопряжения, ни героев. То есть тот же игровой процесс, что и в авторских картах SoD (сделанных вручную в редакторе), запущенных в "чистом" SoD.
H3_15_RMG_SoD_Enable.zip
(3.7 КБ) Скачиваний: 131

исходный код
H3_15_RMG_SoD_Enable_Sources.zip
(2.8 МБ) Скачиваний: 131


Заголовочники-исходники:
include2021.zip
(29.57 КБ) Скачиваний: 130
Последний раз редактировалось Ben80 28 июн 2021, 12:45, всего редактировалось 22 раз(а).
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 233 раз.

Re: ASI плагины для оригинальных Героев 3

Сообщение RoseKavalier » 11 сен 2020, 12:27

Interesting work, how did you locate addresses in all separate versions of the game, given all executables are compiled differently? There is likely more efficient way to detect exe version by looking at entry point and only then performing some sanitary checks. One needs the executables to perform this task of course.

Do you know at what precise time during load process ASI plugins are loaded?

Sorry, I don't have any plugin contribution at this time(
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1212
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 309 раз.

Re: ASI плагины для оригинальных Героев 3

Сообщение Ben80 » 11 сен 2020, 12:40

Код: Выделить всё
given all executables are compiled differently


Как ни странно, код очень похож у всех EXE файлов, вплоть до использованных asm регистров - собственно, это и сделало работу выполнимой в разумные сроки. Сами хуки - почти всегда одни и те же для разных версий, различаются только их адреса. Поиск по небольшим "паттернам" кода (niddles or how they are called) - был легким (обычно требовалось всего несколько байт). Но да, это было сделано вручную, что требует определенной усидчивости. Можно видеть, что у меня в основном поддерживаются финальные версии (1.4, 2.2, 3.2) - насколько я знаю, разработчики NWC в свое время приложили специальные усилия, чтобы привести в некое единообразие все три основных версии игры (RoE, AB, SoD), взяв за основу код из SoD 3.2

Точно я не исследовал, когда загружаются ASI плагины, но это происходит несколько позже, чем загрузка основных TXT ресурсов игры (к сожалению). Кроме того, могу сказать, что к моменту выполнения кода по адресу 0x4EEE0B (SOD 3.2 English) ASI плагины уже работают.

С проверкой версий EXE файлов все просто (подход заимствован из GLWrapper). Пример для SoD 3.2 (English):
Код: Выделить всё
            // for HoMM SoD 3.2 (eng)
            check1 = *(int*)(0x4F8193+1);
            check2 = *(int*)(0x602149+1);
            if(check1 == (WS_VISIBLE | WS_POPUP) && check2 == (WS_VISIBLE | WS_POPUP))
            {
...
Последний раз редактировалось Ben80 11 сен 2020, 13:00, всего редактировалось 1 раз.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1212
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 309 раз.

Re: ASI плагины для оригинальных Героев 3

Сообщение Ben80 » 11 сен 2020, 12:47

RoseKavalier писал(а):

I
Sorry, I don't have any plugin contribution at this time(


It would be very nice if you will contribute - for example, plugins with hotkeys (HD mod and beyond) :smile1:
Ну а насчет того, чтобы кто-то помог с кодом для ИИ - увы, даже не мечтаю :smile1:
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5110
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 1954 раз.

Re: ASI плагины для оригинальных Героев 3

Сообщение AlexSpl » 04 окт 2020, 15:24

Ben80, у меня появилась идея: ведь Loader.dll, который мы обсуждали, - простой загрузчик dll-ок из папки Plugins, а много плагинов в корне как-то не очень хорошо с точки зрения менеджмента :smile2: Так вот, а что если попробовать скинуть твои ASI-плагины в папку Plugins, переименовав их в dll, а Loader.dll - в Loader.asi. По идее, должно работать. Можно даже переписать код так, чтобы он загружал плагины в том порядке, который указан в каком-нибудь ini-файле.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1212
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 309 раз.

Re: ASI плагины для оригинальных Героев 3

Сообщение Ben80 » 04 окт 2020, 15:28

Идея может и неплохая, но у меня с менеджментом всегда было плохо :smile12:
По моей системе менеджмента предполагалось, что все плагины будут именоваться начиная с буквы "Z", не создавая мусорку в корневой папке.

Извиняюсь, но пока рассмотрение данного вопроса переносится :smile1:
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 890
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 49 раз.

Re: Плагины для оригинальных Героев 3

Сообщение Rolex » 10 авг 2021, 20:30

Может кто в курсе, в чем может быть проблема. Кидаю патчер (patcher_x86.dll) и asi-плагины (переименованные dll) в корень к экзешнику. Когда доходит дело к проверке того или иного плагина, происходит вылет.
Для удаления героя из города, например, вылет происходит именно при попытке открыть окно героя, для Волшебного зеркала при касте этого закла и тд. Вылетает с сообщением "Прекращена работа программы Heroes of Might and Magic III...".

Изображение

Также пытался подгружать плагины через модуль Loader.asi, который кидаю в корень с патчером, а сами dll в Plugins. Проблема аналогична. Ради интересна даже поставил на вируталку чистую Win7 x64 и... проблема осталась. Проверял как на русскоязычной верссии Полного собрания от Бука, так и на англоязычной Complete от GOG. Может кто знает с чем может быть связана данная проблема?

***

@Ben80, а вы не могли бы по свободе выложить отдельную версию вашего плагина с теми фиксами багов оригинала, которые были сделаны исключительно Вами, igrik и Sav, но при этом, которых нет в HD-моде (baratorch) и SoD_SP (RoseKavalier)? То есть с теми исправлениями, которые не исправляет HD-мод и с теми, которые не исправляет SoD_SP. Или, может быть, SoD_SP все же исправляет все, что входит в ваш H3_10_BugFixes?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5110
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 1954 раз.

Re: Плагины для оригинальных Героев 3

Сообщение AlexSpl » 10 авг 2021, 22:57

Если дело не в невыставленном в 1 байт выравнивании структур, то могу предположить, что Вы используете не SoD 3.2, а, например, 3.0. HD мод на любой совместимой версии Героев 3 запускает экзешник SoD 3.2, поэтому там проблема и не наблюдается, скорее всего.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 890
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 49 раз.

Re: Плагины для оригинальных Героев 3

Сообщение Rolex » 11 авг 2021, 10:34

Нет, с выравниванием точно все в порядке. Всегда ставлю 1 байт.

Я, кажется, понял в чем была проблема. Во всех случаях я тестил на версии экзешника 4.0.

AlexSpl, а вы не в курсе всех особенностей и различий между англ Complete 4.0 и SoD 3.2? Насколько мне известно, то в Complete 4.0 можно смотреть полное кол-во и остаток маны у вражеского героя, а Сопряжение и возможность создавать случайные карты в самом редакторе есть со старта в отличии от SoD, где нужно создавать доп файлы. И в плане сетовое игры, вроде, есть какие-то отличия.
А в Платиновой серии от Буки это еще и дополнительный столбец Plural в родительном падеже в CRTRAITS.TXT и возможность использовать русский текст в чате. Это все, что мне известно на данный момент. Но, наверняка, различий между 3.2 и 4.0 гораздо больше, нежели мне известно. И как с фиксом багов по умолчанию обстоят дела в обоих случаях (3.2 и 4.0)?

Кстати, у Ben80 в шапке указано, что поддерживаються все версии и Complete 4.0 (Eng и Buka), и даже Хроники. Да и по исходниками видно, что сделано для всех версий перечисленых в шапке, под каждый экзешник свои адреса хуков. То есть по идее должно работать и с ними. Может что с определением версии не так? Или как тогда его ипользовать, чтобы все работало без вылетов на всех версиях, которые указаны в шапке, чтобы не разделять код плагина и не собирать под каждую версию свой плагин?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5110
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 1954 раз.

Re: Плагины для оригинальных Героев 3

Сообщение AlexSpl » 11 авг 2021, 11:16

Цитата:
Я, кажется, понял в чем была проблема. Во всех случаях я тестил на версии экзешника 4.0.

Да, я потом понял по иконке, что это Complete. Для Complete нужны другие адреса хуков (а в русской версии Полного издания некоторые игровые структуры чуть-чуть другие даже).

Цитата:
Кстати, у Ben80 в шапке указано, что поддерживаються все версии и Complete 4.0 (Eng и Buka), и даже Хроники.

Эти версии поддерживают только плагины Ben80. Остальные плагины в большинстве случаев работать не будут ни с какой другой версией оригинальной игры, кроме SoD 3.2.
Вернуться к началу

След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron