Игровой баланс жанра Tower Defense на примере игры Crush Link TD

В марте 2023 года на Google Play вышла первая игра инди-команды 4TEAMGB – Crush Link TD. Crush Link TD – это необычная Tower Defense стратегия с новыми механиками в виртуальном сеттинге об онлайн-знакомствах.

В этой статье я расскажу, как строился баланс в нашей игре. Начну с дисклеймера: для команды это была первая игра, а для меня как для ведущего геймдизайнера – это был первый опыт создания баланса; поэтому в основу создания баланса легли так называемый common sense, логика, мой опыт игрока в жанре TD и знания моделирования в Excel.

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

1. Общие допущения баланса

2. Баланс игровых сущностей (башен и мобов)

3. Баланс уровней

4. Баланс meta-геймплея

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

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

<i>Взаимозависимость балансовых таблиц</i>
Взаимозависимость балансовых таблиц

Перед этим должен ввести читателя в контекст игры для понимания терминологии. Задача Игрока — защитить Базу, не допуская попадания спама во входящие, и строить башни, чтобы удалить спам. Поэтому у нас нет монстров или врагов, а есть спам. Мы никого не убиваем и не уничтожаем, но удаляем спам.

Новой механикой является изменение пути спама, конфигурация уровня меняется по ходу волн спама и Игроку приходится менять стратегию защиты. Внутри команды мы назвали это «поворот перекрестков», а вдохновили на эту идею вращающиеся лестницы в Хогвартсе.

В игре есть две валюты: одна на уровнях как ресурс для строительства и улучшений башен, а вторая – дефицитная – для meta-геймплея.

Общие допущения баланса

<i>Общие допущения баланса</i>
Общие допущения баланса

Общие допущения касаются core-геймплея и экономики. Балансовая таблица с основными условиями содержит следующую информацию:

1. Wave countdown — кулдаун ожидания новой волны или сколько времени проходит между удалением последнего спама из предыдущей волны и началом новой волны

2. Base HP — очки жизни Базы

3. Wave early call — количество рейтинга, начисляемого Игроку за ранний вызов волны

4. First turn — количество рейтинга, начисляемого Игроку за первый поворот перекрестка. Это количество одинаково для всех уровней и равно стоимости постройки трех башен, с которыми Игрок начинает игру

5. Upgrade ratio — коэффициент увеличения стоимости улучшения башен (относительно стоимости предыдущего уровня)

6. Selling ratio — коэффициент стоимости продажи башни (относительно суммы постройки и всех улучшений)

7. Dopamine ratio — коэффициент количества дофамина от спама (относительно количества рейтинга от удаления спама)

Причем первая волна на каждом уровне вызывается Игроком, кулдауна нет и за ее вызов не начисляются очки рейтинга. Время перед первой волной дается Игроку, чтобы ознакомиться с конфигурацией уровня, продумать стратегию защиты Базы и построить башни. Важно заметить, что продажа башен до запуска первой волны возвращает полную стоимость строительства и улучшений. Это позволяет Игроку не перезапускать уровень, если он решит изменить стратегию защиты.

<i>План ввода контента (отрывок)</i>
План ввода контента (отрывок)

Выше приведена часть контент плана по вводу в игру спама. План ввода в игру контента также относится к общим допущениям, так как влияет на то, когда и какие игровые сущности и механики появляются. С одной стороны это необходимо для баланса кривых интереса и сложности, с другой – для баланса уровней, о чем поговорим ниже. В нашем случае план контента также служил основой работы для нарративного дизайна, так как в Crush Link TD присутствует нарративная составляющая.

Баланс игровых сущностей

Баланс игровых сущностей логично делится на атакующих и защищающих. В этой статье я сфокусируюсь на атакующих.

Для начала нужно выделить основные характеристики:

1. Тип атаки. Ближний бой, дальний бой и прочее. Под прочим я подразумеваю, что спам не имеет атаку или сносит защитников при контакте, то есть нет величины атаки для сравнения

2. Тип урона. Физический, лазерный, термический и электрический. Это разнообразит боевку, так как мы вводим характеристику «защита»

3. Защита. Спам имеет сопротивляемость, уязвимость или нейтрален к типам урона. Если уязвим, то урон умножается на коэффициент 1,2, если имеет сопротивляемость, то коэффициент равен 0,8

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

Теперь можно переходить к спаму.

<i>Общая таблица со статами спама (отрывок)</i>
Общая таблица со статами спама (отрывок)

Общая таблица со статами спама делится на три части: общая информация, что будет использоваться для баланса уровней, информация по боевке и по защите.

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

Для сравнения и балансирования спама нужно выбрать «мерило», базовую единицу, с которой будут сравниваться остальные. За эту единицу я принял базовый спам – паучка.

<i>Сравнительная таблица статов спама (отрывок)</i>
Сравнительная таблица статов спама (отрывок)

