AI в Age of Empires 2: Definitive Edition и The Conquerors.

17.04.2021 Автор: GamesGod

Приветствую всех любителей Age of Empires 2. Сегодня я расскажу вам, как устроен искусственный интеллект в различных версиях игры, речь зайдет в частности о версии Age of Empires 2: The Definitive Edition, как наиболее популярной версии в Steam, а так же немного затрону версию The Conquerors.

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

Какие AI существуют в игре ?

Age of Empires 2: The Conquerors.

В версии The Conquerors по умолчанию существует один единственный компьютерный игрок, разработанный компанией Microsoft (точнее Ensemble Studios) в 1999 г. который взял своё начало из версии игры  Age of Empires 2: The Age of Kings и был незначительно улучшен. 

В целом данный ИИ неплох, и подходит для игрока, который впервые играет в Age of Empires 2. На сложности Hard, слабому игроку он может доставить много проблем и одержать победу, даже 1х1, обычно быстро переходя в эпоху Замков и начиная нападать на игрока небольшими группами войск. На других более легких сложностях (medium, easy, и т.п.) он играет менее агрессивно и может напасть даже в эпоху Феодалов, однако конечно все эти атаки достаточно легко отбиваются даже игроком, который особо не умеет играть в игры жанра «Стратегия». На сложности Hardest данный ИИ использует читы, а именно — прибавку к каждому типу ресурса +500, по таймеру (обычно каждый раз при переходе в новую эпоху). Так же, на любой сложности этот ИИ всегда «видит» то, что видит другой компьютерный игрок, через «туман войны». Т.е. как будто он изначально изучил «Картографию».

Шло время, стали появляться патчи для версии The Conquerors — 1.0с, 1.3, 1.4 и наконец последний на текущий момент патч — 1.5 RC. С каждым новым патчем в версию игры вносились корректировки в баланс игры, а так же новые возможности для ИИ. На текущее время (2021 год) существует очень много разных ИИ для этих версий игры, особенно для версии The Conquerors, все они созданы разными разработчиками, обычными любителями игры. Каждый из этих ботов разрабатывает обычно 1-3 чел, а не какая-то крупная компания. 

Один из первых сторонних ИИ — это AllianceThundaEmpire, разработанный Lutz Menzel-ом в 2004 году. Он использует некоторые новые возможности добавленные в патчах к игре (патч 1.0с) и превосходит по силе стандартный AI. Однако имеет свои недостатки … всегда атакует одним типом войск, ну например рыцарями или воинами-орлами. Лишь иногда может напасть лучниками, но крайне редко. В связи с чем он доставляет сложности в победе лишь на первых играх против него. Так же он не использует весь потенциал от последующих патчей к игре, особенно от патча 1.5 RC.

Далее стали появляться другие боты, которые уже больше использовали возможности каждого патча. Такие как Promi, Horde, Tribal_Warrior, Barbarian и ещё много разных (хотя разработчики у них есть те же, что и например Tribal_Warrior).

На текущий момент, по моей оценке, сильнейшим на планете ботом является Barbarian, разработанный предположительно 2 людьми — II2N/TheMax в 2011 году, и до 2018 года периодически улучшался. О его возможностях вы можете узнать при игре с ним, где его найти опишу далее. Я же опишу о его «грехах», т.к. и он не отличается честностью игры (в прочем это зато даёт ему преимущество в силе игры). Итак, грехи… Он так же как и обычный компьютер «видит» то, что «увидел» союзник, не исследуя «Картографию». Более того он «видит» когда игрок начинает переходить из эпохи в эпоху и после этого меняет тактику игры. Он «видит» все постройки и юнитов через «туман войны». Он не нападает на игрока до тех пор, пока либо не получит явное преимущество в исследованиях, либо если «увидит», что у врага слабее/меньше армия, так же начинает атаку, если полностью развит. В плане ресурсов на Hardest сложности тоже использует доп ресурсы, но там хитрые схемы их активации. В основном на карте «Nomad (Кочевник)» использует. 

Данный AI играет только в Age of Empires 2: The Conquerors. Притом необходим патч 1.5 RC.

Age of Empires 2: The Definitive Edition.

В версии Definitive Edition по умолчанию встроено 3 ИИ.

  1. Оригинальный ИИ (это всё тот же бот от Microsoft-a, который играет в Age of Empires 2: The Conquerors, The Age of Kings).
  2. ИИ из HD версии игры (Сложно сказать, что это за бот и кто его разработал, но он сильнее играет, чем стандартный комп).
  3. ИИ (это Promi, который был создан изначально для версии Age of Empires 2: The Conquerors).

Из этих 3х ботов сильнее всех конечно же 3. Сейчас распишу об этом ИИ подробнее, если кому-то интересно.

