Объявления

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

Улучшение ИИ

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

Re: Улучшение ИИ

Сообщение AlexSpl » 27 июн 2020, 14:15

Цитата:
You should pass your ecx copy to the function for safety.

Точно. В этом дело.

FASTCALL_0(char, 0x431360); -> THISCALL_1(char, 0x431360, ecxcopy);
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение RoseKavalier » 27 июн 2020, 14:18

Seems to be so.
Изображение
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Улучшение ИИ

Сообщение as239 » 05 июл 2020, 09:34

Можно попробовать что получилось:
1. Нужно подключить как плагин dll во вложении.
2. Запустить игру с подключенным плагином и закрыть ее.
3. Запустить игру еще раз.
4. Выбрать шаблон "RAI" (усиление ИИ действует только на нем)
5. Сыграть красным до победы над зеленым ИИ.

Интересно, насколько легко это удастся сделать :)
Схема шаблона:
 
Изображение
Вложения
FreshMod.zip
(111.2 КБ) Скачиваний: 269
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение Ben80 » 08 май 2021, 08:00

Думал, как совместить достоинства боевого AI Героев 2 и Героев 3. Несмотря на кажущуюся примитивность ИИ, многие вещи в Героях 2 он делает в целом правильно - например, атакует самый сильный отряд противника. Конечно, это желательно совместить с возможностями боевого ИИ Героев 3, где он действует более ситуационно и запускает массу дополнительных расчетов.
В Героях 3, однако, бессилие боевого ИИ по отношению к очень сильным отрядам человека является для него настоящим бичом (он просто боится атаковать их). Тем более, ситуация эта при игре на случайных картах, сгенерированных оригинальной игрой, скорее правило, чем исключение - обычно на карте генерируется слишком много ульев, благодаря которым легко можно собрать очень сильный отряд виверн.
Интересно, что в Героях 3 есть оригинальный код, который должен был бы решать проблемы такого рода, однако, в целом, не решает. Речь идет о процедуре 0x41F530, названной в EraDebugMap AI_Battle_Get_Counterstrike_Remove_Value, которая по смыслу позволяет нескольким слабым отрядам ИИ коллективно бороться против сильного отряда - 1 отряд снимает "ответку", остальные добивают. Проанализировав код, наткнулся на возможный баг, который и не позволял этой процедуре работать в полную силу. Во всяком случае, после наложения патча, желаемого эффекта в тестовом бою я добился.
Патч очень простой:
Код: Выделить всё
_PI->WriteByte(0x41F69E,0x74);
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение Ben80 » 14 май 2021, 12:21

После более тесного знакомства с AI_Value и Fight_Value из темы viewtopic.php?f=56&t=961 пришел к выводу, что механика по разбиению монстров на отряды была бы более оптимальной (с точки зрения интересов монстров), если использовать Fight_Value, а не AI_Value (как в оригинале). Грубо говоря, AI_Value - это Fight_Value, но с учетом скоростных возможностей. Таким образом, если монстр имеет низкую скорость, но высокие боевые возможности, то ему следует это компенсировать разбиением на большее количество отрядов. И наоборот, если монстр имеет высокую скорость, но низкие боевые возможности, то ему следует образовывать более крупные отряды (поскольку имеющейся скорости должно хватить для реализации тактических возможностей). Если использовать Fight_Value для разбиения, то именно такая логика и реализуется.
Ну и еще - в оригинале при разбиении не учитывается атака и защита героя. Это, конечно, неправильно (тем более что такой учет в целом в игре весьма распространен).
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение Ben80 » 19 май 2021, 09:58

Как вы думаете, есть ли смысл улучшать боевой AI Героев 3 ? Не обнулит ли это тн тактический потенциал, и без того не шибко большой ? viewtopic.php?f=7&t=38&start=20
Что бы вы ни думали, я, глядя на некоторые действия ИИ в бою, не могу не работать над улучшением боевого ИИ :smile1:
Нет, я понимаю, что с улучшением ИИ игры могут становиться более продолжительными. Но что тогда мешает, например, на случайных картах выставлять "обычных монстров" или "слабых монстров" ? Обязательно выставлять "сильных монстров" (которые по факту такими не являются), только чтобы считать себя крутым ?

Какие конкретно задачи здесь я вижу:
1) улучшение интеллекта "топтунов" (чтобы их не разводили, как идиотов) - сделано (доделывается)
2) улучшение интеллекта быстрых существ (да и не быстрых тоже), которые не видят опасности в прикрытых единичками сильных отрядах противника
3) улучшение интеллекта стрелков, которые могли бы расходиться и подальше друг от друга, будучи блокированными
4) в целом обнаружение прикрытых стеков противника
5) ряд моментов, связанных с осадой - сделано (доделывается)
6) борьба с сильными стеками - доделывается
7) оптимизация применения заклинаний

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

В качестве бонуса к данному посту :smile1: - код для более разумного ведения ИИ осады Башни (взаимодействие с минами - ИИ перестает ставить себе задачу непременно обойти их все :smile12: ):