Задача этой таблицы – сбалансировать награду за удаление спама и сложность удаления. Другими словами, сделать так, чтобы награда за удаление спама отражала степень опасности спама.

Для этого я сравниваю награду за удаление спама и еще три стата по отношению к базовой единице: очки жизни, DPS и скорость. Это общие и самые важные показатели, так как влияют на то, сколько сил необходимо потратить на удаление спама, насколько эффективно спам сносит защитников и как быстро движется к Базе.

Далее рассчитываю коэффициент опасности спама. Я придаю веса статам спама: 2 для очков жизни, 1 для DPS и 2 для скорости. DPS имеет меньший вес, так как Игрок может играть без башен с защитниками, а некоторый спам не имеет этот параметр вовсе. Очки жизни я корректирую на индекс здоровья, о котором писал выше. В итоге рассчитываю среднюю взвешенную. С одной стороны это довольно субъективный расчет, с другой – в нем заложена логика. После этого сравниваю коэффициент награды и расчетный коэффициент сложности. Если у конкретного вида спама эти коэффициенты сильно различаются, то я вношу правки в общую таблицу статов. Под правки может попасть награда за удаление спама или определённые статы. Для принятия решения я анализирую, как правки влияют на баланс в проверочных таблицах.

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

О балансе башен скажу только, что логика аналогичная, но таблицы сложнее в силу большего количества и разнообразия статов. Усиление башен по уровням прокачки коррелирует со стоимостью прокачки.

Баланс уровней

Баланс уровней имеет двухярусную структуру: это локальный ярус каждого уровня и ярус «вид сверху» для анализа прогрессии по уровням и основных показателей в динамике. Эти ярусы взаимозависимы и передают друг другу информацию.

Давайте рассмотрим локальный ярус на примере четвертого уровня в игре. Начнем с таблицы с общей информацией.

<i>Таблица с общей информацией на уровне</i>
Таблица с общей информацией на уровне

1. Start rating – количество рейтинга, что игрок получает в начале уровня. Количество корректируется по результатам тестов баланса

2. Rating total – максимальное количество рейтинга, которое Игрок может получить на уровне. Здесь важно уточнить, что есть диапазон возможных значений, так как Игрок может не вызвать заранее каждую волну или не удалить весь спам. Тем не менее это важный показатель, что помогает сбалансировать экономику в таблицах, о которых расскажу ниже

3. Dopamine – расчетный показатель, что в реальности также может отклоняться, если пропустить спам на Базу

4. Tower spots – количество мест для строительства башен. Для баланса экономики важно понимать общее количество таких мест и то количество, которое остается на карте уровня после последнего поворота перекрестка

<i>Сценарий уровня (отрывок)</i>
Сценарий уровня (отрывок)

Сценарий уровня – основа для расчётов баланса в игре. Здесь содержится информация, какой спам, когда, из какого выхода и в каком количестве появится на уровне, а также когда происходит поворот перекрестков. Тут происходят расчеты, которые далее агрегируются и переносятся в проверочные таблицы, что помогают увидеть уязвимые места в балансе.

Сценарий волн создается эмпирически. Сначала я проставляю прогнозные значения по составу и количеству волн, далее корректирую эти значения, исходя из агрегированной информации в проверочных таблицах. После этого вношу информацию в движок и на основании тестов делаю корректировки прямо в движке. Эти корректировки я отражаю в таблицах, чтобы удостоверится, что они не привели к нарушениям в балансе в других местах.

Хочу отметить, что в таблицах нет информации, в каком порядке и через какой промежуток времени группы спама выходят в рамках одной волны. Это настраивается в движке по результатам тестов. Я играю каждый уровень без преувеличения сотню раз, чтобы сценарий волн создавал вызовы для Игрока, но не был непроходимым.

В крайней правой колонке вы можете увидеть код. Этот код показывает, из какого выхода вышла группа спама и по какому пути пошла. Это нужно из-за нашей механики изменения пути. Тут придется слегка коснуться темы левел-дизайна в нашей игре на примере первого уровня для простоты. На первом уровне есть только один вход, но путей два. В зависимости от положения перекрестка спам пойдет по пути 1-1 или 1-2. Что это дает балансу? Мне хотелось избежать ситуаций, когда внимание Игрока приковано к одному месту на карте, и сделать игру интереснее, чтобы Игрок испытывал сбалансированное давление на всех участках карты. В противном случае можно было бы построить сильную защиты в одном месте и практически не обращать внимание и не тратить ресурсы на большей части игрового пространства.

<i>Схема первого уровня</i>
Схема первого уровня

Перейдем к проверочным таблицам на уровне.

<i>Тест экономического баланса (отрывок)</i>
Тест экономического баланса (отрывок)

