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

Плюсы использования такого подхода:
Минусы:
Заключение. Лично для меня достоинства генератора с лихвой перекрывают недостатки и позволяют сосредоточиться на главном и распараллелить работу над большой игрой. Документы веду в GoogleDocs, они бесплатные с возможностью параллельного редактирования и встроенной версионностью, очень удобно. Может есть лучшие решения такой проблемы.
На крайняк, можно дать исходный код, конечно. Какой движок вы не выберете, стороннему человеку тяжело разбираться с текстом вшитым в игру. Если предусмотреть такой поворот заранее, можно организовать код лучше и просто вынести весь текст в отдельные блоки. Однако, для вычитки, придется постоянно копировать в текстовый редактор содержимое, после редактирования вставлять обратно, что не очень удобно.
Для себя нашел одно решение, которым хотел поделиться. Я предлагаю просто генерировать текст из вордовского документа в исходный код для игры. Уточним задачу: мы хотим превращать блоки текста в исходный код с добавлением переменной или функции, а также краткого комментария. Делается это всё довольно просто. Для меня, оказалась удобной такая форма мини-синтаксиса:
Текстовое описание до начала генерации
TEXT
Комментарий к блоку (переменная_1)
Непрерывный текст блока
Следующий блок (переменная_2)
Еще текст
Псевдокод алгоритма генерации
Установить СОСТОЯНИЕ в “поиск начального тега”
Прочитать исходный документ
Для каждой строки документа
Если СОСТОЯНИЕ равно “поиск начального тега”, то
Если на строке тег TEXT, то установить СОСТОЯНИЕ в “поиск блока текста”
Иначе, если СОСТОЯНИЕ равно “поиск блока текста”, то
Если текущая строка совпадает с выражением для комментария с переменной, то
Запомнить текст комментария
Запомнить имя переменной
Очистить список строк текущего блока
Установить СОСТОЯНИЕ в “обработка следующей строки”
Конец если текущая строка
Иначе, если СОСТОЯНИЕ равно “обработка следующей строки”, то
Если строка непустая, то добавить строку в список строк для текущего блока
Иначе
Сгенерировать блок текста в приемлимом виде для движка
Установить СОСТОЯНИЕ в “поиск блока текста”
Конец если
Конец если СОСТОЯНИЕ равно
Конец для
Скриншот применения генерации для игры “Каратель шестого поста”:

Плюсы использования такого подхода:
- Весь существенный текст храниться в непрерывном документе, всегда доступный для чтения, редактирования и проверки правописания
- Возможна совместная работа с бета-ридером и другими участниками через рецензирование
- Совмещение технической информации о мире с генерируемой
- Удобно сосредотачиваться на тексте, когда не видишь всякие программные конструкции
- Удобство перевода
- Удобства переноса на другой игровой движок
- Возможность добавления программных конструкций при генерировании (ссылок, действий)
Минусы:
- Разработать синтаксис генерирования и ему следовать
- Надо написать и отладить генератор
- Параллельное хранение исходного текстового вида и генерируемого
Заключение. Лично для меня достоинства генератора с лихвой перекрывают недостатки и позволяют сосредоточиться на главном и распараллелить работу над большой игрой. Документы веду в GoogleDocs, они бесплатные с возможностью параллельного редактирования и встроенной версионностью, очень удобно. Может есть лучшие решения такой проблемы.
Если текст хранится отдельно, то он и редактируется-вычитывается-переводится там же, где хранится, потому что он же очищен от логики.
Альтернатива — это обычные текстовые файлы, чтобы всё-таки работать не выходя из кода игры. Если хочется красивого редактора для текстовых файлов, то есть плагин Zenmode для Atom (скриншот мой, из реального кода):
Ни разу не встречал чтобы надо было редактировать текст прямо одновременно вдвоём-втроём по Интернету, так что для совместной работы пользуюсь git, там и история тщательнее хранится. Плюс обычные сайты/сервисы рецензирования.
С телефона текст трудно писать без орфографических ошибок, то есть, его всё равно нужно править на компьютере, подготавливать к рецензированию. А так редактировать и комментировать репозитории git можно хоть в тех же Gitlab/Github/Bitbucket. Без скачивания репозитория, лишь бы формат файла не поломать (что справедливо и для описываемого GDocs документа).
Атомарность, когда мы говорим о тексте — это простая законченная правка. То есть, автор закончил писать этот кусок текста (главу, локацию) и это можно проверять. А пока мы проверяем, автор пишет дальше. Даже в Google Docs вряд ли у вас вся команда одновременно пишет сразу всё, мешая друг другу и проверяя свеженаписанное в реальном времени.
Ну, а на глаз — вкусы разные.
А так-то спелл-чек и в Notepad++ есть.
main (шрифт — заголовок3)
Вы пришли на поляну^^
Идти к озеру. /1^
Идти в чащу. /2
1 (шрифт заголовок3)
Вы у озера.
Вернуться /main
2 (шрифт заголовок3)
Вы в чаще.
Вернуться. /main
Приписки после слеша это внутритекстовые гиперссылки на нужный пераграф. Мой редактор-бэтатестер вычитывает ворд файл, правит. Возвращает и я переношу эти параграфы по шаблону в накопированные однообразные заготовки кода руками. И он и я можем ходить по сюжету прямо в ворд файле кликая на активные ссылки если есть ветвление сюжета или при «далее». В параграфах я приписываю крупными буквами на русском языке заметки типа — УБРАТЬ СПИЧКИ, или ДОБАВИТЬ МЕЧ, или ЗОЛОТО +100 и подобное, если нужно.
Где-то я читал, что даже при чтении книги есть минимальный интерактив, когда читателю очень интересно и он перелистывает страницы, чтобы узнать чем кончилась глава или вся книга.