Архитектура движка
Moirai состоит из трёх основных частей:
- Moirai Editor - редактор, в котором вы создаёте проект: добавляете ассеты, настраиваете персонажей, собираете сцены и связываете их в историю.
- Moirai Engine - движок, который воспроизводит вашу историю: запускает сцены, исполняет события, проверяет условия и хранит значения переменных.
- Moirai Player - плеер, в котором игрок проходит готовую новеллу.
Обычно автор работает только с редактором. Внутреннее устройство проекта знать не обязательно, но базовое понимание архитектуры помогает увереннее пользоваться графом, переменными и разными типами сцен.
Проект
Проект Moirai хранит всё, что нужно для одной визуальной новеллы:
- метаданные проекта: название, автор, язык, дата обновления;
- список персонажей и их эмоций;
- локации и фоновые изображения;
- аудио;
- сцены;
- связи между сценами;
- начальные переменные;
- настройки отдельных сцен и событий.
При экспорте проект может быть сохранён в файл .vnproject. Это архив с историей и ресурсами проекта. Обычно его не нужно открывать вручную: редактор сам импортирует, экспортирует и читает такие файлы.
❗ Не редактируйте
.vnprojectвручную без необходимостиФормат проекта рассчитан на работу через Moirai Editor. Ручное изменение файлов внутри архива может привести к ошибкам при загрузке проекта или воспроизведении истории.
Ассеты
Ассеты - это изображения, музыка, звуковые эффекты и другие файлы, которые используются в сценах.
Обычно ассеты сначала добавляют в проект через вкладку «Ресурсы», а затем выбирают в настройках сцен и событий. Например:
- персонажи используются в диалоговых сценах;
- локации становятся фоном диалогов и карт;
- аудио используется для фоновой музыки и звуковых эффектов;
- изображения могут применяться в комиксах, книгах, галереях и телефонных сценах.
Такой подход помогает не искать файлы заново каждый раз, когда они понадобятся в сцене.
Сцены
Сцена - это отдельный фрагмент истории. В Moirai есть разные типы сцен: диалог, комикс, книга, интерактивная карта, телефонный чат, мини-игра и другие.
Каждая сцена отвечает за свой формат взаимодействия с игроком. Например, диалоговая сцена показывает персонажей и реплики, а телефонный чат имитирует переписку в мессенджере.
У сцены есть:
- ID;
- тип;
- настройки;
- список событий или элементов;
- связи с другими сценами.
ID сцены используется внутри проекта, поэтому его лучше задавать коротко и понятно: intro, office_day_1, ending_good.
События
Внутри многих сцен история строится из событий. Событие - это одно действие, которое должен выполнить движок.
В диалоговой сцене событиями могут быть:
- вход персонажа;
- выход персонажа;
- реплика;
- фокус на персонаже;
- сброс фокуса;
- включение музыки;
- остановка музыки;
- погодный эффект;
- переход;
- выбор игрока;
- ветвление.
Игрок обычно продвигается по событиям последовательно: кликом, тапом или автоплеем. Поэтому порядок событий в сцене так же важен, как порядок строк в обычном сценарии.
Граф истории
После создания сцен их нужно связать в единую историю. Для этого используется граф.
Граф показывает:
- какая сцена является стартовой;
- какие сцены идут после неё;
- где история разветвляется;
- какие сцены могут оказаться недостижимыми;
- где есть тупики без дальнейшего перехода.
Связь между сценами может быть безусловной или условной. Безусловная связь всегда ведёт к указанной сцене. Условная связь срабатывает только тогда, когда значение переменной подходит под заданное условие.
Переменные и условия
Переменные позволяют истории запоминать действия игрока.
Например, сцена может записать выбор игрока в переменную helpedFriend, а позже граф или ветвление внутри сцены проверит это значение и выберет подходящее продолжение.
Переменные используются для:
- выбора следующих сцен;
- ветвления внутри диалогов;
- реакции персонажей на прошлые решения;
- мини-последствий;
- проверки условий победы или провала;
- накопления очков, флагов и других данных.
Мы рекомендуем давать переменным понятные имена на английском языке: metBoss, acceptedCall, routeChoice. Имена вроде var1 или flag2 быстро становятся неудобными, особенно в больших проектах.
Плеер
Когда игрок запускает новеллу, Moirai Player начинает со стартовой сцены и дальше следует по связям графа.
Плеер:
- загружает историю и ассеты;
- показывает сцены;
- воспроизводит события;
- хранит текущие значения переменных;
- проверяет условия;
- переходит между сценами;
- отображает телефонные интерфейсы, мини-игры, книги, комиксы и другие форматы.
Для автора это значит главное: если сцены корректно связаны в графе, а переменные создаются до того, как проверяются, история будет воспроизводиться предсказуемо.