Могут ли гуманитарии делать видеоигры? Или как я пытался делать игру в GDevelop с помощью ChatGPT...

Обложка для стартового меню моей игры, всхрюченная в нейросети
Обложка для стартового меню моей игры, всхрюченная в нейросети

Если вкратце, то я решил заняться разработкой видеоигр. Без окрыляющих амбиций (из этого давно вырос), но тем не менее. Так как не умею программировать, пользовался помощью нейросетей. Что у меня получилось в итоге? Ответ будет в этой и в последующей статье на тему. Приятного чтения.

А вообще выпускать этот материал поначалу вообще не хотел. Переживал о том, насколько токсичной будет реакция людей. Потом всё-таки решился. Но честно признаюсь, писать об этом сложно, ибо делал я всё без советов и подсказок, сам спотыкался по пути, наступал на грабли итп. Со стороны всё это может выглядеть глупым и нелепым. Даже мне бы так показалось, читай я всё это со стороны. Но пока сам в этот омут с головой не залезешь, не поймёшь.

Поэтому первым делом я хочу выразить своё уважение всем разработчикам видеоигр - даже плохих. Какая бы всратая игра ни получилась, сколь ни злись из-за этого, будучи игроком, но даже сырой и халтурный продукт ещё надо постараться сделать, хоть в каком-то виде довести хоть до какого-то ума, а потом ещё осмелиться показать это на публику. Разработка видеоигр (даже самых плохих) - это действительно колоссальный труд, который лично я начал по-настоящему ценить только после того, как сам засел за разработку, пусть и с нейросетями.

Далее хочу сказать, что пришёл я к этому не сразу. Да, желание было всегда, потому что сам играл в игры, подмечал детали, видел недочёты и мысленно рассуждал, как их можно было бы исправить. А ещё писал художественную литературу (поэтому лью так много воды в статьях). Когда сам пишешь, то считаешь, что диалоги у тебя выходят, как минимум, не хуже, чем у других.

Но без знаний программирования и друзей программистов, которые напишут всё за тебя, всем по сути наплевать, какие у тебя есть желания, а также какие классные истории ты сочиняешь. В студию разработки без портфолио тебя на работу возьмут, только если твоя книга - бестселлер. А чтобы было портфолио, нужно самому уметь писать код.

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

Всё изменилось, когда чисто случайно наткнулся на статью про программирование приложений без кода. Типа конструктор. Взял и сделал приложение для записи клиентов. Взял и сделал свой сайт без кода. Круто же! Тогда и подумал, чёрт возьми, неужели нет аналогичных движков для создания видеоигр?

Так я и познакомился с Construct 2. Для своего времени потрясающая штука, так как делать видеоигры, кажется, прежде никогда не было так просто. Достаточно посмотреть видеоуроки, и уже начинаешь какие-то вещи понимать.

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

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

В итоге проект моей игры был вновь отложен в долгий ящик, пока не появился Chat GPT. С ним сбылась мечта ленивого идиота, благодаря которому игры теперь может программировать даже самый конченый и невнимательный гуманитарий как я. Впрочем, скажу сразу - даже с такими возможностями как у Chat GPT делать всё это я таки не решался.

Но когда решился, первым делом отбросил Construct 2 и 3 как возможные движки для будущего проекта бюджетом в пачку сухариков, так как 25-40 бесплатных ивентов - это апогей кринжа и абсурда. Unity пока ещё казался мне слишком сложным. Тогда я активно начал гуглить альтернативы типа Godot или Game Maker, но в конце остановился на GDevelop, так как его интерфейс был предельно похож на конструктовский, будто разрабатывали одни и те же люди. И так как Construct 2 и 3 уже были мне знакомы, другие варианты мной не рассматривались.

И вот у меня есть GDevelop, есть ChatGPT. Я во всеоружии и готов атаковать. Костыль первый заключался в том, что бесплатная версия ChatGPT была ограничена в количестве запросов и загружаемых в него файлов. Последнее для меня было жизненно необходимо, так как делал скриншоты. Их неограниченное количество можно было загружать только в бесплатную версию Google Gemini. Поэтому я перешёл туда.

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

Игра у меня была самая простая по задумке (как мне тогда казалось). Игрок управляет серым квадратом, убегает от чёрного, который пытается его съесть. Серый квадратик поедает жёлтые квадратики и набирает очки, иногда ест зелёный квадратики, которые замедляют чёрный. Иногда серый может наткнуться на красные кружочки, которые замедляют его. Также есть стены с широкими и узкими проходами, через которые чёрные квадратики пройти не могут. Короче говоря - более динамичный аналог Pac-man. Как мне показалось, в начале стоит сделать хотя бы так, а уже потом делать что-то более сложное и масштабное.

Почему квадратики и кружочки? Дело в том, что спрайты у меня уже были заготовлены, но в нормальном качестве я их загрузить в GDevelop так и не смог, сколько ни старался. С другой стороны, как видите по скринам, получилось даже в чём-то прикольно, как мне кажется. Ретро-эстетика...

Откуда появилась такая цветовая гамма? Дело в том, что есть нейросеть Roserbud AI, которая генерирует игры по запросам. Делает она это ну просто максимально плохо (я пытался), поэтому даже желания лишний раз её упоминать не было. Но цветовые решения, предложенные Rosebud AI мне понравились, поэтому я сделал именно фиолетовый экран. Тем более, что только на этом оттенке спрайты смотрелись хорошо и не сливались с фоном.

