Разработчик игр в quicktequila о создании игры в стиле аркады Тамашика
Видхват Мадан, геймдевелопер из quicktequila, рассказал нам о своей игре Тамашика. Он обсудил психоделический стиль, создание увлекательных сценариев, рабочий процесс и движки, которые использовались для разработки игры.

ТАМАШИКА сочетает в себе механику аркадного шутера от первого лица с сюрреалистичной, психоделической, ретро-подачей. Каковы были основные принципы дизайна, которые определяли проект с самого начала?
Видения начали просачиваться из моего подсознания, когда я впервые сыграл в Post Void. До Тамашики я работал над множеством игр-шутеров от первого лица, в которых сочетались динамичные действия и платформер, вознаграждающие точное прицеливание и спидраннинг. Смесь этих влияний определила ощущение и механику, которые в итоге воплотились в этой игре.
Я долго и пристально рассматривал игры, которые я сделал, и те, в которые мне нравится играть, чтобы определить основные принципы, которые легли в основу всех дизайнерских решений для Тамашики. Игры чрезвычайно разнообразны и предлагают спектр различных впечатлений. В этой игре я хотел сосредоточиться на том стиле и геймплее, которые привлекают моё внимание. Не только в механике самой игры, но и во всём опыте, от момента запуска программы до глубины динамичных действий.
Я знал, как я хочу, чтобы всё это ощущалось, и стремился к этому ощущению, насколько мог. Ритм и плавность лежат в основе игрового процесса, но уже в начале обучения вы поймёте, что она совсем не играет по правилам традиционного FPS. Она нарушает множество условностей и не стесняется этого. За этим стоит общая эстетика, абстрактные визуалы и намеренное исключение экспозиции, повествования и кат-сцен, указывающие на сосредоточенность на простоте. Современные игры содержат слишком много контента, функций, разблокировок, валют и т. д., что пугает меня.
Тамашика не ожидает, что вы уделите ей столько времени. Она процедурно генерируется, но вы не получаете новый уровень при каждом запуске. Она не будет вознаграждать вас за долгие часы игры; на самом деле она будет препятствовать этому. Я играю в игры, чтобы отвлечься от симуляции мира, приводя свои глаза, уши и руки в ритм с движущимися пикселями и звуками в качестве отдыха от хаоса. Именно поэтому молодой я тоже играл в игры, поэтому я создал Тамашику, чтобы воплотить именно это. Ваш ежедневный танец с машиной.

Центральную роль в игре играют меняющиеся, процедурно генерируемые коридоры. Как структурирована ваша система процедурной генерации и как вы обеспечиваете, чтобы уровни оставались читаемыми и увлекательными?
Генератор уровней прошёл множество итераций, прежде чем я пришёл к версии, которая есть у нас сегодня. Я не начинаю работать над своими играми с грандиозным видением, а вместо этого стараюсь руководствоваться тем чувством, которое хочу уловить, после чего скрещиваю пальцы и надеюсь, что всё сложится. Это стратегия «кухонная раковина», доведённая до одиннадцати, но она пока хорошо мне служит. Это отразилось в количестве итераций, которые я сделал с генератором уровней.
Первая версия сочетала простой DSL с правилами для последовательного расположения блоков, но она была слишком простой. Следующая версия отказалась от DSL и вместо этого следовала строгим правилам для смешивания коридоров и комнат через равные промежутки времени. Эта система довольно долго работала. Она просто галлюцинировала свежие столкновения, следуя простому скрипту, когда игрок продвигался дальше по уровню. Я изо всех сил пытался придумать способ внести больше разнообразия, но меня сдерживал конвейер, который я настроил, который включал экспорт сборных блоков из Blender.
Текущая версия сочетает процедурные элементы со сборными предварительно изготовленными частями, которые разрабатываются вручную в специальном инструменте, который работает намного быстрее, чем работа в 3D-программах. Это позволяет мне быстро проектировать и экспортировать отдельные сегменты и столкновения с лёгкостью. Уровни разбиты на отдельные чертежи, каждый с кодами, которые указывают на пулы тех же сегментов, которые перетасовываются ежедневно. Эти чертежи следуют ритмическому порядку, чтобы обеспечить равномерное распределение сложных столкновений между более быстрыми сегментами.
При правильном количестве изгибов, прямых и поворотов, соединяющих большие открытые комнаты, общая структура обеспечивает правильное сочетание различных стилей тесных последовательностей действий в коридорах. У нас есть значительное количество сегментов, которые перетасовываются ежедневно, что придаёт ежедневному роллу здоровое разнообразие по сравнению с тем, чего я смог достичь со старой версией генератора.

Быстрое движение и такие механики, как моргание, парирование и стрельба, требуют чёткой реакции. Как вы подошли к проектированию и настройке этих систем, чтобы они были точными и удовлетворяющими?
Многие механики в игре определяют структуру и дизайн уровней, чтобы убедиться, что они поддерживают друг друга. Уровни разработаны так, чтобы обеспечить наилучшую линию для игроков, по которой они могут следовать, не нарушая плавности. Системы парирования и ближнего боя противоречат этому, в чём и заключается особенность Тамашики. Я считаю, что многим шутерам не хватает защитных действий, что делает общее ощущение и движение слишком однонаправленными и монотонными.
Хотя Тамашика тоже про поток и непрерывное движение, ритм задан так, чтобы чередоваться между регулярным стрейфингом, поворотом и стрельбой и быстрыми событиями, когда всё останавливается, и вам нужно нажать нужную кнопку в нужное время. Ритм, который хочет найти Тамашика, заключается в умении балансировать между ними.

С технической точки зрения, какой движок вы используете и что сделало его подходящим для игры, построенной на скорости и процедурном контенте?
Я использую библиотеку для разработки игр под названием Monogame. Я не хотел использовать движок, потому что хотел сам создать системы. Много спорят о том, использовать ли движки или жёстко кодировать игру, и, судя по моему опыту на интернет-форумах, стало своего рода символом статуса — вообще избегать использования движков. Я не принимаю ничью сторону в этом споре и не осуждаю. Используйте то, что хотите, просто делайте крутые игры.
Лично я вернулся к использованию библиотеки, потому что хотел вновь пережить старые добрые времена, когда я возвращался домой из школы и занимался небольшими демо в C++ и DirectX. Для меня это скорее эстетический выбор. Что касается скорости и производительности, то это широкий спектр. Я всё ещё нахожусь в управляемой среде, так что гуру программирования не одобрили бы мою настройку. Хотя для такой игры можно использовать движок более эффективно, я решил, что большая часть этой работы будет заключаться в том, чтобы убрать все предоставленные функции, поэтому я полностью отказался от этого.
Мне нравится среда для разработчиков, она хорошо лежит в руке, что делает работу над ней более интересной. Дело в том, как приятно запускать свой проект, наблюдая, как страницы кода, файлы ресурсов и шейдеры исполняют свой танец, чтобы создать волшебство на экране, когда вы нажимаете F5. Vibes — вот мой секретный капитан, я всегда кодировал под vibe.

Можете рассказать о вашем типичном рабочем процессе создания уровней — сколько в нём ручного труда, а сколько — системного, и как эти элементы объединяются в движке?
Эта система прошла долгий путь с момента своего создания, поэтому я опишу, как она работает в последней версии. Я написал сервер нод, который управляет простым фронтендом, где я могу нарисовать набор прямоугольников, чтобы определить сегмент уровня, вместе с такими сущностями, как враги, реквизит, ловушки и т. д. Бэкенд управляет базой данных этих сегментов, каждый из которых имеет метку и категорию в разных пулах, которые экспортируются в игру напрямую каждый раз, когда я нажимаю «сохранить».
Это простая и понятная настройка, которая позволила мне сократить время итераций в геометрической прогрессии. Эти сегменты, созданные вручную, также поставляются с чертежами, которые позволяют мне определять составные сегменты, где каждый элемент указывает на пул сегментов уровня. Игра располагает эти чертежи в определённом порядке, чтобы определить «временную шкалу», которая перебирает каждый из них с помощью ежедневного начального числа, чтобы подготовить запуск на день.
Я бы сказал, что это определённо больше ручного труда, чем процедурного, так что я бы не сказал, что у него есть те эмерджентные свойства, которые можно было бы ожидать от генератора, основанного на правилах. Я пробовал это раньше, но мне это не понравилось, так что это решение работает намного лучше для того опыта, который я хотел передать. Кроме того, это делает систему очень расширяемой, и я с нетерпением жду, чтобы добавить больше сюрпризов после выхода игры.

