Формулы опыта
Часто при самом начале расчета баланса приходится собирать одну из первых прогрессий -- прогрессию опыта игрока или его уровней. Об этом и поговорим :)
У меня, как правило, с этим возникает проблема - хочется использовать лучшую формулу для этого, наиболее подходящую под выбранную игру, жанр. Да и, откровенно говоря, зачастую я просто не помню тех вариантов, которые использовал ранее)
Поэтому ниже я решил собрать пачку различных вариантов формул со ссылками на примеры расчетов. Чтобы самому иметь под рукой подсказу, и, если понадобилось, вы сами смогли на их основе собрать для себя подходящий вариант.
Зачем вообще считать опыт?
В-целом, можно обойтись и без него. Более того, есть масса ставших классическими игр, в которых уровневых прогрессий у персонажей нет. Например Mario, Prince of Persia (самый первый), Tanks, Doom и многие другие.
Но... В этих играх они особо и не нужны. Игрок ощущает прогресс в игре по мере смены игровых локаций, а не роста уровней персонажа.
Если рассматривать игры более сложные в плане количества механик, сохранения прогресса игрока (например, любые RPG, современные adventure игры), то ситуация складывается иначе. Уровни в них выступают общим мерилом силы игрока, а еще - "хлебными крошками", майлстоунами или индикаторами ближайших целей, подсказывающими, что у персонажа есть развитие к которому можно стремиться.
С точки зрения разработки, через выдачу уровней игрока можно легко регламентировать выдачу новых игровых механик.
Например, в Lost Light доступ к большей части контента осуществляется именно через получение новых уровней игроком:
- Прокачка комнат
- Доступ к новым пушкам, экипировке, расходникам
- Доступ к обвесу пушек и крутым патронам
и т.д... Хочешь ваншотить, используя особый патрон - будь добр качаться.
Благодаря такому подходу разработчики могут выдавать контент плавно и регламентировано, в строго запланированные моменты, не перегружая игрока и мотивируя его оставаться в игре.
А еще, зная максимальный уровень в игре, динамику выдачи опыта в момент времени, мы можем посчитать и спланировать время, за которое игрок выест весь игровой контент. В среднем, конечно... Для f2p игр это пипец как важно.
Существует множество вариантов расчета опыта. Попробуем с чего-то простого.
Поехали
Супер-простой вариант
Такой прогрессии и строится просто. Берем значение опыта на предыдущем уровне, умножаем на какое-то, удобное для нас, константное значение. Повторяем нужное количество раз вплоть до крайнего уровня.
Такой вариант подходит для начального этапа работы с балансом, но может быть быстро заменен на иной, более гибкий. Дело в том, что эта формула подходит для достаточно небольшого массива уровней. Если в игре уровней под сотню, то последние станут для игрока суровым испытанием, т.к. значения требуемого опыта для получения уровня будут неадекватно высокими.
Чуть сложнее
Эта формула гибче в плане настройки и дает не настолько сильно уходящую вверх кривую.
Предположим, что значение a = 300, а b = 0.1. Тогда получим следующую прогрессию:
Если выразить ее в графике, то увидим следующую картину:
Такой прогрессии хватает, чтобы заложить основу для будущего баланса, но, скорее всего, со временем ее придется править. Или подгонять выдачу опыта в квестах, мобах, других механиках.
Пример из в D&D
Формула несколько сложнее и уже использует степенную функцию.
Если выразить ее в графике, то увидим следующую картину:
Как видим, график такой же экспоненциальный, как и в первом варианте формулы. Но формула выходит гибче и позволяет тоньше настраивать кривую.
Почему формула именно такая? Я могу только предполагать ход мыслей авторов игры:
- Игрок должен понимать, что каждый следующий уровень будет сложнее
- Игрок должен потратить длительное время, чтобы получить уровень
- Игрок должен истребить достаточно больше количество мобов и выполнить сколько-то квестов, чтобы получить уровень
Если перечитаете три предыдущих пункта, то заметите, что в них достаточно много неопределенности. Так мы подошли к следующему важному блоку.
Не опытом единым
Сама по себе прогрессия опыта мало что значит - криворукий разработчик может не посмотреть в расчеты и поставить награду за убийство мобов, выполнение квестов такой, что какая-то единичная деятельность игрока будет приводить к получению сразу нескольких уровней. Так, конечно, делать не стоит.
Задача разработчика, по сути, состоит в том, чтобы игрок постоянно рос, повышая свои статы, меняя экипировку на лучшую, исследуя новые миру, но при этом оставался на месте.
В The Division 2 это показано достаточно хорошо: что на 10, что на 30 уровнях игрока уничтожение противников (DPS растет, но время убийства моба не уменьшается), получение новых уровней занимает примерно одинаковое время, хотя в статах и экипировке игрока имеется существенная разница.
Это достигается путем грамотного баланса между требованием по опыту на уровень и опытом, выдаваемым в награду за убийство мобов и выполнение квестов, а так же - механиками адаптивного баланса (когда противники\награды всегда +\- совпадают с прогрессом игрока)
Как посчитать в своей игре?
Для начала нужно понять какие вводные данные у нас есть, ответить на вопросы:
- Для какой ЦА делаем игру? От этого могут зависеть как стартовые параметры персонажа, так и объемы наносимого им урона, так и финальная прогрессия опыта в игре.
- Какой длины у игрока будет стандартная игровая сессия? Ответив на этот вопрос и на вопросы ниже, поймем как долго игрок будет выедать контент и сможем прикинуть как быстро он будет получать доступ к новым механикам.
- Чем в сессии он будет занят? Распределив активности в сессии по долям, поймем игровую динамику: как много квестов за сессию игрок будет выполнять, как много мобов уничтожать
- Как быстро игрок должен получать уровни? Поможет понять моменты выдачи механик.
- Как долго он будет получать финальный уровень? Поймем насколько наш баланс адекватен в плане гринда опыта и, возможно, игровых предметов.
Ответив на вопросы мы можем сформировать ряд тезисов: про динамику получения опыта, игровые активности, максимальный уровень игрока и другие. Всё это поможет нам в финальном расчете опыта.
Зная даже приблизительное количество убиваемых за сессию мобов и выполняемых квестов, а так же - зная расчетное время получения определенного уровня игрока, мы можем вывести значения опыта, выдаваемые за убийство одного определенного моба или выполнение определенного сюжетного квеста.
Нам останется только скорректировать существующую прогрессию опыта, исходя из расчетных значений или создать свою формулу расчета опыта на уровень игрока.
Давайте попробуем это сделать
Предположим, мы делаем сессионный шутер (совсем как The Division ;)), в котором игрок постепенно прогрессирует по уровням, уничтожая злобных мобов.
Определимся с ЦА:
- пусть это будет мужчина 20-30 лет
- занятой настолько, что может позволить играть себе только в короткие перерывы
- европеец - по региональному признаку будем высчитывать объемы чисел (т.е. для японцев я бы поставил 1 000 000 опыта как цель на 20й уровень, а для европеца - 10 000, все дело в разнице менталитетов)
Определимся с геймплеем в рамках сессии игрока:
- длина одной игровой сессии равняется приблизительно 15 минутам (в день у игрока в среднем 2 игровых сессии: утром и вечером)
- 30% времени игрок тратит на менеджмент
- 70% времени тратит на уничтожение мобов (очень кровожадно!)
- за сессию игрок уничтожает 50 мобов в среднем и выполняет 2 квеста
- на убийство одного моба игрок тратит примерно 12 секунд (время сессии / количество убитых мобов * 0.7)
Определимся с тем, как быстро игрок должен получать уровни:
- второй уровень игрок должен получить за первую сессию. Так мы покажем, что игра лояльна к игроку и, возможно, нам удастся проще вовлечь его в игровой процесс.
- последний, сотый уровень, игрок будет фармить 4 дня (с учетом двух сессий в день получается достаточно быстро). Эта цифра - предположительная и мне просто нравится. Вероятно, в реальности она будет больше.
Попробуем использовать степенную функцию для расчета опыта:
Ее нам хватит, чтобы построить базовую прогрессию, от которой уже будем рассчитывать выдаваемый через мобов и квесты опыт.
Рассчитаем выдаваемый на уровень опыт. Для этого, пользуясь тезисами, которые мы зафиксировали выше, совершим простые вычисления. Получим:
Для расчета опыта я использовал следующие формулы:
В формуле расчета опыта за одного моба я ввел еще одну часть - начал выводить корень из уровня, округлять его до ближайшего целого и делить на получившееся значение левую часть формулы.
В моем случае это необходимо, чтобы игрок постепенно начинал чувствовать удлиннение времени получения уровня. Так на первом уровне игрок расчетно получает второй уровень к конце сессии, а чтобы получить последний уровень - ему придется потратить с десяток сессий.
Это достаточно приблизительные расчеты, которые могут помочь в формировании общего баланса. В идеале, после того, как вы собрали такой баланс, его сразу стоит отыграть, проверить и найти рисковые точки, поправить их.
Но, в-целом, для прототипа таких расчетов должно хватить с лихвой...
Спасибо, что дочитали :)
А тут таблица с примерами прогрессий
А у "Пример из в D&D" точно верная формула?
Что-то не получается по ней такой XP таблицы
=500*СТЕПЕНЬ(level;2)-(500*level) - сейчас такая. Что именно не получается?
Да, действительно, нашел ошибку) Поправил в таблицах
Настолько благодарна была за таблицы и примеры расчётов, что зарегалась на DTF, чтобы оставить коммент. Благодарю вас!
Рад))
В пункте "Чуть сложнее" тоже ошибка. Не работает: l_exp = a(lvl-1) + a(lvl-1) * b