Как сделать текстовый квест
Перейти к содержимому

Как сделать текстовый квест

  • автор:

Как начать делать текстовый квест?

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

Отслеживать
34.1k 25 25 золотых знаков 130 130 серебряных знаков 225 225 бронзовых знаков
задан 7 авг 2017 в 20:04
83 2 2 серебряных знака 8 8 бронзовых знаков

«. допустим 3 выбора и при каком-то выборе переходит на следующий шаг.» Это как? Может нужно выбирать один раз из трех вариантов? И каждый вариант ведет к той или иной ветке развития сюжета? Вам нужно переформулировать вопрос более понятным образом.

7 авг 2017 в 20:42
@Bulson все в точности как Вы описали, я не понимаю как сделать переход на следующую развилку сюжета
7 авг 2017 в 21:01
Ну, то, что вы описали, похоже на стейт-машину.
7 авг 2017 в 22:48
@VladD, там и до компилятора не далеко 🙂
8 авг 2017 в 8:02

Если Вы хотите сделать именно игру, то могу посоветовать Вам готовые решения — Renpy (на python ) для создания визуальных новелл, если же хочется C# , то Unity3D (лично использовал ассет Fungus для создания визуальной новеллы).

8 авг 2017 в 14:23

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

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

Вам попадались книги-игры Дмитрия Браславского? В прочем если бы попадались, вопрос бы не возник.

И так, что такое текстовый квест? Это набор параграфов, описывающих некоторые игровые сцены в которых игроку требуется принять некоторое решение, чтобы перейти к другой сцене. Ок, от этого и пойдем.

  1. Пронумеруем все параграфы в произвольном порядке. Для книги нумерация имеет значение, для компьютерного варианта — нет.
  2. Размещаем параграфы в массив согласно сделанной нумерации.
  3. Каждый выбор игрока, фактически, означает выбор следующего параграфа, но выбор в слепую, т.к. игрок не знает содержимое параграфа (во всяком случае в первой игре). Таким образом, необходимо сопоставить предлагаемые игроку действия на текущей сцене с номерами параграфов на который они ведут.
  4. Когда игрок сделал свой выбор, мы просто показываем ему текст следующего параграфа с соответствующим индексом в массиве и ожидаем следующего выбора игрока, разумеется если это выбор у него есть в данной сцене.

Естественно возможен вариант, когда игрок может попасть на одну и туже сцену (параграф) разными путями.

Таким образом, вам достаточно одного единственного класса для описания модели вашего квеста, при этом ни чего мудреного не требуется. Для консольного варианта достаточно базовых знаний C#: синтаксис, условия, массивы, циклы. ну и немного стандартных классов для организации ввода/вывода.

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

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

Единственное что я бы посоветовал лично от себя — не показывайте игроку настоящие номера параграфов, спрячьте их за кнопками с текстом, локальными номерами (1,2,3 и т.д. по количеству вариантов выбора в сцене) для консоли, ссылками для Web-версии. Так интереснее, и больше вероятность, что игрок хотя бы прочитает (а может и запомнит) текст над которым вы или ваш сценарист трудились, создавая квест.

Ну и немного кода для иллюстрации возможной (но не единственной) реализации такой модели:

Простейший вариант для консоли с одним классом:

class Quest < public string[] Paragraphs public int[][] Choises //Для консольного варианта вы просто отображаете номера для выбора прямо в тексте //параграфа, рядом с описанием выбора, как в книжном варианте. > 

Более сложный пример:

class Paragraph //параграф (игровая сцена) < public int Num //не особо нужен, но для полной картины пусть будет public string Text //доступные варианты, список может быть нулевой длины, но не null. public List Choises = new List(); > class Choise < public int NextParagraph public string Text //текст варианта выбора для игрока > class Quest < Paragraph Current //Если номера параграфов соответствуют индексам можно так List  = new List(); //Если лень следить за соответствием - так Dictionary  = new Dictionary(); > 

Если знаете что такое направленный граф, то можно еще проще

class Paragraph //параграф (игровая сцена) < public string Text //текст параграфа //доступные варианты, список может быть нулевой длины, но не null. public List Choises = new List(); > class Choise < public Paragraph Next public string Text //текст варианта выбора для игрока > class Quest < Paragraph Current Paragraph StartPoint ; > 

С кодом ввода выбора игрока и вывода текста на экран, думаю сами справитесь.

Постановка задачи: текстовый квест

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

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

Текстовый квест может быть как интерактивным рассказом, так и полноценной бродилкой или рпг с подбором предметов, квестами и сражениями, просто вместо 3д графики — текст и картинки, записанные символами. Если чуть позже добавить графику, то получится уже интерактивная новелла (комикс с возможностью выбора, например, бесконечное лето) или интерактивный сериал (как, например, игры от Telltale Games или эпизод Bandersnatch черного зеркала от Netflix).

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

