Найти тему
Энергетическая жизнь

Текстовые квесты

Оглавление

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

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

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

Редактор

Редактор написан на Vue.js, а так же использует библиотеку jsPlumb чтобы рисовать соединения между блоками. Все перетаскивается и динамически обновляется. На выходе большой json объект с игрой.Игра состоит из секций (глав, локаций, мест, этажей и т.д. как удобнее это понимать в каждом конкретном случае). Каждая секция состоит из сцен (комнат, частей комнат или диалогов), т.е. состояний в которых игрок должен принять какое-то решение, чтобы перейти в новое состояние.

Сцена может состоять из компонентов:

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

Переходы (желтые) то, с чем игрок может взаимодействовать. «Открыть дверь», «Осмотреть шкаф» или «поговорить с NPC» — перекидывают в другую сцену при клике на ссылку.

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

Прыжки в другую секцию (зеленые) то же, что обычные прыжки, но перекидывают в другую главу (другой набор сцен).

Скрипты (фиолетовые) Позволяют менять значения переменных, чтобы выстроить логику игры.

Действия с предметами (коричневые) бывают трех видов: взять, выбросить и использовать. Первые два добавляют или убирают предмет из инвентаря, а последнее реализует возможность использовать предмет на данной сцене (представляет из себя скрытый переход), например «Открыть дверь ключом».

Любому компоненту можно задать условия его срабатывания либо через переменные, либо через специальные функции. Пока их две has(item_name) и seen(location_id). Первая проверяет, есть ли в инвентаре соответствующий предмет, вторая — посещал ли игрок ту или иную локацию.

Плеер

-2

Написан на jQuery (так было удобнее). Берет json сделанный в редакторе и собственно дает возможность играть. По умолчанию игрок оказывается в первой стартовой сцене.

Дальше движок проходится по всем компонентам, все время проверяя условия и отрабатывает их последовательно.

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

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

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

-3

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

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

Конечно там куча багов и недоработок, делал я это два года назад, но всё равно собой горжусь.

P.S. А вы теперь понимаете, почему мне редко бывает скучно 😉