Roblox — Прокачка персонажа — Character leveling

Автор: | 22 февраля, 2025
Поделиться...

Эта тема будет из разряда теории. Даже так — беглой теории о балансировке игры.

Начнём с простого — прокачка персонажа это увеличение его базовых характеристик. За базовые характеристики обычно принимаются четыре варианта: сила, ловкость, выносливость и интеллект. Дополнительно выделяется основная характеристика. Разница обычно лишь в том, что основная характеристика прокачивается быстрее остальных. Вторая вариация, что основная характеристика оказывает большее влияние на персонажа. Либо оба этих варианта.

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

И есть третий тип характеристик — навыки, например: рубка леса, добыча руды, скорость строительства, алхимия, садовничество и т.д. и т.п..

Сама же прокачка делится на два вида — активная и пассивная. При активной прокачке игрок производит какие-то действия чтобы прокачать определённый параметр. Например лупит манекен для увеличения силы, бегает на тренажёре для увеличения скорости… При пассивной же получаем усиление характеристик от выполнения не характерных, точнее обыденных действий. Примеры: рубим лес — увеличивается сила, бежим по заданию из А в Б — увеличивается выносливость, занимаемся рыбалкой — увеличивается ловкость, читаем книжки — увеличиваем интеллект.

Что из этого получается? Базовые характеристики влияют на второстепенные усиливая их, а навыки прокачиваются от второстепенных и влияют на базовые прокачивая их. Т.е. получаем любовный треугольник. Есть только один нюансик, зачастую, при повышении уровня у игрока есть возможность поднять одну или несколько базовых характеристик (или нет — основная +2, остальные базовые +1). На все остальные характеристики у него нет непосредственного влияния.

Коэффициенты — наше всё. Мы используем их везде. Чтобы посчитать сколько у нас будет здоровья в зависимости от силы и выносливости или чтобы определить сколько урона мы можем заблокировать от них же, но уже с другими коэффициентами. А физический урон? Он уже зависит от трёх характеристик и как следствие нужны три коэффициента. И так далее и тому подобное. И это мы ещё не учитывали во что одеты, под какими бафами и дэбафами находимся… Страшное дело!

Испугались? Ну тогда перейдём к «простому» — поднятие уровня игрока. Тут «элементарно» — уровень игрока зависит от полученного опыта и стартового значения. За стартовое значение, почти всегда, берётся единица. Т.е. любой игрок начинает игру с первым уровнем. Далее получаем опыт и на его основе поднимаем уровень.

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

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

С таблицей примерно разобрались. Второй же вариант — использование формул.

-- не забываем что можем считать в обе стороны, просто меняя опыт и уровень местами

-- линейный вариант
опыт = уровень * 100 + 1 -- (y = Ax + B)

-- квадратичный вариант
опыт = уровень^2 + уровень * 100 + 1 -- (y = Ax^2 + Bx + C)

-- тригонометрические - с применением синусов, косинусов, тангенсов и т.д., 
-- алгебраические - с логарифмами, интегралами, пределами и т.д. и т.п.

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

Какой же выход? Мной найден компромисс. Подбираю подходящую формулу и значения из неё переношу в таблицу. Допустим первые 50 значений. Т.е. у нас таблица задаёт прокачку первых 50 уровней. Соответственно мы можем менять значения в таблице на своё усмотрение, тем самым замедляя или ускоряя прокачку на нужном этапе. При достижении же 50 уровня, в дело вступает наша изначальная формула. Для всех значений вне таблицы, т.е. от 51 и выше, мы получаем значения из формулы. Единственное за чем нам нужно будет проследить, это чтобы значение по формуле по последнему в таблице (50), было хотя бы примерно равным таблице.

Если вспомнить про тему с бафами и дэбафами, то там основная проблема возникает с прибавлением значений к малым числам. А здесь ведь у нас то же самое! И как быть в данном случае? А мы можем просто увеличить стартовое число.. скажем до 100 или 1000 вместо 1 когда будем рассчитывать очередное значение. В принципе, мы можем и сразу его принять как стартовый уровень 1000, но показывать игроку мы будем значение «уровень-999». Как следствие и все остальные, отображаемые значение будем уменьшать в 1000 раз, отбрасывая всё что будет после запятой или оставляя округление до десятых или сотых, но никак не тысячных. По такому же принципы можем рассчитывать и изменение базовых характеристик. А можем.. и не выдумывать ничего, а просто подобрать нужную формулу и переписать из неё значения в нашу таблицу. Например будем считать опыт для лэвел-апа — чтобы подняться с 1 до 2 уровня нам нужно получить 200 опыта, а вот со 2 на 3-ий уже 500! Т.е. с каждым новым уровнем нам будет требоваться получить всё больше и больше опыта, чтобы апнуться.

Стоит учитывать, что окружение так же будет усложняться и опыта нам за каждого убитого моба будут отсыпать всё больше и больше. Отсюда следует что нужно подбирать формулу так, чтобы у нас была хотя бы линейная зависимость затраченного времени на поднятия уровня на каждом этапе. В идеале, нам нужно подбирать формулы по числу убитых за единицу времени. Например, на 1 уровне мы должны убить 10 волков 1 уровня, чтобы стать вторым уровнем. На это мы затратим 5 минут времени. Значит со второго до третьего уровня мы должны потратить не меньше 10 минут времени (плюс 5 минут за уровень), убивая гоблинов 2 уровня и волков 1 уровня. И так далее. Но что это значит? А это значит что мы должны либо увеличивать количество необходимого опыта для поднятия уровня, либо уменьшать количество опыта получаемого за мобов ниже нас уровнем. Занятно? Сложно? Скажу по своему опыту, балансировка игры весьма и весьма сложная штука. Ведь тут мы пока что рассматривали самое простое — увеличение уровня от опыта в условном вакууме.

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


Поделиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *