Баланс роглайк-декбилдера: от догадок к замеру

Пиксель-арт Soul Strip: героиня между огненной аурой уровня карты и розовой аурой Связи

Каждое число в прогрессии Soul Strip, выставленное на ощущение, оказалось неверным, и не слегка: в одном месте мимо впятеро, в другом в пятнадцать раз. До релиза это выяснилось только потому, что игра умеет сыграть сама в себя тысячу раз за то время, пока варится кофе.

Soul Strip это роглайк-декбилдер: колода собрана из карт с девушками. Забег идёт по карте из узлов через три акта, в конце каждого акта босс. Смерть отправляет в начало, и между забегами сохраняются только уровни карт. Один забег это около 70 ходов игрока, примерно 23 минуты.

Симулятор, который играет сам

Проверять прогрессию на живых игроках дорого: каждый вопрос стоит недель. Поэтому у игры есть свой симулятор. Он гоняет полные забеги на три акта через настоящий боевой код, а не по упрощённой модели, и не рисует ни одной сцены. Забег стоит ему 0,3 секунды. Тысяча забегов это пять минут на одном ядре и меньше минуты на всех. Стартует он каждый раз с пустого сохранения и настоящее не трогает.

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

Одно правило обошлось дороже любого числа ниже: процент без интервала это не замер. Любой процент побед печатается вместе с 95-процентным интервалом Уилсона, потому что на пяти забегах «100%» означает от 34 до 100, а два значения с пересекающимися интервалами неразличимы, как бы далеко ни стояли сами проценты.

Утверждение «свежий аккаунт выигрывает 0–5%» неделями висело в заметках открытым вопросом. Оно пришло с пяти забегов. Сто забегов на каждый из четырёх стилей игры, от случайных нажатий до самой аккуратной игры, закрыли вопрос на 0–2% при интервале меньше семи процентных пунктов. Двести забегов на стиль показали, что стоит за этим нулём: акт 1 проходят 45% забегов при случайной игре и 59% при аккуратной, акт 2 — 6% и 9%. Мастерство на стартовой коллекции покупает глубину забега и ноль побед. Так и задумано, поэтому ось здесь не победа, а то, докуда забег дошёл.

Уровень карты и Связь

У карты есть уровень от 1 до 5. Раньше это единственное число двигало и урон с блоком, и бонусные эффекты карты, и то, какую из пяти её иллюстраций видно в Галерее, где собран весь открытый арт. Это три работы с тремя разными источниками давления. Голые цифры надо зажимать, иначе лестница сложности заваливается. Бонусные эффекты самое интересное, поэтому они должны стоить решения. Арт вещь коллекционная, и он не должен доставаться просто за количество боёв.

Поэтому уровень разъехался на два.

Уровень карты двигает цифры: урон, блок, всё, что карта делает в бою. Растёт по очку за каждое разыгрывание, начисляется в конце забега, Вайфу забега получает вдвое. Пороги 40, 80, 160 и 320 очков опыта. Каждое значение, которое он поднимает, уже прижато потолком в коде, поэтому уровень карты безопасно раздавать за игру.

Связь открывает бонусные эффекты и новые иллюстрации. У этих эффектов потолка нет вовсе, поэтому Связь платится решениями, а не повторами: свидание на Горячих источниках вместо лечения, выполненное обещание, поверженный босс. Последние два засчитываются только карте, загаданной перед забегом. Пороги 3, 5, 6 и 7. Весь подъём одной карты до Связи 5 стоит 21 очко опыта, а все 60 карт дают 1260.

Двадцать одно очко Связи против шестисот очков уровня карты, если сложить все его пороги. Выглядит абсурдом, пока не видно источников: уровень карты собирает опыт десятками за каждый бой, а Связь получает его два-три раза за забег.

Обещания и откуда взялись их цели

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

Первый список был семью счётчиками: «нанести 320 урона её картой», «разыграть её карту 40 раз», шесть вариаций одной формы. При перечитывании стало видно, что это не обещание, а пошлина. Игрок делает ровно то, что делал бы и так, только дольше.

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

  • Один ход. «Нанести N урона выбранной картой за один ход». «Разыграть выбранную карту за один ход ×N». «Набрать выбранной картой один статус ×N». «Закончить ход с Блоком ×N». Играть дольше тут не помогает: либо такой ход собрался, либо нет.
  • Особая колода. «Выиграть бой одной выбранной картой». «Колода не больше N карт». «Колода без Проклятых карт». «Колода только из стихии выбранной карты». Меняется то, как забег играется, а не сколько он длится.
  • Исход забега. «Победить босса без потери HP». «Убить босса не позже хода N». «Сделать выбранную карту Вайфу забега». Проверяется один раз, в конце, и неудачные попытки внутри забега ничего не копят.

Дальше цели, и на них симулятор сделал настоящую работу. Он прогнал 240 забегов стилем, который обещание не преследует, и всё равно записал пики:

