Платформа NyxtaleСправочник
Контракт scene.json
Типы узлов и их поля — контракт между компилятором и обоими интерпретаторами.
Скомпилированная сцена — это граф узлов. Типов узлов девять, и это закрытый список: всё, что умеет история, выражено ими и ничем больше.
Читать эту страницу нужно, если вы пишете инструмент над форматом, разбираете экспорт или хотите понимать, во что превращается ваш текст. Для письма достаточно синтаксиса.
Оболочка сцены
format_version версия контракта узлов
nsx_version версия языка, на котором написан исходник
scene имя сцены
render тема оформления: база + примеси
entry узел, с которого начинается сцена
nodes все узлы, по идентификаторам
meta метки, схема флагов, предупреждения о контентеentry — единственная точка входа. Достижимость считается от неё: узел, до которого нет пути от
entry, недостижим по определению, а не по мнению.
Девять типов
line — реплика
Говорящий, необязательная эмоция, текст и следующий узел. next: null означает конец сцены — что
будет дальше, решает уровень главы, а не сцена.
Говорящий narrator зарезервирован: это повествование, а не персонаж по имени «narrator».
Разница не косметическая — по ней считается доля диалога в главе, и считать её по кавычкам в тексте
означало бы разойтись с тем, что рисует редактор.
choice — выбор
Список опций, необязательный таймер и опция, которая срабатывает по его истечении. У каждой опции:
текст, необязательное условие @if, необязательная цена @cost и следующий узел.
Условие делает опцию недоступной, а не невидимой на уровне контракта — как её показать (спрятать или показать серой), решает приложение.
set — присваивание
Имя флага, оператор (=, +=, -=), выражение и следующий узел. Один узел — одно присваивание.
branch — ветвление
Условие и две дороги: then и else. Любая из них может быть null — тогда ветка ведёт в конец
сцены.
effect — эффект
Имя эффекта, позиционные аргументы, именованные аргументы, следующий узел. Все 94 директивы
оформления компилируются сюда: узел хранит имя и аргументы, а что означает @bg или @heartbeat,
знает приложение.
input — ввод читателя
Флаг, подсказка, вид ввода (text или number), следующий узел. Останавливает выполнение до тех
пор, пока значение не придёт — как выбор, но без ветвления.
hold_to_act — удержание
Длительность жеста, необязательная подпись и признак fallback. Блокирующий узел: сцена ждёт, пока
читатель удержит.
fallback: true (по умолчанию) добавляет доступную альтернативу — нажатие или подтверждение. При
fallback: false валидатор помечает узел как риск доступности: у части читателей удержания нет
физически (интенсивность).
jump — переход
Только цель. Метки в исходнике — это адреса; в скомпилированной сцене они превращаются в переходы и
таблицу meta.labels.
end — концовка
Необязательное имя. Именованная концовка — это то, что читатель «нашёл»; она считается в прогрессе и в отчёте бот-обхода. Безымянная просто заканчивает сцену.
Текст локализуем
Всякий текст для читателя — реплика, текст опции, подсказка ввода, подпись удержания — хранится объектом с исходником и переводами. Перевод кладётся рядом, исходник остаётся авторским.
Что дальше
- Директивы — что именно попадает в узел
effect. - Сцены и главы — что стоит над сценой.