Игровой баланс #2 — Манжеты Гейм-дизайнера
1-VOwXjGsK8xK8kGuIYjxqzA

Игровой баланс #2

Константы и прогрессии

Начало работы

Итак. Все, что мы хотим от таблички, я делю на несколько элементов:

  • Константы
  • Прогрессии
  • Баланс эффективности
  • Модели баланса и экономики

Будем разбираться по порядку.

Константы

Это значения, которые известны заранее или задаются “с потолка” (руководствуясь логикой и здравым смыслом).
Например: мы делаем простой мобильный баттлер вроде Blood Brothers. И хотим, чтобы бои длились +-1 минуту. Это и будет нашей константой.

Все остальные значения выводятся из констант.
Зная длительность боя, мы можем представить параметры карт-юнитов, чтобы они бились ровно минуту.
Допустим, все атаки занимают 5 секунд, юниты атакуют по очереди, значит, среднее здоровье должно быть = 60/(5*2) = в 6 раз больше среднего урона.
В реальности все немного сложнее, но пока остановимся на этом.

Здесь мы должны задуматься: а почему не наоборот?
Можно же константой взять «отношение здоровья к атаке», а из нее вывести «длительность боя».
Ответ прост: «отношение здоровья» нам неважно — само по себе оно почти не влияет на геймплей. Зато в мобильной игре важна продолжительность сессии и длительность боя.
Задав константу, мы будем уверены, что она останется под контролем и не поменяется в расчетах.

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

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

Например: за победу дается золото, и есть два режима игры — PvP и Кампания. Мы должны быть уверены, что игроку интересны оба режима, но в PvP игроки имеют 40–60% побед, а в Кампании доля побед близка к 100%. Чтобы PvP не игнорировали — награда за него должна быть +- в 1.5 раза выше.
В константы можно добавить либо процент побед для каждого режима, либо множитель, либо доход на время, общий для всех режимов.

Не пытайтесь выписать все константы сразу — в процессе работы они в любом случае будут меняться и пополняться.
Пока достаточно понимания.

Прогрессия

Это просто последовательность чисел.
При расчете баланса такие последовательности составляют львиную долю работы: повышается уровень, растет сила отряда, награда за победу. Все это — разные прогрессии.
Построив прогрессии, мы будем выводить из них все значения игры: параметры юнитов, экономические показатели, таблицы опыта и наград.

Очевидный вопрос: откуда брать цифры для прогрессии? Для ответа надо понять, что влияет на цифры.
Возьмем прогрессию опыта (который необходим для получения нового уровня): она определяет, сколько времени потратит игрок на получение новых уровней.
И лучше, если мы сразу зададим максимальный уровень и время, которое нужно для прохождения игры (или “выедание” контента).
А дальше, зная, как игрок зарабатывает опыт (всегда Х ед. за час или число растет), мы можем составить первую прогрессию.
Она будет приблизительной, и, скорее всего, в дальнейшем что-то заставит нас внести изменения. Но пока нам хватит.

Возьмем более сложный пример: прогрессию самых важных значений.

Что в нашей игре самое важное?
В ситилбилдере: строения и их эффективность.
В RPG: параметры прокачки героя и шмоток.
Для нашего баттлера логично взять силу карт от первого до последнего уровня. Если в нем — как в любом другом баттлере — карты делятся по «типам редкости», то прогрессия должна быть у каждого типа редкости.

Как превратить “силу” в реальные параметры, мы разберем потом. А пока определимся, на что влияет сила карт.

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

Затем прикинем, насколько быстрым должен быть рост этих значений. Как сильно 8-й уровень отличается от 9-го? А 79-й от 80-го?

Если наша прогрессия будет экспонентой — мы рискуем получить огромный разрыв между высокоуровневыми игроками (один 79-й валит четырех 78-х). Но это не страшно, если между ними — недели и месяцы плавной прокачки. Не забывайте прикидывать время, которое нужно для достижения этих значений.
С другой стороны, если взять “медленную” прогрессию, игроки не прочувствуют профит и пафос нового контента.

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

Типы прогрессии

Вы наверняка слышали про разные прогрессии: арифметическая, геометрическая, ряд Фибоначчи…

На вопрос «какую выбрать?» есть простой и сложный ответ.

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

(на примере ряда Фибоначчи)

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

Я рекомендую делать так: каждое значение прогрессии вычисляется не из предыдущего числа, а из своего порядкового номера (в игре это скорее всего уровень — с ним удобно работать).
Этот уровень сначала возводится в степень X, потом умножается на Y. Подгоняя X и Y мы заручимся ровно теми крайними значениями и скоростью роста, которые нам нужны.
При необходимости формулу легко поменять.
Вот пример трех таких прогрессий с разной скоростью роста:

Легко, гибко, понятно.

Итак, наша прогрессия готова.
Осталось несколько нюансов.

Базовая прогрессия

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

Чтобы упрочнить связи и целостность баланса, я рекомендую использовать одну прогрессию для всех связанных расчетов.
Как это выглядит: сначала мы делаем прогрессию для самых важных значений. А сталкиваясь со связанной задачей — например, прогрессией доходов (а они, как правило, прямо связаны с важными значениями) — применяем к каждому значению базовой прогрессии подходящий множитель. У нас получается производная прогрессия, которая зависит от базовой.

Особой причины использовать базовую прогрессию нет, можно для каждой задачи делать свою.
Но если в игре много связей, базовая прогрессия поможет снизить путаницу.
Если в производной должна быть другая скорость роста — вместо множителя можно возводить значения в степень.
Как это выглядит:

Круглые значения

Последняя мелочь.
С некоторыми значениями игрок часто сталкивается и долго их наблюдает: например, опыт до уровня.
Хорошо, когда такие значения круглые и красивые: 2500 вместо 2468, и т.д.

Для этого значения можно заполнять вручную или округлять до кратного (MROUND):

Столбец «Проверка» смотрит, чтобы текущее требование к опыту было больше предыдущего — а то с округлением всякое бывает.

____________

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

В следующем посте мы научимся выводить реальные параметры из этих чисел:

Краткое содержание цикла про баланс:
— Введение и подготовка к работе
— Начало работы: константы и прогрессии
— Боевой баланс или расчет эффективности
— Матмодели и простая экономика
— Комплексная экономика: поведение и цикл
— Монетизация и экономика
— Дополнительно: тервер, кривая обучения, заключение

Илья Туменко
Илья Туменко
Гейм-дизайнер, индоктритатор. Работал в разных компаниях над разными играми, теперь пилю свои проекты, пишу в Манжеты и в свой блог.