Как создать ощущение, что противники в шутерах действуют слаженно? За… — Математика в Gamedev по-простому — TG.ME

Как создать ощущение, что противники в шутерах действуют слаженно?

За что я люблю игры, так это за то, что это, по сути, шоу. А в шоу очень много трюков. Трюки, в свою очередь, создают у игрока нужные ощущения. Один из таких трюков — барки в шутерах: они создают ощущение, что противники действуют слаженно.

Барк (bark) — это короткая реплика NPC, которая срабатывает по событию, а не по сценарию. Заметил игрока, ранен, перезаряжается, идёт в укрытие, остался один — на каждое такое событие висит пул строк, и система выбирает одну. В отличие от диалога, барк ничего не спрашивает у игрока и ответа не ждёт: он просто вслух помечает, что ИИ только что решил. Отсюда и название.

Барки используются не только в шутерах, но именно в них им нашли красивое применение. Один из ярких примеров — NPC в F.E.A.R. Это описано в докладе Оркина.

У каждого солдата F.E.A.R. конечный автомат всего с тремя состояниями: Goto (дойти до точки), Animate (проиграть анимацию), UseSmartObject (воспользоваться объектом уровня: перевернуть стол, перелезть через окно). Больше ничего. Вся «умность» вынесена из автомата наружу.

У солдата есть цели с приоритетами: убить врага, дойти до укрытия, выжить, патрулировать. И есть набор действий, у каждого — предусловия и эффекты: «стрелять» требует, чтобы оружие было заряжено и враг был виден, «перезарядить» требует наличия патронов. Планировщик (GOAP, отголосок STRIPS) берёт самую приоритетную цель и обратным поиском собирает цепочку действий, которая к ней ведёт. Цепочка скармливается тому самому автомату из трёх состояний. Мир изменился, предусловие сломалось — и план пересобирается заново. Так солдат сам находит, что перед перезарядкой стоит зайти за стену, а если путь перекрыт — перевернуть стол и спрятаться за ним.

Поверх одиночек стоит координатор. Он собирает NPC, стоящих рядом, в отряд и выбирает для него одно из четырёх поведений: Get-to-Cover, Advance-Cover, Orderly-Advance, Search. Поведение раздаёт каждому бойцу цель, скажем, «займи вот это укрытие ближе к игроку», а дальше каждый планирует свой маршрут сам. Клещи получаются из Advance-Cover сами собой: укрытия стоят по разные стороны коридора, маршруты расходятся.

Когда координатор назначил поведение и раздал роли, он же выдаёт реплики под уже принятое решение. Advance-Cover запустился, боец А пошёл в обход стены, и в этот момент звучит «обхожу». Решение принято, движения ещё не видно, слово уже прозвучало. Игрок слышит план, потом видит движение, которое ему соответствует, и достраивает тактику сам.

Так работает атрибуция намерения: услышанная фраза становится гипотезой о плане врага, а любое совпавшее действие — подтверждением. Отрядный ИИ в F.E.A.R. довольно простой, всего с четырьмя поведениями, ИИ каждого юнита относительно сложный (GOAP как-никак), но именно барки создают ощущение сложной скоординированной тактики у группы NPC.

#devmath #gamedesign #gamefeel #shooter #bark
🔥6✍3
September 17, 2026 258 2