Призраки, шаманы и шамановоды: как мы конструируем геймплей для игры Rush Royal
Привет, Хабр! Меня зовут Катя Невзорова, я старший программист в департаменте Игры. В этом материале я решила поделиться тем, как мы с командой делаем геймплей для игры Rush Royal.
У самых популярных игр вроде шахмат, нардов, го или, например, покера, довольно простые правила, которые легко выучить. Однако они заставляют мозги кипеть, когда игра зашла далеко и перед тобой сильный противник. Впервые услышав про Rush Royale, я спросила, о чём эта игра, и мне ответили:»Защита башен (tower defence). Очень простой жанр, вроде «Тетриса», «Арканоида» или «Три в ряд»». Именно такие игры на собеседованиях просят написать в качестве тестового задания. В Rush Royale для игрока всё просто: можно выставить новую пешку, объединить две пешки, прокачать одну из них или применить способность героя. Создатели Rush Royal тоже начинают с простого на своей работе: готовят кирпичики и потом соединяют их между собой. Что из себя представляют эти кирпичики я и расскажу в этом материале.
Стань режиссером своей неповторимой игры
Для тех, кто не играл в Rush Royale, я кратко опишу устройство её мира. Итак, «откроем коробку и посмотрим, что входит в набор», как говорят в обзорах настольных игр. Мы видим доску с пешками и дорогу, по которой движутся зелёные бровастые слизни — враги. Пешки — это наши маги: красненький, голубенький, жёлтенький… Нужно расставлять их вдоль дороги и ДэПээСить врагов, не позволяя добраться до ворот замка:
Однако этим дело не ограничивается: при определённом стечении обстоятельств срабатывают дополнительные магические механики, разные для разных пешек и героев, делающие игру интересней. В этом видео, например, слияние двух шаманов приводит к вызову призрака. Игра становится быстрее и динамичнее:
В начале видео панды прокачиваются и начинают быстрее стрелять. Чуть позже мы видим полёт стрел, запускаемых героем противника. Сразу после этого две наши пешки-метеора объединяются, и снаряд-метеорит летит по врагам. Перед окончанием вражеской волны собираются души всех живых пешек и добавляют здоровья боссу следующей волны.
Все зависит от того, какие пешки у нас в руке, но кроме них в игре в качестве актёров участвуют и другие сущности:
Любая сущность может стать жертвой магической механики. Некоторые — герой, пешка, ловушка, враг, а также умершая пешки и взятый в бой предмет — являются продвинутыми сущностями и могут сами колдовать, и в результате заклинаний инициировать магические механики. Сущности обладают набором своих параметров и обмениваются тегами-метками при выполнении заклинаний. Но в Rush Royale заклинания не простые, они написаны на особом языке и заслуживают отдельного изучения. Готовы к инициации?
Всё есть эффект
Базовое понятие в RR-магии — это эффект. Не в привычном смысле «FX», а в смысле «единичное изменение в мире». Эффектом может быть всё, что происходит, видимое-слышимое или незаметное. Эффекты выстраиваются в причинно-следственные цепочки, как бусины нанизываются на нитку (с разветвлениями). Такая цепочка проигрывается, словно запуск салюта от подожжённого фитиля: по ходу применения перепрыгивает от сущности к сущности, меняет их параметры и проигрывает визуальные эффекты.
Цепочки эффектов Чумного Доктора, который кидает коктейли Молотова и ножи:
Как это сделано с точки зрения кода? У каждого эффекта есть источник, владелец и цель. Источником и целью может быть любая сущность, а вот владельцем — только продвинутая. Эффект чаще всего берёт параметры владельца и применяет их к цели, после чего уже она становится владельцем — и так по всей цепочке срабатывания эффектов. Цель может передать инициативу не одной, а сразу нескольким другим целям. Такая цепная реакция может гулять по полю ещё некоторое время. Это похоже на дерево действий, или блок-схему, или визуальное программирование сценариев в Unreal Engine. Только в нашем случае эффекты — разновидностей которых очень много — обычно срабатывают моментально и тут же «забываются». Ещё одно из достоинств наших цепочек эффектов — они совершенно одинаково исполняются на устройствах, играющих друг с другом по сети. Но с сетевой игрой есть подвох, о котором я расскажу ниже.
Создание и редактирование эффектов
Эффекты придумывают наши дизайнеры. Работа начинается с продумывания идеи, лежащей в основе какой-нибудь архетипической сущности-персонажа: мага холода, плута, ведьмы, шамана и т.п. После этого дизайнеры изобретают эффекты, с помощью которых можно реализовать особые способности персонажа. Затем пишут дизайн-документ, в котором описывают, как нужно собрать персонаж, собирают и тестируют в игре.
У каждого эффекта своя конфигурация с настройками. Для работы с ними у наших дизайнеров есть два основных инструмента: WorkSpace и DebugTool. Первый позволяет редактировать эффекты без запуска игры.
Пример WorkSpace для Чумного доктора:
Пример WorkSpace для более сложного героя Mary (абилки и пассивки):
Дизайнеры собирают эффекты в цепочки в виде дерева взаимосвязей. Там же можно сделать подложку с описанием эффекта. В последнее время это очень полезно, потому что эффекты сильно усложнились.
А чтобы посмотреть на работу эффектов в игре, нужен другой инструмент, визуализирующий историю их выполнения и позволяющий проследить, сколько раз, на ком и с какими значениями был исполнен тот или иной эффект. Это позволяет опробовать работу цепочки в игре с меньшим привлечением программистов.
На скриншоте можно увидеть сколько раз применились эффекты Чумного Доктора, активны ли они сейчас, узнать, кто был источником, владельцем и целью, какие теги висели на этих сущностях и т. д.:
Очень часто бывает, что эффект проигрывается, но что-то посчиталось неправильно. Можно поставить игру на паузу и отмотать исполнение цепочек назад, ведь они очень быстро пролетают и можно что-то не заметить. Поэтому для дальнейшего анализа сохраняется вся история срабатывания эффектов.
Большая библиотека эффектов
Все эффекты делятся на категории: триггеры, селекторы, фильтры, тикающие, задержки, щиты и атаки. Например, фильтры проверяют ситуацию, и если выполняются заданные условия, то срабатывает необходимая последовательность других эффектов. Тикающие перестают работать, когда прошло достаточно времени с того или иного события.
Основные категории эффектов:
Изменяющие параметры сущностей (с визуальным эффектом).
Добавляющие и удаляющие теги.
Атакующие, наносящие урон (с визуальными эффектами), лечащие, ворующие здоровье.
Выбирающие новые цели (случайные, соседей, по диагонали, в радиусе).
Создающие, заменяющие на другие, удаляющие сущности.
Объединяющие и перемешивающие пешки на поле.
Таймеры (периодические, задержки).
Вызывающие другие эффекты по условию (триггеры, шансы, фильтры), определённое количество раз.
Удаляющие уже навешанные эффекты (глушащие, защищающие, убирающие совсем).
Запрещающие игроку что-то делать (улучшать пешки, объединять).
Меняющие значение маны.
Считающие разные величины (количество пешек определённого типа на поле, сумму их объединений, количество тегов на сущности, количество соседей, длину цепочки однотипных пешек).
Измеряющие расстояние до сущности.
Определяющие, что сложился какой-то паттерн на поле (горизонтальная или вертикальная линия, крест, три в ряд, фигурка из тетриса).
Конечно, мы не придумывали всё сразу. Большинство эффектов и целые категории добавляли в игру постепенно. За время её развития у нас накопилось очень много разных эффектов, позволяющих собирать персонажей почти без участия программистов. Сегодня дизайнеры собирают цепочки, словно бусины нанизывают на нитку. Для упорядочивания работы мы храним все эти «бусины»-эффекты в единой библиотеке, поэтому для сборки новых персонажей почти не приходится привлекать программистов, дизайнеры справляются сами.
ТЗ, прототип или всё сразу?
Ещё немного подробностей о нашей работе. Когда мы создаём совершенно новую игровую механику, то одновременно пишем ТЗ для программистов и прототип для дизайнеров. Во-первых, так мы экономим время и быстрее выводим фичи в эксплуатацию, а во-вторых, программисты сразу могут выловить потенциальные ошибки. А чтобы ТЗ не было просто словесным описанием, мы сразу делаем технический прототип, выполняющий роль черновика — код может быть не слишком чистый, требующий дальнейшего рефакторинга.
Как мы попали с шаманами
При таком разнообразии игровых механик было лишь делом времени возникновение каких-нибудь курьёзов. И первым таким курьёзом стала история с шаманами. Шаманы — это пешки, которые сразу после объединения стреляют во врагов призраками, и пока призрак летит — довольно медленно, целых две секунды, — его можно перехватить. Но оказалось, что при игре по сети перехват не всегда был возможен. Мы обратили на это внимание, механика попала в эксплуатацию, и её начали использовать «шамановоды»: нечистые на руку игроки запускали призрака и сразу отключали у себя интернет, а после пролёта призрака снова включали — в этот промежуток времени другой игрок не мог быстро подтвердить своё действие перехвата. Дошло до того, что когда люди заходили в игру и видели, что противник с шаманами, то сразу выходили. Почему возник такой баг? Полёт призрака — это цепочка эффектов, одно из звеньев которой — попадание во врага. Эта цепочка исполняется локально на устройстве, и если у игрока порядок с пингом, то он и не заподозрит, что что-то может пойти не так и его контрудар не сработает. Но если у противника пинг слишком высокий (он быстро отключает себе интернет), перехват не срабатывал. Вся эта история случилось из-за того, что при разработке шаманов мы не сделали ТЗ и не написали прототип.
Совершенно новые механики
Опыт с шаманами не испугал наших дизайнеров, но они теперь осторожно относятся к новым механикам: вдруг мы что-то сделаем, а оно не заработает. Введённая практика совместных ТЗ и прототипов помогает избежать подобного и создавать совершенно новые механики. Например, мы придумали панду, которая умеет выпивать ману и превращаться в иное существо на 10 секунд, а за это время другие игроки могут успеть как-то среагировать. После шаманов мы опасались, что эта цепочка эффектов тоже может плохо работать по сети. Но написали прототип и поняли, что таких проблем нет.
Ещё мы придумали новый эффект для кнопок Power Up: если их нажать, то при появлении некоторых пешек меняется интерфейс. А если заходит панда, то у неё уже совершенно другая кнопка Power Up. Благодаря новым эффектам привычный tower defence будет уже не узнать.