Qito: инструментарий для создания игр, ориентированных на повествование

Qito: инструментарий для создания игр, ориентированных на повествование
Ого, как теперь красиво

В начале осени я анонсировал что уже некоторое время работаю над инструментарием, который позволит создавать продвинутые текстовые новеллы с помощью визуального программирования. Прошлый раз я наскоком пробежался по основным моментам, сейчас я могу рассказать обо всем более детально.

Наглядная демонстрация из старой статьи:

Поддержка 3D очень условная, была добавлено в качестве эксперимента через костыли.

Кстати, теперь есть название — Qito: a narrative-driven game engine.

Думаю, стоит начать с основных изменений и нововведений. Уточни, что я не работал над проектом все время, часто делая перерывы и переключаясь на что-то другое.

Сейчас я делаю основной упор на удобный, приятный и быстрый интерфейс — это для меня наиболее важные характеристики. По итогу я смог перенести и адаптировать работу управляющих нод прямо из рабочего пространства: все данные «игровых выборов» и «менеджеров повествования» можно изменять в реальном времени, здесь и сейчас, без каких либо отдельных меню настроек..

Игровой выбор — игрок должен сделать выбор из нескольких вариантов, каждый вариант — это набор изменений и требований, которые игрок должен соблюсти, чтобы вариант был доступен.

Вы наверняка видели подобное во многих играх, визуально это выглядит примерно так:

Менеджер повествования — нода, которая также содержит набор вариантов. В отличии от «выбора» — менеджер работает автоматически.

Пример. Автор добавил развилку в середине второй главы:

1. Если игрок сделал [A, Б,С] то повествование будет идти по линии 1.

2. Если игрок сделал [A, В] то уже линия 2.

3. Если ничего не подошло — то автоматически выбирается третий вариант.

Наглядно. У нас имеется один вход и множество выходов.
Наглядно. У нас имеется один вход и множество выходов.

Также есть третья нода — и основная — контент. Один блок может содержать неограниченное количество книжных «разверток»: левая и правая страницы. Поддерживается форматирование текста, персонажей, изображений и подобного. Реализовано на основе открытого проекта editor. js

Qito: инструментарий для создания игр, ориентированных на повествование

Копаем вглубь

А теперь к более интересным тектоническим особенностям: )

В версии от сентября еще не было поддержки локальных ассетов — да, можно было вставлять изображения, но они работали только по ссылкам. Теперь же есть полноценная загрузка изображений в локальное хранилище проекта, и соответсвенно подгрузка файлов их него. Сейчас. поддерживаюся только изображения, но аудио файлы также будут.

Сжатие и кодирование изображений сделано на основе замечательного squoosh.

Вторая большая доработка — написан базовый универсальный редактор базы данных. Основное требование — реал тайм. Изменения должны прилетать и отображаться во всех местах, где отображается или используются измененные данные.

Внешний вид недоработан, но пока как-то так

Из важного — пришло понимание что без пользовательских переменных никуда, так что да, теперь есть базовые number, string и boolean.

Сделана базовая поддержка ключевых слов для нод и поиск:

Вот это да

Последние крупное изменение, — сложно заметить слона в комнате, — полностью переработан внешний вид редактора. Да, то тут то там есть недоработки и временные решения, но на фоне прошлой версии — это мелочи.

Как теперь
А вот так было
А вот так было

Планы

На самом деле большая часть работы так и осталась за кадром — я переписывал ядро, упрощая архитектуру и код, правил оптимизацию, придумывал и пробовал десятки разных идей для визуального взаимодействия с нодами.

Одних только набросков отображения данных в выборах было с десяток — стоит ли все действия выводить в контекстное меню? Стоит отображать данные в свернутом виде? А если контекстное меню, то для контейнеров и правил в контейнерах они должны быть разные? А как лучше обозначить что это — переменная, а это — персонаж?… А что насчет производительности?…

Морока с блоками правил и изменений и правда была большая, но теперь это отличная основа для всех возможных будущих типов нод, в которых есть переключатели или нечто подобное.

Сейчас я планирую начать работу над новой основой для игрового клиента, которая также будет включена как режим «предпросмотр» в игровой редактор. Изменений в ядре уже набралось так много, что лучше написать клиент снова с нуля, учитывая найденные проблемы спустя время: D

А дальше длинный список фич, вроде аудио дорожек, вложенных переменных, игровых событий и прочего-прочего-прочего. В далекой перспективе — поддержка визуальных новелл.

Все данные проекта хранятся в json конфигах, что приносит универсальность. Вдохновлялся форматом epub.
Все данные проекта хранятся в json конфигах, что приносит универсальность. Вдохновлялся форматом epub.

А теперь ложка дегтя: (

Пощупать пока нельзя, исходники также закрыты. Я сейчас стал неуверен в каком именно состоянии я планирую выпустить (когда, и если, это произойдет) проект в публичный доступ. Пока думаю об ограничено отрытых исходниках и бесплатных билдах на их основе, без контроля что и где будет выпускать на основе движка — хотите хентай, делайте. Хотите в стим — будет сборка для стима.

Но до ранних билдов и исходников пока рано, меня не устраивает качество кода и состояние проекта. Следующий большой новостной апдейт будет ближе весне, думаю. Вообще, я нашел столько разных подводных каменей и их решений, что думаю написать серию статей на английском и для более специализированных площадок.

— Пустой дискорд сервер для связи, чтобы не теряться.

— Загрушка-репозиторий на гитхабе:

На чем делается: Electron, vue3, открытые библиотеки вроде editor. js, tippy. js, uuid […] и много-много своего кода.

427
85 комментариев

В итоге у тебя должно получится нечто вроде генератора текстовых квестов о для космических рейнджеров?

4
Ответить

Очень похоже, но на спидах, большой кастомизацией и возможностью собирать билд в отдельные приложения

8
Ответить

ElectronЧто тебе плохого юзеры сделали....

5
Ответить

Спустя полгода я могу сказать что он норм, даже большой вес из-за оверхеда можно уменьшить до 110мб, что не так критично.

Но нужно иметь бэкграунд, с большим опытом оптимизации производительности под веб, из-за сотен подводных камней, которые человек извне просто не может знать.

1
Ответить

Согласен, лучше просто онлайн версия

Ответить

На это мы подписываемся и репостим 👍

4
Ответить

Выглядит прям мощно! Ждём релиза в Стиме)

2
Ответить