Как спроектировать квест?

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

Если бы мы писали книгу, все было бы просто — ее сюжет был бы линеен и события разворачивались последовательно. А вот в случае с текстовыми квестами все сложнее — сюжет зависит от выбора пользователя, и надо как то фиксировать, какие события случаются при каких условиях.

Если задуматься, то окажется, что в этом плане текстовые квесты очень похожи на обычные настольные бродилки.

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

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

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

Варианты квестов

Если пробовать рисовать графы квестов от совсем простых к более сложным, то у нас получиться три разных варианта.

1. Самый простой: линейный квест (квест-линия).

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

2. Квест с ветвлением (квест-дерево).

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

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

3. Произвольный квест с инвентарем (квест-граф).

Самый крутой вариант — у нас нет никаких ограничений на перемещение по нашей «карте», а еще мы можем подбирать предметы, от которых зависит сюжет (возможность перемещения или текст в некоторых точках).

План действий

План действий следующий.

  1. Придумать название и сюжет для квеста.
  2. Нарисовать его граф, чтобы примерно представить сюжет.
  3. Запрограммировать квест на питоне.
  4. Протестировать и исправить все баги.
  5. Провести бета-тест среди друзей и собрать обратную связь.

Кажется, что все более менее реализуемо, кроме, пока что, среднего пункта — «запрограммировать». Но это ненадолго, уже в следующем уроке ты научишься описывать на питоне произвольные текстовые квесты, для чего понадобится:

  • установить питон на компьютер и использовать IDLE для вычислений (уже сделали!);
  • научиться выводить текст на экран и просить пользователя вводить ответы (уже можно будет сделать линейный квест);
  • разобраться с условным оператором, чтобы создавать квесты с ветвлением;
  • научится создавать свои функции, использовать глобальные переменные и рекурсию для созданий сложных квестов с возвратами и инвентарем;
  • объединить все это, использовать ascii графику, добавить звуки и разбить на несколько модулей, чтобы создать итоговую версию квеста.

Выглядит план, скорее всего страшно, но ты точно справишься! ��

Ink: инструмент для создания текстовых квестов как из лучших воспоминаний детства

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

В сравнении с историей литературы этот жанр совсем молодой, зародился в середине прошлого века в виде экспериментов, их даже пробовали использовать для геймификации образования. Расцвет жанра пришелся на 70-е годы. Поначалу интерактивность была довольно условной, с простым ветвлением; читатель всего лишь выбирал варианты развития сюжета в духе: «А что если. ». Тем не менее, некоторые серии были чрезвычайно популярны. Одна из них, под названием «Выбери себе приключение», издавалась почти 10 лет (с 1979 по 1988). Книги серии переводились на множество языков, включая и русский.

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

Игра запущенная на DPD-10

Компьютер дал подобным играм второе рождение. Первый текстовый квест Colossal Cave Adventure был написан на фортране в 1975 году и работал на мейнфрейме PDP-10. Уже тогда рабочие компьютеры использовались как средство развлечения за счет начальства. Создатель игры, Уильям Краудер, был не только программистом, но и спелеологом, потому сюжет был о поиске сокровищ в пещере, у которой был реальный прототип — Мамонтова пещера в американском штате Кентукки. Она знаменита тем, что является самой длинной в мире (общая длина исследованных проходов больше 500 километров); есть где спрятать сокровища!

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

Одно из реальных мест в пещере, описываемое в игре.

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

ВЫ СТОИТЕ В КОНЦЕ ДОРОГИ ПЕРЕД НЕБОЛЬШИМ КИРПИЧНЫМ ЗДАНИЕМ.

ВОКРУГ ВАС ЛЕС. НЕБОЛЬШОЙ РУЧЕЙ ВЫХОДИТ ИЗ ЗДАНИЯ И СПУСКАЕТСЯ В ОВРАГ.

ВЫ НАХОДИТЕСЬ В ДОЛИНЕ В ЛЕСНОЙ ДОЛИНЕ, РЯДОМ С РУЧЬЕМ, КОТОРЫЙ СТРУИТСЯ ПО КАМЕННОМУ ДНУ.

Формального сюжета и конкретной цели не существует. У игрока есть три жизни, которых ему должно хватить, чтобы набрать 350 очков, необходимых для выигрыша. Очки выдавались за исследования пещеры и найденные сокровища. Первоначально в игре было 66 локаций, количество которых увеличивалось с каждой следующей версией. Позже развитием игры занялся Дон Вудс, который тогда был аспирантом в Стэнфордском университете. Под его началом в следующей версии количество локаций расширилось до 140. Однако Дон никогда не был в Мамонтовой пещере, и добавленные им локации уже не совпадают с реальностью.

