Insomnia: ігровий штучний інтелект такий штучний (відео)

    Продовжуємо тему процесу створення гри Insomnia, розпочату зі статті Як ми перестали боятися Огра і почали робити на ньому гру
 
 
про боввана
Почну з того, що на момент старту проекту ми не планували вводити ШІ як такої. Кілька скриптових сцен здавалися нам цілком достатнім доповненням гри.
Всі НПС планувалося зробити абсолютно бизмозглимі, які виконують строго певну, закільцьованих послідовність дій.
Було забавно спостерігати, як НПС продовжував привітно махати тобі рукою, поки ти всажівал в нього другу обойму.
Прогулянка по густонаселеній локації нагадувала подорож в саду кам'яних фігур.
 
 
 
 
 
Про життя
Але як завжди, життя трохи скоригувала наші плани. Разом з відмовою від затії робити виключно MMO прийшло розуміння того, що робити інтелект нам доведеться.
Ми вирішили відмовитися від жорсткого планування дій персонажів. Замість цього ми придумали систему, яка дозволяє задати поведінку практично кожного персонажа без значних додаткових зусиль.
Ми вирішили наблизити процес прийняття рішення до людського.
 
 
Тонка душевна організація
Для початку загальна схема:
 
 
Основа ШІ — "свідомість" і "підсвідомість". Таку назву дали блокам через їх способу обробки інформації.
 
"Підсвідомість" обробляє всі події від сенсорів і при необхідності посилає події "свідомості". За структурою воно більше представляє асоціативну пам'ять. Приклад такої карти:
* Опівночі піти спати. Пріоритет низький;
* Якщо свої чубляться, то спостерігати за процесом;
* Якщо б'ють свого, то захистити його. Пріоритет середній;
* Якщо побили когось, підійти і очистити його кишені;
* Якщо грає музика, то танцювати. Пріоритет низький;
* Якщо хтось дістав зброю, попросити його заховати;
* Якщо побачив ворога, побігти кликати своїх на допомогу і йти в бій;
* Якщо свої кличуть на допомогу, піти туди, куди кличуть;
* Якщо чути шум, повернутися подивитися що відбувається;
* Якщо бачиш кинуту гранату, тікати від неї подалі;
* Якщо бачиш, що кидають гранату недалеко від тебе, підбігти і кинути назад;
* Якщо до тебе звертається гравець, запропонувати йому що-небудь купити;
* Якщо до тебе звертається гравець, який тебе образив, не відповідати йому;
* Якщо тікаєш від когось і чуєш позаду звук кроків, то бігти далі.
Ці команди передаються "свідомості". Таких карт у перса може бути декілька, буде змінюватися пріоритет цих карток залежно від настрою / стану. Наприклад, боягузливий NPC може тікати від вас, але побачивши своїх може набратися хоробрості і відповісти вам.
"Підсвідомість" може мінятися залежно від накопиченого досвіду.
 
"Підсвідомість" буде не тільки у NPC, а й у Героя. Наприклад, непрокачанний герой може бути досить боягузливим і в самий відповідальний момент просто втекти. Також буде можливість гравцеві самому навчати свого перса тим чи іншим способом.
 
"Свідомість" відповідає за логіку дій персонажа, приклад:
* Напасти на кого-небудь,
* Стріляти в кого-небудь або що-небудь,
* Стежити за метою,
* Перезарядити зброю,
* Піти куди-небудь,
* Оглянути скриню,
* Покликати на допомогу.
Це набір скриптів, які безпосередньо керують тілом. На відміну від підсвідомості, активним може бути тільки один або кілька сумісних, наприклад, "Стежити за метою" і "Стріляти в кого-небудь або що-небудь". Вони можуть також бути вкладені один в одного, наприклад, "Оглянути скриню" може викликати "Піти куди-небудь" (до скрині), а "Стріляти в кого-небудь або що-небудь" викликати "Перезарядити зброя". Також у разі ГГ ці скрипти беруть команди від користувача і можуть діяти у відповідності з цими командами.
 
 
І нюх як у собаки, а око як у орла
Сенсори.
Візуальний сенсор стежить за навколишніми NPC об'єктами, перевіряє їх видимість, визначає їх стан.
Сенсор шуму визначає напрямок і тип шуму, наприклад, щоб реагувати на нього. NPC може почути шум в коридорі і вийти перевірити, що там відбувається. Або, підкравшись до NPC ззаду, ви можете видати себе йому, почавши перезарядку зброї.
Сенсор часу потрібен для виконання деяких дії за розкладом. У 9 вставати, в годину дня на чергування, в 9 вечора в бар, опівночі спати. Зазвичай дії, що викликаються з цього сенсору, мають низький пріоритет. Якщо NPC б'ється з кимось і йому потрібно йти спати, він, звичайно, продовжить битися. А як завершить справу, зі спокійною совістю піде спати.
Сенсор повідомлень дозволяє NPC обмінюватися повідомленнями, повідомляти іншим NPC про небезпеку і давати команди.
 
Тепер маленький приклад реалізації ШІ.
Невеликий коментар — в ролику присутні 4 персонажа. Два солдати комітету та 2 марадера.
Солдати комітету виконують патрулювання території.
При виявленні марадеров вступають в бій. ІІ солдатів достатньо линеен — побачив ворога — клич своїх і починай знищення противника (Пріоритет «Атака»).
ІІ мародерів більш гнучкий. Коли марадери розуміють, що виявлені, ватажок (в дорогий броні) посилає підручного вперед (пріоритети «Обережність», «Послати дозорного до підозрілої точці»). Сам при цьому залишається на місці (Пріоритет «Обережність»). Але саме в цьому випадку йому не пощастило. Один із солдатів першим побачив ватажка і відкрив по ньому вогонь. Підручний вступає в бій, але після смерті ватажка пріоритет «Страх» перевищує пріоритет «Атака» і підручний вирішує здатися. Він викидає зброю і перестає чинити опір. Але остання куля ставить крапку в його безславної кар'єрі.
 
  
Всім дякую.
Автор: Wowa69
  

    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.