Текстовые игры — новый старый инструмент для автора или «Сделаем Текстовые Квесты снова Великими!»

Текстовые игры — новый старый инструмент для автора или «Сделаем Текстовые Квесты снова Великими!»
Такими раньше была интерактивная литература

Про текстовые игры написано довольно много как на Хабре, так и на просторах интернета. Это один из самых первых жанров интерактивных развлечений с использованием ЭВМ и даже без него (просьба поделиться опытом НЕэлектронных текстовых игр в комментариях).

В данной статье я хочу мимолетом задеть вопрос истории и нынешней «полужизни» жанра текстовых игр, пофантазировать на тему будущего данного жанра, привести примеры текстовых игр, которые сейчас пользуются популярностью и подсказать об абсолютно новом переосмыслении старого инструмента для создания текстовых игр, о котором вы 99% не знаете. И все, конечно, исключительно на базе личного опыта.

Все причины в прошлом

Лично для меня текстовые игры или интерактивная литература в первую очередь ассоциируются с компьютерной игрой Космические Рейнджеры 1 и 2 (в дальнейшем КР). Не буду рассказывать про то, что это за игра (вы и так знаете или узнаете сами). Оснавная суть в том, что в механике этой игры был встроен целый пласт так называемых «текстовых квестов», каждый из которых представлял из себя небольшой интерактивный рассказ, с уникальными игровыми механиками. В одном из них Вы могли участвовать в охоте на инопланетного зверя, в другой стать участником секретной спецоперации или даже ваша миссия могла провалиться, не успев начаться, и стать битвой за выживание, не говоря уже о легендарной «Тюрьме».

Понятное дело для молодого парня, увлекающегося белетристикой, возможность объединить прозу и игры, показалась очень воодушевляющей и уже вскоре я разбирался с функционалом редактора текстовых квестов для Космических Рейнджеров TGE (вроде как это TextGame Engine). На тот момент я думал, что это самый удобный, лучший, понятный и простой инструмент, который позволит мне реализовать любую задумку в кратчайшие сроки. Как же я был прав.

Внешний вид интерфейса AXMA Story Maker JS.
JS дает большой раздор для фантазии, но не каждому..
Внешний вид интерфейса AXMA Story Maker JS.
JS дает большой раздор для фантазии, но не каждому..

Прошли года, идея создания текстовой игры подутихла, что бы вспыхнуть вновь с новой силой. Но обладая уже небольшим жизненным и юзерским опытом, я стал искать более современный и удобный инструмент, который позволит мне (и другим пользователям) запускать интерактивные истории не только через самих КР. И на тот момент я нашел их множество:

QSP, URQ, Instead, Twine (тогда он назывался по-другому), AXMA и т.д. Их было много, но после опыта с TGE, все они казались громоздкими, сложными в реализации творческих задумок, устаревшими. Ни один из движков не позволял мне сконцентрироваться на творчестве, но в течении следующих лет я вернусь к каждому из них вновь, узнаю о новых и все так же отложу идею создания текстовой игры на годы — до определенного момента.

Что было сейчас и будет тогда

Рекламу этой игры многие видели в youtube
Рекламу этой игры многие видели в youtube

Текстовые игры были всегда — лично для меня. Проблема лишь в том, что текстовые игры — это либо готовый выверенный продукт по типу «The Life and Suffering of Sir Brante» — реклама которой долго преследовала геймеров в youtube — или «Vampire: The Masquerade — Coteries of New York», или — если вспоминать смежный жанр графических новелл — «Бесконечное Лето». Либо же авторские поделки, основная цель которой никогда не заработок, например: «Дядя, который работает в Нинтендо» (победитель конкурса интерактивной литературы — КРИЛ 2018) или из зарубежных — «Ghosts Within».

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

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

Возвращение к новому старому

Как выглядит оригинальный редактор квестов TGE
Как выглядит оригинальный редактор квестов TGE

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

И довольно символично, что пролистывая выдачу в поисковике на очердной свой вопрос, я наткнулся на статью Василия Рогина. Этот человек решил вспомнить былое и подготовил удобный плеер для «расшифровки» и запуска текстовых квестов формата КР *.qm и *.qmm, так еще и выложил исходники на GitHub.

Редактор всему голова

Не так давно Василий организовал в своем плеере и возможность редактировать квесты «на лету», то есть внедрил весь функционал из TGE для создания текстовой игры в свое веб приложение и продолжает развивать его.

Вы можете делать игры где угодно!

Тут не будет полной документации по созданию, она распространялась вместе с редактором на форуме разработчика КР и доступна для скачивания из самого веб-плеера Василия. Но я расскажу какие-то нюансы и свои «кейсы» в вопросах реализации задуманного.

Кстати. Не стоит забывать, что редактор может открыть любые классические квесты Космических Рейнджеров, и в них можно подсмотреть реализацию множества игровых механик.

Начало Вашей истории

Создание истории базируется на локациях и переходах. Локация описывает окружение или ситуацию, или и то и другое. Переходы связывают две локации в виде выбора игрока.

Предположим у нас есть лошадка. Мы вводим в первой локации эту лошадку.

Локация 1: «Лошадка стоит и щиплет травку»

Потом мы можем добавить локацию, где лошадка идет:

Локация 2: «Лошадка без устали идет в сторону своего пастбища»

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

Особенность системы TGE в том, что действию мы так же можем задать какой-то отображаемый текст, который становится связующим двух локаций.

Переход: «Начать идти» — «Лошадка встала и слегка отряхнула голову от налетевших мух. Сначала она сделала неуверенный шаг, потом второй. И вот Лошадка уже идет в сторону своего пастбища. «

После перехода, до вывода «Локации 2» игроку показывается 1 кнопка «Далее». После нажатия на неё нам и покажут новый текст самой локации.

Ну и перед завершением этого блока. Создадим еще 3 перехода. «Остановиться» — который вернет нас на 1-ю локацию. Так же создадим «Продолжить идти» — что заново вернет нас на 2-ю локацию, что тоже возможно. И «Отдыхать» — который будет показан только на первой локации и вернет нас на неё же.

Параметры богу параметров!

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

Те кто играл в квесты КР помнят, что там у персонажа игрока мог быть свой инвентарь, или статус бар, какая-либо информация, динамически изменяемая в течении квеста. Все это отображалось в специально поле справа в виде строчек с текстом или символами. Это все реализовано с помощью параметров.

Параметр это некая переменная — которая содержит в себе число (через него мы и работаем в течении игры со всеми условиями и отображениями), так же диапазон минимального и максимального значения этого числа и диапазоны со строками этого параметра. Проще на примере.

Создадим нашей лошадке шкалу «Усталости», но выводить мы её будем не сухими числами, например от 0 до 10, а поделим на 5 диапазонов.

0 : «Лошадка выдохлась и не может идти»

1-3 : «Лошадка почти выдохлась»

4-6 : «Лошадка сильно устала»

7-9 : «Лошадка устала»

10 : «Лошадка бодра и полна сил»

На начало квеста мы сделаем значение 10.

Условия трону условий!

Теперь мы можем при переходе на «Локацию 2», отнять у лошадки 1 усталость и выводить получившуюся строку в интерфейсе игрока. При этом если усталость дойдет до нуля, то нам больше не будет отображаться переход «Продолжить идти», а точнее, мы сделаем так, что он будет отображаться, но не будет активен. TGE умеет делать и так и сяк.

Про условия стоит поговорить отдельно, но не сейчас. Скажу только, что движок понимает много математических и логических операторов, например:

/,div, mod,*,-,+,to,in,>=,<=, >,<,=,<>,and,or.
Интерфейс редактора прост и понятен даже далекому от IT человеку
Интерфейс редактора прост и понятен даже далекому от IT человеку

При каждом переходе или посещении локации, мы можем изменять значение параметров. Условия же можно задавать только для переходов.

Локациям нельзя выставить условия посещения. Если в них ведет переход, значит все схвачено, вы либо попадете туда если соответствуете условиям перехода, либо нет.
Но есть у локаций и свои особенности — а именно варианты отображения. Официально TGE поддерживает бесконечное их количество, а неофициально — вам хватит и 5-10. Выбираются варианты отображения либо по порядку (от 1-го варианта при первом посещении, второго при втором и т.д.), либо по математической формуле которую задаем мы. При этом мы можем пользоваться значениями параметров.

И вот это дает уже бесконечный разлет фантазии. Пример:

Мы хотим, чтобы при посещении нашей локации, где лошадка идет, каждый раз в зависимости от того насколько она устала у нас менялся текст. В этот раз я использую параметр для того что бы брать его значение при вычислении — наш параметр первый — [p1] — эта переменная в формуле выдаст нам число от 1 до 10, но писать 10 описаний, как то нудно, я сделаю 3 варианта и буду использовать операции сравнения.

(([p1]=10)*1)+(([p1]<10 and [p1]>3)*2)+(([p1]<=3)*3)

И тут все получается просто - мы создаем булевую проверку возвращающую 1 (истина) или 0 (ложь) и умножаем полученное значение на порядковый номер варианта отображения локации. Очень удобно, а главное просто и быстро.

Вывод параметров в текст

Нужно сказать и пару слов о выводе значений параметров в текст. В любом месте мы можем вывести значение переменной или итог целой формулы заключенной в фигурные скобки. например - {[p1]+25} - выведет нам сумму значения параметра и 25.

Так же плеер поддерживает возможность вывода строковой составляющей параметра как при нынешнем значении, так и при определенном значении - для этого [p1] мы меняем на [d1] - для нынешнего значения параметра и [d1:10] - для строки при значении параметра 10.

Микровывод

Так это выглядит в онлайн-версии редактора Василия
Так это выглядит в онлайн-версии редактора Василия

Заложенный в движок функционал позволяет реализовать почти все что угодно. Например, динамические бои с элементом случайности. Сбоку мой пример боевки по мотивам DnD собранный за примерно час. При каждом ударе делается бросок двадцатигранного "кубика" и в случае успеха, показывается один из нескольких описаний попадания (или промаха).

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

Квесты могут быть протяженными и разветвленными
Квесты могут быть протяженными и разветвленными

Я не рассказал о многих функциях редактора, дальше я бы хотел подробнее рассказать именно об особенностях плеера за авторством Василия Рогина. Ну или точнее еще пару слов перед этим.

Эстетика - музыка, изображение, звуки

Движок позволяет выводить в статичном окошке справа картинку и менять ее при переходе или на заходе на локации, запускать музыку (циклично по кругу для атмосферы) которую вы загрузите и проигрывать звуки (однократно) при переходе или на локации.

Думаю, данный функционал будет расширятся. И в скором времени графические составляющие расширятся.

Я выложить хотел бы в интернетах...

С редактором разобрались. Теперь пару слов о публикации вашего творения. Ну тут вариантов несколько:

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

  2. Вы можете использовать сервер Василия на https://spacerangers.gitlab.io/. Зарегистрироваться (доступно через GitHub и Google), а после чего создать и выложить в библиотеку квест, после чего сможете его распространять без необходимости заходить на портал. Ссылка на быстрый запуск.

  3. Ну и конечно Вы можете выгрузить свой квест в формате *.qmm и загрузить в одну из игр серии Космические Рейнджеры, последняя часть которой носит подзаголовок Quest - отражая её суть.

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

Мысли о том, что ждет нас в будущем

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

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

Приведу пример с компьютерной игрой Dead Space - основная сюжетная линия строится внутри видеоигры, а вот сопутствующие материалы, параллельные сюжеты - внутри комиксов, рассказов и т.п. В конечном счете эти комиксы без контекста игры - наврятли смогли бы существовать.

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

В тех же Космических Рейнджерах огромный интерес создавал контекст вселенной игры. Квесты были вписаны в него.

К чему я веду. Интерактивная Литература не как самостоятельное произведение, а как часть какой то более сложной, наративной системы. И в этом плане, веб приложение собранное Василием Рогиным - по факту кастомизируемый портал, который каждая группа/сообщество, сможет подстроить под себя, рождая тем самым метасообщество читателей и создателей текстовых игр. Вот так могут и должны переродиться жанры интерактивной литературы. Опять же все, конечно, исключительно на базе личного опыта.

Напоследок

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

 

Источник

Читайте также