Инди Robert Purmalis
746

INSPACE 2980 - Мой небольшой долгострой

Инди-одиночка рассказывает о разработке своей "простенькой" игры, которая превратилась в долгострой на 2+ года (и все еще находится в разработке).

В закладки
Аудио
Да, меня уже ругали за кликбейт-обложку, но она мне нравится!

Собственно игра.

INSPACE 2980 - это динамичный, стильный и довольно хардкорный скролл-шутер из эпохи 16-битных консолей, выполненный в современной 2d графике. В целом геймплей схож с оным в подобных играх конца 80х, начала 90х.
Игрок движется слева направо отстреливая полчища врагов, подбирает кристаллы тилерия (местная экспа), всякие пауэр-апы и дебаффы и всячески пытается выжить.
Перед стартом мисии игрок должен выбрать основное оружие, вспомогательного дрона и спецприем. По-задумке это определяет тактику игры, хотя глобально тактика всегда одна - стрелять и уворачиваться.
В перерывах между миссиями собранные кристаллы тратятся на прокачку характеристик, которых насчитывается десяток штук. Если экспы не хватает, то всегда можно повторно пройти одну из уже пройденных миссий (в этом моменте игра схожа со Sky Force).
Также во время прохождения миссий можно открывать скины, каждый из которых дает свой небольшой уникальный бонус (нет, эти скины я не буду продавать отдельно).
В игре наличествует сюжет, который подается путем простых диалогов. По моему скромному мнению даже простая диалоговая система позволяет лучше ощутить себя действующим лицом, нежели использование обычных брифингов.
Графически пытаюсь придерживаться стилистики "ретровейв", и вроде даже получается.

Маленький зеленый дрон готов экстренно отремонтировать корпус, когда это потребуется.

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

Первые попытки окунуться в геймдев мной были совершены в 2009 году, еще в студенчестве. Тогда мы с другом пытались запилить квест на Wintermute Engine. Надо сказать, что это весьма неплохой инструмент для создания игр сего жанра, но к сожалению сейчас он устарел и более не развивается.
Я должен был отвечать за графику, так как тогда пытался в 3d моделирование, а он соответственно отвечал за код.
Тогда мы сделали пару тестовых уровней, на чем разработка собственно и прекратилась. В первую очередь это связано с юношеским максимализмом: зачем пилить никому ненужный квест? Давай делать РПГ!!!
Но rpg мы делать так и не начали, да и вообще отбросили геймдев как что-то далекое и недоступное.

Эта таверна должна была стать одной из локаций квеста.Только здесь ракурс немного другой, так как рендер более поздний (а оригинал канул в лету).

Лишь в 2016 году я снова задумался о попытках создания своей игры. В этот раз замах был гораздо скромнее - сделать что-то простое вроде Shank или упомянутой выше Sky Force. После недолгих раздумий решено было делать "леталку", так как это проще в плане контента (анимаций почти нет) и механики вроде не сложно реализуются. В качестве движка, а точнее конструктора был выбран GDevelop, заточенный под создание html5 игр.

Первый прототип.

Результатом примерно месяца работы стал прототип игры Deep Space. В игре был один длинный уровень с боссом в конце, три корабля на выбор, две разных пушки, между которыми можно переключаться прямо во время боя и довольно таки корявый арт. А еще игра жрала слишком много ресурсов...
Результат мне не понравился и игра была заброшена.
Тем не менее тот прототип я храню, как первое играбельное нечто созданное мной :)

Соотношение сторон 4:3 :)

Второе дыхание.

От GDevelop в итоге я решил отказаться в пользу Construct2 в силу того, что последний уже отлажен, имеет большое комьюнити и позволяет портировать игру на множество платформ. Пока Deep Space пылился в сторонке, я изучал C2, пиля на нем платформер по мотивам Vectorman. Хотя общего у игр было очень мало - только похожий персонаж.

Собственно в планах было и в дальнейшем продолжать его разработку, но внезапно я решил поучаствовать в стартовавшем на "геймдев ру" новогоднем конкурсе 2d экшн игр. По какой-то до сих пор неизвестной мне причине я решил участвовать с Deep Space, хотя ее нужно было полностью переносить на c2, чем я собственно и занимался в рамках конкурса. В этом конкурсе приняло участие более ста человек, половина из которых дошла до финиша. Моя игра заняла 14 место, и получила немало положительных отзывов.Решив, что такой результат не так уж и плох, я продолжил разработку игры. Так Deep Space обрела второе дыхание.

Скрин конкурсной версии

Steam Greenlight.

В начале 2017 заговорили о закрытии гринлайта и драконовских взносах за публикацию (до 5к зеленых). Тогда я, как и многие другие решил запрыгнуть на этот уходящий поезд. На скорую руку запилил трейлер, скриншоты, описание на английском и побежал в steam.
Голосовал народ неохотно и с небольшим перевесом в сторону "против", но несмотря на это, гринлайт игра все-же прошла за несколько недель до его закрытия.

Трейлер был настолько стремный, что я его удалил.

Новое название и дальнейшая разработка.

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

Со старым логотипом меня даже успели обвинить в плагиате Mass Effect и созвучности с Dead Space. Впрочем, не безосновательно...

Графика.
Долгое время большинство спрайтов создавались при использовании свободных ассетов, ну то есть я находил какой-то спрайт корабля, и путем манипуляций в гимпе делал из него разные вариации. Большинство фонов так я вовсе брал с сайта NASA и оставлял как есть. Результат такого подхода радовал меня не сильно: графика плохо сочеталась стилистически, появлялось много "грязи", ну и в целом выглядело все как-то халтурно.
Поэтому было решено все рисовать с нуля.
Со спрайтами, фонами и интерфейсами особых сложностей не возникло, тут не обязательно иметь художественное образование, главное практика и знание инструмента, в котором работаешь (в моем случае это гимп), ну и наличие такого абстрактного качества как "вкус".
Единственный нестандартный спрайт - это корабль игрока. Чтобы добиться убедительнвх кренов при маневрировании я использовал 3d анимацию. Также использование 3d модели позволило создать разные скины без серьезных трудозатрат.
Что касается персонажей, то сперва я также хотел использовать 3d рендеры, но в результате они не очень вписывались в общую картину, поэтому пришлось рисовать и их. С этим мне на подмогу пришла супруга, которая в свое время оканчивала художку, хотя с тех пор особо не рисовала. Она накидала мне скетчей, которые я отсканировал и "раскрасил" в гимпе.
К настоящему моменту я в целом удовлетворен качеством графики в игре, но тем не менее продолжаю улучшать некоторые особо режущие глаз моменты.

Персонажей в игре немного...

Звуки и музыка.
Со звуками серьезных проблем не возникало - их полно на opengameart. Что-то я использовал как есть, что-то дорабатывал и комбинировал в Audacity. Также в некоторых моментах выручал сервис Diforb.
А вот с музыкой все несколько сложнее. Подобрать что-то из свободного доступа именно под свой проект довольно непросто, зачастую просто невозможно. Однако мне повезло и долгие поиски таки позволили подобрать нужный треклист. Отчасти этому поспособствовал рост популярности музыкального направления synthwave, большинство найденных мной треков были написаны в 2018 году.
Конечно лучше заказать уникальную музыку для своего детища, но далеко не каждый инди без бюджета может себе это позволить.

Сюжет.
Это тот элемент игры, который доставил мне немало боли и страданий!
Пока ты не разрабатываешь игры, а только играешь в них, кажется, что придумать крутую историю и даже целую вселенную проще простого, но вот стоит только начать, как все эти представления рассыпаются в прах.
Главная сложность для меня заключается в лаконичности повествования. Так как игру нужно будет переводить на английский, то на словах желательно экономить, а я в процессе написания постоянно разменивался на подробные объяснения тех или иных событий, углублялся в биографии персонажей и т.п.
На одном из этапов разработки в игре появился "Кодекс", содержащий сведения о мире игры, но позднее я его выпилил.
Написать короткую но не слишком примитивную историю так, чтобы не возникало лишних вопросов и недосказанностей - поистине непростой труд.
Я даже пробовал привлечь одного своего друга - филолога по образованию, но он в итоге отказался. Пришлось писать самому.
В результате сюжет я переписывал не менее шести раз, а мелкие правки продолжаю вносить в него и сейчас. Изначально в сюжете подразумевалась вариативность, выбранные ответы в диалогах вели к разным сюжетным последствиям, но позже я от этого отказался по двум причинам:
Во первых SMUP - это не про сюжет, большинство игроков просто будут скипать диалоги и агриться на большое количество текста.
Во вторых перевод большого объема текста потребует немалых финансовых затрат.

