Таракан, который устаёт: биология гонки
Задача от партнёров была простая: сделай гонки тараканов — какой-нибудь прототипчик, показать инвесторам. Я предложил не тратить время на фейк и сразу делать игру: модельки тараканов у нас уже есть, я их вставлю — и можно реально заходить и играть.
А ещё я не хотел, чтобы тараканы просто тупо бежали. Хотелось, чтобы гонки выглядели живыми: быстрый старт, за который потом расплачиваешься, соперник, который выдыхается на последнем отрезке, финишный рывок, который получается, только если что-то осталось в запасе. Поэтому я придумал каждому таракану биологическую систему внутри — по тому, как работает тело настоящего бегуна. Это самое интересное, что я придумал в этой игре.

Модель гонки v2: от кислорода и АТФ к мощности, силе и скорости.
Топливо — АТФ. Для бега нужен только АТФ, и его запаса хватает примерно на десять секунд максимальной мощности. Дальше организм должен его восстанавливать, одним из двух способов:
- Аэробно: жиры плюс кислород дают АТФ. Кислорода уходит много, а АТФ в секунду получается мало.
- Анаэробно: глюкоза даёт АТФ плюс молочную кислоту (лактат). Кислород не нужен; в модели этот режим включается, когда нагрузка становится высокой.
Лактат — это цена. Он копится в мышцах и приносит усталость, падает сила. Чтобы его утилизировать, нужен АТФ из аэробной системы, то есть это происходит, только пока кислорода хватает. Насколько хорошо работает кислородная система, зависит от пульса.
Поверх биологии — механика: мощность превращается в силу, которая борется с ветром, механическим сопротивлением и массой. Таракан, бегущий сразу за другим, встречает меньше воздуха — он едет в «слипстриме» лидера.

Один таракан за гонку: скорость, АТФ, кислород, лактат, усталость и переключатель мощности. Лактат начинает копиться, когда растёт нагрузка; на финишном рывке переключатель мощности уходит в 100, и лактат с усталостью резко растут.
Откуда берутся числа. Параметры каждого таракана задаются его генетикой и перками — навыками, которые он приобретает:
- Система АТФ: объём бака АТФ и то, насколько эффективно АТФ превращается в энергию бега, — усталость её снижает.
- Аэробная: объём бака кислорода, скорость его восстановления, сколько кислорода в секунду может уйти на восстановление АТФ (зависит от сатурации) и сколько АТФ даёт единица кислорода.
- Анаэробная (лактатная): объём бака лактата и скорость, с которой лактат даёт АТФ, — чем меньше кислорода в крови, тем ближе она к максимальной. Усталость начинается с 5% лактата и растёт по экспоненте. Лактат утилизируется, только пока в баке АТФ больше половины.
- Физика: масса; аэродинамическое сопротивление, растущее по экспоненте с массой, — тяжёлый таракан платит за это в воздухе; фиксированное механическое сопротивление; скорость и направление ветра из дата-фида.
Для баланса понадобился инструмент. Модель с таким количеством параметров на глаз не настроить, поэтому я сделал админку-симулятор: ставишь на одну трассу тараканов с разными параметрами, запускаешь гонку и смотришь графики.

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

Редактор таракана в админке: сверху внешний вид, ниже биологические параметры — запасы АТФ и кислорода, лактат, пульс, сопротивление ветру, масса.
Вторая идея: тараканы из частей. Каждый таракан был NFT из трейтов — частей тела, — а части делились на тиры: чем выше тир, тем круче. По задумке трейты должны были менять те самые биологические параметры, чтобы игроки охотились за хорошими. Это тоже забраковали — чтобы всё было по-честному, параметры у всех тараканов одинаковые. Но цвета остались: у каждого трейта свой оттенок, насыщенность и яркость. Бэкенд программно собирает модель из частей тела, сажает их на общий скелет, подставляет анимации и красит каждую часть в её цвета. План был, чтобы и цвет влиял на гонку — например, при температуре 20 °C лучше бежит более жёлтый таракан.
Как этим управляли. В первой версии игры таракана вели ползунком: насколько мощно бежать. Перестараешься — он устаёт, начинает бежать неэффективно и в итоге проигрывает.
Лучшая стратегия оказалась как у настоящего бегуна. Держать переключатель мощности где-то на 20–25%, а перед финишем врубать 100% — отдышаться можно и после финиша. Хитрость в том, чтобы угадать, за сколько до финиша начинать рывок. А если бежишь в аэродинамической тени другого таракана, можно поставить чуть меньше, чем у него: он бежит на 20%, ты на 19% — меньше устаёшь и в конце вырываешься вперёд. По сути, у тараканов получался пелотон.
Что было дальше. Ребята это забраковали: слишком сложно для игроков. Совместными усилиями мы пришли к простому управлению: ставишь на курс, например, биткоина, и удачная или неудачная сделка поднимает или опускает мотивацию таракана. В эту игру и играют сейчас.
Но биология никуда не делась — она по-прежнему работает под капотом. Теперь у каждого таракана есть искусственный интеллект, который в каждый момент сам подбирает переключатель мощности: делает прогноз на 10–20 секунд вперёд и выбирает режим, при котором таракан не устаёт, а перед финишем уже может себе позволить выложиться. Внутренняя реализация от этого чуть сложнее, зато для игрока всё просто. И гонки выглядят так, как мы хотели: то один таракан вырывается вперёд, то другой.

Живая гонка, апрель 2025: до десяти игроков, у каждого таракана своя криптопара.
А самое главное — под капотом нет никакого рандома. Всё чётко рассчитывается по модели. Случайность приносят только курсы валют, которые в реальном времени берутся с бирж.
Откуда берётся случайность. Это тоже была моя задумка. Сначала думали брать акции, но они обновляются не так часто, а ночью биржи не работают, — поэтому остановились на криптовалютах. Децентрализованные биржи тоже не подошли: блокчейн обновляется слишком редко. Остались централизованные.
Тот же биткоин торгуется чуть ли не на десяти биржах. Можно было брать курс только с Binance, но торги идут и на других, а для игры чем больше движений, тем больше волатильности и тем интереснее играть — график выглядит живым. Если брать только Binance, какой-нибудь Ripple может секунд 20 вообще не двигаться — для гонки это никуда не годится. Поэтому мы берём средневзвешенное по объёмам торгов значение по всем биржам. А если биржа не обновлялась больше 60 секунд, она вообще перестаёт учитываться: вес её последнего значения живёт в плавающем 60-секундном окне.
В целом система работала нормально, и некоторые игроки действительно научились хорошо играть: один заработал в нашей игре серьёзные деньги.
Что я из этого вынес: глубину стоит сохранить, но спрятать. Модель даёт каждому параметру понятный смысл, а симулятор показывает, что изменение сделает с гонкой, до того как это увидит игрок. Игроку же нужен один понятный рычаг — а сложность может жить внутри, и управлять ею будет ИИ самого таракана.