[Перевод] Skyrim, отрендеренный в тексте

Фрактальные истории, или как создать текстовую адвенчуру с открытым миром


aa32e8138c2190420522ae64e5c55ce8.png

Однажды я решил создать текстовый Skyrim. Поначалу это звучит слишком амбициозно, но в процессе разработки истории и механики игры и определил её основные элементы: игра про мечи и магию, происходящая в живом симулируемом мире, представленном в виде книги «Выбери своё собственное приключение».

Моя идея превратилась в короткую игру Insignificant Little Vermin, с которой я участвовал в этом году на IFCOMP. В статье я расскажу о процессе создания этой игры и о том, чему я научился, понаблюдав за тем, как в неё играют люди (на Twitch).

image

Почему Skyrim?


Не стоит слишком зацикливаться на том, что я упоминаю здесь Skyrim. Для меня Skyrim — это просто широко известная фэнтезийная видеоигра, которую можно использовать в качестве примера.

  1. Достаточно широко известная, потому что я хотел, чтобы у людей мгновенно возникала в голове картинка.
  2. Фэнтезийная, потому что стиль боя в фэнтезийных играх особенно хорошо подходит к нашим целям (подробнее об этом позже).
  3. С открытым миром, потому что игры такого типа позволяют сбежать от реального мира, а потому отлично подходят к нашим целям (подробнее об этом позже).
  4. Видеоигра, потому что я больше делаю акцент на игровом процессе/течении игры, а не на интерактивной истории (и об этом тоже чуть позже).


Важно здесь то, что мы симулируем мир, который может изучать игрок. Мир населён акторами (монстрами, NPC) и сущностями (мечами, дверями, сундуками и т.д.), с которыми может взаимодействовать игрок. В Skyrim мир рендерится в 3D, а игрок отдаёт низкоуровневые команды типа «двигаться вперёд» или «использовать оружие в левой руке».

Цель симуляции — развлечь игрока. То есть я использую слово «симуляция», не имея в виду, что Skyrim пытается «как можно ближе имитировать процессы реального мира». Для меня любая видеоигра, имеющая стабильный цикл обновления является в своём роде симуляцией — даже если это 2D-симуляция путешествия итальянского водопроводчика для спасения принцессы.

Первая попытка, намеренно наивное начало


Самый наивный способ портирования Skyrim в мир текстовой адвенчуры — взять симуляцию мира такой, какой она существует в 3D-игре и воспроизводить её покадрово, описывая происходящие действия и запрашивая у игрока низкоуровневый ввод. Это будет выглядеть примерно так:

В окрестностях Уайтрана

[…]

Вы стоите в координатах {351.0, 211.9}, смотря в направлении ССВ. Ваш меч находится в движении замаха на 12%. Вы видите бандита в координатах {351.1, 210.8}, смотрящего в направлении ЮЮЗ. Его меч находится в движении замаха на 78% и он промахнулся.

нажать «влево»
> отпустить «влево»
нажать «влево»
нажать «вправо»

Вы делаете шаг назад в координаты {354.9, 212.5}.

[…]


Как можно догадаться, ощущения от игрового процесса и сюжета будут совершенно отвратительными. И неважно, как вы будете настраивать вывод, ввод или длину каждого кадра, представляемого в тексте — они всё равно останутся отвратительными.

Вторая попытка


Один из способов решить эту задачу — повысить уровень абстракции. Мы по-прежнему будем использовать симуляцию мира Skyrim, но только на самом высоком уровне — карта, расстояния между объектами и локациями, расположение акторов, NPC, места спауна монстров и т.д. Тогда мы получаем что-то вроде этого:

В окрестностях Уайтрана

Вы прибыли в Уайтран с юга. Рядом стоит поджидающий вас бандит с топором в руке, готовый напасть.

> убить бандита
убежать

Вы поднимаете меч и атакуете бандита. <Вставьте интересное описание боя.>

Последний взмах меча перерезает глотку бандита и тот падает на землю. Пока вы нагибаетесь к нему, чтобы поднять его золото, в дюйме от вашего колена в землю вонзается стрела. Вы вскакиваете и замечаете поблизости лучника на холме.

> убить лучника
обыскать бандита
убежать

<Вставьте ещё одно интересное описание боя.>


Теперь геймплей стал немного лучше, и такой игровой процесс даже может быть увлекательным. Игрок может перемещаться в разные локации симулируемого мира, общаться с людьми, брать у них квесты и проживать сюжет Skyrim.

image

