Как создать визуальную новеллу? Если вы хоть раз задумывались об этом, вы знаете насколько сложное это дело. Существующие движки для создания новелл имеют множество недостатков.
Самые популярные из них - это RenPy, Tyrano Builder, RPG Maker, Unity.
RenPy
Движок RenPy является безусловным лидером. Из плюсов - он бесплатный, у него большой функционал, минимальное количество багов и простой синтаксис языка программирования. Из минусов - то самое программирование, сложные ветки развития событий, команды появления каждого персонажа, смены фона, музыки и так далее.
Tyrano Builder
User-friendly интерфейс, возможность собирать сцены, используя drag and drop, однако в некоторых случаях все же потребуется использовать JavaScript, да и функционал у него довольно ограниченный.
RPG Maker
Дешевый, его легко использовать. Можно сделать простенькую новеллу, показав нужные фоны, спрайты и диалоги. Однако функционал предназначен для создания JRPG, а не новелл, поэтому он крайне ограничен. Для расширения функционала нужно пользоваться плагинами, которые требуют знания языка JavaScript.
Unity
Unity - универсальная программа с огромным функционалом, на которой можно сделать игры множества жанров. При использовании её для создания визуальных новелл нужны сильные навыки программирования, Для создания визуальной новеллы вам потребуется скачать готовые ассеты, иначе нужно будет делать все с нуля. Как вариант, Visual Novel Engine, Utage3 или Vinoma. Главные минусы - придется выучить Unity и писать код.
Решение написать свой движок
Что же делать, если твои сильные стороны заключаются в рисовании или написании сценария, а программирование не для тебя?
Мы с командой Aristocat хотим решить эту проблему, создав очень простой движок-конструктор. Чтобы сделать новеллу, нужно будет просто вставить изображения, текст и музыку в нужные места и соединить ветки событий.
Основной функционал нашего будущего движка
Вот мы пришли к определению основного функционала нашего будущего движка:
1. Визуальное программирование с помощью графов
Ноды. Блоки, которые составляют граф визуальной новеллы. Они должны отвечать за логику игры. Обязательно будут такие ноды:
- Нода персонажа. Должна уметь показывать/скрывать персонажа.
Изменять его спрайт на экране - Нода текста. Позволяет изменять текст в окне снизу.
- Нода звука. Позволяет проигрывать различные аудио.
- Нода заднего фона. Позволяет выбирать спрайт для заднего фона.
Переходы. Ноды будут соединяться с помощью переходов, которые
будут отвечать за условия передвижения игрока от одной ноды к
другой. Данные условия перехода могут зависеть от переменных,
меняющих значения во время новеллы. Обязательно должно быть 2
типа переходов:
- Простой переход. Переход без условий.
- Клик-переход. Переход срабатывает, если пользователь нажал на экран.
Пример того, как структурно может выглядеть финальный граф проекта:
Здесь новелла начинается с того, что нас встречает персонаж Anna на фоне заката (Sunset) и говорит: “Егор. Покажи себя!”. После нажатия игрока мы узнаём, сбежал ли Egor? Если сбежал, то Anna скажет: “Ох, нет Егора :c”. Иначе Egor появляется на экране.
2. Система переменных
Должна быть простая система рантайм переменных примитивных типов: int, float, boolean, string. В примере выше можно заметить переменную boolean EgorRanAway.
3. Библиотека ассетов и дополнительные абстракции
Должно быть определенное хранилище ресурсов (спрайты, аудио, видео), используемых в проекте. Было принято решение использовать систему подобную Unity. Все ассеты должны лежать в директориях создаваемого проекта.
Также мы должны хранить дополнительные абстракции, например, персонаж. Проще сразу добавить персонажа на сцену одной нодой, нежели вручную двигать спрайты на сцене. В примере выше мы можем заметить персонажей Anna и Egor. Они должны обладать собственными спрайтами, именем, цветом.
4. Кроссплатформенность движка и продукта пользователя
Движок должен быть кроссплатформенным, чтобы его можно было запускать даже на сайте.
5. Локализация
Мы должны заранее подготовиться к тому, что везде в движке вместо текста должны быть ключи. В зависимости от выбранной локализации, данные ключи преобразуются в текст на родном языке. У нас в задачах стоит как можно меньше показывать данные ключи создателю визуальной новеллы, и точно не показывать конечному пользователю.
Наши ресурсы
Данный проект планируется разрабатывать в качестве курсовой работы. Данный факт привел к тому, что наша команда студентов выглядит так (исторически сложилось).
У нас было 2 разработчика Unity, 1 художник и куча свободного времени.
Определение инструментов разработки
Если взглянуть на нашу команду, то появляется идея взять Unity в качестве инструмента разработки. Однако Unity - это уже готовый движок для создания игр. Неужели мы собираемся разрабатывать движок для игр в движке для игр?
Ответ: YOLO да.
Unity обладает кроссплатформенностью, что позволяет и конструктору, и самой визуальной новелле быть кроссплатформенными тоже.
Из минусов можно отметить, что в Unity достаточно сложно создать красивый UI. Также очевидно, что мы проигрываем в производительности. Надеюсь, что это не слишком критично для визуальных новелл.
Строение Unity проекта
В итоге мы должны создать 2 программы: конструктор визуальных новелл и их интерпретатор.
В нашем строении Unity проекта, это 2 разные сцены. Планируется, что наш движок будет компилироваться таким образом:
- Для конструктора компилируем все сцены: конструктор и интерпретатор. Надо же для создателя новеллы показывать не только исходники, но и то, как игра будет выглядеть в итоге.
- Для интерпретатора компилируем только сцену с интерпретатором. В данном случае сцена должна сама находить сериализованные файлы, отвечающие за созданную новеллу. Было решено положить эти файлы в одну директорию с исполняемым файлом интерпретатора.
Заключение
Понятное дело, что текст ранее - это лишь базовая концепция без деталей, которая оставляет много вопросов.
На данный момент движок находится в процессе создания. Вы можете подписаться на наш канал, чтобы поддержать проект и следить за прогрессом.
В следующей статье мы можем подробно рассказать о возникших технических трудностях, а также показать какие-то наработки (в том числе и код).