Объявления

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

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineХеромант  
имя: OL
Новичок
Новичок
 
Сообщения: 14
Зарегистрирован: 21 ноя 2021, 19:42
Пол: Мужчина
Поблагодарили: 2 раз.

Re: Как создать плагин для HD мода

Сообщение Херомант » 25 дек 2021, 19:44

void_17 писал(а):

А Херомант открыл лишь верхушку айсберга. Да и объективно, тогда в 2020, ему эта инфа напрочь не сдалась. Он выдрал лежащие на поверхности названия исполняемых файлов и с этим конец, мол, просто как интересный факт, гляньте, ребята, больше ничего сказать не могу. И на этом остановился. А зряяя...


Меня с самого начала интересовали имена исходных сишных файлов. Как только удалось раздобыть образ дримкастовой версии игры (добрые люди выложили её прямой ссылкой на heroescommunity), извлечь exe и диассемблировать в IDA - увидел тонну оригинальных имен функций вместе с отладочной информацией. Имена переписал к себе. Крупицу информации разместил на вог-форуме, вдруг кому-то будет интересно. Так получилось, что заинтересовало это только void_17. Остальным форумчанам было наверное не до этого.


void_17 писал(а):

Да и впринципе, Херомант, как и многие другие воговцы, очень консервативные ребята, прям до невозможного. Дальше ERM-а и древней воговской базы из нулевых им особо ничего не интересно, кстати до сих пор, когда уже у нас есть такая база и дамп.


Приемущество этой воговской базы в том, что с ней можно работать на всяком старье, увы, этот фактор критический для меня. Второе - привычка работать с именами функций Sav-а. Они очень удачно придуманы и практически сразу понимаешь назначение функции в игре, оригинальные менее понятные для меня, но ценность их выше, т.к. их значительно больше. Ну и третье - переделывать существующие исходники глобальных платформ/модов под оригинальные данные из дампов NWC вряд ли кто-то станет, например в MoP я откоментировал моповские структуры оригинальными именами, по которым лучше можно понять назначение тех или иных элементов, делать что-то большее - уже слишком затратно по времени (а многим воговцам уже в районе 40 лет, семья, дети м всё такое... юношеского максимализма в нас давно нет). Мы обремены собственными пректами, в первую очередь занимаемся именно моддингом на основе того, с чего начинали (а все наверное начинали именно с воговской базы и плагина-примера а-ля HelloWord, по секрету скажу, что до WoG 3.58 вообще никакой базы не было).

На ERM сидят в основном новички и те, кому что-то не хватает перейти на написание плагинов. Да, потуги ERM-щиков могут выглядеть несерьёзными по сравнению с делами, которые мутят в плагинах, но популярность на ЭРЕ именно за модами на ERM - они просты, могут быть сделаны за короткое время и не требуют диассемблированной базы. Те же глобальные моды на новые города нужны подавляющему меньшенству.


void_17 писал(а):

Я же продвигаю более современный подход к реверсингу, более эффективный и стандартизированный, полагаю, что AlexSpl и тем более RoseKavalier ценят такой подход.


Тоже ценю Ваш труд, но, увы, воспользоваться могу только тем, что Вы публикуете на форуме. У себя в базе я использую только ассемблер, СИ-шный код для меня полностью безполезен, т.к. его просто негде применять - мне проще набрать код на ассемблере, чем мучаться с изучением СИ (этот язык слишком сложный для меня, человека с IQ=60).
Вернуться к началу

offlineEranikus  
имя: Максим
 
Сообщения: 9
Зарегистрирован: 02 авг 2019, 10:45
Пол: Мужчина
Поблагодарили: 3 раз.

Re: Как создать плагин для HD мода

Сообщение Eranikus » 13 янв 2022, 16:17

Что-то у меня после обнов ХД-мода плагин NewSpells гарантированно крашит игру при старте любого боя, независимо от наличия новых заклинаний. Раньше работало нормально.
Вернуться к началу

onlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 4974
Зарегистрирован: 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)
Поблагодарили: 1887 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 13 янв 2022, 16:27

Попробуйте отключить фикс очереди ходов (<UI.QueueFix> = 0 в NewSpells.ini). Это исправление патчит библиотеку HD мода и может ломаться при обновлении. А как обойтись без патча самой dll, я не знаю.
Вернуться к началу

offlineEranikus  
имя: Максим
 
Сообщения: 9
Зарегистрирован: 02 авг 2019, 10:45
Пол: Мужчина
Поблагодарили: 3 раз.

Re: Как создать плагин для HD мода

Сообщение Eranikus » 13 янв 2022, 16:33

AlexSpl писал(а):

Попробуйте отключить фикс очереди ходов (<UI.QueueFix> = 0 в NewSpells.ini). Это исправление патчит библиотеку HD мода и может ломаться при обновлении. А как обойтись без патча самой dll, я не знаю.

Да, перестало крашить. Спасибо)
Вернуться к началу

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

Re: Как создать плагин для HD мода

Сообщение Rolex » 13 янв 2022, 16:48

AlexSpl писал(а):

Осталось написать функцию взвешивания для Drain Life


Rolex писал(а):

Получается осталось доделать функцию взвешивания для Drain Life + разобрать Adventure AI и прикрутить каст Mobility для AI.


Как там успехи с функцией взвешивания для Drain Life? А то, вроде, изначально хотели написать, но вот в последнем обновлении ее почему-то не было. Слишком сложно?

AlexSpl писал(а):

А как обойтись без патча самой dll, я не знаю.

Напишите на его почту baratorch@yandex.ru описав детально суть проблемы с очередью. Ну или в личку на df2. Чтобы он сам в своих исходниках это исправил.
Вернуться к началу

onlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 4974
Зарегистрирован: 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)
Поблагодарили: 1887 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 13 янв 2022, 17:46

Цитата:
Как там успехи с функцией взвешивания для Drain Life? А то, вроде, изначально хотели написать, но вот в последнем обновлении ее почему-то не было. Слишком сложно?

Не то чтобы сложно. Похожих функций взвешивания нет, а хочется ведь как можно больше моментов учесть. Что-нибудь придумаю. Задачу-минимум я уже обозначил выше (включая правки заклинаний Fear и Dispel/Cure).

Цитата:
Напишите на его почту baratorch@yandex.ru описав детально суть проблемы с очередью. Ну или в личку на df2. Чтобы он сам в своих исходниках это исправил.

В принципе, можно и с отключённой очередью играть, но попробую написать как-нибудь. Может, и согласится сделать мини-API для очереди ходов.
Вернуться к началу

offlinevoid_17  
имя: DM
Мастер
Мастер
 
Сообщения: 386
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 58 раз.

Re: Как создать плагин для HD мода

Сообщение void_17 » 14 янв 2022, 04:22

Чтобы бараторч что-нибудь сделал для мододелов, тем более API... Ну-ну.
Вернуться к началу

offlinebaratorch  
имя: Александр
 
Сообщения: 6
Зарегистрирован: 09 фев 2022, 11:24
Пол: Мужчина
Поблагодарили: 5 раз.

Re: Как создать плагин для HD мода

Сообщение baratorch » 09 фев 2022, 11:38

Я понимаю, когда мы пишем фикс или улучшение для оригинальных героев. Но какой резон писать фикс для Хд-мода? В чем сложность описать проблему и предложить решение мне?
Что за фикс очереди ходов? Где этот фикс?
Код очереди в ХД - это код РоузКавайлера с моими фиксами и изменениями интерфейсной части. То что, код до сих пор содержит баги и недостатки я и сам знаю, однако о воспроизводимых недостатках на текущий момент мне ничего не известно. С тех пор как я получил код, те неостатки, о котрых я узнавал и которые мог воспроизвести я исправлял.

Вообще да, программеру в большинстве случаев проще договориться с кодом, чем с человеком. Но почему вы даже не пробуете обсуждать проблемы со мной?
Вернуться к началу

onlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 4974
Зарегистрирован: 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)
Поблагодарили: 1887 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 09 фев 2022, 15:15

Цитата:
То что, код до сих пор содержит баги и недостатки я и сам знаю, однако о воспроизводимых недостатках на текущий момент мне ничего не известно.

Приветствую! С самой очередью ходов всё в порядке. Есть куда улучшать, конечно. Можно поправить информацию об отряде по правому клику на его иконке в очереди, чтобы там отображались корректные параметры отряда (атака, защита, скорость и т.п.). Например, мы знаем, что в следующем раунде прекращается действие заклинания Slow. Можно сделать так, чтобы при клике на иконку отряда для текущего раунда показывалась скорость под Slow, а для следующего - уже без него. Порядок ходов и сейчас корректный, но, к примеру, скорость что в текущем раунде, что в раунде, когда заклинание прекращает действовать, одна и та же.

Но это так, ерунда и некритично. Важно вот что: как "легально" добавить проверку на ещё три заклинания, изменяющих скорость: Fear, Disease и Explosion? Чтобы очередь ходов учитывала такие нестандартные заклинания, а не только Slow, Haste и Prayer.

Код: Выделить всё
int __stdcall queueFix(LoHook* h, HookContext* c)
{
   Army* army = (Army*)c->ecx;

   if (army->active_spell_duration[SPELL_SLOW] || army->active_spell_duration[SPELL_DISEASE] || army->active_spell_duration[SPELL_FEAR])
   {
     int queueLength = *(int*)(c->ebp - 0xC);
     int speed = *(int*)(c->ebp - 0x10);
     int minSpeedMod = 100;

     if (army->active_spell_duration[SPELL_SLOW] > queueLength && slowSpell[army->side][army->index_on_side].speedMod < minSpeedMod)
       minSpeedMod = slowSpell[army->side][army->index_on_side].speedMod;

     if (army->active_spell_duration[SPELL_DISEASE] > queueLength && diseaseSpell[army->side][army->index_on_side].speedMod < minSpeedMod)
       minSpeedMod = diseaseSpell[army->side][army->index_on_side].speedMod;

     if (army->active_spell_duration[SPELL_FEAR] > queueLength && fearSpell[army->side][army->index_on_side].speedMod < minSpeedMod)
       minSpeedMod = fearSpell[army->side][army->index_on_side].speedMod;

     speed = (int)(speed * minSpeedMod / 100.0f);
     *(int*)(c->ebp - 0x10) = speed;
   }

   c->return_address = (int)hHD_SOD + 0x2264A + 0xC00;
   return NO_EXEC_DEFAULT;
}

Т.е. хотелось бы иметь возможность получать текущую длину очереди, добавлять кастомную проверку на заклинания (изменять условие) и прописывать новую скорость. Если бы это был оригинальный код, обошлось бы всё хуком, но код очереди же в dll. А dll нормально не хукнешь: высока вероятность того, что такой хук слетит при следующем обновлении этой библиотеки.
Вернуться к началу

offlinebaratorch  
имя: Александр
 
Сообщения: 6
Зарегистрирован: 09 фев 2022, 11:24
Пол: Мужчина
Поблагодарили: 5 раз.

Re: Как создать плагин для HD мода

Сообщение baratorch » 10 фев 2022, 07:01

...
Последний раз редактировалось baratorch 10 фев 2022, 07:08, всего редактировалось 1 раз.
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 1

cron