Система дропа случайных вещей

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

В старых Зомботронах тоже присутствуют некоторые скрытые механики, о которых игроки никогда не догадываются. Например, если у игрока заканчиваются патроны, то вероятность выпадения патронов из врагов сильно возрастает. Правда это происходит только при одном условии: практически у всех пушек игрока должен быть минимальный запас патронов. А сделано так, потому что на ранних этапах тестирования удалось определить, что одним игрокам резко не хватает патронов, а у других все нормально. Скорее всего проблемы с боезапасом зависят от стиля игры, ну или от общей меткости игрока. Так вот, чтобы игроки, любящие не попадать во врагов, не расстраивались от того, что игра такая скупая на патроны, пришлось реализовать скрытую систему раздачи бонусных патронов. Но, не думайте, что если все время стрелять в «молоко», то игра подкинет бесконечное число дополнительных патронов — этого не случится, и при таком стиле игры так или иначе придется принести себя в жертву.

Но сегодня я вам хочу рассказать не о сокрытых механиках в старых играх, а о редкости вещей в новом Zombotron.

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

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

Но, чем больше экипировки, тем сложнее балансировать игру. Признаюсь, разрабатывая Knighttron, я наступил на множество различных граблей и получил много интересного опыта. В частности, создавая уровни для Knighttron, я постоянно задавался вопросом: какие вещи положить в очередной ящик или сундук. Более того, тут важно было убедиться, чтобы вещи не повторялись часто. ? тем более не было бы такой ситуации, что какая-то вещь существует в базе данных игры, но в игре недоступна, потому что я забыл её положить куда-либо (в итоге так и получилось!). Если честно, то я уже не помню почему я тогда не задумался о системе, которая бы сама заполняла сундуки, возможно у меня хватало других более важных задач, но в случае с новым Zombotron я сразу решил, что все будет иначе.

С самого начала разработки я ввел понятие редкости вещей. Уверен, вы уже сталкивались с этим термином в других играх. Так вот, в моем случае существует четыре вида редкости для вещей: Обычная, Редкая, Эпическая и Легендарная. ? вначале я думал, что редкость будет отражать только ценность вещи, а так же количество модификаторов/бонусов, которые могут быть у той или иной вещи. Но позже, стало очевидно, что редкость несет в себе куда больше скрытой информации, особенно, когда я приступил к реализации автоматической системы заполнения «контейнеров» (под контейнером подразумевается любой игровой объект, обладающий свойством хранить и использовать вещи находящиеся в нем).

Конечно, автоматическая система заполнения «контейнеров» — это очень громко сказано и в реальности все намного проще! При разработке уровней, так или иначе я по прежнему определяю, что будет в том или ином «контейнере», но в этот раз я лично не решаю какая конкретно будет вещь, я определяю только её тип, количество и вероятность дропа. Представим себе сферический сундук в вакууме, который я должен заполнить содержимым, и я ложу в него:

  • 8 случайных монет с вероятностью дропа 70%
  • 3 случайных пачки патронов с вероятностью дропа 60%
  • 1 случайные ботинки с вероятностью дропа 40%

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

Как же это работает!?

Начнем с монет: в игре существует три типа монет: золотые, серебрянные и бронзовые. Я называю их Робины, потому что они имеют форму ромбов и везде обозначаются именно ромбиком, причем, так повелось еще с первых игр. У каждого типа монет своя ценность:

  • Золотой Робин = 50 у.е.;
  • Серебряный Робин = 10 у.е.;
  • Бронзовый Робин = 1 у.е.

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

? так, предположим, что игрок открывает ящик и оттуда должны выпасть наши вещи, таким образом, мы бросаем кубик 8 раз, для каждой монетки от 0.0 до 1.0 и, если выпадает значение от 0.0 до 0.7, то выбрасываем монетку, но какую из трех?

Каждый Робин, как и любая другая вещь, имеет свою редкость:

  • Бронзовый Робин — обычную;
  • Серебряный Робин — эпическую;
  • Золотой Робин — легендарную;

Каждая редкость имеет свою вероятность:

  • Обычная вещь: вероятность 1.00;
  • Редкая вещь: вероятность 0.35;
  • Эпическая вещь: вероятность 0.15;
  • Легендарная вещь: вероятность 0.01

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

длина рулетки (1.36) = Бронзовый (1.00) + Серебряный (0.35) + Золотой (0.01)

Теперь мы бросаем кубик от 0.0 до 1.36 и смотрим, что выпало. Если выпавшее значение от 0.0 до 1.0 — выпадает бронза, если значение от 1.0 до 1.35 — выпадает серебро, ну а если улыбнулась удача и выпало значение от 1.35 до 1.36 — выпадает золото! Причем, при каждом выборе очередной монетки, порядок лотов в рулетке можно менять случайным образом, например так:

длина рулетки (1.36) = Серебряный (0.35) + Золотой (0.01) + Бронзовый (1.00)

Но это уже тонкости реализации. Тесты показали, что с такими коэффициентами вероятности Золотой Робин выпадает в 8-10 случаях из 100.

Монетки выпали, теперь пора дропнуть патроны. В первую очередь для каждой пачки патронов так же будет брошен кубик три раза от 0.0 до 1.0, с целью определить выпадет ли каждый из них. Если выпало значение от 0.0 до 0.6 то патроны выпадают, но какие?

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

Патроны выбросили, теперь самое время решить выпадут ли ботинки и какие ботинки это будут? Опять бросаем кубик от 0.0 до 1.0 и если все планеты в нашей солнечной системе стоят как надо, то определенно выпадет значение от 0.0 до 0.4, а значит нам придется из более чем десятка ботинок выбрать какие-то одни.

Выбор ботинок очень похож на то, как мы выбирали монетки. Нужно выставить все ботинки на одну большую рулетку и хорошенько её крутануть! Где ширина (вероятность) каждой ячейки, в которой стоят ботиночки, должна ровняться редкости каждой из ботинок:

длина рулетки (1.36) = Рыбацкие Сапоги (1.00) + Эпические Калоши (0.35) + Берцы (0.01) + и т.п.

Но кто знает, может быть и в соседних звездных системах планеты расположились настолько хорошо, что из первого же контейнера игрок получит «Легендарные Шлепки Морпеха» с +100500 к защите и кучей других бонусов, которые сделают протагониста абсолютно неуязвимым ко всем врагам на ближайшие 10-20 уровней. Опа, не порядок! Что делать?

? вот как раз тут может придти на помощь система прокачки героя. Чем больше мы играем, тем больше мы получаем опыта, и уровень героя растет, принося не только улучшение характеристик, но и возможность появления новых вещей. То есть, как раз по уровню героя можно определить должны ли учавствовать «Легендарные Шлепки Морпеха» в розыгрыше!?

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

Впрочем, в некоторых играх в описании к вещам можно найти подпись: «Требуется 8 уровень героя, чтобы использовать». Да и в Knighttron так было — это очень похоже на то, что я описал, и используется как некоторый порог, не позволяющий использовать крутые шмотки раньше положенного срока. Но, если честно, таскать недоступные для использования вещи в инвентаре — это грусть и печаль, говорящие тебе о том, какой ты еще слабак. Поэтому в новом Zombotron вы никогда не увидите недоступных для использования вещей, но и более крутой шмот не начнет появляться в магазинах и сундуках пока вы не получите требуемый для него уровень. ?, в какой-то степени — это тоже скрытая механика, которая следит за балансом игры.

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

Слава Великому Рандому!

PS: Все значения приведенные в записи можно смело умножать на 100 чтобы работать с более понятными цифрами, где 1.0 — это будет 100% вероятности.