Про текстовые игры написано довольно много как на Хабре, так и на просторах интернета. Это один из самых первых жанров интерактивных развлечений с использованием ЭВМ и даже без него (просьба поделиться опытом НЕэлектронных текстовых игр в комментариях).
В данной статье я хочу мимолетом задеть вопрос истории и нынешней "полужизни" жанра текстовых игр, пофантазировать на тему будущего данного жанра, привести примеры текстовых игр, которые сейчас пользуются популярностью и подсказать об абсолютно новом переосмыслении старого инструмента для создания текстовых игр, о котором вы 99% не знаете. И все, конечно, исключительно на базе личного опыта.
Все причины в прошлом
Лично для меня текстовые игры или интерактивная литература в первую очередь ассоциируются с компьютерной игрой Космические Рейнджеры 1 и 2 (в дальнейшем КР). Не буду рассказывать про то, что это за игра (вы и так знаете или узнаете сами). Оснавная суть в том, что в механике этой игры был встроен целый пласт так называемых "текстовых квестов", каждый из которых представлял из себя небольшой интерактивный рассказ, с уникальными игровыми механиками. В одном из них Вы могли участвовать в охоте на инопланетного зверя, в другой стать участником секретной спецоперации или даже ваша миссия могла провалиться, не успев начаться, и стать битвой за выживание, не говоря уже о легендарной "Тюрьме".
Понятное дело для молодого парня, увлекающегося белетристикой, возможность объединить прозу и игры, показалась очень воодушевляющей и уже вскоре я разбирался с функционалом редактора текстовых квестов для Космических Рейнджеров TGE (вроде как это TextGame Engine). На тот момент я думал, что это самый удобный, лучший, понятный и простой инструмент, который позволит мне реализовать любую задумку в кратчайшие сроки. Как же я был прав.
Прошли года, идея создания текстовой игры подутихла, что бы вспыхнуть вновь с новой силой. Но обладая уже небольшим жизненным и юзерским опытом, я стал искать более современный и удобный инструмент, который позволит мне (и другим пользователям) запускать интерактивные истории не только через самих КР. И на тот момент я нашел их множество:
QSP, URQ, Instead, Twine (тогда он назывался по-другому), AXMA и т.д. Их было много, но после опыта с TGE, все они казались громоздкими, сложными в реализации творческих задумок, устаревшими. Ни один из движков не позволял мне сконцентрироваться на творчестве, но в течении следующих лет я вернусь к каждому из них вновь, узнаю о новых и все так же отложу идею создания текстовой игры на годы - до определенного момента.
Что было сейчас и будет тогда
Текстовые игры были всегда - лично для меня. Проблема лишь в том, что текстовые игры - это либо готовый выверенный продукт по типу "The Life and Suffering of Sir Brante" - реклама которой долго преследовала геймеров в youtube - или "Vampire: The Masquerade — Coteries of New York", или - если вспоминать смежный жанр графических новелл - "Бесконечное Лето". Либо же авторские поделки, основная цель которой никогда не заработок, например: "Дядя, который работает в Нинтендо" (победитель конкурса интерактивной литературы - КРИЛ 2018) или из зарубежных - "Ghosts Within".
В первом случае, у разработчика есть и финансовые средства, и мотивация создать качественный продукт, который будет продаваться, приносить прибыль - соответственно есть и резон изучать (или нанимать людей, которые уже освоили) сложные движки, нюансы языков программирования и тратить довольно много времени на это всё.
Во втором же случае, а мы говорим о любителях (что ни в коем случае не приуменьшает их беллетристических способностей) со своей основной работой и далеко не всегда способных освоить, пусть и простые, но все же, языки скриптов для написания текстовой игры. Так вот. Во втором же случае есть только потребность в творческой реализации и сложностью таких людей легко отпугнуть.
Возвращение к новому старому
Возвращаясь к моему пути. Обыскав всё и вся на тему простых, но функциональных движков для текстовых игр, я неожиданно для себя вернулся снова к 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.
При каждом переходе или посещении локации, мы можем изменять значение параметров. Условия же можно задавать только для переходов.
Локациям нельзя выставить условия посещения. Если в них ведет переход, значит все схвачено, вы либо попадете туда если соответствуете условиям перехода, либо нет.
Но есть у локаций и свои особенности - а именно варианты отображения. Официально 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 - не зависают при малейшей ошибке, заставляя что-то переделывать, переписывать, а одним словом - затягивать реализацию задуманного.
Я не рассказал о многих функциях редактора, дальше я бы хотел подробнее рассказать именно об особенностях плеера за авторством Василия Рогина. Ну или точнее еще пару слов перед этим.
Эстетика - музыка, изображение, звуки
Движок позволяет выводить в статичном окошке справа картинку и менять ее при переходе или на заходе на локации, запускать музыку (циклично по кругу для атмосферы) которую вы загрузите и проигрывать звуки (однократно) при переходе или на локации.
Думаю, данный функционал будет расширятся. И в скором времени графические составляющие расширятся.
Я выложить хотел бы в интернетах...
С редактором разобрались. Теперь пару слов о публикации вашего творения. Ну тут вариантов несколько:
Например. Вы можете загрузить к себе весь репозиторий Василия и развернуть веб-приложение прямо на своем сервере. После чего загрузить свою игру и сопутствующие файлы (картинки, музыку) и теперь все кто зайдет к Вам на сервер, попадут в целый портал, где будут ваши текстовые игры, куда игроки смогут загружать свои квесты и т.д. Но кстати об этом мы еще поговорим.
Вы можете использовать сервер Василия на https://spacerangers.gitlab.io/. Зарегистрироваться (доступно через GitHub и Google), а после чего создать и выложить в библиотеку квест, после чего сможете его распространять без необходимости заходить на портал. Ссылка на быстрый запуск.
Ну и конечно Вы можете выгрузить свой квест в формате *.qmm и загрузить в одну из игр серии Космические Рейнджеры, последняя часть которой носит подзаголовок Quest - отражая её суть.
В каждом отдельном случае есть свои нюансы, например пока нет способа загрузить картинки если Вы не разворачиваете систему на своем сервере. Но это дело житейское и думаю автор приложения в скором времени решит этот вопрос.
Мысли о том, что ждет нас в будущем
Не знаю, насколько я буду прав в своей оценке. Но глядя на современный рынок интерактивных развлечений, создается ощущение, что невозможно заинтересовать потребителя чем-то без контекста.
Творцы стараются привязаться к какой-то вселенной, тематике, сообществу. В период, когда нам не предоставляют цельный развлекательный продукт, а скорее предлагают собирать его самим из разных форматов.
Приведу пример с компьютерной игрой Dead Space - основная сюжетная линия строится внутри видеоигры, а вот сопутствующие материалы, параллельные сюжеты - внутри комиксов, рассказов и т.п. В конечном счете эти комиксы без контекста игры - наврятли смогли бы существовать.
Иной пример - скорее алегоричен - если мы возьмем за контекст город, а за продукт городскую газету, которую имеет смысл выписывать только жителям данного города. Без контекста города - некоего сообщества - газета бесмысленна и наврятли будет пользоваться популярностью. Но каждый новый житель получит необходимый контекст и будет больше заинтересован в прочтении газеты. А возможно и в написании статей для неё.
В тех же Космических Рейнджерах огромный интерес создавал контекст вселенной игры. Квесты были вписаны в него.
К чему я веду. Интерактивная Литература не как самостоятельное произведение, а как часть какой то более сложной, наративной системы. И в этом плане, веб приложение собранное Василием Рогиным - по факту кастомизируемый портал, который каждая группа/сообщество, сможет подстроить под себя, рождая тем самым метасообщество читателей и создателей текстовых игр. Вот так могут и должны переродиться жанры интерактивной литературы. Опять же все, конечно, исключительно на базе личного опыта.
Напоследок
Попробуйте сами использовать редактор - и создать на нем что нибудь - это интереснее и проще чем кажется. Также доступен репозиторий проекта.