Будни вайбкодера

Enduro

Enduro, день второй: из куба вырос мотоцикл, а на нём райдер

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

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

Оранжевый эндуро с райдером на тестовой площадке, впереди трамплин-стол
Оранжевый эндуро с райдером на тестовой площадке, впереди трамплин-стол

Это не картинка из интернета, это наша игра, снимок из автотеста. За день. Ну, за день и ночь, если честно, коммиты есть в два часа ночи. Дальше по порядку.

Ночь: мотор, коробка и первые грабли

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

Грабли этой ночи, чтобы вы знали, на что уходит время в геймдеве:

  • Модель из Blender импортируется в метрах, а движок считает в сантиметрах. Мотоцикл размером с зажигалку, пока не домножишь на сто.
  • Редактор в фоне режет частоту кадров до трёх в секунду. Пока окно Claude было впереди, физика считалась на трёх кадрах, и мотоцикл вёл себя как пьяный. Полчаса поисков, одна строка в настройках.
  • Если закрыть редактор с несохранённым уровнем, он при следующем запуске виснет на диалоге «восстановить?», которого никто не видит. Теперь стартовая карта всегда сохранённая.
  • Курки. Мы считали, что шкала силы от нуля до восьми, а движок на Mac делит её на 255. Поэтому вчерашние «три процента силы». Теперь пишем в низкоуровневую шкалу напрямую, и рычаг наконец сопротивляется по-настоящему.

3D-художник, который не видит своих работ

Модель мотоцикла мы отдали Codex. Тут важная деталь: у него нет рук и глаз. Он не может запустить Blender и посмотреть, что получилось. Поэтому договорились так: Codex пишет скрипт, который строит модель, я запускаю Blender, рендерю три ракурса и скидываю ему картинки. Он смотрит и правит скрипт. Четыре итерации.

Так появился оранжевый эндуро в духе KTM: полые ободы со спицами, бак, седло, крылья, глушитель с резонатором, витая пружина амортизатора, цепь со звездой. Шесть частей с опорными точками, чтобы вилка, маятник и колёса двигались от подвески и руля. Шестьдесят восемь тысяч треугольников. Модель стилизованная, заводским чертежам не соответствует, и это нормально: у нас не автосалон.

Ради этого мы переписали роли в дрим-тим. Было: Codex физика, Claude движок. Стало: Codex ещё и графика, Claude код и физика. Решение принял я после первых моделей, и агенты записали его в журнал решений с датой.

День: разворот на аркаду

Днём Claude собрал исследование по технике управления мотоциклом, а Codex сравнил четыре архитектуры физики и порекомендовал одну. Была поставлена задача на реалистичное руление и равновесие «по открытой математике». И вот тут я посмотрел на всё это и сказал: стоп.

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

Задача про реалистичное руление в проект не влилась и лежит как задел. Агенты отметили это в решениях с условием «если вернёмся к реализму». Мне нравится, что ничего не выбросили.

Вечер: райдер

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

Claude посадил его на мотоцикл и сделал позы процедурными: тело вперёд-назад от левого стика, корпус в поворот, голова смотрит по направлению, присед на ударе подвески. Руки на руле пока не через обратную кинематику, это следующий шаг.

Райдер наклоняется в поворот
Райдер наклоняется в поворот
Вилли по газу и левому стику
Вилли по газу и левому стику

Автотест вместо меня

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

Последний коммит дня: «знак момента тангажа исправлен: стик назад поднимает нос». То есть до этого вилли делалось стиком вперёд. Автотест это и поймал.

Что дальше

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