В 1977 году James Gillogly впервые портировал игру на другую систему, а именно на Unix. Что любопытно, этот порт до сих пор входит в состав некоторых дистрибутивов, а если его нет, то можно установить в составе репозитория bsdgames (или отдельно) и играть даже на VPS через SSH.

Установка и запуск игры на Ubuntu

$ sudo apt install colossal-cave-adventure … $ adventure WELCOME TO ADVENTURE!! WOULD YOU LIKE INSTRUCTIONS? > yes SOMEWHERE NEARBY IS COLOSSAL CAVE, WHERE OTHERS HAVE FOUND FORTUNES IN TREASURE AND GOLD, THOUGH IT IS RUMORED THAT SOME WHO ENTER ARE NEVER SEEN AGAIN. MAGIC IS SAID TO WORK IN THE CAVE. I WILL BE YOUR EYES AND HANDS. DIRECT ME WITH COMMANDS OF 1 OR 2 WORDS. I SHOULD WARN YOU THAT I LOOK AT ONLY THE FIRST FIVE LETTERS OF EACH WORD, SO YOU'LL HAVE TO ENTER «NORTHEAST» AS «NE» TO DISTINGUISH IT FROM «NORTH». (SHOULD YOU GET STUCK, TYPE «HELP» FOR SOME GENERAL HINTS. FOR INFOR- MATION ON HOW TO END YOUR ADVENTURE, ETC., TYPE «INFO».) — - - THIS PROGRAM WAS ORIGINALLY DEVELOPED BY WILLIE CROWTHER. MOST OF THE FEATURES OF THE CURRENT PROGRAM WERE ADDED BY DON WOODS (DON @ SU-AI). CONTACT DON IF YOU HAVE ANY QUESTIONS, COMMENTS, ETC. YOU ARE STANDING AT THE END OF A ROAD BEFORE A SMALL BRICK BUILDING. AROUND YOU IS A FOREST. A SMALL STREAM FLOWS OUT OF THE BUILDING AND DOWN A GULLY. > 

Так как Дон активно распространял исходный код своей версии, то это способствовало росту ее популярности и тому, что она портировалась на каждую новую платформу: Apple, Commodore и, конечно же, MS-DOS.

Версия для MS-DOS была уже с простейшей графикой, содержала 130 локаций, 15 видов сокровищ, 40 предметов для инвентаря и 12 задач, которые требовалось решить по мере прохождения.

Игра на MS-DOS

В 1985 году Дэйв Платт выпустил свою версию игры, где надо было набрать уже 550 очков, но которая кардинально отличалась подходом к программированию таких игр. Он создал универсальный язык написания сценариев «A-code», который обрабатывался движком написанным на FORTRAN 77. Это позволило очень легко делать модификации игры и создавать другие текстовые приключения. Практически все современные игры создаются подобным образом, на специальном языке разметки, который интерпретируется движком, как универсальным, в который можно загружать самые разные игры, так и проприетарным, выдающим исполняемый файл, который можно продавать в онлайн-магазинах.

Приключение Colossal Cave Adventure было родоначальником жанра и надолго сформировало каноны подобных квестов, а так же очень сильно повлияло развитие ролевых игр, в том числе и многопользовательских. Жанр MUD создавался по образу и подобию CCA. Даже Дональд Кнут не обошел вниманием эту игру и написал небольшую книгу, посвященную анализу кода игры в обучающих целях.

CCA является настоящим долгожителем. Дон Вудс продолжал выпускать обновления вплоть до середины 90-х, а в 2017 году Эрик Реймонд взял версию игры Дона от 1995 года, отладил ее, чтобы она запускалась на современных компьютерах, и выложил код на своей странице. Существует порт игры на Андроид и переводы ее на русский язык. Поиграть в один из приведенных вариантов можно на сайте Русский Информ, платформе для создания подобных текстовых игр. Можно играть как онлайн, так и скачав файл для движка Windows Frotz.

CCA на Windows Frotz

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

В 2011 году пара разработчиков из Кембриджа занялась производством интерактивных текстовых квестов и придумала средство для упрощения своей работы — Inklewriter. Год спустя они представили его в виде сайта, который позиционировался как простое средство для обучения программированию и создания интерактивной литературы. Его даже использовали в школах и удостоили награды «Best Website for Teaching and Learning» от Американской ассоциации школьных библиотек. Спустя несколько лет разработчики были вынуждены закрыть его по причине нехватки времени на его поддержку, но открыли код своего инструмента для работы (позже они его перезапустили). Ink получил возможность интеграции с Unity, и с его помощью стало возможно с легкостью создавать интерактивные истории, сочетающие в себе не только текст с рисунками, но и музыку с анимацией. Он был взят на вооружение и другими крупными инди-студиями разработки игр, а сама Inklestudios выпустила несколько успешных игр для разных платформ: ссылка. Игры очень милые, другого слова не подобрать. Им удалось заполучить в команду талантливого художника Anastasia Wyatt, что замечательно рисует.

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

