[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-229719-0", "render_to": "inpage_VI-229719-0-952491735", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxeub&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&fmt=1&pr=" } } ] { "gtm": "GTM-NDH47H" }
{ "author_name": "Олег Чимде", "author_type": "self", "tags": ["\u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d"], "comments": 31, "likes": 18, "favorites": 7, "is_advertisement": false, "section_name": "gamedev" }
8 227
Gamedev

Секреты идеального баланса: колонка геймдизайнера компании Pixonic

Ведущий геймдизайнер компании Pixonic Артур Мостовой, один из авторов популярной мобильной игры War Robots, на конкретных примерах объясняет, как нужно выстраивать грамотный баланс в онлайн-играх.

Неподготовленному читателю будет сложно: здесь много математики, формул и сложных терминов. Передаем слово автору.

Поделиться

В избранное

В избранном

Начну с очевидного — ничего идеального нет. Так что тогда имеется в виду под идеальным балансом? Можно сказать, что идеально сбалансированная система базируется преимущественно на двух вещах — приближении и равенстве. Перед тем, как перейти непосредственно к примерам, давайте взглянем на эти два термина поближе.

Приближение

В контексте этой статьи приближение (или аппроксимация) — это процесс упрощения сложных сущностей для сведения их к числам, которые можно использовать в уравнении. Хотя в тексте будут рассматриваться несколько частных случаев использования приближения, в реальной жизни, разум геймдизайнера ничем не ограничен, когда речь идет о разработке новых фичей и механик. И описанный подход или образ мышления можно в целом применять практически для всего.

При попытке осмыслить сущность непосредственно из игры можно столкнуться со сложностями. Как вообще можно рассчитать, например, мощность гигантской космической улитки, которая воет как гиена, регенерирует как Росомаха и периодически стреляет зелеными разрывными паладинами? Казалось бы, это невозможно. Но суть в том, чтобы абстрагироваться от образов (даже самых экстраординарных) и думать абстракциями, которые легко разбить на более мелкие части и применить к ним математику.

Равенство

Что такое в действительности баланс? Разные сущности обычно называются сбалансированными, если их можно считать условно равными друг другу в рамках геймплея. Баланс особенно важен в онлайн-играх. Если в одиночной игре по какой-то причине баланс не идеален, обычно это не критично. Там есть вещи, на которые игроки обращают больше внимания — персонажи, сюжет, игровой процесс и так далее.

Если что-то выбивается из общего баланса, то это можно проигнорировать (ну или злоупотреблять этим). В конечном итоге игра заканчивается, и такие моменты уже не сильно раздражают пользователя, если их не слишком много. Важно заметить, что в одиночных играх по определению нет соревновательного элемента в привычном понимании. Ну выпало оружие немного сильнее остальных, и что с того?

А вот в онлайне люди постоянно сражаются за места в рейтингах, оттачивают мастерство десятки часов каждый день и рассчитывают на честное соревнование. Если какой-то игрок получает преимущество в бою, это сразу же берется на заметку остальными участниками, и суть этого преимущества начинает использоваться все чаще, становясь новой «метой» (в данном случае, лучшей стратегией). Это в свою очередь ведет к тому, что все больше и больше людей будут пользоваться этим «хаком», который чуть более эффективен, чем другие. Зачем пробовать что-то еще, если он работает лучше всего? Поэтому дисбаланс лишает игру сложности и разнообразия, он каннибалистичен по отношению ко всему остальному контенту игры.

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

Как сделать их равными в рамках игры? Для достижения такого эффекта понадобился бы один интегральный параметр, который описывал бы каждое оружие одной конкретной цифрой и при этом учитывал все их особенности. Так как речь об оружии, а оно по определению наносит урон, назовем этот интегральный параметр еDPS (эффективный урон в секунду) — он будет описывать урон каждого нашего оружия в секунду с учетом всех остальных его боевых параметров одним числом.

К делу

При создании игры, выбранные числа характеристик зависят от многих вещей — лора, игровой динамики, субъективного восприятия игроков и многого другого. В целях демонстрации, числа в этой статье мы для простоты возьмем из головы. Пусть у нас будет три вида оружия: назовем их А, B и C, соответственно.

Предположим, что оружие A наносит 1000 урона каждую секунду, B наносит 500 каждые 0,5 секунды и C — 250 урона каждые 0,3 секунды. Каким будет DPS (урон в секунду)?

