Девлог #2: прототип за один вечер, факап с Godot 4.7 и почему узкое место — не код
В прошлый раз я торжественно объявил: следующий пост — про играбельный прототип, собранный за один выходной. Хочу сразу закрыть вопрос: прототип есть, он запускается, и там правда можно тыкать кнопки. А теперь неприятная часть — я собрал его не за выходной. Я собрал его за один вечер.
Да, я понимаю, как это звучит после первого поста, где я клялся быть честным насчёт сроков и не хвастаться «за выходные». Но тут не тот случай хвастовства, о котором вы подумали — присаживайтесь, дальше будет и факап, который всё уравновесит.
Что вышло на самом деле
Семь коммитов, все — 13 июля 2026 года, с 14:45 до 20:17. То есть примерно пять с половиной часов активной работы, уложенные в один календарный день вместо запланированных выходных. Итог — 1329 строк кода в проекте Godot.
Писал это не я. Точнее, писал не я руками — я сформулировал один большой промпт, а код выдал Claude Code. Моя роль в этот вечер — архитектор и тестировщик, а не автор строк. Об этом ниже будет отдельный разговор, потому что именно тут и зарыт настоящий инсайт вечера.
Что умеет демо (по-человечески)
Если вы не программист и вам не хочется разбираться в тиках и seed-ах, вот что можно увидеть, если открыть прототип:
- - Герой (синий квадратик) сам ходит по кругу — управлять им напрямую нельзя, это фича, а не баг
- - Когда он доходит до скелета, начинается автобой: обмен ударами, победа или смерть
- - На карту можно выкладывать три типа плиток: кладбище (спавнит скелетов), роща (даёт ресурс-эссенцию) и костёр (баф герою рядом с ним)
- - Сверху — HUD с хп героя, номером круга, ресурсами и опытом
- - Есть пауза и ускорение x1/x2/x3 — можно смотреть неспешно или проматывать скучные куски
Визуально это цветные квадраты. Никакой графики — сознательно, чтобы не тратить вечер на артборд вместо логики.
Разбор для инженеров: почему это не понты, а фундамент
Вот это уже интересно тем, кто пишет код. Перед тем как Claude Code написал хоть строчку, в репозитории уже лежали четыре markdown-файла: CLAUDE.md, design.md, roadmap.md и agents.md. Не документация ради документации — это контекст, который агент читает перед каждой задачей. Дизайн-документ фиксирует, что тайлы и руны должны делать; roadmap говорит, что мы сейчас именно на этапе «вертикальный срез, а не полная игра»; agents.md описывает, что дальше в проекте появятся другие агенты — симулятор баланса, автоплейтестер — и код должен быть готов их принять уже сейчас. Markdown-база тут работает как техзадание, которое не устаревает, потому что агент сверяется с ним каждый раз, а не хранит устаревшую версию у себя в голове.
Отсюда прямое архитектурное решение, зафиксированное в design.md: детерминированное тиковое ядро (фиксированные 10 тиков в секунду) плюс единый seeded-генератор случайности на весь забег. Это не преждевременная оптимизация — это буквально то, без чего agents.md не имеет смысла. Если боевой расчёт зависит от рендера или от «настоящего» времени, будущий агент-симулятор баланса не сможет прогнать тысячу автобоёв headless и получить сравнимые цифры. Поэтому уже в прототипе есть тест: сто боёв с одним и тем же seed дают побитово идентичный результат. Зелёный тест — это не галочка для отчёта, это проверка, что фундамент под агента-балансировщика не поехал.
Честно: что пошло не так
А теперь факап, ради которого вообще стоило читать этот пост, а не только скроллить до метрик внизу.
Всё писалось под Godot 4.3+, как и было заявлено с самого начала. А на моей машине стоит Godot 4.7. Когда я наконец открыл проект в реальном редакторе (а не просто просмотрел код глазами — да, я так и сделал сначала, привычка из веба, где можно поверить логам), выяснилось, что один из моих типов данных назывался TileData — а это, оказывается, имя встроенного класса самого движка. Никакой ошибки компиляции сразу не было, просто тихий конфликт имён, который вылез только в рантайме. Пришлось переименовывать TileData в TileDef по всему проекту и заодно чинить seeded RNG, который из-за этого же конфликта вёл себя не совсем так, как ожидалось.
Отдельный коммит fix: рабочий запуск в Godot 4.7 — это ровно та работа, которую невозможно было сделать, глядя в код. Её можно было сделать только запустив игру по-настоящему.
Инсайт вечера
Вот в чём штука. Написание 1329 строк рабочего GDScript заняло у модели, по сути, доли того самого вечера. Узким местом оказалась не генерация кода — а решения, которые может принять только человек, реально запустивший результат: открыть Godot, нажать F5, увидеть, что что-то не так, понять почему. Связка «инженер + агент» упирается не в скорость написания строк, а в скорость и качество проверки — насколько быстро я, как человек с рабочим Godot на экране, замечаю разницу между «код выглядит правильным» и «код действительно работает».
Это ровно то, о чём я писал в первом посте про будущего агента-балансировщика: агент предлагает, пайплайн проверяет, человек утверждает. Просто выяснилось, что «пайплайн проверяет» — это не абстракция для этапа 2, а буквально то, чем я занимался весь этот вечер руками.
Что дальше
По roadmap.md гейт этапа 1 — сыграть 5 забегов самому и честно спросить себя: интересно ли это вообще, или просто технически работает. Пока прогнал меньше, буду добирать на неделе, и если через 5 забегов станет скучно — итерирую здесь, а не бегу вперёд по плану.
Если гейт пройден — дальше этап 2: стихии (матрица 4×4: огонь, вода, земля, воздух) и руны — та самая система страниц рун из League of Legends, которая должна превратить подготовку к забегу в отдельную маленькую игру. Ждите отчёта, ломается ли баланс сразу же, как я и обещал в первом посте, что покажу.
Подписывайтесь
Если вам интересно смотреть, как это дальше будет ломаться и чиниться, — подписывайтесь на девлог. Следующий пост либо про стихии и руны, либо про то, как обнаружилась вторая версия конфликта имён с движком, потому что жизнь несправедлива.
#agenticGameDev
Метрики (честно, из git log)
- - Коммитов: 7
- - Календарных дней: 1 (13 июля 2026)
- - Активное время: ~5.5 часов (первый коммит 14:45, последний — 20:17)
- - Размер кодовой базы: 1329 строк (весь трекаемый код проекта)
- - Тест воспроизводимости: зелёный, 100/100 боёв с одним seed идентичны