Про текстовые игры написано довольно много как на Хабре, так и на просторах интернета. Это один из самых первых жанров интерактивных развлечений с использованием ЭВМ и даже без него (просьба поделиться опытом НЕэлектронных текстовых игр в комментариях).
В данной статье я хочу мимолетом задеть вопрос истории и нынешней "полужизни" жанра текстовых игр, пофантазировать на тему будущего данного жанра, привести примеры текстовых игр, которые сейчас пользуются популярностью и подсказать об абсолютно новом переосмыслении старого инструмента для создания текстовых игр, о котором вы 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 - основная сюжетная линия строится внутри видеоигры, а вот сопутствующие материалы, параллельные сюжеты - внутри комиксов, рассказов и т.п. В конечном счете эти комиксы без контекста игры - наврятли смогли бы существовать.
Иной пример - скорее алегоричен - если мы возьмем за контекст город, а за продукт городскую газету, которую имеет смысл выписывать только жителям данного города. Без контекста города - некоего сообщества - газета бесмысленна и наврятли будет пользоваться популярностью. Но каждый новый житель получит необходимый контекст и будет больше заинтересован в прочтении газеты. А возможно и в написании статей для неё.
В тех же Космических Рейнджерах огромный интерес создавал контекст вселенной игры. Квесты были вписаны в него.
К чему я веду. Интерактивная Литература не как самостоятельное произведение, а как часть какой то более сложной, наративной системы. И в этом плане, веб приложение собранное Василием Рогиным - по факту кастомизируемый портал, который каждая группа/сообщество, сможет подстроить под себя, рождая тем самым метасообщество читателей и создателей текстовых игр. Вот так могут и должны переродиться жанры интерактивной литературы. Опять же все, конечно, исключительно на базе личного опыта.
Напоследок
Попробуйте сами использовать редактор - и создать на нем что нибудь - это интереснее и проще чем кажется. Также доступен репозиторий проекта.
Комментарии (11)
Andrey_Epifantsev
24.01.2022 07:36+1Я так понял, что в статье описываются игры, где на каждой локации нужно выбирать действия из заданного списка. Похоже на бумажную интерактивную книгу, только с большим количеством возможностей.
А на первой картинке (КДПВ) приведён скриншот немножко другого жанра: там нет жёстко заданного набора вариантов, а можно вводить текстом произвольные команды и смотреть что получится: «возьми то», «сделай это», «посмотри на это», «иди туда». Есть ли сейчас такие игры и движки для них? Какие движки для таких игр наиболее удобны? Есть ли движки пригодные для создания таких игр не на английском языке?Dimsml
24.01.2022 14:02+1Стоит сходить на IFWiki, там есть много всего разного; в том числе страницы о том, чем игры с текстовым парсером отличаются от игр, построенных по принципу книг Choose Your Own Adventure.
В статьях есть небольшой список движков, основанных на той или иной концепции.
realsonic
24.01.2022 14:10+2Если говорить про русский язык как не английский - есть русские локализации популярных движков Inform (RInform) и TADS (RTADS). Также последнее время себя зарекомендовал МЕТАПАРСЕР3 на платформе INSTEAD - https://instead.hugeping.ru/page/metaparser/.
Darkerus Автор
25.01.2022 14:54Да, в самой первой картинке у нас "парсерные игры", впринципе прародители текстовых игр (если пытаться все это как то классифицировать и называть).
Парсерными движками я не так много увлекался, думаю больше можно прочитать на IFWiki - например вот - https://ifwiki.ru/Метапарсер - это модуль для отечественного движка текстовых игр - INSTEAD - кстати довольно мощном и требующим только небольших знаний Lua.
online977
25.01.2022 14:55+1Привет, классный проект. Я тоже вынашиваю идею создания квеста в телеграмм для изучения английского. Не знаю какой выбрать инструмент, чтобы выстроить роад мап квеста.
Darkerus Автор
25.01.2022 16:20По текстовым играм в телеграме я мало что знаю. Но думаю это крайне интересная сфера. Наверное одно из самых перспективных направлений в текстовых играх.
Даже на сайт заходить не надо, просто зашел в телеграм канал и проходишь, так сказать.
Nicephorus_Uranus
25.01.2022 14:55Поделюсь своим опытом бумажных текстовых квестов из середины 1990-х. По воспоминаниям из середины 00-х.
В областной детской библиотеке брал две переведённые на русский американские книги с такими квестами.
"Суть такова" © Вы на первой странице читате вступление, предысторию. И далее, в конце текста (обычно на 1-2 страницы) вас немо спрашивают "ЧО делать?" и предлагают несколько вариантов поступков. После текста варианта поступка указана станица куда надо идти и читать что получилось. Там на этой странице в конце текста опять несколько вариантов поступков и номера страниц. Интересное и захватывающее чтиво-приключение, атмосферу которого дополняют соответствующие иллюстрации почти на каждом листе.Например:
Идя по улице вы видите как банда подростков избивает парня. Ваши действия?
1. Пройти мимо - следуйте на стр.3
2. Броситься парню на помощь - продолжение смотрите на стр.31
3. Позвонить по телефону и вызвать полицию - набирайте стр.17
4. Да это же моего врага бьют! Присоединяюсь - бегите на стр.59.Выбираем вариант, к примеру, №3. Идём на страницу 17. Открываем и читаем такой текст: "Вы лезете в свой карман и тут вспоминаете что оставили свой телефон дома заряжаться. Что будете делать дальше?" И опять несколько вариантов.
Или же выбираем вариант №2. Идём на страницу 31 и читаем такой текст: "Охваченный праведным гневом и жаждой справедливости вы подбегаете к драке и начинаете мутузить первого попавшего под руку хулигана. Врываясь в схватку вы пропускаете несколько ударов но и награждаете хорошими тумаками нескольких злодеев. И тут перед вами холодно вспыхивает клинок ножа! Что делать - времени доли секунды!?" И далее варианты.Мне попадались такие книги про Дикий Запад и про захват школьного автобуса злодеями.
Darkerus Автор
25.01.2022 15:06Очень круто, я бы хотел такую книгу в свою коллекцию (коллекция прикольных вещей). Еще знаю что есть книги со сложными системами, где чуть ли не создаешь своего персонажа, где распределяешь параметры, выбираешь внешность, рассу, класс и помоему, даже бросаешь кубик на какое то развитие событий. И при этом это все довольно старые книги-игры.
DmitryOlkhovoi
А есть реальный спрос на такие инструменты? Можно ведь разработать на досуге :)
Alexey2005
На такие, которые можно разработать на досуге, особого спроса нет, потому что современное средство разработки в одиночку в обозримый срок не сделать.
От современного инструмента требуется следующее.
1. Возможность использования системы контроля версий. Разработка игр давно стала командной работой, и текстовые квесты не исключение. Да даже и в одиночку намного удобнее, когда можно завести стандартный git-реп и вести проект в нём. Поэтому любое современное средство разработки квестов должно поддерживать версионирование — формат, в котором сохраняется промежуточный результат, должен быть текстовым и достаточно простым для понимания.
2. Современные игры делаются для всего мира сразу на нескольких языках, поэтому поддержка мультиязычности и инструментов для переводчика обязательна, в том числе автоматического поиска ещё не переведённых кусков, экспорта в таблицу и аннотирования.
3. Не заставляйте людей использовать ваш собственный текстовый редактор, который уж никак не догонит по функциональности монстров, которые развивались десятилетиями. Дайте возможность подключить внешний редактор (вроде того же vim), открывая текстовые фрагменты в нём и импортируя обратно в IDE после редактирования.
4. Нужны средства структурирования кода. Текстовые квесты по мере роста количества вариантов очень быстро превращаются в спагетти-код, который начинает рушиться под собственной тяжестью. Тегирование, продвинутый выбор и фильтрация, построение графов зависимостей и конечно же инструменты для юнит-тестирования, когда к каждому квесту или герою можно создать набор тестов, инициализирующих некое стандартное состояние, эмулирующих действия и проверяющих результат. Тогда как минимум будет меньше убитых квестов после разного рода крупных обновлений.
5. Отладка, включая возможность внесения правок в код «на живую», прямо в запущенной игре.
6. Ассеты. Одна из весомых причин популярности Unity — наличие уже готовых ассетов, которые нужно просто подключить. С текстовыми квестами тоже должно быть возможно выделять артефакты, героев и подобное вместе со всеми зависимостями в отдельные модули/библиотечки, которые потом просто подключаются и на их основе создаются кастомные варианты.
Соответственно, инструмент должен поддерживать парадигму программирования, которая позволяет такое (ООП, ECS или подобное).
Darkerus Автор
Не скажу, что не согласен с Вами, но есть определенные мысли по данному поводу. И дополнения к статье. Комментируя Ваш комментарий:
По первому пункту: В саму систему TGE встроенна "система контроля версий", конечно же условная. Вы можете указывать версию квеста и анотацию к версии. Ничто не мешает Вам хранить отдельно каждый файл в облаке. Что по поводу текстового формата. Моё упущение - я не рассказал про это, да в оригинальном TGE такая функция присутствует для вычитки. Мной она детально не тестировалась, поэтому о ней я и не рассказал. Но на досуге посмотрю границы данной функции.
По второму: Тут все упирается в текстовый формат. Тоесть если есть текстовый формат, значит есть и возможность быстро и просто это все переводить. Опять же, тут мы говорим об упрощении работы переводчика, никто не мешает Вам делать это нативно в редакторе, но да, это усложняет процесс при больших объемах, требует обучать переводчика.
По третьему: Тот же вопрос что и до этого. Все упирается в текстовый формат о котором я пока не могу ничего сказать. Хотя к черту. Прямо сейчас пойду и все протестирую... *несколько минут спустя*... Все протестировал. В общем, можно выгрузить весь текст в текстовом формате с программными пометками (номер локации перехода и т.д.) и комфортно отредактировать любой текст из игры в формате txt и в любимом редакторе, после чего загрузить обратно. Связи при этом не сохраняются, тоесть сами связи хранятся в формате квеста. Мы выгружаем исключительно текст и номера локаций и парметров.
По четвертому: с одной стороны согласен, с другой, звучит как неимоверное усложнение. Все зависит от объема и подхода. При сложной структуре игры - все тестирование просто жизненно необходимо, но опять же. В этом случае можно применить иной движок и разрабатывать текстовую игру, как просто игру в (парадигме современной разработки игр), тут же скорее проще сделать игру с подхода творчества. Опять же, мы используем готовую систему или движок, что бы исключить или компенсировать, сложную реализацию "простого" творческого порыва или расширения собственной информационной или творческой "экосистемы". (Мне даже понравилось как это звучит "информационная или творческая экосистема")
Но возвращаясь к пункту комментария: Да, некоторых простых функций в системе не хватает. С помощью, которых можно и реализовать отладку. Я буду оставлять автору онлайн-версии "issues" и всякие запросы или может разовью свой скил и даже смогу добавить что то сам, по своему усмотрению. То же исполнение JS кода в структуре квеста, очень сильно бы разнообразило функционал.
По пятому: В оригинальном TGE такой функционал присутствует, но только частично. То есть "отладка" самого текста во время тестирования. В ином случае это какие-то ненативные (я заложил в это смысл "костыли") решения. Да, такого функционала не хватает, но решается банальным JS в коде.
По шестому: Ассеты для текстовых квестов добавляются довольно легко. ctrl+c => ctrl+v. Простите не удержался, в целом я понимаю, что на том же Unity есть компоненты которые упростят разработку текст игры, но это всеравно останется полноценная разработка, где 75-90% времени вы будете решать чисто технические, а не творческие вопросы. Но творческая свобода больше. Парадокс. А я, только, показал компромис.
Огромное спасибо, за Ваше мнение. То что Вы подходите серьезно к оценке данной системы как профиссионального иснтрумента, показывает, что Вы и оцениваете её как полноценный и амбициозный продукт, а это может побудить автора его развивать.