Jasefly.VN — модульный движок визуальных новелл на Unity
Модульный runtime и игровая архитектура для визуальных новелл на Unity. Проект отделяет сценарную логику от движка и UI, поддерживает собственный формат .jvn, диалоги, выборы, переменные, ветвление, сохранения, backlog, Auto/Skip, rollback, аудио и анимированные presentation-переходы.
Jasefly.VN — собственная архитектура визуальной новеллы на Unity
Jasefly.VN — это не просто игровой проект, построенный поверх готового VN-фреймворка. Это самостоятельный модульный runtime для story-driven и visual novel игр, разработанный вокруг идеи строгого разделения сценарной логики, игрового состояния, presentation-слоя и конкретного игрового движка.
Архитектура
Ключевой принцип проекта — игровой код не должен знать, какой именно VN-backend используется под капотом. Jasefly.VN предоставляет собственные контракты сценарного runtime. Это позволяет постепенно заменять сторонний runtime собственными системами, не переписывая всю игру целиком.
Runtime-слой Jasefly.VN отделён даже от UnityEngine и не зависит от UI, файловой системы или конкретных игровых ассетов. Unity используется в качестве клиента и presentation-слоя: она отображает состояние, связывает идентификаторы персонажей, фонов и аудио с реальными ресурсами и обрабатывает пользовательский ввод.
Собственный сценарный runtime
Для сценариев используется собственный текстовый формат .jvn. Сценарий преобразуется в граф исполнения, который поддерживает последовательные диалоги, варианты выбора, переменные, условное ветвление и управление состоянием сцены.
Runtime хранит семантическое состояние истории независимо от визуального представления. Благодаря этому сохранение игры не привязано к текущему состоянию UI или конкретной Unity-сцене.
Реализованные возможности
диалоги и последовательное выполнение сценария;
выборы игрока и ветвление;
строковые переменные и проверки условий;
собственный формат сценариев
.jvn;парсер и импорт сценариев;
состояние персонажей, выражений и позиций;
управление фонами;
музыка и одноразовые SFX-события;
семантическая система Save / Load;
история диалогов — backlog;
отслеживание уже прочитанных реплик;
режимы Auto и Skip;
ограниченный rollback состояния;
посимвольное раскрытие текста;
блокировка Continue во время presentation-переходов;
crossfade фонов;
show / hide персонажей;
crossfade выражений;
анимированное перемещение персонажей;
настройка громкости музыки и SFX.
Presentation layer
Визуальное представление намеренно вынесено из runtime. Unity-слой занимается отображением персонажей, фонов, текста и аудио, а также переходами между состояниями. Runtime при этом остаётся чистой моделью игры.
Такое разделение позволяет использовать один и тот же сценарный движок с разными интерфейсами, presentation-системами и потенциально даже с различными клиентами.
Save / Load и восстановление состояния
Система сохранений построена вокруг сериализуемого семантического snapshot. Сохраняется состояние истории, а не случайное состояние Unity-объектов. Это упрощает восстановление игры, тестирование и дальнейшую миграцию между различными presentation-реализациями.
На той же модели реализован rollback: runtime хранит ограниченную историю состояний в ключевых точках диалога и выбора и может восстановить предыдущий snapshot.
Почему этот проект важен
Основная ценность проекта — не отдельный набор механик визуальной новеллы, а архитектура, позволяющая превратить Unity в клиент данных, а не в монолит, внутри которого находится вся логика игры.
Такой подход делает возможным дальнейшее развитие Jasefly.VN как самостоятельного движка и набора инструментов для narrative-игр: от визуальных новелл до других 2D story-driven проектов, где контент, состояние и presentation должны развиваться независимо друг от друга.