Как написать текстовую игру (для чайников)

Автор: chromewitch

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

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

Может, и вам захочется написать что-то свое?

Я люблю текстовые игры. Я очень люблю текстовые игры. В основном, играю-читаю новеллы Choice of Games, но видела всякое. И вот причина того, что я решила написать что-то свое как раз была в том, что хотелось "как у чойсов", но на русском и свое. Не в обиду ру-сегменту, но лично мне просто как правило всегда чего-то не хватало в проходимых русскоязычных квестах - то длины, то вариантов, то какой-никакой кастомизации главного героя. Да и тот факт, что главгерой там обычно мужчина, малость поднадоел - я хочу играть за свой пол Т__Т

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

В общем, что делать.

1. Сначала скачиваем Twine - бесплатно с оффсайта.

Это такая прога, в которой можно легко делать собственные текстовые квесты. Открываем ее, выбираем язык, жмем +История и... в принципе, это все.

Для того, чтобы написать текстовый квест, вам достаточно знать одну вещь - ссылки на новый параграф делаются так:

[[название параграфа<-Какой-то текст]]

Можно и по-другому их написать, но в целом - вот. Обладая этим сакральным знанием, вы уже можете написать простенький квест с разными вариантами прохождения. Да, вероятно, он будет довольно примитивен, но все же.

Если это вас не устраивает и хочется чего-то посложнее, то смотрим дальше.

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

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

Там же есть ссылки на документации по выбранному формату - очень подробные, поверьте. Проблема может быть в английском языке, но тогда - гугл в помощь. Гайды как минимум по SugarCube и Harlowe я точно видела и на русском.

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

3. Создаем параграф StoryInit, куда записываем наши переменные по умолчанию. Например, вы хотите, чтобы в игре главгерой сходил в магаз за хлебом, но на старте он находится дома и хлеба у него нет. Пишем в стори-инит что-то вроде:

<<set $gde to 'doma'>>

<<set $hleb to 'net'>>

Посылаем ГГ в магазин за хлебом, через ссылку из пункта один:

[[magaz<-И я пошел за хлебом]]

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

<<set $gde to 'magazin'>>

<<set $hleb to 'est'>>

или так

<<set $gde to 'магазин'>>

<<set $hleb to 'есть'>>

Переменные $ нельзя называть кириллицей, но значения можно.

Если хотите, чтоб был вариант не купить хлеба, убираем <<set $hleb to 'есть'>> и пишем новые ссылки на новые параграфы и уже в них ставим <<set $hleb to 'est'>> - если купил; ничего не ставим, если не купил. Этот момент можно упростить, если следующий параграф у вас планируется одинаковым - тогда можем сразу перейти к нему и привязать хлеб к выборам. Выглядеть это будет как-то так:

[[Я купил хлеба|passage2][$hleb to 'est']]

[[Я не купил хлеба|passage2][$hleb to 'net']]

или так, чтобы не повторять значение 'net', тк оно у нас и так по умолчанию:

[[Я купил хлеба|passage2][$hleb to 'est']]

[[passage2<-Я не купил хлеба]]

Тогда мы в любом случае переходим в один и тот же параграф passage2, но в одном варианте переменная меняется, а в другом остается прежней.

А потом на магаз нападают инопланетяне! Герой бежит и скрывается в бункере! Или не бежит и остается в магазе!

Пишем в стори-инит дефолтное значение:

<<set $ufo to false>>

А в своем новом параграфе про нападение инопланетян:

<<set $ufo to true>>

<<set $gde to 'бункер'>> - если он в бункере; если все еще в магазине, то ничего не пишем, это значение сохранилось с прошлого параграфа.

Ну и так далее: если у ГГ есть хлеб в бункере, то он не умрет от голодной смерти -

<<if $hleb is 'est' and $gde is 'бункер'>>Пишем текст про то, как ГГ выжил в бункере на буханке бородинского.<</if>>

<<if $hleb is 'net' and $gde is 'бункер'>>Пишем текст про то, как ГГ умер с голода в бункере.<</if>>

Пишем варианты для ситуаций, когда ГГ остался в магазине или вообще не пошел за хлебом - и текстовый квест готов.

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

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

Я <<if $male is "женщина">>пошла<<else>>пошел<</if>> в магаз за хлебом.

Как только закончили, жмем "опубликовать историю в файл" - и получаем html-страничку со своей игрой. В процессе ее можно запускать через Twine и смотреть, все ли идет правильно. В итоге, если вы дойдете до конца и сделаете свой квест, - эту страничку можно где-нибудь опубликовать. Например, на itch.io, сайте для инди-разработчиков, где есть отдельный жанр interactive fiction. Или еще где, я пока не думала над этим вопросом.

В общем, подводя итоги, для написания текстового квеста в Twine требуется три умения:

1. Писать (думаю, на писательском сайте с этим проблем нет)

2. Читать (уже сложнее, но, подозреваю, начальные скиллы есть у каждого)

3. Гуглить (эй, это необходимый навык в современном мире!)

И все. Удачи✌ Мне пора идти писать про то, как ГГ прячется от монстра в ночном клубе.

+28
5 134

0 комментариев, по

80 126 37
Наверх Вниз