Leylines Dialog Editor
By: sovaИнтро
Эта программа позволяет писать диалоги для игр или других видов развлекательного ПО (например, скринмейтов!). Диалоги экспортируются в XML и могут быть использованы в любой программе у которой есть парсер. Основное преимущество такого подхода помимо хорошей переносимости между ОС и видами ПО — то, что XML файл можно легко отредактировать вручную в любом текстовом редакторе, не добавляющем свою разметку (например, Notepad++).
Я опишу здесь и программу и идею диалоговой системы, которую она обслуживает.
Принцип работы диалоговой системы
Каждый диалог — есть цепочка реплик, у каждой из которых есть список ответов. Каждый ответ является полноценной репликой и может иметь свои ответы. Зависимость между репликами свободная — реплика может иметь в качестве ответа своего предшественника, или пропускать сколь угодно много будущих реплик. Движок диалоговой системы должен читать реплики по цепочке одну за другой, пока не дойдет до реплики у которой ответов нет, и тогда завершает диалог. Если у реплики нет ни одного ответа, диалог заканчивается. Если ответов несколько, то есть два варианта развития событий:
- Если у реплики есть флаг флаг AI, то реплика принадлежит Компьютеру(скрипту, управляющему потоком диалога), а ответы — Игроку(человеку, листающему диалог). Игроку показывается набор реплик, из которых он может выбрать одну. Так реализуется ветвление диалогов.
- Если у реплики нет флага AI, значит, что реплика принадлежит Игроку, и ответить на неё должен Компьютер. Простейший обработчик выберет случайный ответ.
Хитрости и возможности
В этой системе можно легко создавать текстовые меню, за счёт того, что реплики могут иметь своего предшественника в качестве ответа. Пункты меню в таком случае будут репликами, ссылающимися обратно на меню (можно в несколько шагов). Тогда пункт закрытия меню будет просто репликой без ответов.
Новые ветви диалога можно легко добавлять по мере надобности. Нужно загрузить новую цепочку реплик, и добавить первую реплику в цепочке в качестве ответа к нужной уже загруженной реплике. Так можно по мере надобности загружать руты в визуальных новеллах, или добавлять новые опции диалогов программно. Например, если использовать данную систему в RPG, то с помощью этой фишки у NPC могут появиться новые реплики когда игрок победит нужное кол-во монстров или если он ранен.
Комментарии разработчика
Диалоги намеренно не сжаты и не используют базы данных чтобы их можно было редактировать в текстовом редакторе. Сжатие убьет эту читабельность и возможность «хакнуть» код диалога вручную. Даже для больших диалогов в тысячи реплик сэкономленные сжатием байты дадут сомнительный выигрыш в конечном объеме исполняемого файла по сравнению с весом библиотек и медиа вроде музыки и спрайтов, и по моему мнению не стоят свободы и адаптируемости.
Эта система реализована и используется в моей небольшой визуальной новелле «Лето».