Он играет почти без читов. У него есть лишь «Картография» и «видит» постройки игрока, юнитов врага «не видит», атакует в любое время, спонтанно. Но то, что он это видит постройки врага никак не влияет на его развитие и он всё-равно продолжит развиваться по своему плану, т.е.  если у него по плану сделать рыцарей и напасть, то даже если у игрока будет кучу копейщиков — ничего принципиально не меняет. Он все-равно нападет рыцарями, но просто скорее всего не в эпохе Замков, а в эпохе Империй, после того, как улучшит их до паладинов. Если по плану у него заложено сделать 15 лучников в феодалке, то он их сделает, но напасть может либо например пока у него 5 лучников, а остальных приведет следом, либо напасть когда сделаются все 15 лучников.

Что касается разнообразия игры этого ИИ… Если нажать на кнопку «Сначала». То тактика игры бота останется той же, с точностью до типа юнитов атаки, и общего развития. Лишь может быть время атаки от него — немного произвольным.

Плюсы этого AI:

  1. Хорошее и достаточно быстрое развитие, на уровне хорошо играющего игрока.
  2. Есть несколько разных вариантов, которыми бот умеет играть — атака в Феодалке, атака в Замках, разными типами юнитов может нападать, однако преимущественно, если Феодалка, то это атака — лучниками/застрельщиками. Если атака в Замках, то это рыцари, воины-орлы или лучники и совсем редко — замковым типом юнита.
  3. Умеет делать юнитов в противовес, т.е. если на него нападаешь скаутами, он сделает копейщиков в ответ. Если нападаешь рыцарями, он сделает еще и верблюдов например.
  4. Умеет отбегать юнитами от атак башнями, тц или замком. (кораблями плохо отплывает)
  5. У него достаточно хорошая экономика.
  6. Умеет помогать союзнику с помощью команд, либо сам (редко).

Минусы этого AI:

  1. «Подсматривает» постройки врага через туман войны (хотя не знаю на что это особо влияет).
  2. Малое количество «Тактик» прописано, фактически 2 — атака в феодалке — лучниками/застрельщиками, и атака в замках — лучниками, рыцарями или воинами-орлами (иногда замковым типом юнита).
  3. Иногда крайне сильно тупит при сборе ресурсов — бежит через всю карту крестьянами чтобы добыть золото/камень не строя шахту. Иногда их не добывает совсем, т.к. они как бы слишком далеко от базы.
  4. Не может играть на всех картах версии Definitive Edition. (например на Дельта Нила, Городище и т.п.) В основном полноценно играет только на картах которые были в версии The Conquerors. Например аравия, реки, острова и т.п. 
  5. Имеет серьезные ошибки развития на картах типа Мегарандом и Континент. Т.к. не может оценить точно где он играет, где враг, где союзник и т.п. К примеру если «Континент» сгенерировал его на острове, он может вовсе не делать флот и делать при этом торговые телеги для торговли с союзником 🙂 
  6. Преимущественно играет при максимуме населения 200 юнитов. С другим количеством максимума может совершать много ошибок в развитии. Например не делать каких-то юнитов вовсе, а других наоброт наделать целую кучу, забив лимит. 
  7. Почти всегда сливает скаута в феодалке, нападая на тц зачем-то. Из-за этого меньше разведывает карту, может из-за этого вообще не найти ни одного реликта, т.к. потом другими юнитами бывает не открывает карту совсем, особенно если находится под атакой.

Так же существуют и другие ИИ, которые работают в версии Definitive Edition,  например Tribal_Warrior, Forthwind, Odette_AI и т.п., но работают они в целом хуже, чем Promi. 

Ну и конечно же, не могу упомянуть разработанный мной ИИ — GamesGod. Начал его создание я ещё в 2017 году. Создавал его для версии The Conquerors, сначала под одни патчи, потом модернизировал, чтобы он работал и на других патчах игры. Как только вышла в свет версия Definitive Edition, то решил делать апгрейд и под эту версию, но это отняло много сил и времени учитывая то, что разработка этого ИИ, это просто хобби, в свободное от работы время. Но теперь, в этом году, я смог довести разработку до определенного уровня, и получился более менее нормальный продукт, о который уже можно показать людям 🙂  По силе я его приравниваю к Promi. На некоторых картах и в некоторых условиях он существенно сильнее Promi. 

