Размышления о балансе рандома в играх
В этой статье я сравниваю фиксированный дамаг с рандомным по их привлекательности для игрока в разных условиях, и какими способами балансируются или настраиваются вероятности в играх. Добавлю также свой авторский вариант и опишу, как эти размышления довели меня до идеи проекта игры про ВАС на ДТФ.
В очередной раз вспомнила свои старые размышления про балансировку рандома, только теперь они зашли сильно дальше обычного... Без предисловий сразу к сути.
Содержание:
Пример для основы
Представим себе условного героя РПГ, сражающегося с мобом. У него есть две атаки:
- Постоянный урон на 5 единиц
- Рандомный урон на 2-8 единиц
Математически они сбалансированы. Если сделать 100 атак, то суммарный урон постоянной атаки будет равен 500, а рандомной - по статистике сильно приближен к этой же величине с небольшим отклонением.
Тогда возникает вопрос: а зачем вообще добавлять в игру рандом? Какой смысл игроку к нему обращаться? Очевидный ответ - за эмоциями. Если игра целиком предсказуема как шахматы, то любая неожиданность - это ошибка вашего планирования, невнимательность и недостаточная дальновидность.
Если же игра рандомна, то она качает вас на эмоциональных качелях как профессиональный абьюзер. Вы не замечаете средние результаты, получаете эйфорию, когда критуете в ответственный момент, и рвете на себе волосы, когда жестко факапите.
Но что делать, когда в игре есть оба варианта? На что будет полагаться игрок в своем выборе и как склонять его к использованию рандома?
Влияние ситуативности
Для начала рассмотрим частные варианты. Пусть на больших выборках суммарный урон и одинаковый, но во время игры он распределяется по врагам с ХП и зачастую часть его уходит в никуда.
Пусть у моба будет 12 ХП. В таком случае герою потребуется 3 атаки по 5 урона для победы. Двумя атаками (2х5) он сносит 10 ХП, и остается 2 ХП в качестве остатка.
Этот же остаток равен минимальному дамагу от нашей рандомной атаки, а значит, мы можем без какого-либо риска с нее и начинать, ведь тогда есть шанс реализовать ее преимущество. Тут возможны варианты:
- Если выпадет 7-8, тогда мы получим преимущество и можем добить цель 1 ударом на 5. В итоге управимся всего за 2 удара.
- Если выпадет 5-6, то атака эквивалентна обычной на 5, это позволит нам совершить еще один случайный удар без риска.
- А вот если выпадет 2-4, то мы съедаем тот самый остаток и предпочтем добить цель 2 атаками по 5. В противном случае рискуем растянуть битву на 4+ ходов.
Однако, если у моба будет уже не 12, а 13 ХП, то ситуация слегка изменится. Теперь остаток равен 3, т.е. выше минимального рандомного урона. А это значит следующее:
- Преимущество будет только при выпадении 8, тогда мы добьем моба все еще за два удара.
- Если выпадет 2, то мы сразу рискуем затянуть бой минимум на 4 атаки. После двух следующих ударов на 5 все еще будет висеть 1 ХП под четвертый удар.
Это новый остаток, повторяющий изначальную ситуацию. Мы снова можем позволить себе рандомный удар, но не факт, что случайность будет на стороне игрока.
Теперь мы имеем сбалансированную ситуацию. Равный шанс как победить за 2 удара, так и встрять на 4.
А вот если у моба будет 14 ХП, то шанс получить преимущество испаряется вовсе и рандома лучше избегать. Это работает немного иначе в обратную сторону: при 11 ХП растет только шанс на преимущество, но вот если у моба будет 10 ХП, то рандом снова не нужен - вы в любом случае управитесь двумя ударами, и большие значения рандома вовсе не имеют значения.
Можно даже попробовать выстроить формулу или график эффективности стратегий в зависимости от рандома, но это лишнее.
Смещение случайности
Чтобы рандом был привлекателен, мы можем смещать его среднее значение вверх. К примеру так:
- Постоянный урон 5
- Случайный урон 3-9
Это смещает баланс на больших выборках в пользу второго и поощряет рискованное поведение игрока. Можете сами прикинуть, как изменится ситуативность из прошлых примеров, но если кратко, то теперь стратегия будет больше опираться уже на рандомную атаку, чтобы за ней подчищать остаток с помощью постоянной.
Подобным образом играются, например, рискованные зелья в игре Magicraft, и это работает. Когда смотришь на них, так и тянет выпить, это куда привлекательнее, чем равный шанс получить зеркальный баф/дебаф.
Но вот если сделать наоборот и сместить рандом вниз до 1-7, то он становится вообще не привлекательным. Тут и рассматривать нечего.
Парадокс чистой вероятности
Как ни удивительно, но случайность случайна (ха-ха). Она не подчиняется ожиданиям и зачастую их не оправдывает. Тут уже подключается человеческий фактор: все мы ноем на критикал фаИлы трижды подряд, но никто не жалуется на тройные криты. Это другое, это наша удача, рок, провиденье, улыбка судьбы.
Я и сама в своем провальном проекте что-то подозревала, но тесты показали, что все было в порядке.
Хоть рандом в моменте не предсказуем, на больших выборках он все же подчиняется статистике и нормальному распределению. Для большинства он сбалансирован, но в редких крайних случаях будут как везунчики, так и "неудачники".
Контроль честности
Можно добиться сбалансированного рандома, если, например, создать массив (мешок), засунуть в него числа по одной копии и выдавать их случайном порядке игроку.
В итоге последний видит, что рандомный кубик d6 в следующие 6 бросков обязательно выпадет каждой гранью по 1 разу. Если не знать об этом трюке, то можно даже не обращать на это внимания некоторое время, но рано или поздно вы заметите.
Чтобы обмануть внимательного душнилу можно для каждого рандомного варианта задавать рейтинг, который снижается с выпадением этого варианта и увеличивается, если он не выпадает. Чем он выше, тем больше шанс этого варианта в рандоме. Ну или просто добавить в мешок не 1, а 2-3 копии набора чисел.
Как результат, мы получим все еще сбалансированные результаты, но куда менее предсказуемые. Без подробных шметрик игрок ничего не докажет.
А если он злоупотребляет сейвскамом, то можно в начале миссии создавать последовательность случайных чисел и сверяться с ней по порядку во время проверок.
Можно снизить бугурт аудитории на частые провалы, если подрезать концы распределения. Бросать не один, а два кубика, складывать значения и выдавать половину.
Итог - чаще выпадают средние величины, и сильно сократится число профессиональных неудачников. С другой стороны серии удачных критов станут такой же редкостью. Оно вам надо?
Если хотите порадовать аудиторию, добавляйте скрытые модификаторы (бонусы) к шансу успеха при каждой неудаче. В итоге криты и успехи станут чаще, череды неудач сильно реже, а игроки счастливее. Главное не проговориться.
Мой вариант совмещения
Пока я думала об имитации броска кубиков через игральные карты, мне пришла идея для легального управления рандомом. Может, где-то она уже и встречалась, но я пока с ней не пересекалась.
Допустим мы хотим рандомить результаты 1-10. Формируем из карт колоду с этими числами (1 - это туз), перемешиваем и вытягиваем карты по порядку во время проверок, а затем откладываем в сброс. В таком виде мы имеем тот самый массив (или мешок) известных вариантов и можем предсказывать, какие числа могут выпасть следующими.
Далее позволяем игроку в любой момент перед вытягиванием очередной карты возвращать в колоду сброс и тасовать ее. Теперь, вытянув 1, вы точно знаете, что она больше не выпадет. А после вытягивания 10 можете хоть сразу же ее замешивать все обратно.
Если вы возьмете в колоду не один набор карт 1-10, а два или три, то частично реализуете еще и вариант с рейтингом. Ведь с каждой вытащенной картой шанс вытянуть ее дубль уменьшается, а для других - постепенно растет.
И в качестве вишенки каждый раз при провале любой проверки откладываем такую карту в отдельную стопку, и число таких карт используем как бонус к следующим проверкам до первого успеха, после чего сбрасываем.
Вот так просто мы совместили вместе преимущества нескольких вариантов из прошлого раздела и добавили элемент контроля случайности для игрока через тасование в любой момент.
Идея своего нового проекта
Так и сейчас, размышляя над примерами из первых разделов, я подумала, что неплохо было бы их опробовать на каком-нибудь простеньком имитаторе. Как вариант реализации здесь подойдет жанр примитивных данж-кроулеров. Это как раз подпадает под тот самый шаг назад в моем творчестве.
И полет фантазии было уже не остановить. Сначала я думала сделать типичный сеттинг юморного фентези, но потом подумала, что это скучно, и нужно что-то необычное, чтобы было интересно мне самой.
И тут я вспомнила игру Noobs Are Coming (пока про нее не писала). Это вампир-лайк в сеттинге фэнтези ММО. Игрок берет на себя роль финального босса и сражается с волнами онлайн игроков.
Еще пробуя ее, я подумала, было бы забавно увидеть ее аналог, но с закосом под ДТФ и местную аудиторию с донатиками, шитпостерами и жопой кокоса. Так можно этот сеттинг применить и к данж-кроулеру, а в качестве врагов использовать добровольцев из числа ВАС с выбранными вами цитатами, шутками и фразами во время боя, при победе или поражении игрока.
Мне эта идейка показалась забавной. Она точно будет поддержать интерес и мою вовлеченность. В ней можно простыми средствами будет реализовать все мысли о рандоме из этой статьи и даже сделать настройку махинаций с ним как часть игровой механики.