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