Почему так долго.
У меня есть основная работа, поэтому проект разрабатывается в основном по ночам. Также иногда я отвлекаюсь на разработку других игр, значительно попроще (html5) или просто на занятие херней.
Но самое главное заключается в том, что я стараюсь сделать пусть небольшую, но качественную игру, а не очередной инди-треш, поэтому много времени трачу на тесты, на регулярное улучшение геймплея, визуальной части и прочих элементов игры.
На момент написания статьи игра готова на 99%, и возможно выйдет этой осенью. А может и не выйдет, посмотрим.

Следить за разработкой, а также попробовать демо можно в группе VK.
А посмотреть и поиграть в другие мои игры можно на моем сайте.

Выход из варп-пространства
Станция "Убежище".

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Robert Purmalis", "author_type": "self", "tags": [], "comments": 14, "likes": 31, "favorites": 10, "is_advertisement": false, "subsite_label": "indie", "id": 25274, "is_wide": false, "is_ugc": true, "date": "Mon, 20 Aug 2018 22:37:38 +0300" }
{ "id": 25274, "author_id": 30454, "diff_limit": 1000, "urls": {"diff":"\/comments\/25274\/get","add":"\/comments\/25274\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/25274"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960 }

14 комментариев 14 комм.

Популярные

По порядку

Написать комментарий...
2

"Убежище" подозрительно напоминает ретрансляторы из того же ME. А вообще по гифкам выглядит очень бодро :) Обязательно поделитесь, как будут дела после релиза. И я не смогла найти вас в стиме - ни по какому из названий - после гринлайта не публиковали страницу?

Ответить
1

Форма станции обусловлена сюжетом... На ретранслятор даже не смотрел, когда рисовал ее, но да - сходство реально есть. В стиме страница появится в ближайшее время, как будет трейлер. От релиза особо ничего не жду, но результатами поделюсь :)

Ответить
1

Геймплейно не мое, но графоний и анимации нравятся!

Выбор FOSS - это принципиальная позиция/вопрос цены/уже есть опыт или что-то еще?

Ответить
2

Про геймплей обычно и слышу - не мое. :) Весьма не удачный выбор жанра. Что касается свободного ПО, то тут разные причины. Гимп полностью удовлетворяет моим требованиям, и мне в нем удобнее работать, чем в ФШ, аудасити везде советовали как простую прогу для работы со свуком, ну а тот-же C2 не бесплатен - персональная лицензия стоит 12к

Ответить
0

Как ощущения от Construct 2? Сам месяц назад игру доделал :)
Какие отрицательные стороны? Может есть какие плагины мне посоветовать?
За 2 года работы с ним нашел много "подводных камней" с проблемной оптимизацией и прочим.

Ответить
0

В последних версиях используется webgl 2.0, что положительно сказывается на производительности, а в целом у c2 много ограничений, так что что-то действительно большое на нем не сделать. Сам скорее всего буду в будущем переходить на юнити, а c2 оставлю для небольших веб игр. Из плагинов могу выделить лишь moveto, здорово упрощает реализацию движения объектов.

Ответить
1

Дам небольшой pro-tip (может конечно это было очевидно и я краб ж) ) по одному нюансу в C2 от которого я в плохом смысле о*уел:
Если при переборе объектов (скажем, спрайтов) ставить условие не через сам объект, а через "values comparison" в категории System (то есть через условные Sprite.At(x, 5) <= N) то производительность даже при средних нагрузках повышается на 20-40%.

Ответить
1

Удачи в проекте!

Скажите, вид слева-направо и top-down графику осознанно выбрали? Более привычно для такого геймплея будет снизу-вверх.

Ответить
1

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

Ответить
1

Да, жанр катастрофически неудачный для старта, там все идеи закончились еще в восьмидесятых. Лучше было бы сделать что-то в духе знаменитого flOw (первый флэш-прототип того что в будущем стало первой игрой Thatgamecompany). Затраты те же, аудитория на порядки выше. Ну или что-то типа Reassembly, хотя там конечно концепция значительно более сложная.

Ответить
1

Да я как-бы не собирался изначально в стим идти, а вот теперь хочу таки доделать и зарелизить. В любом случае с это игрой я получил (и еще получу) определенный опыт, который пригодится для работы над более интересными проектами.

Ответить
1

Еще бы пару гифочек с диалогами)
А вообще, выглядит лампово))

Ответить
1

Спасибо :)
Диалоги, как я говорил ничего не решают, просто для большего погружения.

Ответить
1

Не Симулятор Кассира, конечно, но тоже неплохо. На самом деле, хорошо смотрится и мне понравилось, как нарисована локация для квеста.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
В лутбоксы начали включать багфиксы
Подписаться на push-уведомления