Код: Выделить всё
int __stdcall HiHook_AI_IsHexNotFree(HiHook* h, _BattleMgr_* cm, int hex)
{
   if(cm->town && !(cm->isNotAI[cm->current_side]) && !(cm->current_side))
   if(cm->town->type == 2 && cm->siege_kind2 >= 2)
   {
      bool isHexNearWall = false;
      int landMinesHexes[10] = {11, 28, 44, 61, 77, 111, 129, 146, 164, 181};
      for(int i=0; i<10; i++)
      {
         if(hex == landMinesHexes[i])
            isHexNearWall = true;
      }

                // Если кусок стены цел и рядом мина - то на мину мы не идем (ждем пока кусок стены отвалится или мина вдруг исчезнет :))
      if(isHexNearWall)
         if(o_BattleMgr->hex[hex + 1].Flags & 0x2 && o_BattleMgr->hex[hex].Flags & 0x8)
         //if(o_BattleMgr->hex[hex + 1].Flags & 0x2)
         {
            return 1;
         }

   }

   return CALL_2(char, __thiscall, h->GetDefaultFunc(), cm, hex);
}
...
_PI->WriteHiHook(0x4695F0, SPLICE_, EXTENDED_, THISCALL_, HiHook_AI_IsHexNotFree);


Также напомним летунам, что мины при Башне - опасное место:
Код: Выделить всё
int __stdcall AITowerLandMinesDanger(LoHook* h, HookContext* c)
{   
   if(o_BattleMgr->town)
   if(o_BattleMgr->siege_kind2 >= 2 && o_BattleMgr->town->type == 2 && !(o_BattleMgr->current_side))
   //if(o_BattleMgr->town->type == 2)
   {
      c->return_address = 0x42172A;
      return NO_EXEC_DEFAULT;
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x421724, AITowerLandMinesDanger);
Последний раз редактировалось Ben80 19 май 2021, 13:29, всего редактировалось 1 раз.
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение Ben80 » 19 май 2021, 10:48

Одним из интересных моментов игры я также вижу продумывание состава армии для участия в каждом бою. В реалиях боевого ИИ оригинальной игры обычно все стремится к схеме 1-2 сильных стека + единички. Кстати, Грег Фултон писал мне, что такая преувеличенная роль единичек - это не то, чего они ожидали. Сам я к единичкам отношусь в целом положительно (и тактический потенциал игры они увеличивают, поскольку единичка дешева, но может делать многие полезные вещи - снимать ответку, занимать пространство). Но в тех реалиях боевого ИИ, к которым я стремлюсь, часть единичек будет разумно заменить чем-то более весомым :smile1:
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение AlexSpl » 19 май 2021, 15:09

Главное - это не сделать из нападающего AI защищающегося, потому что это роль человека :smile1: Ещё после игры в Героев 7 я отметил для себя, что нужно как-то решать вопрос бесполезности юнитов в бою, т.е. это плохо, на мой взгляд, когда ты стараешься уменьшить потери/сохранить слабые отряды только из-за того, что они оказались в твоей армии, а выгрузи ты их другому герою или в шахту, они бы не потерялись, потому что бой вполне выигрывался одними ударными стеками. В Героях 2-3 такие "ненужные" отряды как раз и идут на единички.
Вернуться к началу

offlineАватара пользователя
leiz  
Подмастерье
Подмастерье
 
Сообщения: 187
Зарегистрирован: 15 сен 2018, 07:58
Пол: Не указан
Поблагодарили: 95 раз.

Re: Улучшение ИИ

Сообщение leiz » 19 май 2021, 15:47

AlexSpl писал(а):

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

В Пятерке это решили возможностью выставлять не все стеки на поле боя. Очень удобно. Я думал, что в 6-7 не стали от нее отказываться. Интересно, в Тройке подобное можно реализовать?

Ben80 писал(а):

1) улучшение интеллекта "топтунов" (чтобы их не разводили, как идиотов) - сделано (доделывается)
2) улучшение интеллекта быстрых существ (да и не быстрых тоже), которые не видят опасности в прикрытых единичками сильных отрядах противника
3) улучшение интеллекта стрелков, которые могли бы расходиться и подальше друг от друга, будучи блокированными
7) оптимизация применения заклинаний

Конкретно эти пункты настолько очевидны и необходимы(7-ой дискуссионен и "холиварен" только в плане что и как), что должны были бы идти в патчах 1.5/2.3/3.3. Только умоляю вас: делайте релиз без настроек и возможности включать пункты выборочно.
Вы тот текст про "тактическую потенцию" все-таки прочитали полностью? Там уровень школьного сочинения. Даже замечательное школьное сочинение не равно средненькому отчету специалиста.
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение Ben80 » 19 май 2021, 16:07

leiz писал(а):

Вы тот текст про "тактическую потенцию" все-таки прочитали полностью? Там уровень школьного сочинения. Даже замечательное школьное сочинение не равно средненькому отчету специалиста.


Нет, так и не прочитал, а как обычно, выхватил для себя что-то интересное после просмотра по диагонали. Я, в общем, к такому уровню спокойно отношусь - время, что ли, сейчас такое...

leiz писал(а):

делайте релиз без настроек и возможности включать пункты выборочно.


Хорошо, только вряд ли получится все пункты реализовать в первом же релизе, так что первый релиз в этом смысле будет кривоват.
Вернуться к началу

Пред.След.

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

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

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