Особенности создания кооперативного онлайн-шутера
Уже совсем скоро ожидается релиз TinShift. Её разработчики Иван Зорин и Владимир Ханин делятся подробностями о том, как сейчас создаются кооперативные онлайн-шутеры и какие нюансы и особенности жанра стоит учитывать при разработке подобных игровых проектов. В TinShift Иван занимается анимацией, 3D-моделированием, левел- и гейм-дизайном, отвечая за практически все аспекты, кроме программирования, а Владимир занимается программированием.
Специфика
Иван: это мой первый шутер и, в том числе, в лице геймдизайнера. Главное, что я понял для себя — это то, что нужно думать и за одного человека и за толпу — т.е. как думает один человек и как думают все. С этой точки зрения всегда нужно смотреть ситуацию и на те фичи, которые ты собираешься интегрировать в проект. Шутер при этом или нет, это уже второй вопрос, но, если это многопользовательский онлайн-проект, обойтись без такого взгляда на вещи не получится. То, как ты видишь мир, условно с роста 1,80 в реальном мире, нужно умножать на 1,3, иначе работать это просто не будет.
Если взять мультиплатформу — на консолях, например, часто используется автодоводка, что на ПК в любой киберспортивной дисциплине считается читом. Мне лично не совсем понятно, почему на консолях вместо неё крайне редко используют возможности гироскопа у геймпада. В той же Zelda: Breath of the Wild это отлично реализовано и хорошо работает. Когда мы встанем перед задачей переноса TS на консоли, наша команда пойдёт именно таким путём реализации механики прицеливания.
Интерфейс
Владимир: в современных шутерах от полоски с HP сейчас отказывается практически большинство тайтлов. Doom последних лет скорее исключение, да и то, даже там хотя бы немного, но «жизнь» отрегенивается. В большинстве игр вроде Battlefield и Call of Duty вообще, как таковой полоски то и нет — игрок по сути является бессмертным. Есть критическая масса хитов, которая может привести к смерти, но в остальных случаях, всё можно откатить обратно, если между получением этих хитов будет соблюдаться определённая периодичность. Такая вот своего рода «вечная» регенерация. Интерфейс в этом случае тоже не задействуется, как правило все эффекты видны на экране: затемнение, красные полоски, звуковые эффекты, трещины по всему экрану и другие подобные элементы, которые сразу сигнализируют игроку, что что-то не в порядке. Это создает больше фана для игрока, но и жизнь становится менее ценной. Игра стали больше ориентироваться на широкую аудиторию, идти по пути упрощения и больше делая упор на нативность, тем самым снижать порог вхождения.
Динамика
Владимир: шутер шутеру рознь — есть серия Halo, которая ряду людей может показаться менее динамичной, чем те же Unreal Tournament и Quake старой школы или из более современных примеров тот же Doom Eternal. Насколько динамичной будет игра зависит в первую очередь от задач, которые она ставит перед собой, т.е., игроками. Успех PUBG или Counter-Strike зависит больше от тактической составляющей, нежели от максимально насыщенной стрельбы из разных комбинаций огнестрела.
В последних играх серии Doom от игрока требуется максимум скилла и минимум мыслей. После определённого момента в игре ты ловишь себя на том, что ты практически не думаешь, а просто действуешь, используя максимально быстро все доступные механики — на просчитывание какой-то тактики насыщенность и концентрация событий вокруг практически не оставляют времени, особенно, если играешь на максимальном уровне сложности. Если делать командную игру с сопровождением какой-нибудь медленной тележки, вокруг которой все будут летать на сверхсветовых скоростях, эта тележка игрокам будет просто неинтересна. Это работает в Overwatch с его скоростью, но никогда не сработало бы в той же Quake,
Онлайн командо-ориентированных игр
Владимир: с синглплеерными играми всё сильно проще — разработчики её сделали, поставили весь экшен на уже проложенные рельсы, заскриптовали все ключевые моменты и после выпуска их главная задача — это просто продавать её. Мультиплеер напротив, требует постоянной поддержки — нужна постоянная поддержка серверов и благо сейчас с этим всё сильно проще — существуют решения от Microsoft, Amazon и других крупных игроков рынка. В нашем случае, самым главным нюансом была единовременная игра большого количества игроков. Чтобы игра не лагала это нужно учитывать — оптимизировать нагрузку на сеть, чтобы не было большого количества объема данных, которые придётся передавать. Есть определённые вещи, которыми можно пренебречь — дьявол кроется в мелочах: можно снижать кадры анимации или не показывать как открывается дверь, если другой игрок находится далеко.
Современные технологические решения
Владимир: в плане графики за последние 10-15 лет картинка выиграла очень сильно. С точки зрения сетевого кода — ну опять же, сейчас делать мультиплеер это не то же самое, что в своё время проделывал Джон Кармак в гараже с первой частью Doom. Тогда приходилось учитывать множество нюансов, чтобы не было потерь данных, и чтобы они были защищены. Тот инструментарий, которым располагает Unreal, позволяет меньше задумываться над подобными вопросами и сильно облегчает интеграцию сетевых режимов. Когда я пытался написать свои игры на Delphi и Pascal семь лет назад, это совсем не то, что сейчас, когда какую-нибудь «змейку» можно сделать за пару часов, а за день space-shooter с параллаксом звёзд и планет, вражеским ИИ и скорингом, собирая его на блюпринтах из блоков логики. Для многих людей, которые делают свои небольшие инди-проекты о ряде вещей сейчас можно просто не задумываться.
Например, у Meta Humans сейчас очень высокое качество создаваемых персонажей, но для того, чтобы эти модели органично смотрелись, окружение тоже должно быть соответствующим. ААА-игра должна быть такой во всём. Игру мечты так или иначе становится сделать проще — благодаря Roblox, Minecraft и визуальному скриптингу даже учащимся в школах становится проще, т.к. за тебя позаботились уже обо многих вещах, к тому же, на YouTube есть куча видеороликов, в которых реально найти ответы на самые разные возникающие проблемы. Начать делать игру мечты сейчас может каждый и это восхитительно!