Pull to refresh
0

Insomnia: игровой искусственный интеллект такой искусственный (видео)

Reading time4 min
Views16K
Продолжаем тему процесса создания игры Insomnia, начатую со статьи Как мы перестали бояться Огра и начали делать на нем игру

Об истуканах

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

О жизни

Но как обычно, жизнь немного скорректировала наши планы. Вместе с отказом от затеи делать исключительно MMO пришло понимание того, что делать интеллект нам придется.
Мы решили отказаться от жесткого планирования действий персонажей. Вместо этого мы придумали систему, которая позволяет задать поведение практически каждого персонажа без значительных дополнительных усилий.
Мы решили приблизить процесс принятия решения к человеческому.

Тонкая душевная организация

Для начала общая схема:



Основа ИИ – “сознание” и “подсознание”. Такое название дали блокам из-за их способа обработки информации.

“Подсознание” обрабатывает все события от сенсоров и при необходимости посылает события “сознанию”. По структуре оно больше представляет ассоциативную память. Пример такой карты:
* в полночь пойти спать. Приоритет низкий;
* если свои дерутся, то наблюдать за процессом;
* если бьют своего, то защитить его. Приоритет средний;
* если побили кого-либо, подойти и очистить его карманы;
* если играет музыка, то танцевать. Приоритет низкий;
* если кто-то достал оружие, попросить его спрятать;
* если увидел врага, побежать звать своих на помощь и идти в бой;
* если свои зовут на помощь, пойти туда, куда зовут;
* если слышен шум, повернуться посмотреть что происходит;
* если видишь брошенную гранату, убегать от неё подальше;
* если видишь, что бросают гранату недалеко от тебя, подбежать и бросить обратно;
* если к тебе обращается игрок, предложить ему что-нибудь купить;
* если к тебе обращается игрок, который тебя обидел, не отвечать ему;
* если убегаешь от кого-то и слышишь сзади звук шагов, то бежать дальше.
Эти команды передаются “сознанию”. Таких карт у перса может быть несколько, будет меняться приоритет этих карт в зависимости от настроения/состояния. Например, трусливый NPC может убегать от вас, но увидев своих может набраться храбрости и ответить вам.
“Подсознание” может меняться в зависимости от накопленного опыта.

“Подсознание” будет не только у NPC, но и у Героя. Например, непрокачанный герой может быть довольно трусливым и в самый ответственный момент просто убежать. Также будет возможность игроку самому обучать своего перса тем или иным способом.

“Сознание” отвечает за логику действий персонажа, пример:
* напасть на кого-либо,
* стрелять в кого-либо или что-либо,
* следить за целью,
* перезарядить оружие,
* пойти куда-либо,
* осмотреть сундук,
* позвать на помощь.
Это набор скриптов, которые непосредственно управляют телом. В отличие от подсознания, активным может быть только один или несколько совместимых, например, “Следить за целью” и “Стрелять в кого-либо или что-либо”. Они могут также быть вложены друг в друга, например, “Осмотреть сундук” может вызвать “Пойти куда-либо” (к сундуку), а “Стрелять в кого-либо или что-либо” вызывать “Перезарядить оружие”. Также в случае ГГ эти скрипты принимают команды от пользователя и могут действовать в соответствии с этими командами.

И нюх как у собаки, а глаз как у орла

Сенсоры.
Визуальный сенсор следит за окружающими NPC объектами, проверяет их видимость, определяет их состояние.
Сенсор шума определяет направление и тип шума, например, чтобы реагировать на него. NPC может услышать шум в коридоре и выйти проверить, что там происходит. Или, подкравшись к NPC сзади, вы можете выдать себя ему, начав перезарядку оружия.
Сенсор времени нужен для выполнения некоторых действия по расписанию. В 9 вставать, в час дня на дежурство, в 9 вечера в бар, в полночь спать. Обычно действия, вызываемые по этому сенсору, имеют низкий приоритет. Если NPC дерётся с кем-то и ему нужно идти спать, он, конечно, продолжит драться. А как завершит дело, со спокойной совестью пойдёт спать.
Сенсор сообщений позволяет NPC обмениваться сообщениями, сообщать другим NPC об опасности и давать команды.

Теперь маленький пример реализации ИИ.
Небольшой комментарий — в ролике присутствуют 4 персонажа. Два солдата комитета и 2 мародера.
Солдаты комитета выполняют патрулирование территории.
При обнаружении мародеров вступают в бой. ИИ солдат достаточно линеен — увидел врага — зови своих и начинай уничтожение противника (Приоритет «Атака»).
ИИ мародеров более гибок. Когда мародеры понимают, что обнаружены, главарь (в дорогой броне) посылает подручного вперед (приоритеты «Осторожность», «Послать дозорного к подозрительной точке»). Сам при этом остается на месте (Приоритет «Осторожность»). Но именно в этом случае ему не повезло. Один из солдат первым увидел главаря и открыл по нему огонь. Подручный вступает в бой, но после смерти главаря приоритет «Страх» превышает приоритет «Атака» и подручный решает сдаться. Он выбрасывает оружие и перестает сопротивляться. Но последняя пуля ставит точку в его бесславной карьере.



Всем спасибо.
Автор: Wowa69
Only registered users can participate in poll. Log in, please.
Какую следующую статью вы хотите увидеть на эту тему?
23.37% работа с сетью86
26.9% логика квестов99
12.23% скриптинг45
5.71% анимации21
5.43% графика20
12.5% физика46
7.61% история разработки и концепции28
6.25% ничего не надо23
368 users voted. 98 users abstained.
Tags:
Hubs:
Total votes 33: ↑27 and ↓6+21
Comments6

Articles

Information

Website
studio-mono.com
Registered
Founded
Employees
2–10 employees
Location
Россия