Механики, помогающие нам выжить.
Основатель студии ORC WORK, продюсер и участник сообщества «Манжеты ГД» Сергей Гимельрейх написал статью о защитных механиках в играх. Он перечислил их преимущества, недостатки и привёл формулы, по которым их можно рассчитывать.
DTF публикует материал с разрешения ресурса.
В играх, основанных на конфликте, защита/броня (Defense/Armor) используются в качестве основного параметра юнита так же часто, как атака. Но именно с этой характеристикой у геймдизайнеров возникает больше всего вопросов и проблем.
Я расскажу про разные способы реализации параметра защиты у юнита, приведу немного математики, а также выскажу собственное мнение о нескольких механиках.
Что это такое?
Практически в любой боевой системе существует базовое отношение величин — урона (Damage) и очков жизни (HP — Hit Points). Это отношение рассматривается в контексте двух юнитов на поле боя — «нападающего» и «защищающегося».
Самый простой бой описывается так:
- HPDefenderResult = HPDefender — DamageAttacker
В этом случае роль защиты юнита берут на себя HP «защитника». Чем больше у него очков жизни, тем легче ему выжить.
Но чаще всего защита является дополнительной надстройкой над HP. Поэтому сразу определим параметр defense (защита) как сумму всех дополнительных защитных свойств юнита. Осталось найти место защиты в нашей формуле.
Здесь могут быть два базовых варианта (на самом деле больше, но они наиболее показательны):
- HPDefenderResult = (HPDefender + DefenceDefender) — DamageAttacker
- HPDefenderResult = HPDefender — (DamageAttacker — DefenceDefender)
Первый работает на увеличение очков жизни, второй — на снижение входящего урона. Но и это ещё не всё.
Если подумать над формулами, можно понять, что в них не хватает времени. Формулы отражают лишь мгновенное единичное событие отношений входящего урона и оборонительных свойств «защитника».
Введём фактор времени в отношении урона атакующего:
- DPSA = DamageAttacker / AttackFQ
DPSA — Damage Per Second (Урон в секунду) для атакующего юнита (A), DamageAttacker — базовый урон юнита, AttackFQ — частота атаки юнита (в секундах).
Снова построим отношение юнитов в бою, только теперь через понятие «время до поражения юнита».
Обозначим его сокращением TTD (Time to Defeat):
- TTD = HPDefender / (DPSA — DefenseDefender)
- TTD = (HPDefender + DefenseDefender) / DPSA
По полученным формулам вычисляется время выживания юнита в бою. По сути, TTD — показатель живучести юнита, отражающий его защитные характеристики. Чем выше TTD, тем защищённее юнит.
Исходя из этого, «защита» — время выживания юнита в бою.
Механики, о которых мы будем говорить далее, призваны увеличивать этот показатель (TTD). С их помощью геймдизайнеры добавляют разнообразия бою, расширяют его тактическую вариативность и глубину, но все они сводятся к одному и тому же — увеличить время выживания юнита.
Механики
Несмотря на разнообразие механик защиты в разных боевых системах, есть несколько простых правил для хорошей реализации этого показателя.
- Отношение защиты и урона в бою должно быть интуитивно понятно.
- Механика защиты хорошо работает, если она построена на более сложных взаимодействиях, чем простое абсорбирование входящего урона.
- Доля рандома в механике защиты не должна быть слишком высокой (следует учитывать длительность и монотонность боя, а также насколько важен в бою навык игрока).
- Используйте возможности игрового мира для создания более интересной механики защиты.
Roll to Hit
Первая в нашем списке — Roll to Hit, механика из серии настольных ролевых игр D&D. В них есть так называемый АС (Armor Class) — класс брони, определяющий, насколько тяжело попасть по персонажу в бою. Это работает так:
- бросаем кубик d20;
- прибавляем модификаторы атаки;
- считаем полученную сумму;
- если она выше или равна AC противника – всё получилось, наносим урон. Если ниже – промах.
Проверенная временем механика, которая неоднократно использовалась в видеоиграх. Она больше подходит для модели, не основанной только на навыке игрока. Хорошо разбавляет затянутые во времени бои.
В дальнейшем Roll to Hit трансформировался в более стройные модели (Block, Dodge, Evasion и так далее)
Block / Parry
Механика Block основана на вероятности блокировании всего или части урона при помощи брони/щита или оружия (Parry).
Такой тип механики популярен в RPG и основан (так же, как и Roll to Hit) на вероятностной математике. Его отличие в тонкости применения при сочетании с другими защитными механиками.
В частности, для блокирования актуально наличие отвечающих за него предметов — это элементы доспеха или щит, который персонаж держит в руках. Механика может работать как проверка навыков игрока, когда тот принимает удар на щит (например, в Dark Souls или For Honor).
В случае с парированием, блокирование приходится на оружие персонажа. В реальности шанс такой блокировки ниже, что переносится и на математику. Также парирование может разрушать оружие, если модель это учитывает.
Казалось бы, причём здесь математика? Дьявол кроется в деталях. Если опустить прямой навык игрока и считать блокирование только на вероятностях, то можно увидеть, что механика чувствительна к алгоритму счёта.
К примеру, вы хотите использовать три реакции юнита на атаку:
- юнит блокирует (block), и получает уменьшенный урон;
- юнит уклоняется (dodge — читайте раздел ниже), и не получает никакого урона;
- юнит не блокирует, не уклоняется и получает полный урон.
Возникает вопрос: что рассчитывать сначала — уклонение или блокировку?
Первый вариант:
Проверить одну из механик, и только если это событие не сработает, переходить к проверке следующей.
В этом случае событие, проверяющееся первым, будет происходить чаще. Вероятность первого срабатывания не модифицирована, а второго — снижается из-за отказа первого. Поэтому, когда у первой механики есть 60% шанс на провал, а у второй — 40% шанс на успех, реальный шанс, что второе событие произойдет, составляет всего 24% (60% от 40%).
Второй вариант:
Проверить обе механики, а затем использовать ту, у которой полученное значение вероятности больше.
Допустим, у персонажа есть 40%-ый шанс блокировки и 30%-ый шанс уклонения. Случайный бросок для блока дал 30% шанс, случайный бросок для уклонения — только 25%. В этом случае блок прошёл с запасом в 10%, а уклонение — с 5%. В этом случае юнит будет блокировать, а не уворачиваться.
Второй вариант мне видится более удачным и широким для модификации и дополнения новыми механиками защит.
Dodge / Evasion
Обе механики основаны на вероятности полного уклонения от входящего урона. Я объединил их, так как большой разницы между ними, как правило, нет. Но есть нюансы.
- Dodge работает непосредственно с направленной атакой и требует наличия атакующего, так как бросок на шанс проверяется для каждого отдельного нападающего. Обычно применяется только для физического урона.
- Evasion позволяет уклоняться от AoE и прочих косвенных, не таргетированных атак. Бросок на шанс работает независимо от атакующего. Чаще всего используется как механика уклонения от нефизического урона.
Dodge и Evasion могут использоваться как дополнительные «слои» защиты в боевой системе.
В отличие от Block, Dodge является механикой именно уклонения от атаки, и никак не влияет на входящий урон как таковой, а также обычно зависит от подвижности (условной или безусловной) юнита, тогда как Block прежде всего апеллирует к его силе и выносливости.
Любопытный факт: в League of Legends механика Dodge была удалена с патчем 1.0.0.124. для снижения элемента случайности и усиления зависимости игры от навыков пользователя.
Damage Absorb
Механика основана на снижении входящего урона, её используют очень часто.
Способ её реализации с математической точки зрения может быть любым: разность абсолютных значений, процентный, основанный на функции, и так далее. Смысл при этом не меняется. В общем случае участие такого вида защиты сводится к простой формуле:
DamageResult = DamageBase — Defense
В большинстве игр серии Final Fantasy нет отдельного параметра защиты у персонажа. Характеристики содержатся в предметах или применяются через магические заклинания. В общем случае защита делится на физическую и магическую. Например, в Final Fantasy IX (DamageBonus — модификатор урона, зависящий от силы, уровня и случайности):
DamageResult = (DamageBase — Defence) * DamageBonus
Параметр Protection в Darkest Dungeon работает как раз по модели абсорбирования входящего урона. При этом он не может быть выше 80%.
Частным случаем Damage Absorb являются разнообразные дефлекторы/щиты в фантастических играх, которые восстанавливаются со временем.
Resistance / Immune
Частный случай механики Damage Absorb, основанный на разделении поглощения урона на типы/виды атак. Самый простой пример механики — разделение урона на физический и магический. Защита также разделяется на физическую и магическую. Такие приёмы используются во множестве азиатских RPG, в том числе в Final Fantasy. Яркий пример можно встретить в старом (и ныне всё ещё здравствующем) «рогалике» Angband.
Экран резистов (нижняя половина) выглядел так:
Разбираться в отношениях атак и сопротивлений приходилось долго и скрупулёзно. Такая модель хороша для хардкорных игр с длинным сроком жизни.
В современных играх стараются использовать меньшее количество сущностей. Например, в Divinity: Original Sin сопротивлений всего шесть. Их, как правило, обозначают в процентах. Механика работает аналогично Damage Absorb (к примеру, урон умножается на коэффициент), только здесь поглощение урона идёт по нескольким каналам, в зависимости от типа наносимого урона. То есть урон огнём поглощается сопротивлением огню, водой — сопротивляемостью водному элементу и так далее.
Immune, как правило, — частный случай Resistance, в котором поглощение входящего урона на канал равно 100%.
HP-growth
Ещё одна разновидность абсорбирующей урон защиты основана на наращивании дополнительных очков здоровья. От Damage Absorb подход отличается «отбрасыванием» брони при каждом попадании.
Яркий пример применения такой механики — броня в шутерах от первого лица. Вот интересные примеры её применения.
В Doom было два вида брони — синяя, имеющая более высокую прочность и поглощающая больший процент урона (½); зелёная броня (поглощала только ⅓). Также имелись элементы «бронированного бонуса» — их можно было собирать, чтобы восстановить текущую броню и даже увеличить её выше 100% (в случае с зелёной бронёй).
Half-Life — энергия HEV-костюма Гордона Фримена работает как обычная броня на механике HP-growth, хотя часть урона от пуль всё равно проходит в HP (комбинированная механика — HP-growth+Damage Absorb).
Armor Patterns
Использование позиции и геометрии объекта с разными параметрами защиты. Обычно применяется совместно с Damage Absorb, усиливая зависимость механики от навыка игрока.
Armor Pattern — одна из ключевых механик защиты в World of Tanks. Причём учитывается не только зонирование элементов техники, но и угол наклона брони относительно удара снаряда.
В Fallout также используется механика зонирования защиты на юнитах. За счёт этого геймдизайнерам Bethesda удалось разработать режим прицеливания V.A.T.S., когда в замедлении можно целиться в конкретные области для наиболее эффективного поражения юнита.
И это ещё не всё
Какую механику выбрать для своего проекта? Зависит от многих факторов: требований к навыку игрока, сложности боевой системы и даже от сеттинга.
Мы рассмотрели лишь малую часть известных и популярных вариантов реализации защиты. Их значительно больше, хотя во многих случаях они сводятся к вышеописанным.
Также мы не учитывали множество дополнительных факторов, от которых зависит механика: участие игрока в защите (файтинги), укрытия (тактические стратегии и шутеры), вес брони, её влияние на подвижность и ловкость и так далее.
Тема обширная, но я всё же надеюсь, что материал даст вам не только информацию, но и пищу для размышлений.
Источник: DTF