Но давайте признаемся, бои — важная составляющая интересности Skyrim. Поэтому «убить бандита, убить лучника» не совсем отражают его. В лучшем случае, если написать по-настоящему интересные описания боёв, то мы получим более длинную версию чего-то вроде Conan Kill Everything. Но вероятнее всего, игроку это наскучит после нескольких первых боёв, и он закроет игру.

Это ставит перед нами важный вопрос: что же делает бой в Skyrim увлекательным? Мы делаем одно и то же снова и снова, и каждый бой очень сильно похож на другой. Почему же это нам не надоедает после первого подземелья?

Ответ можно разбить на две части:

  1. Игрок в бою имеет высокую степень участия. В любой момент времени он может пойти вперёд, отступить, напасть, защищаться, сменить оружине, прыгнуть, пригнуться, зайти с фланга, забраться на скалу, использовать магию и т.д. Это значит, что игрок может улучшать свой навык боя. Игрок должен биться. Поэтому он может ощущать «фан» (то есть то, что определяется в таких книгах, как Theory of Fun for Game Design).
  2. Бои очень непредсказуемы. Игрок никогда не знает, чем обернётся каждый новый бой. Вы можете трижды биться с одной и той же группой врагов, и каждый раз ход боя будет отличаться. То есть игрок получает различные награды — важный ингредиент для того, чтобы игра его «зацепила».


Skyrim может снова и снова создавать для игрока похожие бои, но они не только не становятся скучными, но и наоборот являются отличным развлечением! Не вопреки своей повторяемости, а благодаря этому коктейлю из повторяемости, участия и непредсказуемости.

И в этом кроется фундаментальная сложность попыток объединить видеоигры и текст.

  • В хороших видеоиграх всегда есть какая-то повторяемость. Все игры, от Pong и Tetris до Portal и Skyrim основаны на повторяющейся постановке перед игроком похожих задач, чтобы он мог учиться всё лучше их решать.
  • Хороший текст не может слишком часто повторяться. Повторяющийся текст скучен. Попробуйте описать в прозе то, что происходит в первые пять минут игрового процесса Super Mario, чтобы это было интересно читать. Это невозможно.


Текстовые игры обычно решают эту проблему двумя способами: они или как можно больше стараются избежать повторяемости (что делает игру более интеллектуальной — все ситуации и решения уникальны) или разбивают повторяющийся геймплей на серию мини-игр. Примеры первого подхода можно увидеть почти в любой качественной традиционной интерактивной литературе. Пример второго подхода можно найти в блестящей серии Sorcery!.

Третья попытка


Поскольку мы поняли, что игровой процесс Skyrim сильно завязан на бои, давайте попробуем подход с мини-играми (а не более интеллектуальный и неповторимый).

В окрестностях Уайтрана

Вы прибыли в Уайтран с юга. Рядом стоит поджидающий вас бандит с топором в руке, готовый напасть.

> убить бандита
убежать.

<Графическая мини-игра с боем.>

Бандит падает навзничь и умирает.

image

В мини-игре тоже может быть какой-то текст, но механика к нему не привязана. В Sorcery! боевая мини-игра состоит из серии решений о силе удара (по шкале от полной защиты от полного нападения). Но в дизайне мини-игр нет никаких ограничений. Это может быть простая карточная игра, головоломка «три в ряд» и т.д.

Это работает — лично я купил бы мобильную версию Skyrim, сделанную в том же стиле, что и Sorcery!

Но я также думаю, что можно сделать лучше. В основном я получаю удовольствие от Skyrim потому, что это открытый мир, в котором может случиться что угодно и где угодно. Нет никакого переключения между режимами «исследования» и «боя». Таверна, в которой игрок общается с NPC, мгновениями позже может стать точкой тактического укрытия. Игрок может маневрировать вокруг патруля и атаковать его чем-нибудь мощным издалека, с относительно безопасного утёса. И так далее.

image

Ничто из этого невозможно качественно перенести в игру с текстом и мини-играми. Поэтому давайте двигаться дальше.

Четвёртая попытка


Мы снова изменим уровень абстракции. Очевидно, что наивное начало с покадровым воспроизведением текста было плохим ходом. А команды типа «убить бандита» делали уровень абстракции слишком высоким, вне зависимости от того, описывался ли бой текстом или реализовывался как мини-игра.

Давайте опустимся немного ниже, с уровня «убить бандита» до тактического подхода. К чему-то вроде этого:

В окрестностях Уайтрана

Вы прибыли в Уайтран с юга. Рядом стоит поджидающий вас бандит с топором в руке, готовый напасть.

> убить бандита
сбежать

Как именно вы хотите убить бандита?

