Godot, пиксели и Дыра (I)

С чего все начиналось...

Сидел я, местами работал, местами пилил свой игровой проект (достаточно масштабный долгострой про караванщика), общался в разных чатиках - в общем, обычный рабочий день. И что-то так всё лень было... Ну, бывает - мотивация куда-то уходит, на улице ещё холодно.

И тут в одном чатике человек сделал игрушку под андроид за неделю. Вот так взял и сделал, с нуля до гуглостора. И такая зависть меня охватила! Вот жеж, человек может, а я как-то не очень. Строю свои долгострои, строю. Вроде и опыт есть, и в джемах за три дня нормально игры делаются, а вот с конечным продуктом у меня как-то всё не очень.

"Фигня всё это!" - стукнул я по столу кулаком и твёрдо решил: надо тоже взять себя за жопу и сделать игру за недельку. Сразу дам маленький спойлер, я провалился. Игра до сих пилится. Очередной сайдовый проект, тут можно вставить соответствующий мем.

Но ладно, будем по порядку. Пиксели я никогда до этого не рисовал, да и вообще, художник из меня тот ещё... Но давно хотелось попробовать! Поэтому в качестве графики был выбран именно пиксельарт. Никакая другая логика к выбору стилистики не применялась :)

Кровь, пот, пиксели и прочие радости жизни.

Ну ок. Посмотрел, что как рисуют, посмотрел материалы. Как честный человек купил в стиме aseprite, проштудировал "библию" пиксельарта -

Естественно, чтобы рисовать нормально, надо уметь рисовать, а это явно не для игры за недельку. Так что для себя я выбрал максимально минималистичный стиль, который меня удовлетворил. Но путь был долгий. Сначала попытался в "красивый" пиксельарт.

Godot, пиксели и Дыра (I)

"Отлично", - подумал я. - "Я бы сам с такой графикой поиграл, это даже почти красиво!" А потом... потом я попытался это анимировать и с прискорбием был вынужден признаться себе - пока я нарисую все кадры, неделя кончится. И вторая. И третья. А ведь надо делать ещё и второго персонажа!

Но я не сдавался и рисовал дальше.

Решил сделать что-то среднее.
Решил сделать что-то среднее.

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

Ну и в итоге, была выбрана рисовка на 32х32 пикселя, с движением только налево-направо. Так рисовать анимации получалось быстро, а результат... Ну, меня вполне удовлетворял. В конце концов, это должна была быть игра за недельку.

Вот такой вот достаточно минималистичный стиль был выбран.
Вот такой вот достаточно минималистичный стиль был выбран.

Что же дальше?

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

Однако, выбрать, что пилить, таки было нужно. Для меня проще всего рисовать средневековую/фэнтезийную стилистику, я люблю пошаговые бои и тепло отношусь к Dragon Quest I&II, Tales of Mana, свежая Octopath и прочим олдовым (и не очень) jRpg. Поэтому захотелось замутить что-то подобное. Но, понятное дело, лимит времени ставил свои рамки - поэтому я решил взять стандартную пошаговую боёвку, с отрядом в четыре человека и пошаговыми боями, и ограничить геймплей данженом. То есть, берешь пати, идешь в данжен, качаешься, умираешь, повторяешь, спускаешься глубже. Ничего нового, но в такое вполне можно залипнуть на пару дней.
ЛОР продумался быстро и просто - есть город, в котором есть Дыра - известный на весь мир данжен. Городок живет за счёт приключенцев, которые кромсают моснтров, качаются и добывают всякую всячину из глубин Дыры. Ты - свежий новобранец. Ну, что еще надо для мобильной поделки? :)

Чуть технической части

Godot для таких вещей прекрасен: производительность в 3д для открытых миров мне не была нужна, но была нужна гибкость и скорость разработки. Ну и инструмент этот я знаю вполне неплохо. А время тут являлось ценным ресурсом - на этот сайдовый проект я тратил (и трачу) где-то по часу-два в день. Ну, иногда, сидя в укромном месте, рисую пиксели на телефоне.

Как водится, раз уж это эксперементальный проект, я захотел попробовать с этим движком что-то новое в плане кода и подхода к разработке. Обычно для всяких статов, сохранений и прочего я использую либо банальный json - удобно править где угодно, но есть минусы вроде сохранения координат и отсутствия инта, либо встроенный dictionary, и сохранение как put_var(dict).

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

Вот так выглядит, к примеру, код персонажа (без функций, чисто то, что сохраняется)

extends Resource class_name Character # Variable stats export var hp := 5 export var max_hp := 5 export var mana := 0 export var max_mana := 0 # Main stats export var strength := 1 setget ,get_strength export var agility := 1 setget ,get_agility export var wisdom := 1 setget ,get_wisdom # Guess what? It's LEVEL!!! export var level := 1 # Maybe later. No levelup yet export var sp := 0 # Link to visuals export var object : PackedScene # Do we really need to comment this? export var name : String export var profession : String export(Array, Resource) var skills export(Resource) var armor setget set_armor, get_armor export(Resource) var weapon export(Resource) var weapon_secondary
Так оно выглядит в редакторе.
Так оно выглядит в редакторе.

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

Ну, особой проблемы тут не оказалось, разумеется. Есть волшебная галочка "resource local to scene", которая позволяет изменять экземпляры ресурса на сцене независимо друг от друга... Но мне это не помогло, потому что на сцене эти ресурсы не были. В общем, дело обошлось .duplicate() - правда, пришлось делать это и для скиллов, и для эффектов скиллов, т.к. один и тот же скилл в игре можно прокачать по-разному. По факту, ресурсы в редакторе у меня являются шаблонами.

Не хотите ли совершить путешествие в Дыру?
Не хотите ли совершить путешествие в Дыру?

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

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

Напоследок, вот видео текущего состояния игры.

Если статья понравилась, и интересны какие-то детали разработки - пишите, комментируйте :)

Следующая часть:

22 показа
1.1K1.1K открытий
33 репоста
14 комментариев

Чувак, страдаю такой же хренью. Могу делать только долгострой. На одну дверь могу тратить по три дня, пока она не будет открываться так, как я хочу, при этом проигрывая все те анимации, которые может выдавать персонаж.
Когда я отправлял игру на грант, я поставил себе сроки, доделать презентацию до конца месяца. Отбросил все ненужное, перестал вымерять каждый угол поворота по сотне раз при различных ситуациях в геймплее и выдал отличную презентацию.
Жаль, что анрил может только во все динамики кричать, что выдаёт мега гранты, по факту, даже не смотрят проекты. Есть десятки форумов, где в пакеты файлов вставляли сигнализаторы открытия, но проекты никто так и не открывал. 
Впрочем, мой проект также никто не открывал и ютуб сиротливо показывает 1 мой просмотр уже много месяцев. 
Но, возможно, это научило меня дисциплине и работе в сжатые сроки. 

Ответить

Ай фил йор пэйн, бро :)

Ответить

Дедлайны никто не отменял, даже при работе в соло:) Они позволяют не полировать проект до бесконечности (ведь нет предела совершенству), а подстегивают на то, чтобы доделать его к определенному сроку. Это полезно, кмк

Ответить

Статья понравилась, пиши ещё)

Ответить

Что за шрифт используется?) вечно в Годо проблема с выбором шрифта для кириллицы)

Ответить

По-моему, приятный и читабельный шрифт, что с ним не так-то? Тем более, причем тут именно движок, туда любой ttf или otf можно подгрузить.

Ответить

Нет в годо никаких проблем с кириллическими шрифтами.

Ответить