Визуальный стиль игры очень стилизованный и абстрактный. Как вы определили художественное направление и какие ссылки или источники вдохновения сформировали его внешний вид?
Видя множество военных FPS-игр и ежегодный поток реалистичных игр AAA, которые продолжают выходить на рынок, моя философия визуального дизайна не сильно изменилась с тех пор, как я работал над «Lovely Planet». Мне просто нравятся цвета, мне нравится смотреть на цвета, и их много. Я не хочу показывать пальцем или выделять какую-то одну игру, и я не знаю, старею ли я, но некоторые шутеры, в которые я играл недавно, просто напоминают мне, почему я делаю те игры, которые делаю.
Я хочу, чтобы мир выделялся. Если бы я хотел реализма, я бы просто вышел на улицу. Я не хочу реализма, я хочу гиперреализма, если уж на то пошло. Покажите мне что-нибудь, чего я не вижу нигде больше, удивите меня! Это моя мотивация, стоящая за художественным стилем и эстетикой «Tamashika», и многое из этого просто получилось из множества различных комбинаций шейдеров и ассетов. Ретроигры были ограничены технологиями своего времени, что заставляло разработчиков мыслить нестандартно, и их творчество проявилось в играх той эпохи.
Пиксельные кадры в «Tamashika» — это дань уважения золотой эре, по которой я очень скучаю. С другой стороны, она также уверена в своих психоделических подтекстах. Именно здесь появляются радужная эстетика и искажающие визуальные эффекты. Видеоигры как «цифровые наркотики», каждый кадр спроектирован с точностью, запрограммирован для входа в ваш зрительный отдел коры головного мозга и нажатия правильных нот, чтобы модулировать ваш когнитивный аппарат в соответствии с потоком с призраком в машине. Хотя я ограничен технологиями своего времени, эстетика, по крайней мере, пытается указать на будущее видеоигр и нейроадаптивных интерфейсов «мозг-компьютер». Позвольте человеку мечтать.

Как выглядит ваш художественный конвейер для создания окружения, врагов и VFX в такой динамичной, процедурно управляемой системе?
В самом начале проекта я нашёл художницу Ильзе, которая каким-то образом могла создавать потрясающие анимации с минимальным количеством указаний с моей стороны. Казалось, она знала, что нужно «Тамашике», и у меня не было выбора, кроме как просто довериться ей. До этого я жонглировал ретро-стилем в 3D-арте с моделями для врагов и игрока, но, увидев, как нарисованные от руки анимации взаимодействуют с геймплеем, я решил использовать сочетание 3D-окружения и 2D-врагов в духе Doom и Wolfenstein, но с более высоким разрешением и частотой кадров, конечно.
Все материалы окружения — это чистое программирование шейдеров. Простые узоры, сочетающие в себе смесь цветов, которые реагируют на музыку и некоторые действия игрока, придают миру ощущение живости и отзывчивости, что было ключевым элементом, определяющим дизайн. Мне нравится играть с шейдерами и смешивать переменные в уравнениях для получения коктейля эффектов, поэтому, кроме нескольких текстур в некоторых разделах, большая часть графики — это чистые уравнения и код.
Визуальные эффекты на экране следуют тому же сценарию, но фоны анимированы Weirdcore. Психоделический транс движущихся цветов на переднем плане с нарисованными от руки анимациями, наложенными на покрывало волшебного звёздного неба, мягко пульсирующего на заднем плане, придаёт каждому кадру энергию сновидения, которое я хочу, чтобы игроки испытали.

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

