Делаем свой AI режиссер

Это ролик моей игры, а в конце статьи есть ссылка на саму игру

Начав разработку зомби шутер City Massacre я столкнулся со следующей особенностью. Казалось бы все просто - есть зомби, есть оружие - стреляй, убивай, получай удовольствие. Оказывается не все так просто - это быстро наскучивает, т.к. зомби нападают одинаково, пусть даже и толпой. Но на 3й такой толпе уже приходит ощущение повторяемости. У меня был богатый опыт игры в различные зомби шутеры. Один из самых лучших для меня - это Left4Dead 1,2. В этой замечательной серии разработчики столкнулись с этой проблемой и написали AI режиссер. Для создания City Massacre я тщательно изучил эту работу и взял на вооружение некоторые интересные моменты.

Итак начнем. В основе всего находится интерес игрока к происходящему, т.е. если ничего не происходит, то ему скучно, а если на него постоянно нападают и убивают, то он злится. Но в обоих этих случаях результат один - игрок теряет интерес к игре и уходит. Для отслеживания морального состояния игрока введем параметр “Интенсивность”. Это абстрактный параметр, который с нашей точки зрения характеризует текущую нагрузку на игрока.

Делаем свой AI режиссер

Для расчета Интенсивности путем проб и ошибок я пришел к следующим решениям:

  • Минимальная интенсивность - 0, игрок в безопасности и ничего не происходит
  • Максимальная интенсивность - 350, мертвы почти все члены команды, игрок ранен
  • При получения урона игроком, интенсивность увеличивается на количество полученного урона
  • При смерти союзника интенсивность увеличивается на 100
  • Уменьшается интенсивность каждую секунду на 5 единиц

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

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

Красным отмечены точки появления зомби
Красным отмечены точки появления зомби

Перейдем к самим волнам. Начинал я с того что при Интенсивности равной 0, на невидимой игроку точке, на расстоянии не меньше 30 метров, в области 160 градусов от направления взгляда игрока появлялось N зомби и они дружно бежали к игроку. После этого AI режиссер ждал, когда интенсивность снова спадет до 0 и посылал уже N+1 зомби. И так далее, пока количество не будет таким, что одна волна уничтожала игрока вместе с его командой.

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

Я решил разнообразить сами волны зомби, чтобы они отличались друг от друга и представляли больший интерес для игрока. Плюс учитывали бы такой параметр как “Кривая сложности”.

Придумал такие типы волн:

  • Паровоз - N зомби появляются в 1й невидимой области на расстоянии > 30 и меньше 150 метров в зоне 140 градусов относительно поля зрения игрока. Такие зомби бегут паровозиком к игроку.
  • Рассеянная - N зомби появляются в 5ти невидимых областях на расстоянии > 30 и меньше 150 метров в зоне 230 градусов относительно поля зрения игрока. Такие зомби бегут с разных сторон к игроку, заставляя его переводить внимание с одной стороны на другую.
  • Двойная - запускаем 2 рассеянных волны с паузой в 10 секунд между ними. Здесь игрок не успевает расслабиться т.к. на него сразу нападает и вторая волна
  • Тройной паровоз обычный - 3*N зомби появляются в 3х невидимых областях на расстоянии > 30 и меньше 150 метров в зоне 140 градусов относительно поля зрения игрока. Такие зомби бегут тремя паровозиками к игрокую
  • Тройной паровоз рассеянный - 3*N зомби появляются в 3х невидимых областях на расстоянии > 30 и меньше 150 метров в зоне 230 градусов относительно поля зрения игрока. Такие зомби бегут 3ми паровозиками к игроку с разных сторон.
  • Сложная волна - 5*N зомби появляются в 7ти невидимых областях на расстоянии > 30 и меньше 150 метров в зоне 230 градусов относительно поля зрения игрока. Зомби апокалипсис - бегут с разных сторон в большом количестве

В соответствии с Кривой сложности расположил формирование этих волн.

N = Номер волны + 7 (в начале игры N=7)

Паровоз -> Рассеянная -> Двойная -> Тройной паровоз обычный -> Тройной паровоз рассеянный -> Сложная волна.

После Сложной волны круг начинается сначала, т.е. снова Паровоз.

Делаем свой AI режиссер

В итоге получился довольно интересный режим волн для зомби шутера City Massacre. При запуске первой демки в июне мы его успешно опробовали. Надеюсь статья была Вам интересна!

Скачать игру и поиграть бесплатно можно на itch.io: https://City Massacre.itch.io/city-massacre-download

2727
4 комментария

Видос мощный. Долго игру делал? в одну каску?

Ответить

На эту версию ушел год, делаем вдвоем, как разработчик кода и проекта да!)

2
Ответить