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

Платформа NyxtaleНачало

Первая сцена

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

История в Nyxtale — текстовый файл .nsx. Его можно открыть блокнотом, прочитать вслух и положить в git. Движок собирает из него сцену; в Studio та же сцена доступна графом, а превью показывает её ровно так, как увидит читатель.

Соберём сцену целиком. К концу страницы у вас будет дверь, выбор, последствие и две концовки.

Строка, которую видно

Минимальная история — это заголовок и одна реплика.

@nsx_version 1
@scene doorway
@render horror

narrator: Дверь была приоткрыта. Не настежь — именно приоткрыта, будто кто-то передумал на середине.

@end alone
движок принял endline

Три строки заголовка и одна строка прозы. Разберём заголовок:

Дальше идёт рукопись. Слово до двоеточия — говорящий. narrator зарезервирован: плашка с именем не рисуется, читатель видит только текст. Поставьте Марк — появится плашка «Марк», и строка станет его репликой. Подробно — реплики.

Строка @end alone завершает сцену и называет концовку. Имя концовки — ваше; движок по нему потом покажет читателю, что он нашёл, и посчитает, сколько концовок в истории осталось ненайденными.

Развилка

Развилку даёт *выбор:

@nsx_version 1
@scene doorway
@render horror

narrator: Дверь была приоткрыта. За ней — темнота, ровная и спокойная.

* choice "Войти"
    -> inside
* choice "Уйти и не оглядываться"
    -> away

@label inside
narrator: Внутри пахло пылью и чем-то ещё — тёплым, живым, неуместным.
@end trespass

@label away
narrator: Вы ушли. Дверь осталась приоткрытой ровно настолько же.
@end alone
движок принял end×2line×3choice

Две строки * choice подряд дают один узел выбора с двумя опциями. Отступ под опцией — её тело: что произойдёт, если читатель выберет её. Здесь тело — одна стрелка.

-> — переход, @label — его цель. Метка читателю не видна, это внутренний адрес. Подробно — переходы и метки.

Подпись под примером перечисляет узлы, в которые движок собрал этот текст: line, choice, end. Она появилась при сборке страницы — каждый пример в документации компилируется настоящим движком.

Память

Всё, что читатель сделал и что должно иметь последствия, история хранит во флагах.

@nsx_version 1
@scene doorway
@render horror

@set knows_smell = 0

narrator: Дверь была приоткрыта.

* choice "Войти"
    @set knows_smell = 1
    narrator: Внутри пахло тёплым. Живым.
    -> hall
* choice "Уйти"
    -> hall

@label hall
narrator: Через час вы стояли в коридоре и не могли объяснить, почему не уходите.

@if knows_smell == 1 -> remembers
@end alone

@label remembers
narrator: Могли. Просто не хотели произносить это вслух.
@end trespass
движок принял end×2line×4branchset×2choice

@set knows_smell = 0 объявляет флаг со стартовым значением, внутри опции @set knows_smell = 1 его меняет, а @if knows_smell == 1 -> remembers читает — и уводит только того, кто действительно вошёл.

Из этих трёх шагов — присвоить, изменить, прочитать — собираются любые последствия в истории. Подробно: флаги и выражения.

Типы флагов: int, bool, str, set. Арифметика целочисленная — дробных чисел в логике нет, чтобы превью, приложение и повтор по сохранению считали одинаково.

Атмосфера

Фон, звук, эффекты задаются директивами — строками с @:

@bg corridor_night
@ambient wind_howl loop
@fx film_grain 0.4
narrator: Свет фонаря доставал метра на три и там кончался.
движок принял lineeffect×3

@bg ставит фон, @ambient — звук петлёй, @fx — постэффект. Аргументы позиционные, порядок задан сигнатурой. Все 94 директивы с типами и границами — в справочнике, он собран из движка.

Ассеты пишутся идентификатором (corridor_night); файл загружается отдельно, в тексте стоит имя. Подробно — директивы.

Этот пример — фрагмент: у него нет заголовка и концовки, поэтому проверен только синтаксис. Целые сцены проверяются целиком, включая наличие выхода.

Что проверит движок

Перед публикацией история проходит проверку на целостность:

Каждая проверка называет узел и предлагает починку. Все коды — в справочнике диагностик. Проверяется проходимость истории; качество текста остаётся на вас.

Дальше

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