Как создать текстовую игру
Перейти к содержимому

Как создать текстовую игру

  • автор:

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

Пример страницы из текстового квеста, сделанного в Twine​​Редактор историй показывает схему связей между локациямиПо умолчанию Twine включает светлую тему​Stories и Истории — исходники для разных локализаций Twine (не игр!) лежат в разных папкахКак сделать текстовый квест за два часаКак сделать текстовый квест за два часаКак сделать текстовый квест за два часа​Объём текста в описании не ограничен. Кстати, ссылки на другие параграфы можно давать прямо в текстеКак сделать текстовый квест за два часаКак сделать текстовый квест за два часа Как сделать текстовый квест за два часа

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

С помощью магии, то есть знакомых программистов, этот файл можно даже превратить в .exe файл и опубликовать в Steam (преценденты были), но я говорю об этом только для того, чтобы показать, какие возможности открывает Twine.

Многие сценаристы используют Twine для разработки диалогов или визуальных новелл на других движках, вплоть до Unity и Unreal — просто они экспортируют данные, описывающие сеть переходов и параграфов, в формат JSON. Это тоже монетка в копилку ваших представлений о возможностях проекта.

Дерзайте

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

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

Если вам интересны текстовые игры типа квестов из «Космических рейнджеров» — это готовый инструмент для создания подобных забав.

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

Как создать текстовую игру?

Бен Сервисс (Ben Serviss), программист, геймдизайнер и игровой продюсер из Нью-Йорка, в своем блоге описал этапы создания текстовой игры. Мы с его разрешения перевели текст и делимся им с вами.

как_создать

Сочинять тексты — сложно. Сочинять тексты для интерактивной игры со множеством вариантов ответов — еще сложнее.

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

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

Я недавно выпустил свою первую полноценную текстовую игру для Choice of Games под названием The Last Monster Master (в ней примерно 250 000 (!) слов). В процессе я пришел к определенным базовым схемам, — они помогли написать игру глава за главой. Я использовал отличный (и бесплатный) Chat Mapper, чтобы создать каждую нелинейную главу. Затем я перевел окончательный вариант текста в ChoiceScript, собственный язык программирования Choice of Games, удобный для создания текстовых игр.

last_monster_master

Скриншот из игры The Last Monster Master

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

Этап 1. Текстовые заготовки (без цветового маркера)

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

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

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

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

stub_text

Этап 2. Ревизия текстовых заготовок (цвет — желтый)

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

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

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

Этап 3. Текст в первом приближении (цвет — оранжевый)

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

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

first_text_pass

Этап 4. Проверка текста (цвет — фиолетовый)

Выжили после того, как написали целую главу? Отлично! Дальше все пойдет быстрее. Включаем режим беспощадного редактора.

Прочитайте написанный вами текст. Будьте безжалостны. Проверьте все, что относится к тесту — грамматику, пунктуацию, будьте точны в выборе слов, описании персонажей или мест и так далее. Повторюсь: сосредоточьтесь на тексте. Заставьте его зазвучать.

Этап 5. Варианты (цвет — голубой)

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

Оцените повороты сюжета с точки зрения их уместности и влияния на игровой баланс.

Если заведете отдельный документ, в котором отражено, насколько статус игрока задействован в главе или в важном сюжетном повороте, — это вам здорово поможет.

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

variable_pass

Этап 6. Экспорт и игровая логика (цвет — зеленый)

Время поместить почти готовую главу в программу, которую вы используете непосредственно для разработки игры. К счастью, Chat Mapper экспортирует файлы в формате XML, JSON, Excel и Rich Text, — что дает вам возможность выбирать. В случае с The Last Monster Master я просто скопировал каждый ключевой элемент в файл ChoiceScript, видоизменив их по мере необходимости.

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

Другие методы

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

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

Другие материалы по теме:

  • Как я перестал беспокоиться и полюбил мобильные игры
  • Как написать хороший дизайн-документ?

Теги:

  • how-to
  • будет полезно разработчикам

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

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

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

В данной статье я хочу мимолетом задеть вопрос истории и нынешней «полужизни» жанра текстовых игр, пофантазировать на тему будущего данного жанра, привести примеры текстовых игр, которые сейчас пользуются популярностью и подсказать об абсолютно новом переосмыслении старого инструмента для создания текстовых игр, о котором вы 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 - основная сюжетная линия строится внутри видеоигры, а вот сопутствующие материалы, параллельные сюжеты - внутри комиксов, рассказов и т.п. В конечном счете эти комиксы без контекста игры - наврятли смогли бы существовать.

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

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

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

Напоследок

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

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

Как написать хороший текстовый квест: 13 советов

<b>Zork</b> — одна из ранних компьютерных игр в жанре интерактивного повествования<b>Cleansuit</b>Редактирование истории в <b>Twine</b>Карта в текстовом квесте автора статьи — <b>Family Dinner</b>Экран «Помощь» в <b>Family Dinner</b><b>The House Abandon</b>

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

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