{"id":4148,"url":"\/distributions\/4148\/click?bit=1&hash=32daf6fdde62b961d09fae929083faedf86c8b787fc43dc58472fed85e75c6e2","title":"\u0418\u0422 \u0431\u0435\u0437 \u0445\u043e\u043b\u0438\u0432\u0430\u0440\u043e\u0432 \u043a\u0430\u043a \u043f\u044e\u0440\u0435\u0448\u043a\u0430 \u0431\u0435\u0437 \u043a\u043e\u0442\u043b\u0435\u0442\u043a\u0438","buttonText":"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c","imageUuid":"de0c95b9-a8ae-5fc4-a6a1-fac80fab4385"}

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

Ого, как теперь красиво

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

Анонс: полгода разработки инструментария для созданий игр подобных «The Life and Suffering of Sir Brante»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот это да

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

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

Планы

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

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

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

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

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

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

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

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

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

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

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

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

0
84 комментария
Написать комментарий...
Ярослав

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

Ответить
Развернуть ветку
Панда МакКартни
Автор

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

Ответить
Развернуть ветку
1 комментарий
Heart-Under-Blade
Electron

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

Ответить
Развернуть ветку
Панда МакКартни
Автор

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

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

Ответить
Развернуть ветку
7 комментариев
Sergey Ryabenko

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

Ответить
Развернуть ветку
7 комментариев
Алекс Мёрфи

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

Ответить
Развернуть ветку
Dm Dm

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

Ответить
Развернуть ветку
mx

Хороший инструмент для подобного, кому предпочтительнее редактирование в текстовом виде:
https://yarnspinner.dev/

Ответить
Развернуть ветку
Панда МакКартни
Автор

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

Ответить
Развернуть ветку
Артем Н.

Нечто похожее было для создания собственных квестов в Космических Рейнджерах 2.

Ответить
Развернуть ветку
El Dany

На чем пишешь и что используешь?

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

Это мы ждем, куплю даже за... ДЕНЬГИ)

Ответить
Развернуть ветку
Revendi

Для мастера ДнД хорошо подойдёт)

Ответить
Развернуть ветку
Никита

Приятно видеть, что-то действительно масштабное и интересное для разработки
Ждём релиз)

Ответить
Развернуть ветку
Dmitry Shkradziuk

Обязательно попробую.
Если есть толковый гайд по использованию. И задоначу👍

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Алекс Мёрфи

А как ты ещё предлагаешь структурировать диалоги и писать их чтобы не упустить повествование? Диалоги — есть ветвление с вариативностью в зависимости от обстоятельств.

Ответить
Развернуть ветку
11 комментариев
Иван Чернов

не согласен, если есть поддержка переменных и условные переходы.

Такая структура позволяет хотябы удержать в голове 100500 развилок.

Ответить
Развернуть ветку
6 комментариев
NightRunner

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

Ответить
Развернуть ветку
Панда МакКартни
Автор

Электрон прожорлив, здесь трудно что-то отрицать. Но плохая репутация в основном из-за простой точки входа в js в целом. Наибольшая проблема из-за физического объема сборок — +110мб оверхеда при почти что всех разумных оптимизациях.

Выбор обусловлен в первую очередь большим опытом с вебом, интересом к typescript и необходимостью кроссплатформенности

Ответить
Развернуть ветку
1 комментарий
Денис Денисов

На первый взгляд не понятно в чем отличие от самого популярного, пожалуй, инструмента Twine - https://twinery.org/
https://itch.io/games/tag-twine

Если же это не альтернатива Twine, большой вопрос - как это интегрируется в игровые движки? Без них тулза будет не так важна: stand alone решений хватает, а полноценный игровой движок с высокой гибкостью ты сам не сможешь сделать.
Еще один момент - насколько удобный синтаксис, чтобы править файлы по живому и проверять результат в редакторе, используя воспроизведение. Ручками ориентироваться может быть сложнее (например, хотим изменить одинаковый текст/условие в 50 местах).