Первый тест – это тест экономического баланса. Проверяю, достаточно ли Игрок сможет получить ресурсов за удаление спама, чтобы строить и улучшать башни. По аналогии с рейтингом здесь мы видим диапазон значений, сколько башен и какого уровня можно построить на полученный рейтинг. Сравниваю эти цифры с количеством мест для башен на уровне из таблицы с общей информацией.

<i>Тест баланса сценария уровня</i>
Тест баланса сценария уровня

Второй тест – это тест баланса сценария уровня. Как писал выше, идея заключалась в том, чтобы опасность шла с разных сторон, а не имела доминантного пути, где Игрок смог бы концентрировать защиту. На этом снимке видно, что на четвертом уровне все пути уравновешены по количеству спама, генерации рейтинга и по «живой массе» в плане очков жизни спама. При анализе этой таблицы нужно сверяться с левел-дизайном уровня. Так как на первый взгляд экстремум может оказаться логическим результатом плана уровня, например новый выход появляется на последней волне. Другими словами, задача не в том, чтобы добиться похожих цифр, а сбалансировать напряжение для Игрока на всех путях, учитывая конфигурацию конкретного уровня.

<i>Тест диверсификации спама</i>
Тест диверсификации спама

Последний тест – это удостовериться, что в сценарии учтено разнообразие спама по трем параметрам: количество, награда за удаление и «живой массе». Да-да, в Crush Link TD мы боремся за инклюзивность даже спама 😊. Эта и предыдущая таблицы также помогают оценить влияние в изменении статов спама на баланс на уровнях.

<i>График кривых уровня</i>
График кривых уровня

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

Информация из таблиц локального уровня переносится в общую таблицу «вид сверху». В основном меня интересовало увидеть динамику дефицитной валюты – дофамина, но все ключевые параметры также показаны отдельно по каждому уровню и в динамике накопленным итогом. Давайте посмотрим, как эта таблица выглядит.

<i>Сводная таблица по уровням (отрывок)</i>
Сводная таблица по уровням (отрывок)

Здесь я могу менять количество стартового рейтинга на уровнях. Далее учитываю все источники дофамина, которые открываются игроку по ходу прохождения уровней, и намеренно разделяю накопленные значения от core-геймплея и meta-геймплея. По результатам внутренних тестов я внес в таблицу средние значения времени прохождения уровней – это ориентир и база для расчета, сколько часов геймплея будет в игре, а также маркер, нужно ли где-то внести правки в сценарий, чтобы ускорить или замедлить прохождение.

Может показаться не ясным, зачем нужны накопленные значения волн и спама – это нужно для принятия решений по классическим ачивкам типа «выживи Х волн» или «удали Y спама».

Баланс meta-геймплея

Здесь я имею в виду баланс прокачки башен, который предусмотрен в Меню Прошивок, баланс талантов, которые Игрок может купить в меню Древа Обновлений, баланс получения ачивок и баланс специальных абилок Игрока.

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

Вывод

Какие можно сделать выводы, исходя из структуры баланса в игре Crush Link TD?

1. Декомпозируйте каждый игровой элемент и определите характеристики

2. Создайте многоуровневую структуру таблиц: локальный и глобальный уровни

3. Создайте рабочую структуру взаимосвязи и обмена данными между уровнями таблиц

4. Создайте систему проверочных таблиц и маркеров, выявляющих экстремумы и ошибки

5. Выберите базовую единицу, по отношению к которой будете выстраивать прогрессию или сравнивать игровые сущности

6. Тестируйте и вносите правки

Чтобы я изменил в работе с балансом? Сейчас данные и изменения в балансе вносятся руками в движке, это архаичная практика. Хорошо было бы на берегу договориться с разработчиком о формате автоматического переноса данных. Например, с помощью JSON. То есть после каждого изменения, я мог бы обновить JSON файл, передать его разработчику, который бы одним щелчком обновил данные в движке. Но это, как говорится, lesson learned.

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

Благодарю, что прочитали до конца. Если остались вопросы, пишите пожалуйста в комментариях.

1919
8 комментариев

а потом приходит человек из отдела внутриигровой монетизации и проводит болтом по всему, что написано выше

1
Ответить

Чтобы этого избежать, у нас игра премиум и болтом некому проводить)

2
Ответить

Не хватает в начале статьи видео с геймплеем.

1
Ответить

Спасибо за совет! Заменил картинку на наши геймплейный видос.

1
Ответить

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

Ответить

Привет!
Баланс в игре - это не стандартная методичка, а формулы - это лишь логика, которая исходит из архитерктуры баланса, которую ты создал для конкретного проекта - то есть для конкретных механик и игровых сущностей.
Задачей статьи было показать на примере логику мышления при создании структуры баланса игры, зависимость между балансовыми таблицами и как я подошел к проверке и тестированию баланса.

1
Ответить