Далее в разработке трудностей была масса от поиска нужных ивентов, до работы с переменными. И тут во всей красе, на мой взгляд, проявил себя Gemini, потому что он в отличие от ChatGPT по минимуму использовал переменные, которые, быть может, и давали гибкости, но иногда запутывали меня при разработке.

Но затем появился баг, который исправить с помощью Gemini я не смог. Десятки скриншотов, десятки запросов. В конце нейросеть от Google, будто бы издеваясь, написала, что поиск причины бага стал настоящим расследованием. Но стоило мне спросить насчёт поиска бага ChatGPT, как он тут же всё нашёл, но при этом стало понятно, что проект придётся переделать с нуля...

С тех пор я не просто стал пользоваться при разработке ChatGPT, но даже нашёл в себе силу избавиться от душащей жабы и купил платную подписку.

И вроде бы тогда всё пошло куда лучше, но вдруг оказалось, что множество запросов перегружают ChatGPT, и ответы стали приходить медленнее, отчего пришлось включать новые чаты и делать новые запросы. Не уверен, что это хорошо влияет на экологию (потому что множество запросов нагревают компоненты дата-центров, на охлаждение которых приходится тратить тонны воды), но красота, как говорится, требует жертв. Не судите строго. Тем более были проблемы и посерьёзнее, заключавшиеся в самой сути движков GDevelop и Construct.

Речь о Pathfinding. Казалось бы, самая простая вещь - надо научить чёрный квадрат обходить ловушки и стены. Что в этом сложного, если поставить - чёрный преследует серый квадрат, а все препятствия на пути невозможно обойти? Уверен, матёрые разрабы читают, да похихикивают. Ведь, как оказалось, это был самый сложный элемент в создании игры, который в GDevelop мне, кстати говоря, так и не поддался.

Главная проблема разработки ещё в Construct 2 у меня заключалась именно в Pathfinding. Дело в том, что при высокой скорости обхода препятствий там чёрный квадрат проскакивал сквозь стены. И вот хоть башкой ты треснись, самостоятельно я ничего исправить не смог.

В GDevelop эта проблема тоже присутствовала, но решилась сама собой, когда прошлые спрайты были заменены на нарисованные в редакторе квадратики. Зато появилась другая - границы спрайтов.

Мне так и не удалось настроить спрайты так, чтобы квадрат противника не залезал под стену. Поэтому всё время создавалось ощущение, что противник пролезает под стеной. С другой стороны, если у спрайтов расширить границы маски столкновений, при прохождении под некоторыми стенами игрок мог сделать так, чтобы чёрный квадрат его потерял (прилагаю GIF для наглядности).

Как ни настраивай, какие варианты ни предлагай, GDevelop не позволял всё это дело настроить адекватным способом. Поэтому в один момент я спросил ChatGPT честно: ты сможешь тут ещё хоть что-то сделать? Он честно ответил - нет.

В принципе этот баг был не смертельным. Достаточно было просто заставить игрока активнее двигаться, чтобы его серый квадратик выходил из невидимой зоны, дабы чёрный его увидел. С этой целью я даже планировал ввести шкалу голода - по сути бесполезную и даже вредную в чём-то; даже Chat GPT мне писал, что без здраво настроенного Pathfinding введение шкалы голода будет выглядеть халтурно. Ведь выглядело всё так, что баг очевиден, исправить его я не смог, но заставляю игрока схавать это, вынуждая бегать по карте без устали.

Тут нельзя не согласиться, и будь я игроком, у меня бы тоже бомбануло, но эта халтура могла сиюминутно реально помочь в моём случае сделать проект хоть в каком-то виде и роде играбельным. Да и подстёгивало меня желание как можно скорее всё закончить, ведь вот уже финал - близко, кажется, рукой дотянуться, и всё будет готово! Я в нетерпении: это же моя первая видеоигра, мечта стала реальностью, сбылась мечта идиота!

И в этот момент произошло самое страшное - я не сохранил проект. В принципе я к этому привыкши. Бывало, напишу рассказ, настрочив 12 страниц за день, а в конце забуду его сохранить (или будет вылет из Ворда), так что я к этому отношусь достаточно спокойно. Но в любом случае мораль басни такова, что не забывайте сохраняться - если возможно, на разных носителях и устройствах даже.

Так труд двух недель работы ушёл насмарку. Впрочем, ладно. Возможно, оно даже и к лучшему. Уделял я работе над игрой буквально один час в день, поэтому не две недели, а в совокупности 14 часов работы. В общем я не сильно расстроился. Тем более, что GDevelop не позволял нормально запускать музыку и звуки-эффекты, кроме уже заложенных в сам движок. И даже эта ситуация кричала, что с GDevelop пора закругляться.

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

Возможно, GDevelop отлично подходит для платформеров и визуальных новелл. Но с клонами Pac-man у этого движка, как и Construct есть серьёзные препятствия для разработки. Ну или я тупой, что, уверен, с радостью подтвердят комментаторы ДТФ.

И да, я знаю, что среди вас найдётся умник, который скажет - Ха, нашёл на что опираться! Чат GPT! Сам не можешь - и нейросеть никакая не поможет. А ведь надо было всего-то сделать так, да сяк, и всё заработает. И всё это, конечно, верно. Но точно не в моём случае. Да и как я потом прочитал, у разработчиков инди-игр к движку GDevelop уже давно были вопросики...

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

А закончу тем, что в Unity у меня сделать то, что я задумал, таки вышло. Удалось даже лучше, да настолько, что теперь не настолько стыдно всё это дело показать. Итогами разработки и тестовым билдом поделюсь в следующей статье на эту тему.

4
1
1