“…in one game I played there were objects with 99 DEF. This reduced damage to 1 for everyone, so that it would take 10 hits to harvest items from the object. It made more sense to do it unarmed, since unarmed attack speed was faster.
This simulated digging it up!”RJ McReady
из обсуждений механик Защиты на форуме Unity3D
В начале
В играх, основанных на конфликте, Защита/Броня (Defense/Armor) используются в качестве основного параметра юнита так же часто, как Атака. Но именно с этой характеристикой у геймдизайнеров возникает больше всего вопросов и проблем.
Я расскажу про разные способы реализации параметра Защиты у юнита, приведу немного математики, а также выскажу собственное мнение о нескольких механиках Защиты.
Что такое защита?
Практически в любой боевой системе существует базовое отношение величин — Урон (Damage) и Очков Жизни (HP — Hit Points). И рассматривается это отношение в контексте двух юнитов на поле боя — Нападающего и Защищающегося.
Самый простой бой описывается так:
HPDefenderResult = HPDefender - DamageAttacker
В этом случае роль Защиты юнита берёт на себя HP Защитника. Чем больше у него Очков Жизни, тем он более живуч.
Но чаще всего Защита является дополнительной надстройкой над HP. Поэтому сразу определим параметр Defense(Защита), как сумму всех дополнительных защитных свойств юнита. Осталось найти место Защиты в нашей формуле.
И здесь могут быть два базовых варианта (на самом деле больше, но эти варианты наиболее показательны):
(1) HPDefenderResult = (HPDefender + DefenceDefender) - DamageAttacker
(2) HPDefenderResult = HPDefender - (DamageAttacker - DefenceDefender)
Первый работает на увеличение Очков Жизни, второй — на снижение входящего урона. Но и это ещё не всё…
Если подумать над полученными формулами, то можно понять, что в них не хватает времени. Формулы отражают лишь мгновенное единичное событие отношений входящего Урона и Защитных свойств Защитника.
Введем фактор времени в отношении Урона Атакующего:
DPSA = DamageAttacker / AttackFQ где DPSA — Damage Per Second (Урон в секунду) для атакующего юнита(A) DamageAttacker — базовый урон юнита AttackFQ — частота атаки юнита (в секундах)
Снова построим отношение юнитов в бою, только теперь через понятие “Время до поражения юнита”.
Обозначим его сокращением TTD (Time To Defeat):
(1) TTD = HPDefender / (DPSA - DefenseDefender)
(2) 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) на вероятностной математике. В чем его отличие от Roll to Hit? В тонкости применения в сочетании с другими Защитными механиками.
В частности для Block актуально наличие предметов, отвечающих за блокировку — это элементы доспеха или щит, который держит в руках персонаж. Block может работать как прямой скилл игрока, когда тот принимает удар на щит, как в том же Dark Souls или For Honor. В случае с Parry обычно блокировка приходится на оружие персонажа, и шанс такой блокировки ниже с точки зрения реалистичности (переносится и на математику). Также Parry может разрушать оружие, если модель это учитывает.
Казалось бы, причём здесь математика? Дьявол кроется в деталях.
Если опустить прямой скилл игрока и считать Block только на вероятностях, то можно увидеть, что механика чувствительна к алгоритму счёта.
К примеру, вы хотите использовать три реакции юнита на атаку:
- Юнит блокирует (block), и получает уменьшенный урон
- Юнит уклоняется (dodge — читайте раздел ниже), и не получает никакого урона.
- Юнит не блокирует, не уклоняется и получает полный урон.
Здесь возникает вопрос приоритета расчёта: уклонение или блокировка?
Первый вариант:
Проверить одну из механик и только тогда, когда это событие не сработает, проверить следующую.
В этом случае то событие, которое проверяется первым, будет происходить чаще. Что касается вычисления вероятности: вероятность первого срабатывания не модифицирована, вероятность же второго события снижается из-за отказа первого. Поэтому, когда у первой механики есть 60%-ный шанс на провал, а во втором — 40%-ный шанс на успех, реальный шанс, что второе событие произойдет, составляет всего 24% (60% от 40%).
Второй вариант:
Проверить обе механики, а затем использовать ту, у которой полученное значение вероятности больше.
Допустим, у персонажа есть 40%-ый шанс блокировки и 30%-ый шанс уклонения. Случайный бросок для Блока дал 30%-ный шанс, случайный бросок для Уклонения — только 25%. В этом случае Блок прошел с запасом в 10%, а Уклонение — с 5%. В этом случае Юнит будет Блокировать, а не Уворачиваться от атаки.
Второй вариант мне видится более удачным и широким с точки зрения модификации и дополнения новыми механиками Защит.
Dodge / Evasion
Обе механики основаны на вероятности полного уклонения от входящего урона. Я объединил их, так как большой разницы между Dodge и Evasion, как правило, нет.
Но есть нюансы, о которых пойдёт речь ниже.
Dodge — работает непосредственно с направленной атакой и требует наличие атакующего, так как бросок на шанс работает именно на каждого отдельного атакующего. Механика Dodge обычно работает только с физическим уроном.
Evasion — позволяет уклоняться от AoE и прочих косвенных, не таргетированных атак. Бросок на шанс для Evasion работает независимо от атакующего. Evasion чаще всего используется как механика уклонения от нефизического урона.
Dodge и Evasion могут использоваться как дополнительные “слои” Защиты в боевой системе.
В отличие от Block, Dodge является механикой именно уклонения(!) от атаки, и никак не влияет на входящий урон как таковой, а также играет обычно от подвижности (условной или безусловной) юнита, тогда как Block апеллирует, прежде всего, к Силе и Стамине.
Любопытный факт: В League of Legends механика Dodge была удалена начиная с патча V1.0.0.124. для снижения рандома и в пользу большей скилловости игры.
Damage Absorb
Механика основана на снижении входящего Урона. Одна из наиболее часто используемых механик.
С математической точки зрения способ снижения урона может быть любым: на разности абсолютных значений, процентный, основанный на функции и т.д. Смысл при этом не меняется. В общем случае участие такого вида Защиты сводится к простой формуле:
DamageResult = DamageBase - Defense
В большинстве игр серии Final Fantasy нет отдельного параметра Защиты у персонажа. Характеристики Защиты содержатся в предметах или применяются через магические заклинания. В общем случае Защита делится на физическую и магическую.
Пример формулы (Final Fantasy IX):
DamageResult = (DamageBase - Defence) * DamageBonus где DamageBonus — модификатор урона, зависящий от силы, уровня и рандома.
В Darkest Dungeon параметр Protection работает как раз по модели абсорбирования входящего урона. При этом Protection в DD не может быть выше 80%.
Частным случаем Damage Absorb являются разнообразные дефлекторы/щиты в фантастических играх, которые восстанавливаются со временем.
Resistance / Immune
Частный случай механики Damage Absorb, основанный на разделении поглощения урона на типы/виды атак. Самый простой пример механики Resistance — разделение урона на физический и магический. Защита также разделяется на физическую и магическую. Такие приёмы использует множество азиатских RPG, в том числе Final Fantasy.
Яркий пример навороченной системы Resistance/Immune в старом (и ныне всё ещё здравствующем) рогалике Angband.
Экран резистов (нижняя половина) выглядел так:
Разбираться в отношениях атак и резистов приходилось долго и скрупулёзно. Такая модель хороша для хардкорных игр с длинным сроком жизни.
В современных играх стараются использовать меньшее количество сущностей.
В Divinity: Original Sin резистов всего 6:
Резисты, как правило, обозначаются в процентах. Механика работает аналогично Damage Absorb (к примеру, урон умножается на коэффициент резиста), только здесь поглощение Урона идёт по нескольким каналам, в зависимости от типа наносимого урона. Т.е. Урон Огнем поглощается резистом Огня, Урон Воды поглощается резистом Воды и т.д.
Immune, как правило, является частным случаем Resistance, когда поглощение входящего урона на канал равно 100%.
HP-growth
Ещё одна разновидность абсорбирующей урон механики Защиты, основанная на наращивании HP дополнительными очками. Разница с Damage Absorb заключается в “отбрасывании” брони при каждом попадании.
Яркий пример применения такой механики — армор в шутерах от первого лица.
Некоторые интересные примеры использования такой механики:
Doom — броня была двух видов: синяя броня, имеющая более высокую прочность и поглощающая более высокий процент урона (½ урона); зелёная броня (поглощала только ⅓). Также были элементы «бронированного бонуса», которые можно было собирать и восстановить текущую броню, и даже увеличить её выше 100% (в случае с зелёной бронёй).
Half-Life — энергия HEV-костюма Гордона Фримэна работает, по сути, как обычная броня на механике HP-growth, хотя часть урона от пуль всё равно проходит в HP (здесь имеет место комбинированная механика — HP-growth+Damage Absorb).
Armor Patterns
Использование позиции и геометрии объекта с разными параметрами Защиты. Обычно механика применяется совместно с Damage Absorb, делая её более скилловой для игрока.
В World of Tanks активно используется Armor Pattern, как одна из ключевых механик Защиты. Причем учитывается не только зонирование элементов техники, но и угол наклона брони относительно удара снаряда.
Рисунок из приложения Armor Inspector.
В Fallout также используется механика зонирования Защиты на юнитах, за счёт чего геймдизайнерам Bethesda удалось разработать интересный режим прицеливания V.A.T.S.(The Vault-Tec Assisted Targeting System), когда в условиях замедленного времени можно целиться в определённые зоны для наиболее эффективного поражения юнита.
Что в конце?
А в конце рассуждения на тему…
Какую механику выбрать для своего проекта? Зависит от многих факторов: от участия скилла игрока, от сложности боевой системы, даже от сеттинга.
Сегодня мы рассмотрели лишь малую часть известных и популярных механик Защиты, которые используются в играх. Их разновидностей значительно больше, хотя во многих случаях они сводятся к выше описанным.
Так же мы не учитывали множество дополнительных факторов, влияющих на механику Защиты, такие как: участие скилла игрока непосредственно в защите (файтинги), использование укрытий (тактические стратегии и шутеры), вес брони и её влияние на подвижность и ловкость и т.п.
Тема достаточно обширная, но я всё же надеюсь, что этот материал даст вам не только информацию, но и пищу для размышлений о разнообразии и интересности механик Защиты, которые можно придумать для вашей игры.
Отдельную благодарность выражаю коллеге по цеху - Николаю Шаповалову из компании PlayFlock за интересные беседы по теме и идею для этой статьи.
Related posts
ПОДКАСТ
-
Выпуск #62: Путешествие на Gamescom
Кирилл Золовкин съездил на Gamescom 2022, который проходил 24-28 августа в Кёльне и теперь готов рассказать и показать как это было!Ведущие выпуска:- Артем Волков- Антон Токарев- Кирилл ЗоловкинСпособы поддержки:- донат в стрим: https://www.donationalerts.com/r/gdcuffs- прямая поддержка от души: https://www.tinkoff.ru/cf/3mtqRfzeQGc- patreon: https://boosty.to/gdcuffs- стать классным спонсором: https://clck.ru/X7Y9aНаш блог: http://gdcuffs.com/
Свежие комментарии