● DPS оружия = урон за атаку/интервал атаки

● Оружие A: урон 1000/1 секунда = 1000 DPS

● Оружие B: урон 500/0,5 секунды = 1000 DPS

● Оружие C: урон 250/0,3 секунды = 833,3 DPS

Сейчас DPS видов оружия равен их еDPS, потому что у нас еще нет специальных механик или модификаторов, которые учитывались бы в еDPS.

Как видно, оружие A и B имеют одинаковый еDPS, а C примерно на 20% слабее. Чтобы уравнять его с двумя другими, нужно либо порезать (ослабить) A и B, либо бафнуть (усилить) C. Второй вариант в общем случае предпочтительнее, так как он требует меньше изменений (представьте выбор в духе «порезать одно оружие или бафнуть 49» — результат очевиден, хотя исключения бывают). Также у A и B eDPS представлен более круглым и удобным для восприятия числом.

Бафнуть DPS у C можно либо уменьшив интервал атаки, либо увеличив урон. По A и B видно, что есть пропорция вида 2-к-1 между интервалами атаки.

Для простоты восприятия пойдем тем же путем и изменим интервал атаки оружия C:

● Интервал атаки = урон за атаку/DPS

● Новый интервал атаки оружия C = 250/1000 = 0,25 секунды

Отлично, теперь показатели eDPS у всех равны. Это не значит, что и оружие теперь одинаковое: оружие A более предпочтительно для нанесения сильного мгновенного (burst) урона с более длительным откатом, в то время как C больше подходит для беспрерывных (sustained) атак, ведь оно наносит меньше урона, но чаще.

Добавим что-нибудь, чтобы стало интереснее — например, дистанцию атаки. Теперь у A дальность поражения 1 м, у B — 10 м, а вот C поражает цель на расстоянии до 25 м. Отсюда видно, что максимальная дистанция, на которой может начаться сражение, составляет 25 метров. В целях аппроксимации предположим, что игроки, использующие наше оружие, будут двигаться навстречу друг другу и начнут атаковать, как только выйдут на нужную для начала атаки дистанцию (что логично).

Имея это в виду можно перейти к цифрам. Визуализируем новые условия — оружие C эффективно на 100% на расстоянии до 25 м, B эффективно на 100% расстоянии до 10 метров и совершеннобесполезно (эффективно на 0%) в диапазоне от 10 метров и выше.

● Эффективность оружия B на дистанции до 25 м = (10 м/25 м) * 100% + (15 м / 25 м) * 0% = 40%

Аналогично можно подсчитать эффективность A:

● Эффективность оружия A на дистанции до 25 м = (1 м/25 м) * 100% + (24 м/25 м) * 0% = 4%

Вводя новый параметр — дистанцию атаки, мы добились того, что B теперь реализует лишь 40% своей мощности, а оружие A — всего 4%.

● eDPS оружия = DPS * дистанционная эффективность

● Оружие A: 1000 DPS * 4% = 40 eDPS

● Оружие B: 1000 DPS * 40% = 400 eDPS

● Оружие C: 1000 DPS * 100% = 1000 eDPS

Чтобы сделать систему сбалансированной, поменяем несколько параметров отстающего оружия. Можно просто бафнуть только урон оружия A на условные плюс-сто-пятьсот, и технически это даже даст нужный нам эффект. Но это не лучший вариант, и вот почему — игрок с оружием A, скорее всего, уничтожит любого врага одним ударом (когда и если до него доберется). Обычно это нежелательно с точки зрения дизайна, хотя бывают исключения. Менее резким скачком было бы распределить усиление этого оружия между разными параметрами, и чем больше их — тем лучше, тогда переход будет более гладким.

Попробуем комбинацию из нескольких изменений, чтобы достичь 1000 eDPS для всех видов оружия — увеличение дистанции атаки A, уменьшение дистанции атаки C и увеличение урона A и B. Для простоты не будем трогать интервал атаки, только урон.

Первое по порядку изменение не имеет особого значения, начнем с дистанции атаки, которая для A теперь составляет два метра, а для C — 20 метров. Я не выбирал эти числа по каким-то определенным причинам, просто 2 м видятся все еще реальными для оружия ближнего боя, хотя технически это 100% баф (но при этом в абсолютных величинах это увеличение всего на метр). Что касается оружия C, здесь изменение небольшое — нерф на 20%.

