Почему у тебя не получится завайбкодить игру за час? Рассказываю на своем опыте

от автора

Всем привет! Меня зовут Саша, и я ML‑инженер. Современная разработка ML‑пайплайнов это уже давно не только обучение моделей. Хороший ML‑инженер, помимо всего прочего, пишет backend‑сервисы, настраивает Docker, занимается деплоем моделей, и иногда даже пишет автотесты для своих решений.

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

Смогу ли я сделать что‑то прикольное и полезное в отрасли, максимально далекой от меня?

Геймдев — как раз отличный вариант. Для меня разработка игр — это что‑то из разряда полета на Нептун. Ты вроде бы понимаешь как там примерно должно все работать, но абсолютно незнаком со спецификой. Как и на другой планете, в геймдеве приходится адаптироваться к новым условиям и правилам. Относительно ML‑инженерии — здесь свои физика и атмосфера.

Я решил, что жизнь сама по себе недостаточно страшная, и выбрал хоррор в качестве жанра. На самом деле, основным источником вдохновления послужили видео с воодушевляющими заголовками наподобие

«Как я завайбкодил лучшую в мире хоррор игру за час»

К сожалению или к счастью, впоследствии я на своей шкуре убедился, что не все так просто. Но об этом чуть позже.

Идея, которая была у меня в голове, достаточно простая. Игрок является частью психологического эксперимента, и его цель — держать себя под контролем и не паниковать. Правила простые: сохранять спокойствие, не трогать то, что не нужно, делать как надо, а как не надо — не делать. Из этой идеи выросла и главная механика игры — шкала паники. Слишком долго смотришь на триггерный объект, убегаешь вместо того чтобы идти спокойным шагом, прячешься в темном углу — шкала ползет вверх, и на максимуме тебя настигает скример (объект твоего воображения). В большинстве хорроров ты убегаешь от монстра. Здесь же ты стоишь с покерфейсом до тех пор, пока монстр не убежит от тебя сам. Проигрывает не тот, кто медлит, а тот, кто не смог удержать себя в руках.

У каждого свой вайб. Лично у меня это вайбкодинг,

поэтому буквально с первых секунд разработки я подключил Claude Code. Соответственно, бюджет игры — самая дешевая подписка и пачка сникерсов (без них бы ничего не вышло). В качестве игрового движка было решено использовать Godot — он опенсорсный, хайповый, а также мне понравился синий чел с авы приложения) Игра писалась на языке самого движка (GDScript), а также активно использовался Python для генерации некоторых фичей, таких как звуки объектов. Концепция игры реализовывалась через самые разные игровые механики. Примеры:

  • записки‑ловушки, которые нельзя читать до конца

  • странные картины, на которые лучше не смотреть

  • непонятные существа, которым нельзя показывать свой страх

На текущий момент в игре, помимо огромного количества скримеров и багов, реализовано пять уровней: лаборатория, заброшенный дом, отель с длинными коридорами, закулисье и, наконец, пустота. Каждый уровень чуть дальше уводит от привычной реальности: от всеми нами знакомых коридоров до абстрактных пространств, которые перестают иметь смысл. Если покажется, что путь пройден до конца — рано радоваться. Эксперимент, вполне вероятно, еще не завершен. Перед полноценным релизом первой версии игры предстоит еще немало работы. Тем не менее уже на текущем этапе реализации игра неплохо отражает свою суть.

Скример на уровне "Пустота"

Скример на уровне «Пустота»

