Qito: инструментарий для создания игр, ориентированных на повествование
В начале осени я анонсировал что уже некоторое время работаю над инструментарием, который позволит создавать продвинутые текстовые новеллы с помощью визуального программирования. Прошлый раз я наскоком пробежался по основным моментам, сейчас я могу рассказать обо всем более детально.
Наглядная демонстрация из старой статьи:
Кстати, теперь есть название — Qito: a narrative-driven game engine.
Думаю, стоит начать с основных изменений и нововведений. Уточни, что я не работал над проектом все время, часто делая перерывы и переключаясь на что-то другое.
Сейчас я делаю основной упор на удобный, приятный и быстрый интерфейс — это для меня наиболее важные характеристики. По итогу я смог перенести и адаптировать работу управляющих нод прямо из рабочего пространства: все данные «игровых выборов» и «менеджеров повествования» можно изменять в реальном времени, здесь и сейчас, без каких либо отдельных меню настроек..
Игровой выбор — игрок должен сделать выбор из нескольких вариантов, каждый вариант — это набор изменений и требований, которые игрок должен соблюсти, чтобы вариант был доступен.
Вы наверняка видели подобное во многих играх, визуально это выглядит примерно так:
Менеджер повествования — нода, которая также содержит набор вариантов. В отличии от «выбора» — менеджер работает автоматически.
Пример. Автор добавил развилку в середине второй главы:
1. Если игрок сделал [A, Б,С] то повествование будет идти по линии 1.
2. Если игрок сделал [A, В] то уже линия 2.
3. Если ничего не подошло — то автоматически выбирается третий вариант.
Также есть третья нода — и основная — контент. Один блок может содержать неограниченное количество книжных «разверток»: левая и правая страницы. Поддерживается форматирование текста, персонажей, изображений и подобного. Реализовано на основе открытого проекта editor. js
Копаем вглубь
А теперь к более интересным тектоническим особенностям: )
В версии от сентября еще не было поддержки локальных ассетов — да, можно было вставлять изображения, но они работали только по ссылкам. Теперь же есть полноценная загрузка изображений в локальное хранилище проекта, и соответсвенно подгрузка файлов их него. Сейчас. поддерживаюся только изображения, но аудио файлы также будут.
Сжатие и кодирование изображений сделано на основе замечательного squoosh.
Вторая большая доработка — написан базовый универсальный редактор базы данных. Основное требование — реал тайм. Изменения должны прилетать и отображаться во всех местах, где отображается или используются измененные данные.
Из важного — пришло понимание что без пользовательских переменных никуда, так что да, теперь есть базовые number, string и boolean.
Сделана базовая поддержка ключевых слов для нод и поиск:
Последние крупное изменение, — сложно заметить слона в комнате, — полностью переработан внешний вид редактора. Да, то тут то там есть недоработки и временные решения, но на фоне прошлой версии — это мелочи.
Планы
На самом деле большая часть работы так и осталась за кадром — я переписывал ядро, упрощая архитектуру и код, правил оптимизацию, придумывал и пробовал десятки разных идей для визуального взаимодействия с нодами.
Одних только набросков отображения данных в выборах было с десяток — стоит ли все действия выводить в контекстное меню? Стоит отображать данные в свернутом виде? А если контекстное меню, то для контейнеров и правил в контейнерах они должны быть разные? А как лучше обозначить что это — переменная, а это — персонаж?… А что насчет производительности?…
Морока с блоками правил и изменений и правда была большая, но теперь это отличная основа для всех возможных будущих типов нод, в которых есть переключатели или нечто подобное.
Сейчас я планирую начать работу над новой основой для игрового клиента, которая также будет включена как режим «предпросмотр» в игровой редактор. Изменений в ядре уже набралось так много, что лучше написать клиент снова с нуля, учитывая найденные проблемы спустя время: D
А дальше длинный список фич, вроде аудио дорожек, вложенных переменных, игровых событий и прочего-прочего-прочего. В далекой перспективе — поддержка визуальных новелл.
А теперь ложка дегтя: (
Пощупать пока нельзя, исходники также закрыты. Я сейчас стал неуверен в каком именно состоянии я планирую выпустить (когда, и если, это произойдет) проект в публичный доступ. Пока думаю об ограничено отрытых исходниках и бесплатных билдах на их основе, без контроля что и где будет выпускать на основе движка — хотите хентай, делайте. Хотите в стим — будет сборка для стима.
Но до ранних билдов и исходников пока рано, меня не устраивает качество кода и состояние проекта. Следующий большой новостной апдейт будет ближе весне, думаю. Вообще, я нашел столько разных подводных каменей и их решений, что думаю написать серию статей на английском и для более специализированных площадок.
— Пустой дискорд сервер для связи, чтобы не теряться.
— Загрушка-репозиторий на гитхабе:
На чем делается: Electron, vue3, открытые библиотеки вроде editor. js, tippy. js, uuid […] и много-много своего кода.
В итоге у тебя должно получится нечто вроде генератора текстовых квестов о для космических рейнджеров?
Очень похоже, но на спидах, большой кастомизацией и возможностью собирать билд в отдельные приложения
ElectronЧто тебе плохого юзеры сделали....
Спустя полгода я могу сказать что он норм, даже большой вес из-за оверхеда можно уменьшить до 110мб, что не так критично.
Но нужно иметь бэкграунд, с большим опытом оптимизации производительности под веб, из-за сотен подводных камней, которые человек извне просто не может знать.
Согласен, лучше просто онлайн версия
На это мы подписываемся и репостим 👍
Выглядит прям мощно! Ждём релиза в Стиме)