Проект Inkle состоит из двух частей: руководство по языку разметки ink; IDE для работы с ним — Inky. Начать писать интерактивную историю очень просто. В Inky два окна: слева текст сценария, справа его интерпретация

Начнем новый сценарий: File → New Project. Вставим в редактор следующий пример и сохраним в отдельную директорию: File → Save Project.

Текст сценария

Лондон, 1872 Резиденция месье Филеаса Фога -> london === london === Месье Филеас Фогг рано вернулся домой из Реформаторского клуба, да к тому же в новомодном паровом экипаже! Паспарту, – сказал он. – Мы едем вокруг света! + Вокруг света, месье? Я был крайне удивлен. -> astonished + [Кивнуть] -> nod === astonished === Вы шутите! – ответил я с достоинством. – Вы смеетесь надо мной, месье. Я совершенно серьезен. + Как скажете, месье. -> ending === nod === Я кивнул, не веря ни одному его слову. -> ending === ending Мы совершим кругосветное плавание за восемьдесят дней. – Он был совершенно спокоен, когда предложил этот дикий план. – Через час, в 8.25, мы вылетаем в Париж. -> END 

На приведенном фрагменте очень простая структура:

  • тройными знаками «=» обозначены «Узлы» (в терминологии Ink), метки для перехода;
  • переход по ним осуществляется с помощью оператора «->» . «-» ;
  • пункты выбора обозначаются оператором «+» ;
  • квадратные скобки сообщают интерпретатору, что после выбора название пункта не надо отображать в диалоге;
  • END» — оператор окончания текста.

История готова, но выглядит довольно скучно. Добавим в нее изображение. Для этого используется тег «# IMAGE» .

# IMAGE: days-poster-promo.jpg

Наглядно

Картинка должна лежать там же, где файлы экспортированные для интернета. После внесения изменений экспортировать достаточно один файл: File → Export story.js only, остальные содержат шаблона, в который помещается история.

Написав историю, можно экспортировать ее в интернет: File → Export for web. В директории проекта появятся несколько файлов: HTML-страница; стилевое оформление в CSS; файл движка ink.js; наш сценарий 80d.js (не редактируйте его напрямую); main.js, где описывается поведение сценария. Если вы знаете CSS, то вам не составит труда отредактировать внешнее оформление истории.

Закончив оформление, историю можно выложить в интернет. Авторы Ink рекомендуют воспользоваться порталом itch.io. Это бесплатный портал с простой регистрацией. При создании проекта для Ink выберите «Kind of project» HTML, загрузите архив с файлами проекта и отметьте опцию «This file will be played in the browser». Можно посмотреть, что получилось: ruvds.itch.io/inky-test.

Если вам в свое время тоже хотелось дополнить текстовые квесты «Рейнджеров» или написать свой текстовый квест, то не стоит сдерживать свою фантазию — дерзайте вместе с Inky!

  • ink
  • текстовые квесты
  • игры
  • Choose Your Own Adventure
  • разработка сюжетов
  • создание игр
  • создание сценария
  • Блог компании RUVDS.com
  • Разработка игр
  • Читальный зал
  • Лайфхаки для гиков

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

Такими раньше была интерактивная литература

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как выглядит оригинальный редактор квестов 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 человеку

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

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

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

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

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

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

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

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

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

Микровывод

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

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

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

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

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

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

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

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

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

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

  1. Например. Вы можете загрузить к себе весь репозиторий Василия и развернуть веб-приложение прямо на своем сервере. После чего загрузить свою игру и сопутствующие файлы (картинки, музыку) и теперь все кто зайдет к Вам на сервер, попадут в целый портал, где будут ваши текстовые игры, куда игроки смогут загружать свои квесты и т.д. Но кстати об этом мы еще поговорим.
  2. Вы можете использовать сервер автора на https://spacerangers.gitlab.io/. Зарегистрироваться (доступно через GitHub и Google), а после чего создать и выложить в библиотеку квест, а дальше вы сможете его распространять без необходимости заходить на портал. Ссылка на быстрый запуск.
  3. Ну и конечно Вы можете выгрузить свой квест в формате *.qmm и загрузить в одну из игр серии Космические Рейнджеры, последняя часть которой носит подзаголовок Quest - отражая её суть.

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

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

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

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

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

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

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

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

Напоследок

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

  • текстовые игры
  • текстовые квесты
  • интерактивная литература
  • личный опыт
  • творчество

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *