Объявления
Поздравляем
VDV_forever


Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5540
Зарегистрирован: 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)
Поблагодарили: 2155 раз.

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

Сообщение AlexSpl » 20 ноя 2021, 13:05

Желательно в таких случаях сохранять крэш-лог. Достаточно этой его части:

Код: Выделить всё
Exception
{
   Module:    
   Adress:      [ 0x1244D299 ]
   Code:        EXCEPTION_ACCESS_VIOLATION
   Flags:       0x00000000
   Information: write of address: 0xFFFFFFBC
}

Удивительно, но иногда вылеты могут быть связаны с самим HD модом.

Цитата:
P.S. Чтоб два раза не вставать - а через плагины можно обменять специализацию двух героев?

Можно не только обменять, но и новую добавить.
Вернуться к началу

offlineprimitive  
имя: Тим
 
Сообщения: 8
Зарегистрирован: 17 апр 2021, 15:42
Пол: Мужчина
Поблагодарили: 1 раз.

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

Сообщение primitive » 20 ноя 2021, 22:46

AlexSpl писал(а):

Желательно в таких случаях сохранять крэш-лог. Достаточно этой его части:
Код: Выделить всё
Exception
{
   Module:    
   Adress:      [ 0x1244D299 ]
   Code:        EXCEPTION_ACCESS_VIOLATION
   Flags:       0x00000000
   Information: write of address: 0xFFFFFFBC
}

AlexSpl писал(а):

Удивительно, но иногда вылеты могут быть связаны с самим HD модом.


Есть такое
 
Код: Выделить всё
HOMM3 HD version: 5.0 RC94
Time {   14.11.2021   21:59:38 }
GUN:  [Q7459979X21HPVSRGZXSRSGH452424Z0V]
Exception
{
   Module:    HD_SCX2.dll
   Adress:      [ HD_SCX2.dll+0x1573 ]
   Code:        EXCEPTION_ACCESS_VIOLATION
   Flags:       0x00000000
   Information: read of address: 0x00000055
}
Context { EAX: 0x0491D320, ECX: 0x048A1E50, EDX: 0x00822100, EBX: 0x00000041, ESP: 0x00188140, EBP: 0x001881F4, ESI: 0x0491D450, EDI: 0x048A1E50 }
Call stack
{
         [ HD_SCX2.dll+0x1550 ]   called from       [ HD_SCX2.dll+0x1A09 ]
}

что-то не понимаю как к сообщению прикрепить файл лога, да и ладно - не буду тут мусорить.

AlexSpl писал(а):

Цитата:
P.S. Чтоб два раза не вставать - а через плагины можно обменять специализацию двух героев?

Можно не только обменять, но и новую добавить.


Добавить?! Ни фига себе. Ладно, а про обменять/изменить - достаточно где-то в памяти поменять значение и оно потом запомнится в сохраненной игре?
Менять где-то здесь, да? (не помню откуда код)
Код: Выделить всё
      int* hero_specs = (int*)(*(int*)0x679C80 + hero->id *40);
      type=hero_specs[0];
      specId=hero_specs[1];
Вернуться к началу

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

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

Сообщение AlexSpl » 20 ноя 2021, 22:59

Цитата:
HOMM3 HD version: 5.0 RC94

У Вас очень старая версия HD мода. Последняя - 5.2 R78. Там много багов исправлено.

Цитата:
Менять где-то здесь, да? (не помню откуда код)

Да, 0x679C80 - это указатель на таблицу специализаций. 40 - размер одной записи в этой таблице. Для обмена специализаций достаточно поменять записи в ней местами. Для добавления новой нужно переносить эту таблицу и расширять. Примерно так, как в плагине NewSpells сделано для заклинаний.

Хотя смысла в добавлении записи 0, в Героях 3 специализация жёстко привязана к ID героя. Так что задача упрощается. Новую специализацию для героя можно просто прописать вместо старой. Например, у героя Orrin специализация - вторичный навык Archery (#1):

Код: Выделить всё
_HeroSpec_ <0, 1, 0, 0, 0, 0, 0, 0, 0, 0>

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

Да, ещё из-за странной привязки специализации к номеру героя, потребуется менять описания специализации и картинки в UN32.def и UN44.def. Либо перехватывать их отображение, чтобы игра брала картинку на основе записи в таблице специализаций, а не по номеру героя (недоработка программеров). По-хорошему, у специализаций должна быть своя таблица по кол-ву разных специализаций, но имеем то, что имеем.
Вернуться к началу

offlineХеромант  
имя: OL
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 21 ноя 2021, 19:42
Пол: Мужчина
Поблагодарили: 2 раз.

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

Сообщение Херомант » 21 ноя 2021, 20:20

AlexSpl писал(а):

Цитата:
HOMM3 HD version: 5.0 RC94

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


А помоему, даже очень замечательно, что таблица специализаций привязана к идентификаторам героев. Добавил нового героя и сразу закодировал ему новую специализацию. Никаких проблем при этом. А вот в ВоГ-е целая тонна проблем со специализациями героев, поэтому в MoP и в ЭРАкрест восстановлена именно СоДовская система специализаций, т.к. она реально удобнее для расширения.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 530
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

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

Сообщение void_17 » 22 ноя 2021, 00:20

О, ХЕРОМАНТ, не думал, что вы здесь зарегаетесь. Привет!
Вернуться к началу

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

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

Сообщение Rolex » 22 ноя 2021, 15:38

@RoseKavalier
Please reply to this message when you have free time.
Вернуться к началу

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

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

Сообщение RoseKavalier » 22 ноя 2021, 20:13

There was nothing to add, Alex was right. It makes little sense to provide a loading function for custom paths and then to also search "random" additional paths.

I properly reversed the SND and LOD managers recently, so it might make sense to add support of SND archives to the plugin as well if there is demand.
During this process, noticed that one SND archive is not properly indexed alphabetically and as a result the code made all search operations on SND archives be linear... O(n) instead of O(log n) :smile7:
I'll probably fix that at runtime in the near future.
Вернуться к началу

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

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

Сообщение AlexSpl » 22 ноя 2021, 22:10

Тестировал новые функции взвешивания заклинаний и обнаружил недочёт с очередью ходов HD мода. Для текущего раунда берётся модификатор скорости, т.е. всё OK, а вот для следующих используется, видимо, уже прогноз: проход по всем заклам, изменяющим скорость, и предсказание очерёдности хода на основе висящих на отряде заклинаний. Естественно, о новых заклинаниях, снижающих скорость, HD мод не знает, поэтому не может корректно предсказать очерёдность ходов. При наступлении нового раунда уже берётся модификатор скорости и очередь ходов корректно обновляется. Закрыть это можно только патчами кода самого HD мода. Эх, если бы HD мод предоставлял удобный интерфейс для патча новых фишек, всё было бы просто. А так, код в dll, а патчинг dll - неблагодарное занятие из-за потенциальных обновлений.

Для взвешивания заклинаний (и не только, вообще для AI) одной из фундаментальных функций является public: double army::get_unit_combat_value(long,long,bool,army const *)const proc near. Она интересна сама по себе. В ней Fight Value лишь один из множителей. Эх, попалась бы мне эта база (void_17 или хотя бы Dreamcast) году так в 2010-м, вышла бы целая серия статей для HB, не сомневайтесь. А сейчас так лениво описывать, что происходит, да так, чтобы это более-менее было интересно читать игроку, далёкому от программирования. Всё-таки раньше, такое чувство, больше было разборов алгоритмов. Сейчас остались, видимо, те, кто и так всё понимает по коду. Но если бы кто решился написать, я бы с удовольствием почитал. Люблю доступные изложения работы геройских алгоритмов :smile1: А AI до сих пор неосвещённая тема. Теперь уже все старые, лень, как и мне, писать что-то. Где новые авторы? :smile4:

* * *
Вот моё мнение, почему такие статьи больше не пользуются спросом. Кому были нужны технические подробности, давайте подумаем? Конечно же, хардкорным оффлайн-игрокам для того, чтобы побеждать. Сейчас оффлайн-турниры исчезли, прошло их время, и потерялся смысл в знании "тайных" фишек игры. А раньше, например, то, что в крепостной стене при осаде есть бреши и можно стрелять без штрафа, таким великим открытием было, что хоть ставь гриф "секретно" :smile13: Я так искренне радовался, когда это обнаружил, как ребёнок! Думаю, и фейковый продув юзали, потирая ладони :smile2: И ГПСЧ нагибали :smile20: Да, были времена... Будь моя воля, я бы навсегда завис в 2000-х, и плевать на технический прогресс.
Вернуться к началу

offlineХеромант  
имя: OL
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 21 ноя 2021, 19:42
Пол: Мужчина
Поблагодарили: 2 раз.

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

Сообщение Херомант » 23 ноя 2021, 07:02

void_17 писал(а):

О, ХЕРОМАНТ, не думал, что вы здесь зарегаетесь. Привет!


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

AlexSpl писал(а):

Кому были нужны технические подробности, давайте подумаем? Конечно же, хардкорным оффлайн-игрокам для того, чтобы побеждать.


Скорее моддерам на ЭРЕ, нежели обычным игрокам. Но Вы почему-то упорно предпочитаете СоД. Лично я даже МоП приостановил, т.к. на ЭРЕ спрос в разы больше.
Вернуться к началу

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

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

Сообщение AlexSpl » 24 ноя 2021, 01:44

Очередь ходов некорректно работает под дебаггером:

Изображение

Интересно, это специально? И что это за артефакт такой (обведён красным)?
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: Yandex [bot] и гости: 4