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

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

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

Текстовое описание до начала генерации

TEXT

Комментарий к блоку (переменная_1)
Непрерывный текст блока

Следующий блок (переменная_2)
Еще текст


Псевдокод алгоритма генерации

Установить СОСТОЯНИЕ в “поиск начального тега”
Прочитать исходный документ
Для каждой строки документа
     Если СОСТОЯНИЕ равно  “поиск начального тега”, то
           Если на строке тег TEXT, то установить СОСТОЯНИЕ в “поиск блока текста”
     Иначе, если СОСТОЯНИЕ равно “поиск блока текста”, то
           Если текущая строка совпадает с выражением для комментария с переменной, то
                Запомнить текст комментария
                Запомнить имя переменной
                Очистить список строк текущего блока
                Установить СОСТОЯНИЕ в “обработка следующей строки”
           Конец если текущая строка
     Иначе, если СОСТОЯНИЕ равно “обработка следующей строки”, то
            Если строка непустая, то добавить строку в список строк для текущего блока
            Иначе
                 Сгенерировать блок текста в приемлимом виде для движка
                 Установить СОСТОЯНИЕ в “поиск блока текста”
            Конец если
     Конец если СОСТОЯНИЕ равно
Конец для


Скриншот применения генерации для игры “Каратель шестого поста”:



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

Минусы:
  • Разработать синтаксис генерирования и ему следовать
  • Надо написать и отладить генератор
  • Параллельное хранение исходного текстового вида и генерируемого

Заключение. Лично для меня достоинства генератора с лихвой перекрывают недостатки и позволяют сосредоточиться на главном и распараллелить работу над большой игрой. Документы веду в GoogleDocs, они бесплатные с возможностью параллельного редактирования и встроенной версионностью, очень удобно. Может есть лучшие решения такой проблемы.

9 комментариев

Oreolek
Не совсем понял преимущества создания генератора. Просто потому что внешний вид Google Docs нравится больше, чем Notepad++? Или нужна проверка орфографии?

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

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

Альтернатива — это обычные текстовые файлы, чтобы всё-таки работать не выходя из кода игры. Если хочется красивого редактора для текстовых файлов, то есть плагин Zenmode для Atom (скриншот мой, из реального кода):



Ни разу не встречал чтобы надо было редактировать текст прямо одновременно вдвоём-втроём по Интернету, так что для совместной работы пользуюсь git, там и история тщательнее хранится. Плюс обычные сайты/сервисы рецензирования.
alastochkin
Не только внешний вид гугл докс, но и возможность форматировать текст, не заботиться о кодировках. Я например, одну игру делаю совместно через гугл докс вдвоём, плюс может еще кто-то подтянется, очень удобно. Я, понимаю, тебе как программисту проще без этого, однако, я встречался с гуманитариями, им намного предпочтительней формат документа. Вообщем статья рассказывает просто один из вариант, не говорю прямо для всех существующих проектов. Буду иметь ввиду твою инфу.
crem
Гугл докс удобнее чем гит по ряду причин. Можно редактировать откуда угодно, хоть с даже с телефона, не надо себе клонировать репозиторий (да и пропустить изменение труднее). В отличие от кода, нету особых требований атомарности изменений. Ну и форматирование может быть приятнее для глаз.
Oreolek
Кхм. Наверное, у нас действительно разные потребности.

С телефона текст трудно писать без орфографических ошибок, то есть, его всё равно нужно править на компьютере, подготавливать к рецензированию. А так редактировать и комментировать репозитории git можно хоть в тех же Gitlab/Github/Bitbucket. Без скачивания репозитория, лишь бы формат файла не поломать (что справедливо и для описываемого GDocs документа).

Атомарность, когда мы говорим о тексте — это простая законченная правка. То есть, автор закончил писать этот кусок текста (главу, локацию) и это можно проверять. А пока мы проверяем, автор пишет дальше. Даже в Google Docs вряд ли у вас вся команда одновременно пишет сразу всё, мешая друг другу и проверяя свеженаписанное в реальном времени.

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

А так-то спелл-чек и в Notepad++ есть.
Wol4ik
В последнее время я пришел к обычному ворд файлу. Локации пронумерованы как в книге-игре, но с допустимыми приписками. Например main, 0, 1,… 34, 34а, 34в ,34с, 35,… 176. В вордфайле это парграфы как в книге-игре, а эти самые номера параграфов выделены шрифтом «заголовок3». Для чего. Чтобы можно было при ветвлении сюжета давать активную ссылку на нужный параграф прямо в файле вод. Пример:

main (шрифт — заголовок3)
Вы пришли на поляну^^
Идти к озеру. /1^
Идти в чащу. /2

1 (шрифт заголовок3)
Вы у озера.
Вернуться /main

2 (шрифт заголовок3)
Вы в чаще.
Вернуться. /main

Приписки после слеша это внутритекстовые гиперссылки на нужный пераграф. Мой редактор-бэтатестер вычитывает ворд файл, правит. Возвращает и я переношу эти параграфы по шаблону в накопированные однообразные заготовки кода руками. И он и я можем ходить по сюжету прямо в ворд файле кликая на активные ссылки если есть ветвление сюжета или при «далее». В параграфах я приписываю крупными буквами на русском языке заметки типа — УБРАТЬ СПИЧКИ, или ДОБАВИТЬ МЕЧ, или ЗОЛОТО +100 и подобное, если нужно.
alastochkin
Ну прикольно. Интересный вариант.
Enola
У меня всегда была мечта: набираешь текст в документе, а он волшебным образом превращается в игру.
Есть один способ. «Книга-игра» называется.:)
alastochkin
Может пора просто уже книгу написать :)
Где-то я читал, что даже при чтении книги есть минимальный интерактив, когда читателю очень интересно и он перелистывает страницы, чтобы узнать чем кончилась глава или вся книга.