Как я решилась на релиз

Я наконец-то доделала свою первую игру, которую выложила в интернет. И это не платформер, не выживач, не рпг, не пискель-арт.

Уровень с широким Филом запустится если ввести код konami
Уровень с широким Филом запустится если ввести код konami

Это 2д-паззл.

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

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

1. Фон уровня подстраивается под картинку. Картинка делится на 4 части и из них я ищу цвет, который повторяется чаще всего. Фон — это градиент из четырёх цветов, которые чаще всего повторяются. У этой фичи есть несколько недостатков. Во-первых, такие вычисления лучше было бы делать шейдером. Я же буквально прохожусь по каждом пикселю картинки и сохраняю её цвет. Чем больше картинка, тем больше будет нагрузка. Но шейдеры пока что даются мне очень туго. Во-вторых тут лучше брать не самый часто повторяемый цвет, а общую цветовую гамму. Тёмно-фиолетовая картинка рискует получить чёрный фон без вкраплений фиолетового.

Как я решилась на релиз

Вот хороший пример этого недостатка. Синего/фиолетового тут полно, но разной насыщенности и оттенков.

2. Игровое поле. Выбираешь любую картинку — указываешь на сколько частей разбить её и собираешь. Идея простая, но тут оказалось несколько неприятный подводных камней. Во-первых, швы. Берётся картинка, нарезается на нужное количество частей и все они выстраиваются друг за другом. И так случилось, что иногда при разных параметрах количества секций — появлялись прорехи. Это происходило в тех случаях, когда высота или длина одной секции была не целым числом, а вещественным. Более наглядно эта проблема описана на этом сайте: 0.30000000000000004, вот как это могло выглядеть у меня:

Я пыталась округлять значения, но так вышло, что лучшим решением оказалось менять размер картинки. Если кратное двум, то всё нормально, если нет, то уменьшить размер на 1 пиксель. Во-вторых, поддержка редактора. Редактором уровней это назвать тяжело, но если вкратце, то ты просто выбираешь картинку, указываешь насколько её поделить, собираешь. Его было сделать не сложно, когда само поле уже было реализовано. Но и тут было всё не так гладко, как хотелось. Мне пришлось отказаться от этого редактора в версии для браузера, потому что файловый диалог предлагал выбрать файл не с ПК игрока, а с ПК, где игра расположена, что логично. И как я поняла, нужный мне файловый диалог вызвать можно, но там нужно как-то взаимодействовать с JS, поэтому я решила не лезть. Будет повод загрузить игру.

3. Арты людей из Artstation. Когда мне только пришла идея игры в голову, я хотела вооружиться нашумевшими ИИ и генерировать себе картинки, которые игроки будут потом собирать. Но в какой-то момент подумала, что было бы прикольно использовать работы художников. Когда у меня уже было что показать, я пошла шерстить Artstation в поисках ярких артов. Моим ориентиром был жанр Solarpunk, ибо он кажется мне весьма любопытным. Я провела не один час в поиске работ, проверяя как они будут смотреться. В итоге я написала где-то 20 людям с просьбой использовать арт, показав как их работа будет выглядеть в игре. И ответило мне… 3 человека. Первая художница дала добро и попросила потом дать ей ссылку на игру. Второй парень отказал, ибо я позарилась на работу, которую он делал на заказ, и предложил выбрать другую работу (в итоге смогли подобрать) . И третий просто отказал.

Расстроившись, я решила написать пост на реддите о том, что ищу художников. Потом запостила это в твиттер и на DTF, и попросила репостнуть Андрея Апанасика. Я следила за статистикой просмотров и на реддите и в твиттере. Показатели шли почти 1 в 1, но в какой-то момент произошёл разрыв больше, чем в 1к просмотров. В первые 24 часа мне написало 5 человек. В общем и целом вышло так, что у меня на руках было 5 работ, которые были готовы к тому, чтобы быть в игре.

Как я решилась на релиз

В комментариях под постом дали наводку, что в игре можно использовать картины из национальной галереи искусств. Благодаря этому совету я добавила ещё несколько уровней. В общей сложности вышло 5 артов художников из интернета, 5 работ из национальной галереи, и 1 широкий Фил.

Ну, а на DTF не обошлось и без ехидного комментария.

Как я решилась на релиз

