Бот сыграл 26 400 партий: как агенты балансировали карточную игру за четыре дня

«Оборот» – карточный рогалик про то, как маленькая команда с агентами доживает до первого большого запуска. Его собрали агенты за четыре дня: 28 выпусков с 13 по 16 октября. Человек в это время ставил задачи и играл руками. На полноценный плейтест каждой версии людей бы не хватило, поэтому баланс держал бот: перед каждой правкой он отыгрывал сотни сезонов.
Ниже – как это было устроено: какое число считали целью, где бот проигрывал и какие правила поменялись по его логам.
Что приходится балансировать
Работа команды в игре идёт по кольцу из пяти станций: сигнал, контекст, решение, дело, ретро. Процессы команды – карты в руке: синк, ночной рывок, фокус-сессия, ретро, агенты. Каждая карта работает на своей станции, часть из них тратит энергию команды. Что дошло до конца кольца, превращается в ясность. Что застряло, копится шумом.

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

Сезон ведёт один из четырёх руководителей – основатель, операционный директор, архитектор агентов, фасилитатор – или команда без руководителя. У каждого своя способность. В итоге ручек у баланса много: размер руки, сила кризисов, босс, цены карт, способности руководителей, рынок между боями.

Мерило – бот
Цель записали числом: бот побеждает в 30–55% сезонов за каждого руководителя. Если побед больше, игре нечем пугать. Если меньше, новичок бросит.
Правило замера одно: одна правка за раз, после неё прогон бота, решение принимается по числу. С версии 0.6.2 прогон – 800 сезонов на каждую цель, полный раунд – 26 400 партий.

Первая ночь: 100% → 48%
Первую сборку сделали строго по дизайн-документу. Бот выиграл 100% сезонов: рука в пять карт, давление кризисов по таблице дизайна. За ночь давление подняли в 3,4 раза, руку увеличили до шести карт, боссу дали силу 90 и таймер в три недели. К 02:20 версия 0.1 стояла на 48,3%. Дальше четыре дня доля побед держалась в коридоре 47–55%.
|
Версия |
Побед у бота |
Что поменяли |
|---|---|---|
|
дизайн-документ, 12.10 |
100% |
рука 5 карт, давление по таблице дизайна |
|
0.1, 13.10 |
48,3% |
рука 6 карт, давление ×3,4, босс 90 с таймером 3 |
|
0.2 |
47,3% |
появились руководители |
|
0.3 |
48,8% |
способность руководителя срабатывает не реже 0,3 раза за бой |
|
0.4 |
52,3% |
бой, закрывший последний кризис, засчитан победой |
|
0.5.0 |
53,3% |
26 карт пересчитаны, разброс между руководителями 3 п.п. вместо 16 |
|
0.6.3, 16.10 |
50,0% |
800 прогонов на цель |
Из первой ночи осталось два полезных соотношения. Один процент давления кризисов стоит боту примерно одного процентного пункта побед. На картах из дизайн-документа то же давление дало бы 21% побед: правки самих карт стоили 27 п.п.
Где бот проигрывал
В версии 0.4 замерили, чем заканчиваются поражения. 39% приходились на босса. В 56% проигрышей последний удар наносили фоновые потери. Два правила это поправили: бой, в котором закрыт последний кризис, засчитывается победой, а ход в последнюю энергию запрещён.
Потом выравнивали руководителей. В версии 0.5.0 пересчитали 26 карт, и разброс побед между руководителями сократился с 16 до 3 п.п. Замер версии 0.6.3 на 800 сезонов:
|
Руководитель |
Побед у бота |
|---|---|
|
без руководителя |
50% |
|
основатель |
53,1% |
|
операционный директор |
48,5% |
|
архитектор агентов |
49,1% |
|
фасилитатор |
50,5% |
Для тех, кому 50% мало, есть лестница сложности из семи ступеней. На 0.6.3 она снижает победы бота так: 50 → 46,3 → 39,1 → 32,8 → 28,6 → 24,8 → 19,4%.
Правки, которые продиктовал лог
Рука 5 → 6 карт. Выбор новой карты после боя добавлял боту 7 п.п. побед при руке в пять карт и 18 п.п. при шести. С пятью картами колода не успевала проявиться, и выбор почти ничего не решал.
Босс. Было: сила 30, таймер 4 недели, удар по энергии −8. Стало: 90, 3 недели, −10. Бой с боссом тянулся 8,9 недели, после правки – 7,5 при целевых 5–8.
Рынок. 136 из 316 посещений рынка приходились на первые два ряда карты сезона: игрок закупался раньше, чем понимал свою колоду. Рынок теперь открывается с третьего ряда.

«Записи встреч». Карта не сработала ни разу за 360 боёв. Её переписали, теперь она срабатывает в 22% боёв.
«Оркестровка». Способность архитектора агентов срабатывала 0,01 раза за бой. На такой случай в брифе было правило: если способность не применяется, меняют способность, бота не трогают. С версии 0.3 каждая способность руководителя обязана срабатывать не реже 0,3 раза за бой, и это проверяется на каждом выпуске.
Ценность карт для бота. Бот выбирает карты по измеренной ценности, и часть оценок оказалась неверной. «Публичный анонс» стоил для него 0,0, после правки 0,6. «Открытый эфир» при цене 2 стоил 0,3, стал 1,5.
После каждого боя игра показывает тот же разбор человеку: какая карта тянула кольцо, какая держала очередь, какая убирала шум.

Протокол одной правки
-
Находка: бот, плейтест, ревью или вопрос основателя.
-
Правка: одно число в JSON или одна строка движка.
-
Тесты:
node --test, на 0.6.3 их 868, падений ноль. -
Бот: 800 прогонов на цель.
-
Запись в журнал решений: до, после, как откатить.
-
Коммит с префиксом
engine:. -
Кодекс правил, борт проекта и карты в игре читают одни данные, поэтому описание не расходится с механикой.
Бот находит перекосы в числах. Живой плейтест находит места, где игроку непонятно: «положил карту не туда – она сгорела», «откуда тратится энергия, я не совсем понимаю». Правки из обоих источников идут по одному протоколу.
Кто это делал
Работали пять сессий Codex, у каждой своя зона: интерфейс, маркетинг и лендинг, звук, процесс, движок. Зоны распределял оркестратор на Claude. Баланс жил в зоне движка вместе с ботом. Человек играл руками и задавал вопросы.

В «Оборот» могут играть и внешние агенты: через MCP им доступны правила, состояние партии, допустимые ходы и сам ход. 15 октября на версии 0.5.9 внешний клиент сыграл бой – 32 действия, 5 недель, победа. Публичный вход для агентов пока закрыт. История всех правок баланса открыта на борту проекта.
Демо открыто в браузере, обучение занимает пять минут. Полный сезон пока в закрытой бете.
Автор: mykhailus