https://www.inklestudios.com/ink/
Есть такой инструмент Ink, от создателей серии Sorcery! и ряда других игр
(https://store.steampowered.com/developer/inkle)

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

Ответить
Развернуть ветку
Панда МакКартни
Автор

Под прошлой статьей обсуждалось, если правильно помню, то:
1. Twine публикация в html, кривоват, нет билда в stand-alone, нет многих штук из коробки plug-n-play (возможно их можно сделать самому через js).
2. Ink — совершенно другая аудитория; ориентация на работу с текстом через подобие markdown, и работает только-только инструмент для последующей конвертации к себе.

Интеграция в игровые движки — в первую очередь делается самодостаточный инструментарий со сборкой под win/macos/linux из-за кроссплатформенности электрона, это уже сделано. Но формат не проприетарный, все игровые данные это json конфиги и папка с ассетами — это не закрывают возможность для написания плагина для того юнити.

От правки руками я как раз стараюсь убежать, это оказалось адом при работе с большим количеством текста; правка в 50-ю местах исправляется либо вложенными нодами, либо нодами-шаблонами. Это не анонсировано, но есть.

Ответить
Развернуть ветку
2 комментария
Ivan Sampovsky

Что отображается в поддержке 3D? там есть возможность запуска анимаций или прокрутка камер?

Ответить
Развернуть ветку
Панда МакКартни
Автор

Да, полноценная поддержка простых шейкеров, 3д объектов и освещения + камера. Работает через прослойку к three.js

Ответить
Развернуть ветку
3 комментария
Иван Чернов
Но до ранних билдов и исходников пока рано, меня не устраивает качество кода и состояние проекта.

Degrees of Lewdity собрать можно будет? Тогда нормально.

Короче:
- возможность задать иллюстрацию с использованием отпозиционированных gif файлов на основании внутренних переменных
- виджеты (типа функции) и теги, стопорящие выполнение каких-то вещей.

А что у тебя там под капотом - узбагойся, это как дырявые труселя под бальным платьем: никто не видит.

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

Ну и из критиканства:
1. Не хватает точек для кривых безье и разрывы линий.
Блок-схема растягивается до неприличия и не хватает инструмента для контроля.
2. Не хватает поддержки ГОСТ 19.701-90 + небольшого гайд по Дракону.
Блок-схематика она и есть блок-схематика. Всегда удобная штука, а Дракон - это методика, корорая позволяет дебажиться эффективнее.
https://habr.com/ru/post/541478/
3. Опционально: не хватает поддержки стековых сценариев по типу форта (либо собственно, минимальную реализацию форта на 27 команд от GA144 + каждый текстовый блок = "слово"). Иногда строку "?жив если !сходни иначе !дальше тогда" ввести проще.

PS: ну нафига электрон?? Может ещё денуво накатить сверху, так, чисто для проформы? Чем ванильный яваскрипт в HTML не устраивает?
Отзываю предложение коллаба, мараться об Электрон желания нет.

Ответить
Развернуть ветку
Панда МакКартни
Автор

Забыл ответить, управляемые токи для кривых Безье есть, просто их отображение сейчас скрыто.

Ответить
Развернуть ветку
Панда МакКартни
Автор

Блоксхемы нежизнеспособны вне визуализации алгоритмов; занимают слишком много места, интуитивность умирает из-за четких выделяющихся форм.

Электрон позволяет собирать билды и дает полноценный доступ к файловой системе через ноду :)

Ответить
Развернуть ветку
2 комментария
Soul

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

Ответить
Развернуть ветку
Виндовз

Чел, есть fb2, лол

Ответить
Развернуть ветку
Панда МакКартни
Автор

Это абсолютно другое ._о

Ответить
Развернуть ветку
Alex Krol

Интересный проект. Я делал проекты на TWINE, Renpy, Celtix, и щупал несколько не визуальных движков типа Ink и еще сколько-то. Я сейчас пишу в Scrivener. Много чего можно сказать. Но пока больше вопросов.

Сейчас вообще все реализую в почтовой рассылке, включая ветвления и т.п. Там много минусов, но и много плюсов.

Хочется узнать больше, и главное какой output? К примеру TWINE дает HTML+JS, Renpy, а Renpy b какой-нить Visual Novel Maker - билд.

Ответить
Развернуть ветку
Панда МакКартни
Автор

Ориентируюсь именно на сам редактор и уже клиент, как второстепенно. Редактор работает с json конфигами, в которых прописывается вся информация; рядом с json’ами лежит ассеты вроде изображений. Будет документация для возможности встроить в другой движок.

Встроенная сборка будет на основе электрон клиента без сильной кастомизации.

Ответить
Развернуть ветку
77 комментариев
Раскрывать всегда
null