Бутылка вина, 4 часа моей жизни и убитые нервы — как я заставлял ChatGPT-5 делать мне игру. ЛОНГ
Синопсис
Совсем кратко обо мне: 10+ лет в геймдеве, в основном геймдизайнером, лидом дизов и продюсером. Один раз даже проработал нарративщиком полтора года (и мненно поэтому я ставлю длинные тире, а не из-за написания нейронкой) — в целом, в играх немного разбираюсь.
AI'шки в работе начал использовать как только они появились. Но очень вдумчиво, понимая, какую пользу от них можно получить и какой вред они могут нанести. Про то что использую на постоянке, как нейронки меняют геймдев, а также, что нам со всем этим делать можете посмотреть в видео у меня на канале. Зацените, я даже не стал вставлять видос отдельным блоком — думаю это заслуживает уважения!
Как только OpenAI выпустили новую модель чатаГпт, понеслись разные отзывы: кто-то восхищался технической частью и лучшим пониманием кода — опять начали предрекать смерть кучи профессий; многие бугуртили на тотальное отупение гуманитарной и лингвистической части модели, а я... я открыл вино (18+ пацаны, слышите!) и решил что ПОРА!!!
Коварный план
До этого я долго работал с Unity, последние три года — с Unreal. Кодить могу, но не так, чтобы с ходу сделать GTA VI. Простенький прототип — да, сложную игру — не сегодня.
И в игровых движках у нейронок своя специфика: да, местами они СИЛЬНО помогают, но из-за игровых условностей и ограничений работать с ними не так легко, как в другом "кровавом энтерпрайзе". Да и модели там нужны другие, openAI обычно были не главными игроками.
Но вот же: перед нами новая версия, которая обещает убить всех мидлов и джунов почти во всех сферах! Разве может Сэм Альтман врать?! Я понял, что на этот раз обязан всё проверить сам! Я налил первый бокал и набросал цели и список условий для своего эксперимента:
Цель: собрать готовый билд игры без навыков программирования, прикинувшись абсолютным нубом в коде, дизайне и геймдеве
- При том, что игра должна быть любого качества, она должна быть играбельной, проходимой и иметь цель и средства её достижения, т.е... быть игрой
- С нейронкой общаюсь только на русском
- В код не лезу
- Делаю не в движках, ограничен тем, что сделает сама нейронка
- Не использую стороннюю графику
- Не использую хаки и всякие специальные промпты, общаюсь чисто по-человечески
- Ссылка на то что получилось в конце статьи
Этап принюхивания
Выбор пал на раннер. Можно было бы схитрить и сделать карточную игру со статичной сценой(в сто раз проще), но мы же тестируем глазами «простого игрока», а не хитрожопого геймдиза. Так что я создал новый чат и решил вежливо уточнить у нейронки, не дофига ли я хочу:
О, думаю я: сразу предложила в одном файлике сделать, да ещё и про стиль спросила и про физику. Неужели это всё можно реализовать на html-5? Давно я на веб-технологии не смотрел...
В общем, я расписал словами, что хочу получить и скомандовал запускать шайтан-машину!
Первые шаги
Система генерит код в отдельном фрейме (канвасе) — можно скачать, пошерить или запустить прямо там. Для HTML — вообще красота: нажал кнопку и тестируешь. Выглядит как-то так:
Я, преисполненный оптимизма и готовый выпускать по игре в неделю, нажимаю "Run code" иииии... ничего... буквально, код пропадает и просто тёмный экран.
Глоток вина.
Ну, если честно, примерно к чему-то такому я и был готов. И на это у меня уже был заготовлен ответ:
Итак, собственно, этот экран показывался, но ничего не работало — кнопка "Старт" не нажималась и ничего не двигалось, о чём я сразу же и сообщил чату в самых простых словах. Сообщил об этом спокойно — в бокале ещё больше половины.
Первые успехи
В следующей итерации кнопка старт работала, но это и было единственным, что происходило в "игре":
Однако, что тут интересного: AI'шка сама сделала поля с текущиим и максимальным счётом, хотя напрямую об этом я не просил. Также, она добавила блок с правилами. Значит, думает наперёд — уже плюс.
Лайфхак, который понял сразу:
Часто, лучше кинуть в чат скриншот проблемы с минимальным описанием, чем пытаться описать всё очень подробно
Итак, ещё пару глотков вина, ещё одна итерация через неработающую кнопку "старт" (это вообще стало постоянной проблемой, именно эта кнопка всё время ломалась), я получил вот такой результат:
Что тут было:
- Какой-никакой интерфейс
- Условное разделение на "землю" и "небо"
- Главный персонаж, который мог ПРЫГАТЬ по нажатию пробела
- И это всё, больше ничего не происходило и не двигалось
Пффф, отстой — скажете вы. А тот, кто пытался сделать свою игру с нуля, особенно где-нибудь в 2000х, понимает, что это уже немало! А у меня это заняло полчаса и полбокала вина.
Вот что получилось через ещё пару очень простых промптов:
Что у нас тут:
- Бэкграунд по которому ДВИЖЕТСЯ главный герой (ну, точнее, бесконечно движутся и генерятся препятствия, но это детали)
- 2 типа препятствий: ящики и... что-то летающее, столкновение с которыми заканчивает игру
- 1 тип препятствий (яма/лужа), которые игрой никак не обрабатывались
- Счётчик очков, который начислял очки за работаюшие препятствия и локально сохраняет твой рекорд
- Перезапуск игры после поражения
В целом, это всё стало похоже на игру, а шёл всего-то второй бокал вина. Промпты в этот период были максимально простые, по типу:
или
Это был наш медовый месяц — мы понимали друг друга с полуслова и казалось, что впереди у нас безоблачное будущее и вечная любовь до цифрового гроба.
Проблемы в отношениях
Всё началось, когда я попытался поправить прыжок. Сейчас красный кубик за доли секунды подлетал вверх и так же мгновенно опускался вниз.
6 промптов я умолял бездушную машину пофиксить прыжок, умолял посмотреть, как это делают в других платформерах и объяснял что хочу. Каждый раз я получал обстоятельные ответы и уверения, что всё поправлено:
Но в самой игре ничего не менялось. Вообще. Всё оставалось, как и было.
Знаете, когда вы уже женаты какое-то время и романтическая пелена начинает спадать — вот это вот чувство. Твоя жена делает какую-то бесячую тебя мелочь, например, упорно покупает в магазине только чипсы, которые ты ненавидишь. Или никогда не закрывает дверцу шкафчика на кухне и ты всегда вхерачиваешься в неё головой. Ты уже сто раз просил так не делать, но всё остаётся по старому — вот так я себя чувствовал...
И я начал пить... А, стоп, я же пил и до этого... Кхм, итак, с очередным бокалом вина я сдался и попросил AI'шку прописать конкретные переменные в коде, сказал за что они должны отвечать и как взаимодействовать с игроком. Получился какой-то такой список:
И тут нас ждёт следующий урок: AI часто не понимает “приблизь к реальности”, или сделай "вот так" потому что у неё нет внутреннего понятия “нормы”. Да, нейронка смотрит на референсы, но не может подробно разобрать их, если специально не заточена под это. Ты — её единственная точка опоры в этом мире, а потому:
Если что-то упорно не исправляется — перестаньте говорить “сделай лучше”. Говори в цифрах, конкретике. AI всё ещё любит точные инструкции, а не общие пожелания
И уже после этого всё начало работать. Я просто просил выставить разные значения и прыжок отлично регулировался. Может быть и можно было заставить машину сделать всё по рабоче-крестьянски, своими словами, но тут я не затащил.
Я выдохнул, глотнул вина и решил сделать простейшую вещь, перед тем как начать заниматься графикой — убрать синие полоски с земли, которые всё равно не работали как препятствия. Кто же знал, что это будет началом самой большой проблемой и нашей с AI'шкой ссоры, в которой я даже сорвусь на неё...
Отношения под угрозой
И вроде-бы — то, что я и хотел, вот только была одна проблемка — весь код игры удалился из канваса.
Я, всё ещё вежливо, указал своей помощнице на это досадное недоразумение, на что получил самопокаяние и признание ошибки
Ну хорошо, думаю, код вернулся, вот только... его в 4 раза меньше, чем было в последнем файле. Ну и естественно, ничего не работает.
Мне это нравится всё меньше и меньше и я говорю AI'шке вернуться к последнему рабочему файлу (вино на нервах льётся внутрь).
И вот тут в электронных мозгах что-то идёт совсем не так. Нейронка вообще удаляет канвас, весь код и начинает давать мне объяснения в отдельных мини-блоках, при этом держа где-то у себя в памяти, что какой-то файл всё-таки есть.
У AI-чатов до сих пор случается такая штука как "контекстный ступор" — это когда беседа пошла куда-то не туда и, что бы ты не делал, в этом конкретном разговоре на правильный путь ты уже не выйдешь.
Самый лучший выход — или начать новый чат или вернуться к точке сохранения, если ты её делал.
Обязательно создавайте контрольные точки! Просите AI'шку запомнить файлы/состояния/информацию на данный момент времени, давайте ей название и говорите об этом однозначно!
Это сбережет вам кучу нервов, когда нужно будет откатиться до чего-то рабочего.
К счастью, у меня такая контрольная точка была. Я откатился к рабочему файлу и уже в нём получилось убрать синие полосы. Причём без каких-либо проблем, простым промптом.
А это нам говорит о чём? А о том, что нейронку может переклинить когда угодно и на чём угодно и следить за этим надо очень пристально. Главное, чтобы рука, наливающая новый бокал не сильно тряслась...
Второй медовый месяц
Ну да ладно, мы же получили более-менее рабочую игру и настало время заняться графикой.
Помните как выглядела игра: чё-то там квадратики и примитивы — вообще не дело!
И вот тут, надо признать, AI'шка проявила себя наилучшим образом
И вот что она выдала:
И тут я почувствовал, что моя AI'шка может быть романтичной: по солнечному небу плывут облачка, море на фоне, симпатичный ГГ, у которого даже есть тень при прыжке и анимация пыли при приземлении — и это всё в одном файле на чистом html-5 — ну красота же!
На секунду я подумал: «Может, мы всё-таки сможем?» Но потом вспомнил, что она уже два раза пыталась удалить весь код... и всё же...
Что мы поняли? А то, что некоторые вещи можно отдавать на откуп нейронке, но нужно чётко понимать — какие.
Миг, когда я сломался
Оставалась одна проблема, но именно она меня доломала, заставила добить бутылку вина и показала, что не всё так просто пока что с вайб-кодингом.
Этого было не видно в примере, но при запуске игры примерно 2 экрана было совсем без препятствий и только когда ГГ преодолевал это расстояние, они начинали появляться — такое допускать было нельзя и я попросил AI'шку это недоразумение пофиксить.
И тут стал понятен самый главный минус такого вайбкодинга
Пока ты просишь сделать что-то с нуля или описываешь глобальную задачу — всё неплохо. Но как только ты начинаешь решать точечную узкую проблему — начинается *здец
Где-то к этому моменту я сидел в наушниках и промпты наговаривал голосом, а во мне сидело уже пол бутыли вина и это, в свою очередь, снижало порог моего терпения.
Генерить первые препятствия раньше нейронка не хотела ни в какую. Через несколько попыток она опять начала удалять весь канвас с кодом и оставлять там какую-то одну функцию — и эир в лучшем случае. Это происходило каждый раз и в какой-то момент я не выдержал:
К чести моей помощницы, она сама признала, что заслужила такое обращение
Но, несмотря на признание ошибки, к решению проблемы мы не приблизились. То ли возникли проблемы из-за объёмного контекста, то ли сказались технические проблемы на старте, но чуть-ли не через каждый промпт канвас стирался — мне приходилось откатываться на контрольную точку пробовать делать что-то заново.
Я уже подозревал, что AI'шка делает это мне назло, но, конечно, это не оправдывает моё свинское поведение... тем более, скоро оно станет хуже.
В итоге, я двигался микро-шажками:
- Сделал так, чтобы 1 объект спавнился ближе
- Сделал так, чтобы группка объектов спавнилась ближе
- Сделал так, чтобы остальная цепочка объектов подтягивалась через экран к первой группке высчитывая координаты
К чему такие сложности? Нельзя было просто подтянуть спавн объектов ближе к ГГ или спавнить ГГ ближе к объектам? Ну... я пытался. Вот только некоторые мои крики бессилия:
Как будто мы 20 лет женаты и задолбали друг-друга до невозможности. Я орал на неё, она говорила, что сама виновата, но или не меняла ничего или меняла очень маленькими шажками. Знакомая картина? Да, я думаю, что нам пора на семейную терапию.
Воссоединение семьи
Но, так или иначе, условия эксперимента соблюдены — я всё ещё не лез в код, просто словами надиктовывал алгоритм того, что нужно сделать. В итоге, методом маааленьких шажочков я нашёл способ пофиксить проблему и выдохнул. Вино почти закончилось.
Где-то на этом этапе мы с AI уже перешли в стадию “брак по расчёту”: я знаю, что без неё не справлюсь, а она знает, что я всё равно вернусь, даже если уйду.
Дальше осталась чистая косметика: сделали с моей, уже родной, АИ'шкой симпатичное главное меню и ещё чуть импрувнули графику. Как я уже говорил, с графической частью проблем было меньше всего и там всё было несложно. Ну, а неработающую кнопку "старт" я привык фиксить уже на автомате:
Выводы и ссылки
Саму игру залил на гитхаб, в неё можно потыкать прямо в браузере:
Кстати, её можно потыкать и через мобилку — ничего для этого я специально не делал.
А ещё, у меня есть канал на ютубе, где я рассказываю про игровую индустрию изнутри, про геймдизайн и про другие интересные штуки. Буду благодарен за подписку.
Можете и на телегу подписаться, там более отвлечённые штуки, в основном про (медиа)культуру и мои наблюдения: разница между эмпатией и эмоциональным интеллектом, плюсы в отношениях для СДВГ-людей, ну и просто всякие события из моей жизни и мемчики:
Итак, что я вынес из моего эксперимента:
- AI — шикарный вход для новичков. Идеальный инструмент, чтобы заинтересовать того, кто не умел кодить/дизайнить и вовлекать его в индустрию через получение быстрых, но сразу рабочих микро-результатов
- Чем больше ты понимаешь в дизайне, программировании и нейронках — тем проще тебе будет добиться нужного результата
- Связка AI для обучения + мгновенная проверка знаний на практике будет рулить в ближайшие годы. Причём практика будет стоять ПЕРЕД обучением, а не как в классической системе образования
- Любите чекпойнты. Живите чекпойнтами
Дальнейшие планы: релиз ChatGPT-5 получился сыроватым, но уже он дал достаточно инструментов, чтобы собрать простенький прототип в вебе. Я попробую допилить его вместе с нейронкой, а также, попробую что-нибудь навайбкодить уже в движках, следите и не переключайтесь!