Существуют ли какие-либо специальные инструменты или внутренние системы, которые ваша команда разработала для поддержки процедурной генерации, итераций или тестирования?
Считаю ли я пять итераций редактора уровней? Очевидно, я выбрал живописный маршрут! Только после демоверсии Steam Next Fest в прошлом году я начал по-настоящему разрабатывать, итеративно и тестировать модульные секции уровней должным образом. У нас были сборные секции, запечённые в Blender с помощью пользовательских скриптов, экспортирующих сложный JSON с описанием моделей уровня и сущностей. Я использовал эту систему какое-то время, но она не позволяла мне быстро итерировать, поэтому меня это беспокоило.
Новая система, которая у нас есть сейчас, которую я описал выше, ускорила процесс в геометрической прогрессии. Я мог ретушировать уровни, нажать «Сохранить», Alt+Tab в игру, нажать кнопку, чтобы загрузить новые данные, и воспроизвести секцию, чтобы мгновенно протестировать её. Это был основной процесс проектирования, тестирования и итераций, который я использовал для разработки уровней. Тестирование генератора, который размещал бы эти сегменты в более длинных аранжировках, было сложным.
Я вручную запускал аранжировки в течение нескольких часов, чтобы проверить расхождения в чертежах, но это не было масштабируемым решением проблемы. В конце концов, я написал автораннер, который позволил бы мне оставить игру работающей на уровнях и регистрировать любые ошибки, которые я мог бы проверить позже. В целом, это обеспечило мне хороший конвейер проектирования и тестирования.

Производительность может быть сложной задачей в динамичных FPS-играх с большим количеством эффектов и динамическим контентом. Какие стратегии или оптимизации были ключевыми во время разработки?
Я не Джон Блоу, но мне нравится писать лаконичный код. Эффективный или производительный? Ну, это зависит от того, кого вы спросите. Насколько мне удалось этого добиться, конечно, спорно, но я сделал всё возможное, чтобы игра работала плавно. Все ассеты в игре объединены и хранятся в памяти, чтобы генератор мог перетасовывать их, не загружая и не освобождая ничего во время геймплея.
Несколько врагов перерабатываются и заменяются на протяжении всей игры, поскольку у всех них одинаковые ассеты. Большинство мелких реквизитов, которые часто повторяются, инстансируются на GPU. Геометрия мира готовится на лету, что немного дорого, но с заливкой, гудящей в фоновом режиме, сообщающей рендереру поднимать и размещать новые блоки последовательно, она довольно оптимизирована для размещения в простых средах, которые она рисует.
Тем не менее, несмотря на тестирование на оборудовании с низкой производительностью, я не даю никаких обещаний, потому что подобные проблемы могут возникнуть после того, как в игру зайдёт множество игроков с разными настройками. Есть несколько случаев, когда игра может не выдержать нагрузки или потерять кадры, что для игры, основанной на потоке, выглядит не лучшим образом, поэтому я готов решить эти проблемы, как только они появятся.

Оглядываясь назад, какие технические или творческие задачи были самыми большими, с которыми вы столкнулись при создании TAMASHIKA?
Я считаю себя в основном технически подкованным. У меня есть тяга к цифрам, функциям и уравнениям, и мне кажется, что у меня несколько жёсткий подход к системному мышлению во всём. Но каким-то образом, когда я работаю над играми, эта мышца просто хочет полностью расслабиться. Оглядываясь на все игры, которые я сделал, я начал замечать общую черту, которая определяет мой вкус, стиль и эстетику, и которая наконец более целенаправленно воплотилась в TAMASHIKA.
Я общаюсь с геймдизайнерами и часто оказываюсь совершенно озадаченным всеми техническими деталями и системами, которые они так страстно обсуждают, всеми этими правилами, которые имеют смысл, но не всегда соответствуют тому, как мне нравится творить. Для меня игра всегда в первую очередь о том, как она ощущается, а всё остальное вторично. Довериться своему стилю и предпочтениям и оставаться верным тому чувству, которое я хотел передать, особенно в тех случаях, когда это противоречило бы тенденциям дизайна или оскорбляло бы ожидания пользователей, — вот какая задача передо мной стояла при работе над TAMASHIKA, и я преодолел её.
Много борьбы с голосами в моей голове, которые говорят мне, что игра должна быть такой или иной, и осознание того, что они не мои. Независимо от того, как её воспримут, я буду знать, что после релиза я остался верен тому опыту, который хотел создать, и я благодарен команде талантливых людей, которые подтолкнули меня к исследованию моего творчества и помогли реализовать моё видение.
Видхват Мадан, Game Developer at quicktequila
Интервью проведено Дэвидом Ягнео
Автор: Vidhvat Madan