счётчик p50 p75 p90 максимум ни разу
урон за один ход 20 25 36 64 0%
высота одного статуса 13 20 29 87 0%
синергий за один бой 13 19 33 81 0%
блок на конец хода 43 54 72 128 0%
ходов на убийство босса 8 11 16 43 30%
размер колоды в конце 22 25 28 38 0%

Простое обещание встало на p75, среднее на p90, сложное выше p90, но внутри наблюдённого максимума. p75 это значение, до которого забег добирается в одном случае из четырёх, ничего для этого не делая. Условия без числа получают ту сложность, куда их приводит пассивная частота: босса без потери HP проходят 23% забегов, это среднее, а бой одной картой выигрывают 2%, это сложное.

Прежние цели были догадками, и таблица показывает, насколько мимо. Урон за ход стоял на 40/70/120 при наблюдённом максимуме 64. Синергии, то есть бонус за несколько карт одной стихии за ход, стояли на 3/5/8 при медиане 13. Половина списка была бы недостижима, половина бесплатна.

Три захода на цену подарка

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

Сначала магазин продавал опыт Связи. Подарки по 15, 30, 45 и 70 душ, дешевле, если получателя выбирает игра. Потом доход в душах измерен на шести кампаниях по 40 забегов с пустого сохранения: медиана 15–28 душ за забег. При таких ценах одна девушка стоит 160 душ, а все 60 стоят 9600, это около 384 забегов. 147 часов на коллекцию при планке «хотя бы тридцать».

Дальше цены срезали почти втрое, до 5, 10, 15 и 25. Девушка стоит 55, вся коллекция 3300, это около 132 забегов и 51 час. Уже похоже на правду. Но у Связи два замка: подарок поднимает потолок, опыт поднимает уровень, и уровень открывается по тому из двух, кто медленнее. Срез снял только замок по душам. Души стали уходить в ноль каждый забег, а свидания с обещаниями вдвоём платили 1,5–3,1 очка Связи за забег, и полная коллекция оказалась в 400–850 забегах, втрое дальше душ. Средняя Связь так и стояла на 1,2–1,3, и 40–50 карт из 60 оставались на первом уровне.

В итоге подарок перестал продавать опыт. Он поднимает потолок Связи одной девушки ровно на один уровень, и четыре подарка идут строго по порядку. Простой открывает Связь 2, Хороший 3, Дорогой 4, Особый 5. Случайное дарение убрано: получателя всегда выбирает игрок.

уровень_связи = min(уровень по опыту, 1 + подаренных)

Цена превращается в число забегов только через доход, и промахнулся здесь именно доход, причём дважды. При порогах 6/10/16/24 коллекция стоила 3360 очков при доходе около 3 за забег, в пятнадцать раз мимо. Урезание до 2/3/4/5 рассчитано на 9 очков за забег, а замер дал 17,5, и одна кампания довела 50 карт из 58 до Связи 5 за 40 забегов. Остались пороги 3, 5, 6 и 7.

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

Пиксель-арт: четыре подарка от простого к драгоценному, над ними лестница из двух горящих сердец и трёх запертых замков

Последним куском стал третий источник опыта Связи, потому что свиданий с обещаниями на неё не хватало. Теперь загаданная вайфу получает 3 очка Связи за каждого поверженного босса. Доход стал 3,1–7,1 за забег при среднем 5,8, а полная коллекция переехала с 400–850 забегов на 178–406, типично около 200. Замок по душам стоит на 132 забегах, замок по опыту примерно на 200: один порядок вместо тройной разницы, и обе цифры выше планки в тридцать часов, это примерно 51 и 77 часов.

Сам счётчик боссов не счётчик. Число читается из достигнутого акта, потому что переход акта единственный путь мимо босса. Отдельная запись была бы второй копией того же факта, а две копии умеют разойтись.

Одного третий источник не выровнял. Связь осталась кучной: 41–46 карт из 57 стоят на первом уровне, а 2–6 сразу на пятом. Так работает опыт, который платится загаданной вайфу, и это оставлено как есть.

Что осталось нерешённым

Небрежная игра обыгрывает аккуратную, и не в пределах погрешности: 69% побед против 68% на наполовину собранной коллекции. Стиль, который жмёт первую попавшуюся карту, берёт там же 53%.

Между лучшей игрой и случайной пятнадцать пунктов разницы. Между лучшей и небрежной минус один.

Откуда это, видно, если отключать по одному всё, что усиливает аккаунт между забегами. Уровень карты стоит 47 процентных пунктов побед, больше любой другой прибавки в игре. Забег выигрывает собранная коллекция, а не решения в бою.

Лечится это перекройкой самих карт, а не ползунками сложности, и чисел после перекройки ещё нет.

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

Soul Strip сейчас на версии 0.9.93, релиз близко. Страница в Steam принимает в желаемое.

Soul Strip: Waifu Card Battler

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

В вишлист Steam