… мечом
>… из лука

Вы быстро натягиваете тетиву и выпускаете стрелу. Стрела пролетает рядом с ухом бандита. <Описание остальной части боя.>


Такой подход даёт больше вариантов, чем просто «убить», но через какое-то время он становится не слишком интересным. Каждый игрок придерживается определённого стиля игры (скрытность, атаки на расстоянии, ближний бой, магия и т.д.), а потому на самом деле выбор у него будет небольшой. Для лучника самой хорошей тактикой почти всегда будет «лук и стрелы» или «прокрасться мимо». У другого игрока будут совершенно другие схемы боя, но это необязательно делает игровой процесс интересным.

image

Поэтому нам нужно предложить игроку значимые варианты выбора на более низком уровне.

Пятая попытка


Ну хорошо. Давайте попробуем бой уровня «действие за действием», в стиле D&D.

В окрестностях Уайтрана

Вы прибыли в Уайтран с юга. Рядом стоит поджидающий вас бандит с топором в руке, готовый напасть.

> сделать выпад мечом
замахнуться мечом

Ваш клинок движется быстро, но промахивается мимо грудной клетки бандита. Бандит взмахивает топором и слегка задевает ваш кожаный камзол.

сделать выпад мечом
> замахнуться мечом

Меч рассекает бедро бандита и тот кричит от боли. Он пытается атаковать вас сверху, но топор скользит мимо. <Оставшаяся часть боя.>


Это уже похоже на то, что игрок принимает участие в бою. Есть множество возможных действий, соответствующих разным стилям игры (мечник может делать выпады и замахи, блокировать удары и отрубать головы; лучник может целиться в разные части тела) и эти действия можно комбинировать миллионом различных способов. Игроки могут вырабатывать собственную тактику!

image

Но у такого подхода есть проблемы.

  • Текст в результате получается очень механистичным. Это не так плохо, как наш первый наивный подход, но по-прежнему непохоже на то, что написал бы настоящий автор. «Вы делаете X, противник делает Y». Повторить. Такое очень быстро надоедает.
  • Отсутствует простой способ работы с реакциями. Удар мечом или попадает в цель, или промахивается. Разумеется, атакуемая сторона может ожидать нападения и в этот момент защищаться («встать в защитную стойку» или «поднять щит»), но обычно игроки ненавидят так поступать. Это означает обмен действия «атаковать» (отличное действие) на »возможно получить меньше урона» (скука). В некоторых случаях это может быть рациональный выбор, но он точно не похож на приключение.


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

Вот в такой ситуации я оказался после работы над игрой в течение пяти лет. Я почти сдался, решив, что доказал (по крайней мере для себя) невозможность создания игры с открытым миром типа Skyrim в тексте. Невозможность даже в теории.

Я решил отдохнуть от этого проекта «Skyrim в тексте». Вместо него я начал создавать нечто совершенно другое. Игра тоже была основана на тексте, но игровой процесс был более процедурным и психологическим. Сюжет повествовал о выживании в группе.

И в процессе работы над этим проектом я осознал, что текстовые истории фрактальны. В отличие от видеоигр (которым нужен стабильный способ обновления), в тексте нам не нужно придерживаться одного уровня абстракции.

Шестая и последняя попытка


Позвольте показать, что я имею в виду:

В окрестностях Уайтрана

Вы прибыли в Уайтран с юга. Рядом стоит поджидающий вас бандит с топором в руке, готовый напасть.

> атаковать бандита
воспользоваться луком и стрелами
убежать

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

отпрыгнуть назад
> увернуться
блокировать

Вы пригибаетесь и топор бандита пролетает в дюйме от вашей головы. Бандит на мгновение раскрывает бок, на котором нет брони.

> сделать выпад мечом
ударить кулаком сбоку
игнорировать

<Оставшаяся часть боя.>


Заметьте, что команда «атаковать» — тактическая, она находится на более высоком уровне абстракции, чем «взмахнуть» или «сделать выпад». Когда бандит впервые взмахивает топором, это происходит на уровне «действие за действием». Но когда взмах ещё не закончился, мы опускаемся на один уровень ниже, и игрок может отреагировать на эту ситуацию, увернувшись (или заблокировав удар/отпрыгнув назад). И если действие удалось, то мы остаёмся на этом низком уровне, на котором игрок может добавить контрудар во время взмаха бандита, от которого он увернулся.

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

image

Получившийся текст уже похож на то, что мог бы написать настоящий человек. Получается, что два человека не просто обмениваются наносимым уроном — это настоящий ближний бой с динамическими возможными результатами на каждом этапе развития. А игровой процесс движется на разных уровнях абстракции, как это было бы в книге.

