Defining Action Combat. Part 1.
Недавно на просторах интернета я наткнулся на свежую серию эссе от Исайи Эверин (Isaiah Everin) — Lead AI/Enemy Designer в Crystal Dynamics (серия игр Tomb Rider, новый Perfect Dark) посвященный боевому дизайну.
Так как тема встречается достаточно нечасто и каждый материал на вес золота (в отличие от пространных абстрактных рассуждений на тему нарратива), а эссе весьма емкое — я решил перевести целиком все 6 его частей. Перед вами — саммари первых 3 частей, их которых я выбрал самое с моей точки зрение важное.
Ну и я всегда поддерживаю, если вы захотите посмотреть серию в оригинале и поддержать лайком автора — продакшен квалити у серии неплохое.
Преамбула
Важно! Этот материал не стремится целиком и полностью охватить ВСЕ возможные вариации боевых систем, которые встречаются в играх — каждая игра имеет множество деталей и частных случав.
Также как статья не будет содержать подробного обьяснения технчиеской реализации AI врагов и боевых менеджеров, описанных тут. Если вам интересны реализации подобного, автор (и я) крайне советует ознакомиться с каналом AI and Games. Часть ссылок на дополнительные материалы я (Sadari) приложу там, где считаю нужным, и где они вообще есть.
Кроме того, этот цикл посвящен боевым системам для Action игр, мы не затрагиваем стратегии, пошаговые игр, файтинги и прочие подобные игры.
Несмотря на то, что бой встречается не только в играх action-жанра, в других он часто реализован по совсем другим правилам: так, в стратегиях важна чаще всего squad экономика и бой не требует реакции игрока на анимации юнитов.
Фундаментальные основы боевого дизайна
Чтобы начать разговор о боевом дизайне, давайте в первой части статьи определимся, что такое игровое сражение в своей самой базовой сути? Что происходит в бою.
Если упростить до самых основ, мы получим очень простой ответ:
Враги наносят различные атаки в сторону игрока, а игрок атакует врагов.
И если действия игрока — это реактивный элемент и мы на него влиять как дизайнер значительно не можем за пределами предоставления ему инструментария, давайте посмотрим на то, что и является базой любого боевого дизайна — атаки врагов.
Но чтобы реализовать эту атаку? нужно учесть множество неочевидных факторов, которые делают такую атаку понятной игроку, "честной" и дающей окно возможностей для контратаки. Исайи Эверин вводит термин, который обозначает сумму этих факторов — темп вражеской атаки (Attack Cadency)
Итак, определим основные группы факторов, которые входят в этот термин
- ТАЙМИНГ — частота и время вражеской атаки
- ПРОСТРАНСТВО — фактор расстояния, который определяет выбор врага между ближней, дальней или AOE атакой.
- ЧАСТОТА — определяет количество атак, которое одновременно может быть направлено на игрока.
- НАПРАВЛЕНИЕ — вектор атаки с точки зрения игровой камеры (то есть с позиции игрока)
Для начала давайте определимся с терминологией, а потом перейдем к каждой из этих групп. Конкретно в этой статье мы затем внимательнее рассмотрим ТАЙМИНГ.
Что такое атака?
Кажется, что это простой вопрос. Однако, с точки зрения дизайна нельзя просто взять и поставить таск "ну, это, он его бьет иногда". Такой таск невозможно реализовать и написать по нему адекватное ТЗ.
Итак, давайте разберем, что же такое атака с точки зрения боевого дизайна.
- Определение цели атаки — противник определяет цель для атаки.
- Разрешение на атаку — враг получает разрешение(тикет/токен) на атаку от боевого менеджера игры.
- Многие начинающие разработчики и дизайнеры игнорируют этот элемент, из-за чего все враги в игре начинают нападать на игрока одновременно, фрустрируя и создавая ощущения нечестности.
- Направление атаки — враг определяет расстояние и вектор атаки. В части игр это очень важный шаг — например враг может нанести удар в спину — в других он может быть проигнорирован(например если все ваши враги в игре — дальнобойные стрелки).
- Выбор из списка возможных атак — теперь, когда атакуюший определен, он выбирает, какую атаку он будет проводить. Выбор может быть как случаен, так и иметь ряд приоритетов в зависимости от расстояния, позиции противника и игрока и т.д.
- Например, враг может атаковать игрока дальней атакой только если расстояние между ними составляет 20 юнитов, при <20 враг всегда выберет рукопашную атаку.
- Подготовка к атаке — теперь, когда атака выбрана, враг начинает цикл подготовки к атаке. Чаще всего это выражается в подключении магнита — враг перемещается каким-то из способов к игроку на расстояние атаки и начинает анимацию. Мы рассмотрим этот момент в следующих частях статьи более подробно.
- Телеграфика атаки — и наконец только теперь начинается сама фаза атаки. Начинается она с виндапа — определенной части анимации, в которой враг четко показывает, как и чем будет атаковать игрока (поднимает руку с оружием, становится в стойку и т.д.
- Активные хит-фреймы — кадры боевой анимации, в которые происходит нанесение урона игроку: удар дубиной, выстрел, укол кинжалом и т.д.
- Гораздо менее важны чем виндап и скорее несут в себе пользу для импакта такой атаки. Если игрок пропустил удар в виндапе — ему уже не так важен факт хита, но важно увидеть, как враг и персонаж реагируют на этот момент.
- Интер-хит фреймы — если в атаке игрока более чем 1 удар, эти удары в анимации перемежаются интер-хит фреймами. Во время этих кадров игроку телеграфируется следующая атака, давая шанс среагировать на комбо.
- Recovery — после того, как враг проиграл анимацию активного удара, начинается фаза возвращения в боевой Idle. Во время этих кадров очень часто враг уязвим для атак игрока, чтобы наградить его за успешный уворот или блок от удара и дать шанс на контратаку.
- Возврат в Idle — атака завершена, враг возвращается в дефолтное состояние и возвращает токен/ждет нового разрешения на атаку, чтобы начать цикл заново.
Разрешение на атаку
Боевой менеджер, AI директор, Система боевых токенов/cлотов — так чаще всего называют систему, которая занимается выбором, какой враг, когда и чем атакует игрока.
Многие начинающие разработчики целиком игнорируют этот момент, в результате получая фрустрирующие боевые ситуации, когда игрока без перерыва атакуют все находящиеся на экране враги, каждый из своих обладает простым кулдауном на атаку вместо нормального менеджера.
Система в своей сути состоит из менеджера, который имеет ряд слотов или токенов. Пока токен или слот не занят, враги просто танцуют вокруг игрока и создают ощущение массовки. Каждый токен — это разрешение врага на проведение атаки и система аккуратно выдает ограниченное количество токенов в один момент, чтобы враги не наваливались на игрока все сразу и давали время на реакцию.
Очень наглядно такая система работает в играх серии Batman Arkham, Witcher 3, Marvel Spider-Man.
Как только враг получает токен, он хранит его до момента, когда он выберет свою атаку и не завершит ее или будет прерван (например оглушен) игроком.
Иногда расстояния в бою между врагои и игроком достаточно велики. Чтобы избежать странных пауз в бою, враг возвращает токен в момент начала своей анимации атаки, чтобы передать токен следующему врагу и тот мог начать сокращать дистанцию до игрока в тот момент. когда вторая атака еще не завершилась (так сделано в Ghost of Tsushima).
Все враги в бою переодически отправляют запрос менеджеру, проверяя, не освободился ли токен. Пока это происходит, они проигрывают idle-анимации или перемещаются вокруг игрока, имитируя активность.
Некоторые враги или типы атак могут иметь отдельные токены. Например, если у вас в бою есть и стрелки, и рукопашные противники, стрелки могут иметь свою собственную очередь для Ranged атак и атаковать игрока одновременно с ближними врагами.
Или, к примеру, если ваши враги имеют и рукопашные, и дальние атаки, два разных врага могут получить два разных токена и начать разные атаки одновременно.
Система токенов/слотов позволяет гибко настраивать боевые ситуации, создавая нужный по темпу прессинг и разнообразя атаки. Так, более продвинутые системы, например, могут иметь дополнительные правила, которые приоритезируют выдачу токенов для врагов в поле зрения игрока или имеют кучу разных токенов в зависимости от дистанции от врага до цели.
В следущих статьях цикла мы остановимся на системе менеджера боя более подробно.
Боевая сцена.
Теперь определимся с следующим термином, который будет постоянно встречаться в данном цикле — боевая сцена(enemy encounter). Так мы обозначим группу врагов, которые выставлены дизайнером в конкретной арене игры. Некоторые игры используют случайную генерацию врагов на сцене, другие позволяют доспанивать врагов в ходе боя, но суть остается одна — это боевая сцена, которую игрок должен пройти в определенный момент игры на определенным уровне прогрессии игрока.
Число, сложность и вариативность боевых сцен напрямую влияет на темп игры. Помните момент, когда после сложного боссфайта игра подкидывает вам в начале следующего уровня небольшой бой с слабыми врагами? Это пример такой манипуляции темпом для того, чтобы дать игроку передохнуть между моментами высокой интенсиовности и стресса.
В больших студиях за боевые сцены отвечает отдельный дизайнер, так называемый encounter designer. Данный специалист отвечает за интеграцию нужных боев нужной сложности на нужный этап игры. Они настраивают число и локации спавна врагов, частоту спавна, выбирают комбинации различных врагов, чтобы создать нужный игровой опыт. В stealth ориентированных играх чаще всего за расстановку врагов отвечает level-designer, так как они напрямую влияют на путь игрока через локацию.
ТАЙМИНГ
Итак, разберем, какие параметры входят в понятие ТАЙМИНГА атаки:
- Кулдаун между токенами — как часто враг атакует игрока, т.е. как часто он получает токен на атаку от боевого менеджера.
- Кулдаун между атаками — как часто один и тот же противник может использовать свои атаки.
- Длина виндапа — насколько велика длина кадров атаки, которая отвечает за телеграфику атаки игрок, чем выше — тем шире окно реакции и легче нивелировать данную атаку.
- Длина интер-хит диапазона — как много времени проходит между атаками в серии комбо, если враг имеет такое.
- Длина рекавери фреймов — длина рекавери, который обычно дает игроку окно возможностей для атаки.
Теперь разберем на примерах, какие виды тайминга атак используются в играх для тех или иных ситуций.
Детерменированный (стабильный) тайминг
Самый базовый способ таймингов атаки. При нем враги атакуют всегда через предустановленный промежуток времени, часто независимо от того, есть ли в зоне атаки враг или нет.
Примеры такой реализации очень часто встречаются в ретро платформерах и подобных им играх.
В такой реализации все враги фактически игнорируют игрока и работают по своим таймерам. В текущей индустрии детерменированный тайминг применяется весьма редко, так как делает игровой мир и опыт игрока очень пассивным.
Эверин однако замечает, что при кажущейся примитивности у такой реализации есть преимушества — предсказуемый тайминг дает игроку полный контроль над окружением и позволяет заучивать комбинации препятствий. Не зря же одни из самых популярных игр среди спидранеров — именно платформеры с детерменированным таймингом атак враго.
Реактивный тайминг
При реактивном тайминге враги реагируют на действия игрока и в зависимости от них выбирают тип и направление атаки. Такой тайминг позволяет создавать ощущение базового интеллекта у противников и вдохнуть жизнь в игровой опыт игрока.
Это реализовывается с помощью передаче всем врагам-агентам, учавствующим в бою, и боевому менеджеру, информации о положении игрока и его взаимодействии с управлением игрой.
Самой простой реализацией такой системы является правило "Ударь игрока атакой А, когда тот подойдет на дистанцию Х юнитов". Такой тайминг атаки на основе расстояния крайне эффективно работает в играх, в которых нет понятия разных высот или очень маленькое количетсво врагов в бою.
Не применяйте ее, если у вас в одном бою может одновременно учавствовать множетсво врагов! Вы получите очень фрустрирующую ситуацию, при которой игрока могут загонять в бесконечный станлок из-за непрерывных атак.
При разнице высот ИИ с такой системой может крайне часто путаться, когда игрок находится выши или ниже него.
Более сложными и органичными реализациями являются finite state machines, ИИ на основе цепей маркова и подобные им системы, которые не являясь реальным ИИ, позволяют врагам выбирать из обширного списка действий в зависимости от действий игрока.
Для 99% случаев адекватной реализации вам будет достаточно finite state machine, не пытайтесь придумывать велосипед.
Примерами применений в играх таких систем тайминга, например, являются:
- Босс переходит в фазу 2 КОГДА его здоровье падает до 50%
- Враг начинает блокировать атаки КОГДА игрок бьет его 3 раза подряд в течении 6 секунд.
- Враг начинает пить зелье лечение, если его здоровье меньше 60% и игрок на расстоянии 30 юнитов от него.
При использовании вышеописанных систем учитывайте, что все действия врага все еще должны быть предсказуемыми и ожидаемыми для игрока. Именно это создает иллюзию интеллекта противника, при этом давая игроку чувство контроля над ситуацией. Например, если враг начинает пить зелье лечения в качетсве реакции на то, что получил 1% урона, это кажется игроку неоптимальным и рушит иллюзию.
Случайный тайминг
Случайный тайминг предполагает что, очевидно, враг совершает атаку через случайный (а точнее, псевдослучайный) диапазон времени. Случайный тайминг используется, когда мы хотим, чтобы игрок реактивно реагировал на атаки, т.к. он не может четко предсказать, что приводит к этой атаке.
Типичной реализацией, например, является кулдаун для атаки, который состоит из min range и max range значений, и враг каждый раз выбирает случайное значение между этими диапазонами для совершения атаки.
Крайне часто случайный тайминг используется не независимо — потому что непредсказуемость кажется игрокам нечестной — а в союзе с реактивным.
Например, враг может иметь ИИ, которые реактивно реагирует на атаки:
- Блокирует щитом, КОГДА игрок стреляет в него
- Пьет зелья, если ранен на 50%
- Атакует, если игрок ближе чем в 5 юнитах.
Случайные значения часто используются для создания более "реалистичного" поведения и мира. Реальный мир не подчинаяет детерменированным правилам, поэтому четкие кулдауны воспринимаются игроком нереалистично и делают игру более абстрактной.
Динамика таймингов
Важно понимать, что все вышеописанные системы редко используются по отдельности, в изоляции. Более того, многие игры используют и дополнительные надстройки над таймингами, давая упомянутому выше боевому менеджеру правила, скажем, уменьшать тайминги атак, когда врагов остается меньше, или переключать тайминги с реактивных на случайные в зависимости от действий игрока.
Важность тайминга
Исайи Эверин считает, что тайминг атак играет ключевую роль для всех аспектов боевой системы и ее темпа.
Например, если ваши враги используют стабильный тайминг, то им не нужно никакой телеграфики атаки игроку, ИИ, или сложных машин конечных автоматов.
Если атака гарантирована каждый равный промежуток времени, игрок ее очень быстро опознает и запомнит — человеческий мозг очень хорош в определении паттернов. В этом же есть и простое удовольствие предсказуемых паттернов — игрок может четко спланировать свои действия наперед, точно зная результат.
Такие атаки требуют простых анимаций, так как они быстро устаревают и не вызывают у игрока никаких эмоций — смотреть как цветок в Марио вылезает из трубы раз за разом врядли вызовет у кого-то чувство интереса.
В случайных же таймингах игрок не может предсказать ничего наперед и вынужден адаптироваться под каждую атаку врага — тут фан заключается в положительном фидбеке на каждую удачную реакцию, заучивание анимаций и паттернов атак противника.
Такие атаки всегда потребуют гораздо большего внимания к анимациям — атака должны четко показывать все стадии игроку: виндап, активные хит-фреймы, интер-хит, рекавери. Недостаток информации ведет к фрустрации и перекосу в хрупком балансе необходимого челленеджа.
Ключевыми признаками плохих боевых анимаций являются:
- Нечитаемые позы
- Хаотичный тайминг
- Множетсво VFX эффектов, скрывающие от игрока движения противника
- Отсутсвие четкого виндапа для телеграфики атаки
Кроме этого, звук и VFX также играют ключевую роль для опознания игроком атаки и должны быть синхронизированы с анимацией, чтобы избегать фрустрации — врядли ком-то понравится, если враг предупреждает криком об атаке за 5 секунд до нее.
На этом текущая статья цикла завершается, увидимся в продолжении!