На этой неделе к нам присоединился технический директор Ник Славен (Nick Slaven). Он поделится своими мыслями о разработанных нами важных инструментах, необходимых для создания всего, что нужно для наших сюжетов — роликов, заданий и диалогов.
Нам в The Chinese Room крайне важно повествование. Наши игры богаты сюжетами и способами их подачи, а чтобы история имела смысл нам нужно дать игроку возможности что-то делать помимо ходьбы.
Меня зовут Ник и моя задача в том, чтобы наша команда могла рассказывать истории и предоставлять игроку интересные задачи.
Наша студия работает над двумя крупными проектами, поэтому нам нужно подходить к использованию технологий с умом. Мы создаём системы, которые будут использоваться как в Vampire the Masquerade: Bloodlines 2, так и Still Wakes the Deep, и они должны подходить командам обеих проектов и облегчить их труд. Для сюжетной студии это означает инструменты для повествования.
Повествование включает в себя не только произносимые слова. Нам может понадобиться отправиться в далёкие земли, чтобы получить магический артефакт, открывающий ворота замка принцессы. Я остановлюсь здесь, чтобы не позорить себя нехваткой сценаристских навыков. Суть остаётся одна — всего несколькими словами я могу описать некую историю, и она появится в вашем воображении.
Вернёмся немного назад. Для нас это понятно, но как объяснить игре, что игрок получил магический артефакт, и как его получение затем откроет ворота и позволит продвинуться по заданию дальше? Как можно это сделать? Наш ответ — разработка способа описания истории в виде последовательности событий, которую игровой движок сможет понять. Мы называем это скриптингом заданий.
Скриптинг заданий — это высокоуровневый способ представления последовательности событий, которую игроку необходимо решить в правильном порядке для продвижения по сюжету. Например, вам может потребоваться найти ключ, чтобы открыть дверь. Для этого мы создаём представление состояния игрового сюжета и событие, которое его продвинет. В нашем случае это будет открытие двери; мы ищем ключ, и только после того, как ключ найден, дверь можно открыть и увидеть то, что находится в комнате за ней.
Вот скриншот того, как это может выглядеть в нашей системе скриптинга заданий.
Пример задания в скриптинговой системе.
В полноценном сюжете будет сотни таких состояний, расположенных на множестве сюжетных линий. Вот небольшой пример одного задания в одной из наших игр.
Происходит множество событий, но наличие простого способа обозначения структуры задания позволяет команде дизайнеров быстро их прорабатывать для получения наилучшего результата.
Это что касается действий, но что насчёт разговоров?
Ветвящийся сюжет состоит из множества деталей. История может пойти в разные стороны на каждой точке принятия решения. Вместо написания собственного инструмента мы решили воспользоваться Ink, языком сюжетного скриптинга с открытым исходным кодом, созданный Inkle Studios. Нам пришлось портировать его с C# на C++, чтобы он работал на Unreal, но это было намного быстрее создания собственной системы сюжетного скриптинга с нуля.
Визуальный пример текста в Ink. Не является частью Bloodlines 2.
Ink позволяет нашей команде сценаристов создавать диалоги, сопровождающие скриптинг заданий и рассказывающие историю игры. Для этого создаётся сюжетный сценарий, что похоже на написание сценариев для фильмов. Эрон, наш ведущий нарративный дизайнер, поделился следующим об использовании Ink для создания историй.
Эрон Ле Брей (Arone Le Bray): "Ink довольно интересный... в нём определённо есть ряд особенностей, которые мне нравятся, и я думаю, что большинство из них стали полезны с точки зрения нашей интеграции. Мы можем использовать базовый язык скриптинга внутри Ink для создания нелинейных сцен, реагирующих на действия игрока, без повторения одной и той же сцены несколько раз.
Ещё мне нравится возможность поместить файл диалога в один блок, срабатывающий в игре, без необходимости разбираться с кучей скриптов. Это тоже отлично.
К тому же в нём легко разобраться как новичку, так и поделиться своей работой с другими командами. По сути это текстовый документ, но форматирование Ink, позволяет сделать из этого текстового документа (который уже понятен большинству людей) функциональный, практически готовый инструмент разработчиков — это огромный плюс!"
Как после этого создаются анимации и звук?
Нашим решением стало внедрение «экспозиционного листа». Мы взяли это название из анимационной промышленности, но в общем и целом для каждой создаваемой авторами строчки диалога мы можем задать звуковое событие, применить анимации к лицу и телу и ряд других действий. Экспозиционный лист похож на таблицу в Excel, но благодаря наворотам позволяет нам сделать предпросмотр аудио и анимации по ходу создания сцены для диалога в игре.
Когда игрок совершает выбор в диалоге, система передаёт этот выбор в среду Ink, после чего мы получаем текстовые ответ, который сравнивается с экспозиционным листом для проигрывания анимации и звука обратно игроку.
Комбинирование скриптинга заданий и Ink предоставило нам очень гибкую и мощную систему для повествования. Мы используем её для всех игр, над которыми работаем.
Раз уж Ink нам так сильно помог, то мы решили, что было бы справедливо поделиться чем-то взамен, и создали Inkpot — лёгкую поддерживающую шаблоны оболочку нашего порта Ink на C++. Она свободно доступна на нашем сайте GitHub. Вы можете загрузить этот инструмент и использовать его в своих проектах на Unreal. Дайте нам знать, если решите его попробовать! Нам будет приятно увидеть, что с его помощью можно создать.
Что дальше
Позже в этом месяце выйдет долгожданный расширенный показ игрового процесса. Через две недели мы также покажем вам новый дневник разработчиков.