Баланс боевой системы на примере Slash Polygon
Когда вы создаете игру, в которой присутствует боевая система, напрашивается вопрос о том, сколько урона будет наносить оружие, сколько вреда будут гасить доспехи, как это корректно посчитать и распределить в прогрессии.
Мне бы хотелось поделиться своими наработками и размышлениями на эту тему, а также представить инструменты, которыми я пользуюсь при создании игрового баланса.
Инструменты
Лучший друг любого геймдизайнера - таблицы. Google Sheets, Microsoft Excel, Apple Numbers - все это инструменты для математического представления вашего видения прогрессии и формул расчетов игрового баланса.
Базовые правила боя
Прежде чем мы перейдем к составлению таблиц, необходимо определиться с основными моментами. Какие принципы будут использоваться при расчете урона? Какие будут виды урона и почему?
Итак, основные базисы:
- 4 класса брони: косметическая, легкая, средняя, тяжелая.
- 3 типа урона: колющий, режущий, рубящий.
- 3 типа защиты: vs колющий, vs режущий, vs рубящий.
- Каждый доспех обладает всеми 3-мя типами защиты.
- Каждое оружие обладает всеми 3-мя типами урона.
- Каждый класс брони (кроме косметики) обладает как минимум 1 сильным преимуществом против 1 типа урона.
- Каждое оружие обладает явным лидирующим типом урона.
- Неэффективная защита брони не дает явного преимущества урону (бонуса от опр. вида урона), но дает меньше защиты от него соответственно.
- Формула гашения урона за ед. брони: 1 - ((0.052 × защита) ÷ (0.9 + 0.048 × |защита|)).
- Прогрессия эффективности брони должна быть выстроена таким образом, чтобы в начале игрок чувствовал разницу примитивно - надел доспех тяжелее - защита стала ощутимее. На поздних этапах должна быть важна комбинация против определенного типа урона.
Пример оружия: Двуручный меч будет наносить 3/6/2 урона колющим, режущим и рубящим типами урона соответственно. Суммарный урон будет равен 11.
Пример доспеха: Тяжелая кираса будет гасить 10/10/2% урона от колющего, режущего и рубящего типа урона соответственно.
Таблица игровых констант и коэффициентов
Для того, чтобы автоматизировать последующую работу с таблицами, необходимо оформить базовые правила боя в табличном виде, подкрепив их модификаторами.
Объяснение:
- Каждый эффективный слот персонажа имеет модификатор, на который умножается расчетное значение. Например если базовое значение брони на предмете 10, то для шлема (слот head) значение будет = 6.
- Каждый эффективный слот влияет на модификатор скорости передвижения в рамках здравого смысла. Так, например доспехи будут сильнее аффектить скорость передвижения, в то время как шлем будет это делать с пониженным вполовину значением.
- Слот Mob - виртуальный и нужен для расчета значений NPC.
Объяснение:
- Каждый класс брони имеет 3 значения защиты против урона и базовый расчетный модификатор замедления персонажа.
- Пример: Класс брони Heavy имеет 2 эффективные позиции защиты и 1 неэффективную (модификаторы защиты 1.5 от колющего и режущего, но 0.5 от рубящего).
- Пробелы между столбцами нужны для функции Google Sheet - LOOKUP (поиск значения по типу) для дальнейшей работы.
Самый главный коэф.
Для того, чтобы не придумывать каждый раз какие-то значения используется базовый расчетный коэффициент, который я обозвал в честь значения уровня экипировки в World of Warcraft - iLevel. За единицу уровня предмета мы будет умножать базовое значение на коэф. (1+iLevel) формируя прогрессию. Главное - определить границы, в рамках которых эти значения будут жить для разной классификации предметов.
Пример: Уровень предмета Необычный варьируется от 20 до 29. Таким образом при придумывании какого-то либо нового предмета - я должен ориентироваться на эти значения, чтобы соблюдался баланс качества экипировки.
Cводный баланс экипировки
Перейдем к самому интересному - созданию экипировки в таблице.
Объяснения:
- Все, что выкрашено в цвет использует формулу, основывающуюся на базовой величине (указанной в самом верху) и рассчитывающую свое значение исходя из заданных параметров (Slot, Type, iLevel).
- Все предыдущие модификаторы используются в расчете через функцию LOOKUP и поиск значения в соответствующей колонке. Так, например, значения защиты у шлема автоматически домнажаются на 0.6, так как в поле Slot написано head.
- Суммарный абсорб брони дает представления сколько урона от среднего оружия будет гасить данный предмет экипировки.
Таким образом мы можем просто выдумывать различные названия, сшивать их с визуалом и выставлять значения в пределах заданных границ, создавая зависимости, которые игрок почувствует уже ближе к мета-геймплею.
В заключении о прогрессии
Экипировка в Slash Polygon прокачивается и имеет 5 уровней. Для расчет прогрессии используется отдельная таблица.
Объяснения:
- Не путайте уровень предмета и iLevel, это разные величины.
- 1 уровень предмета это 10 iLevel.
- Armor ID - это место для ввода идентификатора предмета из предыдущей таблицы. Все остальное заполняется автоматически.
- В среднем у каждого предмета на данный момент по 5 уровней прокачки, но как вы понимаете, можно сделать хоть 10000.
Резюме
Собственно, резюмирую свои рекомендации:
- Используйте таблицы для наглядного представления баланса игры.
- Используйте таблицу модификаторов и функцию LOOKUP в сводном балансе, чтобы ускорить свою работу с огромным количеством контента.
- Минусом функции LOOKUP является требование обязательной сортировки по А-Я для таблиц, в которых происходит поиск.
- Документируйте свою работу, иначе через 2 месяца перерыва ничего не поймете.
- Для расчета баланса оружия используется похожий принцип, с некоторыми дополнениями, но об этом в следующей статье.
А что вы используете для балансировки игр? Быть может баланс-на-глаз (что, кстати называется интуитивный баланс)? Расскажите о своем опыте, мне интересно.
Смотрите также:
Комментарии
Здесь еще никто не оставил комментарий
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]