Идея игры о «летающий корабль мочит кучу врагов из тонны оружия» совершенно не нова, но жанр ощущается заброшенным, я давно не видел крупных проектов на эту тему, где такие полеты и боевка была бы ключевым элементом геймплея. Почему? Возможных ответа два:
Вся суть игры за 5 секунд
Мне просто нравится программировать, рисовать всякую технику, работать с симуляцией и физикой, а также пилить бодрый метал музон. Поэтому я решил совместить все свои хобби в одном продукте и заодно выяснить ответ на вопрос про этот жанр! Погнали в детали разработки!
Технический фундамент
Игра делается на Unreal Engine 5 и многие, конечно, наслышаны про плюсы и минусы этого движка. В моем случае из последних фичей мне очень помогает Nanite для упрощения работы с высокополигональными инженерными моделями, но очень тяжело дается работа с Lumen - серьезные скачки фреймрейта (даже при высоком среднем) и большие проблемы с освещением, когда в темной сцене много emissive эффектов. Движок очень сложный и с этим нужно смириться и быть готовым достаточно глубоко копаться, чтобы героически эти трудности преодолевать.
Вся игровая логика находится по большей части в С++, что очень помогает с организацией кодовой базы по сравнению с блюпринтовым подходом.
(Для меня загадка почему люди так сильно боятся плюсового анриала, если они уже освоили блюпринты. Если вы поняли блюпринты, значит вы уже умеете худо-бедно программировать, а LLM объяснят вам все детали почти без чуши)
Начал я с контроллера персонажа. Вне геймдева я - инженер по системам управления, поэтому для меня было супер естественным подходом создать все акторы через физическую модель.
Каждый дрон в игре управляется автопилотом, который состоит из кватернионного контроллера ориентации и пропорционально-дифференциального контроллера 🤓 для положения в пространстве. Дрон игрока является небольшим исключением в данном случае - силами игрок управляет напрямую с клавиатуры. Однако ориентация в пространстве по прежнему сделана с помощью контроллера, мышь только задает целевой кватернион.
Первый тест базового автопилота
Бонус этого подхода - основные анимации каждого дрона становятся процедурными. Полет каждого дрона и реакция на любые коллизии ощущается достаточно настоящей. Чтобы усилить этот эффект, я написал специальную систему, которая распределяет управляющие силы и моменты на любое количество произвольно расположенных движков, в итоге получаем кайфовый FX с минимумом ручной настройки. Механизация крыльев также завязана на подобную систему, но уже с меньшей степенью реализма, больше декоративное решение.
Автопилот и FX движков в действии
Плюс ко всему этому нам открывается возможность создать детализированную модель повреждений, где баланс сил будет нарушаться в зависимости от степени разрушений дрона. Если игрок попал в крупный замес, он может отстрелить слабые точки нескольким противникам и временно снизить эффективность их атак, пока к ним не придут дроны-хилеры (которых тоже конечно можно ушатать и забрать порцию здоровья себе).
Геймплей
Основные принципы, заложенные в геймдизайн игры были следующие:
Кемперинг является невыгодной стратегией - основную массу ресурсов надо добывать из врагов, дроны стреляют очень точно по неподвижным целям и не подлетают к тебе по одному;
Движение - жизнь, вытекает из предыдущего пункта;
Не раздутый искусственно арсенал вооружения, функции пушек пересекаются между собой весьма ограниченно, но могут отлично работать в комбинации (качество > количество);
Разнообразный набор врагов с выраженными геймплейными функциями: пушеры, рядовые болванчики, дальнобойные дроны с ракетами, снайперы, дроны поддержки, танки и т.д. - все направлено на то, чтобы каждое сражение было боевым пазлом, где игроку нужно постоянно менять фокус внимания;
На высоких сложностях враги бьют больнее и используют больше способностей, но их пул здоровья всегда остается неизменным. «Несправедливых» смертей должно быть как можно меньше, игрок всегда должен понимать какая ошибка привела его к поражению;
Пример абсолютно честной драки
Если вам это напоминает Doom Eternal, то это не случайно ;) Мне очень нравится боевка в этой игре, разве что патронов у меня будет немного побольше на начальных этапах.
Матрешка левел-дизайна
Левел дизайн для таких игр это, пожалуй, самое сложное. Бешеная мобильность персонажа не дает применить ряд стандартных проверенных решений, потому что игрок может игнорировать подавляющее большинство стандартных ограничений в духе стен, обрывов, гор.
Часть сражений проходят в закрытых помещениях
Но чтобы создать более разнообразный опыт, все же эти ограничения необходимо было придумать. В итоге я пришел к такому сету правил при построении своих уровней:
Уровень поделен на несколько сегментов-матрешек, между которыми находятся временно непреодолимые препятствия;
Внутри каждого сегмента есть набор ПВО - мощных вражеских турелей, которые практически невозможно уничтожить. Они лимитируют начальную мобильность персонажа внутри каждого слоя «матрешки»;
Миссии направлены на постепенное отключение этих ПВО, игрок обретает все большую свободу передвижения внутри сегмента, раскрывая «матрешку»;
Чем больше пространства доступно игроку, тем более интенсивными будут боевые столкновения и больше высокомобильных врагов будут на арене;
Часть сражений проходит в крупных закрытых помещений с коридорами, когда необходимо дать игроку более классический арена-шутерный опыт;
На уровнях есть секреты - шорткаты, с помощью которых можно быстрее отключить ПВО на уровне и получить тем самым преимущество;
После зачистки каждой матрешки игрок открывает доступ к следующей, обычно в виде несложного пространственного пазла;
Альтернатива невидимым стенам - вылет слишком далеко за пределы локации приводит к постепенной «потери связи».
Пример грубого блокаута двух секций уровня - уровень А состоит в основном из линейных арен внутри помещений с последующим вылетом на открытую территорию с крупным воздушным сражением. После него открывается переход в зону В1 через безопасный, которая в дальнейшем расширяется до В2 после отключения ПВО
По итогу такой левел дизайн позволяет в произвольных пропорциях комбинировать линейный опыт закрытых арен и свободу полета на крупных открытых аренах, а также позволяет эффективно переиспользовать одну и ту же локацию, потому что ощущение от нее меняется в зависимости от количества открытых слоев «матрешки»
К каждой локации прилагается набор эпичных инженерных сооружений
Часть подбираемых предметов разбросана в узких пролетах: игрок постоянно выбирает между ценностью ресурса и риском врезаться в препятствие и потерять момент, что сделает его легкой добычей. Но успешный сбор этого ресурса заставляет чувствовать себя крутым!
Арт
Очень много времени ушло на экспериментирование с арт дизайном.
Я всегда любил делать сверхдетализированные модели и фотореализм в целом, но в случае с игрой это было бы фатальной ошибкой. ААА-пайплайн очень трудозатратный и очень плохо поддается множественным итерациям, когда у тебя нет большой команды. Я регулярно вижу среди начинающих инди разработчиков такую картину - тащится пачка ассетов ААА-качества, сначала все бодро стартует и выглядит огонь, а потом оказывается, что ассетов нужно еще больше, а делать их мы не умеем. В итоге люди снова идут на маркетплейсы, покупают другие ассеты и получается лютая сборная солянка, с которой невозможно работать и очень сложно привести все ассеты к общему знаменателю. Не говоря уже о перформансе.
Поэтому мне было очень важно соблюсти баланс между красотой и простотой пайплайна по его созданию. В итоге родилась такая схема - стилизованные механические враги с легким cel shader’ом, детализированные инженерные сооружения натуралистичных пропорций и сильно стилизованные элементы природы - камни, ландшафт, растительность. Минимальное количество текстур и сложных шейдеров. Иными словами, я взял в этот пайплайн все, что я умею делать быстро и хорошо (моделинг) и выкинул то, что на качественном уровне мне делать просто непозволительно по времени, если я хочу этот проект когда-нибудь закончить (запекание, правильные развертки, ручная покраска).
Продвинутый искусственный интеллект врагов
Я сильно беспокоился за этот момент до публичного старта игры, но в итоге графика людям скорее понравилась, как бонус она еще не похожа на типичную графику UE и чуть лучше выдерживает даунгрейд графических настроек для машин послабже.
Подготовка к анонсу
Для анонса нужно несколько вещей: стим-страница, скриншоты, трейлер, пресс-релиз. В этом списке совсем не обязательно должен присутствовать «рабочей кор-геймплей»: интернет полон историй о том, как люди делали фейковый геймлпей и тестировали отклик аудитории чисто на картинку, выбирали самый рабочий концепт и уже шли с ним дальше.
Мой случай - это полная противоположность, уже давно у меня был готовый кор-геймплей со всеми ключевыми функциями, включая несколько готовых уровней из кучи кубов с противниками в виде скошенных прямоугольников. Игру при этом можно было пройти от начала до конца и именно тут мои друзья проводили первые плейтесты, что позволило пофиксить ряд первичных проблем. Но минус такого подхода в том, что аудиторию с таким графоном не пособираешь.
Кусочек геймплея до проведения финальных артпассов
Поэтому последний квартал мой сильнейший фокус был на том, чтобы сделать ко всему этому достойный арт-пасс, финализировать модели главного героя и врагов, привести все VFX к единому знаменателю, собрать несколько красиво выглядящих локаций. В процессе я прошел примерно 4 итерации трейлера, каждый из которых был сильно бодрее и вкуснее предыдущего (оглядываясь назад, очень пугает конечно, какие варианты мозг раньше считал отличными), один раз перезаписал полностью музыку в пользу более динамичного метала. Оставались мелочи - создать стим страницу и подготовить все остальные арты и можно показывать это миру.
Анонс и маркетинг
Я классический соло-индюк без паблишера, поэтому этап анонса меня сильно нервировал. Кому писать? Сколько людей это вообще увидит? Как достучаться до игровых СМИ?
Если вы думаете, что хорошие ответы на эти вопросы у меня внезапно появились, то нет. Маркетинг игры без демо в одиночку - сложная штука, потому что инструментов у тебя для этого очень ограниченное количество. Что сработало для меня?
Попадание на GameTrailers и IGN. Это, пожалуй, крупнейшие медиа каналы, которые могут тебя запостить на этапе анонса, когда демки еще нет. Сначала ты попадаешь на GameTrailers, а потом есть шанс, что если ролик залетит, то его опубликуют на основном канале. Так и вышло, но это было нелегко. Как я туда попал? А хрен его знает! Я просто активно писал им письма и прикладывал свой трейлер, видимо в какой-то момент мне попался добрый редактор и он решил опубликовать. Каких-то секретных эмейлов я не знаю и на мои письма мне никто не отвечал %)
Посты на Reddit. Каждый день я постил трейлер/нарезку из трейлера/кадры девлога в разные крупные сабы. Результаты очень разные, от 5-10 до 300 апвоутов, но все с довольно позитивными комментариями. Из сложностей - новые аккаунты супер легко банят, нужно внимательно читать правила и стараться не надоесть сообществу.
Что пока не сработало? Твиттер. Геймдев-твиттер без уже выстроенной аудитории это грандиозный голландский штурвал. Тебя лайкают, смотришь кто - а это такой же голодный разработчик с игрой мечты, который твою игру даже скорее всего не посмотрел. Говорят, там лучше работает именно закупка трафика или если ты успел как-то завируситься и набрал себе 1000+ фолловеров.
Нашлось и применение моему старому проекту в качестве одного из боссов
По итогу имеем следующее: игру в целом принимают тепло, без мощной критики, людям нравится артстайл и геймплей. Многие прям рады, что появилось что-то свежее в забытом жанре. Но при этом завируситься и собрать себе аудиторию за неделю на год вперед пока не получилось, хотя конечно же об этом каждый разработчик мечтает, чтобы спокойно делать игру, а не заниматься маркетингом :)
И это приводит нас обратно к вопросу из начала поста - этот жанр мертв или мне пока просто не удалось собрать достаточно видимости? И текущий результат… не дает четкого ответа на этот вопрос!
Во время разработки часто были тяжелые этапы эмоциональных качелей, а сколько еще будет! Но, кажется, что-то хорошее может из этого получиться, и поэтому я готовлюсь к плейтестам и делаю демку!
Если вам понравился материал, буду рад добавлению в вишлист! Страница игры в Steam: https://store.steampowered.com/app/3759740/They_Call_It_Gravity/