Недостатки


Итак, вот что мы имеем: мой проект для IFCOMP Insignificant Little Vermin работает с концепцией фрактальных историй в симуляции открытого мира, создавая относительно плавное, читаемое текстовое приключение. Некоторые игроки даже предпологали, что текст не генерировался процедурно по частям, хотя я знаю, что это так. Однако важнее то, что игрокам обычно было очень интересно.


Но конечно же, ещё рано запускать фейерверки и аплодировать. Эта короткая игра показала мне ограничения такого подхода и дала понять, насколько больший объём работы потребуется, чтобы полностью реализовать моё видение открытого мира, отрендеренного в тексте.

Во-первых, игра стала только самым первым шагом в этом направлении. В процессе разработки Vermin я совершил множество открытий. У меня не было ни правил, ни устоявшихся практик, ни примеров из индустрии, на которых бы я мог основывать фрактальные истории или «Skyrim в тексте». К счастью, существует множество источников об интерактивной литературе, однако большинство из них фокусируется на совершенно другом аспекте литературы.

Например, в Vermin гораздо меньше контента, чем я хотел. По масштабу она даже близко не подходит к AAA-игре (типа Skyrim). Сейчас в ней есть только ограниченное RPG-развитие (например, персонаж игрока не может учиться новым навыкам), а в бою должно быть больше вариативности. Кроме того, в игре нет функции карты.

Однако всё это решается дополнительным вложением времени в этот проект.

Но более интересным мне показалось то, что некоторые ограничения убрать не так просто. Эти ограничения произрастают из самой природы системы и в целом из текста.

Необходимость ясности и (поверхностной) простоты


В тексте очень просто дать слишком много информации. Абсолютно хаотичный бой вполне допустим в 3D-графике, но нечитаем при рендеринге в тексте. Бой на мечах с десятью акторами нужно разбить на части или абстрагироваться от него — возможным решением будет что-то вроде Level of Detail (LoD) или Limelight, при котором действия акторов, расположенных далеко от игрока или игнорируются, или описываются вкратце.

В тексте сложно (и скучно) объяснять пространственные соотношения. Почитайте любую книгу о мечах и магии — вы увидите, что Конан/Фафхрд/Элрик всегда замахивается на пирата/мечника/лича, но никогда не делает это «вперёд и влево». Расположение всегда описывается в самых общих словах. Неважно, насколько чётко вы мыслите — вам никогда не победить 2D- или 3D-графику в способности быстро дать понять, где все находятся и что они делают.

В тексте необходимо также думать о названиях, категориях и местоимениях. Очень помогает использование полов, потому что так проще сообщить игроку, на чём он сфокусирован. Например, если в сцене есть мужчина-вор, женщина-воин и чудовище, алгоритм генерации естественного языка чаще всего должен использовать слова «он», «она» и «оно». И это замечательно. Но сравните это с сценой, в которой есть три орка-воина мужского рода — в ней вы получите множество предложений типа «Орк слева делает ход». Это скучно и сложно читать.

В тексте сложнее работать со всем многообразием состояний персонажей. Нельзя ожидать, что игрок запомнит, например, протянутую влево руку орка. К счастью, у людей есть воображение (и они любят им пользоваться!), поэтому симуляция низкого уровня может быть сложной, необходимо только убедиться, что она выделает только самые важные аспекты, а остальное можно позволить читателю получить из подтекста.

Потребность в казуальности


В тексте невозможно создать механику, слишком основанную на характеристиках или слишком соревновательную. Если пойти таким путём, то рано или поздно игра превратится в электронную таблицу с небольшой шапкой нарратива. Не то чтобы это плохо — мне нравятся игры такого типа (см. Seedship). Просто это не то, к чему мы стремимся, создавая фрактальные истории.

Процедурность — не «серебряная пуля»


В тексте бой (и процедурный контент в целом) работает намного лучше, когда он перемешан с чем-то ещё. Развитие контекста, персонажа и нарратива — вот части того, что делает игру интересной. Во всех боях Vermin есть хотя бы небольшой текст, добавляющий немного «соли» (противники говорят друг с другом), то же самое относится к локациями, когда игрок бродит по миру. Невозможно просто положиться на процедурную генерацию — всё равно необходимо множество контента (даже если этот контент в конце концов используется процедурно). Всё это соответствует общему правилу — процедурный контент не для «ленивых разработчиков». Он нужен не для того, чтобы избавить вас от создания контента. Он нужен, чтобы контент реагировал на игрока. И вам всё-равно нужно его много.