● Новая эффективность оружия A до 20 м = (2 м/20 м) * 100% + (18 м/20 м) * 0% = 10%

● Новая эффективность оружия B до 20 м = (10 м/20 м) * 100% + (10 м/20 м) * 0% = 50%

Изменив эффективность, отрегулируем урон, чтобы достичь 1000 eDPS для двух отстающих видов оружия —A теперь наносит 10000 урона, а B — 1000 урона, что дает 10000 DPS и 2000 DPS соответственно.

● Новый eDPS оружия A = 10000 DPS * 10% = 1000 eDPS

● Новый eDPS оружия B = 2000 DPS * 50% = 1000 eDPS

Неплохо. А ведь мы всего лишь ввели такие базовые параметры, как DPS и дистанция атаки. Подольем немного масла в огонь: оружие A наносит дополнительный урон по площади (АоЕ) — 30% от первоначального повреждения в радиусе двух метров от точки удара, у B есть шанс крита (20% на х1,5 урон), а C иногда стреляет мимо (15% шанс промахнуться).

Начнем с простого — оружие C. При возможности промаха, равной 15%, мы наносим 100% урона 85% времени и 0% урона 15% времени. У него появляется следующий модификатор атаки для его eDPS:

● Модификатор оружия C = 100% * 85% + 0% * 15% = 85%

С оружием B не намного сложнее. С 20% критом на х1,5 урона мы наносим 100% урона 80% времени и 150% урона 20% времени.

А вот С оружием A есть сложности. Ранее мы рассматривали в расчетах прямую линию огня, а теперь появился урон по площади, который покрывает круг радиусом 2 м вокруг точки удара. В целях аппроксимации и упрощения мы можем предположить, что до сих пор оцениваем ситуацию 1v1, и пренебречь уроном за пределами прямой линии, и вот почему — мы точно не знаем, как сражаются игроки, и нам неизвестны другие параметры, которые могут сделать расчет более точным.

АоЕ и дистанция теперь составляют по два метра, значит прямая (эффективная) зона поражения получается равной четырём метрам, и оружие A тогда наносит 130% урона на дистанции до двух метров и 30% урона на дистанции от двух до четырёх метров.

Зная это, мы можем пересчитать дистанционную эффективность C, а не вводить новый модификатор атаки, как мы это делали для A и B.

Визуализация eDPS оружия A с AoE

Формула теперь выглядит так:

● Дистанционная эффективность оружия C = (2 м/20 м) * 130% + (2 м/20 м) * 30% + (16 м/20 м) * 0% = 16%

Посмотрим, что получилось:

Новый eDPS оружия = DPS * дистанционная эффективность * модификатор атаки

● Оружие A: 10000 DPS * 16% = 1600 eDPS

● Оружие B: 2000 DPS * 50% * 110% = 1100 eDPS

● Оружие C: 1000 DPS * 100% * 80% = 800 eDPS

Дальше как обычно. Скорректируем DPS через урон, чтобы получить 1000 еDPS для каждого оружия с учетом всех параметров. Оружие A теперь наносит 6250, B — 909, а C — 312,5 урона. И тогда:

● Оружие A: 6250 DPS * 16% = 1000 eDPS

● Оружие B: 1818 DPS * 50% * 110% = 1000 eDPS

● Оружие C: 1250 DPS * 80% = 1000 eDPS

На закуску

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

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

Вот почему, помимо математики, существует другой полезный инструмент, который геймдизайнеру следует использовать для балансирования игры — статистика.

После деплоя контента, который был сбалансирован расчетами, нужно отслеживать все важные средние и пиковые показатели, чтобы понимать, каков контент в реальной игре. Например, отслеживать средний урон от различного оружия, K/D в зависимости от оружия, число спавнов и другие параметры, а затем вносить дальнейшие коррективы по мере необходимости. Например, еще один способ оценки вклада АoЕ-оружия — можно собрать статистику: сколько противников в среднем игрок с оружием A задевает уроном по площади в бою и учесть это в расчете.

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

#геймдизайн

Популярные материалы
Показать еще
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

Прямой эфир

Узнавайте первым важные новости

Подписаться