+ моего ИИ :

  1. Имеет различные «тактики» развития, может нападать в феодалке, любым типом армии, может нападать в замках любым типом армии (преимущественно теми, кто выгоден конкретной нации).
  2. Хорошо торгует с союзником
  3. По скорости развития уступает Promi, но не значительно.
  4. Единственный ИИ, умеющий играть на карте Дельта Нила.
  5. Умеет играть на любом лимите населения.
  6. Честный, он «не видит» армию, постройки врага через «туман войны», но из-за этого слабее играет, т.к. он как человек — может случайно наткнуться на замки, на большую армию и т.п. 🙂
  7. Честный и в отношении союзника, «видит» то, что и союзник только после исследования «Картографии». Исключение — он в любом случае «видит» то, что «видит» человек. Это встроено в саму игру и это невозможно изменить.
  8. Честный в плане дополнительных ресурсов, он их не получает на любой сложности игры, при этом играет всегда как Hard, какую сложность игрок бы не выбрал.
  9. Умеет делать противовес армии врага. Например, если он разведал, что у врага много лучников, он постарается сделать застрельщиков, онагры, конницу. Если увидел копейщиков, то сделает лучников и т.п.
  10. Немного может застроить башнями 🙂
  11. Умеет адаптироваться под любой тип карты, гораздо лучше чем любой другой ИИ. Т.е. если например создалась карта «Континент» или «Мегарандом», он постарается оценить где он, на острове или нет, есть ли на его острове враг, где находятся союзники, и т.п. Он не будет делать торговые телеги находясь с союзником на разных островах 🙂
  12. Он гораздо более непредсказуемый чем любой другой ИИ, даже в плане атаки игрока. Он может напасть на любого игрока, а не только на ближайшего к нему (как большинство ИИ). 
  13. Использует все исследования и все юниты (кроме подрывников и соваров).
  14. Может отбегать от выстрелов башен, тц, замков. (флотом хуже отплывает, онаграми пока не хочет отъезжать совсем:))
  15. Может по-разному реагировать на предложение мира, если не выбирать команду 🙂
  16. Умеет донатить союзника, по запросу союзника и без его запроса.
  17. Умеет нападать с разных сторон, выбирать разные цели для атаки. Может например напасть преимущественно на торговлю врага и попытаться перебить все торговые лодки/тележки.
  18. Умеет играть затяжные сражения (когда закончились все ресурсы на карте).

Но конечно же есть и — :

  1. Мог бы быстрее развиваться, но из-за производства армии, развитие медленнее чем могло бы быть.
  2. Может слить большое количество флота (особенно любит сливать транспортники, как и любой другой ИИ) об замки врага.
  3. Не на всех режимах игры может играть (ну верней он на них играет, но так же, как и например в режиме игры «случайная карта», «защита чуда света» и т.п. не вызывает у него никаких особенностей :))
  4. Есть проблемы с разведкой врага (иногда), бывает долго не может его найти.
  5. Так же как и любой другой ИИ — плохо защищается от тактик застройки башнями, забором, налетов конными лучниками.
  6. Плохо высаживается армией на картах типа «острова». Может высадить 20 юнитов за раз, а может высадить 1-2 и еще 30 будет на базе тереться.

Что же такое AI ?

Это банально 2 файла (минимум 2, максимума нет). Первый файл xxx.ai, а второй xxx.per.

 

 

Из первого файла игра понимает о том, что в игру добавили файл, который относится к категории ИИ и он содержит всего лишь 1 строчку — AI.txt. Ну а второй файл xxx.per содержит в себе непосредственно функции, которые необходимы для работы бота. Второй файл можно разбить на много разных файлов, в которых будут функции работы бота, каждый файл можно сделать для определенных задач, ну например в одном прописать то, что компьютер должен строить, в другом файле прописать производство юнитов, в третьем например прописать функции атаки и наступления бота. Но все эти файлы должны быть только с расширением PER. Например yyy.per. При этом их можно поместить в отдельную папку.

Что же такое AI внутри этого файла .PER ?

ИИ внутри — это набор функций, которые выполняются игрой сверху вниз, построчно. Примерно 2-3 раза в секунду. Никакого знания языков программирования не требуется. Все функции «вшиты» в игру и никаким изменениям не подлежат. Только лишь патчами добавляют те или иные функции.

Функции состоят из :

  1. Заголовок (строчка которая даёт знать игре, что начинается функция)
  2. Условие (строчка которая задаёт то, при каких условиях эта функция должна исполняться)
  3. Символ => (он отделяет Условия от Действий)
  4. Действия (строчка, в которой нужно написать, что необходимо делать.)

Функции выглядят примерно так :

(defrule
(true)
=>
(up-modify-sn sn-mill-max-distance c:= 20))

Где : 