Писать тексты сложно


Очень просто создать что-то вроде «Вы ударили орка и нанесли урон 15 HP». Однако гораздо сложнее написать множество версий фразы «ваш клинок пролетел мимо орка».

Генерирование естественного языка — это сложно


Это проще, чем современное 3D-программирование (по крайней мере с точки зрения человеко-часов), но ненамного. Человеческий язык богат и полон ловушек. К счастью, мы можем выбрать подмножество языка, которое довольно просто реализовать (а именно действия в настоящем времени). Однако всё равно, нельзя ожидать от человека, в основном занимающегося писательством, успешного программирования такой игры. Это не ещё один текстовый Twine или Inform. Это задача для команды разработчиков, а не для одного автора.

Не для любого жанра


Наконец, для фрактальных историй подойдёт не всякий контент. Или, по крайней мере, некоторые жанры намного лучше подходят для такой системы. «Мечи и магия» подходят отлично, потому что:

  1. Многие действия описываются прямолинейно, в настоящем времени.
  2. В них имеется непосредственный, «спинномозговой» конфликт.
  3. Они построены на реакциях (противодействуй удару, заблокировав его).
  4. Они посвящены физическому исследованию.


Сравните это с чем-то вроде Portal, в которой есть действия, которые трудно представить, происходящие в местах, которые сложно описать, требующие от игрока множества навыков. Но нам не нужно обязательно доходить до 3D-головоломок, чтобы найти тему, в которой такой подход не сработает. Даже другие ориентированные на бой игры в открытых мирах значительно сложнее «портировать в текст», потому что в них используются относительно реалистичные современные перестрелки, а не фэнтезийные бои. Возможно, мне просто не хватает воображения (и у меня почти нет опыта в литературе, касающейся перестрелок), но я не могу представить хорошую боевую механику, которая может работать с мгновенным действием огнестрельного оружия.

Чтобы закончить на высокой ноте


Итак, я довольно долго рассказывал о проблемах фрактальных историй. Давайте закончим на высокой ноте. Позвольте мне объяснить, почему я испытываю такой энтузиазм.

image

Форма, которую в результате принял Insignificant Little Vermin, отлично подходит для казуального игрового процесса, особенно на мобильных устройствах. Игра не требует большого навыка, её можно потреблять короткими порциями геймплея или целиком. Она содержит элемент случайности. Она позволяет игроку читать историю, являющуюся для него уникальной, и исследовать мир с подходящей для него скоростью. Она не требует разглядывать то, что происходит на экране — это просто текст и пара статичных изображений.

Если вкратце, её можно читать и играть в неё в ожидании автобуса.

Я честно считаю, что такой подход может изменить мировоззрение многих инди-разработчиков (некоторые из них ещё даже не воспринимают себя как разработчиков игр). Как я сказал выше, это не система для одного писателя-автора-разработчика. По сравнению с Twine, входной барьер очень высок. Но по сравнению даже с простейшим 2D-платформером он относительно низок.

  • Вы можете сместить фокус разработки с программирования графики и оптимизации под 60fps на базовую механику, симуляцию и генерирование естественного языка. Помните, теперь вы не ограничены 16 миллисекундами на кадр, поэтому для симуляции и ИИ будет достаточно времени.
  • Художники могут тратить меньше времени за детали окружения (трава здесь, текстура стены там) и больше на придумывание интересных миров и персонажей. Кроме того, они не ограничены возможностями движка рендеринга. Если они могут описать что-то, то могут это использовать. Спускающаяся по равнине армия из 500 тысяч дворфов? Отлично. Структура типа «Мира-Кольца», в которой вы можете видеть на миллионы километров? Справимся. Лавкрафтовская/эшеровская/неэвклидова архитектура? Никаких проблем.
  • Дизайнеры меньше ограничены одним уровнем детализации. Они могут без особых проблем позволить игроку в одной игре побыть и генералом, и солдатом. При работе с текстом нужно реализовывать гораздо меньше, чем работая с графикой. Добавление любой геймплейной механики внезапно становится намного «дешевле».
  • Маленькая команда может создать нечто, сравнимое по масштабам со Skyrim.


Мне не терпится увидеть, куда заведёт такой подход к разработке игр. Свои достижения я буду излагать в своём блоге и в Twitter. Если вам нужно меньше шума, то вы можете подписаться на рассылку, чтобы быть в курсе основных моментов.

Если вы пропустили ссылку, то вот Insignificant Little Vermin и проект для IFCOMP.

© Habrahabr.ru