Выводы и инсайты, к которым я пришел на текущий момент:

  • Модель решает. Звучит банально, но это, на самом деле, неочевидный вывод. Ни в каких других своих проектах я не видел настолько большой разницы между Sonnet и Opus. Здесь же Opus не оставляет шансов — фиксит баги, которые Sonnet просто не видит, и делает гораздо более комплексные и интересные фичи. Fable же за одну итерацию сделал что‑то невероятное — созданный им уровень был на три головы выше, чем то над чем Sonnet трудился днями‑ночами. Справедливости ради, к этой итерации я подготовился основательно. Зная сколько фабл жрет токенов, я понимал, что второй попытки у меня не будет в рамках этого же дня. Только потом выяснилось, что второй попытки не будет до начала июля)

  • Модель не видит того, что видишь ты. Самое болезненное ограничение: агент по умолчанию не видит редактор Godot. «UI съехал куда‑то не туда». Без скриншота — это десяток итераций вслепую, а один скриншот решает вопрос за раз. Это как раз пример ситуации, где Opus меня выручил. Sonnet до конца отказывался запускать Godot самостоятельно для тестирования и дебага решений, в то время как Opus решил не выпендриваться. Как говорится, любой каприз за ваши токены)

  • Здравый смысл никто не отменял. Значительная часть багов была не про код, а про пространственное мышление. Например, в начале я даже не мог зайти в комнату и прочитать записку при наведении курсора мышки. Спуск в подвал уехал куда‑то вверх, а не вниз. Код при этом был абсолютно правильный, а неправильной была картина мира в голове у модели (возможно, ее учили в инвертированном пространстве). Вайбкодинг он такой, суровый)

  • Тестировать — значит играть. Для уровня, на котором ты застрянешь как джун при поиске первой работы, автотесты могут проходиться с большим удовольствием. Чистый билд не говорит ничего о том, дойдешь ли ты от старта до конца. Один уровень был полностью непроходим из‑за адской механики монстра, и узнал я об этом только когда примерил на себя роль ручного тестировщика.

  • Референсы — это не только картинки. В референс полезно брать элементы хоррор‑игр целиком: механики, ритм, атмосферу, и то, как именно они пугают. А еще 2d‑картинка отлично работает как якорь, вокруг которого потом собирается 3d‑сцена.

Если резюмировать, вайбкодинг — это не про то, как модель сделает все за тебя. Это вполне себе стандартная инженерная работа, где модель берет на себя лишь рутину, а на тебе остается то, чего она пока не умеет — видеть, проверять и думать головой. В целом, все как и в любой другой разработке (как бы печально это не звучало). У меня не получилось идеально завайбкодить игру с нуля за час, но у меня получилось сделать свой проект, который мне как минимум понравилось создавать и не стыдно показать друзьям и даже коллегам!

Ну и вернемся к заголовку: почему не получится завайбкодить игру за час?

Потому что часовые ролики, которые меня так сильно вдохновили, показывают только красивый результат и умалчивают про десятки часов, которые к нему привели: набитую руку, готовые текстуры и аудио, заранее изученные механики. У меня на прототип ушло куда больше часа (и куда больше дня, please help), и это при том, что львиную долю рутины делала модель.

Пример сгенерированной текстуры какая же она шикарная омагад

Пример сгенерированной текстуры какая же она шикарная омагад

В чем же секрет успешного успеха блоггеров, которые за час создают неплохие игры:

  • Опыт. Эти люди зачастую знают, как правильно писать промпты, генерировать текстуры, создавать 3d‑модели, и так далее. Они конкретно погружены в специфику геймдева, им не нужно ориентироваться на ощупь, опираясь лишь на здравый смысл и опыт из других доменных областей.

  • Понятные референсы. Игры, которые я видел — это в большинстве случаев ремейки известных игр, таких как Slenderman, Granny, или Subway Surf (в последнюю особенно не рекомендую играть слабонервным). В этих играх как минимум вдоль и поперек изучены все механики, и можно использовать их в качестве референсов для создания своего проекта. Как максимум — не исключаем возможность существования open‑source репозиториев, которые можно просто беспалевно склонировать. Никогда такого не было и вот опять)

  • Магия монтажа. Час на видео — это не обязательно час реальной работы. За кадром вполне возможно остаются написания промптов, провалившиеся попытки, гугление ошибок, и все то, что в реальности съедает больше всего времени. Показать зрителю красиво и складно — часть профессии блоггера, но хронометражу, исходя из моего личного опыта, было зачастую достаточно сложно верить.

Если что, я ни в коем случае не преследую цель обесценить их труд и результат. Они большие молодцы, и мне действительно есть чему у них поучиться. Помимо этого, они замотивировали меня попробовать реализовать что‑то в абсолютно новой области, о чем я впоследствии ни секунды не пожалел!

На этом у меня все) В следующий раз я детальнее расскажу про техническую сторону разработки игры, а также про то, как я промптил модельки для генерации кода и текстур. Кстати, я также веду тг‑канал, где, помимо всего прочего, буду писать про свои успехи в проектах. Спасибо за внимание, всех буду ждать: https://t.me/krasnorechivyy_ch

Спойлер, о чем я буду рассказывать в следующем посте)

Спойлер, о чем я буду рассказывать в следующем посте)

ссылка на оригинал статьи https://habr.com/ru/articles/1056858/