Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какая программа лучше всего подходит для создания новелл с несколькими концовками?

ПрограммированиеИгры+3
Иванна Дубровская
  · 504
Пишу код и т.п.  · 6 июл 2022  · itustinov.ru
Если имеется ввиду движок, насколько мне известно, RenPy используют иногда для открытых проектов. На самом деле, я удивлюсь, если в подобных играх требуется настолько сложная логика, что её нельзя на коленке за одну неделю самостоятельно сделать на SDL на приемлемом уровне, а сценарий хранить в виде дерева из двух видов узлов:
  1. реплика, которую можно просто прокручивать;
  2. выбор из нескольких вариантов, где каждый вариант ответа ведёт к разным узлам.
В общем, это почти ориентированный граф, а граф — это множество вершин и множество рёбер. Там нужно будет еще присовокупить варианты ответов к вопросам через какой-то особый вид связи (может быть, через отдельную таблицу).
Если сценарий не очень большой, вероятно его можно будет просто целиком считать в оперативку во время запуска (из TSV-файлов, например), где узлы и рёбра будут доступны как хэш-таблицы. Это вполне рабочий вариант на современных ПК, ведь даже «Война и мир» в виде текста занимает лишь несколько мегабайт.
Если сценарий чрезвычайно огромный или нужна поддержка первых пентиумов, можно вместе с индексами запихнуть сценарий в базу данных SQLite и каждый следующий шаг запрашивать с диска.
Конкретно в SDL понадобится только загрузка картинок и рисование их в 2D, обработка кликов мыши, ttf-шрифты (TTF_RenderUTF8_Solid) и проигрывание музыки.
В том, как описать граф, вне зависимости от его конечного представления, тоже ничего мудрёного нет, и ничего кроме текстового редактора не нужно. Просто нужно разбить повествование на линейные куски, каждый из которых будет записан в отдельном файле (YAML или JSON). В каждом таком файле будет список с двумя видами инструкций: обычными репликами и выбором. Вариант ответа может либо продолжать выполнение текущего линейного куска, либо переключать игрока на другой файл.
Повествование всегда начинается с файла с определённым именем (скажем, start.yml).
Пишется скрипт сборки на Python, который будет нумеровать все узлы и собирать их в один длинный список, а рёбра в другой длинный список, и конвертировать в формат, поддерживаемый движком.