(defrule — это строчка говорит игре о начале функции

(true) — это Условие (их может быть несколько), в данном случае оно означает, что всегда исполнять функцию

=> — разделитель между Условиями и Действиями

(up-modify-sn sn-mill-max-distance c:= 20) — Действие (их может быть несколько), в данном случае оно устанавливает максимальное расстояние установки мельниц относительно ТЦ.

Всего строк Условий + Действий может быть не более 16 суммарно.

Перед всеми функциями должны быть описаны переменные, которые будут использоваться далее в функциях. Все эти переменные имеют свою константу «c:» и переменное значение «g:» Игрой задумано так, что переменные значения можно менять только у переменных, которые начинаются с 41 и до 510, при этом каждая переменная должна быть упомянута один раз. Переменные описываются так :

(defconst game-time 0)

Это означает, что есть переменная «game-time», она имеет следующие значения… константу «c:» будет равным 0, а переменное значение этой переменной «g:» будет равным -1. 

Если переменная записана так :

(defconst Random 47) 

Это означает, что есть переменная «Random», она имеет значение константу «c:» равным 47, а переменное значение «g:» будет равным -1. Однако 47 — это это уже входит в число разрешенный переменных значений (41-510). Это означает, что я могу задать для переменного значения «g:», любое значение от -32768 до 32767. При этом нельзя, чтобы у какой-то переменной была та же константа «c:»(в данном случае 47),

т.е. нельзя чтобы было (defconst Naselenie 47)

для другой переменной я должен задать другой «константный» номер, ну например 48. 

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

Так же есть специальные операторы, внутри которых функции или работают или не работают. Например 

#load-if-defined DE-AVAILABLE

…. тут набор функций….

#end-if

Этот оператор означает, что все функции которые расположены внутри него будут выполняться только если запущена игра версии Definitive Edition.

А если вы разбили работу своего бота на папки и файлы, то потребуется вот такая примерно строчка :

(load «Barbarian\DMConstants»)

Эта строчка запустит файл «DMConstants.per», который расположен в папке Barbarian. Естественно, что если этого файла там не будет, то эта строчка не выполнится и бот не запустится, выдав в игре ошибку.

Вот так и создаётся ИИ для Age of Empires 2 🙂

Прописывать эти функции можно в обычном блокноте. Но удобнее использовать специальную программу «ScriptEd».

Так же, для более быстрого тестирования работы функций ИИ можно немного «читерить» в игре, включив «SpeedHack» в программе «Cheat Engine» 🙂 Она увеличит скорость игры, что очень помогает если вы хотите посмотреть, что ваш ИИ делает на 30-й, или 50-й минуте игры 😉

Полезные ссылки

А теперь насчёт ссылок :

  1. http://forums.aiscripters.com/viewtopic.php?f=8&t=4090&sid=5854edfea26be3a79d157432e3fdaee5 (здесь можно скачать мой ИИ — GamesGod)
  2. http://forums.aiscripters.com/viewforum.php?f=8 (здесь можно скачать другие ИИ для разных версий игры, однако там не написано, какие боты на каких версиях запускаются). Но я написал в статье, какие хорошие и  которые гарантированно запускаются.
  3. http://forums.aiscripters.com/viewtopic.php?f=16&t=2607 (здесь программа «ScriptEd»в которой удобно прописывать функции ИИ).
  4. https://www.voobly.com/gamemods/mod/1119/v15-RC (здесь патч 1.5 RC, для версии The Conquerors, который необходим для работы большинства существующих AI, включая мой).
  5. https://disk.yandex.ru/d/RRcqk7Et1-hdAQ (здесь у меня архив с файлами .pdf, в которых расписаны все Условия, все Действия которые можно использовать при создании ИИ, а так же руководство по написанию функций на английском языке, для версии игры The Age of Kings, там изложены основные принципы написания функций, но они там перечислены далеко не все. Патчами и другими версиями игры было добавлено много новых функций, которые все перечислены в других файлах).
  6. http://forums.aiscripters.com/viewforum.php?f=27 (тоже самое, что и в 5 пункте, но просто на форуме, т.е. есть описание всех Действий, Условий, переменных и т.п.)

Куда устанавливать скачанные файлы с новыми AI ?

Если у вас версия Definitive Edition, то примерно сюда — D:\Steam\SteamApps\common\AoE2DE\resources\_common\ai

Если у вас версия The Conquerors, то примерно сюда —                             D:\Games\Age2\AI


Вот собственно и всё, что хотел Вам рассказать, надеюсь кому-то эта информация будет полезна и интересна, если есть вопросы по работе моего ИИ или создании Вашего ИИ, или любые другие вопросы о AI в игре, то можете писать мне в личку ВК — https://vk.com/id3992468

0
Комментарии

Авторизируйтесь, что бы оставлять комментарии и оценивать посты

Авторизация
*
*

8  +  1  =  

Регистрация
*
*
*

4  +  2  =  

Генерация пароля