Когда по моим ощущениям всё уже было готово, я вооружилась Da Vinci Resolve, который запускала всего два раза, и набросала простой трейлер.

Я решила выбрать Godot 4 по нескольким причинам:

  1. Версия 4.0 как раз вышла в релиз когда я созрела что-то сделать. Движок оказался в моём инфополе в нужное время.
  2. Скриптовый язык. Я люблю python, и много времени провела за написанием скриптов на lua. C++ и С# это не те языки, которые я хочу видеть в своих хобби. Они, откровенно говоря, уже надоели.
  3. От разработчиков игр для разработчиков игр. GDScript не выглядит перегруженным языком, потому что он используется только для одной цели.
  4. Легковесность. 1066 и i5-8400 уже давно не топ за свои деньги, чтобы держать IDE, UE, и браузер с кучей вкладок.
  5. Банально мне не нужны многие из фич других движков, которые они предлагают, потому что я пока не претендую на супер-передовые игры.

Пока я делала игру, разработчики вовсю улучшали движок, и успели выпустить 4.0.1 верcию. Движок я запускала через Steam. И что же может пойти не так, когда во время разработки игры выходит новая версия движка, пускай и минорная? На самом деле не так много вещей пошли не так, но это меня дико бесило. В какой-то рандомный момент, встроенный текстовый редактор переставал воспринимать нажатия на кнопки клавиатуры. Успешно игнорировался backspace и enter. То есть можно было писать код, но нельзя стирать его и переходить на новую строчку кода. Вместе с этим игнорировались комбинации клавиш, включая Ctrl+S. Единственным решением был перезапуск движка. Это не отнимало много времени, но за этим шли более серьёзные проблемы. В уровнях у меня переставали нажиматься секции, а из редактора я не мог вернуться обратно в меню выбора уровня. Если бы не логи гита, то я бы и не узнала о том, что некоторые сигналы просто… Исчезают.

У секций отсоединились обработки нажатия
У секций отсоединились обработки нажатия
Интерфейс не мог получить доступ к игровому полю там, где это нужно было
Интерфейс не мог получить доступ к игровому полю там, где это нужно было

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

  1. Я задаю вопрос как в Godot 4 сделать что-то.
  2. ChatGPT генерирует ответ прикладывая пример.
  3. Я пытаюсь повторить пример, но он не работает. Указываю об этом.
  4. ChatGPT извиняется, и говорит, что действительно, в версии 4 теперь делается иначе.
  5. Переходим к пункту 2.

И так по кругу. ChatGPT в основном генерировал код, который выглядит правдоподобно. Вишенкой на торте стало когда ChatGPT выдал мне дезинформацию. Ещё когда я пыталась сделать так, чтобы в браузере работал файловый диалог так, как мне хотелось, ИИ выдал мне следующую инфу:

Суть в том, что это как раз тот способ, который я и использую для того, чтобы дать игроку возможность выбрать картинку самому
Суть в том, что это как раз тот способ, который я и использую для того, чтобы дать игроку возможность выбрать картинку самому

Если подводить итог, то я могу сказать, что не могу избавиться от ощущения, что многим вещам я уделила больше, чем нужно было. Это при том, что в игре используются стандартные элементы UI, арты взятые были готовые, а звуков в игре вообще нет. Думаю, в следующем проекте уже будет всё своё.

А игру посмотреть можно тут: https://onyx1a.itch.io/solastia

4949
21 комментарий
250 ₽

я хоть и консольщик, но как же пользователи стим без хентая? надо исправлять

2
Ответить

Надо хентай пазлы делать, лучше продадутся.

6
Ответить

Это планы на будущее
Если бы я выкладывала это в стим, то это и был бы хентай пазл, но сейчас у меня нет лишних 100$, хоть они могут и быстро окупиться

1
Ответить

делать хентай пазлы, это быть на самом дне геймдева, но бабки залутать можно

Ответить

копец залипуха!

1
Ответить

По просчету цветовой гаммы, помимо многопоточки, можно еще несколько финтов ушами сделать:
- перед прогоном просчета уменьшить размер изображения (скажем до 128x128), много информации не потеряется, но поможет быстрей просчитать
- также можно уменьшить кол-во используемых цветов (гугление по "image color quantization" выдало вот такую имплементацию на python'е: https://www.tutorialspoint.com/color-quantization-in-an-image-using-k-means-in-opencv-python).

Успехов :)

1
Ответить