Документация Nyxtale

Платформа NyxtaleЯзык Nyx

Подстановка {flag}

Шаблоны в репликах и в тексте опций; динамическое переименование персонажа.

Фигурные скобки в тексте подставляют значение флага:

@set sanity = 0
@set hero = 0
narrator: Рассудок: {sanity}.
{hero}: Я вернулся.
* choice "Сказать, что меня зовут {hero}"
    -> named
движок принял choiceline×2set×2jump

Работает в трёх местах: текст реплики, имя говорящего и текст опции выбора. В аргументах директив, именах меток и условиях подстановки нет — там имя флага пишется прямо.

Как выглядит подставленное значение

Тип флага Что попадёт в текст
int целое число: 100, -3
bool true или false
str сама строка
set элементы через запятую с пробелом: key, letter, photo

bool подставляется английскими словами true/false, поэтому для читателя его обычно показывают ветвлением:

@set has_key = 0
@if has_key
    narrator: Ключ лежал в кармане и был тёплым.
@unless has_key
    narrator: Карман был пуст.
движок принял line×2branch×2set

Один проход

Текст просматривается слева направо один раз. Подставленное значение второй раз не обрабатывается: если во флаге hero лежит строка {title}, читатель увидит {title}.

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

Когда скобка остаётся скобкой

Написано Читатель увидит
Он написал: { Он написал: { — скобка не закрыта
{имя} {имя} — внутри должен быть идентификатор: латиница, цифры, подчёркивание, не с цифры
{unknown} {unknown} — такого флага нет
{{ и }} { и }

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

narrator: В журнале стояло {{FILE REDACTED}} и больше ничего.
движок принял line

Ввод читателя

Флаг типа str обычно приходит от самого читателя:

@input hero "Как вас зовут?"
narrator: — Значит, {hero}, — повторил он, будто пробовал имя на вес.
движок принял lineinput

@input останавливает сцену, ждёт ввода и кладёт его во флаг. С number введённое читается как целое: из 13 лет получится 13, из текста без цифр — 0. Любой ввод разбирается, сцену он уронить не может.

Дальше имя живёт как обычный флаг: подставляется в реплики, в имя говорящего и доходит до концовки.

⚠️ Введённый текст — это текст читателя, а не ваш. Он попадёт на экран как есть, включая то, что читатель напишет назло. Если история читается вслух или её скриншотят — стоит подумать, где имя уместно, а где лучше обойтись обращением без имени.

Что дальше

Подстановка показывает состояние. Как это состояние меняется случайно и при этом воспроизводимо — на странице случайности и детерминизма.