Автор Ridiculous Space Battles (spiritual successor к тактическому авто-баттлеру Gratuitous Space Battles) описывает подход к автотестированию баланса и стабильности до выхода игры.
Цель: автоподбор баланса до прихода игроков
Задача — иметь дебажную сборку, которая способна запускать сотни и тысячи боёв без участия игрока, собирать статистику по оружию, модулям и флотам и помогать выровнять стартовый баланс.
Сложности с «просто сделать headless-режим»
Популярный совет «сделать headless-режим, который рандомит корабли и флоты и гоняет их миллион раз» на практике оказывается нетривиальным:
- Сама генерация «легальных» дизайнов кораблей ещё посильна, но генерация осмысленных дизайнов — отдельная сложная задача.
- Пример неосмысленного, но формально валидного флота — сотня кораблей только с ПВО/анти-ракетным оружием и без атакующих систем. Такой флот бесполезен для автobalance-аналитики и искажает выводы (например, создаёт иллюзию, что ракеты слабы).
- Текущая реализация генерирует каждый корабль по отдельности, что уменьшает шанс совсем абсурдных флотов, но проблему «случайности» как таковой не решает.
- Помимо дизайна кораблей нужно ещё автоматически расставлять их в формации и назначать приказы, согласованные с билдом — это отдельный пласт логики.
Автосимуляция боёв и сбор статистики
Сбор и агрегация статистики в таблицы оказался относительно простым: игра и так глубоко завязана на числовые статы. Сложнее было написать «обёртку», которая:
- запускает бой с рандомным флотом,
- дожидается окончания, сохраняет результаты,
- переходит к следующему бою без участия пользователя.
Игра изначально проектировалась под пользовательские клики, поэтому обход UI без симуляции мыши и при этом с пропуском экрана деплоя (чтобы не грузить лишний UI и текстуры между боями) оказался источником багов.
Побочный эффект: массовый соак-тест
Автобои стали мощным инструментом нагрузочного тестирования. Тысячи боёв в самых разных конфигурациях выявляют редкие крэши и ассерты, которые сложно поймать ручным тестированием. Пример: падение при потере/возврате фокуса окна именно в момент отрисовки эффекта оружия «Target Painter» — сценарий, который ранее просто не воспроизводился.
Игра и движок состоят более чем из 720 файлов кода каждый, логика и визуальные эффекты сложны, поэтому перебрать руками все комбинации практически нереально без большой QA-команды.
Генетические алгоритмы для баланса
Планируется ограниченное использование генетических алгоритмов:
- Сейчас оценка, например, «быстрых ракет» строится по суммарному урону за 100 боёв относительно стоимости и размера модуля.
- Если оружие выглядит сильным, его стоит чаще включать в генерацию, чтобы понять, действительно ли оно доминирует, или просто везло на слабую противоракетную защиту оппонентов.
- Идея — брать топ‑10 и боттом‑10 оружий по эффективности за последние N боёв и повышать вероятность их появления в следующих симуляциях, чтобы точнее оценить как перегибы, так и возможный андерпик.
- Отдельно нужно анализировать не только оружие, но и защитные модули (броня, щиты, декои, клоакинг) по выживаемости кораблей и времени жизни.
Память и стабильность
Автосимуляции подтвердили, что игра хорошо управляет памятью и не течёт: потребление держится около 234–400 МБ даже в крупных боях, что сильно лучше ранних билдов и прошлых проектов автора.
Выводы
- Автоматическая генерация флотов и боёв для балансировки сложнее, чем простое «рандомим всё» — нужны осмысленные, а не только валидные дизайны.
- Обёртка для автосимуляции боёв без UI-кликов — критичный, но нетривиальный технический слой.
- Массовые автосимуляции дают мощный соак-тест и находят редкие баги, недостижимые ручным QA.
- Генетический подход (усиление частоты топ/боттом билдов) помогает точнее выявлять перекосы баланса оружия и модулей.
- Инструменты автотестирования параллельно позволяют контролировать утечки памяти и стабильность долгих сессий.