Делал игру на Defold с AI-агентом: 57 тысяч слов инструкций и ноль вайба
Я потратил несколько вечеров на то, чтобы собрать рабочий прототип игры «три в ряд» на движке Defold, используя Codex как основного кодера. Получилось? Формально, да. Но путь оказался настолько далёким от «вайб-кодинга», что мне хочется рассказать, как всё было на самом деле.
Сразу оговорюсь: у меня не было цели сделать полноценный игровой продукт. Никакого релиза, монетизации, выхода в сторы. Это был чистый эксперимент, я просто хотел попробовать. Взять нишевый движок, прикрутить к нему AI-агента и посмотреть, что из этого выйдет. Мне было интересно не «заменит ли AI разработчика» (спойлер: нет), а кое-что конкретнее: насколько сейчас человек и AI-агент могут дополнять друг друга в нише геймдева. Где проходит граница этого симбиоза, на каком этапе один без другого буксует, и можно ли из связки вытащить что-то практически полезное. Прототип тут средство, не цель. Цель была понять, как работает эта связка на реальной задаче, а не на синтетических демках.
Почему Defold, а не Unity или Godot
Дисклеймер: под «прототипом» я имею в виду не каркас на серых квадратиках. Мне нужна была игра, которую можно дать в руки тестировщику. С визуалом, понятным геймплеем, воронкой и прогрессией. То есть штука, на которую не стыдно позвать в плейтест.
У меня с Defold уже была история. В прошлом году я потратил полтора-два месяца на погружение в движок: читал доки, сидел в чате комьюнити, собрал начальный прототип другой игры. И мне зашло. Комьюнити тёплое (реально помогают, а не «читай доки»), документация написана человеком для человека, а сама структура проекта — просто папка с файлами. GUI представлен через .gui-файлы с понятным кодом. Ничего магического.
Ну и ещё один момент, который стал важным уже потом: хорошая документация Defold оказалась козырем для AI-агента тоже. Когда доки написаны чётко и структурированно, агенту проще вытаскивать из них нужное. Это я оценил позже, когда начал прикручивать Context7.
AI и Lua: когда агент не понимает язык
Начинается самое интересное. Что Codex, что другие агенты, чувствуется, что Lua для них как иностранный язык, который они учили по разговорнику. Особенно в контексте геймдева. Если сравнить с тем, как эти же модели пишут игровую логику на JavaScript/Python, разница бросается в глаза буквально с первых минут сессии.
Агент знает синтаксис. Агент может написать функцию. Но он не чувствует идиомы языка, не понимает, как принято делать вещи именно в Defold. Постоянно пытается применить паттерны из других экосистем. Таблицы использует как объекты из JS, метатаблицы путает, с коллбэками Defold периодически творит какую-то дичь.
Мне прям пришлось строить обвязку из скиллов и вспомогательных агентов, которые подсказывают: «Нет, вот так в Defold не делают. Вот правильный паттерн. Вот как работает жизненный цикл game object». Без этого каждая вторая сессия превращалась в исправление «почти правильного» кода, который на деле не работал.
57 тысяч слов обвязки: что за монстр получился
Я как-то вечером решил посчитать, сколько вспомогательного контента написал для агента. Сел и офигел.
Только файлы скиллов (SKILL.md): 16 474 слова. Вспомогательные инструкции (references, agents, yaml-конфиги): 40 488 слов. Суммарно больше 57 тысяч слов. Это, на минуточку, объём небольшой книги. Написанной для того, чтобы AI-агент мог нормально работать с одним движком. За основу были взяты наработки из https://github.com/indiesoftby/defold-agent-config
Что там внутри? Скиллы по работе с конкретными подсистемами Defold: GUI через Druid, экранная навигация через Monarch, анимации через tweener. Референсы архитектуры проекта. Шаблоны типовых решений. Описания, что можно делать, а что нельзя. Паттерны обработки ввода. Правила именования. И ещё куча всего, что я дописывал по ходу дела каждый раз, когда агент наступал на очередные грабли.
Проект на Defold использует Lua как основной язык, экранную архитектуру через Monarch и UI через Druid. Ключевые библиотеки (на момент разработки): druid 1.1.6, defold-event 12, monarch 5.2.0, defold-tweener 4. Для dev-процессов: bob.jar, shell-скрипты сборки и Playwright для smoke-тестов HTML5-версии. Всё это тоже нужно было описать агенту.
MCP-стек: Context7, Playwright, Figma
Помимо скиллов, я активно использовал MCP-серверы. Там всё вышло неоднородно.
Context7. Штука полезная, когда работает. Агент может лезть в документацию Defold прямо из сессии. Проблема в другом: он почему-то может отказаться от поиска через Context7 «в пользу сохранения контекстного окна». Типа, экономит токены. Приходилось костылить в промптах, прописывать жёстко, что если видишь неоднозначную информацию, иди и проверь в Context7.
Playwright. Вот тут прям удачно получилось. Я написал дополнительные скрипты, чтобы агент мог сам запускать сборку билда и тут же открывать HTML5-версию в браузере. И через Playwright он интерактивно взаимодействовал с игрой: переходил на уровни, кликал по кнопкам, проверял, что механики работают. Агент не просто писал код, а мог сразу его протестировать в живой игре.
Figma MCP. А вот тут облом. Я потратил два с половиной вечера, чтобы набросать UI в Фигме. Обрадовался: теперь агент видит расположение и размеры элементов не только через мои эталонные скриншоты, но и через API Фигмы. Гораздо точнее, гораздо удобнее.
А потом узнал, что бесплатный тариф Figma даёт 6 вызовов MCP на Starter-плане. Шесть запросов в месяц. Я их потратил за один вечер и очень расстроился. Эталонные скриншоты вернулись в строй.
Что реально сработало
Но не всё было адом. Кое-что зашло отлично.
Базовые механики. Основная логика «три в ряд» получилась с первого раза. Агент накидал рабочую систему: поиск совпадений, удаление, гравитация, заполнение новыми элементами. Как ранний прототип на фреймах, прям хорошо. Я не ожидал, что он так быстро справится с game-специфичной логикой.
Паттерн обновления знаний. Пожалуй, главная находка всего эксперимента. После каждой задачи я делал «наброс» для агента: что конкретно в этой сессии ему помогло из знаний, а что стоит добавить или обновить. Допустим, агент нашёл что-то полезное через Context7, через веб-поиск или в референсах других игр. Использовал это в решении, и решение сработало. Ок, значит фиксируем. Переписываем скилл, добавляем новый паттерн. Мы обновляли скиллы по несколько раз, и каждая итерация делала следующую сессию чуть продуктивнее.
Референсы от команды Defold. Очень помогли примеры игр, которые выкладывает сама команда разработчиков движка. Плюс то, что нашлось в open-source. Когда агент видит рабочий код на Lua в контексте именно Defold, а не абстрактные примеры из учебника, качество его решений заметно растёт.
Визуал, дебаг и бесконечные циклы страданий
А теперь про то, от чего я реально устал.
Визуал и UI. Вот тут караул. Кидаешь агенту скриншоты эталонного интерфейса, показываешь, где лежат нужные PNG-файлы, объясняешь структуру GUI. Он делает... что-то. Формально похожее. Но слои перепутаны, элементы перекрывают друг друга, кнопки некликабельны, размеры поплыли. Каждый раз приходилось идти руками и исправлять. Агент не понимает визуальную иерархию в .gui-файлах Defold так, как понимает, скажем, CSS. Для него это набор координат и свойств, а не «вот тут кнопка должна быть поверх фона и реагировать на тап».
Дебаг-циклы. Вот где сгорело больше всего токенов. Я ожидал, что агент будет выполнять полную цепочку: имплементация → проверка → фикс. И формально он это делал. Но проверка часто сводилась к тому, что он принимал своё первое решение за эталонное и переставал искать проблемы.
У меня была идея автоматизировать это: скриншотное сравнение. Есть эталон, есть текущее состояние, если diff высокий, агент крутит дальше. На практике это привело к ещё более длинным циклам. Агент мог крутиться час, сжигая лимиты подписки, и не продвинуться ни на шаг. Мне проще было самому зайти, протестировать, выписать баги, собрать консольный вывод и отдать ему на доработку. Человеческие глаза за 5 минут находили то, что агент искал 40 минут через автоматику.
Цифры по проекту
Посчитал финальные цифры.
- 17 346 строк кода в 68 файлах (.lua, .script, .gui_script)
- Из них: main 11 190, screens 5 111, popups 1 045
- Это физические строки, включая комментарии и пустые
- 57 000+ слов вспомогательных инструкций для агента
- На момент написания в Defold нет официальных инструментов для работы с AI-агентами. На форуме пара тем от энтузиастов, но от разработчиков движка тишина
17 тысяч строк за разумное время я бы в одиночку не написал. Это честно.
Что осталось за бортом
17 тысяч строк звучат внушительно, но по факту готового в прототипе немного. Стартовый экран, экран настроек, игровое поле с бустерами. Всё. Это весь результат за несколько вечеров эксперимента.
Адаптивность так и не получилась. Плюс-минус рабочая версия вышла только для ПК. Мобильная вёрстка в .gui-файлах Defold и без AI задача нетривиальная, а агент с ней вообще не справился: элементы разъезжались, пропорции ломались, тач-зоны не совпадали с визуалом.
Звуковую систему и музыку тоже не удалось подключить нормально. Агент накидывал код, формально он компилировался, но на практике звуки либо не проигрывались, либо накладывались друг на друга. Я не стал тратить на это ещё вечера и отложил.
Отдельная боль: интеграция SDK сторов. Yandex Games, CrazyGames, всё, что нужно для дистрибуции HTML5-игры. Там свои SDK с авторизацией, рекламой, лидербордами. Агент про эти SDK практически ничего не знает, в его обучающих данных этого либо нет, либо слишком мало. Попытки закончились нерабочим кодом, который проще было выкинуть, чем дебажить.
В итоге прототип остался именно прототипом. Ядро геймплея работает, но до чего-то, что можно залить в стор, расстояние огромное.
Выводы: можно, но зачем
Вернусь к тому, с чего начал. Это был эксперимент. Не попытка сделать продукт, а способ руками пощупать границы того, что сейчас возможно. Я не пытался доказать, что AI заменит геймдев-разработчика. И даже не ставил вопрос так. Мне было интересно другое: как именно человек и агент могут друг друга усиливать. Не конкуренция, а симбиоз. Два разных типа интеллекта, каждый со своими сильными и слабыми сторонами, работающие над одной задачей.
И вот что я увидел. Связка работает, но совсем не так, как рисуют в демках. Агент берёт на себя объём: накидать базовые механики, сгенерировать шаблонный код, обработать рутину. Человек берёт на себя качество: визуальную иерархию, UX-решения, финальную отладку, и, что оказалось критично, постоянное обучение самого агента через обновление скиллов и инструкций. Это не «AI пишет, а ты смотришь». Это совместная работа, где каждый вкладывает то, чего у другого нет.
Ни один из нас в одиночку не вытянул бы этот прототип за то же время. 17 тысяч строк кода я бы не написал за несколько вечеров. А агент без моих 57 тысяч слов обвязки не собрал бы ничего рабочего. Это и есть симбиоз: каждый закрывает слабые стороны другого. Не замена, а усиление. И именно это я хотел проверить, когда начинал этот эксперимент.
Если прям запариться, делать игры с AI-агентом на Defold возможно. Это не фантастика. Базовые механики пишутся быстро, и тут агент реально помогает. Но всё остальное – визуал, UI, отладка, финальная полировка – это ручная работа, приправленная бесконечным контекстным инжинирингом.
Это точно не вайб-кодинг. Это сложная, монотонная, рутинная работа. От которой лично я не словил кайфа к концу эксперимента. Может, с более популярным стеком было бы проще (спойлер: да! скоро выйдет статья про подобный эксперемент но уже в phaser), там модели знают язык и экосистему гораздо лучше. Но с нишевым инструментом вроде Defold + Lua вы получаете все накладные расходы AI-разработки и минимум её преимуществ.
Если всё-таки решитесь:
- Закладывайте время на обвязку. Много. Скиллы, инструкции, референсы, это не опционально, это обязательная часть работы
- Используйте Playwright или аналоги для автотестов. Настройка съест день, но агент, который может сам запустить и проверить, в разы полезнее слепого кодера
- Не надейтесь на автоматическое скриншотное сравнение. Я пробовал, агент крутился час. Человеческие глаза пока быстрее
- Паттерн «обновляй знания после каждой сессии» – лучшее, что я нашёл для долгих проектов. Без него каждая сессия как первая
- Проверяйте лимиты MCP-сервисов до того, как встроите их в процесс. Шесть вызовов Figma на весь план, это грустно
Я не уверен, что повторю этот эксперимент c Defold. Но опыт получил ценный. Теперь точно знаю, где проходит граница между «AI пишет код» и «AI делает продукт». Эта граница – в визуале, в UX, в кнопке, которую агент раз за разом кладёт под спрайт, сколько бы ты ни объяснял. Она пока никуда не сдвинулась.
Если у вас был опыт прототипирования игр с AI, на любом движке, расскажите в комментариях. Интересно сравнить, насколько стек влияет на результат.